summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Schinagl <oliver@schinagl.nl>2011-06-28 13:40:27 (GMT)
committerOliver Schinagl <oliver@schinagl.nl>2011-06-28 13:40:27 (GMT)
commitfecdd9457cd3912c2b89aff1f99db0ba669af93b (patch)
tree34bbc7387ded825e303c3117b6c6da2cbe1fd771
downloadAF903x_SRC-fecdd9457cd3912c2b89aff1f99db0ba669af93b.zip
AF903x_SRC-fecdd9457cd3912c2b89aff1f99db0ba669af93b.tar.gz
AF903x_SRC-fecdd9457cd3912c2b89aff1f99db0ba669af93b.tar.bz2
Initial checkin' of sourceball extracted from installer.
DRIVER_RELEASE_VERSION : v9.08.14.1 FW_RELEASE_VERSION : v8_8_63_0 API_RELEASE_VERSION : 200.20090402.0 Not sure what those version numbers relate to. Might be Driver, the actual driver (src) FW, the little bin file that is only a keymapping for the remote API, all the tuners or so from /api? No support for Asus U3100 mini (yet).
-rw-r--r--Makefile167
-rw-r--r--Makefile.release102
-rw-r--r--af35irtbl.binbin0 -> 238 bytes
-rw-r--r--api/Afa_AF9007.c69
-rw-r--r--api/Afa_AF9007.h60
-rw-r--r--api/Afa_AF9007_Script.h92
-rw-r--r--api/Afa_PEACOCK.c394
-rw-r--r--api/Afa_PEACOCK.h60
-rw-r--r--api/Afa_Peacock_Script.h110
-rw-r--r--api/Afa_Pictor_Script.h78
-rw-r--r--api/Common.h286
-rw-r--r--api/Elonics_E4000.c108
-rw-r--r--api/Elonics_E4000.h60
-rw-r--r--api/Elonics_E4000_Script.h171
-rw-r--r--api/FCI_FC2580.c119
-rw-r--r--api/FCI_FC2580.h62
-rw-r--r--api/FCI_FC2580_Script.h61
-rw-r--r--api/Fitipower_FC0011.c453
-rw-r--r--api/Fitipower_FC0011.h61
-rw-r--r--api/Fitipower_FC0011_Script.h83
-rw-r--r--api/Fitipower_FC0012.c346
-rw-r--r--api/Fitipower_FC0012.h60
-rw-r--r--api/Fitipower_FC0012_Script.h77
-rw-r--r--api/Freescale_MC44CD02.c307
-rw-r--r--api/Freescale_MC44CD02.h61
-rw-r--r--api/Freescale_MC44CD02_Script.h129
-rw-r--r--api/ITD30x0.c703
-rw-r--r--api/ITD30x0.h254
-rw-r--r--api/Infineon_TUA6039.c248
-rw-r--r--api/Infineon_TUA6039.h60
-rw-r--r--api/Infineon_TUA6039_Script.h107
-rw-r--r--api/Infineon_TUA8010.c309
-rw-r--r--api/Infineon_TUA8010.h60
-rw-r--r--api/Infineon_TUA8010_Script.h64
-rw-r--r--api/Infineon_TUA9001.c283
-rw-r--r--api/Infineon_TUA9001.h61
-rw-r--r--api/Infineon_TUA9001_Script.h65
-rw-r--r--api/Integrant_ITD3020.c106
-rw-r--r--api/Integrant_ITD3020.h60
-rw-r--r--api/Integrant_ITD3020_Script.h92
-rw-r--r--api/MXL5005.c2783
-rw-r--r--api/MXL5005.h68
-rw-r--r--api/MXL5005_Initialize.c1259
-rw-r--r--api/Maxlinear_MXL5005.c325
-rw-r--r--api/Maxlinear_MXL5005.h64
-rw-r--r--api/Maxlinear_MXL5005_Script.h88
-rw-r--r--api/Microtune_MT2260B0.c115
-rw-r--r--api/Microtune_MT2260B0.h66
-rw-r--r--api/Microtune_MT2260B0_Script.h130
-rw-r--r--api/Microtune_MT2266.c178
-rw-r--r--api/Microtune_MT2266.h71
-rw-r--r--api/Microtune_MT2266_Script.h89
-rw-r--r--api/Microtune_MT2266_TA4029CTC_Script.h89
-rw-r--r--api/Panasonic_ENV77H11D5.c114
-rw-r--r--api/Panasonic_ENV77H11D5.h60
-rw-r--r--api/Panasonic_ENV77H11D5_Script.h128
-rw-r--r--api/Peacock.c2
-rw-r--r--api/Peacock.h0
-rw-r--r--api/Philips_FQD1218ME_MK5.c146
-rw-r--r--api/Philips_FQD1218ME_MK5.h60
-rw-r--r--api/Philips_FQD1218ME_MK5_Script.h92
-rw-r--r--api/Philips_TD1316AFIHP.c136
-rw-r--r--api/Philips_TD1316AFIHP.h60
-rw-r--r--api/Philips_TD1316AFIHP_Script.h78
-rw-r--r--api/Philips_TD1316_Script.h78
-rw-r--r--api/Philips_TDA18271.c139
-rw-r--r--api/Philips_TDA18271.h60
-rw-r--r--api/Philips_TDA18271_C2.c128
-rw-r--r--api/Philips_TDA18271_C2.h42
-rw-r--r--api/Philips_TDA18271_C2_Askey.c128
-rw-r--r--api/Philips_TDA18271_C2_Askey.h42
-rw-r--r--api/Philips_TDA18271_C2_Askey_Script.h58
-rw-r--r--api/Philips_TDA18271_C2_Script.h58
-rw-r--r--api/Philips_TDA18271_Script.h57
-rw-r--r--api/Philips_TDA18291HN.c166
-rw-r--r--api/Philips_TDA18291HN.h60
-rw-r--r--api/Philips_TDA18291HN_Script.h84
-rw-r--r--api/TDA18271.c2933
-rw-r--r--api/TDA18271.h67
-rw-r--r--api/TDA18271Local.h650
-rw-r--r--api/TDA18271StaticInstance_C2.h1670
-rw-r--r--api/TDA18271StaticInstance_C2_Askey.h1668
-rw-r--r--api/TDA18271_C2.c3599
-rw-r--r--api/TDA18271_C2.h177
-rw-r--r--api/TDA18271_C2_Askey.c3637
-rw-r--r--api/TDA18271_C2_Askey.h177
-rw-r--r--api/TDA18271local_C2.h891
-rw-r--r--api/TDA18271local_C2_Askey.h891
-rw-r--r--api/TDA18291.c1315
-rw-r--r--api/TDA18291.h74
-rw-r--r--api/TDA18291local.h347
-rw-r--r--api/Xceive_XC3028L.c180
-rw-r--r--api/Xceive_XC3028L.h60
-rw-r--r--api/Xceive_XC3028L_Script.h58
-rw-r--r--api/Xceive_XC4000.c213
-rw-r--r--api/Xceive_XC4000.h60
-rw-r--r--api/Xceive_XC4000_Script.h58
-rw-r--r--api/cmd.c990
-rw-r--r--api/cmd.h209
-rw-r--r--api/demodulator.c462
-rw-r--r--api/demodulator.h1305
-rw-r--r--api/demodulatorextend.c750
-rw-r--r--api/demodulatorextend.h1406
-rw-r--r--api/driver_tua8010.c366
-rw-r--r--api/driver_tua8010.h114
-rw-r--r--api/driver_tua8010_NeededFunctions.h98
-rw-r--r--api/driver_tua9001.c409
-rw-r--r--api/driver_tua9001.h112
-rw-r--r--api/driver_tua9001_NeededFunctions.h77
-rw-r--r--api/e4000.c859
-rw-r--r--api/e4000.h15
-rw-r--r--api/error.h147
-rw-r--r--api/fc2580.c451
-rw-r--r--api/fc2580.h191
-rw-r--r--api/firmware.h10713
-rw-r--r--api/i2c_driver.c65
-rw-r--r--api/i2c_driver.h21
-rw-r--r--api/inttype.h40
-rw-r--r--api/iocontrol.h738
-rw-r--r--api/mt2260.c1992
-rw-r--r--api/mt2260.h611
-rw-r--r--api/mt2260_userdef.c221
-rw-r--r--api/mt2260_userdef.h250
-rw-r--r--api/mt2266.c2368
-rw-r--r--api/mt2266.h780
-rw-r--r--api/mt2266_userdef.c545
-rw-r--r--api/mt2266_userdef.h288
-rw-r--r--api/mt_errordef.h143
-rw-r--r--api/register.h13519
-rw-r--r--api/standard.c4093
-rw-r--r--api/standard.h1013
-rw-r--r--api/type.h915
-rw-r--r--api/usb2impl.c177
-rw-r--r--api/usb2impl.h38
-rw-r--r--api/user.c142
-rw-r--r--api/user.h122
-rw-r--r--api/variable.h271
-rw-r--r--api/version.h3
-rw-r--r--api/xc3028_channelmaps.h2601
-rw-r--r--api/xc3028_control.c549
-rw-r--r--api/xc3028_control.h180
-rw-r--r--api/xc3028_firmwares.h16191
-rw-r--r--api/xc3028_scodes.h664
-rw-r--r--api/xc4000_channelmaps.h4028
-rw-r--r--api/xc4000_control.c347
-rw-r--r--api/xc4000_control.h145
-rw-r--r--api/xc4000_firmwares.h2993
-rw-r--r--api/xc4000_scodes.h906
-rw-r--r--api/xc4000_standards.h127
-rw-r--r--src/af903x-core.c126
-rw-r--r--src/af903x-devices.c214
-rw-r--r--src/af903x-drv.c1579
-rw-r--r--src/af903x-fe.c249
-rw-r--r--src/af903x-ioctl.h29
-rw-r--r--src/af903x-tuner.c92
-rw-r--r--src/af903x.h225
-rw-r--r--src/userdef.h24
-rw-r--r--v4l/kernel-2.6.18/demux.h278
-rw-r--r--v4l/kernel-2.6.18/dmxdev.h108
-rw-r--r--v4l/kernel-2.6.18/dvb-pll.h64
-rw-r--r--v4l/kernel-2.6.18/dvb-usb-ids.h110
-rw-r--r--v4l/kernel-2.6.18/dvb-usb.h346
-rw-r--r--v4l/kernel-2.6.18/dvb_demux.h140
-rw-r--r--v4l/kernel-2.6.18/dvb_frontend.h163
-rw-r--r--v4l/kernel-2.6.18/dvb_net.h46
-rw-r--r--v4l/kernel-2.6.18/dvb_ringbuffer.h174
-rw-r--r--v4l/kernel-2.6.18/dvbdev.h105
-rw-r--r--v4l/kernel-2.6.19/demux.h278
-rw-r--r--v4l/kernel-2.6.19/dmxdev.h108
-rw-r--r--v4l/kernel-2.6.19/dvb-pll.h64
-rw-r--r--v4l/kernel-2.6.19/dvb-usb-ids.h131
-rw-r--r--v4l/kernel-2.6.19/dvb-usb.h408
-rw-r--r--v4l/kernel-2.6.19/dvb_demux.h140
-rw-r--r--v4l/kernel-2.6.19/dvb_frontend.h169
-rw-r--r--v4l/kernel-2.6.19/dvb_net.h46
-rw-r--r--v4l/kernel-2.6.19/dvb_ringbuffer.h174
-rw-r--r--v4l/kernel-2.6.19/dvbdev.h127
-rw-r--r--v4l/kernel-2.6.20/demux.h278
-rw-r--r--v4l/kernel-2.6.20/dmxdev.h108
-rw-r--r--v4l/kernel-2.6.20/dvb-pll.h67
-rw-r--r--v4l/kernel-2.6.20/dvb-usb-ids.h139
-rw-r--r--v4l/kernel-2.6.20/dvb-usb.h408
-rw-r--r--v4l/kernel-2.6.20/dvb_demux.h140
-rw-r--r--v4l/kernel-2.6.20/dvb_frontend.h169
-rw-r--r--v4l/kernel-2.6.20/dvb_net.h46
-rw-r--r--v4l/kernel-2.6.20/dvb_ringbuffer.h174
-rw-r--r--v4l/kernel-2.6.20/dvbdev.h127
-rw-r--r--v4l/kernel-2.6.21/demux.h278
-rw-r--r--v4l/kernel-2.6.21/dmxdev.h108
-rw-r--r--v4l/kernel-2.6.21/dvb-pll.h67
-rw-r--r--v4l/kernel-2.6.21/dvb-usb-ids.h144
-rw-r--r--v4l/kernel-2.6.21/dvb-usb.h408
-rw-r--r--v4l/kernel-2.6.21/dvb_demux.h140
-rw-r--r--v4l/kernel-2.6.21/dvb_frontend.h169
-rw-r--r--v4l/kernel-2.6.21/dvb_net.h46
-rw-r--r--v4l/kernel-2.6.21/dvb_ringbuffer.h174
-rw-r--r--v4l/kernel-2.6.21/dvbdev.h127
-rw-r--r--v4l/kernel-2.6.22/demux.h278
-rw-r--r--v4l/kernel-2.6.22/dmxdev.h110
-rw-r--r--v4l/kernel-2.6.22/dvb-pll.h81
-rw-r--r--v4l/kernel-2.6.22/dvb-usb-ids.h155
-rw-r--r--v4l/kernel-2.6.22/dvb-usb.h408
-rw-r--r--v4l/kernel-2.6.22/dvb_demux.h140
-rw-r--r--v4l/kernel-2.6.22/dvb_frontend.h169
-rw-r--r--v4l/kernel-2.6.22/dvb_net.h47
-rw-r--r--v4l/kernel-2.6.22/dvb_ringbuffer.h174
-rw-r--r--v4l/kernel-2.6.22/dvbdev.h128
-rw-r--r--v4l/kernel-2.6.23/demux.h278
-rw-r--r--v4l/kernel-2.6.23/dmxdev.h110
-rw-r--r--v4l/kernel-2.6.23/dvb-pll.h60
-rw-r--r--v4l/kernel-2.6.23/dvb-usb-ids.h161
-rw-r--r--v4l/kernel-2.6.23/dvb-usb.h397
-rw-r--r--v4l/kernel-2.6.23/dvb_demux.h140
-rw-r--r--v4l/kernel-2.6.23/dvb_frontend.h169
-rw-r--r--v4l/kernel-2.6.23/dvb_net.h47
-rw-r--r--v4l/kernel-2.6.23/dvb_ringbuffer.h174
-rw-r--r--v4l/kernel-2.6.23/dvbdev.h128
-rw-r--r--v4l/kernel-2.6.24/demux.h278
-rw-r--r--v4l/kernel-2.6.24/dmxdev.h110
-rw-r--r--v4l/kernel-2.6.24/dvb-pll.h60
-rw-r--r--v4l/kernel-2.6.24/dvb-usb-ids.h175
-rw-r--r--v4l/kernel-2.6.24/dvb-usb.h397
-rw-r--r--v4l/kernel-2.6.24/dvb_demux.h140
-rw-r--r--v4l/kernel-2.6.24/dvb_frontend.h180
-rw-r--r--v4l/kernel-2.6.24/dvb_net.h47
-rw-r--r--v4l/kernel-2.6.24/dvb_ringbuffer.h174
-rw-r--r--v4l/kernel-2.6.24/dvbdev.h128
-rw-r--r--v4l/kernel-2.6.25/demux.h278
-rw-r--r--v4l/kernel-2.6.25/dmxdev.h110
-rw-r--r--v4l/kernel-2.6.25/dvb-pll.h60
-rw-r--r--v4l/kernel-2.6.25/dvb-usb-ids.h197
-rw-r--r--v4l/kernel-2.6.25/dvb-usb.h397
-rw-r--r--v4l/kernel-2.6.25/dvb_demux.h140
-rw-r--r--v4l/kernel-2.6.25/dvb_frontend.h207
-rw-r--r--v4l/kernel-2.6.25/dvb_net.h47
-rw-r--r--v4l/kernel-2.6.25/dvb_ringbuffer.h174
-rw-r--r--v4l/kernel-2.6.25/dvbdev.h128
-rw-r--r--v4l/kernel-2.6.26/demux.h280
-rw-r--r--v4l/kernel-2.6.26/dmxdev.h110
-rw-r--r--v4l/kernel-2.6.26/dvb-pll.h51
-rw-r--r--v4l/kernel-2.6.26/dvb-usb-ids.h201
-rw-r--r--v4l/kernel-2.6.26/dvb-usb.h400
-rw-r--r--v4l/kernel-2.6.26/dvb_demux.h140
-rw-r--r--v4l/kernel-2.6.26/dvb_frontend.h207
-rw-r--r--v4l/kernel-2.6.26/dvb_net.h47
-rw-r--r--v4l/kernel-2.6.26/dvb_ringbuffer.h182
-rw-r--r--v4l/kernel-2.6.26/dvbdev.h139
-rw-r--r--v4l/kernel-2.6.27/demux.h280
-rw-r--r--v4l/kernel-2.6.27/dmxdev.h110
-rw-r--r--v4l/kernel-2.6.27/dvb-pll.h52
-rw-r--r--v4l/kernel-2.6.27/dvb-usb-ids.h210
-rw-r--r--v4l/kernel-2.6.27/dvb-usb.h400
-rw-r--r--v4l/kernel-2.6.27/dvb_demux.h140
-rw-r--r--v4l/kernel-2.6.27/dvb_frontend.h207
-rw-r--r--v4l/kernel-2.6.27/dvb_net.h47
-rw-r--r--v4l/kernel-2.6.27/dvb_ringbuffer.h186
-rw-r--r--v4l/kernel-2.6.27/dvbdev.h139
-rw-r--r--v4l/kernel-2.6.28/demux.h280
-rw-r--r--v4l/kernel-2.6.28/dmxdev.h110
-rw-r--r--v4l/kernel-2.6.28/dvb-pll.h52
-rw-r--r--v4l/kernel-2.6.28/dvb-usb-ids.h237
-rw-r--r--v4l/kernel-2.6.28/dvb-usb.h400
-rw-r--r--v4l/kernel-2.6.28/dvb_demux.h140
-rw-r--r--v4l/kernel-2.6.28/dvb_frontend.h240
-rw-r--r--v4l/kernel-2.6.28/dvb_net.h47
-rw-r--r--v4l/kernel-2.6.28/dvb_ringbuffer.h186
-rw-r--r--v4l/kernel-2.6.28/dvbdev.h143
-rw-r--r--v4l/kernel-2.6.29/demux.h280
-rw-r--r--v4l/kernel-2.6.29/dmxdev.h110
-rw-r--r--v4l/kernel-2.6.29/dvb-pll.h52
-rw-r--r--v4l/kernel-2.6.29/dvb-usb-ids.h237
-rw-r--r--v4l/kernel-2.6.29/dvb-usb.h400
-rw-r--r--v4l/kernel-2.6.29/dvb_demux.h140
-rw-r--r--v4l/kernel-2.6.29/dvb_frontend.h240
-rw-r--r--v4l/kernel-2.6.29/dvb_net.h47
-rw-r--r--v4l/kernel-2.6.29/dvb_ringbuffer.h186
-rw-r--r--v4l/kernel-2.6.29/dvbdev.h143
-rw-r--r--v4l/kernel-2.6.tmp/compat.h503
-rw-r--r--v4l/kernel-2.6.tmp/demux.h278
-rw-r--r--v4l/kernel-2.6.tmp/dmxdev.c1126
-rw-r--r--v4l/kernel-2.6.tmp/dmxdev.h121
-rw-r--r--v4l/kernel-2.6.tmp/dummy_ram.h447
-rw-r--r--v4l/kernel-2.6.tmp/dvb-pll.c874
-rw-r--r--v4l/kernel-2.6.tmp/dvb-pll.h60
-rw-r--r--v4l/kernel-2.6.tmp/dvb-usb-common.h51
-rw-r--r--v4l/kernel-2.6.tmp/dvb-usb-dvb.c206
-rw-r--r--v4l/kernel-2.6.tmp/dvb-usb-firmware.c146
-rw-r--r--v4l/kernel-2.6.tmp/dvb-usb-i2c.c48
-rw-r--r--v4l/kernel-2.6.tmp/dvb-usb-ids.h183
-rw-r--r--v4l/kernel-2.6.tmp/dvb-usb-init.c285
-rw-r--r--v4l/kernel-2.6.tmp/dvb-usb-remote.c222
-rw-r--r--v4l/kernel-2.6.tmp/dvb-usb-urb.c95
-rw-r--r--v4l/kernel-2.6.tmp/dvb-usb.h412
-rw-r--r--v4l/kernel-2.6.tmp/dvb_demux.c1222
-rw-r--r--v4l/kernel-2.6.tmp/dvb_demux.h147
-rw-r--r--v4l/kernel-2.6.tmp/dvb_filter.c603
-rw-r--r--v4l/kernel-2.6.tmp/dvb_filter.h246
-rw-r--r--v4l/kernel-2.6.tmp/dvb_frontend.c1241
-rw-r--r--v4l/kernel-2.6.tmp/dvb_frontend.h214
-rw-r--r--v4l/kernel-2.6.tmp/dvb_math.c145
-rw-r--r--v4l/kernel-2.6.tmp/dvb_math.h58
-rw-r--r--v4l/kernel-2.6.tmp/dvb_net.c1576
-rw-r--r--v4l/kernel-2.6.tmp/dvb_net.h47
-rw-r--r--v4l/kernel-2.6.tmp/dvb_ringbuffer.c266
-rw-r--r--v4l/kernel-2.6.tmp/dvb_ringbuffer.h174
-rw-r--r--v4l/kernel-2.6.tmp/dvbdev.c445
-rw-r--r--v4l/kernel-2.6.tmp/dvbdev.h128
-rw-r--r--v4l/kernel-2.6.tmp/usb-urb.c247
-rw-r--r--v4l/kernel-2.6.tmp/usb_biu_reg.h557
-rw-r--r--v4l/kernel-2.6.tmp/usbdma_biu_reg.h172
310 files changed, 143392 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..714836d
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,167 @@
+module= dvb-usb-af903x
+EXTRA_CFLAGS = -DEXPORT_SYMTAB
+CURRENT = $(shell uname -r)
+KDIR = /lib/modules/$(CURRENT)/build
+PWD = $(shell pwd)
+ifneq (,$(findstring 2.6.16,$(CURRENT)))
+ KDIR26 := /lib/modules/$(CURRENT)/kernel/drivers/media/dvb/AF903X
+else
+ifneq (,$(findstring 2.6.17,$(CURRENT)))
+ KDIR26 := /lib/modules/$(CURRENT)/kernel/drivers/media/dvb/AF903X
+else
+ KDIR26 := /lib/modules/$(CURRENT)/kernel/drivers/media/dvb/dvb-usb
+endif
+endif
+
+DEST = /lib/modules/$(CURRENT)/kernel/$(MDIR)
+
+dvb-usb-af903x-objs := \
+ af903x-core.o af903x-devices.o af903x-drv.o af903x-fe.o af903x-tuner.o\
+ cmd.o standard.o demodulator.o demodulatorextend.o \
+ usb2impl.o user.o \
+ Afa_AF9007.o TDA18291.o Fitipower_FC0011.o\
+ Philips_TDA18291HN.o Microtune_MT2266.o mt2266.o \
+ mt2266_userdef.o Infineon_TUA9001.o driver_tua9001.o \
+ Afa_PEACOCK.o Infineon_TUA8010.o driver_tua8010.o\
+ e4000.o Elonics_E4000.o fc2580.o FCI_FC2580.o\
+ Fitipower_FC0012.o Freescale_MC44CD02.o Infineon_TUA6039.o\
+ ITD30x0.o Integrant_ITD3020.o Maxlinear_MXL5005.o MXL5005.o\
+ MXL5005_Initialize.o Microtune_MT2260B0.o mt2260.o\
+ mt2260_userdef.o Panasonic_ENV77H11D5.o Peacock.o\
+ Philips_FQD1218ME_MK5.o Philips_TD1316AFIHP.o xc3028_control.o\
+ Xceive_XC3028L.o i2c_driver.o xc4000_control.o Xceive_XC4000.o\
+ Philips_TDA18271.o TDA18271.o Philips_TDA18271_C2.o\
+ TDA18271_C2.o Philips_TDA18271_C2_Askey.o TDA18271_C2_Askey.o
+obj-m += dvb-usb-af903x.o
+
+ifneq (,$(findstring 2.6.16,$(CURRENT)))
+dvb-usb-objs := dvb-usb-firmware.o dvb-usb-init.o dvb-usb-urb.o \
+ dvb-usb-i2c.o dvb-usb-dvb.o dvb-usb-remote.o usb-urb.o
+obj-m += dvb-usb.o
+
+dvb-core-objs := dvbdev.o dmxdev.o dvb_demux.o dvb_filter.o \
+ dvb_frontend.o dvb_net.o dvb_ringbuffer.o dvb_math.o
+
+obj-m += dvb-core.o
+obj-m += dvb-pll.o
+else
+ifneq (,$(findstring 2.6.17,$(CURRENT)))
+dvb-usb-objs := dvb-usb-firmware.o dvb-usb-init.o dvb-usb-urb.o \
+ dvb-usb-i2c.o dvb-usb-dvb.o dvb-usb-remote.o usb-urb.o
+obj-m += dvb-usb.o
+
+dvb-core-objs := dvbdev.o dmxdev.o dvb_demux.o dvb_filter.o \
+ dvb_frontend.o dvb_net.o dvb_ringbuffer.o dvb_math.o
+
+obj-m += dvb-core.o
+obj-m += dvb-pll.o
+endif
+endif
+
+default:
+ifneq (,$(findstring 2.6.16,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.tmp/* ./
+endif
+ifneq (,$(findstring 2.6.17,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.tmp/* ./
+endif
+ifneq (,$(findstring 2.6.18,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.18/* ./
+endif
+ifneq (,$(findstring 2.6.19,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.19/* ./
+endif
+ifneq (,$(findstring 2.6.20,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.20/* ./
+endif
+ifneq (,$(findstring 2.6.21,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.21/* ./
+endif
+ifneq (,$(findstring 2.6.22,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.22/* ./
+endif
+ifneq (,$(findstring 2.6.23,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.23/* ./
+endif
+ifneq (,$(findstring 2.6.24,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.24/* ./
+endif
+ifneq (,$(findstring 2.6.25,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.25/* ./
+endif
+ifneq (,$(findstring 2.6.26,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.26/* ./
+endif
+ifneq (,$(findstring 2.6.27,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.27/* ./
+endif
+ifneq (,$(findstring 2.6.28,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.28/* ./
+endif
+ifneq (,$(findstring 2.6.29,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.29/* ./
+endif
+
+ @(cp api/*.* ./; cp api/.*.o.cmd ./; cp src/*.* ./)
+ make -C $(KDIR) SUBDIRS=$(PWD) modules
+
+
+ifneq (,$(findstring 2.4.,$(CURRENT)))
+install:
+ @install -d $(KDIR26)
+ @for i in dvb-core.o dvb-pll.o dvb-usb.o dvb-usb-af903x.o;do if [ -e "$$i" ]; then echo -n "$$i "; install -m 644 -c $$i $(KDIR26); fi; done; echo;
+ /sbin/depmod -a ${KERNELRELEASE}
+else
+install:
+ifneq (,$(findstring 2.6.16,$(CURRENT)))
+ @ mv /lib/modules/$(CURRENT)/kernel/drivers/media/dvb /tmp/
+ @install -d $(KDIR26)
+ @for i in dvb-core.ko dvb-pll.ko dvb-usb.ko dvb-usb-af903x.ko;do if [ -e "$$i" ]; then echo -n "$$i "; install -m 644 -c $$i $(KDIR26); fi; done; echo;
+else
+ifneq (,$(findstring 2.6.17,$(CURRENT)))
+ @ mv /lib/modules/$(CURRENT)/kernel/drivers/media/dvb /tmp/
+ @install -d $(KDIR26)
+ @for i in dvb-core.ko dvb-pll.ko dvb-usb.ko dvb-usb-af903x.ko;do if [ -e "$$i" ]; then echo -n "$$i "; install -m 644 -c $$i $(KDIR26); fi; done; echo;
+else
+ @-make remove
+ @install -d $(KDIR26)
+ @for i in dvb-usb-af903x.ko;do if [ -e "$$i" ]; then echo -n "$$i "; install -m 644 -c $$i $(KDIR26); fi; done; echo;
+endif
+endif
+ /sbin/depmod -a ${KERNELRELEASE}
+ @for i in af35irtbl.bin;do if [ -e "$$i" ]; then echo -n "$$i "; cp -rf af35irtbl.bin /lib/firmware/; fi; done; echo;
+endif
+
+remove:
+ifneq (,$(findstring 2.6.16,$(CURRENT)))
+ @ rm -rf /lib/modules/$(CURRENT)/kernel/drivers/media/dvb
+ @ mv /tmp/dvb /lib/modules/$(CURRENT)/kernel/drivers/media
+ echo -e "\nRemoving old $(KDIR26)/ files:"
+ @files='dvb-core.ko dvb-pll.ko dvb-usb.ko dvb-usb-af903x.ko'; for i in $$files;do if [ -e $(KDIR26)/$$i ]; then echo -n "$$i "; rm $(KDIR26)/$$i; fi; done; for i in $$files;do if [ -e $(KDIR26)/$$i.gz ]; then echo -n "$$i.gz "; rm $(KDIR26)/$$i.gz; fi; done; echo;
+else
+ifneq (,$(findstring 2.6.17,$(CURRENT)))
+ @ rm -rf /lib/modules/$(CURRENT)/kernel/drivers/media/dvb
+ @ mv /tmp/dvb /lib/modules/$(CURRENT)/kernel/drivers/media
+ echo -e "\nRemoving old $(KDIR26)/ files:"
+ @files='dvb-core.ko dvb-pll.ko dvb-usb.ko dvb-usb-af903x.ko'; for i in $$files;do if [ -e $(KDIR26)/$$i ]; then echo -n "$$i "; rm $(KDIR26)/$$i; fi; done; for i in $$files;do if [ -e $(KDIR26)/$$i.gz ]; then echo -n "$$i.gz "; rm $(KDIR26)/$$i.gz; fi; done; echo;
+else
+ echo -e "\nRemoving old $(KDIR26)/ files:"
+ @files='dvb-usb-af903x.ko'; for i in $$files;do if [ -e $(KDIR26)/$$i ]; then echo -n "$$i "; rm $(KDIR26)/$$i; fi; done; for i in $$files;do if [ -e $(KDIR26)/$$i.gz ]; then echo -n "$$i.gz "; rm $(KDIR26)/$$i.gz; fi; done; echo;
+ @files='dvb-af903x.ko'; for i in $$files;do if [ -e $(KDIR26)/$$i ]; then echo -n "$$i "; rm $(KDIR26)/$$i; fi; done; for i in $$files;do if [ -e $(KDIR26)/$$i.gz ]; then echo -n "$$i.gz "; rm $(KDIR26)/$$i.gz; fi; done; echo;
+endif
+endif
+
+clean:
+ @-rm -f *~ *.o *.ko .*.o.cmd .*.ko.cmd *.mod.c *.*~ *.c *.h \
+ demux.h dmxdev.h dvb-pll.h dvb-usb-ids.h dvb-usb.h dvb_demux.h dvb_frontend.h \
+ dvb_net.h dvb_ringbuffer.h dvbdev.h modules.order Module.markers Module.symvers
+
+release:
+ @-rm -rf *~ af903*.o *.ko .*.o.cmd .*.ko.cmd *.mod.c *.*~ *.c af903x*.h \
+ demux.h dmxdev.h dvb-pll.h dvb-usb-ids.h dvb-usb.h dvb_demux.h dvb_frontend.h \
+ dvb_net.h dvb_ringbuffer.h dvbdev.h
+ @-rm -rf api/*.*
+ @-mv *.h *.o api
+ @-make clean
+-include $(KDIR)/Rules.make
+
diff --git a/Makefile.release b/Makefile.release
new file mode 100644
index 0000000..9c6776e
--- /dev/null
+++ b/Makefile.release
@@ -0,0 +1,102 @@
+module= dvb-usb-af903x
+EXTRA_CFLAGS = -DEXPORT_SYMTAB
+CURRENT = $(shell uname -r)
+KDIR = /lib/modules/$(CURRENT)/build
+PWD = $(shell pwd)
+KDIR26 := /lib/modules/$(CURRENT)/kernel/drivers/media/dvb/dvb-usb
+DEST = /lib/modules/$(CURRENT)/kernel/$(MDIR)
+
+dvb-usb-af903x-objs := \
+ af903x-core.o af903x-devices.o af903x-drv.o af903x-fe.o af903x-tuner.o iocontrol.o\
+ cmd.o standard.o demodulator.o demodulatorextend.o \
+ usb2impl.o user.o \
+ Afa_AF9007.o TDA18291.o Fitipower_FC0011.o\
+ Philips_TDA18291HN.o Microtune_MT2266.o mt2266.o \
+ mt2266_userdef.o Infineon_TUA9001.o driver_tua9001.o \
+ Afa_PEACOCK.o Infineon_TUA8010.o driver_tua8010.o\
+ e4000.o Elonics_E4000.o fc2580.o FCI_FC2580.o\
+ Fitipower_FC0012.o Freescale_MC44CD02.o Infineon_TUA6039.o\
+ ITD30x0.o Integrant_ITD3020.o Maxlinear_MXL5005.o MXL5005.o\
+ MXL5005_Initialize.o Microtune_MT2260B0.o mt2260.o\
+ mt2260_userdef.o Panasonic_ENV77H11D5.o Peacock.o\
+ Philips_FQD1218ME_MK5.o Philips_TD1316AFIHP.o xc3028_control.o\
+ Xceive_XC3028L.o i2c_driver.o xc4000_control.o Xceive_XC4000.o\
+ Philips_TDA18271.o TDA18271.o Philips_TDA18271_C2.o\
+ TDA18271_C2.o Philips_TDA18271_C2_Askey.o TDA18271_C2_Askey.o
+
+obj-m += dvb-usb-af903x.o
+
+default:
+ifneq (,$(findstring 2.6.16,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.16/* ./
+endif
+ifneq (,$(findstring 2.6.17,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.17/* ./
+endif
+ifneq (,$(findstring 2.6.18,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.18/* ./
+endif
+ifneq (,$(findstring 2.6.19,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.19/* ./
+endif
+ifneq (,$(findstring 2.6.20,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.20/* ./
+endif
+ifneq (,$(findstring 2.6.21,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.21/* ./
+endif
+ifneq (,$(findstring 2.6.22,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.22/* ./
+endif
+ifneq (,$(findstring 2.6.23,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.23/* ./
+endif
+ifneq (,$(findstring 2.6.24,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.24/* ./
+endif
+ifneq (,$(findstring 2.6.25,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.25/* ./
+endif
+ifneq (,$(findstring 2.6.26,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.26/* ./
+endif
+ifneq (,$(findstring 2.6.27,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.27/* ./
+endif
+ifneq (,$(findstring 2.6.28,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.28/* ./
+endif
+ifneq (,$(findstring 2.6.29,$(CURRENT)))
+ @cp -f v4l/kernel-2.6.29/* ./
+endif
+
+ @(cp api/*.* ./; cp api/.*.o.cmd ./; cp src/*.* ./)
+ make -C $(KDIR) SUBDIRS=$(PWD) modules
+
+
+ifneq (,$(findstring 2.4.,$(CURRENT)))
+install:
+ @install -d $(KDIR26)
+ @for i in dvb-core.o dvb-pll.o dvb-usb.o dvb-usb-af903x.o;do if [ -e "$$i" ]; then echo -n "$$i "; install -m 644 -c $$i $(KDIR26); fi; done; echo;
+ /sbin/depmod -a ${KERNELRELEASE}
+else
+install:
+ @install -d $(KDIR26)
+ @for i in dvb-usb-af903x.ko;do if [ -e "$$i" ]; then echo -n "$$i "; install -m 644 -c $$i $(KDIR26); fi; done; echo;
+ /sbin/depmod -a ${KERNELRELEASE}
+ @for i in af35irtbl.bin;do if [ -e "$$i" ]; then echo -n "$$i "; cp -rf af35irtbl.bin /lib/firmware/; fi; done; echo;
+endif
+
+
+remove:
+ echo -e "\nRemoving old $(KDIR26)/ files:"
+ @files='dvb-usb-af903x.ko'; for i in $$files;do if [ -e $(KDIR26)/$$i ]; then echo -n "$$i "; rm $(KDIR26)/$$i; fi; done; for i in $$files;do if [ -e $(KDIR26)/$$i.gz ]; then echo -n "$$i.gz "; rm $(KDIR26)/$$i.gz; fi; done; echo;
+
+
+clean:
+ @-rm -f *~ *.o *.ko .*.o.cmd .*.ko.cmd *.mod.c *.*~ *.c *.h \
+ demux.h dmxdev.h dvb-pll.h dvb-usb-ids.h dvb-usb.h dvb_demux.h dvb_frontend.h \
+ dvb_net.h dvb_ringbuffer.h dvbdev.h modules.order Module.markers Module.symvers
+
+-include $(KDIR)/Rules.make
+
diff --git a/af35irtbl.bin b/af35irtbl.bin
new file mode 100644
index 0000000..09e4bfa
--- /dev/null
+++ b/af35irtbl.bin
Binary files differ
diff --git a/api/Afa_AF9007.c b/api/Afa_AF9007.c
new file mode 100644
index 0000000..140f4cb
--- /dev/null
+++ b/api/Afa_AF9007.c
@@ -0,0 +1,69 @@
+/**
+ * @(#)Afa_AF9007.cpp
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+//#include <stdio.h> // for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "Afa_AF9007_Script.h"
+
+
+Dword AF9007_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword AF9007_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword AF9007_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ return (Error_NO_ERROR);
+}
+
+
+TunerDescription tuner_AF9007 = {
+ AF9007_open,
+ AF9007_close,
+ AF9007_set,
+ AF9007_scripts,
+ AF9007_scriptSets,
+ 0, /** tuner i2c address */
+ 0, /** length of tuner register address */
+ 36167000, /** tuner if */
+ True, /** spectrum inverse */
+ 0xFF, /** tuner id */
+};
diff --git a/api/Afa_AF9007.h b/api/Afa_AF9007.h
new file mode 100644
index 0000000..83c1713
--- /dev/null
+++ b/api/Afa_AF9007.h
@@ -0,0 +1,60 @@
+/**
+ * @(#)Afa_AF9007.h
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __Afa_AF9007_H__
+#define __Afa_AF9007_H__
+
+
+#define AF9007_VER_MAJOR 2
+#define AF9007_VER_MINOR 0
+
+extern TunerDescription tuner_AF9007;
+
+
+/**
+ *
+ */
+Dword AF9007_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword AF9007_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword AF9007_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Afa_AF9007_Script.h b/api/Afa_AF9007_Script.h
new file mode 100644
index 0000000..2a422a7
--- /dev/null
+++ b/api/Afa_AF9007_Script.h
@@ -0,0 +1,92 @@
+/** script version */
+
+#define AF9007_ADDRESS 0xC0
+#define AF9007_SCRIPTSETLENGTH 0x00000001
+
+
+Word AF9007_scriptSets[] = {
+ 0x50
+};
+
+ValueSet AF9007_scripts[] = {
+ {0xF600, 0x5},
+ {0xF601, 0x8},
+ {0xF602, 0xb},
+ {0xF603, 0x0e},
+ {0xF604, 0x11},
+ {0xF605, 0x14},
+ {0xF606, 0x17},
+ {0xF607, 0x1f},
+ {0xF1E6, 0x01},
+ {0xF001, 0x00},
+ {0xF005, 0x01},
+ {0xF004, 0x00},
+ {0xF00A, 0x1B},
+ {0xF00B, 0x1C},
+ {0xF00C, 0x1B},
+ {0xF00D, 0x1C},
+ {0xF016, 0x10},
+ {0xF017, 0x04},
+ {0xF018, 0x05},
+ {0xF019, 0x04},
+ {0xF01A, 0x05},
+ {0xF021, 0x03},
+ {0xF022, 0x0A},
+ {0xF023, 0x0A},
+ {0xF000, 0x01},
+ {0xF047, 0x00},
+ {0xF007, 0x00},
+ {0xF12F, 0x00},
+ {0xF077, 0x00},
+ {0xF00A, 0x1A},
+ {0xF00B, 0x1B},
+ {0xF00C, 0x1A},
+ {0xF00D, 0x1B},
+ {0xF01F, 0x50},
+ {0xF020, 0x00},
+ {0xF029, 0x46},
+ {0xF02A, 0x00},
+ {0xF010, 0xDF},
+ {0xF011, 0x02},
+ {0xF00E, 0x44},
+ {0xF00F, 0x01},
+ {0xF014, 0xEB},
+ {0xF015, 0x02},
+ {0xF012, 0xF4},
+ {0xF013, 0x01},
+ {0x0066, 0x52},
+ {0xF01B, 0x26},
+ {0xF01C, 0x01},
+ {0xF01D, 0x12},
+ {0xF01E, 0x03},
+ {0xF025, 0xE8},
+ {0xF026, 0x00},
+ {0xF027, 0x5F},
+ {0xF028, 0x03},
+ {0x0044, 0xFF},
+ {0x0045, 0x03},
+ {0x0046, 0xFF},
+ {0x0047, 0x03},
+ {0x0048, 0xFF},
+ {0x0049, 0x03},
+ {0x004a, 0xFF},
+ {0x004b, 0x03},
+ {0x004c, 0xEB},
+ {0x004d, 0x02},
+ {0x0053, 0x68},
+ {0x0054, 0x03},
+ {0x0059, 0x12},
+ {0x005a, 0x03},
+ {0xF02B, 0x00},
+ {0xF02C, 0x01},
+ {0xF03B, 0x9A},
+ {0xF03C, 0x01},
+ {0xF03D, 0x5A},
+ {0xF03E, 0x01},
+ {0xF03F, 0x96},
+ {0xF040, 0x46},
+ {0xF031, 0x0},
+ {0x006b, 0x0A},
+ {0x006c, 0x14},
+ {0x006d, 0x08},
+}; \ No newline at end of file
diff --git a/api/Afa_PEACOCK.c b/api/Afa_PEACOCK.c
new file mode 100644
index 0000000..50fb84d
--- /dev/null
+++ b/api/Afa_PEACOCK.c
@@ -0,0 +1,394 @@
+/**
+ * @(#)Afa_PEACOCK.cpp
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2007 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "Afa_Peacock_Script.h"
+
+
+Dword PEACOCK_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword PEACOCK_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword PEACOCK_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ Dword error = Error_NO_ERROR;
+ Long ckxtal;
+ Byte l_band;
+ Byte lna_band;
+ Byte lna_cap;
+ Word n_div;
+ Long n;
+ Word m_lo;
+ Word lo_freq;
+ Byte lo_freq_15_10;
+ Byte lo_freq_9_4;
+ Byte lo_freq_3_0;
+ Long i;
+ Byte readTmp;
+ Byte lo_cap;
+ Long lo_cap_min = -1;
+ Long lo_cap_max = -1;
+ Byte lpf_cap = 0x0c;
+ Byte lpf_bw;
+#if 1
+ Byte lna_gain = 7;
+ Byte pgc_gain = 6;
+ Byte pga_gain = 0;
+ Byte ofsi = 0x20;
+ Byte ofsq = 0x20;
+#endif
+ Byte tmp = 0;
+
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ ckxtal = (Long) ganymede->crystalFrequency;
+ if (ckxtal == 0) {
+ error = Error_INVALID_XTAL_FREQ;
+ goto exit;
+ }
+
+
+ /////////////////////////////////////////////////// set debug port
+
+ tmp = 0;
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x07, 1, &tmp); // dgb_port 0:off
+ if (error) goto exit;
+
+ /////////////////////////////////////////////////// set frequency
+
+ if (frequency <= 400000) {
+ error = Error_FREQ_OUT_OF_RANGE;
+ goto exit;
+ } else if (frequency > 400000 && frequency <= 440000) {
+ l_band = 0;
+ lna_band = 0;
+ } else if (frequency > 440000 && frequency <= 484000) {
+ l_band = 0;
+ lna_band = 1;
+ } else if (frequency > 484000 && frequency <= 533000) {
+ l_band = 0;
+ lna_band = 2;
+ } else if (frequency > 533000 && frequency <= 587000) {
+ l_band = 0;
+ lna_band = 3;
+ } else if (frequency > 587000 && frequency <= 645000) {
+ l_band = 0;
+ lna_band = 4;
+ } else if (frequency > 645000 && frequency <= 710000) {
+ l_band = 0;
+ lna_band = 5;
+ } else if (frequency > 710000 && frequency <= 782000) {
+ l_band = 0;
+ lna_band = 6;
+ } else if (frequency > 782000 && frequency <= 860000) {
+ l_band = 0;
+ lna_band = 7;
+ } else if (frequency > 860000 && frequency <= 1450000) {
+ error = Error_FREQ_OUT_OF_RANGE;
+ goto exit;
+ } else if (frequency > 1450000 && frequency <= 1492000) {
+ l_band = 1;
+ lna_band = 0;
+ } else if (frequency > 1492000 && frequency <= 1660000) {
+ error = Error_FREQ_OUT_OF_RANGE;
+ goto exit;
+ } else if (frequency > 1660000 && frequency <= 1685000) {
+ l_band = 1;
+ lna_band = 1;
+ } else { // frequency > 1685000
+ error = Error_FREQ_OUT_OF_RANGE;
+ goto exit;
+ }
+
+ // set l_band
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x09, 1, &l_band);
+ if (error) goto exit;
+
+ // set lna_band
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x14, 1, &lna_band);
+ if (error) goto exit;
+
+ switch (lna_band)
+ {
+ case 0:
+ lna_cap = 0;
+ break;
+ case 1:
+ lna_cap = 7;
+ break;
+ case 2:
+ lna_cap = 15;
+ break;
+ case 3:
+ lna_cap = 23;
+ break;
+ case 4:
+ lna_cap = 32;
+ break;
+ case 5:
+ lna_cap = 39;
+ break;
+ case 6:
+ lna_cap = 48;
+ break;
+ case 7:
+ lna_cap = 55;
+ break;
+ }
+
+ // set lna_cap
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x13, 1, &lna_cap);
+ if (error) goto exit;
+
+ if (frequency <= 49000) {
+ error = Error_FREQ_OUT_OF_RANGE;
+ goto exit;
+ } else if (frequency > 49000 && frequency <= 74000) {
+ n_div = 48;
+ n = 0;
+ } else if (frequency > 74000 && frequency <= 111000) {
+ n_div = 32;
+ n = 1;
+ } else if (frequency > 111000 && frequency <= 148000) {
+ n_div = 24;
+ n = 2;
+ } else if (frequency > 148000 && frequency <= 222000) {
+ n_div = 16;
+ n = 3;
+ } else if (frequency > 222000 && frequency <= 296000) {
+ n_div = 12;
+ n = 4;
+ } else if (frequency > 296000 && frequency <= 445000) {
+ n_div = 8;
+ n = 5;
+ } else if (frequency > 445000 && frequency <= 560000) {
+ n_div = 6;
+ n = 6;
+ } else if (frequency > 560000 && frequency <= 890000) {
+ n_div = 4;
+ n = 7;
+ } else if (frequency > 1187000 && frequency <= 1780000) {
+ n_div = 2;
+ n = 0;
+ } else { // frequency >1780000
+ error = Error_FREQ_OUT_OF_RANGE;
+ goto exit;
+ }
+
+ // calculate frequency value
+ m_lo = (Word) (n_div * 32 * frequency / ckxtal);
+ lo_freq = (Word) n << 13;
+ lo_freq += m_lo;
+ lo_freq_15_10 = (lo_freq & (Word) 0xfc00) >> 10;
+ lo_freq_9_4 = (lo_freq & (Word) 0x03f0) >> 4;
+ lo_freq_3_0 = lo_freq & (Word) 0x000f;
+
+ // set lo_freq_15_10
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x0d, 1, &lo_freq_15_10);
+ if (error) goto exit;
+
+ // set lo_freq_9_4
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x0e, 1, &lo_freq_9_4);
+ if (error) goto exit;
+
+ // set lo_freq_3_0
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x0f, 1, &lo_freq_3_0);
+ if (error) goto exit;
+
+ // write
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x3f, 1, &tmp);
+ if (error) goto exit;
+
+ // calculate lo_cap
+ for (i = 0; i < 32; i++) {
+
+ // set 0x10
+ tmp = (Byte) i;
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x10, 1, &tmp);
+ if (error) goto exit;
+
+ // write
+ tmp = 0;
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x3f, 1, &tmp);
+ if (error) goto exit;
+
+ // read
+ tmp = 0;
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x01, 1, &tmp);
+ if (error) goto exit;
+
+ // get 0x02
+ error = Standard_readTunerRegisters (demodulator, chip, 0x02, 1, &readTmp);
+ if (error) goto exit;
+
+
+
+ readTmp = readTmp >> 6 & 0x03;
+
+ if (readTmp == 0 && lo_cap_min == -1)
+ lo_cap_min = i;
+
+ if (readTmp != 0 && lo_cap_min != -1 && lo_cap_max == -1)
+ lo_cap_max = i - 1;
+ }
+
+ if (lo_cap_min != -1 && lo_cap_max == -1)
+ lo_cap = (Byte) lo_cap_min;
+ else if (lo_cap_min == -1 && lo_cap_max == -1 && readTmp == 1)
+ lo_cap = 0;
+ else if (lo_cap_min == -1 && lo_cap_max == -1 && readTmp == 2)
+ lo_cap = 31;
+ else
+ lo_cap = (Byte) (lo_cap_min + lo_cap_max) / 2;
+
+ // set lo_cap
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x10, 1, &lo_cap);
+ if (error) goto exit;
+
+ // set lpf_cap
+ tmp = lpf_cap;
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x18, 1, &tmp);
+ if (error) goto exit;
+
+ // write
+ tmp = 0;
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x3f, 1, &tmp);
+ if (error) goto exit;
+
+
+ /////////////////////////////////////////////////// select BW
+
+ if (bandwidth == 5000)
+ lpf_bw = 0;
+ else if (bandwidth == 5500)
+ lpf_bw = 1;
+ else if (bandwidth == 6000)
+ lpf_bw = 2;
+ else if (bandwidth == 6500)
+ lpf_bw = 3;
+ else if (bandwidth == 7000)
+ lpf_bw = 4;
+ else if (bandwidth == 7500)
+ lpf_bw = 5;
+ else if (bandwidth == 8000)
+ lpf_bw = 6;
+ else if (bandwidth == 8500)
+ lpf_bw = 7;
+ else {
+ error = Error_INVALID_BW;
+ goto exit;
+ }
+
+ // set bandwidth
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x19, 1, &lpf_bw);
+ if (error) goto exit;
+
+ // write
+ tmp = 0;
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x3f, 1, &tmp);
+ if (error) goto exit;
+
+
+ /////////////////////////////////////////////////// tune gain
+#if 1
+ // set lna_gain
+ tmp = lna_gain;
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x12, 1, &tmp);
+ if (error) goto exit;
+
+ // set pgc_gain
+ tmp = pgc_gain;
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x17, 1, &tmp);
+ if (error) goto exit;
+
+ // set pga_gain
+ tmp = pga_gain;
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x15, 1, &tmp);
+ if (error) goto exit;
+
+ // set 0x22
+ tmp = 0x02;
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x22, 1, &tmp);
+ if (error) goto exit;
+
+ // set ofsi
+ tmp = ofsi;
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x1a, 1, &tmp);
+ if (error) goto exit;
+
+ // set ofsq
+ tmp = ofsq;
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x1b, 1, &tmp);
+ if (error) goto exit;
+
+ // set 1c
+ tmp = 0x2f;
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x1c, 1, &tmp);
+ if (error) goto exit;
+
+ // write
+ tmp = 0;
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x3f, 1, &tmp);
+ if (error) goto exit;
+#endif
+
+exit:
+
+ return error;
+}
+
+
+TunerDescription tuner_PEACOCK = {
+ PEACOCK_open,
+ PEACOCK_close,
+ PEACOCK_set,
+ PEACOCK_scripts,
+ PEACOCK_scriptSets,
+ PEACOCK_ADDRESS, /** tuner i2c address */
+ 1, /** length of tuner register address */
+ 0, /** tuner if */
+ True, /** spectrum inverse */
+ 0x25, /** tuner id */
+};
diff --git a/api/Afa_PEACOCK.h b/api/Afa_PEACOCK.h
new file mode 100644
index 0000000..84ca6c8
--- /dev/null
+++ b/api/Afa_PEACOCK.h
@@ -0,0 +1,60 @@
+/**
+ * @(#)Afa_PEACOCK.h
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2007 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __Afa_PEACOCK_H__
+#define __Afa_PEACOCK_H__
+
+
+#define PEACOCK_VER_MAJOR 2
+#define PEACOCK_VER_MINOR 0
+
+extern TunerDescription tuner_PEACOCK;
+
+
+/**
+ *
+ */
+Dword PEACOCK_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword PEACOCK_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword PEACOCK_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Afa_Peacock_Script.h b/api/Afa_Peacock_Script.h
new file mode 100644
index 0000000..5321f06
--- /dev/null
+++ b/api/Afa_Peacock_Script.h
@@ -0,0 +1,110 @@
+/** script version */
+
+#define PEACOCK_ADDRESS 0x9E
+#define PEACOCK_SCRIPTSETLENGTH 0x00000001
+
+
+Word PEACOCK_scriptSets[] = {
+ 0x62
+};
+
+ValueSet PEACOCK_scripts[] = {
+ {0xF600, 0x05},
+ {0xF601, 0x08},
+ {0xF602, 0x0B},
+ {0xF603, 0x0E},
+ {0xF604, 0x11},
+ {0xF605, 0x14},
+ {0xF606, 0x17},
+ {0xF607, 0x20},
+ {0xF80F, 0x40},
+ {0xF810, 0x54},
+ {0xF811, 0x5a},
+ {0x009f, 0xCF},
+ {0x009e, 0xE1},
+ {0x00a5, 0x01},
+ {0x00a2, 0x01},
+ {0x00a3, 0x32},
+ {0xF1E6, 0x01},
+ {0xF00A, 0x19},
+ {0xF00B, 0x1A},
+ {0xF00C, 0x19},
+ {0xF00D, 0x1A},
+ {0xF016, 0x10},
+ {0xF017, 0x04},
+ {0xF018, 0x05},
+ {0xF019, 0x04},
+ {0xF01A, 0x05},
+ {0xF021, 0x03},
+ {0xF022, 0x0A},
+ {0xF023, 0x0A},
+ {0xF078, 0x00},
+ {0xF047, 0x01},
+ {0xF007, 0x01},
+ {0xF12F, 0x01},
+ {0xF077, 0x01},
+ {0x0079, 0x01},
+ {0x006e, 0x00},
+ {0x006f, 0x00},
+ {0xF01F, 0xA0},
+ {0xF020, 0x00},
+ {0xF029, 0x8C},
+ {0xF02A, 0x00},
+ {0xF010, 0xE3},
+ {0xF011, 0x03},
+ {0xF00E, 0xFF},
+ {0xF00F, 0x01},
+ {0xF014, 0x58},
+ {0xF015, 0x03},
+ {0xF012, 0xFF},
+ {0xF013, 0x01},
+ {0xF01B, 0xEF},
+ {0xF01C, 0x01},
+ {0xF01D, 0x68},
+ {0xF01E, 0x03},
+ {0xF025, 0xEF},
+ {0xF026, 0x01},
+ {0xF027, 0x68},
+ {0xF028, 0x03},
+ {0x0044, 0xFF},
+ {0x0045, 0x00},
+ {0x0046, 0xE0},
+ {0x0047, 0x00},
+ {0x0048, 0x70},
+ {0x0049, 0x00},
+ {0x004a, 0x50},
+ {0x004b, 0x00},
+ {0x004c, 0x58},
+ {0x004d, 0x03},
+ {0x0053, 0x68},
+ {0x0054, 0x03},
+ {0x0059, 0xFF},
+ {0x005a, 0x01},
+ {0x0081, 0xFF},
+ {0x0082, 0x01},
+ {0x0083, 0xEF},
+ {0x0084, 0x01},
+ {0x004f, 0x80},
+ {0x0050, 0x03},
+ {0x0055, 0x90},
+ {0x0056, 0x03},
+ {0x005b, 0xFF},
+ {0x005c, 0x01},
+ {0x0051, 0x8C},
+ {0x0052, 0x03},
+ {0x0057, 0x9C},
+ {0x0058, 0x03},
+ {0x005d, 0xFF},
+ {0x005e, 0x01},
+ {0xF02B, 0x00},
+ {0x0070, 0x00},
+ {0x0066, 0x52},
+ {0x009a, 0xFE},
+ {0x009b, 0xFE},
+ {0x009c, 0x99},
+ {0x009d, 0xFE},
+ {0xF02C, 0x01},
+ {0x006b, 0x0A},
+ {0x006c, 0x14},
+ {0x006d, 0x08},
+}; \ No newline at end of file
diff --git a/api/Afa_Pictor_Script.h b/api/Afa_Pictor_Script.h
new file mode 100644
index 0000000..60a0b71
--- /dev/null
+++ b/api/Afa_Pictor_Script.h
@@ -0,0 +1,78 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)Afa_Pictor_Script.h
+*
+* Copyright 2009 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 5
+#define VERSION2 66
+#define VERSION3 12
+#define VERSION4 0
+
+
+
+#define PICTOR_ADDRESS 0xC0
+#define PICTOR_SCRIPTSETLENGTH 0x00000001
+
+Word Pictor_scriptSets[] = {
+0x32
+};
+
+ValueSet Pictor_scripts[] = {
+ {0x, 0x00},
+ {0x, 0x01},
+ {0x, 0x01},
+ {0x, 0x02},
+ {0x, 0x02},
+ {0x, 0x03},
+ {0x, 0x04},
+ {0x, 0x07},
+ {0x, 0xB0},
+ {0x, 0xE8},
+ {0x0043, 0x00},
+ {0x0046, 0x35},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x0068, 0x0A},
+ {0x006a, 0x03},
+ {0x0071, 0x05},
+ {0x0072, 0x02},
+ {0x0075, 0x8C},
+ {0x0076, 0x8C},
+ {0x0077, 0x8C},
+ {0x0078, 0xFF},
+ {0x0079, 0x01},
+ {0x007f, 0x00},
+ {0x0082, 0x12},
+ {0x0083, 0x02},
+ {0x0084, 0x0a},
+ {0x0085, 0x03},
+ {0x0086, 0xC8},
+ {0x0087, 0xB4},
+ {0x0088, 0xE6},
+ {0x0089, 0xCD},
+ {0x0093, 0x00},
+ {0x0094, 0x00},
+ {0x0095, 0x00},
+ {0x0096, 0x00},
+ {0x009b, 0x3C},
+ {0x009c, 0x28},
+ {0x00a4, 0x5A},
+ {0x00b3, 0x02},
+ {0x00b4, 0x32},
+ {0x00b6, 0x14},
+ {0x00c1, 0x00},
+ {0x00c3, 0x01},
+ {0x00c4, 0x00},
+ {0xF01F, 0x8C},
+ {0xF020, 0x00},
+ {0xF029, 0x8C},
+ {0xF02A, 0x00},
+ {0xF077, 0x01},
+
+};
diff --git a/api/Common.h b/api/Common.h
new file mode 100644
index 0000000..ddde613
--- /dev/null
+++ b/api/Common.h
@@ -0,0 +1,286 @@
+#pragma once
+
+typedef unsigned char BYTE; /** At least 1 Byte */
+typedef unsigned short WORD; /** At least 2 Bytes */
+typedef signed short _s16;
+typedef unsigned long DWORD; /** At least 4 Bytes */
+typedef void * HANDLE; /** Pointer to memory location */
+
+#define TUNER_REGS_NUM 104
+#define INITCTRL_NUM 40
+#ifdef _MXL_PRODUCTION
+#define CHCTRL_NUM 39
+#else
+#define CHCTRL_NUM 36
+#endif
+
+#define MXLCTRL_NUM 189
+
+#define MASTER_CONTROL_ADDR 9
+
+/** Enumeration of AGC Mode */
+typedef enum
+{
+ MXL_DUAL_AGC = 0 ,
+ MXL_SINGLE_AGC
+} AGC_Mode ;
+
+/**
+ * Enumeration of Master Control Register State
+ */
+typedef enum
+{
+ MC_LOAD_START = 1 ,
+ MC_POWER_DOWN ,
+ MC_SYNTH_RESET ,
+ MC_SEQ_OFF
+} Master_Control_State ;
+
+/**
+ * Enumeration of MXL5005 Tuner Mode
+ */
+typedef enum
+{
+ MXL_ANALOG_MODE = 0 ,
+ MXL_DIGITAL_MODE
+
+} Tuner_Mode ;
+
+/**
+ * Enumeration of MXL5005 Tuner IF Mode
+ */
+typedef enum
+{
+ MXL_ZERO_IF = 0 ,
+ MXL_LOW_IF
+
+} Tuner_IF_Mode ;
+
+/**
+ * Enumeration of MXL5005 Tuner Clock Out Mode
+ */
+typedef enum
+{
+ MXL_CLOCK_OUT_DISABLE = 0 ,
+ MXL_CLOCK_OUT_ENABLE
+} Tuner_Clock_Out ;
+
+/**
+ * Enumeration of MXL5005 Tuner Div Out Mode
+ */
+typedef enum
+{
+ MXL_DIV_OUT_1 = 0 ,
+ MXL_DIV_OUT_4
+
+} Tuner_Div_Out ;
+
+/**
+ * Enumeration of MXL5005 Tuner Pull-up Cap Select Mode
+ */
+typedef enum
+{
+ MXL_CAP_SEL_DISABLE = 0 ,
+ MXL_CAP_SEL_ENABLE
+
+} Tuner_Cap_Select ;
+
+/**
+ * Enumeration of MXL5005 Tuner RSSI Mode
+ */
+typedef enum
+{
+ MXL_RSSI_DISABLE = 0 ,
+ MXL_RSSI_ENABLE
+
+} Tuner_RSSI ;
+
+/**
+ * Enumeration of MXL5005 Tuner Modulation Type
+ */
+typedef enum
+{
+ MXL_DEFAULT_MODULATION = 0 ,
+ MXL_DVBT,
+ MXL_ATSC,
+ MXL_QAM,
+ MXL_ANALOG_CABLE,
+ MXL_ANALOG_OTA
+
+} Tuner_Modu_Type ;
+
+/**
+ * Enumeration of MXL5005 Tuner Tracking Filter Type
+ */
+typedef enum
+{
+ MXL_TF_DEFAULT = 0 ,
+ MXL_TF_OFF,
+ MXL_TF_C,
+ MXL_TF_C_H,
+ MXL_TF_D,
+ MXL_TF_D_L,
+ MXL_TF_E,
+ MXL_TF_F,
+ MXL_TF_E_2,
+ MXL_TF_E_NA,
+ MXL_TF_G
+
+
+} Tuner_TF_Type ;
+
+/**
+ * MXL5005 Tuner Register Struct
+ */
+typedef struct _TunerReg_struct
+{
+ WORD Reg_Num ; // Tuner Register Address
+ WORD Reg_Val ; // Current sofware programmed value waiting to be writen
+} TunerReg_struct ;
+
+/**
+ * MXL5005 Tuner Control Struct
+ */
+typedef struct _TunerControl_struct {
+ WORD Ctrl_Num ; // Control Number
+ WORD size ; // Number of bits to represent Value
+ WORD addr[25] ; // Array of Tuner Register Address for each bit position
+ WORD bit[25] ; // Array of bit position in Register Address for each bit position
+ WORD val[25] ; // Binary representation of Value
+} TunerControl_struct ;
+
+/**
+ * MXL5005 Tuner Struct
+ */
+typedef struct _Tuner_struct
+{
+ BYTE Mode ; /** 0: Analog Mode ; 1: Digital Mode */
+ BYTE IF_Mode ; /** for Analog Mode, 0: zero IF; 1: low IF */
+ DWORD Chan_Bandwidth ; /** filter channel bandwidth (6, 7, 8) */
+ DWORD IF_OUT ; /** Desired IF Out Frequency */
+ WORD IF_OUT_LOAD ; /** IF Out Load Resistor (200/300 Ohms) */
+ DWORD RF_IN ; /** RF Input Frequency */
+ DWORD Fxtal ; /** XTAL Frequency */
+ BYTE AGC_Mode ; /** AGC Mode 0: Dual AGC; 1: Single AGC */
+ WORD TOP ; /** Value: take over point */
+ BYTE CLOCK_OUT ; /** 0: turn off clock out; 1: turn on clock out */
+ BYTE DIV_OUT ; /** 4MHz or 16MHz */
+ BYTE CAPSELECT ; /** 0: disable On-Chip pulling cap; 1: enable */
+ BYTE EN_RSSI ; /** 0: disable RSSI; 1: enable RSSI */
+ BYTE Mod_Type ; /** Modulation Type; */
+ /** 0 - Default; 1 - DVB-T; 2 - ATSC; 3 - QAM; 4 - Analog Cable */
+ BYTE TF_Type ; // Tracking Filter Type
+ // 0 - Default; 1 - Off; 2 - Type C; 3 - Type C-H
+
+ /** Calculated Settings */
+ DWORD RF_LO ; /** Synth RF LO Frequency */
+ DWORD IF_LO ; /** Synth IF LO Frequency */
+ DWORD TG_LO ; /** Synth TG_LO Frequency */
+
+ /** Pointers to ControlName Arrays */
+ WORD Init_Ctrl_Num ; /** Number of INIT Control Names */
+ TunerControl_struct Init_Ctrl[INITCTRL_NUM] ; /** INIT Control Names Array Pointer */
+ WORD CH_Ctrl_Num ; /** Number of CH Control Names */
+ TunerControl_struct CH_Ctrl[CHCTRL_NUM] ; /** CH Control Name Array Pointer */
+ WORD MXL_Ctrl_Num ; /** Number of MXL Control Names */
+ TunerControl_struct MXL_Ctrl[MXLCTRL_NUM] ; /** MXL Control Name Array Pointer */
+
+ /** Pointer to Tuner Register Array */
+ WORD TunerRegs_Num ; /** Number of Tuner Registers */
+ TunerReg_struct TunerRegs[TUNER_REGS_NUM] ; /** Tuner Register Array Pointer */
+} Tuner_struct ;
+
+
+
+typedef enum
+{
+ /**
+ * Initialization Control Names
+ */
+ DN_IQTN_AMP_CUT = 1 , /** 1 */
+ BB_MODE , /** 2 */
+ BB_BUF , /** 3 */
+ BB_BUF_OA , /** 4 */
+ BB_ALPF_BANDSELECT , /** 5 */
+ BB_IQSWAP , /** 6 */
+ BB_DLPF_BANDSEL , /** 7 */
+ RFSYN_CHP_GAIN , /** 8 */
+ RFSYN_EN_CHP_HIGAIN , /** 9 */
+ AGC_IF , /** 10 */
+ AGC_RF , /** 11 */
+ IF_DIVVAL , /** 12 */
+ IF_VCO_BIAS , /** 13 */
+ CHCAL_INT_MOD_IF , /** 14 */
+ CHCAL_FRAC_MOD_IF , /** 15 */
+ DRV_RES_SEL , /** 16 */
+ I_DRIVER , /** 17 */
+ EN_AAF , /** 18 */
+ EN_3P , /** 19 */
+ EN_AUX_3P , /** 20 */
+ SEL_AAF_BAND , /** 21 */
+ SEQ_ENCLK16_CLK_OUT , /** 22 */
+ SEQ_SEL4_16B , /** 23 */
+ XTAL_CAPSELECT , /** 24 */
+ IF_SEL_DBL , /** 25 */
+ RFSYN_R_DIV , /** 26 */
+ SEQ_EXTSYNTHCALIF , /** 27 */
+ SEQ_EXTDCCAL , /** 28 */
+ AGC_EN_RSSI , /** 29 */
+ RFA_ENCLKRFAGC , /** 30 */
+ RFA_RSSI_REFH , /** 31 */
+ RFA_RSSI_REF , /** 32 */
+ RFA_RSSI_REFL , /** 33 */
+ RFA_FLR , /** 34 */
+ RFA_CEIL , /** 35 */
+ SEQ_EXTIQFSMPULSE , /** 36 */
+ OVERRIDE_1 , /** 37 */
+ BB_INITSTATE_DLPF_TUNE, /** 38 */
+ TG_R_DIV, /** 39 */
+ EN_CHP_LIN_B , /** 40 */
+
+ /**
+ * Channel Change Control Names
+ */
+ DN_POLY = 51 , /** 51 */
+ DN_RFGAIN , /** 52 */
+ DN_CAP_RFLPF , /** 53 */
+ DN_EN_VHFUHFBAR , /** 54 */
+ DN_GAIN_ADJUST , /** 55 */
+ DN_IQTNBUF_AMP , /** 56 */
+ DN_IQTNGNBFBIAS_BST , /** 57 */
+ RFSYN_EN_OUTMUX , /** 58 */
+ RFSYN_SEL_VCO_OUT , /** 59 */
+ RFSYN_SEL_VCO_HI , /** 60 */
+ RFSYN_SEL_DIVM , /** 61 */
+ RFSYN_RF_DIV_BIAS , /** 62 */
+ DN_SEL_FREQ , /** 63 */
+ RFSYN_VCO_BIAS , /** 64 */
+ CHCAL_INT_MOD_RF , /** 65 */
+ CHCAL_FRAC_MOD_RF , /** 66 */
+ RFSYN_LPF_R , /** 67 */
+ CHCAL_EN_INT_RF , /** 68 */
+ TG_LO_DIVVAL , /** 69 */
+ TG_LO_SELVAL , /** 70 */
+ TG_DIV_VAL , /** 71 */
+ TG_VCO_BIAS , /** 72 */
+ SEQ_EXTPOWERUP , /** 73 */
+ OVERRIDE_2 , /** 74 */
+ OVERRIDE_3 , /** 75 */
+ OVERRIDE_4 , /** 76 */
+ SEQ_FSM_PULSE , /** 77 */
+ GPIO_4B, /** 78 */
+ GPIO_3B, /** 79 */
+ GPIO_4, /** 80 */
+ GPIO_3, /** 81 */
+ GPIO_1B, /** 82 */
+ DAC_A_ENABLE , /** 83 */
+ DAC_B_ENABLE , /** 84 */
+ DAC_DIN_A , /** 85 */
+ DAC_DIN_B , /** 86 */
+#ifdef _MXL_PRODUCTION
+ RFSYN_EN_DIV, /** 87 */
+ RFSYN_DIVM, /** 88 */
+ DN_BYPASS_AGC_I2C /** 89 */
+#endif
+
+} MXL5005_ControlName ;
diff --git a/api/Elonics_E4000.c b/api/Elonics_E4000.c
new file mode 100644
index 0000000..949df21
--- /dev/null
+++ b/api/Elonics_E4000.c
@@ -0,0 +1,108 @@
+/**
+ * @(#)Afa_E4000.cpp
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "e4000.h"
+#include "Elonics_E4000.h"
+#include "Elonics_E4000_Script.h"
+
+
+Demodulator* E4000_demodulator;
+Byte E4000_chip;
+Word E4000_bandwidth;
+Dword E4000_frequency;
+Dword Ref_clk=26000; //Tuner reference clock frequency (kHz)
+
+Dword E4000_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+ ) {
+ E4000_demodulator = demodulator;
+ E4000_chip = chip;
+
+ E4000_tunerreset ();
+ E4000_Tunerclock();
+ // E4000_filtercal();
+ E4000_Qpeak();
+ E4000_DCoffloop();
+ //E4000_commonmode();
+ E4000_GainControlinit();
+ return (Error_NO_ERROR);
+}
+
+
+Dword E4000_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+ )
+{
+ E4000_demodulator = demodulator;
+ E4000_chip = chip;
+ Dword error = 0;
+ Byte buffer[1];
+ buffer[0] = 0x00;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x00, 1, buffer);
+ //Powers down tuner (will recover if tuner initialisation is subsequently run)
+ return (Error_NO_ERROR);
+}
+
+
+Dword E4000_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ E4000_demodulator = demodulator;
+ E4000_chip = chip;
+ E4000_bandwidth=bandwidth;
+ E4000_frequency=frequency;
+ E4000_Gainmanual();
+ E4000_PLL();
+ E4000_LNAfilter();
+ E4000_IFfilter();
+ E4000_freqband();
+ E4000_DCoffLUT();
+ E4000_Gainauto();
+ Dword error = 0;
+return (Error_NO_ERROR);
+}
+
+
+
+
+TunerDescription tuner_E4000 = {
+ E4000_open,
+ E4000_close,
+ E4000_set,
+ E4000_scripts,
+ E4000_scriptSets,
+ 0xC8, /** tuner i2c address */
+ 1, /** length of tuner register address */
+ 0, /** tuner if */
+ False, /** spectrum inverse */
+ 0xFF, /** tuner id */
+};
diff --git a/api/Elonics_E4000.h b/api/Elonics_E4000.h
new file mode 100644
index 0000000..9fcb55c
--- /dev/null
+++ b/api/Elonics_E4000.h
@@ -0,0 +1,60 @@
+/**
+ * @(#)Elonics_E4000.h
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __Elonics_E4000_H__
+#define __Elonics_E4000_H__
+
+
+#define E4000_VER_MAJOR 2
+#define E4000_VER_MINOR 0
+
+extern TunerDescription tuner_E4000;
+
+
+/**
+ *
+ */
+Dword E4000_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword E4000_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword E4000_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Elonics_E4000_Script.h b/api/Elonics_E4000_Script.h
new file mode 100644
index 0000000..606735c
--- /dev/null
+++ b/api/Elonics_E4000_Script.h
@@ -0,0 +1,171 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)Infineon_E4000_EXT_EVB.cpp
+*
+* Copyright 2005 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 0
+#define VERSION2 0
+#define VERSION3 0
+#define VERSION4 1
+
+
+
+#define E4000_ADDRESS 0xC0
+#define E4000_SCRIPTSETLENGTH 0x00000001
+
+Word E4000_scriptSets[] = {
+0x90
+};
+
+ValueSet E4000_scripts[] = {
+ {0x0046, 0x36},
+ {0x0051, 0x01},
+ {0x0057, 0x00},
+ {0x0058, 0x01},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x006d, 0x00},
+ {0x0070, 0x0A},
+ {0x0071, 0x05},
+ {0x0072, 0x02},
+ {0x0074, 0x01},
+ {0x0075, 0x3},
+ {0x0076, 0x02},
+ {0x0077, 0x00},
+ {0x0078, 0x01},
+ {0x0079, 0x0},
+ {0x007a, 0x7E},
+ {0x007b, 0x3E},
+ {0x007e, 0x04},
+ {0x0081, 0x0A},
+ {0x008a, 0x01},
+ {0x008e, 0x01},
+ {0x0092, 0x06},
+ {0x0093, 0x00},
+ {0x0094, 0x01},
+ {0x0095, 0x02},
+ {0x0096, 0x01},
+ {0x0098, 0x0A},
+ {0x0099, 0x01},
+ {0x009b, 0x05},
+ {0x009c, 0x80},
+ {0x009f, 0xE1},
+ {0x00a0, 0xCF},
+ {0x00a3, 0x01},
+ {0x00a5, 0x01},
+ {0x00a6, 0x01},
+ {0x00a9, 0x00},
+ {0x00aa, 0x01},
+ {0x00b0, 0x01},
+ {0x00b3, 0x00},
+ {0x00c2, 0x05},
+ {0x00c3, 0x01},
+ {0x00c4, 0x00},
+ {0x00c6, 0x19},
+ {0xF000, 0xF},
+ {0xF007, 0x0},
+ {0xF016, 0x10},
+ {0xF017, 0x04},
+ {0xF018, 0x05},
+ {0xF019, 0x04},
+ {0xF01A, 0x05},
+ {0xF01F, 0x82},
+ {0xF020, 0x00},
+ {0xF021, 0x03},
+ {0xF022, 0x0A},
+ {0xF023, 0x0A},
+ {0xF029, 0x82},
+ {0xF02A, 0x00},
+ {0xF02B, 0x00},
+ {0xF02C, 0x01},
+ {0xF047, 0x0},
+ {0xF054, 0x0},
+ {0xF055, 0x0},
+ {0xF064, 0x03},
+ {0xF065, 0xF9},
+ {0xF066, 0x03},
+ {0xF067, 0x1},
+ {0xF06F, 0xe0},
+ {0xF070, 0x3},
+ {0xF072, 0x0f},
+ {0xF073, 0x03},
+ {0xF077, 0x01},
+ {0xF078, 0x00},
+ {0xF087, 0x0},
+ {0xF09B, 0x3f},
+ {0xF09C, 0x00},
+ {0xF09D, 0x20},
+ {0xF09E, 0x00},
+ {0xF09F, 0x0c},
+ {0xF0A0, 0x00},
+ {0xF130, 0x04},
+ {0xF132, 0x04},
+ {0xF144, 0x1a},
+ {0xF146, 0x00},
+ {0xF14A, 0x01},
+ {0xF14C, 0x00},
+ {0xF14D, 0x00},
+ {0xF14F, 0x04},
+ {0xF158, 0x7f},
+ {0xF15A, 0x00},
+ {0xF15B, 0x08},
+ {0xF15D, 0x03},
+ {0xF15E, 0x05},
+ {0xF163, 0x05},
+ {0xF166, 0x01},
+ {0xF167, 0x40},
+ {0xF168, 0x0f},
+ {0xF17A, 0x00},
+ {0xF17B, 0x00},
+ {0xF183, 0x01},
+ {0xF19D, 0x40},
+ {0xF1BC, 0x36},
+ {0xF1BD, 0x00},
+ {0xF1CB, 0xA0},
+ {0xF1CC, 0x01},
+ {0xF1E6, 0x00},
+ {0xF204, 0x10},
+ {0xF214, 0x0},
+ {0xF40E, 0x0A},
+ {0xF40F, 0x40},
+ {0xF410, 0x08},
+ {0xF55F, 0x0A},
+ {0xF561, 0x15},
+ {0xF562, 0x20},
+ {0xF5DF, 0xFB},
+ {0xF5E0, 0x00},
+ {0xF5E3, 0x09},
+ {0xF5E4, 0x01},
+ {0xF5E5, 0x01},
+ {0xF5F8, 0x01},
+ {0xF5FD, 0x01},
+ {0xF600, 0x05},
+ {0xF601, 0x08},
+ {0xF602, 0x0B},
+ {0xF603, 0x0E},
+ {0xF604, 0x11},
+ {0xF605, 0x14},
+ {0xF606, 0x17},
+ {0xF607, 0x1F},
+ {0xF60E, 0x00},
+ {0xF60F, 0x04},
+ {0xF610, 0x32},
+ {0xF611, 0x10},
+ {0xF707, 0xFC},
+ {0xF708, 0x00},
+ {0xF709, 0x37},
+ {0xF70A, 0x00},
+ {0xF78B, 0x01},
+ {0xF80F, 0x40},
+ {0xF810, 0x54},
+ {0xF811, 0x5a},
+ {0xF905, 0x01},
+ {0xFB06, 0x3},
+ {0xFD8B, 0x00},
+};
diff --git a/api/FCI_FC2580.c b/api/FCI_FC2580.c
new file mode 100644
index 0000000..0d03e3c
--- /dev/null
+++ b/api/FCI_FC2580.c
@@ -0,0 +1,119 @@
+/**
+ * @(#)FCI_FC2580.h
+ *
+ * ==========================================================
+ * Version: 2.4
+ * Date: 2009.01.06
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * 2008.10.27 Tom Lin 1. update tuner code
+ * 2. modify AGC control to internal
+ * 2008.12.02 Tom Lin update tuner code to 1.4
+ * 2009.01.06 Tom Lin modify tuner registers 0x6b & 0x6c
+ * to be 0x0f & 0x11 for better per-
+ * formance
+ * 2009.03.23 Yinding turn on gpiot2 before tuner is opened
+ * ==========================================================
+ *
+ * Copyright 2008 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "fc2580.h"
+#include "FCI_FC2580_Script.h"
+
+
+Demodulator* FCI_FC2580_demodulator;
+Byte FCI_FC2580_chip;
+
+
+Dword FC2580_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+
+ FCI_FC2580_demodulator = demodulator;
+ FCI_FC2580_chip = chip;
+
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpiot2_on, 1);
+ if (error) goto exit;
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpiot2_en, 1);
+ if (error) goto exit;
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpiot2_o, 1);
+ if (error) goto exit;
+
+ fc2580_set_init (1);
+
+exit :
+ return (error);
+}
+
+
+Dword FC2580_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword FC2580_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ Dword error = Error_NO_ERROR;
+ Byte bw;
+
+ FCI_FC2580_demodulator = demodulator;
+ FCI_FC2580_chip = chip;
+
+ if (bandwidth < 5000) {
+ bw = 1;
+ } else if (bandwidth < 6000) {
+ bw = 5;
+ } else if (bandwidth < 7000) {
+ bw = 6;
+ } else if (bandwidth < 8000) {
+ bw = 7;
+ } else if (bandwidth < 9000) {
+ bw = 8;
+ } else {
+ bw = 9;
+ }
+
+ fc2580_set_filter (bw);
+ fc2580_set_freq (frequency);
+
+ return (error);
+}
+
+
+TunerDescription tuner_FC2580 = {
+ FC2580_open, /** Function to open tuner. */
+ FC2580_close, /** Function to close tuner. */
+ FC2580_set, /** Function set frequency. */
+ FC2580_scripts, /** Scripts. */
+ FC2580_scriptSets, /** Length of scripts. */
+ FC2580_ADDRESS, /** The I2C address of tuner. */
+ 1, /** Valid length of tuner register. */
+ 0, /** IF frequency of tuner. */
+ True, /** Spectrum inversion. */
+ 0x32, /** tuner id */
+};
diff --git a/api/FCI_FC2580.h b/api/FCI_FC2580.h
new file mode 100644
index 0000000..a8a03fc
--- /dev/null
+++ b/api/FCI_FC2580.h
@@ -0,0 +1,62 @@
+/**
+ * @(#)FCI_FC2580.h
+ *
+ * ==========================================================
+ * Version: 2.3
+ * Date: 2009.01.06
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2008 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __FCI_FC2580_H__
+#define __FCI_FC2580_H__
+
+
+#define FC2580_VER_MAJOR 2
+#define FC2580_VER_MINOR 4
+
+extern TunerDescription tuner_FC2580;
+
+
+/**
+ *
+ */
+Dword FC2580_open (
+ IN Demodulator* demodulator,
+ IN StreamType streamType,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword FC2580_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+
+/**
+ *
+ */
+Dword FC2580_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/FCI_FC2580_Script.h b/api/FCI_FC2580_Script.h
new file mode 100644
index 0000000..9ade74d
--- /dev/null
+++ b/api/FCI_FC2580_Script.h
@@ -0,0 +1,61 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)FCI_FC2580_EXT_EVB.cpp
+*
+* Copyright 2005 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 5
+#define VERSION2 66
+#define VERSION3 12
+#define VERSION4 0
+
+
+
+#define FC2580_ADDRESS 0xAC
+#define FC2580_SCRIPTSETLENGTH 0x00000001
+
+Word FC2580_scriptSets[] = {
+0x21
+};
+
+ValueSet FC2580_scripts[] = {
+ {0x0046, 0x32},
+ {0x0057, 0x01},
+ {0x0058, 0x00},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x0071, 0x05},
+ {0x0072, 0x02},
+ {0x0074, 0x01},
+ {0x0079, 0x01},
+ {0x0093, 0x00},
+ {0x0094, 0x00},
+ {0x0095, 0x00},
+ {0x0096, 0x05},
+ {0x00b3, 0x01},
+ {0x00c3, 0x01},
+ {0x00c4, 0x00},
+ {0xF007, 0x00},
+ {0xF00C, 0x19},
+ {0xF00D, 0x1A},
+ {0xF00E, 0x00},
+ {0xF00F, 0x02},
+ {0xF010, 0x00},
+ {0xF011, 0x02},
+ {0xF012, 0x00},
+ {0xF013, 0x02},
+ {0xF014, 0x00},
+ {0xF015, 0x02},
+ {0xF01F, 0x96},
+ {0xF020, 0x00},
+ {0xF029, 0x96},
+ {0xF02A, 0x00},
+ {0xF077, 0x01},
+ {0xF1E6, 0x01},
+
+};
diff --git a/api/Fitipower_FC0011.c b/api/Fitipower_FC0011.c
new file mode 100644
index 0000000..90b93cf
--- /dev/null
+++ b/api/Fitipower_FC0011.c
@@ -0,0 +1,453 @@
+/**
+ * @(#)Fitipower_FC0011.cpp
+ *
+ * ==========================================================
+ * Version: 2.1
+ * Date: 2009.03.27
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * 2009.03.27 Yinding update tuner register settings
+ * ==========================================================
+ *
+ * Copyright 2008 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+//#include <stdio.h> // for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "Fitipower_FC0011_Script.h"
+//#include <math.h> // for Linux
+
+
+Dword FC0011_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+
+ /** Control tuner enable */
+ error = Standard_writeRegisterBits (demodulator, chip, Processor_LINK, p_reg_top_gpiot2_o, reg_top_gpiot2_o_pos, reg_top_gpiot2_o_len, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegisterBits (demodulator, chip, Processor_LINK, p_reg_top_gpiot2_en, reg_top_gpiot2_en_pos, reg_top_gpiot2_en_len, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegisterBits (demodulator, chip, Processor_LINK, p_reg_top_gpiot2_on, reg_top_gpiot2_on_pos, reg_top_gpiot2_on_len, 1);
+ if (error) goto exit;
+
+ /** Control pin diode **/
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_on, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_en, 1);
+ if (error) goto exit;
+exit:
+ return (error);
+}
+
+
+Dword FC0011_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+
+ /** Control pin diode **/
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_on, 0);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_en, 0);
+ if (error) goto exit;
+
+exit:
+ return (error);
+}
+
+
+Dword FC0011_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ /* It's necessary for setting frequency and bandwidth*/
+ Dword error = Error_NO_ERROR;
+ Word fractional, xin;
+ Byte reg[18], floor_xdiv, fp,fa, vco_cal, vco_select, round_xdiv, rc_cal_forcing;
+ Dword fvco;
+
+ if ( (frequency < 45000) || (frequency > 1000000) )
+ {
+ goto exit;
+ }
+ //=========================== <arios> end
+
+
+ /***********************************************************/
+ /****************** initialization *************************/
+ /***********************************************************/
+
+ /**************add by roger****************/
+ reg[7] = 0x0f;
+ reg[8] = 0x3e;
+ reg[10] = 0xb8;
+ error = Standard_writeTunerRegisters (demodulator, chip, 7, 1, &reg[7]);
+ if (error) goto exit;
+ error = Standard_writeTunerRegisters (demodulator, chip, 8, 1, &reg[8]);
+ if (error) goto exit;
+ error = Standard_writeTunerRegisters (demodulator, chip, 10, 1, &reg[10]);
+ if (error) goto exit;
+ /**************add by roger****************/
+
+ reg[11] = 0x80;
+ reg[13] = 0x04;
+ error = Standard_writeTunerRegisters (demodulator, chip, 11, 1, &reg[11]);
+ if (error) goto exit;
+ error = Standard_writeTunerRegisters (demodulator, chip, 13, 1, &reg[13]);
+ if (error) goto exit;
+
+ /***********************************************************/
+ /****************** start frequency setting ****************/
+ /***********************************************************/
+
+ /* generate the frequency of VCO and VCO_divider */
+
+ if (frequency < 54000)
+ {
+ fvco = frequency * 64;
+ reg[5] = 0x82;
+ }
+ else if (frequency <108000)
+ {
+ fvco = frequency * 32;
+ reg[5] = 0x42;
+ }
+ else if (frequency <216000)
+ {
+ fvco = frequency * 16;
+ reg[5] = 0x22;
+ }
+ else if (frequency <432000)
+ {
+ fvco = frequency * 8;
+ reg[5] = 0x12;
+ }
+ else
+ {
+ fvco = frequency * 4;
+ reg[5] = 0x0a;
+ }
+
+ /* calculate XIN for Fractional PLL with 18 MHz reference frequency */
+ floor_xdiv = (Byte)(fvco/18000);
+ fractional = (Word)(fvco - (floor_xdiv * 18000));
+ fractional = ((fractional<<15)/18000);
+ //if (fractional >=(Word)pow(2.0,14.0)) fractional = fractional + (Word)pow(2.0,15.0); /* sign extension */
+ if (fractional >=(Word)16384) fractional = fractional + (Word)32768;
+ if (fractional == 0) xin = 0;
+ else if (fractional >0 && fractional < 511) xin = 0x200;
+ else if (fractional > 65025) xin = 0xfe00;
+ else xin = fractional;
+
+ reg[3] = (Byte)(xin>>8) ; /* xin with 9 bit resolution */
+ reg[4] = (Byte)(xin & 0x00ff);
+
+ /* calculate fp and fa */
+ if ((fvco-floor_xdiv*18000)>=9000) round_xdiv = floor_xdiv + 1; //round operation
+ else round_xdiv = floor_xdiv;
+ fp = (Byte)(round_xdiv/8);
+ fa = round_xdiv - (fp<<3);
+ if (fa < 2)
+ {
+ fp = fp - 1;
+ fa = fa + 8;
+ }
+
+ if (fp > 31)
+ {
+ fp = fp & 0x1f;
+ fa = fa & 0x0f;
+ }
+
+ if (fa >= fp)
+ {
+ goto exit;
+ }
+ //=========================== <arios> end
+
+ reg[1] = fa;
+ reg[2] = fp;
+
+ /* select bandwidth */
+ if (bandwidth == 8000) reg[6] = 0x0;
+ else if (bandwidth == 7000) reg[6] = 0x40;
+ else reg[6] = 0x80;
+
+ /* Rough VCO selection */
+ if (fvco < 2320000)
+ {
+ vco_select = 0;
+ reg[6] = reg[6] & ~(0x18);
+ }
+ else if (fvco < 3080000)
+ {
+ vco_select = 1;
+ reg[6] = reg[6] & ~(0x18); // reset VCO select
+ reg[6] = reg[6] | 0x10;
+ }
+ else
+ {
+ vco_select = 2;
+ reg[6] = reg[6] & ~(0x18); // reset VCO select
+ reg[6] = reg[6] | 0x08;
+ }
+
+ /* fix clock out */
+ reg[6] = reg[6] | 0x20;
+
+ /** Write freq parameters to tuner */
+ error = Standard_writeTunerRegisters (demodulator, chip, 1, 1, &reg[1]);
+ if (error) goto exit;
+ error = Standard_writeTunerRegisters (demodulator, chip, 2, 1, &reg[2]);
+ if (error) goto exit;
+ error = Standard_writeTunerRegisters (demodulator, chip, 3, 1, &reg[3]);
+ if (error) goto exit;
+ error = Standard_writeTunerRegisters (demodulator, chip, 4, 1, &reg[4]);
+ if (error) goto exit;
+ error = Standard_writeTunerRegisters (demodulator, chip, 5, 1, &reg[5]);
+ if (error) goto exit;
+ error = Standard_writeTunerRegisters (demodulator, chip, 6, 1, &reg[6]);
+ if (error) goto exit;
+
+ /***********************************************************/
+ /****************** start VCO selction *********************/
+ /***********************************************************/
+
+ /*calibration VCO*/
+ vco_cal = 0x80;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal); /* vco_cal restart */
+ if (error) goto exit;
+
+ vco_cal = 0x00;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal); /* vco_cal run */
+ if (error) goto exit;
+
+ /* read vco calibration value vco_cal Note for read_reg need read twice */
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal);
+ if (error) goto exit;
+ User_delay (demodulator, 10);
+ error = Standard_readTunerRegisters (demodulator, chip, 14, 1, &vco_cal);
+ if (error) goto exit;
+
+ if ( ((vco_cal) & 0x40) == 0)
+ {
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpiot3_on, 1);
+ if (error) goto exit;
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpiot3_en, 1);
+ if (error) goto exit;
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpiot3_o, 1);
+ if (error) goto exit;
+ User_delay (demodulator, 10);
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpiot3_o, 0);
+ if (error) goto exit;
+ User_delay (demodulator, 10);
+
+ error = Standard_writeTunerRegisters (demodulator, chip, 1, 1, &reg[1]);
+ if (error) goto exit;
+ error = Standard_writeTunerRegisters (demodulator, chip, 2, 1, &reg[2]);
+ if (error) goto exit;
+ error = Standard_writeTunerRegisters (demodulator, chip, 3, 1, &reg[3]);
+ if (error) goto exit;
+ error = Standard_writeTunerRegisters (demodulator, chip, 4, 1, &reg[4]);
+ if (error) goto exit;
+ error = Standard_writeTunerRegisters (demodulator, chip, 5, 1, &reg[5]);
+ if (error) goto exit;
+ error = Standard_writeTunerRegisters (demodulator, chip, 6, 1, &reg[6]);
+ if (error) goto exit;
+ error = Standard_writeTunerRegisters (demodulator, chip, 7, 1, &reg[7]);
+ if (error) goto exit;
+ error = Standard_writeTunerRegisters (demodulator, chip, 8, 1, &reg[8]);
+ if (error) goto exit;
+ error = Standard_writeTunerRegisters (demodulator, chip, 10, 1, &reg[10]);
+ if (error) goto exit;
+ error = Standard_writeTunerRegisters (demodulator, chip, 11, 1, &reg[11]);
+ if (error) goto exit;
+ error = Standard_writeTunerRegisters (demodulator, chip, 13, 1, &reg[13]);
+ if (error) goto exit;
+
+ /*calibration VCO*/
+ vco_cal = 0x80;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal); /* vco_cal restart */
+ if (error) goto exit;
+
+ vco_cal = 0x00;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal); /* vco_cal run */
+ if (error) goto exit;
+
+ /* read vco calibration value vco_cal Note for read_reg need read twice */
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal);
+ if (error) goto exit;
+ User_delay (demodulator, 10);
+ error = Standard_readTunerRegisters (demodulator, chip, 14, 1, &vco_cal);
+ if (error) goto exit;
+ }
+
+ /* vco selection */
+ vco_cal = vco_cal & 0x3f;
+ switch(vco_select) {
+ case 0:
+ if (vco_cal < 0x08)
+ {
+ reg[6] = reg[6] & ~(0x18); /* reset VCO select */
+ reg[6] = reg[6] | 0x10; /* vco_select = 1; */
+ reg[6] = reg[6] | 0x20; /* fix clock out */
+ error = Standard_writeTunerRegisters (demodulator, chip, 6, 1, &reg[6]);
+ if (error) goto exit;
+
+ /* recalibration */
+ vco_cal = 0x80;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal);/* vco_cal restart */
+ if (error) goto exit;
+
+ vco_cal = 0x00;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal);/* vco_cal run */
+ if (error) goto exit;
+ break;
+ }
+ else
+ {
+ reg[6] = reg[6] & ~(0x18); /* reset VCO select */
+ reg[6] = reg[6] | 0x00; /* vco_select = 0; */
+ reg[6] = reg[6] | 0x20; /* fix clock out */
+ error = Standard_writeTunerRegisters (demodulator, chip, 6, 1, &reg[6]);
+ if (error) goto exit;
+ break;
+ }
+ case 1:
+ if (vco_cal < 0x05)
+ {
+ reg[6] = reg[6] & ~(0x18); /* reset VCO select */
+ reg[6] = reg[6] | 0x08; /* vco_select = 2; */
+ reg[6] = reg[6] | 0x20; /* fix clock out */
+ error = Standard_writeTunerRegisters (demodulator, chip, 6, 1, &reg[6]);
+ if (error) goto exit;
+
+ /* recalibration */
+ vco_cal = 0x80;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal);/* vco_cal restart */
+ if (error) goto exit;
+
+ vco_cal = 0x00;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal);/* vco_cal run */
+ if (error) goto exit;
+ break;
+ }
+ else if (vco_cal > 0x30)
+ {
+ reg[6] = reg[6] & ~(0x18); /* reset VCO select */
+ reg[6] = reg[6] | 0x00; /* vco_select = 0; */
+ reg[6] = reg[6] | 0x20; /* fix clock out */
+ error = Standard_writeTunerRegisters (demodulator, chip, 6, 1, &reg[6]);
+ if (error) goto exit;
+
+ /* recalibration */
+ vco_cal = 0x80;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal);/*vco_cal restart*/
+ if (error) goto exit;
+
+ vco_cal = 0x00;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal);/*vco_cal run*/
+ if (error) goto exit;
+ break;
+ }
+ else
+ {
+ reg[6] = reg[6] & ~(0x18); /* reset VCO select */
+ reg[6] = reg[6] | 0x10; /* vco_select = 1; */
+ reg[6] = reg[6] | 0x20; /* fix clock out */
+ error = Standard_writeTunerRegisters (demodulator, chip, 6, 1, &reg[6]);
+ if (error) goto exit;
+ break;
+ }
+ default:
+ if (vco_cal > 0x35)
+ {
+ reg[6] = reg[6] & ~(0x18); /* reset VCO select */
+ reg[6] = reg[6] | 0x10; /* vco_select = 1; */
+ reg[6] = reg[6] | 0x20; /* fix clock out */
+ error = Standard_writeTunerRegisters (demodulator, chip, 6, 1, &reg[6]);
+ if (error) goto exit;
+
+ /* recalibration */
+ vco_cal = 0x80;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal);/* vco_cal restart */
+ if (error) goto exit;
+
+ vco_cal = 0x00;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal);/* vco_cal run */
+ if (error) goto exit;
+ break;
+ }
+ else
+ {
+ reg[6] = reg[6] & ~(0x18); /* reset VCO select */
+ reg[6] = reg[6] | 0x08; /* vco_select = 2; */
+ reg[6] = reg[6] | 0x20; /* fix clock out */
+ error = Standard_writeTunerRegisters (demodulator, chip, 6, 1, &reg[6]);
+ if (error) goto exit;
+ break;
+
+ }
+ }
+
+ vco_cal = 0x00;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal);
+ if (error) goto exit;
+ User_delay (demodulator, 10);
+ error = Standard_readTunerRegisters (demodulator, chip, 14, 1, &vco_cal);
+ if (error) goto exit;
+
+ reg[16] = 0x0b;
+
+ User_delay (demodulator, 10);
+ error = Standard_readTunerRegisters (demodulator, chip, 13, 1, &reg[13]);
+ if (error) goto exit;
+
+ rc_cal_forcing = reg[13] | 0x10;
+
+ error = Standard_writeTunerRegisters (demodulator, chip, 13, 1, &rc_cal_forcing);
+ if (error) goto exit;
+
+ error = Standard_writeTunerRegisters (demodulator, chip, 16, 1, &reg[16]);
+ if (error) goto exit;
+
+
+exit:
+ return(error);
+}
+
+
+TunerDescription tuner_FC0011 = {
+ FC0011_open, /** needed function*/
+ FC0011_close, /** needed function*/
+ FC0011_set, /** needed function*/
+ FC0011_scripts, /** Afa's tuner setting */
+ FC0011_scriptSets, /** Afa's tuner setting */
+ FC0011_ADDRESS, /** tuner i2c address */
+ 1, /** length of tuner register address */
+ 0, /** tuner if frequency*/
+ True, /** spectrum inverse */
+ 0x28, /** tuner id */
+};
diff --git a/api/Fitipower_FC0011.h b/api/Fitipower_FC0011.h
new file mode 100644
index 0000000..5b8c138
--- /dev/null
+++ b/api/Fitipower_FC0011.h
@@ -0,0 +1,61 @@
+/**
+ * @(#)Fitipower_FC0011.h
+ *
+ * ==========================================================
+ * Version: 2.1
+ * Date: 2009.03.27
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * 2009.03.27 Yinding update tuner register settings
+ * ==========================================================
+ *
+ * Copyright 2008 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __Fitipower_FC0011_H__
+#define __Fitipower_FC0011_H__
+
+
+#define FC0011_VER_MAJOR 2
+#define FC0011_VER_MINOR 1
+
+extern TunerDescription tuner_FC0011;
+
+
+/**
+ *
+ */
+Dword FC0011_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword FC0011_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword FC0011_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Fitipower_FC0011_Script.h b/api/Fitipower_FC0011_Script.h
new file mode 100644
index 0000000..d482f30
--- /dev/null
+++ b/api/Fitipower_FC0011_Script.h
@@ -0,0 +1,83 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)Fiti_EXT_EVB.cpp
+*
+* Copyright 2005 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 5
+#define VERSION2 66
+#define VERSION3 12
+#define VERSION4 0
+
+
+#define FC0011_ADDRESS 0xC0
+#define FC0011_SCRIPTSETLENGTH 0x00000001
+
+Word FC0011_scriptSets[] = {
+0x38
+};
+
+ValueSet FC0011_scripts[] = {
+ {0x0046, 0x28},
+ {0x0057, 0x00},
+ {0x0058, 0x01},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x0068, 0xa5},
+ {0x006e, 0x01},
+ {0x0071, 0x0A},
+ {0x0072, 0x02},
+ {0x0074, 0x01},
+ {0x0079, 0x01},
+ {0x0093, 0x00},
+ {0x0094, 0x00},
+ {0x0095, 0x00},
+ {0x0096, 0x00},
+ {0x009b, 0x2D},
+ {0x009c, 0x60},
+ {0x009d, 0x23},
+ {0x00a4, 0x50},
+ {0x00ad, 0x50},
+ {0x00b3, 0x01},
+ {0x00b7, 0x88},
+ {0x00b8, 0xa6},
+ {0x00c3, 0x01},
+ {0x00c4, 0x01},
+ {0x00c7, 0x69},
+ {0xF007, 0x00},
+ {0xF00A, 0x1B},
+ {0xF00B, 0x1B},
+ {0xF00C, 0x1B},
+ {0xF00D, 0x1B},
+ {0xF00E, 0xFF},
+ {0xF00F, 0x01},
+ {0xF010, 0x00},
+ {0xF011, 0x02},
+ {0xF012, 0xFF},
+ {0xF013, 0x01},
+ {0xF014, 0x00},
+ {0xF015, 0x02},
+ {0xF01B, 0xEF},
+ {0xF01C, 0x01},
+ {0xF01D, 0x0f},
+ {0xF01E, 0x02},
+ {0xF01F, 0x6E},
+ {0xF020, 0x00},
+ {0xF025, 0xDE},
+ {0xF026, 0x00},
+ {0xF027, 0x0A},
+ {0xF028, 0x03},
+ {0xF029, 0x6E},
+ {0xF02A, 0x00},
+ {0xF047, 0x00},
+ {0xF054, 0x0},
+ {0xF055, 0x0},
+ {0xF077, 0x01},
+ {0xF1E6, 0x00},
+
+};
diff --git a/api/Fitipower_FC0012.c b/api/Fitipower_FC0012.c
new file mode 100644
index 0000000..a4c0e96
--- /dev/null
+++ b/api/Fitipower_FC0012.c
@@ -0,0 +1,346 @@
+/**
+ * @(#)Fitipower_FC0012.cpp
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.09.17
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.09.17 Benny Chen added tuner version
+ * ==========================================================
+ *
+ * Copyright 2008 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+//#include <stdio.h> // for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "Fitipower_FC0012_Script.h"
+//#include <math.h> // for Linux
+
+
+Dword FC0012_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+
+ /** Control tuner enable */
+ error = Standard_writeRegisterBits (demodulator, chip, Processor_LINK, p_reg_top_gpiot2_o, reg_top_gpiot2_o_pos, reg_top_gpiot2_o_len, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegisterBits (demodulator, chip, Processor_LINK, p_reg_top_gpiot2_en, reg_top_gpiot2_en_pos, reg_top_gpiot2_en_len, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegisterBits (demodulator, chip, Processor_LINK, p_reg_top_gpiot2_on, reg_top_gpiot2_on_pos, reg_top_gpiot2_on_len, 1);
+ if (error) goto exit;
+
+ /** Control pin diode **/
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_on, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_en, 1);
+ if (error) goto exit;
+exit:
+ return (error);
+}
+
+
+Dword FC0012_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+
+ /** Control pin diode **/
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_on, 0);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_en, 0);
+ if (error) goto exit;
+
+exit:
+ return (error);
+}
+
+
+Dword FC0012_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ /* It's necessary for setting frequency and bandwidth*/
+ Dword error = Error_NO_ERROR;
+ Word fractional, xin;
+ Byte reg[20], floor_xdiv, fp,fa, vco_cal, vco_select, round_xdiv, rc_cal_forcing;
+ Dword fvco;
+
+ /***********************************************************/
+ /****************** initialization *************************/
+ /***********************************************************/
+ reg[7] = 0x0f;
+ reg[8] = 0x9d;
+ reg[13] = 0x10;
+ reg[16] = 0x0b;
+ reg[19] = 0x10;
+
+ error = Standard_writeTunerRegisters (demodulator, chip, 7, 1, &reg[7]);
+ if (error) goto exit;
+
+ error = Standard_writeTunerRegisters (demodulator, chip, 8, 1, &reg[8]);
+ if (error) goto exit;
+
+ error = Standard_writeTunerRegisters (demodulator, chip, 13, 1, &reg[13]);
+ if (error) goto exit;
+
+ error = Standard_writeTunerRegisters (demodulator, chip, 16, 1, &reg[16]);
+ if (error) goto exit;
+
+ error = Standard_writeTunerRegisters (demodulator, chip, 19, 1, &reg[19]);
+ if (error) goto exit;
+
+ /***********************************************************/
+ /****************** start frequency setting ****************/
+ /***********************************************************/
+
+ /* generate the frequency of VCO and VCO_divider */
+
+ if (frequency * 96 < 3560000)
+ {
+ fvco = frequency * 96;
+ reg[5] = 0x82;
+ reg[6] = 0x00;
+ }
+ else if (frequency * 64 < 3560000)
+ {
+ fvco = frequency * 64;
+ reg[5] = 0x82;
+ reg[6] = 0x02;
+ }
+ else if (frequency * 48 < 3560000)
+ {
+ fvco = frequency * 48;
+ reg[5] = 0x42;
+ reg[6] = 0x00;
+ }
+ else if (frequency * 32 < 3560000)
+ {
+ fvco = frequency * 32;
+ reg[5] = 0x42;
+ reg[6] = 0x02;
+ }
+ else if (frequency * 24 < 3560000)
+ {
+ fvco = frequency * 24;
+ reg[5] = 0x22;
+ reg[6] = 0x00;
+ }
+ else if (frequency * 16 < 3560000)
+ {
+ fvco = frequency * 16;
+ reg[5] = 0x22;
+ reg[6] = 0x02;
+ }
+ else if (frequency * 12 < 3560000)
+ {
+ fvco = frequency * 12;
+ reg[5] = 0x12;
+ reg[6] = 0x00;
+ }
+ else if (frequency * 8 < 3560000)
+ {
+ fvco = frequency * 8;
+ reg[5] = 0x12;
+ reg[6] = 0x02;
+ }
+ else if (frequency * 6 < 3560000)
+ {
+ fvco = frequency * 6;
+ reg[5] = 0x0a;
+ reg[6] = 0x00;
+ }
+ else
+ {
+ fvco = frequency * 4;
+ reg[5] = 0x0a;
+ reg[6] = 0x02;
+ }
+
+
+ /* calculate XIN for Fractional PLL with 18 MHz reference frequency */
+ floor_xdiv = (Byte)(fvco/18000);
+ fractional = (Word)(fvco - (floor_xdiv * 18000));
+ fractional = ((fractional<<15)/18000);
+ //if (fractional >=(Word)pow(2.0,14.0)) fractional = fractional + (Word)pow(2.0,15.0); /* sign extension */
+ if (fractional >=(Word)16384) fractional = fractional + (Word)32768;
+ if (fractional == 0) xin = 0;
+ else xin = fractional;
+
+ reg[3] = (Byte)(xin>>8) ; /* xin with 9 bit resolution */
+ reg[4] = (Byte)(xin & 0x00ff);
+
+ /* calculate fp and fa */
+ if ((fvco-floor_xdiv*18000)>=9000) round_xdiv = floor_xdiv + 1; //round operation
+ else round_xdiv = floor_xdiv;
+ fp = (Byte)(round_xdiv/8);
+ fa = round_xdiv - (fp<<3);
+ if (fa < 2)
+ {
+ fp = fp - 1;
+ fa = fa + 8;
+ }
+
+ reg[1] = fa;
+ reg[2] = fp;
+
+ /* Rough VCO selection */
+ if (fvco < 3060000)
+ {
+ vco_select = 0;
+ }
+ else
+ {
+ vco_select = 1;
+ reg[6] = reg[6] | 0x08;
+ }
+
+ /* fix frequency less than 45 MHz */
+ if (frequency < 45000)
+ {
+ reg[1] = 0x06;
+ reg[2] = 0x11;
+ }
+
+ /* fix clock out */
+ reg[6] = reg[6] | 0x20;
+
+ /** Write freq parameters to tuner */
+ error = Standard_writeTunerRegisters (demodulator, chip, 0, 7, reg);
+ if (error) goto exit;
+
+ /***********************************************************/
+ /****************** start VCO selction *********************/
+ /***********************************************************/
+
+ /*calibration VCO*/
+ vco_cal = 0x80;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal); /* vco_cal restart */
+ if (error) goto exit;
+
+ vco_cal = 0x00;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal); /* vco_cal run */
+ if (error) goto exit;
+
+ /* read vco calibration value vco_cal Note for read_reg need read twice */
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal);
+ if (error) goto exit;
+ User_delay (demodulator, 10);
+ error = Standard_readTunerRegisters (demodulator, chip, 14, 1, &vco_cal);
+ if (error) goto exit;
+
+ /* vco selection */
+ vco_cal = vco_cal & 0x3f;
+ switch(vco_select) {
+ case 0:
+ if (vco_cal < 0x08)
+ {
+ reg[6] = reg[6] & ~(0x18); /* reset VCO select */
+ reg[6] = reg[6] | 0x08; /* vco_select = 1; */
+ reg[6] = reg[6] | 0x20; /* fix clock out */
+ error = Standard_writeTunerRegisters (demodulator, chip, 6, 1, &reg[6]);
+ if (error) goto exit;
+
+ /* recalibration */
+ vco_cal = 0x80;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal);/* vco_cal restart */
+ if (error) goto exit;
+
+ vco_cal = 0x00;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal);/* vco_cal run */
+ if (error) goto exit;
+ break;
+ }
+ else
+ {
+ reg[6] = reg[6] & ~(0x18); /* reset VCO select */
+ reg[6] = reg[6] | 0x00; /* vco_select = 0; */
+ reg[6] = reg[6] | 0x20; /* fix clock out */
+ error = Standard_writeTunerRegisters (demodulator, chip, 6, 1, &reg[6]);
+ if (error) goto exit;
+ break;
+ }
+ case 1:
+ if (vco_cal > 0x2a)
+ {
+ reg[6] = reg[6] & ~(0x18); /* reset VCO select */
+ reg[6] = reg[6] | 0x00; /* vco_select = 0; */
+ reg[6] = reg[6] | 0x20; /* fix clock out */
+ error = Standard_writeTunerRegisters (demodulator, chip, 6, 1, &reg[6]);
+ if (error) goto exit;
+
+ /* recalibration */
+ vco_cal = 0x80;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal);/*vco_cal restart*/
+ if (error) goto exit;
+
+ vco_cal = 0x00;
+ error = Standard_writeTunerRegisters (demodulator, chip, 14, 1, &vco_cal);/*vco_cal run*/
+ if (error) goto exit;
+ break;
+ }
+ else
+ {
+ reg[6] = reg[6] & ~(0x18); /* reset VCO select */
+ reg[6] = reg[6] | 0x08; /* vco_select = 1; */
+ reg[6] = reg[6] | 0x20; /* fix clock out */
+ error = Standard_writeTunerRegisters (demodulator, chip, 6, 1, &reg[6]);
+ if (error) goto exit;
+ break;
+ }
+
+ }
+
+ reg[16] = 0x0b;
+
+ User_delay (demodulator, 10);
+ error = Standard_readTunerRegisters (demodulator, chip, 13, 1, &reg[13]);
+ if (error) goto exit;
+
+ rc_cal_forcing = reg[13] | 0x10;
+
+ error = Standard_writeTunerRegisters (demodulator, chip, 13, 1, &rc_cal_forcing);
+ if (error) goto exit;
+
+ error = Standard_writeTunerRegisters (demodulator, chip, 16, 1, &reg[16]);
+ if (error) goto exit;
+
+
+exit:
+ return(error);
+}
+
+
+TunerDescription tuner_FC0012 = {
+ FC0012_open, /** needed function*/
+ FC0012_close, /** needed function*/
+ FC0012_set, /** needed function*/
+ FC0012_scripts, /** Afa's tuner setting */
+ FC0012_scriptSets, /** Afa's tuner setting */
+ FC0012_ADDRESS, /** tuner i2c address */
+ 1, /** length of tuner register address */
+ 0, /** tuner if frequency*/
+ True, /** spectrum inverse */
+ 0x2E, /** tuner id */
+};
diff --git a/api/Fitipower_FC0012.h b/api/Fitipower_FC0012.h
new file mode 100644
index 0000000..7b94692
--- /dev/null
+++ b/api/Fitipower_FC0012.h
@@ -0,0 +1,60 @@
+/**
+ * @(#)Fitipower_FC0012.h
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.09.17
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.09.17 Benny Chen added tuner version
+ * ==========================================================
+ *
+ * Copyright 2008 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __Fitipower_FC0012_H__
+#define __Fitipower_FC0012_H__
+
+
+#define FC0012_VER_MAJOR 2
+#define FC0012_VER_MINOR 0
+
+extern TunerDescription tuner_FC0012;
+
+
+/**
+ *
+ */
+Dword FC0012_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword FC0012_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword FC0012_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Fitipower_FC0012_Script.h b/api/Fitipower_FC0012_Script.h
new file mode 100644
index 0000000..7100844
--- /dev/null
+++ b/api/Fitipower_FC0012_Script.h
@@ -0,0 +1,77 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)Fiti_EXT_EVB.cpp
+*
+* Copyright 2005 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 5
+#define VERSION2 66
+#define VERSION3 12
+#define VERSION4 0
+
+
+#define FC0012_ADDRESS 0xC0
+#define FC0012_SCRIPTSETLENGTH 0x00000001
+
+Word FC0012_scriptSets[] = {
+0x32
+};
+
+ValueSet FC0012_scripts[] = {
+ {0x0046, 0x2E},
+ {0x0057, 0x00},
+ {0x0058, 0x01},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x006e, 0x01},
+ {0x0071, 0x0A},
+ {0x0072, 0x02},
+ {0x0074, 0x01},
+ {0x0079, 0x01},
+ {0x0093, 0x00},
+ {0x0094, 0x00},
+ {0x0095, 0x00},
+ {0x0096, 0x00},
+ {0x009b, 0x2D},
+ {0x009c, 0x60},
+ {0x009d, 0x23},
+ {0x00b3, 0x01},
+ {0x00c3, 0x01},
+ {0x00c4, 0x00},
+ {0xF007, 0x00},
+ {0xF00A, 0x1B},
+ {0xF00B, 0x1B},
+ {0xF00C, 0x1B},
+ {0xF00D, 0x1B},
+ {0xF00E, 0xFF},
+ {0xF00F, 0x01},
+ {0xF010, 0x00},
+ {0xF011, 0x02},
+ {0xF012, 0xFF},
+ {0xF013, 0x01},
+ {0xF014, 0x00},
+ {0xF015, 0x02},
+ {0xF01B, 0xEF},
+ {0xF01C, 0x01},
+ {0xF01D, 0x0f},
+ {0xF01E, 0x02},
+ {0xF01F, 0x6E},
+ {0xF020, 0x00},
+ {0xF025, 0xDE},
+ {0xF026, 0x00},
+ {0xF027, 0x0A},
+ {0xF028, 0x03},
+ {0xF029, 0x6E},
+ {0xF02A, 0x00},
+ {0xF047, 0x00},
+ {0xF054, 0x0},
+ {0xF055, 0x0},
+ {0xF077, 0x01},
+ {0xF1E6, 0x00},
+
+};
diff --git a/api/Freescale_MC44CD02.c b/api/Freescale_MC44CD02.c
new file mode 100644
index 0000000..bf810ea
--- /dev/null
+++ b/api/Freescale_MC44CD02.c
@@ -0,0 +1,307 @@
+/**
+ * @(#)Freescale_MC44CD02.cpp
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "Freescale_MC44CD02_Script.h"
+
+
+Bool powerDownMode = False;
+Bool bandLockActivated = False;
+Bool analogTestMode = False;
+Byte referenceClock = 36;
+Dword programmableDivider;
+Short dischargingCurrent = 266;
+Short chargingCurrent = 836;
+Short offsetAdjustment = -109;
+Short gainAdjustment = 221;
+Bool singleEndBuffer = True;
+Bool outputDriverDisabled = False;
+Byte sineWaveAmplitude = 1;
+Bool squareWaveShape = False;
+Bool clockHasPriority = False;
+Byte kneeVoltageShift = 0;
+Bool antiAliasingDisabled = False;
+Bool openDrainOutput = False;
+Bool stateOfOutputPort = False;
+Byte postAmplifierGain = 14;
+
+
+Dword MC44CD02_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+ Byte values[7];
+
+ values[0] = 0;
+ if (powerDownMode == True)
+ values[0] |= 0x04;
+ if (bandLockActivated == True)
+ values[0] |= 0x02;
+ if (analogTestMode == True)
+ values[0] |= 0x01;
+
+ values[1] = 0;
+ if (referenceClock == 26)
+ values[1] |= 0x20;
+ programmableDivider = (666 * 6) / 1000;
+ values[1] |= (Byte) ((programmableDivider & 0x1F00) >> 8);
+
+ values[2] = (Byte) (programmableDivider & 0x00FF);
+
+ values[3] = 0;
+ switch (chargingCurrent) {
+ case 266 :
+ values[3] |= 0x00;
+ break;
+ case 106 :
+ values[3] |= 0x08;
+ break;
+ case 159 :
+ values[3] |= 0x10;
+ break;
+ case 213 :
+ values[3] |= 0x18;
+ break;
+ case 319 :
+ values[3] |= 0x20;
+ break;
+ case 379 :
+ values[3] |= 0x21;
+ break;
+ case 425 :
+ values[3] |= 0x30;
+ break;
+ default :
+ values[3] |= 0x31;
+ }
+ switch (chargingCurrent) {
+ case 836 :
+ values[3] |= 0x00;
+ break;
+ case 790 :
+ values[3] |= 0x01;
+ break;
+ case 744 :
+ values[3] |= 0x02;
+ break;
+ case 698 :
+ values[3] |= 0x03;
+ break;
+ case 880 :
+ values[3] |= 0x04;
+ break;
+ case 924 :
+ values[3] |= 0x05;
+ break;
+ case 967 :
+ values[3] |= 0x06;
+ break;
+ case 1011 :
+ values[3] |= 0x07;
+ }
+
+ values[4] = 0;
+ switch (offsetAdjustment) {
+ case -109 :
+ values[4] |= 0x00;
+ break;
+ case -73 :
+ values[4] |= 0x08;
+ break;
+ case -36 :
+ values[4] |= 0x10;
+ break;
+ case 0 :
+ values[4] |= 0x18;
+ break;
+ case 39 :
+ values[4] |= 0x20;
+ break;
+ case 77 :
+ values[4] |= 0x21;
+ break;
+ case 116 :
+ values[4] |= 0x30;
+ break;
+ case 154 :
+ values[4] |= 0x31;
+ }
+ switch (gainAdjustment) {
+ case 221 :
+ values[4] |= 0x00;
+ break;
+ case 227 :
+ values[4] |= 0x01;
+ break;
+ case 233 :
+ values[4] |= 0x02;
+ break;
+ case 240 :
+ values[4] |= 0x03;
+ break;
+ case 247 :
+ values[4] |= 0x04;
+ break;
+ case 255 :
+ values[4] |= 0x05;
+ break;
+ case 264 :
+ values[4] |= 0x06;
+ break;
+ case 274 :
+ values[4] |= 0x07;
+ }
+
+ values[5] = 0;
+ if (singleEndBuffer == True)
+ values[5] |= 0x80;
+ if (outputDriverDisabled == True)
+ values[5] |= 0x40;
+ if (sineWaveAmplitude == 1)
+ values[5] |= 0x20;
+ if (squareWaveShape == True)
+ values[5] |= 0x08;
+ if (clockHasPriority == True)
+ values[5] |= 0x04;
+ if (kneeVoltageShift == 0)
+ values[5] |= 0x00;
+
+ values[6] = 0;
+ if (antiAliasingDisabled == True)
+ values[6] |= 0x40;
+ if (openDrainOutput == True)
+ values[6] |= 0x20;
+ if (stateOfOutputPort == True)
+ values[6] |= 0x10;
+ switch (postAmplifierGain) {
+ case 14 :
+ values[6] |= 0x00;
+ break;
+ case 10 :
+ values[6] |= 0x04;
+ break;
+ case 12 :
+ values[6] |= 0x08;
+ break;
+ }
+ switch (8) {
+ case 8 :
+ values[6] |= 0x00;
+ break;
+ case 7 :
+ values[6] |= 0x02;
+ break;
+ case 6 :
+ values[6] |= 0x03;
+ break;
+ }
+
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x00, 7, values);
+
+ return (error);
+}
+
+
+Dword MC44CD02_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+ return (error);
+}
+
+
+Dword MC44CD02_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ Dword error = Error_NO_ERROR;
+ Byte values[2];
+
+ values[0] = 0;
+ if (referenceClock == 26)
+ values[0] |= 0x20;
+ programmableDivider = (frequency * 6) / 1000;
+ values[0] |= (Byte) ((programmableDivider & 0x1F00) >> 8);
+
+ values[1] = (Byte) (programmableDivider & 0x00FF);
+
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x01, 2, values);
+ if (error) goto exit;
+
+ values[0] = 0;
+ if (antiAliasingDisabled == True)
+ values[0] |= 0x40;
+ if (openDrainOutput == True)
+ values[0] |= 0x20;
+ if (stateOfOutputPort == True)
+ values[0] |= 0x10;
+ switch (postAmplifierGain) {
+ case 14 :
+ values[0] |= 0x00;
+ break;
+ case 10 :
+ values[0] |= 0x04;
+ break;
+ case 12 :
+ values[0] |= 0x08;
+ break;
+ }
+ switch (bandwidth) {
+ case 8000 :
+ values[0] |= 0x00;
+ break;
+ case 7000 :
+ values[0] |= 0x02;
+ break;
+ case 6000 :
+ values[0] |= 0x03;
+ break;
+ }
+
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x06, 1, values);
+
+exit :
+ return (error);
+}
+
+
+TunerDescription tuner_MC44CD02 = {
+ MC44CD02_open,
+ MC44CD02_close,
+ MC44CD02_set,
+ MC44CD02_scripts,
+ MC44CD02_scriptSets,
+ MC44CD02_ADDRESS, /** tuner i2c address */
+ 1, /** length of tuner register address */
+ 0, /** tuner if */
+ True, /** spectrum inverse */
+ 0x20, /** tuner id */
+};
diff --git a/api/Freescale_MC44CD02.h b/api/Freescale_MC44CD02.h
new file mode 100644
index 0000000..f849d6f
--- /dev/null
+++ b/api/Freescale_MC44CD02.h
@@ -0,0 +1,61 @@
+/**
+ * @(#)Freescale_MC44CD02.h
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __Freescale_MC44CD02_H__
+#define __Freescale_MC44CD02_H__
+
+
+#define MC44CD02_VER_MAJOR 2
+#define MC44CD02_VER_MINOR 0
+
+extern TunerDescription tuner_MC44CD02;
+
+
+/**
+ *
+ */
+Dword MC44CD02_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword MC44CD02_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+
+/**
+ *
+ */
+Dword MC44CD02_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Freescale_MC44CD02_Script.h b/api/Freescale_MC44CD02_Script.h
new file mode 100644
index 0000000..cb8560a
--- /dev/null
+++ b/api/Freescale_MC44CD02_Script.h
@@ -0,0 +1,129 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+/*
+* @(#)Freescale_MC44CD02_EXT_EVB.cpp
+*
+* Copyright 2005 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 5
+#define VERSION2 1
+#define VERSION3 7
+#define VERSION4 0
+
+
+
+#define MC44CD02_ADDRESS 0xC0
+#define MC44CD02_SCRIPTSETLENGTH 0x00000001
+
+Word MC44CD02_scriptSets[] ={
+0x66
+};
+
+ValueSet MC44CD02_scripts[] = {
+ {0xF600, 0x05},
+ {0xF601, 0x08},
+ {0xF602, 0x0B},
+ {0xF603, 0x0E},
+ {0xF604, 0x11},
+ {0xF605, 0x14},
+ {0xF606, 0x17},
+ {0xF607, 0x1F},
+ {0xF5F8, 0x01},
+ {0xF5DF, 0xFB},
+ {0xF5E0, 0x00},
+ {0xF5E3, 0x09},
+ {0xF5E4, 0x01},
+ {0xF5E5, 0x01},
+ {0xF5FD, 0x01},
+ {0x0081, 0x0A},
+ {0x00c4, 0x19},
+ {0x007e, 0x04},
+ {0x00c0, 0x05},
+ {0xF80F, 0x40},
+ {0xF810, 0x54},
+ {0xF811, 0x5a},
+ {0xF78B, 0x01},
+ {0xFB06, 0x3},
+ {0x00a0, 0xCF},
+ {0x009f, 0xE1},
+ {0x00a6, 0x01},
+ {0xFD8B, 0x00},
+ {0x00ad, 0x01},
+ {0x00a3, 0x01},
+ {0x00a4, 0x3C},
+ {0x00ab, 0x01},
+ {0x008e, 0x01},
+ {0x008a, 0x01},
+ {0x0099, 0x01},
+ {0x00a9, 0x00},
+ {0x00a5, 0x01},
+ {0x00aa, 0x01},
+ {0x0092, 0x06},
+ {0xF078, 0x00},
+ {0xF016, 0x10},
+ {0xF017, 0x04},
+ {0xF018, 0x05},
+ {0xF019, 0x04},
+ {0xF01A, 0x05},
+ {0xF021, 0x03},
+ {0xF022, 0x0A},
+ {0xF023, 0x0A},
+ {0xF02B, 0x00},
+ {0x0070, 0x0A},
+ {0xF1CB, 0xA0},
+ {0xF1CC, 0x01},
+ {0x0046, 0x20},
+ {0x00b3, 0x02},
+ {0xF047, 0x00},
+ {0xF007, 0x00},
+ {0xF1E6, 0x01},
+ {0x0074, 0x00},
+ {0xF077, 0x01},
+ {0xF00A, 0x1B},
+ {0xF00B, 0x1C},
+ {0xF00C, 0x1B},
+ {0xF00D, 0x1C},
+ {0x0071, 0x05},
+ {0x0072, 0x02},
+ {0xF01F, 0xA0},
+ {0xF020, 0x00},
+ {0x0068, 0xA0},
+ {0xF029, 0x8C},
+ {0xF02A, 0x00},
+ {0xF010, 0x00},
+ {0xF011, 0x02},
+ {0xF00E, 0xE1},
+ {0xF00F, 0x00},
+ {0xF014, 0xBA},
+ {0xF015, 0x02},
+ {0xF012, 0xE1},
+ {0xF013, 0x00},
+ {0xF01B, 0x23},
+ {0xF01C, 0x03},
+ {0xF01D, 0x78},
+ {0xF01E, 0x00},
+ {0xF025, 0x23},
+ {0xF026, 0x03},
+ {0xF027, 0x78},
+ {0xF028, 0x00},
+ {0x006e, 0x52},
+ {0x006d, 0x00},
+ {0x0057, 0x01},
+ {0x0058, 0x01},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x0093, 0x00},
+ {0x0096, 0x00},
+ {0x0094, 0x00},
+ {0x0095, 0x00},
+ {0x0079, 0x01},
+ {0x00c2, 0x00},
+ {0x00c1, 0x01},
+ {0xF02C, 0x01},
+ {0x00b0, 0x01},
+ {0xF000, 0xF},
+
+};
diff --git a/api/ITD30x0.c b/api/ITD30x0.c
new file mode 100644
index 0000000..b300409
--- /dev/null
+++ b/api/ITD30x0.c
@@ -0,0 +1,703 @@
+
+/*!
+*******************************************************************************
+* \FILE <ITD30x0.CPP>
+*
+* \BRIEF
+* <ITD30x0 MP user API v2.2 - the part of implementation>
+* - Source Integration
+* - Added "Reset PLL" Option
+* - Added "Power-down" Mode
+* - Added "A,B type Selection"
+* - RSSI Computing Option
+*
+* \DATE
+* < 2006-08-28 >
+*
+* \AUTHOR
+* Integrant Technologies. Inc.
+* - <Dennis Hong> <Dennis.Hong@analog.com>
+*******************************************************************************
+*/
+
+#include "ITD30x0.h"
+
+
+/* Global Variable */
+int i;
+int ADCOUT;
+int cnt_loop = 15;
+long TUNER_REFCLK;
+long LO_FREQ;
+long PLL_FREQ;
+long PLL_N, PLL_F, PLLR = 1;
+int old_VCO_BAND;
+int DIVSEL;
+int BAND;
+int VCORG;
+long TUNER_IF;
+long TUNER_RF;
+int RegRFAGC = 0;
+int RegDATA71, RegDATA72, RegData85;
+long fInpRFPOW = 0;
+int SPLIT_ID;
+INT_U8 CHIP_TYPE;
+INT_U8 CurBAND = CUR_RF_BAND3;
+INT_U8 FCCLK;
+INT_U8 RFAGC_SPEED_L; /* SPEED[2:0] we had a resolution of 10 bits for RFAGC */
+INT_U8 RFAGC_SPEED_H; /* SPEED[9:3] */
+INT_U8 IFAGC_SPEED;
+INT_U8 AGCMODE = 0; /* If this value = 0, Internal AGC mode. */
+ /* If this value = 1, External AGC mode */
+
+
+/* Band - III */
+/* LO Freq (MHz) BAND VCORGI2CDIVSEL */
+/* From To(dec) */
+RG_NUM_BAND BAND_III_PLL_TABLE[26]=
+{
+ {160000, 162850, 2, 0, 1},
+ {162850, 165350, 2, 1, 1},
+ {165350, 168350, 2, 2, 1},
+ {168350, 171600, 2, 3, 1},
+ {171600, 174800, 2, 4, 1},
+ {174800 , 176350, 2, 5, 1},
+ {176350, 179850, 2, 6, 1},
+ {179850, 183350, 2, 7, 1},
+ {183350, 188850, 2, 8, 1},
+ {188850, 191850, 2, 9, 1},
+ {191850, 195850, 2, 10, 1},
+ {195850, 200850, 2, 11, 1},
+ {200850, 205850, 2, 12, 1},
+ {205850, 211850, 2, 13, 1},
+ {211850, 216850, 2, 14, 1},
+ {216850, 221850, 2, 15, 1},
+ {221850, 226850, 0, 6, 2},
+ {226850, 231850, 0, 7, 2},
+ {231850, 236850, 0, 8, 2},
+ {236850, 240850, 0, 9, 2},
+ {240850, 247850, 0, 10, 2},
+ {247850, 254850, 0, 11, 2},
+ {254850, 261850, 0, 12, 2},
+ {261850, 268850, 0, 13, 2},
+ {268850, 277850, 0, 14, 2},
+ {277850, 285850, 0, 15, 2}
+};
+
+RG_NUM_BAND LBAND_PLL_TABLE[2]=
+{
+ {1445000, 1460000, 1, 1, 3},
+ {1460000, 1495000, 1, 2, 3}
+};
+
+RG_NUM_BAND FMBAND_PLL_TABLE[19]=
+{
+ {82500, 83000, 2, 2, 0},
+ {83000, 84300, 2, 3, 0},
+ {84300, 86000, 2, 4, 0},
+ {86000, 87300, 2, 5, 0},
+ {87300, 89000, 2, 6, 0},
+ {89000, 91000, 2, 7, 0},
+ {91000, 93000, 2, 8, 0},
+ {93000, 95000, 2, 9, 0},
+ {95000, 97000, 2, 10, 0},
+ {97000, 99100, 2, 11, 0},
+ {99100, 102000, 2, 12, 0},
+ {102000, 103000, 0, 2, 1},
+ {103000, 104500, 0, 3, 1},
+ {104500, 107000, 0, 4, 1},
+ {107000, 109000, 0, 5, 1},
+ {109000, 111000, 0, 6, 1},
+ {111000, 114000, 0, 7, 1},
+ {114000, 116300, 0, 8, 1},
+ {116300, 118000, 0, 9, 1}
+};
+
+DIV_CURRENT_SETTING ITD30x0MP_DCSET_A[4]=
+{
+ {0,0}, /* DIVSEL, DIVCON */
+ {1,1},
+ {2,2},
+ {3,6}
+};
+
+DIV_CURRENT_SETTING ITD30x0MP_DCSET_B[4]=
+{
+ {0,0}, /* DIVSEL, DIVCON */
+ {1,1},
+ {2,2},
+ {3,7}
+};
+
+long BAND3[BAND3CH_MAX]= { /*5A*/174928, /*5B*/176640, /*5C*/178352,\
+/*5D*/180064, /*6A*/181936, /*6B*/183648, /*6C*/185360, /*6D*/187072,\
+/*7A*/188928, /*7B*/190640, /*7C*/192352, /*7D*/194064, /*8A*/195936,\
+/*8B*/197648, /*8C*/199360, /*8D*/201072, /*9A*/202928, /*9B*/204640,\
+/*9C*/206352, /*9D*/208064, /*10A*/209936,/*10B*/211648,/*10C*/213360,\
+/*10D*/215072,/*11A*/216928,/*11B*/218640,/*11C*/220352,/*11D*/222064,\
+/*12A*/223936,/*12B*/225648,/*12C*/227360,/*12D*/229072,/*13A*/230784,\
+/*13B*/232496,/*13C*/234208,/*13D*/235776,/*13E*/237488,/*13F*/239200};
+
+long KBAND[KBANDCH_MAX]={ /*8A*/181280,/*8B*/183008,/*8C*/184736,\
+ /*10A*/193280,/*10B*/195008,/*10C*/196736,/*12A*/205280,/*12B*/207008,\
+ /*12C*/208736};
+
+
+long LBAND[LBANDCH_MAX]= {/*LA*/1452960,/*LB*/1454672,/*LC*/1456384,/*LD*/1458096, \
+ /*LE*/1459808,/*LF*/1461520,/*LG*/1463232,/*LH*/1464944,/*LI*/1466656,\
+ /*LJ*/1468386,/*LK*/1470080,/*LL*/1471792,/*LM*/1473504,/*LN*/1475216,\
+ /*LO*/1476928,/*LP*/1478640,/*LQ*/1480352,/*LR*/1482064,/*LS*/1483776,\
+ /*LT*/1485488,/*LU*/1487200,/*LV*/1488912,/*LW*/1490624};
+
+INT_U8* INITVAL;
+INT_U8 INITVAL_B3[68]=
+{
+ /*00:0x73*/ /*01:0x74*/ /*02:0x75*/ /*03:0x76*/ /*04:0x77*/
+ 0x80, 0x8a, 0x8d, 0xb3/*0xc3->0xb3*/, 0x11,
+ /*05:0x78*/ /*06:0x79*/ /*07:0x7A*/ /*08:0x7B*/ /*09:0x7C*/
+ 0x03, 0x00, 0x20, 0x40, 0x20,
+ /*10:0x7D*/ /*11:0x7E*/ /*12:0x7F*/ /*13:0x80*/ /*14:0x81*/
+ 0x06, 0x05, 0xb0/*0x90->0xb0*/, 0x00, 0x33,
+ /*15:0x82*/ /*16:0x83*/ /*17:0x84*/ /*18:0x85*/ /*19:0x86*/
+ 0x90, 0x09, 0x32, 0x88, 0xfd,
+ /*20:0x87*/ /*21:0x88*/ /*22:0x89*/ /*23:0x8A*/ /*24:0x8B*/
+ 0xf1, 0x2b, 0xff, 0xb2, 0x94,
+ /*25:0x8C*/ /*26:0x8D*/ /*27:0x8E*/ /*28:0x8F*/ /*29:0x90*/
+ 0xce, 0x55/*0x20->0x55*/, 0x0a, 0x7f, 0x81,
+ /*30:0x91*/ /*31:0x92*/ /*32:0x93*/ /*33:0x94*/ /*34:0x95*/
+ 0x7f, 0x81, 0x01, 0xc6, 0x40,
+ /*35:0x96*/ /*36:0x97*/ /*37:0x98*/ /*38:0x99*/ /*39:0x9A*/
+ 0x46, 0x7e/*0x70->0x7e*/, 0x13, 0x05, 0x00,
+ /*40:0x9B*/ /*41:0x9C*/ /*42:0x9D*/ /*43:0x9E*/ /*44:0x9F*/
+ 0x02/*0xc2->0x02*/, 0x00/*0x5a->0x00*/, 0x00/*0x63->0x00*/, 0xe0/*0xe7->0xe0*/, 0x80/*0x83->0x80*/,
+ /*45:0xA0*/ /*46:0xA1*/ /*47:0xA2*/ /*48:0xA3*/ /*49:0xA4*/
+ 0x01/*0x05->0x01*/, 0xb0, 0x7e, 0x7f, 0x00/*0x58->0x00*/,
+ /*50:0xA5*/ /*51:0xA6*/ /*52:0xA7*/ /*53:0xA8*/ /*54:0xA9*/
+ 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
+ /*55:0xAA*/ /*56:0xAB*/ /*57:0xAC*/ /*58:0xAD*/ /*59:0xAE*/
+ 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
+ /*60:0xAF*/ /*61:0xB0*/ /*62:0xB1*/ /*63:0xB2*/ /*64:0xB3*/
+ 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
+ /*65:0xB4*/ /*66:0xB5*/ /*67:0xB6*/
+ 0x1f, 0x21, 0x08
+};
+
+INT_U8 INITVAL_LB[68]=
+{
+ /*00:0x73*/ /*01:0x74*/ /*02:0x75*/ /*03:0x76*/ /*04:0x77*/
+ 0x80/*0xf0->0x80*/, 0x9a, 0x82, 0xb3/*0xc3->0xb3*/, 0x11,
+ /*05:0x78*/ /*06:0x79*/ /*07:0x7A*/ /*08:0x7B*/ /*09:0x7C*/
+ 0x83,/*0x8b->0x83*/ 0x00/*0x92->0x00*/, 0x20/*0xcb->0x20*/, 0x40/*0xc6->0x40*/, 0x20/*0xff->0x20*/,
+ /*10:0x7D*/ /*11:0x7E*/ /*12:0x7F*/ /*13:0x80*/ /*14:0x81*/
+ 0x06/*0xcc->0x06*/, 0x05/*0x04->0x05*/, 0xb0/*0x90->0xb0*/, 0x00, 0x33/*0x31->0x33*/,
+ /*15:0x82*/ /*16:0x83*/ /*17:0x84*/ /*18:0x85*/ /*19:0x86*/
+ 0x70, 0x0d,/*0x2d->0x0d*/ 0x3b, 0x30/*0x34->0x30*/, 0xaa,
+ /*20:0x87*/ /*21:0x88*/ /*22:0x89*/ /*23:0x8A*/ /*24:0x8B*/
+ 0xd0, 0x2e, 0xff, 0xb2/*0xba->0xb2*/, 0x94,
+ /*25:0x8C*/ /*26:0x8D*/ /*27:0x8E*/ /*28:0x8F*/ /*29:0x90*/
+ 0xce, 0x55/*0x20->0x55*/, 0x2a/*0x24->0x2a*/, 0x7f/*0x3f->0x7f*/, 0x81,
+ /*30:0x91*/ /*31:0x92*/ /*32:0x93*/ /*33:0x94*/ /*34:0x95*/
+ 0x7f, 0x81, 0x01, 0xc6, 0x40/*0x3a->0x40*/,
+ /*35:0x96*/ /*36:0x97*/ /*37:0x98*/ /*38:0x99*/ /*39:0x9A*/
+ 0x46, 0x7e, 0x13, 0x05/*0x00->0x05*/, 0x00,
+ /*40:0x9B*/ /*41:0x9C*/ /*42:0x9D*/ /*43:0x9E*/ /*44:0x9F*/
+ 0x02/*0x00->0x02*/, 0x00/*0x04->0x00*/, 0x00, 0xe0/*0x40->0xe0*/, 0x80/*0x83->0x80*/,
+ /*45:0xA0*/ /*46:0xA1*/ /*47:0xA2*/ /*48:0xA3*/ /*49:0xA4*/
+ 0x01/*0x03->0x01*/, 0xb0/*0xb2->0xb0*/, 0x7e, 0x7f, 0x00/*0x84->0x00*/,
+ /*50:0xA5*/ /*51:0xA6*/ /*52:0xA7*/ /*53:0xA8*/ /*54:0xA9*/
+ 0x1f/*0x2f->0x1f*/, 0x1f, 0x1f, 0x1f, 0x1f,
+ /*55:0xAA*/ /*56:0xAB*/ /*57:0xAC*/ /*58:0xAD*/ /*59:0xAE*/
+ 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
+ /*60:0xAF*/ /*61:0xB0*/ /*62:0xB1*/ /*63:0xB2*/ /*64:0xB3*/
+ 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
+ /*65:0xB4*/ /*66:0xB5*/ /*67:0xB6*/
+ 0x1f, 0x21/*0x20->0x21*/, 0x08
+};
+
+
+void WriteIIC (INT_U8 address, INT_U8 value) {
+ Standard_writeTunerRegisters (Integrant_ITD3020_EXT_demodulator, Integrant_ITD3020_EXT_chip, address, 1, &value);
+}
+
+
+void WriteIIC_MultiByte (INT_U8 address, INT_U8* buffer, INT_U8 bufferLength) {
+ Standard_writeTunerRegisters (Integrant_ITD3020_EXT_demodulator, Integrant_ITD3020_EXT_chip, address, bufferLength, buffer);
+}
+
+
+INT_U8 ReadIIC (INT_U8 address) {
+ Byte value;
+
+ Standard_readTunerRegisters (Integrant_ITD3020_EXT_demodulator, Integrant_ITD3020_EXT_chip, address, 1, &value);
+ return (value);
+}
+
+
+long SetFreq(long iRF)
+{
+ SPLIT_ID = ReadIIC(ID1);
+ if ( SPLIT_ID >= LBAND_REVISION )
+ {
+ if (iRF>1000) /* MHz */
+ {
+ if (TUNER_REFCLK>=20000) /* KHz */
+ {
+ PLLR=2;
+ WriteIIC(W50,(ReadIIC(W50)&0xfc) | 0x01);
+ WriteIIC(RCHP0, 0x1F); /* added by Shane, 2006.10.12, charge pump value change */
+ }
+ else
+ {
+ PLLR=1;
+ WriteIIC(W50,(ReadIIC(W50)&0xfc));
+ WriteIIC(RCHP0, 0x12); /* added by Shane, 2006.10.12, charge pump value change */
+ }
+ }
+ else
+ {
+ PLLR=1;
+ WriteIIC(W50,(ReadIIC(W50)&0xfc));
+ WriteIIC(RCHP0, 0x1F); /* added by Shane, 2006.10.12, charge pump value change */
+ }
+ }
+ else
+ {
+ PLLR=1;
+ WriteIIC(W50,(ReadIIC(W50)&0xfc));
+ }
+
+ LO_FREQ = iRF + TUNER_IF; /* TUNER_IF = 0.85 */
+ if (CurBAND==0) LO_FREQ = RFTuning(LO_FREQ, FMBAND_PLL_TABLE, FMBAND_TABLE_LEN);
+ else if (CurBAND==1) LO_FREQ = RFTuning(LO_FREQ, BAND_III_PLL_TABLE,BAND_III_TABLE_LEN);
+ else LO_FREQ = RFTuning(LO_FREQ, LBAND_PLL_TABLE, LBAND_TABLE_LEN);
+
+ return LO_FREQ;
+}
+
+long RFTuning(long fLO_FREQ, RG_NUM_BAND* pRGBAND, INT_U8 tlen)
+{
+ int i;
+ /* PM 5:37 2006-08-24 Added by Shane(Integrant) */
+ unsigned char fusepon; /* fuse power on */
+
+ cnt_loop = 15;
+
+ if (fLO_FREQ < 120000) {
+ if (CurBAND != CUR_RF_FMBAND)
+ ITD30x0MP_Tuner_Init();
+ } else if (fLO_FREQ < 255000) {
+ if (CurBAND != CUR_RF_BAND3)
+ ITD30x0MP_Tuner_Init();
+ } else if (fLO_FREQ > 1000000) {
+ if (CurBAND != CUR_RF_LBAND)
+ ITD30x0MP_Tuner_Init();
+ }
+
+ for(i=0; i<tlen; i++) /* BAND RANGE */
+ {
+ if((fLO_FREQ > pRGBAND[i].lo_from) && (fLO_FREQ <= pRGBAND[i].lo_to))
+ {
+ /* PARAM1=divsel, PARAM2=lband */
+ PLL_FREQ = LO2PLL_Freq(pRGBAND[i].DIVSEL, fLO_FREQ);
+ RegData85 = SetPrescaler(PLL_FREQ, TUNER_REFCLK );
+ BAND = pRGBAND[i].VCO_BAND;
+ VCORG = pRGBAND[i].VCO_RG;
+ DIVSEL = pRGBAND[i].DIVSEL;
+
+ WriteIIC(W03, (INITVAL[2] & 0xf0) | VCORG );
+ WriteIIC( W16, ( INITVAL[15]&0x0f ) | ( DIVSEL << 4 ) | ( BAND << 6 ) );
+
+ {
+ PLL_N = PLL_FREQ / (TUNER_REFCLK / PLLR );
+ PLL_F = (((PLL_FREQ*1024 / (TUNER_REFCLK / PLLR )) - PLL_N*1024) * (1 << 10));
+ RegData85 = (RegData85 & 0xfc) | ((PLL_N >> 8) & 0x03);
+ WriteIIC( W18, (Byte) (PLL_N & 0xff) );
+
+ /* 2006-08-24 Added by Shane(Integrant) */
+ if(ReadIIC(ID1) >= 0x12 && CurBAND == CUR_RF_LBAND) /* if the version of chip is over 0x12, it should be checked whether A or B. */
+ {
+ fusepon = ReadIIC(W29); /* A,B TYPE SELECTION */
+ WriteIIC( W29, (fusepon & 0xFE));
+ CHIP_TYPE = ReadIIC(ID2) & 0x10;
+ WriteIIC( W29, (fusepon | 0x01));
+ }
+ else /* it is A-Type That version of chip is small than 0x12. */
+ {
+ CHIP_TYPE = 0x10; /* default Chip Type = A */
+ }
+
+ if ( CHIP_TYPE==0x10 )
+ RegData85 = ( RegData85 & 0xc7 ) | ( ( ITD30x0MP_DCSET_A[DIVSEL].DIVCON ) << 3 );
+ else
+ RegData85 = ( RegData85 & 0xc7 ) | ( ( ITD30x0MP_DCSET_B[DIVSEL].DIVCON ) << 3 );
+
+ WriteIIC( W19, RegData85 );
+ WriteIIC( W20, (Byte) (PLL_F & 0xff) );
+ WriteIIC( W21, (Byte) ((PLL_F >> 8) & 0xff) );
+ WriteIIC( W22, (Byte) (INITVAL[21]&0xf0 | ( PLL_F >> 16 ) & 0x0f) );
+
+ PLLReset();
+
+ User_delay(NULL, 1);
+ }
+
+ while(1)
+ {
+ old_VCO_BAND = pRGBAND[i].VCO_BAND;
+ ADCOUT = ( ReadIIC(RD9) & 0xf0 ) >> 4;
+ if( ADCOUT < 4 ) i--;
+ else if( ADCOUT > 12 ) i++;
+ else break;
+
+ if((i >= 0) && (i < tlen))
+ {
+ BAND = pRGBAND[i].VCO_BAND;
+ VCORG = pRGBAND[i].VCO_RG;
+ DIVSEL = pRGBAND[i].DIVSEL;
+ WriteIIC( W03, ( INITVAL[2]&0xf0 ) | VCORG );
+ WriteIIC( W16, ( INITVAL[15]&0x0f ) | ( DIVSEL << 4 ) | ( BAND << 6 ) );
+
+ if(BAND != old_VCO_BAND)
+ {
+ PLL_FREQ = LO2PLL_Freq(pRGBAND[i].DIVSEL, LO_FREQ);
+ RegData85 = SetPrescaler(PLL_FREQ, TUNER_REFCLK );
+
+ PLL_N = PLL_FREQ / (TUNER_REFCLK / PLLR );
+ PLL_F = (((PLL_FREQ*1024 / (TUNER_REFCLK / PLLR )) - PLL_N*1024) * (1 << 10));
+ RegData85 = (RegData85 & 0xfc) | ((PLL_N >> 8) & 0x03);
+ WriteIIC( W18, (Byte) (PLL_N & 0xff) );
+
+ if ( CHIP_TYPE==0x10 )
+ RegData85 = ( RegData85&0xc7 ) | ( ( ITD30x0MP_DCSET_A[DIVSEL].DIVCON ) << 3 ); /* A Type */
+ else
+ RegData85 = ( RegData85&0xc7 ) | ( ( ITD30x0MP_DCSET_B[DIVSEL].DIVCON ) << 3 ); /* B Type */
+
+ WriteIIC( W19, RegData85 );
+ WriteIIC( W20, (Byte) (PLL_F & 0xff) );
+ WriteIIC( W21, (Byte) ((PLL_F >> 8) & 0xff) );
+ WriteIIC( W22, (Byte) (INITVAL[21]&0xf0 | ( PLL_F >> 16 ) & 0x0f) );
+
+ PLLReset();
+
+ User_delay(NULL, 1);
+ }
+
+ cnt_loop--;
+ if(cnt_loop == 0)
+ break;
+ }
+ else
+ {
+ return -1;
+ }
+ }
+ return fLO_FREQ;
+ }
+ }
+ return fLO_FREQ;
+}
+
+/*!
+******************************************************************************
+* \BRIEF
+* <LO2PLL_Freq() change LO Freq. to PLL Freq.>
+*
+* \PARAM <int divsel>
+* <Divider Selector(divsel) is used to compute PLL Frequency.>
+* \PARAM <long LO_FREQ>
+* <LO Frequency(LO_FREQ) equal RF Freq. + IF Freq.>
+*
+* \RETURN
+* <long>
+******************************************************************************
+*/
+
+long LO2PLL_Freq(int divsel,long LO_FREQ) /* LO Freq. to PLL Freq. */
+{
+ long PLL_FREQ=0;
+ switch(divsel)
+ {
+ case 0:
+ PLL_FREQ = LO_FREQ*8; /* PLLS=8 */
+ break;
+ case 1:
+ PLL_FREQ = LO_FREQ*4; /* PLLS=4 */
+ break;
+ case 2:
+ PLL_FREQ = LO_FREQ*2; /* PLLS=2 */
+ break;
+ case 3:
+ PLL_FREQ = LO_FREQ*1; /* PLLS=1 */
+ break;
+ default:
+ break;
+ /* add exceptional condition code */
+ }
+ return PLL_FREQ;
+}
+/*!
+*******************************************************************************
+* \BRIEF
+* <FCTuning() is used when Initialized.>
+*
+* \PARAM <void>
+*
+* \RETURN
+* <void>
+*******************************************************************************
+*/
+
+void FCTuning() /* Tuning function for Cut-Off Freq. */
+{
+ int rsv2;
+
+ WriteIIC( W13, 0x40 | ( INITVAL[12] & 0x3f ) ); /* Tune enable, Extune disable */
+
+ User_delay(NULL, 1);
+ rsv2 = (ReadIIC(RD1) & 0xf0) >> 4; /* Get CtuneI2C */
+
+ if(rsv2 > 13)
+ rsv2 = 13;
+
+ WriteIIC(W13, 0x80 | (INITVAL[12] & 0x3f)); /* Extune enable, Tune disable */
+ WriteIIC(W02, (rsv2 << 4) | (INITVAL[1] & 0x0f)); /* Set Extune */
+}
+
+/*!
+*******************************************************************************
+* \BRIEF
+* <For Tuner to Initialize, ITD30x0MP_Tuner_Init() is called after power-on>
+*
+* \PARAM <void>
+*
+* \RETURN
+* <void>
+*
+* \NOTE
+* <before you set, you should select options, TUNER_REFCLK, TUNER_RF.>
+*
+* \PARAGRAPH <title>
+* <paragraph>
+*
+* \PARAGRAPH
+* <another paragraph>
+*******************************************************************************
+*/
+
+void ITD30x0MP_Tuner_Init()
+{
+ /* FCCLK, if RF x-tal = 24.576MHz, 0x04. if RF x-tal = 16.384MHz, 0x05. */
+ /* if RF x-tal = 19.2MHz, 0x06 */
+ if (TUNER_RF < 120000) {
+ CurBAND = CUR_RF_FMBAND;
+ INITVAL = INITVAL_B3;
+ } else if (TUNER_RF < 255000) {
+ CurBAND = CUR_RF_BAND3;
+ INITVAL = INITVAL_B3;
+ } else if (TUNER_RF > 1000000) {
+ CurBAND = CUR_RF_LBAND;
+ INITVAL = INITVAL_LB;
+ }
+
+ if(TUNER_REFCLK <= 16384)
+ {
+ FCCLK = 5;
+ RFAGC_SPEED_L = 7;
+ RFAGC_SPEED_H = 0;
+ IFAGC_SPEED = 0x21;
+ }
+ else if(TUNER_REFCLK <= 19200)
+ {
+ FCCLK = 6;
+ RFAGC_SPEED_L = 7;
+ RFAGC_SPEED_H = 0;
+ IFAGC_SPEED = 0x21;
+ }
+ else if(TUNER_REFCLK <= 24576)
+ {
+ if(CurBAND == CUR_RF_LBAND)
+ {
+ FCCLK = 4;
+ RFAGC_SPEED_L = 1;
+ RFAGC_SPEED_H = 3;
+ IFAGC_SPEED = 0x20;
+ }
+ else
+ {
+ FCCLK = 4;
+ RFAGC_SPEED_L = 1;
+ RFAGC_SPEED_H = 3;
+ IFAGC_SPEED = 0xFF;
+ }
+ }
+
+ INITVAL[11] = FCCLK;
+ INITVAL[27] = AGCMODE << 5 | (INITVAL[27] & 0xdf);
+ INITVAL[43] = RFAGC_SPEED_L << 5 | (INITVAL[43] & 0x1f);
+ INITVAL[44] = RFAGC_SPEED_H | (INITVAL[44] & 0x80);
+ INITVAL[66] = IFAGC_SPEED;
+
+ WriteIIC_MultiByte(W01, INITVAL, 68);
+
+ /* addr 0xb5, IFAGC SPEED, if x-tal = 24.576MHz, 0xff. */
+ /* if x-tal = 16.384MHz or 19.2MHz, 0x21. */
+ /* (when agc mode = internal agc, this apply to ...) */
+
+ PostProcessingAfterInit();
+ SetFreq(TUNER_RF);
+
+ FCTuning();
+}
+/*!
+*******************************************************************************
+* \BRIEF
+* <PostProcessingAfterInit() is called when initialized.>
+*
+* \PARAM <void>
+* <void type>
+*
+* \RETURN
+* <void>
+*
+* \NOTE
+* <this process have to called for tuner to stable.>
+* \PARAGRAPH
+* <External AGC Mode = 0x08, Internal AGC Mode = 0x00>
+*******************************************************************************
+*/
+
+void PostProcessingAfterInit()
+{
+ WriteIIC (W48, 0x00);
+ WriteIIC (W49, AGCMODE << 3);
+}
+
+/*!
+*******************************************************************************
+* \BRIEF
+* <PowerDown() function is able to switch all blocks on Tuner.>
+*
+* \PARAM <bool bOnOff>
+* <all blocks on Tuner is Turn On/Off by bOnOff.>
+*
+* \RETURN
+* <void>
+*
+* \NOTE
+* <if bOnOff=1, power down mode , else bOnOff=0, power up mode.>
+*
+*******************************************************************************
+*/
+
+void PowerDownOnOff(unsigned char bOnOff)
+{
+ if (!bOnOff)
+ {
+ WriteIIC(W48, 0x00);
+ WriteIIC(W49, AGCMODE << 3);
+ }
+ else
+ {
+ WriteIIC(W48, 0x01);
+ WriteIIC(W49, AGCMODE << 3);
+ }
+}
+/*!
+*******************************************************************************
+* \BRIEF
+* <GetRssiValue() Function is used to Get RF Power.>
+*
+* \PARAM <void>
+* <void type>
+*
+* \RETURN
+* <integer value[dBm]>
+*
+* \NOTE
+* <when this function is called, SNR is not good.
+* we recommend to call under once per one second. >
+*
+* \PARAGRAPH <RF Power computing algorithm>
+* <RF input power =
+* -(RFAGC[8:0]x0.133dB)-(LNAGAIN[0]x22dB)-(MIXGAIN[0]x13dB)-9.5>
+*
+*
+* \PARAGRAPH
+* <RFAGC addr = 0x71, 0x72, LNAGAIN addr = 0x72[6] MIXERGAIN addr 0x72[7]>>
+*******************************************************************************
+*/
+
+int GetRssiValue()
+{
+ RegDATA71 = ReadIIC (RD10);
+ RegDATA72 = ReadIIC (RD11);
+ RegRFAGC = RegDATA71 + ((RegDATA72&0x01)*256);
+ fInpRFPOW = -(RegRFAGC*133) - ((RegDATA72&0x40)>>6)*22000-((RegDATA72&0x80)>>7)*13000-9500;
+ fInpRFPOW=fInpRFPOW/1000;
+ /*iRFAGC_val = RegRFAGC;*/
+ /*iRFPWR_dB = fInpRFPOW;*/
+ return fInpRFPOW;
+}
+/*!
+*******************************************************************************
+* \BRIEF
+* <GetPLLStatus() function inform us the status of PLL lock.>
+*
+* \PARAM <void>
+* <void type>
+*
+* \RETURN
+* <bool : True or False>
+*
+* \NOTE
+* <if this bit = 1, Lock else unLock >
+*******************************************************************************
+*/
+
+unsigned char GetPLLStatus()
+{
+ return (ReadIIC(RD2) & 0x01);
+}
+/*!
+*******************************************************************************
+* \BRIEF
+* <PLLReset() function is used to restart for PLL block. >
+*
+* \PARAM <void>
+*
+* \RETURN
+* <void>
+*
+* \NOTE
+* <Call this function after PLL-Setting>
+*******************************************************************************
+*/
+
+void PLLReset()
+{
+ unsigned char data, data_Low, data_High;
+
+ data = INITVAL[16];
+ data_Low = data & 0xfd;
+ data_High = data & 0xff | 0x02;
+
+ WriteIIC(W17,data_Low);
+ WriteIIC(W17,data_High);
+ WriteIIC(W17,data_Low);
+}
+
+INT_U8 SetPrescaler(long pllfreq, long iREF)
+{
+ unsigned char data;
+
+ data = INITVAL[18] & 0x3f;
+
+ if ((pllfreq/(iREF/PLLR))<64)
+ {
+ return (data | 0x80); /* PC4 */
+ }
+ else
+ {
+ return (data | 0x00); /* PC8 */
+ }
+}
diff --git a/api/ITD30x0.h b/api/ITD30x0.h
new file mode 100644
index 0000000..b765533
--- /dev/null
+++ b/api/ITD30x0.h
@@ -0,0 +1,254 @@
+
+/*!
+*******************************************************************************
+* \FILE <ITD30x0.H>
+*
+* \BRIEF
+* <ITD30x0 MP user API v2.2 - the part of declaration>
+* - Source Integration
+* - Added "Reset PLL" Option
+* - Added "Power-down" Mode
+* - Added "A,B type Selection"
+* - RSSI Computing Option
+*
+* \DATE
+* < 2006-08-28 >
+*
+* \AUTHOR
+* Integrant Technologies. Inc.
+* - <Dennis Hong> <chatmunk@integrant.com>
+*******************************************************************************
+*/
+#include "standard.h"
+
+extern Demodulator* Integrant_ITD3020_EXT_demodulator;
+extern Byte Integrant_ITD3020_EXT_chip;
+
+
+#pragma once
+
+/* Register Map Define */
+#define RD0 100 /*0x64*/
+#define ID1 101 /*0x65*/
+#define ID2 102 /*0x66*/
+#define ID3 103 /*0x67*/
+#define RD1 104 /*0x68*/
+#define RD2 105 /*0x69*/
+#define RD3 106 /*0x6a*/
+#define RD4 107 /*0x6b*/
+#define RD5 108 /*0x6c*/
+#define RD6 109 /*0x6d*/
+#define RD7 110 /*0x6e*/
+#define RD8 111 /*0x6f*/
+#define RD9 112 /*0x70*/
+#define RD10 113 /*0x71*/
+#define RD11 114 /*0x72*/
+#define W01 115 /*0x73*/
+#define W02 116 /*0x74*/
+#define W03 117 /*0x75*/
+#define W04 118 /*0x76*/
+#define W05 119 /*0x77*/
+#define W06 120 /*0x78*/
+#define W07 121 /*0x79*/
+#define W08 122 /*0x7a*/
+#define W09 123 /*0x7b*/
+#define W10 124 /*0x7c*/
+#define W11 125 /*0x7d*/
+#define W12 126 /*0x7e*/
+#define W13 127 /*0x7f*/
+#define W14 128 /*0x80*/
+#define W15 129 /*0x81*/
+#define W16 130 /*0x82*/
+#define W17 131 /*0x83*/
+#define W18 132 /*0x84*/
+#define W19 133 /*0x85*/
+#define W20 134 /*0x86*/
+#define W21 135 /*0x87*/
+#define W22 136 /*0x88*/
+#define W23 137 /*0x89*/
+#define W24 138 /*0x8a*/
+#define W25 139 /*0x8b*/
+#define W26 140 /*0x8c*/
+#define W27 141 /*0x8d*/
+#define W28 142 /*0x8e*/
+#define W29 143 /*0x8f*/
+#define W30 144 /*0x90*/
+#define W31 145 /*0x91*/
+#define W32 146 /*0x92*/
+#define W33 147 /*0x93*/
+#define W34 148 /*0x94*/
+#define W35 149 /*0x95*/
+#define W36 150 /*0x96*/
+#define W37 151 /*0x97*/
+#define W38 152 /*0x98*/
+#define W39 153 /*0x99*/
+#define W40 154 /*0x9a*/
+#define W41 155 /*0x9b*/
+#define W42 156 /*0x9c*/
+#define W43 157 /*0x9d*/
+#define W44 158 /*0x9e*/
+#define W45 159 /*0x9f*/
+#define W46 160 /*0xa0*/
+#define W47 161 /*0xa1*/
+#define W48 162 /*0xa2*/
+#define W49 163 /*0xa3*/
+#define W50 164 /*0xa4*/
+#define RCHP0 165 /*0xa5*/
+#define RCHP1 166 /*0xa6*/
+#define RCHP2 167 /*0xa7*/
+#define RCHP3 168 /*0xa8*/
+#define RCHP4 169 /*0xa9*/
+#define RCHP5 170 /*0xaa*/
+#define RCHP6 171 /*0xab*/
+#define RCHP7 172 /*0xac*/
+#define RCHP8 173 /*0xad*/
+#define RCHP9 174 /*0xae*/
+#define RCHP10 175 /*0xaf*/
+#define RCHP11 176 /*0xb0*/
+#define RCHP12 177 /*0xb1*/
+#define RCHP13 178 /*0xb2*/
+#define RCHP14 179 /*0xb3*/
+#define RCHP15 180 /*0xb4*/
+#define DIVAGO 181 /*0xb5*/
+#define AGODIS 182 /*0xb6*/
+#define CUR_RF_FMBAND 0
+#define CUR_RF_BAND3 1
+#define CUR_RF_LBAND 2
+#define REF_CLK16M 16
+#define REF_CLK16_384M 16384 /* => representation ~Hz */
+#define REF_CLK19_2M 19200 /* => representation ~Hz */
+#define REF_CLK24_576M 24576 /* => representation ~Hz */
+
+#define BAND3CH_5A 0
+#define BAND3CH_5B 1
+#define BAND3CH_5C 2
+#define BAND3CH_5D 3
+#define BAND3CH_6A 4
+#define BAND3CH_6B 5
+#define BAND3CH_6C 6
+#define BAND3CH_6D 7
+#define BAND3CH_7A 8
+#define BAND3CH_7B 9
+#define BAND3CH_7C 10
+#define BAND3CH_7D 11
+#define BAND3CH_8A 12
+#define BAND3CH_8B 13
+#define BAND3CH_8C 14
+#define BAND3CH_8D 15
+#define BAND3CH_9A 16
+#define BAND3CH_9B 17
+#define BAND3CH_9C 18
+#define BAND3CH_9D 19
+#define BAND3CH_10A 20
+#define BAND3CH_10B 21
+#define BAND3CH_10C 22
+#define BAND3CH_10D 23
+#define BAND3CH_11A 24
+#define BAND3CH_11B 25
+#define BAND3CH_11C 26
+#define BAND3CH_11D 27
+#define BAND3CH_12A 28
+#define BAND3CH_12B 29
+#define BAND3CH_12C 30
+#define BAND3CH_12D 31
+#define BAND3CH_13A 32
+#define BAND3CH_13B 33
+#define BAND3CH_13C 34
+#define BAND3CH_13D 35
+#define BAND3CH_13E 36
+#define BAND3CH_13F 37
+#define BAND3CH_MAX 38
+
+#define KBANDCH_8A 0
+#define KBANDCH_8B 1
+#define KBANDCH_8C 2
+#define KBANDCH_10A 3
+#define KBANDCH_10B 4
+#define KBANDCH_10C 5
+#define KBANDCH_12A 6
+#define KBANDCH_12B 7
+#define KBANDCH_12C 8
+#define KBANDCH_MAX 9
+
+#define LBANDCH_LA 0
+#define LBANDCH_LB 1
+#define LBANDCH_LC 2
+#define LBANDCH_LD 3
+#define LBANDCH_LE 4
+#define LBANDCH_LF 5
+#define LBANDCH_LG 6
+#define LBANDCH_LH 7
+#define LBANDCH_LI 8
+#define LBANDCH_LJ 9
+#define LBANDCH_LK 10
+#define LBANDCH_LL 11
+#define LBANDCH_LM 12
+#define LBANDCH_LN 13
+#define LBANDCH_LO 14
+#define LBANDCH_LP 15
+#define LBANDCH_LQ 16
+#define LBANDCH_LR 17
+#define LBANDCH_LS 18
+#define LBANDCH_LT 19
+#define LBANDCH_LU 20
+#define LBANDCH_LV 21
+#define LBANDCH_LW 22
+#define LBANDCH_MAX 23
+
+#define LBAND_REVISION 0x12
+#define LOW_IF_FREQ850 850 /* => representation ~Hz */
+#define BAND_III_TABLE_LEN 26
+#define LBAND_TABLE_LEN 2
+#define FMBAND_TABLE_LEN 19
+
+#define INT_U8 unsigned char
+
+typedef struct
+{
+ long lo_from; /* LO low boundary */
+ long lo_to; /* LO high boundary */
+ INT_U8 VCO_BAND; /* VCO_BAND */
+ INT_U8 VCO_RG; /* VCO_Range */
+ INT_U8 DIVSEL; /* Division selector */
+} RG_NUM_BAND;
+
+typedef struct
+{
+ INT_U8 DIVSEL; /* Div sel 0~3 */
+ INT_U8 DIVCON; /* Divcon 3bit */
+} DIV_CURRENT_SETTING;
+
+extern long BAND3[BAND3CH_MAX];
+extern long KBAND[KBANDCH_MAX];
+extern long LBAND[LBANDCH_MAX];
+extern int i;
+extern int ADCOUT;
+extern int cnt_loop;
+extern long TUNER_REFCLK;
+extern long LO_FREQ;
+extern long PLL_FREQ;
+extern long PLL_N, PLL_F;
+extern int old_VCO_BAND;
+extern int DIVSEL;
+extern int BAND;
+extern int VCORG;
+extern long TUNER_IF;
+extern long TUNER_RF;
+extern int RegRFAGC;
+extern int RegDATA71, RegDATA72;
+extern long fInpRFPOW;
+extern INT_U8 FCCLK;
+extern INT_U8 RFAGC_SPEED_L; /* SPEED[2:0] we had a resolution of 10 bits for RFAGC */
+extern INT_U8 RFAGC_SPEED_H; /* SPEED[9:3] */
+extern INT_U8 IFAGC_SPEED;
+extern INT_U8 AGCMODE;
+extern INT_U8 CurBAND;
+void PostProcessingAfterInit();
+void ITD30x0MP_Tuner_Init();
+long SetFreq(long iRF); /* Set RF Freq. Function. */
+void PLLReset();
+unsigned char GetPLLStatus();
+long LO2PLL_Freq(int divsel,long LO_FREQ);
+void usbSetSpeed(unsigned char bSpeedonUSB);
+long RFTuning(long fLO_FREQ, RG_NUM_BAND* pRGBAND, INT_U8 tlen);
+INT_U8 SetPrescaler(long pllfreq, long iREF);
diff --git a/api/Infineon_TUA6039.c b/api/Infineon_TUA6039.c
new file mode 100644
index 0000000..e47ce3a
--- /dev/null
+++ b/api/Infineon_TUA6039.c
@@ -0,0 +1,248 @@
+/**
+ * @(#)Infineon_TUA6039.cpp
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "Infineon_TUA6039_Script.h"
+
+
+//#define ENABLE_AGC_CTRL
+//#define Step_Index 3;//166700UL
+#define IF_FREQ 36167
+
+//#define AGC_115DB 0x00
+#define AGC_115_MAXDB 0x10
+#define AGC_112_DEFDB 0x20
+#define AGC_109DB 0x30
+#define AGC_106DB 0x40
+#define AGC_103_MINDB 0x50
+#define AGC_EXT 0x60
+#define AGC_DIS_3_8V 0x70
+
+
+typedef enum Band{
+ VHF_L,
+ VHF_H,
+ UHF
+};
+
+
+typedef enum ChargePump{
+ CP_50uA,
+ CP_125uA
+};
+
+
+Dword SetStep_6039(Byte Step_Index, Byte *u8TunerData)
+{
+ Dword Step = 166670;
+
+ switch(Step_Index)
+ {
+ /* CB: 1 , CP , T2 , T1 , T0 , RSA , RSB , OS */
+ case 1:
+ Step = 50000;
+ u8TunerData[2] &= 0xc9; /* XX00X00X */
+ break;
+
+ case 2:
+ Step = 31250;
+ u8TunerData[2] &= 0xc9;
+ u8TunerData[2] |= 0x02; /* XX00X01X */
+ break;
+
+ case 3:
+ Step = 166670;
+ u8TunerData[2] &= 0xf9;
+ u8TunerData[2] |= 0x04; /* XXXXX10X */
+ break;
+
+ case 4:
+ Step = 62500;
+ u8TunerData[2] |=0x06; /* XXXXX11X */
+ break;
+
+ case 5:
+ Step = 125000;
+ u8TunerData[2] &= 0xf9;
+ u8TunerData[2] |= 0x30; /* XX11X00X */
+ break;
+
+ case 6:
+ Step = 142860;
+ u8TunerData[2] &=0xf9;
+ u8TunerData[2] |=0x32; /* XX11X01X */
+ break;
+
+ default:
+ Step = 166670;
+ u8TunerData[2] &= 0xf9;
+ u8TunerData[2] |= 0x04; /* XXXXX10X */
+ break;
+ }
+ return Step;
+}
+
+
+void SetBand_6039(Byte Band_Index, Word bandwidth, Byte *u8TunerData)
+{
+ //u8TunerData[3] &= 0xe0; /* X,X,X, P4,P3,P2,P1,P0 */
+ if(bandwidth == 8)
+ {
+ u8TunerData[3] = 0x00; /* X,X,X, P4=0,P3,P2,P1,P0 */
+ }
+ else
+ {
+ u8TunerData[3] = 0x10; /* X,X,X, P4=1,P3,P2,P1,P0 */
+ }
+
+ switch(Band_Index)
+ {
+ /* BB: X X X X P4 P3 P2 P1 P0 */
+ case VHF_L:
+ u8TunerData[3] |= 0x01; /* 0x01 */
+ break;
+
+ case VHF_H:
+ u8TunerData[3] |= 0x02; /* 0x02 */
+ break;
+
+ case UHF:
+ u8TunerData[3] |= 0x04; /* 0x04 */
+ break;
+
+ default:
+ //printf("Unknow band\n");
+ break;
+ }
+
+}
+
+
+void Set_ChargePump_6039(Byte CP_Index, Byte *u8TunerData)
+{
+ /* CB: 1 CP X X X X X X */
+ switch(CP_Index){
+ case CP_50uA: /* 50uA OR 125*/
+ u8TunerData[2] = 0xB4;
+ break;
+
+ case CP_125uA: /* 250 OR 650uA */
+ u8TunerData[2] = 0xf4; // ???
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+Dword TUA6039_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword TUA6039_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword TUA6039_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ Dword error = Error_NO_ERROR;
+ Byte buffer[10];
+ Dword Step = 166700;
+ Byte AB = AGC_115_MAXDB;
+
+ //SetFreq(177500);
+ //unsigned long Step = GetStep();
+
+ if(frequency < 177500L)
+ {
+ SetBand_6039(VHF_L, bandwidth, buffer);
+ Set_ChargePump_6039(CP_50uA, buffer);
+ }
+
+ if(frequency >= 177500L && frequency <= 226500L)
+ {
+ SetBand_6039(VHF_H, bandwidth, buffer);
+ Set_ChargePump_6039(CP_50uA, buffer);
+ }
+
+ if(frequency > 226500L)
+ {
+ SetBand_6039(UHF, bandwidth, buffer);
+ Set_ChargePump_6039(CP_125uA, buffer); // ???
+ }
+
+ Step = SetStep_6039(3, buffer); // "3" is for 166.670 KHz
+
+ frequency += IF_FREQ; //add by martin 2006/03/06
+ frequency *= 1000;
+
+ buffer[0] = (char) ((frequency / Step) >>8) ;
+ buffer[1] = (char) ((frequency / Step) & 0xff);
+
+ error = Standard_writeTunerRegisters(demodulator, chip, 0x0000, 4, buffer);
+ if (error) goto exit;
+
+#ifdef ENABLE_AGC_CTRL
+ buffer[2] |= 0x98;
+ buffer[2] &= 0xdf; /* byte AB will follow */
+ buffer[3] = AB;
+
+ error = Standard_writeTunerRegisters(demodulator, chip, 0x0000, 4, buffer);
+ if (error) goto exit;
+#endif
+
+
+exit:
+ return(error);
+}
+
+
+TunerDescription tuner_TUA6039 = {
+ TUA6039_open,
+ TUA6039_close,
+ TUA6039_set,
+ TUA6039_scripts,
+ TUA6039_scriptSets,
+ TUA6039_ADDRESS, /** tuner i2c address */
+ 0, /** length of tuner register address */
+ 36167000, /** tuner if */
+ True, /** spectrum inverse */
+ 0x29, /** tuner id */
+};
diff --git a/api/Infineon_TUA6039.h b/api/Infineon_TUA6039.h
new file mode 100644
index 0000000..dc376c4
--- /dev/null
+++ b/api/Infineon_TUA6039.h
@@ -0,0 +1,60 @@
+/**
+ * @(#)Infineon_TUA6039.h
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __Infineon_TUA6039_H__
+#define __Infineon_TUA6039_H__
+
+
+#define TUA6039_VER_MAJOR 2
+#define TUA6039_VER_MINOR 0
+
+extern TunerDescription tuner_TUA6039;
+
+
+/**
+ *
+ */
+Dword TUA6039_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword TUA6039_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword TUA6039_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Infineon_TUA6039_Script.h b/api/Infineon_TUA6039_Script.h
new file mode 100644
index 0000000..98ab349
--- /dev/null
+++ b/api/Infineon_TUA6039_Script.h
@@ -0,0 +1,107 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)Infineon_EXT_EVB.cpp
+*
+* Copyright 2008 Afatech, Inc. All rights reserved.
+*/
+
+/** script version */
+
+#define VERSION1 0
+#define VERSION2 0
+#define VERSION3 0
+#define VERSION4 0
+
+#define TUA6039_ADDRESS 0xC2
+#define TUA6039_SCRIPTSETLENGTH 0x00000001
+
+
+Word TUA6039_scriptSets[] = {
+ 0x50
+};
+
+ValueSet TUA6039_scripts[] = {
+ {0xF600, 0x5},
+ {0xF601, 0x8},
+ {0xF602, 0xb},
+ {0xF603, 0x0e},
+ {0xF604, 0x11},
+ {0xF605, 0x14},
+ {0xF606, 0x17},
+ {0xF607, 0x1f},
+ {0xF1E6, 0x01},
+ {0xF001, 0x00},
+ {0xF005, 0x01},
+ {0xF004, 0x00},
+ {0xF00A, 0x1B},
+ {0xF00B, 0x1C},
+ {0xF00C, 0x1B},
+ {0xF00D, 0x1C},
+ {0xF016, 0x10},
+ {0xF017, 0x04},
+ {0xF018, 0x05},
+ {0xF019, 0x04},
+ {0xF01A, 0x05},
+ {0xF021, 0x03},
+ {0xF022, 0x0A},
+ {0xF023, 0x0A},
+ {0xF000, 0x01},
+ {0xF047, 0x00},
+ {0xF007, 0x00},
+ {0xF12F, 0x00},
+ {0xF077, 0x00},
+ {0xF00A, 0x1A},
+ {0xF00B, 0x1B},
+ {0xF00C, 0x1A},
+ {0xF00D, 0x1B},
+ {0xF01F, 0x50},
+ {0xF020, 0x00},
+ {0xF029, 0x46},
+ {0xF02A, 0x00},
+ {0xF010, 0xDF},
+ {0xF011, 0x02},
+ {0xF00E, 0x44},
+ {0xF00F, 0x01},
+ {0xF014, 0xEB},
+ {0xF015, 0x02},
+ {0xF012, 0xF4},
+ {0xF013, 0x01},
+ {0x0066, 0x52},
+ {0xF01B, 0x26},
+ {0xF01C, 0x01},
+ {0xF01D, 0x12},
+ {0xF01E, 0x03},
+ {0xF025, 0xE8},
+ {0xF026, 0x00},
+ {0xF027, 0x5F},
+ {0xF028, 0x03},
+ {0x0044, 0xFF},
+ {0x0045, 0x03},
+ {0x0046, 0xFF},
+ {0x0047, 0x03},
+ {0x0048, 0xFF},
+ {0x0049, 0x03},
+ {0x004a, 0xFF},
+ {0x004b, 0x03},
+ {0x004c, 0xEB},
+ {0x004d, 0x02},
+ {0x0053, 0x68},
+ {0x0054, 0x03},
+ {0x0059, 0x12},
+ {0x005a, 0x03},
+ {0xF02B, 0x00},
+ {0xF02C, 0x01},
+ {0xF03B, 0x9A},
+ {0xF03C, 0x01},
+ {0xF03D, 0x5A},
+ {0xF03E, 0x01},
+ {0xF03F, 0x96},
+ {0xF040, 0x46},
+ {0xF031, 0x0},
+ {0x006b, 0x0A},
+ {0x006c, 0x14},
+ {0x006d, 0x08},
+}; \ No newline at end of file
diff --git a/api/Infineon_TUA8010.c b/api/Infineon_TUA8010.c
new file mode 100644
index 0000000..f98716b
--- /dev/null
+++ b/api/Infineon_TUA8010.c
@@ -0,0 +1,309 @@
+/**
+ * @(#)Infineon_TUA8010.cpp
+ *
+ * ==========================================================
+ * Version: 2.2
+ * Date: 2008.10.22
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.08.19 Tom Lin added tuner version
+ * 2008.10.16 Tom Lin update driver_TUA8010.cpp
+ * for U/V band switch
+ * 2008.10.22 Tom Lin enable clock out by tuner reg 0x03
+ * ==========================================================
+ *
+ * Copyright 2008 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "driver_tua8010.h"
+#include "Infineon_TUA8010_Script.h"
+
+
+static Demodulator* DemodHandle = NULL;
+static Byte DemodChip = 0;
+
+/*========================================================================================================================
+ additional needed external funtions ( have to be provided by the user! )
+========================================================================================================================*/
+
+/**
+ * set / reset tuner reset input
+ * @param i_state level
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int setRESETN8010 (unsigned int i_state)
+{
+ Dword error = Error_NO_ERROR;
+
+ if (i_state == H_LEVEL) {
+ /* set tuner RXEN pin to "H" */
+ error = Standard_writeRegisterBits (DemodHandle, DemodChip, Processor_LINK, p_reg_top_gpiot3_o, reg_top_gpiot3_o_pos, reg_top_gpiot3_o_len, 1);
+ if (error) goto exit;
+ } else {
+ /* set tuner RXEN pin to "L" */
+ error = Standard_writeRegisterBits (DemodHandle, DemodChip, Processor_LINK, p_reg_top_gpiot3_o, reg_top_gpiot3_o_pos, reg_top_gpiot3_o_len, 0);
+ if (error) goto exit;
+ }
+
+exit:
+ if (error)
+ return (TUNER_ERR);
+ else
+ return (TUNER_OK);
+}
+
+/**
+ * set / reset tuner receive enable input
+ * @param i_state level
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int setRXEN8010 (unsigned int i_state)
+{
+ Dword error = Error_NO_ERROR;
+
+ if (i_state == H_LEVEL) {
+ /* set tuner RXEN pin to "H" */
+ error = Standard_writeRegisterBits (DemodHandle, DemodChip, Processor_LINK, p_reg_top_gpiot2_o, reg_top_gpiot2_o_pos, reg_top_gpiot2_o_len, 1);
+ if (error) goto exit;
+ } else {
+ /* set tuner RXEN pin to "L" */
+ error = Standard_writeRegisterBits (DemodHandle, DemodChip, Processor_LINK, p_reg_top_gpiot2_o, reg_top_gpiot2_o_pos, reg_top_gpiot2_o_len, 0);
+ if (error) goto exit;
+ }
+
+exit:
+ if (error)
+ return (TUNER_ERR);
+ else
+ return (TUNER_OK);
+}
+
+
+/**
+ * set / reset tuner chiop enable input
+ * @param i_state level
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int setCEN8010 (unsigned int i_state)
+ {// wait for H/W design which GPIO to use
+ // if (i_state == H_LEVEL)
+ // /* set tuner CEN pin to "H" */
+ //
+ // else
+ // /* set tuner CEN pin to "L" */
+ //
+ return TUNER_OK;
+ }
+
+
+/**
+ * waitloop
+ * @param i_looptime * 1uS
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int waitloop8010 (unsigned int i_looptime)
+{
+ /* wait time = i_looptime * 1 uS */
+
+ User_delay (DemodHandle, i_looptime/1000);
+
+ return TUNER_OK;
+}
+
+
+/**
+ * i2cBusWrite
+ * @param deviceAdress chip address
+ * @param registerAdress register address
+ * @param *date pointer to data source
+ * @param length number of bytes to transmit
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int i2cBusWrite8010 (unsigned char deviceAddress, unsigned char registerAddress, char *date, unsigned int length)
+{
+ /* I2C write data format */
+ /* STA device_address ACK register_address ACK H_Byte-Data ACK L_Byte-Data !ACK STO */
+
+ /* STA = start condition, ACK = Acknowledge, STO = stop condition */
+ /* *date = pointer to data source */
+ /* length = number of bytes to write */
+ Dword error = Error_NO_ERROR;
+
+ error = Standard_writeTunerRegisters (DemodHandle, DemodChip, (Word)registerAddress, (Byte)length, (Byte*)date);
+ if (error) goto exit;
+
+exit:
+ if (error)
+ return (TUNER_ERR);
+ else
+ return (TUNER_OK);
+}
+
+
+/**
+ * i2cBusRead
+ * @param deviceAdress chip address
+ * @param registerAdress register address
+ * @param *date pointer to data destination
+ * @param length number of bytes to read
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int i2cBusRead8010 (unsigned char deviceAddress, unsigned char registerAddress, char *date, unsigned int length)
+{
+ /* I2C read data format */
+ /* STA device_address ACK register_address ACK STA H_Byte-Data ACK device_address_read ACK H_Byte-Data ACK L_Byte-Data ACKH STO */
+
+ /* STA = start condition, ACK = Acknowledge (generated by TUA8010), ACKH = Acknowledge (generated by Host), STO = stop condition */
+ /* *date = pointer to data destination */
+ /* length = number of bytes to read */
+ Dword error = Error_NO_ERROR;
+
+ error = Standard_readTunerRegisters (DemodHandle, DemodChip, (Word)registerAddress, (Byte)length, (Byte*)date);
+ if (error) goto exit;
+
+exit:
+ if (error)
+ return (TUNER_ERR);
+ else
+ return (TUNER_OK);
+}
+
+/*========================================================================================================================
+ end of additional needed external funtions
+========================================================================================================================*/
+
+Dword TUA8010_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+ Byte buffer[2] = {0,};
+
+ DemodHandle = demodulator;
+ DemodChip = chip;
+
+ error = Standard_writeRegisterBits (DemodHandle, DemodChip, Processor_LINK, p_reg_top_gpiot2_en, reg_top_gpiot2_en_pos, reg_top_gpiot2_en_len, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegisterBits (DemodHandle, DemodChip, Processor_LINK, p_reg_top_gpiot2_on, reg_top_gpiot2_on_pos, reg_top_gpiot2_on_len, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegisterBits (DemodHandle, DemodChip, Processor_LINK, p_reg_top_gpiot3_en, reg_top_gpiot3_en_pos, reg_top_gpiot3_en_len, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegisterBits (DemodHandle, DemodChip, Processor_LINK, p_reg_top_gpiot3_on, reg_top_gpiot3_on_pos, reg_top_gpiot3_on_len, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (DemodHandle, DemodChip, Processor_LINK, p_reg_top_agc_od, 0);
+ if (error) goto exit;
+
+ error = initializeTUA8010();
+ if (error) {
+ error = Error_WRITE_TUNER_FAIL;
+ goto exit;
+ }
+
+ /** Enable clock output */
+ error = Standard_readTunerRegisters (DemodHandle, DemodChip, 0x03, 2, buffer);
+ if (error) goto exit;
+
+ buffer[0] = buffer[0] | 0x10;
+
+ error = Standard_writeTunerRegisters (DemodHandle, DemodChip, 0x03, 2, buffer);
+
+exit:
+ return (error);
+}
+
+
+Dword TUA8010_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+ Byte buffer[2] = {0,};
+
+ DemodHandle = demodulator;
+ DemodChip = chip;
+
+ /** Disable clock output */
+ error = Standard_readTunerRegisters (DemodHandle, DemodChip, 0x03, 2, buffer);
+ if (error) goto exit;
+
+ buffer[0] = buffer[0] & 0xEF;
+
+ error = Standard_writeTunerRegisters (DemodHandle, DemodChip, 0x03, 2, buffer);
+
+exit:
+ return (error);
+}
+
+Dword TUA8010_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ Dword error = Error_NO_ERROR;
+ DemodChip = chip;
+
+ Word bw = 0;
+
+ if (bandwidth == 8000)
+ bw = TUNER_BANDWIDTH_8MHZ;
+ else if (bandwidth == 7000)
+ bw = TUNER_BANDWIDTH_7MHZ;
+ else if (bandwidth == 6000)
+ bw = TUNER_BANDWIDTH_6MHZ;
+ else
+ bw = TUNER_BANDWIDTH_5MHZ;
+
+ error = tuneTUA8010 (frequency, (tunerDriverBW_t)bw);
+ if (error) {
+ error = Error_WRITE_TUNER_FAIL;
+ goto exit;
+ }
+
+exit:
+ return (error);
+}
+
+
+TunerDescription tuner_TUA8010 = {
+ TUA8010_open,
+ TUA8010_close,
+ TUA8010_set,
+ TUA8010_scripts,
+ TUA8010_scriptSets,
+ TUA8010_ADDRESS, /** tuner i2c address */
+ 1, /** length of tuner register address */
+ 0, /** tuner if */
+ True, /** spectrum inverse */
+ 0x27, /** tuner id */
+};
diff --git a/api/Infineon_TUA8010.h b/api/Infineon_TUA8010.h
new file mode 100644
index 0000000..fcfd7c0
--- /dev/null
+++ b/api/Infineon_TUA8010.h
@@ -0,0 +1,60 @@
+/**
+ * @(#)Infineon_TUA8010.h
+ *
+ * ==========================================================
+ * Version: 2.2
+ * Date: 2008.10.22
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.08.19 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2008 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __Infineon_TUA8010_H__
+#define __Infineon_TUA8010_H__
+
+
+#define TUA8010_VER_MAJOR 2
+#define TUA8010_VER_MINOR 2
+
+extern TunerDescription tuner_TUA8010;
+
+
+/**
+ *
+ */
+Dword TUA8010_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword TUA8010_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword TUA8010_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Infineon_TUA8010_Script.h b/api/Infineon_TUA8010_Script.h
new file mode 100644
index 0000000..0b18bec
--- /dev/null
+++ b/api/Infineon_TUA8010_Script.h
@@ -0,0 +1,64 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)Infineon_TUA8010_EXT_EVB.cpp
+*
+* Copyright 2005 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 5
+#define VERSION2 66
+#define VERSION3 12
+#define VERSION4 0
+
+
+
+#define TUA8010_ADDRESS 0xC0
+#define TUA8010_SCRIPTSETLENGTH 0x00000001
+
+Word TUA8010_scriptSets[] = {
+0x24
+};
+
+ValueSet TUA8010_scripts[] = {
+ {0x0046, 0x2C},
+ {0x0057, 0x00},
+ {0x0058, 0x01},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x006d, 0x00},
+ {0x0071, 0x05},
+ {0x0072, 0x02},
+ {0x0074, 0x01},
+ {0x0075, 0x3},
+ {0x0076, 0x02},
+ {0x0077, 0x00},
+ {0x0078, 0x01},
+ {0x0079, 0x0},
+ {0x007a, 0x7E},
+ {0x007b, 0x3E},
+ {0x0093, 0x00},
+ {0x0094, 0x01},
+ {0x0095, 0x02},
+ {0x0096, 0x01},
+ {0x0098, 0x0A},
+ {0x009b, 0x05},
+ {0x009c, 0x80},
+ {0x00b3, 0x00},
+ {0x00c3, 0x01},
+ {0x00c4, 0x00},
+ {0xF007, 0x0},
+ {0xF01F, 0x82},
+ {0xF020, 0x00},
+ {0xF029, 0x82},
+ {0xF02A, 0x00},
+ {0xF047, 0x0},
+ {0xF054, 0x0},
+ {0xF055, 0x0},
+ {0xF077, 0x01},
+ {0xF1E6, 0x00},
+
+};
diff --git a/api/Infineon_TUA9001.c b/api/Infineon_TUA9001.c
new file mode 100644
index 0000000..d232745
--- /dev/null
+++ b/api/Infineon_TUA9001.c
@@ -0,0 +1,283 @@
+/**
+ * @(#)Infineon_TUA9001.cpp
+ *
+ * ==========================================================
+ * Version: 2.1
+ * Date: 2008.10.01
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * 2008.10.01 Benny Chen fix a bug of C compile issue
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+//#include <stdio.h> // for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "driver_tua9001.h"
+#include "Infineon_TUA9001_Script.h"
+
+
+static Demodulator* DemodHandle = NULL;
+static Byte DemodChip = 0;
+
+/*========================================================================================================================
+ additional needed external funtions ( have to be provided by the user! )
+========================================================================================================================*/
+
+/**
+ * set / reset tuner reset input
+ * @param i_state level
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int setRESETN (unsigned int i_state)
+{
+ Dword error = Error_NO_ERROR;
+
+ if (i_state == H_LEVEL) {
+ /* set tuner RXEN pin to "H" */
+ error = Standard_writeRegisterBits (DemodHandle, DemodChip, Processor_LINK, p_reg_top_gpiot3_o, reg_top_gpiot3_o_pos, reg_top_gpiot3_o_len, 1);
+ if (error) goto exit;
+ } else {
+ /* set tuner RXEN pin to "L" */
+ error = Standard_writeRegisterBits (DemodHandle, DemodChip, Processor_LINK, p_reg_top_gpiot3_o, reg_top_gpiot3_o_pos, reg_top_gpiot3_o_len, 0);
+ if (error) goto exit;
+ }
+
+exit:
+ if (error)
+ return (TUNER_ERR);
+ else
+ return (TUNER_OK);
+}
+
+/**
+ * set / reset tuner receive enable input
+ * @param i_state level
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int setRXEN (unsigned int i_state)
+{
+ Dword error = Error_NO_ERROR;
+
+ if (i_state == H_LEVEL) {
+ /* set tuner RXEN pin to "H" */
+ error = Standard_writeRegisterBits (DemodHandle, DemodChip, Processor_LINK, p_reg_top_gpiot2_o, reg_top_gpiot2_o_pos, reg_top_gpiot2_o_len, 1);
+ if (error) goto exit;
+ } else {
+ /* set tuner RXEN pin to "L" */
+ error = Standard_writeRegisterBits (DemodHandle, DemodChip, Processor_LINK, p_reg_top_gpiot2_o, reg_top_gpiot2_o_pos, reg_top_gpiot2_o_len, 0);
+ if (error) goto exit;
+ }
+
+exit:
+ if (error)
+ return (TUNER_ERR);
+ else
+ return (TUNER_OK);
+}
+
+
+/**
+ * set / reset tuner chiop enable input
+ * @param i_state level
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int setCEN (unsigned int i_state)
+ {// wait for H/W design which GPIO to use
+ // if (i_state == H_LEVEL)
+ // /* set tuner CEN pin to "H" */
+ //
+ // else
+ // /* set tuner CEN pin to "L" */
+ //
+ return TUNER_OK;
+ }
+
+
+/**
+ * waitloop
+ * @param i_looptime * 1uS
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int waitloop (unsigned int i_looptime)
+{
+ /* wait time = i_looptime * 1 uS */
+
+ User_delay (DemodHandle, i_looptime/1000);
+
+ return TUNER_OK;
+}
+
+
+/**
+ * i2cBusWrite
+ * @param deviceAdress chip address
+ * @param registerAdress register address
+ * @param *date pointer to data source
+ * @param length number of bytes to transmit
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int i2cBusWrite (unsigned char deviceAddress, unsigned char registerAddress, char *date, unsigned int length)
+{
+ /* I2C write data format */
+ /* STA device_address ACK register_address ACK H_Byte-Data ACK L_Byte-Data !ACK STO */
+
+ /* STA = start condition, ACK = Acknowledge, STO = stop condition */
+ /* *date = pointer to data source */
+ /* length = number of bytes to write */
+ Dword error = Error_NO_ERROR;
+
+ error = Standard_writeTunerRegisters (DemodHandle, DemodChip, (Word)registerAddress, (Byte)length, (Byte*)date);
+ if (error) goto exit;
+
+exit:
+ if (error)
+ return (TUNER_ERR);
+ else
+ return (TUNER_OK);
+}
+
+
+/**
+ * i2cBusRead
+ * @param deviceAdress chip address
+ * @param registerAdress register address
+ * @param *date pointer to data destination
+ * @param length number of bytes to read
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int i2cBusRead (unsigned char deviceAddress, unsigned char registerAddress, char *date, unsigned int length)
+{
+ /* I2C read data format */
+ /* STA device_address ACK register_address ACK STA H_Byte-Data ACK device_address_read ACK H_Byte-Data ACK L_Byte-Data ACKH STO */
+
+ /* STA = start condition, ACK = Acknowledge (generated by TUA9001), ACKH = Acknowledge (generated by Host), STO = stop condition */
+ /* *date = pointer to data destination */
+ /* length = number of bytes to read */
+ Dword error = Error_NO_ERROR;
+
+ error = Standard_readTunerRegisters (DemodHandle, DemodChip, (Word)registerAddress, (Byte)length, (Byte*)date);
+ if (error) goto exit;
+
+exit:
+ if (error)
+ return (TUNER_ERR);
+ else
+ return (TUNER_OK);
+}
+
+/*========================================================================================================================
+ end of additional needed external funtions
+========================================================================================================================*/
+
+Dword TUA9001_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+
+ DemodHandle = demodulator;
+ DemodChip = chip;
+
+ error = Standard_writeRegisterBits (DemodHandle, DemodChip, Processor_LINK, p_reg_top_gpiot2_en, reg_top_gpiot2_en_pos, reg_top_gpiot2_en_len, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegisterBits (DemodHandle, DemodChip, Processor_LINK, p_reg_top_gpiot2_on, reg_top_gpiot2_on_pos, reg_top_gpiot2_on_len, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegisterBits (DemodHandle, DemodChip, Processor_LINK, p_reg_top_gpiot3_en, reg_top_gpiot3_en_pos, reg_top_gpiot3_en_len, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegisterBits (DemodHandle, DemodChip, Processor_LINK, p_reg_top_gpiot3_on, reg_top_gpiot3_on_pos, reg_top_gpiot3_on_len, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (DemodHandle, DemodChip, Processor_LINK, p_reg_top_agc_od, 0);
+ if (error) goto exit;
+
+ error = initializeTua9001();
+ if (error) {
+ error = Error_WRITE_TUNER_FAIL;
+ goto exit;
+ }
+
+exit:
+ return (error);
+}
+
+
+Dword TUA9001_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+Dword TUA9001_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ Dword error = Error_NO_ERROR;
+ Word bw = 0;
+
+ DemodChip = chip;
+
+ if (bandwidth == 8000)
+ bw = TUNER_BANDWIDTH_8MHZ;
+ else if (bandwidth == 7000)
+ bw = TUNER_BANDWIDTH_7MHZ;
+ else if (bandwidth == 6000)
+ bw = TUNER_BANDWIDTH_6MHZ;
+ else
+ bw = TUNER_BANDWIDTH_5MHZ;
+
+ error = tuneTua9001 (frequency, (tunerDriverBW_t)bw);
+ if (error) {
+ error = Error_WRITE_TUNER_FAIL;
+ goto exit;
+ }
+
+exit:
+ return (error);
+}
+
+
+TunerDescription tuner_TUA9001 = {
+ TUA9001_open,
+ TUA9001_close,
+ TUA9001_set,
+ TUA9001_scripts,
+ TUA9001_scriptSets,
+ TUA9001_ADDRESS, /** tuner i2c address */
+ 1, /** length of tuner register address */
+ 0, /** tuner if */
+ True, /** spectrum inverse */
+ 0x27, /** tuner id */
+}; \ No newline at end of file
diff --git a/api/Infineon_TUA9001.h b/api/Infineon_TUA9001.h
new file mode 100644
index 0000000..550b9fc
--- /dev/null
+++ b/api/Infineon_TUA9001.h
@@ -0,0 +1,61 @@
+/**
+ * @(#)Infineon_TUA9001.h
+ *
+ * ==========================================================
+ * Version: 2.1
+ * Date: 2008.10.01
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * 2008.10.01 Benny Chen fix a bug of C compile issue
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __Infineon_TUA9001_H__
+#define __Infineon_TUA9001_H__
+
+
+#define TUA9001_VER_MAJOR 2
+#define TUA9001_VER_MINOR 1
+
+extern TunerDescription tuner_TUA9001;
+
+
+/**
+ *
+ */
+Dword TUA9001_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword TUA9001_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword TUA9001_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Infineon_TUA9001_Script.h b/api/Infineon_TUA9001_Script.h
new file mode 100644
index 0000000..dacb417
--- /dev/null
+++ b/api/Infineon_TUA9001_Script.h
@@ -0,0 +1,65 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)Infineon_TUA9001_EXT_EVB.cpp
+*
+* Copyright 2005 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 5
+#define VERSION2 66
+#define VERSION3 12
+#define VERSION4 0
+
+
+
+#define TUA9001_ADDRESS 0xC0
+#define TUA9001_SCRIPTSETLENGTH 0x00000001
+
+Word TUA9001_scriptSets[] = {
+0x25
+};
+
+ValueSet TUA9001_scripts[] = {
+ {0x0046, 0x27},
+ {0x0057, 0x00},
+ {0x0058, 0x01},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x006d, 0x00},
+ {0x0071, 0x05},
+ {0x0072, 0x02},
+ {0x0074, 0x01},
+ {0x0075, 0x3},
+ {0x0076, 0x02},
+ {0x0077, 0x00},
+ {0x0078, 0x01},
+ {0x0079, 0x0},
+ {0x007a, 0x7E},
+ {0x007b, 0x3E},
+ {0x0093, 0x00},
+ {0x0094, 0x01},
+ {0x0095, 0x02},
+ {0x0096, 0x01},
+ {0x0098, 0x0A},
+ {0x009b, 0x05},
+ {0x009c, 0x80},
+ {0x00b3, 0x00},
+ {0x00c3, 0x01},
+ {0x00c4, 0x00},
+ {0x00c7, 0x5D},
+ {0xF007, 0x0},
+ {0xF01F, 0x82},
+ {0xF020, 0x00},
+ {0xF029, 0x82},
+ {0xF02A, 0x00},
+ {0xF047, 0x0},
+ {0xF054, 0x0},
+ {0xF055, 0x0},
+ {0xF077, 0x01},
+ {0xF1E6, 0x00},
+
+};
diff --git a/api/Integrant_ITD3020.c b/api/Integrant_ITD3020.c
new file mode 100644
index 0000000..e1fcc0d
--- /dev/null
+++ b/api/Integrant_ITD3020.c
@@ -0,0 +1,106 @@
+/**
+ * @(#)Integrant_ITD3020_EXT.cpp
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "ITD30x0.h"
+#include "Integrant_ITD3020_Script.h"
+
+
+Demodulator* Integrant_ITD3020_EXT_demodulator;
+Byte Integrant_ITD3020_EXT_chip;
+
+
+Dword ITD3020_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+ Integrant_ITD3020_EXT_demodulator = demodulator;
+ Integrant_ITD3020_EXT_chip = chip;
+
+ AGCMODE = 1; /** If this value = 0, Internal AGC mode. */
+ /** If this value = 1, External AGC mode */
+
+ TUNER_IF = ganymede->tunerDescription->ifFrequency / 1000;
+ TUNER_RF = 88000;
+ TUNER_REFCLK = REF_CLK16_384M;
+
+ ITD30x0MP_Tuner_Init();
+
+ return (error);
+}
+
+
+Dword ITD3020_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword ITD3020_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ Dword error = Error_NO_ERROR;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+ Integrant_ITD3020_EXT_demodulator = demodulator;
+ Integrant_ITD3020_EXT_chip = chip;
+
+ AGCMODE = 1; /** If this value = 0, Internal AGC mode. */
+ /** If this value = 1, External AGC mode */
+
+ TUNER_IF = ganymede->tunerDescription->ifFrequency / 1000;
+ TUNER_RF = frequency;
+ TUNER_REFCLK = REF_CLK16_384M;
+
+ SetFreq(TUNER_RF);
+
+ return (error);
+}
+
+
+TunerDescription tuner_ITD3020 = {
+ ITD3020_open,
+ ITD3020_close,
+ ITD3020_set,
+ ITD3020_scripts,
+ ITD3020_scriptSets,
+ ITD3020_ADDRESS, /** tuner i2c address */
+ 1, /** length of tuner register address */
+ 850000, /** tuner if */
+ True, /** spectrum inverse */
+ 0x24, /** tuner id */
+};
diff --git a/api/Integrant_ITD3020.h b/api/Integrant_ITD3020.h
new file mode 100644
index 0000000..6a60303
--- /dev/null
+++ b/api/Integrant_ITD3020.h
@@ -0,0 +1,60 @@
+/**
+ * @(#)Integrant_ITD3020.h
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __Integrant_ITD3020_H__
+#define __Integrant_ITD3020_H__
+
+
+#define ITD3020_VER_MAJOR 2
+#define ITD3020_VER_MINOR 0
+
+extern TunerDescription tuner_ITD3020;
+
+
+/**
+ *
+ */
+Dword ITD3020_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword ITD3020_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword ITD3020_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Integrant_ITD3020_Script.h b/api/Integrant_ITD3020_Script.h
new file mode 100644
index 0000000..c046dcc
--- /dev/null
+++ b/api/Integrant_ITD3020_Script.h
@@ -0,0 +1,92 @@
+/** script version */
+
+#define ITD3020_ADDRESS 0xC2
+#define ITD3020_SCRIPTSETLENGTH 0x00000001
+
+
+Word ITD3020_scriptSets[] = {
+ 0x50
+};
+
+ValueSet ITD3020_scripts[] = {
+ {0xF600, 0x5},
+ {0xF601, 0x8},
+ {0xF602, 0xb},
+ {0xF603, 0x0e},
+ {0xF604, 0x11},
+ {0xF605, 0x14},
+ {0xF606, 0x17},
+ {0xF607, 0x1f},
+ {0xF1E6, 0x01},
+ {0xF001, 0x00},
+ {0xF005, 0x01},
+ {0xF004, 0x00},
+ {0xF00A, 0x1B},
+ {0xF00B, 0x1C},
+ {0xF00C, 0x1B},
+ {0xF00D, 0x1C},
+ {0xF016, 0x10},
+ {0xF017, 0x04},
+ {0xF018, 0x05},
+ {0xF019, 0x04},
+ {0xF01A, 0x05},
+ {0xF021, 0x03},
+ {0xF022, 0x0A},
+ {0xF023, 0x0A},
+ {0xF000, 0x01},
+ {0xF047, 0x00},
+ {0xF007, 0x00},
+ {0xF12F, 0x00},
+ {0xF077, 0x00},
+ {0xF00A, 0x1A},
+ {0xF00B, 0x1B},
+ {0xF00C, 0x1A},
+ {0xF00D, 0x1B},
+ {0xF01F, 0x50},
+ {0xF020, 0x00},
+ {0xF029, 0x46},
+ {0xF02A, 0x00},
+ {0xF010, 0xDF},
+ {0xF011, 0x02},
+ {0xF00E, 0x44},
+ {0xF00F, 0x01},
+ {0xF014, 0xEB},
+ {0xF015, 0x02},
+ {0xF012, 0xF4},
+ {0xF013, 0x01},
+ {0x0066, 0x52},
+ {0xF01B, 0x26},
+ {0xF01C, 0x01},
+ {0xF01D, 0x12},
+ {0xF01E, 0x03},
+ {0xF025, 0xE8},
+ {0xF026, 0x00},
+ {0xF027, 0x5F},
+ {0xF028, 0x03},
+ {0x0044, 0xFF},
+ {0x0045, 0x03},
+ {0x0046, 0xFF},
+ {0x0047, 0x03},
+ {0x0048, 0xFF},
+ {0x0049, 0x03},
+ {0x004a, 0xFF},
+ {0x004b, 0x03},
+ {0x004c, 0xEB},
+ {0x004d, 0x02},
+ {0x0053, 0x68},
+ {0x0054, 0x03},
+ {0x0059, 0x12},
+ {0x005a, 0x03},
+ {0xF02B, 0x00},
+ {0xF02C, 0x01},
+ {0xF03B, 0x9A},
+ {0xF03C, 0x01},
+ {0xF03D, 0x5A},
+ {0xF03E, 0x01},
+ {0xF03F, 0x96},
+ {0xF040, 0x46},
+ {0xF031, 0x0},
+ {0x006b, 0x0A},
+ {0x006c, 0x14},
+ {0x006d, 0x08},
+}; \ No newline at end of file
diff --git a/api/MXL5005.c b/api/MXL5005.c
new file mode 100644
index 0000000..74c8fc9
--- /dev/null
+++ b/api/MXL5005.c
@@ -0,0 +1,2783 @@
+/** MXL5005.cpp : Defines the initialization routines for the DLL. */
+/** 2.6.14 */
+
+#include "MXL5005.h"
+
+
+void InitTunerControls(Tuner_struct *Tuner)
+{
+ MXL5005_RegisterInit(Tuner);
+ MXL5005_ControlInit(Tuner);
+#ifdef _MXL_INTERNAL
+ MXL5005_MXLControlInit(Tuner);
+#endif
+}
+
+/**
+ *
+ * Function: MXL_ConfigTuner
+ *
+ * Description: Configure MXL5005Tuner structure for desired
+ * Channel Bandwidth/Channel Frequency
+ *
+ *
+ * Functions used:
+ * MXL_SynthIFLO_Calc
+ *
+ * Inputs:
+ * Tuner_struct: structure defined at higher level
+ * Mode: Tuner Mode (Analog/Digital)
+ * IF_Mode: IF Mode ( Zero/Low )
+ * Bandwidth: Filter Channel Bandwidth (in Hz)
+ * IF_out: Desired IF out Frequency (in Hz)
+ * Fxtal: Crystal Frerquency (in Hz)
+ * TOP: 0: Dual AGC; Value: take over point
+ * IF_OUT_LOAD: IF out load resistor (200/300 Ohms)
+ * CLOCK_OUT: 0: Turn off clock out; 1: turn on clock out
+ * DIV_OUT: 0: Div-1; 1: Div-4
+ * CAPSELECT: 0: Disable On-chip pulling cap; 1: Enable
+ * EN_RSSI: 0: Disable RSSI; 1: Enable RSSI
+ *
+ * Outputs:
+ * Tuner
+ *
+ * Return:
+ * 0 : Successful
+ * > 0 : Failed
+ *
+ */
+WORD MXL5005_TunerConfig(Tuner_struct *Tuner,
+ BYTE Mode, /* 0: Analog Mode; 1: Digital Mode */
+ BYTE IF_mode, /* for Analog Mode, 0: zero IF; 1: low IF */
+ DWORD Bandwidth, /* filter channel bandwidth (6, 7, 8) */
+ DWORD IF_out, /* Desired IF Out Frequency */
+ DWORD Fxtal, /* XTAL Frequency */
+ BYTE AGC_Mode, /* AGC Mode - Dual AGC: 0, Single AGC: 1 */
+ WORD TOP, /* 0: Dual AGC; Value: take over point */
+ WORD IF_OUT_LOAD, /* IF Out Load Resistor (200 / 300 Ohms) */
+ BYTE CLOCK_OUT, /* 0: turn off clock out; 1: turn on clock out */
+ BYTE DIV_OUT, /* 0: Div-1; 1: Div-4 */
+ BYTE CAPSELECT, /* 0: disable On-Chip pulling cap; 1: enable */
+ BYTE EN_RSSI, /* 0: disable RSSI; 1: enable RSSI */
+ BYTE Mod_Type, /* Modulation Type; */
+ /* 0 - Default; 1 - DVB-T; 2 - ATSC; 3 - QAM; 4 - Analog Cable */
+ BYTE TF_Type /* Tracking Filter */
+ /* 0 - Default; 1 - Off; 2 - Type C; 3 - Type C-H */
+ )
+{
+ WORD status = 0;
+
+ Tuner->Mode = Mode;
+ Tuner->IF_Mode = IF_mode;
+ Tuner->Chan_Bandwidth = Bandwidth;
+ Tuner->IF_OUT = IF_out;
+ Tuner->Fxtal = Fxtal;
+ Tuner->AGC_Mode = AGC_Mode;
+ Tuner->TOP = TOP;
+ Tuner->IF_OUT_LOAD = IF_OUT_LOAD;
+ Tuner->CLOCK_OUT = CLOCK_OUT;
+ Tuner->DIV_OUT = DIV_OUT;
+ Tuner->CAPSELECT = CAPSELECT;
+ Tuner->EN_RSSI = EN_RSSI;
+ Tuner->Mod_Type = Mod_Type;
+ Tuner->TF_Type = TF_Type;
+
+ /**
+ * Initialize all the controls and registers
+ */
+ InitTunerControls (Tuner);
+ /**
+ * Synthesizer LO frequency calculation
+ */
+ MXL_SynthIFLO_Calc( Tuner );
+
+ return status;
+}
+
+/**
+ *
+ * Function: MXL_SynthIFLO_Calc
+ *
+ * Description: Calculate Internal IF-LO Frequency
+ *
+ * Globals:
+ * NONE
+ *
+ * Functions used:
+ * NONE
+ *
+ * Inputs:
+ * Tuner_struct: structure defined at higher level
+ *
+ * Outputs:
+ * Tuner
+ *
+ * Return:
+ * 0 : Successful
+ * > 0 : Failed
+ *
+ */
+void MXL_SynthIFLO_Calc(Tuner_struct *Tuner)
+{
+ if (Tuner->Mode == 1) /* Digital Mode */
+ {
+ Tuner->IF_LO = Tuner->IF_OUT;
+ }
+ else /* Analog Mode */
+ {
+ if(Tuner->IF_Mode == 0) /* Analog Zero IF mode */
+ {
+ Tuner->IF_LO = Tuner->IF_OUT + 400000;
+ }
+ else /* Analog Low IF mode */
+ {
+ Tuner->IF_LO = Tuner->IF_OUT + Tuner->Chan_Bandwidth/2;
+ }
+ }
+}
+
+/**
+ *
+ * Function: MXL_SynthRFTGLO_Calc
+ *
+ * Description: Calculate Internal RF-LO frequency and
+ * internal Tone-Gen(TG)-LO frequency
+ *
+ * Globals:
+ * NONE
+ *
+ * Functions used:
+ * NONE
+ *
+ * Inputs:
+ * Tuner_struct: structure defined at higher level
+ *
+ * Outputs:
+ * Tuner
+ *
+ * Return:
+ * 0 : Successful
+ * > 0 : Failed
+ *
+ */
+void MXL_SynthRFTGLO_Calc(Tuner_struct *Tuner)
+{
+ if (Tuner->Mode == 1) /* Digital Mode */
+ {
+ /** remove 20.48MHz setting for 2.6.10 */
+ Tuner->RF_LO = Tuner->RF_IN;
+ Tuner->TG_LO = Tuner->RF_IN - 750000; /** change for 2.6.6 */
+ }
+ else /* Analog Mode */
+ {
+ if(Tuner->IF_Mode == 0) /* Analog Zero IF mode */
+ {
+ Tuner->RF_LO = Tuner->RF_IN - 400000;
+ Tuner->TG_LO = Tuner->RF_IN - 1750000;
+ }
+ else /* Analog Low IF mode */
+ {
+ Tuner->RF_LO = Tuner->RF_IN - Tuner->Chan_Bandwidth/2;
+ Tuner->TG_LO = Tuner->RF_IN - Tuner->Chan_Bandwidth + 500000;
+ }
+ }
+}
+
+/**
+ *
+ * Function: MXL_OverwriteICDefault
+ *
+ * Description: Overwrite the Default Register Setting
+ *
+ *
+ * Functions used:
+ *
+ * Inputs:
+ * Tuner_struct: structure defined at higher level
+ * Outputs:
+ * Tuner
+ *
+ * Return:
+ * 0 : Successful
+ * > 0 : Failed
+ *
+ */
+WORD MXL_OverwriteICDefault( Tuner_struct *Tuner)
+{
+ WORD status = 0;
+
+ status += MXL_ControlWrite(Tuner, OVERRIDE_1, 1);
+ status += MXL_ControlWrite(Tuner, OVERRIDE_2, 1);
+ status += MXL_ControlWrite(Tuner, OVERRIDE_3, 1);
+ status += MXL_ControlWrite(Tuner, OVERRIDE_4, 1);
+
+ return status;
+}
+
+/**
+ *
+ * Function: MXL_BlockInit
+ *
+ * Description: Tuner Initialization as a function of 'User Settings'
+ * * User settings in Tuner strcuture must be assigned
+ * first
+ *
+ * Globals:
+ * NONE
+ *
+ * Functions used:
+ * Tuner_struct: structure defined at higher level
+ *
+ * Inputs:
+ * Tuner : Tuner structure defined at higher level
+ *
+ * Outputs:
+ * Tuner
+ *
+ * Return:
+ * 0 : Successful
+ * > 0 : Failed
+ *
+ */
+WORD MXL_BlockInit( Tuner_struct *Tuner )
+{
+ WORD status = 0;
+
+ status += MXL_OverwriteICDefault(Tuner);
+
+ /**
+ * Downconverter Control
+ */
+ status += MXL_ControlWrite(Tuner, DN_IQTN_AMP_CUT, Tuner->Mode ? 1 : 0);
+
+ /**
+ * Filter Control
+ */
+ status += MXL_ControlWrite(Tuner, BB_MODE, Tuner->Mode ? 0 : 1);
+ status += MXL_ControlWrite(Tuner, BB_BUF, Tuner->Mode ? 3 : 2);
+ status += MXL_ControlWrite(Tuner, BB_BUF_OA, Tuner->Mode ? 1 : 0);
+
+ status += MXL_ControlWrite(Tuner, BB_IQSWAP, Tuner->Mode ? 0 : 1);
+ status += MXL_ControlWrite(Tuner, BB_INITSTATE_DLPF_TUNE, 0);
+
+ /* Initialize Low-Pass Filter */
+ if (Tuner->Mode) { /* Digital Mode */
+ switch (Tuner->Chan_Bandwidth) {
+ case 8000000:
+ status += MXL_ControlWrite(Tuner, BB_DLPF_BANDSEL, 0);
+ break;
+ case 7000000:
+ status += MXL_ControlWrite(Tuner, BB_DLPF_BANDSEL, 2);
+ break;
+ case 6000000:
+ status += MXL_ControlWrite(Tuner, BB_DLPF_BANDSEL, 3);
+ break;
+ }
+ } else { /* Analog Mode */
+ switch (Tuner->Chan_Bandwidth) {
+ case 8000000: /* Low Zero */
+ status += MXL_ControlWrite(Tuner, BB_ALPF_BANDSELECT, (Tuner->IF_Mode ? 0 : 3));
+ break;
+ case 7000000:
+ status += MXL_ControlWrite(Tuner, BB_ALPF_BANDSELECT, (Tuner->IF_Mode ? 1 : 4));
+ break;
+ case 6000000:
+ status += MXL_ControlWrite(Tuner, BB_ALPF_BANDSELECT, (Tuner->IF_Mode ? 2 : 5));
+ break;
+ }
+ }
+
+ /**
+ * Charge Pump Control
+ */
+ status += MXL_ControlWrite(Tuner, RFSYN_CHP_GAIN, Tuner->Mode ? 5 : 8);
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_CHP_HIGAIN, Tuner->Mode ? 1 : 1);
+ status += MXL_ControlWrite(Tuner, EN_CHP_LIN_B, Tuner->Mode ? 0 : 0);
+
+ /**
+ * AGC TOP Control
+ */
+ if (Tuner->AGC_Mode == 0) /* Dual AGC */
+ {
+ status += MXL_ControlWrite(Tuner, AGC_IF, 15);
+ status += MXL_ControlWrite(Tuner, AGC_RF, 15);
+ }
+ else /* Single AGC Mode */
+ status += MXL_ControlWrite(Tuner, AGC_RF, Tuner->Mode? 15 : 12);
+
+
+ if (Tuner->TOP == 55) /* TOP == 5.5 */
+ status += MXL_ControlWrite(Tuner, AGC_IF, 0x0);
+
+ if (Tuner->TOP == 72) /* TOP == 7.2 */
+ status += MXL_ControlWrite(Tuner, AGC_IF, 0x1);
+
+ if (Tuner->TOP == 92) /* TOP == 9.2 */
+ status += MXL_ControlWrite(Tuner, AGC_IF, 0x2);
+
+ if (Tuner->TOP == 110) /* TOP == 11.0 */
+ status += MXL_ControlWrite(Tuner, AGC_IF, 0x3);
+
+ if (Tuner->TOP == 129) /* TOP == 12.9 */
+ status += MXL_ControlWrite(Tuner, AGC_IF, 0x4);
+
+ if (Tuner->TOP == 147) /* TOP == 14.7 */
+ status += MXL_ControlWrite(Tuner, AGC_IF, 0x5);
+
+ if (Tuner->TOP == 168) /* TOP == 16.8 */
+ status += MXL_ControlWrite(Tuner, AGC_IF, 0x6);
+
+ if (Tuner->TOP == 194) /* TOP == 19.4 */
+ status += MXL_ControlWrite(Tuner, AGC_IF, 0x7);
+
+ if (Tuner->TOP == 212) /* TOP == 21.2 */
+ status += MXL_ControlWrite(Tuner, AGC_IF, 0x9);
+
+ if (Tuner->TOP == 232) /* TOP == 23.2 */
+ status += MXL_ControlWrite(Tuner, AGC_IF, 0xA);
+
+ if (Tuner->TOP == 252) /* TOP == 25.2 */
+ status += MXL_ControlWrite(Tuner, AGC_IF, 0xB);
+
+ if (Tuner->TOP == 271) /* TOP == 27.1 */
+ status += MXL_ControlWrite(Tuner, AGC_IF, 0xC);
+
+ if (Tuner->TOP == 292) /* TOP == 29.2 */
+ status += MXL_ControlWrite(Tuner, AGC_IF, 0xD);
+
+ if (Tuner->TOP == 317) /* TOP == 31.7 */
+ status += MXL_ControlWrite(Tuner, AGC_IF, 0xE);
+
+ if (Tuner->TOP == 349) /* TOP == 34.9 */
+ status += MXL_ControlWrite(Tuner, AGC_IF, 0xF);
+
+ /**
+ * IF Synthesizer Control
+ */
+ status += MXL_IFSynthInit( Tuner );
+
+ /**
+ * IF UpConverter Control
+ */
+ if (Tuner->IF_OUT_LOAD == 200)
+ {
+ status += MXL_ControlWrite(Tuner, DRV_RES_SEL, 6);
+ status += MXL_ControlWrite(Tuner, I_DRIVER, 2);
+ }
+ if (Tuner->IF_OUT_LOAD == 300)
+ {
+ status += MXL_ControlWrite(Tuner, DRV_RES_SEL, 4);
+ status += MXL_ControlWrite(Tuner, I_DRIVER, 1);
+ }
+
+ /**
+ * Anti-Alias Filtering Control
+ */
+ /* initialise Anti-Aliasing Filter */
+ if (Tuner->Mode) { /* Digital Mode */
+ if (Tuner->IF_OUT >= 4000000UL && Tuner->IF_OUT <= 6280000UL) {
+ status += MXL_ControlWrite(Tuner, EN_AAF, 1);
+ status += MXL_ControlWrite(Tuner, EN_3P, 1);
+ status += MXL_ControlWrite(Tuner, EN_AUX_3P, 1);
+ status += MXL_ControlWrite(Tuner, SEL_AAF_BAND, 0);
+ }
+ if ((Tuner->IF_OUT == 36125000UL) || (Tuner->IF_OUT == 36150000UL)) {
+ status += MXL_ControlWrite(Tuner, EN_AAF, 1);
+ status += MXL_ControlWrite(Tuner, EN_3P, 1);
+ status += MXL_ControlWrite(Tuner, EN_AUX_3P, 1);
+ status += MXL_ControlWrite(Tuner, SEL_AAF_BAND, 1);
+ }
+ if (Tuner->IF_OUT > 36150000UL) {
+ status += MXL_ControlWrite(Tuner, EN_AAF, 0);
+ status += MXL_ControlWrite(Tuner, EN_3P, 1);
+ status += MXL_ControlWrite(Tuner, EN_AUX_3P, 1);
+ status += MXL_ControlWrite(Tuner, SEL_AAF_BAND, 1);
+ }
+ } else { /* Analog Mode */
+ if (Tuner->IF_OUT >= 4000000UL && Tuner->IF_OUT <= 5000000UL)
+ {
+ status += MXL_ControlWrite(Tuner, EN_AAF, 1);
+ status += MXL_ControlWrite(Tuner, EN_3P, 1);
+ status += MXL_ControlWrite(Tuner, EN_AUX_3P, 1);
+ status += MXL_ControlWrite(Tuner, SEL_AAF_BAND, 0);
+ }
+ if (Tuner->IF_OUT > 5000000UL)
+ {
+ status += MXL_ControlWrite(Tuner, EN_AAF, 0);
+ status += MXL_ControlWrite(Tuner, EN_3P, 0);
+ status += MXL_ControlWrite(Tuner, EN_AUX_3P, 0);
+ status += MXL_ControlWrite(Tuner, SEL_AAF_BAND, 0);
+ }
+ }
+
+ /**
+ * Demod Clock Out
+ */
+ if (Tuner->CLOCK_OUT)
+ status += MXL_ControlWrite(Tuner, SEQ_ENCLK16_CLK_OUT, 1);
+ else
+ status += MXL_ControlWrite(Tuner, SEQ_ENCLK16_CLK_OUT, 0);
+
+ if (Tuner->DIV_OUT == 1)
+ status += MXL_ControlWrite(Tuner, SEQ_SEL4_16B, 1);
+ if (Tuner->DIV_OUT == 0)
+ status += MXL_ControlWrite(Tuner, SEQ_SEL4_16B, 0);
+
+ /**
+ * Crystal Control
+ */
+ if (Tuner->CAPSELECT)
+ status += MXL_ControlWrite(Tuner, XTAL_CAPSELECT, 1);
+ else
+ status += MXL_ControlWrite(Tuner, XTAL_CAPSELECT, 0);
+
+ if (Tuner->Fxtal >= 12000000UL && Tuner->Fxtal <= 16000000UL)
+ status += MXL_ControlWrite(Tuner, IF_SEL_DBL, 1);
+ if (Tuner->Fxtal > 16000000UL && Tuner->Fxtal <= 32000000UL)
+ status += MXL_ControlWrite(Tuner, IF_SEL_DBL, 0);
+
+ if (Tuner->Fxtal >= 12000000UL && Tuner->Fxtal <= 22000000UL)
+ status += MXL_ControlWrite(Tuner, RFSYN_R_DIV, 3);
+ if (Tuner->Fxtal > 22000000UL && Tuner->Fxtal <= 32000000UL)
+ status += MXL_ControlWrite(Tuner, RFSYN_R_DIV, 0);
+
+ /**
+ * Misc Controls
+ */
+ if (Tuner->Mode == 0 && Tuner->IF_Mode == 1) /** Analog LowIF mode */
+ status += MXL_ControlWrite(Tuner, SEQ_EXTIQFSMPULSE, 0);
+ else
+ status += MXL_ControlWrite(Tuner, SEQ_EXTIQFSMPULSE, 1);
+
+ /** Set TG_R_DIV */
+ status += MXL_ControlWrite(Tuner, TG_R_DIV, MXL_Ceiling(Tuner->Fxtal, 1000000));
+
+ /**
+ * Apply Default value to BB_INITSTATE_DLPF_TUNE
+ */
+
+
+
+ /**
+ * RSSI Control
+ */
+ if(Tuner->EN_RSSI)
+ {
+ status += MXL_ControlWrite(Tuner, SEQ_EXTSYNTHCALIF, 1);
+ status += MXL_ControlWrite(Tuner, SEQ_EXTDCCAL, 1);
+ status += MXL_ControlWrite(Tuner, AGC_EN_RSSI, 1);
+ status += MXL_ControlWrite(Tuner, RFA_ENCLKRFAGC, 1);
+ /* RSSI reference point */
+ status += MXL_ControlWrite(Tuner, RFA_RSSI_REF, 2);
+ status += MXL_ControlWrite(Tuner, RFA_RSSI_REFH, 3);
+ status += MXL_ControlWrite(Tuner, RFA_RSSI_REFL, 1);
+ /* TOP point */
+ status += MXL_ControlWrite(Tuner, RFA_FLR, 0);
+ status += MXL_ControlWrite(Tuner, RFA_CEIL, 12);
+ }
+
+ /**
+ * Modulation type bit settings
+ * Override the control values preset
+ */
+ if (Tuner->Mod_Type == MXL_DVBT) /** DVB-T Mode */
+ {
+ Tuner->AGC_Mode = 1; /* Single AGC Mode */
+
+ /* Enable RSSI */
+ status += MXL_ControlWrite(Tuner, SEQ_EXTSYNTHCALIF, 1);
+ status += MXL_ControlWrite(Tuner, SEQ_EXTDCCAL, 1);
+ status += MXL_ControlWrite(Tuner, AGC_EN_RSSI, 1);
+ status += MXL_ControlWrite(Tuner, RFA_ENCLKRFAGC, 1);
+ /* RSSI reference point */
+ status += MXL_ControlWrite(Tuner, RFA_RSSI_REF, 3);
+ status += MXL_ControlWrite(Tuner, RFA_RSSI_REFH, 5);
+ status += MXL_ControlWrite(Tuner, RFA_RSSI_REFL, 1);
+ /* TOP point */
+ status += MXL_ControlWrite(Tuner, RFA_FLR, 2);
+ status += MXL_ControlWrite(Tuner, RFA_CEIL, 13);
+ if (Tuner->IF_OUT <= 6280000UL) /* Low IF */
+ status += MXL_ControlWrite(Tuner, BB_IQSWAP, 0);
+ else /* High IF */
+ status += MXL_ControlWrite(Tuner, BB_IQSWAP, 1);
+
+ }
+ if (Tuner->Mod_Type == MXL_ATSC) /* ATSC Mode */
+ {
+ Tuner->AGC_Mode = 1; /* Single AGC Mode */
+ Tuner->EN_RSSI = 1; /* Enable RSSI */
+ /* Enable RSSI */
+ status += MXL_ControlWrite(Tuner, SEQ_EXTSYNTHCALIF, 1);
+ status += MXL_ControlWrite(Tuner, SEQ_EXTDCCAL, 1);
+ status += MXL_ControlWrite(Tuner, AGC_EN_RSSI, 1);
+ status += MXL_ControlWrite(Tuner, RFA_ENCLKRFAGC, 1);
+ /* RSSI reference point */
+ status += MXL_ControlWrite(Tuner, RFA_RSSI_REF, 2);
+ status += MXL_ControlWrite(Tuner, RFA_RSSI_REFH, 4);
+ status += MXL_ControlWrite(Tuner, RFA_RSSI_REFL, 1);
+ /* TOP point */
+ status += MXL_ControlWrite(Tuner, RFA_FLR, 2);
+ status += MXL_ControlWrite(Tuner, RFA_CEIL, 13);
+
+ status += MXL_ControlWrite(Tuner, BB_INITSTATE_DLPF_TUNE, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_CHP_GAIN, 5); /* Low Zero */
+ if (Tuner->IF_OUT <= 6280000UL) /* Low IF */
+ status += MXL_ControlWrite(Tuner, BB_IQSWAP, 0);
+ else /* High IF */
+ status += MXL_ControlWrite(Tuner, BB_IQSWAP, 1);
+ }
+ if (Tuner->Mod_Type == MXL_QAM) /* QAM Mode */
+ {
+ Tuner->Mode = MXL_DIGITAL_MODE;
+
+ /** Disable RSSI */ /** change here for v2.6.5 */
+ status += MXL_ControlWrite(Tuner, SEQ_EXTSYNTHCALIF, 1);
+ status += MXL_ControlWrite(Tuner, SEQ_EXTDCCAL, 1);
+ status += MXL_ControlWrite(Tuner, AGC_EN_RSSI, 0);
+ status += MXL_ControlWrite(Tuner, RFA_ENCLKRFAGC, 1);
+
+ /* RSSI reference point */
+ status += MXL_ControlWrite(Tuner, RFA_RSSI_REFH, 5);
+ status += MXL_ControlWrite(Tuner, RFA_RSSI_REF, 3);
+ status += MXL_ControlWrite(Tuner, RFA_RSSI_REFL, 2);
+
+ status += MXL_ControlWrite(Tuner, RFSYN_CHP_GAIN, 3); /** change here for v2.6.5 */
+
+ if (Tuner->IF_OUT <= 6280000UL) /** Low IF */
+ status += MXL_ControlWrite(Tuner, BB_IQSWAP, 0);
+ else /** High IF */
+ status += MXL_ControlWrite(Tuner, BB_IQSWAP, 1);
+ }
+ if (Tuner->Mod_Type == MXL_ANALOG_CABLE) /** Analog Cable Mode */
+ {
+ Tuner->AGC_Mode = 1; /** Single AGC Mode */
+
+ /** Disable RSSI */
+ status += MXL_ControlWrite(Tuner, SEQ_EXTSYNTHCALIF, 1);
+ status += MXL_ControlWrite(Tuner, SEQ_EXTDCCAL, 1);
+ status += MXL_ControlWrite(Tuner, AGC_EN_RSSI, 0);
+ status += MXL_ControlWrite(Tuner, RFA_ENCLKRFAGC, 1);
+
+ status += MXL_ControlWrite(Tuner, AGC_IF, 1); /** change for 2.6.3 */
+ status += MXL_ControlWrite(Tuner, AGC_RF, 15);
+
+ status += MXL_ControlWrite(Tuner, BB_IQSWAP, 1);
+ }
+
+ if (Tuner->Mod_Type == MXL_ANALOG_OTA) /** Analog OTA Terrestrial mode add for 2.6.7 */
+ {
+ /** Enable RSSI */
+ status += MXL_ControlWrite(Tuner, SEQ_EXTSYNTHCALIF, 1);
+ status += MXL_ControlWrite(Tuner, SEQ_EXTDCCAL, 1);
+ status += MXL_ControlWrite(Tuner, AGC_EN_RSSI, 1);
+ status += MXL_ControlWrite(Tuner, RFA_ENCLKRFAGC, 1);
+
+ /** RSSI reference point */
+ status += MXL_ControlWrite(Tuner, RFA_RSSI_REFH, 5);
+ status += MXL_ControlWrite(Tuner, RFA_RSSI_REF, 3);
+ status += MXL_ControlWrite(Tuner, RFA_RSSI_REFL, 2);
+
+ status += MXL_ControlWrite(Tuner, RFSYN_CHP_GAIN, 3);
+
+ status += MXL_ControlWrite(Tuner, BB_IQSWAP, 1);
+ }
+
+ /** RSSI disable */
+ if(Tuner->EN_RSSI==0)
+ {
+ status += MXL_ControlWrite(Tuner, SEQ_EXTSYNTHCALIF, 1);
+ status += MXL_ControlWrite(Tuner, SEQ_EXTDCCAL, 1);
+ status += MXL_ControlWrite(Tuner, AGC_EN_RSSI, 0);
+ status += MXL_ControlWrite(Tuner, RFA_ENCLKRFAGC, 1);
+ }
+
+ return status;
+}
+
+/**
+ *
+ * Function: MXL_IFSynthInit
+ *
+ * Description: Tuner IF Synthesizer related register initialization
+ *
+ * Globals:
+ * NONE
+ *
+ * Functions used:
+ * Tuner_struct: structure defined at higher level
+ *
+ * Inputs:
+ * Tuner : Tuner structure defined at higher level
+ *
+ * Outputs:
+ * Tuner
+ *
+ * Return:
+ * 0 : Successful
+ * > 0 : Failed
+ *
+ */
+WORD MXL_IFSynthInit( Tuner_struct * Tuner )
+{
+ WORD status = 0;
+ /* Declare Local Variables */
+ DWORD Fref = 0;
+ DWORD Kdbl, intModVal;
+ DWORD fracModVal;
+ Kdbl = 2;
+
+ if (Tuner->Fxtal >= 12000000UL && Tuner->Fxtal <= 16000000UL)
+ Kdbl = 2;
+ if (Tuner->Fxtal > 16000000UL && Tuner->Fxtal <= 32000000UL)
+ Kdbl = 1;
+
+ /**
+ * IF Synthesizer Control
+ */
+ if (Tuner->Mode == 0 && Tuner->IF_Mode == 1) /* Analog Low IF mode */
+ {
+ if (Tuner->IF_LO == 41000000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x0C);
+ Fref = 328000000UL;
+ }
+ if (Tuner->IF_LO == 47000000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 376000000UL;
+ }
+ if (Tuner->IF_LO == 54000000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x10);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x0C);
+ Fref = 324000000UL;
+ }
+ if (Tuner->IF_LO == 60000000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x10);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 360000000UL;
+ }
+ if (Tuner->IF_LO == 39250000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x0C);
+ Fref = 314000000UL;
+ }
+ if (Tuner->IF_LO == 39650000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x0C);
+ Fref = 317200000UL;
+ }
+ if (Tuner->IF_LO == 40150000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x0C);
+ Fref = 321200000UL;
+ }
+ if (Tuner->IF_LO == 40650000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x0C);
+ Fref = 325200000UL;
+ }
+ }
+
+ if (Tuner->Mode || (Tuner->Mode == 0 && Tuner->IF_Mode == 0))
+ {
+ if (Tuner->IF_LO == 57000000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x10);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 342000000UL;
+ }
+ if (Tuner->IF_LO == 44000000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 352000000UL;
+ }
+ if (Tuner->IF_LO == 43750000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 350000000UL;
+ }
+ if (Tuner->IF_LO == 36650000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x04);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 366500000UL;
+ }
+ if (Tuner->IF_LO == 36150000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x04);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 361500000UL;
+ }
+ if (Tuner->IF_LO == 36000000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x04);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 360000000UL;
+ }
+ if (Tuner->IF_LO == 35250000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x04);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 352500000UL;
+ }
+ if (Tuner->IF_LO == 34750000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x04);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 347500000UL;
+ }
+ if (Tuner->IF_LO == 6280000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x07);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 376800000UL;
+ }
+ if (Tuner->IF_LO == 5000000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x09);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 360000000UL;
+ }
+ if (Tuner->IF_LO == 4500000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x06);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 360000000UL;
+ }
+ if (Tuner->IF_LO == 4570000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x06);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 365600000UL;
+ }
+ if (Tuner->IF_LO == 4000000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x05);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 360000000UL;
+ }
+ if (Tuner->IF_LO == 57400000UL)
+ {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x10);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 344400000UL;
+ }
+ if (Tuner->IF_LO == 44400000UL)
+ {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 355200000UL;
+ }
+ if (Tuner->IF_LO == 44150000UL)
+ {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 353200000UL;
+ }
+ if (Tuner->IF_LO == 37050000UL)
+ {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x04);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 370500000UL;
+ }
+ if (Tuner->IF_LO == 36550000UL)
+ {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x04);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 365500000UL;
+ }
+ if (Tuner->IF_LO == 36125000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x04);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 361250000UL;
+ }
+ if (Tuner->IF_LO == 6000000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x07);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 360000000UL;
+ }
+ if (Tuner->IF_LO == 5400000UL)
+ {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x07);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x0C);
+ Fref = 324000000UL;
+ }
+ if (Tuner->IF_LO == 5380000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x07);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x0C);
+ Fref = 322800000UL;
+ }
+ if (Tuner->IF_LO == 5200000UL) {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x09);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 374400000UL;
+ }
+ if (Tuner->IF_LO == 4900000UL)
+ {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x09);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 352800000UL;
+ }
+ if (Tuner->IF_LO == 4400000UL)
+ {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x06);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 352000000UL;
+ }
+ if (Tuner->IF_LO == 4063000UL) /** add for 2.6.8 */
+ {
+ status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x05);
+ status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08);
+ Fref = 365670000UL;
+ }
+ }
+ /* CHCAL_INT_MOD_IF */
+ /* CHCAL_FRAC_MOD_IF */
+ intModVal = Fref / (Tuner->Fxtal * Kdbl/2);
+ status += MXL_ControlWrite(Tuner, CHCAL_INT_MOD_IF, intModVal );
+
+ fracModVal = (2<<15)*(Fref/1000 - (Tuner->Fxtal/1000 * Kdbl/2) * intModVal);
+ fracModVal = fracModVal / ((Tuner->Fxtal * Kdbl/2)/1000);
+ status += MXL_ControlWrite(Tuner, CHCAL_FRAC_MOD_IF, fracModVal);
+
+
+
+ return status;
+}
+
+/**
+ *
+ * Function: MXL_GetXtalInt
+ *
+ * Description: return the Crystal Integration Value for
+ * TG_VCO_BIAS calculation
+ *
+ * Globals:
+ * NONE
+ *
+ * Functions used:
+ * NONE
+ *
+ * Inputs:
+ * Crystal Frequency Value in Hz
+ *
+ * Outputs:
+ * Calculated Crystal Frequency Integration Value
+ *
+ * Return:
+ * 0 : Successful
+ * > 0 : Failed
+ *
+ */
+DWORD MXL_GetXtalInt(DWORD Xtal_Freq)
+{
+ if ((Xtal_Freq % 1000000) == 0)
+ return (Xtal_Freq / 10000);
+ else
+ return (((Xtal_Freq / 1000000) + 1)*100);
+}
+
+/**
+ *
+ * Function: MXL5005_TuneRF
+ *
+ * Description: Set control names to tune to requested RF_IN frequency
+ *
+ * Globals:
+ * None
+ *
+ * Functions used:
+ * MXL_SynthRFTGLO_Calc
+ * MXL5005_ControlWrite
+ * MXL_GetXtalInt
+ *
+ * Inputs:
+ * Tuner : Tuner structure defined at higher level
+ *
+ * Outputs:
+ * Tuner
+ *
+ * Return:
+ * 0 : Successful
+ * 1 : Unsuccessful
+ */
+WORD MXL_TuneRF(Tuner_struct *Tuner, DWORD RF_Freq)
+{
+ /* Declare Local Variables */
+ WORD status = 0;
+ DWORD divider_val, E3, E4, E5, E5A;
+ DWORD Fmax, Fmin, FmaxBin, FminBin;
+ DWORD Kdbl_RF = 2;
+ DWORD tg_divval;
+ DWORD tg_lo;
+ DWORD Xtal_Int;
+
+ DWORD Fref_TG;
+ DWORD Fvco;
+
+ Xtal_Int = MXL_GetXtalInt(Tuner->Fxtal );
+
+ Tuner->RF_IN = RF_Freq;
+
+ MXL_SynthRFTGLO_Calc( Tuner );
+
+ if (Tuner->Fxtal >= 12000000UL && Tuner->Fxtal <= 22000000UL)
+ Kdbl_RF = 2;
+ if (Tuner->Fxtal > 22000000 && Tuner->Fxtal <= 32000000)
+ Kdbl_RF = 1;
+
+ /**
+ * Downconverter Controls
+ *
+ * Look-Up Table Implementation for:
+ * DN_POLY
+ * DN_RFGAIN
+ * DN_CAP_RFLPF
+ * DN_EN_VHFUHFBAR
+ * DN_GAIN_ADJUST
+ * Change the boundary reference from RF_IN to RF_LO
+ */
+ if (Tuner->RF_LO < 40000000UL) {
+ return -1;
+ }
+ if (Tuner->RF_LO >= 40000000UL && Tuner->RF_LO <= 75000000UL) {
+ /* Look-Up Table implementation */
+ status += MXL_ControlWrite(Tuner, DN_POLY, 2);
+ status += MXL_ControlWrite(Tuner, DN_RFGAIN, 3);
+ status += MXL_ControlWrite(Tuner, DN_CAP_RFLPF, 423);
+ status += MXL_ControlWrite(Tuner, DN_EN_VHFUHFBAR, 1);
+ status += MXL_ControlWrite(Tuner, DN_GAIN_ADJUST, 1);
+ }
+ if (Tuner->RF_LO > 75000000UL && Tuner->RF_LO <= 100000000UL) {
+ /* Look-Up Table implementation */
+ status += MXL_ControlWrite(Tuner, DN_POLY, 3);
+ status += MXL_ControlWrite(Tuner, DN_RFGAIN, 3);
+ status += MXL_ControlWrite(Tuner, DN_CAP_RFLPF, 222);
+ status += MXL_ControlWrite(Tuner, DN_EN_VHFUHFBAR, 1);
+ status += MXL_ControlWrite(Tuner, DN_GAIN_ADJUST, 1);
+ }
+ if (Tuner->RF_LO > 100000000UL && Tuner->RF_LO <= 150000000UL) {
+ /* Look-Up Table implementation */
+ status += MXL_ControlWrite(Tuner, DN_POLY, 3);
+ status += MXL_ControlWrite(Tuner, DN_RFGAIN, 3);
+ status += MXL_ControlWrite(Tuner, DN_CAP_RFLPF, 147);
+ status += MXL_ControlWrite(Tuner, DN_EN_VHFUHFBAR, 1);
+ status += MXL_ControlWrite(Tuner, DN_GAIN_ADJUST, 2);
+ }
+ if (Tuner->RF_LO > 150000000UL && Tuner->RF_LO <= 200000000UL) {
+ /* Look-Up Table implementation */
+ status += MXL_ControlWrite(Tuner, DN_POLY, 3);
+ status += MXL_ControlWrite(Tuner, DN_RFGAIN, 3);
+ status += MXL_ControlWrite(Tuner, DN_CAP_RFLPF, 9);
+ status += MXL_ControlWrite(Tuner, DN_EN_VHFUHFBAR, 1);
+ status += MXL_ControlWrite(Tuner, DN_GAIN_ADJUST, 2);
+ }
+ if (Tuner->RF_LO > 200000000UL && Tuner->RF_LO <= 300000000UL) {
+ /* Look-Up Table implementation */
+ status += MXL_ControlWrite(Tuner, DN_POLY, 3);
+ status += MXL_ControlWrite(Tuner, DN_RFGAIN, 3);
+ status += MXL_ControlWrite(Tuner, DN_CAP_RFLPF, 0);
+ status += MXL_ControlWrite(Tuner, DN_EN_VHFUHFBAR, 1);
+ status += MXL_ControlWrite(Tuner, DN_GAIN_ADJUST, 3);
+ }
+ if (Tuner->RF_LO > 300000000UL && Tuner->RF_LO <= 650000000UL) {
+ /* Look-Up Table implementation */
+ status += MXL_ControlWrite(Tuner, DN_POLY, 3);
+ status += MXL_ControlWrite(Tuner, DN_RFGAIN, 1);
+ status += MXL_ControlWrite(Tuner, DN_CAP_RFLPF, 0);
+ status += MXL_ControlWrite(Tuner, DN_EN_VHFUHFBAR, 0);
+ status += MXL_ControlWrite(Tuner, DN_GAIN_ADJUST, 3);
+ }
+ if (Tuner->RF_LO > 650000000UL && Tuner->RF_LO <= 900000000UL) {
+ /* Look-Up Table implementation */
+ status += MXL_ControlWrite(Tuner, DN_POLY, 3);
+ status += MXL_ControlWrite(Tuner, DN_RFGAIN, 2);
+ status += MXL_ControlWrite(Tuner, DN_CAP_RFLPF, 0);
+ status += MXL_ControlWrite(Tuner, DN_EN_VHFUHFBAR, 0);
+ status += MXL_ControlWrite(Tuner, DN_GAIN_ADJUST, 3);
+ }
+ if (Tuner->RF_LO > 900000000UL) {
+ return -1;
+ }
+ /* DN_IQTNBUF_AMP */
+ /* DN_IQTNGNBFBIAS_BST */
+ if (Tuner->RF_LO >= 40000000UL && Tuner->RF_LO <= 75000000UL) {
+ status += MXL_ControlWrite(Tuner, DN_IQTNBUF_AMP, 1);
+ status += MXL_ControlWrite(Tuner, DN_IQTNGNBFBIAS_BST, 0);
+ }
+ if (Tuner->RF_LO > 75000000UL && Tuner->RF_LO <= 100000000UL) {
+ status += MXL_ControlWrite(Tuner, DN_IQTNBUF_AMP, 1);
+ status += MXL_ControlWrite(Tuner, DN_IQTNGNBFBIAS_BST, 0);
+ }
+ if (Tuner->RF_LO > 100000000UL && Tuner->RF_LO <= 150000000UL) {
+ status += MXL_ControlWrite(Tuner, DN_IQTNBUF_AMP, 1);
+ status += MXL_ControlWrite(Tuner, DN_IQTNGNBFBIAS_BST, 0);
+ }
+ if (Tuner->RF_LO > 150000000UL && Tuner->RF_LO <= 200000000UL) {
+ status += MXL_ControlWrite(Tuner, DN_IQTNBUF_AMP, 1);
+ status += MXL_ControlWrite(Tuner, DN_IQTNGNBFBIAS_BST, 0);
+ }
+ if (Tuner->RF_LO > 200000000UL && Tuner->RF_LO <= 300000000UL) {
+ status += MXL_ControlWrite(Tuner, DN_IQTNBUF_AMP, 1);
+ status += MXL_ControlWrite(Tuner, DN_IQTNGNBFBIAS_BST, 0);
+ }
+ if (Tuner->RF_LO > 300000000UL && Tuner->RF_LO <= 400000000UL) {
+ status += MXL_ControlWrite(Tuner, DN_IQTNBUF_AMP, 1);
+ status += MXL_ControlWrite(Tuner, DN_IQTNGNBFBIAS_BST, 0);
+ }
+ if (Tuner->RF_LO > 400000000UL && Tuner->RF_LO <= 450000000UL) {
+ status += MXL_ControlWrite(Tuner, DN_IQTNBUF_AMP, 1);
+ status += MXL_ControlWrite(Tuner, DN_IQTNGNBFBIAS_BST, 0);
+ }
+ if (Tuner->RF_LO > 450000000UL && Tuner->RF_LO <= 500000000UL) {
+ status += MXL_ControlWrite(Tuner, DN_IQTNBUF_AMP, 1);
+ status += MXL_ControlWrite(Tuner, DN_IQTNGNBFBIAS_BST, 0);
+ }
+ if (Tuner->RF_LO > 500000000UL && Tuner->RF_LO <= 550000000UL) {
+ status += MXL_ControlWrite(Tuner, DN_IQTNBUF_AMP, 1);
+ status += MXL_ControlWrite(Tuner, DN_IQTNGNBFBIAS_BST, 0);
+ }
+ if (Tuner->RF_LO > 550000000UL && Tuner->RF_LO <= 600000000UL) {
+ status += MXL_ControlWrite(Tuner, DN_IQTNBUF_AMP, 1);
+ status += MXL_ControlWrite(Tuner, DN_IQTNGNBFBIAS_BST, 0);
+ }
+ if (Tuner->RF_LO > 600000000UL && Tuner->RF_LO <= 650000000UL) {
+ status += MXL_ControlWrite(Tuner, DN_IQTNBUF_AMP, 1);
+ status += MXL_ControlWrite(Tuner, DN_IQTNGNBFBIAS_BST, 0);
+ }
+ if (Tuner->RF_LO > 650000000UL && Tuner->RF_LO <= 700000000UL) {
+ status += MXL_ControlWrite(Tuner, DN_IQTNBUF_AMP, 1);
+ status += MXL_ControlWrite(Tuner, DN_IQTNGNBFBIAS_BST, 0);
+ }
+ if (Tuner->RF_LO > 700000000UL && Tuner->RF_LO <= 750000000UL) {
+ status += MXL_ControlWrite(Tuner, DN_IQTNBUF_AMP, 1);
+ status += MXL_ControlWrite(Tuner, DN_IQTNGNBFBIAS_BST, 0);
+ }
+ if (Tuner->RF_LO > 750000000UL && Tuner->RF_LO <= 800000000UL) {
+ status += MXL_ControlWrite(Tuner, DN_IQTNBUF_AMP, 1);
+ status += MXL_ControlWrite(Tuner, DN_IQTNGNBFBIAS_BST, 0);
+ }
+ if (Tuner->RF_LO > 800000000UL && Tuner->RF_LO <= 850000000UL) {
+ status += MXL_ControlWrite(Tuner, DN_IQTNBUF_AMP, 10);
+ status += MXL_ControlWrite(Tuner, DN_IQTNGNBFBIAS_BST, 1);
+ }
+ if (Tuner->RF_LO > 850000000UL && Tuner->RF_LO <= 900000000UL) {
+ status += MXL_ControlWrite(Tuner, DN_IQTNBUF_AMP, 10);
+ status += MXL_ControlWrite(Tuner, DN_IQTNGNBFBIAS_BST, 1);
+ }
+
+ /**
+ * Set RF Synth and LO Path Control
+ *
+ * Look-Up table implementation for:
+ * RFSYN_EN_OUTMUX
+ * RFSYN_SEL_VCO_OUT
+ * RFSYN_SEL_VCO_HI
+ * RFSYN_SEL_DIVM
+ * RFSYN_RF_DIV_BIAS
+ * DN_SEL_FREQ
+ *
+ * Set divider_val, Fmax, Fmix to use in Equations
+ */
+ FminBin = 28000000UL;
+ FmaxBin = 42500000UL;
+ if (Tuner->RF_LO >= 40000000UL && Tuner->RF_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_OUTMUX, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_OUT, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_DIVM, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_RF_DIV_BIAS, 1);
+ status += MXL_ControlWrite(Tuner, DN_SEL_FREQ, 1);
+ divider_val = 64;
+ Fmax = FmaxBin;
+ Fmin = FminBin;
+ }
+ FminBin = 42500000UL;
+ FmaxBin = 56000000UL;
+ if (Tuner->RF_LO > FminBin && Tuner->RF_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_OUTMUX, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_OUT, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_DIVM, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_RF_DIV_BIAS, 1);
+ status += MXL_ControlWrite(Tuner, DN_SEL_FREQ, 1);
+ divider_val = 64;
+ Fmax = FmaxBin;
+ Fmin = FminBin;
+ }
+ FminBin = 56000000UL;
+ FmaxBin = 85000000UL;
+ if (Tuner->RF_LO > FminBin && Tuner->RF_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_OUTMUX, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_OUT, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_DIVM, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_RF_DIV_BIAS, 1);
+ status += MXL_ControlWrite(Tuner, DN_SEL_FREQ, 1);
+ divider_val = 32;
+ Fmax = FmaxBin;
+ Fmin = FminBin;
+ }
+ FminBin = 85000000UL;
+ FmaxBin = 112000000UL;
+ if (Tuner->RF_LO > FminBin && Tuner->RF_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_OUTMUX, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_OUT, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_DIVM, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_RF_DIV_BIAS, 1);
+ status += MXL_ControlWrite(Tuner, DN_SEL_FREQ, 1);
+ divider_val = 32;
+ Fmax = FmaxBin;
+ Fmin = FminBin;
+ }
+ FminBin = 112000000UL;
+ FmaxBin = 170000000UL;
+ if (Tuner->RF_LO > FminBin && Tuner->RF_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_OUTMUX, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_OUT, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_DIVM, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_RF_DIV_BIAS, 1);
+ status += MXL_ControlWrite(Tuner, DN_SEL_FREQ, 2);
+ divider_val = 16;
+ Fmax = FmaxBin;
+ Fmin = FminBin;
+ }
+ FminBin = 170000000UL;
+ FmaxBin = 225000000UL;
+ if (Tuner->RF_LO > FminBin && Tuner->RF_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_OUTMUX, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_OUT, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_DIVM, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_RF_DIV_BIAS, 1);
+ status += MXL_ControlWrite(Tuner, DN_SEL_FREQ, 2);
+ divider_val = 16;
+ Fmax = FmaxBin;
+ Fmin = FminBin;
+ }
+ FminBin = 225000000UL;
+ FmaxBin = 300000000UL;
+ if (Tuner->RF_LO > FminBin && Tuner->RF_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_OUTMUX, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_OUT, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_DIVM, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_RF_DIV_BIAS, 1);
+ status += MXL_ControlWrite(Tuner, DN_SEL_FREQ, 4);
+ divider_val = 8;
+ Fmax = 340000000UL;
+ Fmin = FminBin;
+ }
+ FminBin = 300000000UL;
+ FmaxBin = 340000000UL;
+ if (Tuner->RF_LO > FminBin && Tuner->RF_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_OUTMUX, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_OUT, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_DIVM, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_RF_DIV_BIAS, 1);
+ status += MXL_ControlWrite(Tuner, DN_SEL_FREQ, 0);
+ divider_val = 8;
+ Fmax = FmaxBin;
+ Fmin = 225000000UL;
+ }
+ FminBin = 340000000UL;
+ FmaxBin = 450000000UL;
+ if (Tuner->RF_LO > FminBin && Tuner->RF_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_OUTMUX, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_OUT, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_DIVM, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_RF_DIV_BIAS, 2);
+ status += MXL_ControlWrite(Tuner, DN_SEL_FREQ, 0);
+ divider_val = 8;
+ Fmax = FmaxBin;
+ Fmin = FminBin;
+ }
+ FminBin = 450000000UL;
+ FmaxBin = 680000000UL;
+ if (Tuner->RF_LO > FminBin && Tuner->RF_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_OUTMUX, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_OUT, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_DIVM, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_RF_DIV_BIAS, 1);
+ status += MXL_ControlWrite(Tuner, DN_SEL_FREQ, 0);
+ divider_val = 4;
+ Fmax = FmaxBin;
+ Fmin = FminBin;
+ }
+ FminBin = 680000000UL;
+ FmaxBin = 900000000UL;
+ if (Tuner->RF_LO > FminBin && Tuner->RF_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_OUTMUX, 0);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_OUT, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_DIVM, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_RF_DIV_BIAS, 1);
+ status += MXL_ControlWrite(Tuner, DN_SEL_FREQ, 0);
+ divider_val = 4;
+ Fmax = FmaxBin;
+ Fmin = FminBin;
+ }
+
+ /* CHCAL_INT_MOD_RF */
+ /* CHCAL_FRAC_MOD_RF */
+ /* RFSYN_LPF_R */
+ /* CHCAL_EN_INT_RF */
+
+ /* Equation E3 */
+ /* RFSYN_VCO_BIAS */
+ E3 = (((Fmax-Tuner->RF_LO)/1000)*32)/((Fmax-Fmin)/1000) + 8;
+ status += MXL_ControlWrite(Tuner, RFSYN_VCO_BIAS, E3);
+
+ /* Equation E4 */
+ /* CHCAL_INT_MOD_RF */
+ E4 = (Tuner->RF_LO*divider_val/1000)/(2*Tuner->Fxtal*Kdbl_RF/1000);
+ MXL_ControlWrite(Tuner, CHCAL_INT_MOD_RF, E4);
+
+ /* Equation E5 */
+ /* CHCAL_FRAC_MOD_RF */
+ /* CHCAL_EN_INT_RF */
+ E5 = ((2<<17)*(Tuner->RF_LO/10000*divider_val - (E4*(2*Tuner->Fxtal*Kdbl_RF)/10000)))/(2*Tuner->Fxtal*Kdbl_RF/10000);
+ status += MXL_ControlWrite(Tuner, CHCAL_FRAC_MOD_RF, E5);
+
+ /* Equation E5A */
+ /* RFSYN_LPF_R */
+ E5A = (((Fmax - Tuner->RF_LO)/1000)*4/((Fmax-Fmin)/1000)) + 1;
+ status += MXL_ControlWrite(Tuner, RFSYN_LPF_R, E5A);
+
+ /* Euqation E5B */
+ /* CHCAL_EN_INIT_RF */
+ status += MXL_ControlWrite(Tuner, CHCAL_EN_INT_RF, ((E5 == 0) ? 1 : 0));
+
+ /**
+ * Set TG Synth
+ *
+ * Look-Up table implementation for:
+ * TG_LO_DIVVAL
+ * TG_LO_SELVAL
+ *
+ * Set divider_val, Fmax, Fmix to use in Equations
+ */
+ if (Tuner->TG_LO < 33000000UL) {
+ return -1;
+ }
+ FminBin = 33000000UL;
+ FmaxBin = 50000000UL;
+ if (Tuner->TG_LO >= FminBin && Tuner->TG_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, TG_LO_DIVVAL, 0x6);
+ status += MXL_ControlWrite(Tuner, TG_LO_SELVAL, 0x0);
+ divider_val = 36;
+ Fmax = FmaxBin;
+ Fmin = FminBin;
+ }
+ FminBin = 50000000UL;
+ FmaxBin = 67000000UL;
+ if (Tuner->TG_LO > FminBin && Tuner->TG_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, TG_LO_DIVVAL, 0x1);
+ status += MXL_ControlWrite(Tuner, TG_LO_SELVAL, 0x0);
+ divider_val = 24;
+ Fmax = FmaxBin;
+ Fmin = FminBin;
+ }
+ FminBin = 67000000UL;
+ FmaxBin = 100000000UL;
+ if (Tuner->TG_LO > FminBin && Tuner->TG_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, TG_LO_DIVVAL, 0xC);
+ status += MXL_ControlWrite(Tuner, TG_LO_SELVAL, 0x2);
+ divider_val = 18;
+ Fmax = FmaxBin;
+ Fmin = FminBin;
+ }
+ FminBin = 100000000UL;
+ FmaxBin = 150000000UL;
+ if (Tuner->TG_LO > FminBin && Tuner->TG_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, TG_LO_DIVVAL, 0x8);
+ status += MXL_ControlWrite(Tuner, TG_LO_SELVAL, 0x2);
+ divider_val = 12;
+ Fmax = FmaxBin;
+ Fmin = FminBin;
+ }
+ FminBin = 150000000UL;
+ FmaxBin = 200000000UL;
+ if (Tuner->TG_LO > FminBin && Tuner->TG_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, TG_LO_DIVVAL, 0x0);
+ status += MXL_ControlWrite(Tuner, TG_LO_SELVAL, 0x2);
+ divider_val = 8;
+ Fmax = FmaxBin;
+ Fmin = FminBin;
+ }
+ FminBin = 200000000UL;
+ FmaxBin = 300000000UL;
+ if (Tuner->TG_LO > FminBin && Tuner->TG_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, TG_LO_DIVVAL, 0x8);
+ status += MXL_ControlWrite(Tuner, TG_LO_SELVAL, 0x3);
+ divider_val = 6;
+ Fmax = FmaxBin;
+ Fmin = FminBin;
+ }
+ FminBin = 300000000UL;
+ FmaxBin = 400000000UL;
+ if (Tuner->TG_LO > FminBin && Tuner->TG_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, TG_LO_DIVVAL, 0x0);
+ status += MXL_ControlWrite(Tuner, TG_LO_SELVAL, 0x3);
+ divider_val = 4;
+ Fmax = FmaxBin;
+ Fmin = FminBin;
+ }
+ FminBin = 400000000UL;
+ FmaxBin = 600000000UL;
+ if (Tuner->TG_LO > FminBin && Tuner->TG_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, TG_LO_DIVVAL, 0x8);
+ status += MXL_ControlWrite(Tuner, TG_LO_SELVAL, 0x7);
+ divider_val = 3;
+ Fmax = FmaxBin;
+ Fmin = FminBin;
+ }
+ FminBin = 600000000UL;
+ FmaxBin = 900000000UL;
+ if (Tuner->TG_LO > FminBin && Tuner->TG_LO <= FmaxBin) {
+ status += MXL_ControlWrite(Tuner, TG_LO_DIVVAL, 0x0);
+ status += MXL_ControlWrite(Tuner, TG_LO_SELVAL, 0x7);
+ divider_val = 2;
+ Fmax = FmaxBin;
+ Fmin = FminBin;
+ }
+
+ /* TG_DIV_VAL */
+ tg_divval = (Tuner->TG_LO*divider_val/100000)
+ *(MXL_Ceiling(Tuner->Fxtal,1000000) * 100) / (Tuner->Fxtal/1000);
+ status += MXL_ControlWrite(Tuner, TG_DIV_VAL, tg_divval);
+
+ if (Tuner->TG_LO > 600000000UL)
+ status += MXL_ControlWrite(Tuner, TG_DIV_VAL, tg_divval + 1 );
+
+ Fmax = 1800000000UL;
+ Fmin = 1200000000UL;
+
+
+
+ /** to prevent overflow of 32 bit unsigned integer, use following equation. Edit for v2.6.4 */
+ Fref_TG = (Tuner->Fxtal/1000)/ MXL_Ceiling(Tuner->Fxtal, 1000000); /** Fref_TF = Fref_TG*1000 */
+
+ Fvco = (Tuner->TG_LO/10000) * divider_val * Fref_TG; /** Fvco = Fvco/10 */
+
+ tg_lo = (((Fmax/10 - Fvco)/100)*32) / ((Fmax-Fmin)/1000)+8;
+
+
+ status += MXL_ControlWrite(Tuner, TG_VCO_BIAS , tg_lo);
+
+
+
+ /** add for 2.6.5 */
+ /** Special setting for QAM */
+ if(Tuner ->Mod_Type == MXL_QAM)
+ {
+ if(Tuner->RF_IN < 680000000)
+ status += MXL_ControlWrite(Tuner, RFSYN_CHP_GAIN, 3);
+ else
+ status += MXL_ControlWrite(Tuner, RFSYN_CHP_GAIN, 2);
+ }
+
+
+ /** remove 20.48MHz setting for 2.6.10 */
+
+ /**
+ * Off Chip Tracking Filter Control
+ */
+ if (Tuner->TF_Type == MXL_TF_OFF) /** Tracking Filter Off State; turn off all the banks */
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 0);
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0);
+
+ status += MXL_SetGPIO(Tuner, 3, 1); /** turn off Bank 1 */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** turn off Bank 2 */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** turn off Bank 3 */
+ }
+
+ if (Tuner->TF_Type == MXL_TF_C) /** Tracking Filter type C */
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 1);
+ status += MXL_ControlWrite(Tuner, DAC_DIN_A, 0);
+
+ if (Tuner->RF_IN >= 43000000 && Tuner->RF_IN < 150000000)
+ {
+
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 0); /** Bank4 Off */
+ status += MXL_ControlWrite(Tuner, DAC_DIN_B, 0);
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank1 On */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 150000000 && Tuner->RF_IN < 280000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 0); /** Bank4 Off */
+ status += MXL_ControlWrite(Tuner, DAC_DIN_B, 0);
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 280000000 && Tuner->RF_IN < 360000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 0); /** Bank4 Off */
+ status += MXL_ControlWrite(Tuner, DAC_DIN_B, 0);
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 360000000 && Tuner->RF_IN < 560000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 0); /** Bank4 Off */
+ status += MXL_ControlWrite(Tuner, DAC_DIN_B, 0);
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 560000000 && Tuner->RF_IN < 580000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 1); /** Bank4 On */
+ status += MXL_ControlWrite(Tuner, DAC_DIN_B, 29);
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 580000000 && Tuner->RF_IN < 630000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 1); /** Bank4 On */
+ status += MXL_ControlWrite(Tuner, DAC_DIN_B, 0);
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 630000000 && Tuner->RF_IN < 700000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 1); /** Bank4 On */
+ status += MXL_ControlWrite(Tuner, DAC_DIN_B, 16);
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 700000000 && Tuner->RF_IN < 760000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 1); /** Bank4 On */
+ status += MXL_ControlWrite(Tuner, DAC_DIN_B, 7);
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 760000000 && Tuner->RF_IN <= 900000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 1); /** Bank4 On */
+ status += MXL_ControlWrite(Tuner, DAC_DIN_B, 0);
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank3 Off */
+ }
+ }
+
+ if (Tuner->TF_Type == MXL_TF_C_H) /** Tracking Filter type C-H for Hauppauge only */
+ {
+ status += MXL_ControlWrite(Tuner, DAC_DIN_A, 0);
+
+ if (Tuner->RF_IN >= 43000000 && Tuner->RF_IN < 150000000)
+ {
+
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank1 On */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 150000000 && Tuner->RF_IN < 280000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 280000000 && Tuner->RF_IN < 360000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 360000000 && Tuner->RF_IN < 560000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 560000000 && Tuner->RF_IN < 580000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 580000000 && Tuner->RF_IN < 630000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 630000000 && Tuner->RF_IN < 700000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 700000000 && Tuner->RF_IN < 760000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 760000000 && Tuner->RF_IN <= 900000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank3 Off */
+ }
+ }
+
+ if (Tuner->TF_Type == MXL_TF_D) /** Tracking Filter type D */
+ {
+ status += MXL_ControlWrite(Tuner, DAC_DIN_B, 0);
+
+ if (Tuner->RF_IN >= 43000000 && Tuner->RF_IN < 174000000)
+ {
+
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank1 On */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 174000000 && Tuner->RF_IN < 250000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank1 On */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 250000000 && Tuner->RF_IN < 310000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 310000000 && Tuner->RF_IN < 360000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 360000000 && Tuner->RF_IN < 470000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 470000000 && Tuner->RF_IN < 640000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 640000000 && Tuner->RF_IN <= 900000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ }
+
+
+ if (Tuner->TF_Type == MXL_TF_D_L) /** Tracking Filter type D-L for Lumanate ONLY change for 2.6.3 */
+ {
+ status += MXL_ControlWrite(Tuner, DAC_DIN_A, 0);
+
+ if (Tuner->RF_IN >= 471000000 && (Tuner->RF_IN - 471000000)%6000000 != 0) /** if UHF and terrestrial => Turn off Tracking Filter */
+ {
+ /** Turn off all the banks */
+ status += MXL_SetGPIO(Tuner, 3, 1);
+ status += MXL_SetGPIO(Tuner, 1, 1);
+ status += MXL_SetGPIO(Tuner, 4, 1);
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 0);
+
+ status += MXL_ControlWrite(Tuner, AGC_IF, 10);
+ }
+
+ else /** if VHF or cable => Turn on Tracking Filter */
+ {
+ if (Tuner->RF_IN >= 43000000 && Tuner->RF_IN < 140000000)
+ {
+
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 On */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 140000000 && Tuner->RF_IN < 240000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 On */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 240000000 && Tuner->RF_IN < 340000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 340000000 && Tuner->RF_IN < 430000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 430000000 && Tuner->RF_IN < 470000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 1); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 470000000 && Tuner->RF_IN < 570000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 570000000 && Tuner->RF_IN < 620000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 0); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Offq */
+ }
+ if (Tuner->RF_IN >= 620000000 && Tuner->RF_IN < 760000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 760000000 && Tuner->RF_IN <= 900000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_A_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ }
+ }
+
+ if (Tuner->TF_Type == MXL_TF_E) /** Tracking Filter type E */
+ {
+ status += MXL_ControlWrite(Tuner, DAC_DIN_B, 0);
+
+ if (Tuner->RF_IN >= 43000000 && Tuner->RF_IN < 174000000)
+ {
+
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank1 On */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 174000000 && Tuner->RF_IN < 250000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank1 On */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 250000000 && Tuner->RF_IN < 310000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 310000000 && Tuner->RF_IN < 360000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 360000000 && Tuner->RF_IN < 470000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 470000000 && Tuner->RF_IN < 640000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 640000000 && Tuner->RF_IN <= 900000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ }
+
+ if (Tuner->TF_Type == MXL_TF_F) /** Tracking Filter type F */
+ {
+ status += MXL_ControlWrite(Tuner, DAC_DIN_B, 0);
+
+ if (Tuner->RF_IN >= 43000000 && Tuner->RF_IN < 160000000)
+ {
+
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank1 On */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 160000000 && Tuner->RF_IN < 210000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank1 On */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 210000000 && Tuner->RF_IN < 300000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 300000000 && Tuner->RF_IN < 390000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 390000000 && Tuner->RF_IN < 515000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 515000000 && Tuner->RF_IN < 650000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 650000000 && Tuner->RF_IN <= 900000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ }
+
+ if (Tuner->TF_Type == MXL_TF_E_2) /** Tracking Filter type E_2 */
+ {
+ status += MXL_ControlWrite(Tuner, DAC_DIN_B, 0);
+
+ if (Tuner->RF_IN >= 43000000 && Tuner->RF_IN < 174000000)
+ {
+
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank1 On */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 174000000 && Tuner->RF_IN < 250000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank1 On */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 250000000 && Tuner->RF_IN < 350000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 on */
+ }
+ if (Tuner->RF_IN >= 350000000 && Tuner->RF_IN < 400000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 400000000 && Tuner->RF_IN < 570000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 570000000 && Tuner->RF_IN < 770000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 770000000 && Tuner->RF_IN <= 900000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ }
+
+ if (Tuner->TF_Type == MXL_TF_G) /** Tracking Filter type G add for v2.6.8 */
+ {
+ status += MXL_ControlWrite(Tuner, DAC_DIN_B, 0);
+
+ if (Tuner->RF_IN >= 50000000 && Tuner->RF_IN < 190000000)
+ {
+
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank1 On */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 190000000 && Tuner->RF_IN < 280000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank1 On */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 280000000 && Tuner->RF_IN < 350000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 350000000 && Tuner->RF_IN < 400000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 400000000 && Tuner->RF_IN < 470000000) /** modified for 2.6.11 */
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 On */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 470000000 && Tuner->RF_IN < 640000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 640000000 && Tuner->RF_IN < 820000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 820000000 && Tuner->RF_IN <= 900000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ }
+
+ if (Tuner->TF_Type == MXL_TF_E_NA) /** Tracking Filter type E-NA for Empia ONLY change for 2.6.8 */
+ {
+ status += MXL_ControlWrite(Tuner, DAC_DIN_B, 0);
+
+ if (Tuner->RF_IN >= 471000000 && (Tuner->RF_IN - 471000000)%6000000 != 0) /**if UHF and terrestrial=> Turn off Tracking Filter */
+ {
+ /** Turn off all the banks */
+ status += MXL_SetGPIO(Tuner, 3, 1);
+ status += MXL_SetGPIO(Tuner, 1, 1);
+ status += MXL_SetGPIO(Tuner, 4, 1);
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0);
+
+ /** 2.6.12 */
+ /** Turn on RSSI */
+ status += MXL_ControlWrite(Tuner, SEQ_EXTSYNTHCALIF, 1);
+ status += MXL_ControlWrite(Tuner, SEQ_EXTDCCAL, 1);
+ status += MXL_ControlWrite(Tuner, AGC_EN_RSSI, 1);
+ status += MXL_ControlWrite(Tuner, RFA_ENCLKRFAGC, 1);
+
+ /** RSSI reference point */
+ status += MXL_ControlWrite(Tuner, RFA_RSSI_REFH, 5);
+ status += MXL_ControlWrite(Tuner, RFA_RSSI_REF, 3);
+ status += MXL_ControlWrite(Tuner, RFA_RSSI_REFL, 2);
+
+ /** following parameter is from analog OTA mode, can be change to seek better performance */
+ status += MXL_ControlWrite(Tuner, RFSYN_CHP_GAIN, 3);
+ }
+
+ else /** if VHF or Cable => Turn on Tracking Filter */
+ {
+ /** 2.6.12 */
+ /** Turn off RSSI */
+ status += MXL_ControlWrite(Tuner, AGC_EN_RSSI, 0);
+
+ /** change back from above condition */
+ status += MXL_ControlWrite(Tuner, RFSYN_CHP_GAIN, 5);
+ if (Tuner->RF_IN >= 43000000 && Tuner->RF_IN < 174000000)
+ {
+
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank1 On */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 174000000 && Tuner->RF_IN < 250000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 0); /** Bank1 On */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 250000000 && Tuner->RF_IN < 350000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ if (Tuner->RF_IN >= 350000000 && Tuner->RF_IN < 400000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 0); /** Bank2 On */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 400000000 && Tuner->RF_IN < 570000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 0); /** Bank4 Off */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 570000000 && Tuner->RF_IN < 770000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 0); /** Bank3 On */
+ }
+ if (Tuner->RF_IN >= 770000000 && Tuner->RF_IN <= 900000000)
+ {
+ status += MXL_ControlWrite(Tuner, DAC_B_ENABLE, 1); /** Bank4 On */
+ status += MXL_SetGPIO(Tuner, 4, 1); /** Bank1 Off */
+ status += MXL_SetGPIO(Tuner, 1, 1); /** Bank2 Off */
+ status += MXL_SetGPIO(Tuner, 3, 1); /** Bank3 Off */
+ }
+ }
+ }
+ return status;
+}
+
+WORD MXL_SetGPIO(Tuner_struct *Tuner, BYTE GPIO_Num, BYTE GPIO_Val)
+{
+ WORD status = 0;
+
+ if (GPIO_Num == 1)
+ status += MXL_ControlWrite(Tuner, GPIO_1B, GPIO_Val ? 0 : 1);
+ /* GPIO2 is not available */
+ if (GPIO_Num == 3)
+ {
+ if (GPIO_Val == 1) {
+ status += MXL_ControlWrite(Tuner, GPIO_3, 0);
+ status += MXL_ControlWrite(Tuner, GPIO_3B, 0);
+ }
+ if (GPIO_Val == 0) {
+ status += MXL_ControlWrite(Tuner, GPIO_3, 1);
+ status += MXL_ControlWrite(Tuner, GPIO_3B, 1);
+ }
+ if (GPIO_Val == 3) { /* tri-state */
+ status += MXL_ControlWrite(Tuner, GPIO_3, 0);
+ status += MXL_ControlWrite(Tuner, GPIO_3B, 1);
+ }
+ }
+ if (GPIO_Num == 4)
+ {
+ if (GPIO_Val == 1) {
+ status += MXL_ControlWrite(Tuner, GPIO_4, 0);
+ status += MXL_ControlWrite(Tuner, GPIO_4B, 0);
+ }
+ if (GPIO_Val == 0) {
+ status += MXL_ControlWrite(Tuner, GPIO_4, 1);
+ status += MXL_ControlWrite(Tuner, GPIO_4B, 1);
+ }
+ if (GPIO_Val == 3) { /* tri-state */
+ status += MXL_ControlWrite(Tuner, GPIO_4, 0);
+ status += MXL_ControlWrite(Tuner, GPIO_4B, 1);
+ }
+ }
+
+ return status;
+}
+
+/**
+ *
+ * Function: MXL_ControlWrite
+ *
+ * Description: Update control name value
+ *
+ * Globals:
+ * NONE
+ *
+ * Functions used:
+ * MXL_ControlWrite( Tuner, controlName, value, Group )
+ *
+ * Inputs:
+ * Tuner : Tuner structure
+ * ControlName : Control name to be updated
+ * value : Value to be written
+ *
+ * Outputs:
+ * Tuner : Tuner structure defined at higher level
+ *
+ * Return:
+ * 0 : Successful write
+ * >0 : Value exceed maximum allowed for control number
+ *
+ */
+WORD MXL_ControlWrite(Tuner_struct *Tuner, WORD ControlNum, DWORD value)
+{
+ WORD status = 0;
+ /* Will write ALL Matching Control Name */
+ status += MXL_ControlWrite_Group( Tuner, ControlNum, value, 1 ); /* Write Matching INIT Control */
+ status += MXL_ControlWrite_Group( Tuner, ControlNum, value, 2 ); /* Write Matching CH Control */
+#ifdef _MXL_INTERNAL
+ status += MXL_ControlWrite_Group( Tuner, ControlNum, value, 3 ); /* Write Matching MXL Control */
+#endif
+
+ return status;
+}
+
+/**
+ *
+ * Function: MXL_ControlWrite
+ *
+ * Description: Update control name value
+ *
+ * Globals:
+ * NONE
+ *
+ * Functions used:
+ * strcmp
+ *
+ * Inputs:
+ * Tuner_struct: structure defined at higher level
+ * ControlName : Control Name
+ * value : Value Assigned to Control Name
+ * controlGroup : Control Register Group
+ *
+ * Outputs:
+ * NONE
+ *
+ * Return:
+ * 0 : Successful write
+ * 1 : Value exceed maximum allowed for control name
+ * 2 : Control name not found
+ *
+ */
+WORD MXL_ControlWrite_Group(Tuner_struct *Tuner, WORD controlNum, DWORD value, WORD controlGroup)
+{
+ WORD i, j, k;
+ DWORD highLimit;
+ DWORD ctrlVal;
+
+ if( controlGroup == 1) /* Initial Control */
+ {
+ for (i=0; i<Tuner->Init_Ctrl_Num; i++)
+ {
+ if ( controlNum == Tuner->Init_Ctrl[i].Ctrl_Num )
+ { /* find the control Name */
+ highLimit = 1 << Tuner->Init_Ctrl[i].size ;
+ if ( value < highLimit)
+ {
+ for( j=0; j<Tuner->Init_Ctrl[i].size; j++)
+ {
+ Tuner->Init_Ctrl[i].val[j] = (BYTE)((value >> j) & 0x01);
+ /** change the register map accordingly */
+ MXL_RegWriteBit( Tuner, (BYTE)(Tuner->Init_Ctrl[i].addr[j]),
+ (BYTE)(Tuner->Init_Ctrl[i].bit[j]),
+ (BYTE)((value>>j) & 0x01) );
+ }
+ ctrlVal = 0;
+ for(k=0; k<Tuner->Init_Ctrl[i].size; k++)
+ {
+ ctrlVal += Tuner->Init_Ctrl[i].val[k] * (1 << k);
+ }
+ }
+ else
+ {
+ return -1;
+ }
+ }
+ }
+ }
+ if ( controlGroup == 2) /* Chan change Control */
+ {
+ for (i=0; i<Tuner->CH_Ctrl_Num; i++)
+ {
+ if ( controlNum == Tuner->CH_Ctrl[i].Ctrl_Num )
+ { /* find the control Name */
+ highLimit = 1 << Tuner->CH_Ctrl[i].size;
+ if ( value < highLimit)
+ {
+ for( j=0; j<Tuner->CH_Ctrl[i].size; j++)
+ {
+ Tuner->CH_Ctrl[i].val[j] = (BYTE)((value >> j) & 0x01);
+ /** change the register map accordingly */
+ MXL_RegWriteBit( Tuner, (BYTE)(Tuner->CH_Ctrl[i].addr[j]),
+ (BYTE)(Tuner->CH_Ctrl[i].bit[j]),
+ (BYTE)((value>>j) & 0x01) );
+ }
+ ctrlVal = 0;
+ for(k=0; k<Tuner->CH_Ctrl[i].size; k++)
+ {
+ ctrlVal += Tuner->CH_Ctrl[i].val[k] * (1 << k);
+ }
+ }
+ else
+ {
+ return -1;
+ }
+ }
+ }
+ }
+#ifdef _MXL_INTERNAL
+ if ( controlGroup == 3) /* Maxlinear Control */
+ {
+ for (i=0; i<Tuner->MXL_Ctrl_Num; i++)
+ {
+ if ( controlNum == Tuner->MXL_Ctrl[i].Ctrl_Num )
+ { /* find the control Name */
+ highLimit = (1 << Tuner->MXL_Ctrl[i].size);
+ if ( value < highLimit)
+ {
+ for( j=0; j<Tuner->MXL_Ctrl[i].size; j++)
+ {
+ Tuner->MXL_Ctrl[i].val[j] = (BYTE)((value >> j) & 0x01);
+ /** change the register map accordingly */
+ MXL_RegWriteBit( Tuner, (BYTE)(Tuner->MXL_Ctrl[i].addr[j]),
+ (BYTE)(Tuner->MXL_Ctrl[i].bit[j]),
+ (BYTE)((value>>j) & 0x01) );
+ }
+ ctrlVal = 0;
+ for(k=0; k<Tuner->MXL_Ctrl[i].size; k++)
+ {
+ ctrlVal += Tuner->MXL_Ctrl[i].val[k] * (1 << k);
+ }
+ }
+ else
+ {
+ return -1;
+ }
+ }
+ }
+ }
+#endif
+ return 0; /* successful return */
+}
+
+/**
+ *
+ * Function: MXL_RegWrite
+ *
+ * Description: Update tuner register value
+ *
+ * Globals:
+ * NONE
+ *
+ * Functions used:
+ * NONE
+ *
+ * Inputs:
+ * Tuner_struct: structure defined at higher level
+ * RegNum : Register address to be assigned a value
+ * RegVal : Register value to write
+ *
+ * Outputs:
+ * NONE
+ *
+ * Return:
+ * 0 : Successful write
+ * -1 : Invalid Register Address
+ *
+ */
+WORD MXL_RegWrite(Tuner_struct *Tuner, BYTE RegNum, BYTE RegVal)
+{
+ int i;
+
+ for (i=0; i<104; i++)
+ {
+ if (RegNum == Tuner->TunerRegs[i].Reg_Num )
+ {
+ Tuner->TunerRegs[i].Reg_Val = RegVal;
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+/**
+ *
+ * Function: MXL_RegRead
+ *
+ * Description: Retrieve tuner register value
+ *
+ * Globals:
+ * NONE
+ *
+ * Functions used:
+ * NONE
+ *
+ * Inputs:
+ * Tuner_struct: structure defined at higher level
+ * RegNum : Register address to be assigned a value
+ *
+ * Outputs:
+ * RegVal : Retrieved register value
+ *
+ * Return:
+ * 0 : Successful read
+ * -1 : Invalid Register Address
+ *
+ */
+WORD MXL_RegRead(Tuner_struct *Tuner, BYTE RegNum, BYTE *RegVal)
+{
+ int i;
+
+ for (i=0; i<104; i++)
+ {
+ if (RegNum == Tuner->TunerRegs[i].Reg_Num )
+ {
+ *RegVal = (BYTE)(Tuner->TunerRegs[i].Reg_Val);
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+/**
+ *
+ * Function: MXL_ControlRead
+ *
+ * Description: Retrieve the control value based on the control name
+ *
+ * Globals:
+ * NONE
+ *
+ * Inputs:
+ * Tuner_struct : structure defined at higher level
+ * ControlName : Control Name
+ *
+ * Outputs:
+ * value : returned control value
+ *
+ * Return:
+ * 0 : Successful read
+ * -1 : Invalid control name
+ *
+ */
+WORD MXL_ControlRead(Tuner_struct *Tuner, WORD controlNum, DWORD * value)
+{
+ DWORD ctrlVal;
+ WORD i, k;
+
+ for (i=0; i<Tuner->Init_Ctrl_Num; i++)
+ {
+ if ( controlNum == Tuner->Init_Ctrl[i].Ctrl_Num )
+ {
+ ctrlVal = 0;
+ for(k=0; k<Tuner->Init_Ctrl[i].size; k++)
+ ctrlVal += Tuner->Init_Ctrl[i].val[k] * (1 << k);
+ *value = ctrlVal;
+ return 0;
+ }
+ }
+ for (i=0; i<Tuner->CH_Ctrl_Num; i++)
+ {
+ if ( controlNum == Tuner->CH_Ctrl[i].Ctrl_Num )
+ {
+ ctrlVal = 0;
+ for(k=0; k<Tuner->CH_Ctrl[i].size; k++)
+ ctrlVal += Tuner->CH_Ctrl[i].val[k] * (1 << k);
+ *value = ctrlVal;
+ return 0;
+ }
+ }
+
+#ifdef _MXL_INTERNAL
+ for (i=0; i<Tuner->MXL_Ctrl_Num; i++)
+ {
+ if ( controlNum == Tuner->MXL_Ctrl[i].Ctrl_Num )
+ {
+ ctrlVal = 0;
+ for(k=0; k<Tuner->MXL_Ctrl[i].size; k++)
+ ctrlVal += Tuner->MXL_Ctrl[i].val[k] * (1<<k);
+ *value = ctrlVal;
+ return 0;
+ }
+ }
+#endif
+ return 1;
+}
+
+/**
+ *
+ * Function: MXL_ControlRegRead
+ *
+ * Description: Retrieve the register addresses and count related to a
+ * a specific control name
+ *
+ * Globals:
+ * NONE
+ *
+ * Inputs:
+ * Tuner_struct : structure defined at higher level
+ * ControlName : Control Name
+ *
+ * Outputs:
+ * RegNum : returned register address array
+ * count : returned register count related to a control
+ *
+ * Return:
+ * 0 : Successful read
+ * -1 : Invalid control name
+ *
+ */
+WORD MXL_ControlRegRead(Tuner_struct *Tuner, WORD controlNum, BYTE *RegNum, int * count)
+{
+ WORD i, j, k;
+ WORD Count;
+
+ for (i=0; i<Tuner->Init_Ctrl_Num; i++)
+ {
+ if ( controlNum == Tuner->Init_Ctrl[i].Ctrl_Num )
+ {
+ Count = 1;
+ RegNum[0] = (BYTE)(Tuner->Init_Ctrl[i].addr[0]);
+
+ for(k=1; k<Tuner->Init_Ctrl[i].size; k++)
+ {
+ for (j= 0; j<Count; j++)
+ {
+ if (Tuner->Init_Ctrl[i].addr[k] != RegNum[j])
+ {
+ Count ++;
+ RegNum[Count-1] = (BYTE)(Tuner->Init_Ctrl[i].addr[k]);
+ }
+ }
+
+ }
+ *count = Count;
+ return 0;
+ }
+ }
+ for (i=0; i<Tuner->CH_Ctrl_Num; i++)
+ {
+ if ( controlNum == Tuner->CH_Ctrl[i].Ctrl_Num )
+ {
+ Count = 1;
+ RegNum[0] = (BYTE)(Tuner->CH_Ctrl[i].addr[0]);
+
+ for(k=1; k<Tuner->CH_Ctrl[i].size; k++)
+ {
+ for (j= 0; j<Count; j++)
+ {
+ if (Tuner->CH_Ctrl[i].addr[k] != RegNum[j])
+ {
+ Count ++;
+ RegNum[Count-1] = (BYTE)(Tuner->CH_Ctrl[i].addr[k]);
+ }
+ }
+ }
+ *count = Count;
+ return 0;
+ }
+ }
+#ifdef _MXL_INTERNAL
+ for (i=0; i<Tuner->MXL_Ctrl_Num; i++)
+ {
+ if ( controlNum == Tuner->MXL_Ctrl[i].Ctrl_Num )
+ {
+ Count = 1;
+ RegNum[0] = (BYTE)(Tuner->MXL_Ctrl[i].addr[0]);
+
+ for(k=1; k<Tuner->MXL_Ctrl[i].size; k++)
+ {
+ for (j= 0; j<Count; j++)
+ {
+ if (Tuner->MXL_Ctrl[i].addr[k] != RegNum[j])
+ {
+ Count ++;
+ RegNum[Count-1] = (BYTE)Tuner->MXL_Ctrl[i].addr[k];
+ }
+ }
+ }
+ *count = Count;
+ return 0;
+ }
+ }
+#endif
+ *count = 0;
+ return 1;
+}
+
+/**
+ *
+ * Function: MXL_RegWriteBit
+ *
+ * Description: Write a register for specified register address,
+ * register bit and register bit value
+ *
+ * Globals:
+ * NONE
+ *
+ * Inputs:
+ * Tuner_struct : structure defined at higher level
+ * address : register address
+ * bit : register bit number
+ * bitVal : register bit value
+ *
+ * Outputs:
+ * NONE
+ *
+ * Return:
+ * NONE
+ *
+ */
+void MXL_RegWriteBit(Tuner_struct *Tuner, BYTE address, BYTE bit, BYTE bitVal)
+{
+ int i;
+
+ /* Declare Local Constants */
+ const BYTE AND_MAP[8] = {
+ 0xFE, 0xFD, 0xFB, 0xF7,
+ 0xEF, 0xDF, 0xBF, 0x7F };
+
+ const BYTE OR_MAP[8] = {
+ 0x01, 0x02, 0x04, 0x08,
+ 0x10, 0x20, 0x40, 0x80 };
+
+ for(i=0; i<Tuner->TunerRegs_Num; i++) {
+ if ( Tuner->TunerRegs[i].Reg_Num == address ) {
+ if (bitVal)
+ Tuner->TunerRegs[i].Reg_Val |= OR_MAP[bit];
+ else
+ Tuner->TunerRegs[i].Reg_Val &= AND_MAP[bit];
+ break;
+ }
+ }
+};
+
+
+/**
+ *
+ * Function: MXL_Ceiling
+ *
+ * Description: Complete to closest increment of resolution
+ *
+ * Globals:
+ * NONE
+ *
+ * Functions used:
+ * NONE
+ *
+ * Inputs:
+ * value : Input number to compute
+ * resolution : Increment step
+ *
+ * Outputs:
+ * NONE
+ *
+ * Return:
+ * Computed value
+ *
+ */
+DWORD MXL_Ceiling( DWORD value, DWORD resolution )
+{
+ return (value/resolution + (value%resolution > 0 ? 1 : 0));
+};
+
+/**
+ * Retrieve the Initialzation Registers
+ */
+WORD MXL_GetInitRegister(Tuner_struct *Tuner, BYTE * RegNum, BYTE *RegVal, int *count)
+{
+ WORD status = 0;
+ int i;
+
+ BYTE RegAddr[] = {11, 12, 13, 22, 32, 43, 44, 53, 56, 59, 73,
+ 76, 77, 91, 134, 135, 137, 147,
+ 156, 166, 167, 168, 25 };
+ *count = sizeof(RegAddr) / sizeof(BYTE);
+
+ status += MXL_BlockInit(Tuner);
+
+ for (i=0; i< *count; i++)
+ {
+ RegNum[i] = RegAddr[i];
+ status += MXL_RegRead(Tuner, RegNum[i], &RegVal[i]);
+ }
+
+ return status;
+}
+
+WORD MXL_GetCHRegister(Tuner_struct *Tuner, BYTE * RegNum, BYTE *RegVal, int *count)
+{
+ WORD status = 0;
+ int i;
+
+/** add 77, 166, 167, 168 register for 2.6.12 */
+#ifdef _MXL_PRODUCTION
+ BYTE RegAddr[] = {14, 15, 16, 17, 22, 43, 65, 68, 69, 70, 73, 92, 93, 106,
+ 107, 108, 109, 110, 111, 112, 136, 138, 149, 77, 166, 167, 168 };
+#else
+ BYTE RegAddr[] = {14, 15, 16, 17, 22, 43, 68, 69, 70, 73, 92, 93, 106,
+ 107, 108, 109, 110, 111, 112, 136, 138, 149, 77, 166, 167, 168 };
+#endif
+
+ *count = sizeof(RegAddr) / sizeof(BYTE);
+
+ for (i=0; i< *count; i++)
+ {
+ RegNum[i] = RegAddr[i];
+ status += MXL_RegRead(Tuner, RegNum[i], &RegVal[i]);
+ }
+
+ return status;
+
+}
+
+WORD MXL_GetCHRegister_ZeroIF(Tuner_struct *Tuner, BYTE * RegNum, BYTE *RegVal, int *count)
+{
+ WORD status = 0;
+ int i;
+
+ BYTE RegAddr[] = {43, 136};
+
+ *count = sizeof(RegAddr) / sizeof(BYTE);
+
+ for (i=0; i<*count; i++)
+ {
+ RegNum[i] = RegAddr[i];
+ status += MXL_RegRead(Tuner, RegNum[i], &RegVal[i]);
+ }
+ return status;
+
+}
+
+WORD MXL_GetCHRegister_LowIF(Tuner_struct *Tuner, BYTE * RegNum, BYTE *RegVal, int *count)
+{
+ WORD status = 0;
+ int i;
+
+ BYTE RegAddr[] = {138};
+
+ *count = sizeof(RegAddr) / sizeof(BYTE);
+
+ for (i=0; i<*count; i++)
+ {
+ RegNum[i] = RegAddr[i];
+ status += MXL_RegRead(Tuner, RegNum[i], &RegVal[i]);
+ }
+ return status;
+
+}
+
+WORD MXL_GetMasterControl(BYTE *MasterReg, int state)
+{
+ if (state == 1) /** Load_Start */
+ *MasterReg = 0xF3;
+ if (state == 2) /** Power_Down */
+ *MasterReg = 0x41;
+ if (state == 3) /** Synth_Reset */
+ *MasterReg = 0xB1;
+ if (state == 4) /** Seq_Off */
+ *MasterReg = 0xF1;
+
+ return 0;
+}
+
+#ifdef _MXL_PRODUCTION
+WORD MXL_VCORange_Test(Tuner_struct *Tuner, int VCO_Range)
+{
+ WORD status = 0;
+
+ if (VCO_Range == 1) {
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_DIV, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_OUTMUX, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_DIVM, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_DIVM, 1 );
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_OUT, 1 );
+ status += MXL_ControlWrite(Tuner, RFSYN_RF_DIV_BIAS, 1 );
+ status += MXL_ControlWrite(Tuner, DN_SEL_FREQ, 0 );
+ if (Tuner->Mode == 0 && Tuner->IF_Mode == 1) /* Analog Low IF Mode */
+ {
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 1 );
+ status += MXL_ControlWrite(Tuner, RFSYN_VCO_BIAS, 8 );
+ status += MXL_ControlWrite(Tuner, CHCAL_INT_MOD_RF, 56 );
+ status += MXL_ControlWrite(Tuner, CHCAL_FRAC_MOD_RF, 180224 );
+ }
+ if (Tuner->Mode == 0 && Tuner->IF_Mode == 0) /* Analog Zero IF Mode */
+ {
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 1 );
+ status += MXL_ControlWrite(Tuner, RFSYN_VCO_BIAS, 8 );
+ status += MXL_ControlWrite(Tuner, CHCAL_INT_MOD_RF, 56 );
+ status += MXL_ControlWrite(Tuner, CHCAL_FRAC_MOD_RF, 222822 );
+ }
+ if (Tuner->Mode == 1) /* Digital Mode */
+ {
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 1 );
+ status += MXL_ControlWrite(Tuner, RFSYN_VCO_BIAS, 8 );
+ status += MXL_ControlWrite(Tuner, CHCAL_INT_MOD_RF, 56 );
+ status += MXL_ControlWrite(Tuner, CHCAL_FRAC_MOD_RF, 229376 );
+ }
+ }
+
+ if (VCO_Range == 2) {
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_DIV, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_OUTMUX, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_DIVM, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_DIVM, 1 );
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_OUT, 1 );
+ status += MXL_ControlWrite(Tuner, RFSYN_RF_DIV_BIAS, 1 );
+ status += MXL_ControlWrite(Tuner, DN_SEL_FREQ, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 1 );
+ status += MXL_ControlWrite(Tuner, RFSYN_VCO_BIAS, 40 );
+ status += MXL_ControlWrite(Tuner, CHCAL_INT_MOD_RF, 41 );
+ if (Tuner->Mode == 0 && Tuner->IF_Mode == 1) /* Analog Low IF Mode */
+ {
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 1 );
+ status += MXL_ControlWrite(Tuner, RFSYN_VCO_BIAS, 40 );
+ status += MXL_ControlWrite(Tuner, CHCAL_INT_MOD_RF, 42 );
+ status += MXL_ControlWrite(Tuner, CHCAL_FRAC_MOD_RF, 206438 );
+ }
+ if (Tuner->Mode == 0 && Tuner->IF_Mode == 0) /* Analog Zero IF Mode */
+ {
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 1 );
+ status += MXL_ControlWrite(Tuner, RFSYN_VCO_BIAS, 40 );
+ status += MXL_ControlWrite(Tuner, CHCAL_INT_MOD_RF, 42 );
+ status += MXL_ControlWrite(Tuner, CHCAL_FRAC_MOD_RF, 206438 );
+ }
+ if (Tuner->Mode == 1) /* Digital Mode */
+ {
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 1 );
+ status += MXL_ControlWrite(Tuner, RFSYN_VCO_BIAS, 40 );
+ status += MXL_ControlWrite(Tuner, CHCAL_INT_MOD_RF, 41 );
+ status += MXL_ControlWrite(Tuner, CHCAL_FRAC_MOD_RF, 16384 );
+ }
+ }
+
+ if (VCO_Range == 3) {
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_DIV, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_OUTMUX, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_DIVM, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_DIVM, 1 );
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_OUT, 1 );
+ status += MXL_ControlWrite(Tuner, RFSYN_RF_DIV_BIAS, 1 );
+ status += MXL_ControlWrite(Tuner, DN_SEL_FREQ, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_VCO_BIAS, 8 );
+ status += MXL_ControlWrite(Tuner, CHCAL_INT_MOD_RF, 42 );
+ if (Tuner->Mode == 0 && Tuner->IF_Mode == 1) /* Analog Low IF Mode */
+ {
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_VCO_BIAS, 8 );
+ status += MXL_ControlWrite(Tuner, CHCAL_INT_MOD_RF, 44 );
+ status += MXL_ControlWrite(Tuner, CHCAL_FRAC_MOD_RF, 173670 );
+ }
+ if (Tuner->Mode == 0 && Tuner->IF_Mode == 0) /* Analog Zero IF Mode */
+ {
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_VCO_BIAS, 8 );
+ status += MXL_ControlWrite(Tuner, CHCAL_INT_MOD_RF, 44 );
+ status += MXL_ControlWrite(Tuner, CHCAL_FRAC_MOD_RF, 173670 );
+ }
+ if (Tuner->Mode == 1) /* Digital Mode */
+ {
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_VCO_BIAS, 8 );
+ status += MXL_ControlWrite(Tuner, CHCAL_INT_MOD_RF, 42 );
+ status += MXL_ControlWrite(Tuner, CHCAL_FRAC_MOD_RF, 245760 );
+ }
+ }
+
+ if (VCO_Range == 4) {
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_DIV, 1);
+ status += MXL_ControlWrite(Tuner, RFSYN_EN_OUTMUX, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_DIVM, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_DIVM, 1 );
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_OUT, 1 );
+ status += MXL_ControlWrite(Tuner, RFSYN_RF_DIV_BIAS, 1 );
+ status += MXL_ControlWrite(Tuner, DN_SEL_FREQ, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_VCO_BIAS, 40 );
+ status += MXL_ControlWrite(Tuner, CHCAL_INT_MOD_RF, 27 );
+ if (Tuner->Mode == 0 && Tuner->IF_Mode == 1) /* Analog Low IF Mode */
+ {
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_VCO_BIAS, 40 );
+ status += MXL_ControlWrite(Tuner, CHCAL_INT_MOD_RF, 27 );
+ status += MXL_ControlWrite(Tuner, CHCAL_FRAC_MOD_RF, 206438 );
+ }
+ if (Tuner->Mode == 0 && Tuner->IF_Mode == 0) /* Analog Zero IF Mode */
+ {
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_VCO_BIAS, 40 );
+ status += MXL_ControlWrite(Tuner, CHCAL_INT_MOD_RF, 27 );
+ status += MXL_ControlWrite(Tuner, CHCAL_FRAC_MOD_RF, 206438 );
+ }
+ if (Tuner->Mode == 1) /* Digital Mode */
+ {
+ status += MXL_ControlWrite(Tuner, RFSYN_SEL_VCO_HI, 0 );
+ status += MXL_ControlWrite(Tuner, RFSYN_VCO_BIAS, 40 );
+ status += MXL_ControlWrite(Tuner, CHCAL_INT_MOD_RF, 27 );
+ status += MXL_ControlWrite(Tuner, CHCAL_FRAC_MOD_RF, 212992 );
+ }
+ }
+
+ return status;
+}
+
+WORD MXL_Hystersis_Test(Tuner_struct *Tuner, int Hystersis)
+{
+ WORD status = 0;
+
+ if (Hystersis == 1)
+ status += MXL_ControlWrite(Tuner, DN_BYPASS_AGC_I2C, 1);
+
+ return status;
+}
+#endif
diff --git a/api/MXL5005.h b/api/MXL5005.h
new file mode 100644
index 0000000..7594e6f
--- /dev/null
+++ b/api/MXL5005.h
@@ -0,0 +1,68 @@
+/**
+ * MXL5005.h : main header file for the MXL5005 DLL
+ */
+#pragma once
+
+#include "Common.h"
+#ifdef _MXL_INTERNAL
+#include "Common_MXL.h"
+#endif
+
+void InitTunerControls( Tuner_struct *Tuner) ;
+
+WORD MXL_BlockInit( Tuner_struct *Tuner ) ;
+
+WORD MXL5005_RegisterInit (Tuner_struct * Tuner) ;
+WORD MXL5005_ControlInit (Tuner_struct *Tuner) ;
+
+#ifdef _MXL_INTERNAL
+ WORD MXL5005_MXLControlInit(Tuner_struct *Tuner) ;
+#endif
+
+WORD MXL5005_TunerConfig(Tuner_struct *Tuner,
+ BYTE Mode, /* 0: Analog Mode ; 1: Digital Mode */
+ BYTE IF_mode, /* for Analog Mode, 0: zero IF; 1: low IF */
+ DWORD Bandwidth, /* filter channel bandwidth (6, 7, 8) */
+ DWORD IF_out, /* Desired IF Out Frequency */
+ DWORD Fxtal, /* XTAL Frequency */
+ BYTE AGC_Mode, /* AGC Mode - Dual AGC: 0, Single AGC: 1 */
+ WORD TOP, /* 0: Dual AGC; Value: take over point */
+ WORD IF_OUT_LOAD,/* IF Out Load Resistor (200 / 300 Ohms) */
+ BYTE CLOCK_OUT, /* 0: turn off clock out; 1: turn on clock out */
+ BYTE DIV_OUT, /* 4MHz or 16MHz */
+ BYTE CAPSELECT, /* 0: disable On-Chip pulling cap; 1: enable */
+ BYTE EN_RSSI, /* 0: disable RSSI; 1: enable RSSI */
+ BYTE Mod_Type, /** Modulation Type; */
+ /** 0 - Default; 1 - DVB-T; 2 - ATSC; 3 - QAM; 4 - Analog Cable */
+ BYTE TF_Type /** Tracking Filter Type */
+ /** 0 - Default; 1 - Off; 2 - Type C; 3 - Type C-H */
+ ) ;
+
+void MXL_SynthIFLO_Calc(Tuner_struct *Tuner) ;
+void MXL_SynthRFTGLO_Calc(Tuner_struct *Tuner) ;
+WORD MXL_RegWrite(Tuner_struct *Tuner, BYTE RegNum, BYTE RegVal) ;
+WORD MXL_RegRead(Tuner_struct *Tuner, BYTE RegNum, BYTE *RegVal) ;
+WORD MXL_ControlWrite(Tuner_struct *Tuner, WORD ControlNum, DWORD value) ;
+WORD MXL_ControlWrite_Group(Tuner_struct *Tuner, WORD ControlNum, DWORD value, WORD controlGroup) ;
+WORD MXL_ControlRead(Tuner_struct *Tuner, WORD ControlNum, DWORD * value) ;
+WORD MXL_ControlRegRead(Tuner_struct *Tuner, WORD ControlNum, BYTE *RegNum, int * count) ;
+void MXL_RegWriteBit(Tuner_struct *Tuner, BYTE address, BYTE bit, BYTE bitVal);
+WORD MXL_IFSynthInit( Tuner_struct * Tuner ) ;
+WORD MXL_TuneRF(Tuner_struct *Tuner, DWORD RF_Freq) ;
+WORD MXL_OverwriteICDefault( Tuner_struct *Tuner) ;
+WORD MXL_SetGPIO(Tuner_struct *Tuner, BYTE GPIO_Num, BYTE GPIO_Val) ;
+DWORD MXL_Ceiling( DWORD value, DWORD resolution ) ;
+DWORD MXL_GetXtalInt(DWORD Xtal_Freq) ;
+
+WORD MXL_GetInitRegister(Tuner_struct *Tuner, BYTE * RegNum, BYTE *RegVal, int *count) ;
+WORD MXL_GetCHRegister(Tuner_struct *Tuner, BYTE * RegNum, BYTE *RegVal, int *count) ;
+WORD MXL_GetCHRegister_ZeroIF(Tuner_struct *Tuner, BYTE * RegNum, BYTE *RegVal, int *count) ;
+WORD MXL_GetCHRegister_LowIF(Tuner_struct *Tuner, BYTE * RegNum, BYTE *RegVal, int *count) ;
+WORD MXL_GetMasterControl(BYTE *MasterReg, int state) ;
+
+#ifdef _MXL_PRODUCTION
+WORD MXL_VCORange_Test(Tuner_struct *Tuner, int VCO_Range) ;
+WORD MXL_Hystersis_Test(Tuner_struct *Tuner, int Hystersis) ;
+#endif
+
+
diff --git a/api/MXL5005_Initialize.c b/api/MXL5005_Initialize.c
new file mode 100644
index 0000000..2239c0d
--- /dev/null
+++ b/api/MXL5005_Initialize.c
@@ -0,0 +1,1259 @@
+#include "MXL5005.h"
+
+WORD MXL5005_RegisterInit (Tuner_struct * Tuner)
+{
+ Tuner->TunerRegs_Num = TUNER_REGS_NUM ;
+
+ Tuner->TunerRegs[0].Reg_Num = 9 ;
+ Tuner->TunerRegs[0].Reg_Val = 0x40 ;
+
+ Tuner->TunerRegs[1].Reg_Num = 11 ;
+ Tuner->TunerRegs[1].Reg_Val = 0x19 ;
+
+ Tuner->TunerRegs[2].Reg_Num = 12 ;
+ Tuner->TunerRegs[2].Reg_Val = 0x60 ;
+
+ Tuner->TunerRegs[3].Reg_Num = 13 ;
+ Tuner->TunerRegs[3].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[4].Reg_Num = 14 ;
+ Tuner->TunerRegs[4].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[5].Reg_Num = 15 ;
+ Tuner->TunerRegs[5].Reg_Val = 0xC0 ;
+
+ Tuner->TunerRegs[6].Reg_Num = 16 ;
+ Tuner->TunerRegs[6].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[7].Reg_Num = 17 ;
+ Tuner->TunerRegs[7].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[8].Reg_Num = 18 ;
+ Tuner->TunerRegs[8].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[9].Reg_Num = 19 ;
+ Tuner->TunerRegs[9].Reg_Val = 0x34 ;
+
+ Tuner->TunerRegs[10].Reg_Num = 21 ;
+ Tuner->TunerRegs[10].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[11].Reg_Num = 22 ;
+ Tuner->TunerRegs[11].Reg_Val = 0x6B ;
+
+ Tuner->TunerRegs[12].Reg_Num = 23 ;
+ Tuner->TunerRegs[12].Reg_Val = 0x35 ;
+
+ Tuner->TunerRegs[13].Reg_Num = 24 ;
+ Tuner->TunerRegs[13].Reg_Val = 0x70 ;
+
+ Tuner->TunerRegs[14].Reg_Num = 25 ;
+ Tuner->TunerRegs[14].Reg_Val = 0x3E ;
+
+ Tuner->TunerRegs[15].Reg_Num = 26 ;
+ Tuner->TunerRegs[15].Reg_Val = 0x82 ;
+
+ Tuner->TunerRegs[16].Reg_Num = 31 ;
+ Tuner->TunerRegs[16].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[17].Reg_Num = 32 ;
+ Tuner->TunerRegs[17].Reg_Val = 0x40 ;
+
+ Tuner->TunerRegs[18].Reg_Num = 33 ;
+ Tuner->TunerRegs[18].Reg_Val = 0x53 ;
+
+ Tuner->TunerRegs[19].Reg_Num = 34 ;
+ Tuner->TunerRegs[19].Reg_Val = 0x81 ;
+
+ Tuner->TunerRegs[20].Reg_Num = 35 ;
+ Tuner->TunerRegs[20].Reg_Val = 0xC9 ;
+
+ Tuner->TunerRegs[21].Reg_Num = 36 ;
+ Tuner->TunerRegs[21].Reg_Val = 0x01 ;
+
+ Tuner->TunerRegs[22].Reg_Num = 37 ;
+ Tuner->TunerRegs[22].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[23].Reg_Num = 41 ;
+ Tuner->TunerRegs[23].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[24].Reg_Num = 42 ;
+ Tuner->TunerRegs[24].Reg_Val = 0xF8 ;
+
+ Tuner->TunerRegs[25].Reg_Num = 43 ;
+ Tuner->TunerRegs[25].Reg_Val = 0x43 ;
+
+ Tuner->TunerRegs[26].Reg_Num = 44 ;
+ Tuner->TunerRegs[26].Reg_Val = 0x20 ;
+
+ Tuner->TunerRegs[27].Reg_Num = 45 ;
+ Tuner->TunerRegs[27].Reg_Val = 0x80 ;
+
+ Tuner->TunerRegs[28].Reg_Num = 46 ;
+ Tuner->TunerRegs[28].Reg_Val = 0x88 ;
+
+ Tuner->TunerRegs[29].Reg_Num = 47 ;
+ Tuner->TunerRegs[29].Reg_Val = 0x86 ;
+
+ Tuner->TunerRegs[30].Reg_Num = 48 ;
+ Tuner->TunerRegs[30].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[31].Reg_Num = 49 ;
+ Tuner->TunerRegs[31].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[32].Reg_Num = 53 ;
+ Tuner->TunerRegs[32].Reg_Val = 0x94 ;
+
+ Tuner->TunerRegs[33].Reg_Num = 54 ;
+ Tuner->TunerRegs[33].Reg_Val = 0xFA ;
+
+ Tuner->TunerRegs[34].Reg_Num = 55 ;
+ Tuner->TunerRegs[34].Reg_Val = 0x92 ;
+
+ Tuner->TunerRegs[35].Reg_Num = 56 ;
+ Tuner->TunerRegs[35].Reg_Val = 0x80 ;
+
+ Tuner->TunerRegs[36].Reg_Num = 57 ;
+ Tuner->TunerRegs[36].Reg_Val = 0x41 ;
+
+ Tuner->TunerRegs[37].Reg_Num = 58 ;
+ Tuner->TunerRegs[37].Reg_Val = 0xDB ;
+
+ Tuner->TunerRegs[38].Reg_Num = 59 ;
+ Tuner->TunerRegs[38].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[39].Reg_Num = 60 ;
+ Tuner->TunerRegs[39].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[40].Reg_Num = 61 ;
+ Tuner->TunerRegs[40].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[41].Reg_Num = 62 ;
+ Tuner->TunerRegs[41].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[42].Reg_Num = 65 ;
+ Tuner->TunerRegs[42].Reg_Val = 0xF8 ;
+
+ Tuner->TunerRegs[43].Reg_Num = 66 ;
+ Tuner->TunerRegs[43].Reg_Val = 0xE4 ;
+
+ Tuner->TunerRegs[44].Reg_Num = 67 ;
+ Tuner->TunerRegs[44].Reg_Val = 0x90 ;
+
+ Tuner->TunerRegs[45].Reg_Num = 68 ;
+ Tuner->TunerRegs[45].Reg_Val = 0xC0 ;
+
+ Tuner->TunerRegs[46].Reg_Num = 69 ;
+ Tuner->TunerRegs[46].Reg_Val = 0x01 ;
+
+ Tuner->TunerRegs[47].Reg_Num = 70 ;
+ Tuner->TunerRegs[47].Reg_Val = 0x50 ;
+
+ Tuner->TunerRegs[48].Reg_Num = 71 ;
+ Tuner->TunerRegs[48].Reg_Val = 0x06 ;
+
+ Tuner->TunerRegs[49].Reg_Num = 72 ;
+ Tuner->TunerRegs[49].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[50].Reg_Num = 73 ;
+ Tuner->TunerRegs[50].Reg_Val = 0x20 ;
+
+ Tuner->TunerRegs[51].Reg_Num = 76 ;
+ Tuner->TunerRegs[51].Reg_Val = 0xBB ;
+
+ Tuner->TunerRegs[52].Reg_Num = 77 ;
+ Tuner->TunerRegs[52].Reg_Val = 0x13 ;
+
+ Tuner->TunerRegs[53].Reg_Num = 81 ;
+ Tuner->TunerRegs[53].Reg_Val = 0x04 ;
+
+ Tuner->TunerRegs[54].Reg_Num = 82 ;
+ Tuner->TunerRegs[54].Reg_Val = 0x75 ;
+
+ Tuner->TunerRegs[55].Reg_Num = 83 ;
+ Tuner->TunerRegs[55].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[56].Reg_Num = 84 ;
+ Tuner->TunerRegs[56].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[57].Reg_Num = 85 ;
+ Tuner->TunerRegs[57].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[58].Reg_Num = 91 ;
+ Tuner->TunerRegs[58].Reg_Val = 0x70 ;
+
+ Tuner->TunerRegs[59].Reg_Num = 92 ;
+ Tuner->TunerRegs[59].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[60].Reg_Num = 93 ;
+ Tuner->TunerRegs[60].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[61].Reg_Num = 94 ;
+ Tuner->TunerRegs[61].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[62].Reg_Num = 95 ;
+ Tuner->TunerRegs[62].Reg_Val = 0x0C ;
+
+ Tuner->TunerRegs[63].Reg_Num = 96 ;
+ Tuner->TunerRegs[63].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[64].Reg_Num = 97 ;
+ Tuner->TunerRegs[64].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[65].Reg_Num = 98 ;
+ Tuner->TunerRegs[65].Reg_Val = 0xE2 ;
+
+ Tuner->TunerRegs[66].Reg_Num = 99 ;
+ Tuner->TunerRegs[66].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[67].Reg_Num = 100 ;
+ Tuner->TunerRegs[67].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[68].Reg_Num = 101 ;
+ Tuner->TunerRegs[68].Reg_Val = 0x12 ;
+
+ Tuner->TunerRegs[69].Reg_Num = 102 ;
+ Tuner->TunerRegs[69].Reg_Val = 0x80 ;
+
+ Tuner->TunerRegs[70].Reg_Num = 103 ;
+ Tuner->TunerRegs[70].Reg_Val = 0x32 ;
+
+ Tuner->TunerRegs[71].Reg_Num = 104 ;
+ Tuner->TunerRegs[71].Reg_Val = 0xB4 ;
+
+ Tuner->TunerRegs[72].Reg_Num = 105 ;
+ Tuner->TunerRegs[72].Reg_Val = 0x60 ;
+
+ Tuner->TunerRegs[73].Reg_Num = 106 ;
+ Tuner->TunerRegs[73].Reg_Val = 0x83 ;
+
+ Tuner->TunerRegs[74].Reg_Num = 107 ;
+ Tuner->TunerRegs[74].Reg_Val = 0x84 ;
+
+ Tuner->TunerRegs[75].Reg_Num = 108 ;
+ Tuner->TunerRegs[75].Reg_Val = 0x9C ;
+
+ Tuner->TunerRegs[76].Reg_Num = 109 ;
+ Tuner->TunerRegs[76].Reg_Val = 0x02 ;
+
+ Tuner->TunerRegs[77].Reg_Num = 110 ;
+ Tuner->TunerRegs[77].Reg_Val = 0x81 ;
+
+ Tuner->TunerRegs[78].Reg_Num = 111 ;
+ Tuner->TunerRegs[78].Reg_Val = 0xC0 ;
+
+ Tuner->TunerRegs[79].Reg_Num = 112 ;
+ Tuner->TunerRegs[79].Reg_Val = 0x10 ;
+
+ Tuner->TunerRegs[80].Reg_Num = 131 ;
+ Tuner->TunerRegs[80].Reg_Val = 0x8A ;
+
+ Tuner->TunerRegs[81].Reg_Num = 132 ;
+ Tuner->TunerRegs[81].Reg_Val = 0x10 ;
+
+ Tuner->TunerRegs[82].Reg_Num = 133 ;
+ Tuner->TunerRegs[82].Reg_Val = 0x24 ;
+
+ Tuner->TunerRegs[83].Reg_Num = 134 ;
+ Tuner->TunerRegs[83].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[84].Reg_Num = 135 ;
+ Tuner->TunerRegs[84].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[85].Reg_Num = 136 ;
+ Tuner->TunerRegs[85].Reg_Val = 0x7E ;
+
+ Tuner->TunerRegs[86].Reg_Num = 137 ;
+ Tuner->TunerRegs[86].Reg_Val = 0x40 ;
+
+ Tuner->TunerRegs[87].Reg_Num = 138 ;
+ Tuner->TunerRegs[87].Reg_Val = 0x38 ;
+
+ Tuner->TunerRegs[88].Reg_Num = 146 ;
+ Tuner->TunerRegs[88].Reg_Val = 0xF6 ;
+
+ Tuner->TunerRegs[89].Reg_Num = 147 ;
+ Tuner->TunerRegs[89].Reg_Val = 0x1A ;
+
+ Tuner->TunerRegs[90].Reg_Num = 148 ;
+ Tuner->TunerRegs[90].Reg_Val = 0x62 ;
+
+ Tuner->TunerRegs[91].Reg_Num = 149 ;
+ Tuner->TunerRegs[91].Reg_Val = 0x33 ;
+
+ Tuner->TunerRegs[92].Reg_Num = 150 ;
+ Tuner->TunerRegs[92].Reg_Val = 0x80 ;
+
+ Tuner->TunerRegs[93].Reg_Num = 156 ;
+ Tuner->TunerRegs[93].Reg_Val = 0x56 ;
+
+ Tuner->TunerRegs[94].Reg_Num = 157 ;
+ Tuner->TunerRegs[94].Reg_Val = 0x17 ;
+
+ Tuner->TunerRegs[95].Reg_Num = 158 ;
+ Tuner->TunerRegs[95].Reg_Val = 0xA9 ;
+
+ Tuner->TunerRegs[96].Reg_Num = 159 ;
+ Tuner->TunerRegs[96].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[97].Reg_Num = 160 ;
+ Tuner->TunerRegs[97].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[98].Reg_Num = 161 ;
+ Tuner->TunerRegs[98].Reg_Val = 0x00 ;
+
+ Tuner->TunerRegs[99].Reg_Num = 162 ;
+ Tuner->TunerRegs[99].Reg_Val = 0x40 ;
+
+ Tuner->TunerRegs[100].Reg_Num = 166 ;
+ Tuner->TunerRegs[100].Reg_Val = 0xAE ;
+
+ Tuner->TunerRegs[101].Reg_Num = 167 ;
+ Tuner->TunerRegs[101].Reg_Val = 0x03 ;
+
+ Tuner->TunerRegs[102].Reg_Num = 168 ;
+ Tuner->TunerRegs[102].Reg_Val = 0xF2 ;
+
+ Tuner->TunerRegs[103].Reg_Num = 195 ;
+ Tuner->TunerRegs[103].Reg_Val = 0x00 ;
+
+ return 0 ;
+}
+
+WORD MXL5005_ControlInit (Tuner_struct *Tuner)
+{
+ Tuner->Init_Ctrl_Num = INITCTRL_NUM ;
+
+ Tuner->Init_Ctrl[0].Ctrl_Num = DN_IQTN_AMP_CUT ;
+ Tuner->Init_Ctrl[0].size = 1 ;
+ Tuner->Init_Ctrl[0].addr[0] = 73;
+ Tuner->Init_Ctrl[0].bit[0] = 7;
+ Tuner->Init_Ctrl[0].val[0] = 0;
+
+ Tuner->Init_Ctrl[1].Ctrl_Num = BB_MODE ;
+ Tuner->Init_Ctrl[1].size = 1 ;
+ Tuner->Init_Ctrl[1].addr[0] = 53;
+ Tuner->Init_Ctrl[1].bit[0] = 2;
+ Tuner->Init_Ctrl[1].val[0] = 1;
+
+ Tuner->Init_Ctrl[2].Ctrl_Num = BB_BUF ;
+ Tuner->Init_Ctrl[2].size = 2 ;
+ Tuner->Init_Ctrl[2].addr[0] = 53;
+ Tuner->Init_Ctrl[2].bit[0] = 1;
+ Tuner->Init_Ctrl[2].val[0] = 0;
+ Tuner->Init_Ctrl[2].addr[1] = 57;
+ Tuner->Init_Ctrl[2].bit[1] = 0;
+ Tuner->Init_Ctrl[2].val[1] = 1;
+
+ Tuner->Init_Ctrl[3].Ctrl_Num = BB_BUF_OA ;
+ Tuner->Init_Ctrl[3].size = 1 ;
+ Tuner->Init_Ctrl[3].addr[0] = 53;
+ Tuner->Init_Ctrl[3].bit[0] = 0;
+ Tuner->Init_Ctrl[3].val[0] = 0;
+
+ Tuner->Init_Ctrl[4].Ctrl_Num = BB_ALPF_BANDSELECT ;
+ Tuner->Init_Ctrl[4].size = 3 ;
+ Tuner->Init_Ctrl[4].addr[0] = 53;
+ Tuner->Init_Ctrl[4].bit[0] = 5;
+ Tuner->Init_Ctrl[4].val[0] = 0;
+ Tuner->Init_Ctrl[4].addr[1] = 53;
+ Tuner->Init_Ctrl[4].bit[1] = 6;
+ Tuner->Init_Ctrl[4].val[1] = 0;
+ Tuner->Init_Ctrl[4].addr[2] = 53;
+ Tuner->Init_Ctrl[4].bit[2] = 7;
+ Tuner->Init_Ctrl[4].val[2] = 1;
+
+ Tuner->Init_Ctrl[5].Ctrl_Num = BB_IQSWAP ;
+ Tuner->Init_Ctrl[5].size = 1 ;
+ Tuner->Init_Ctrl[5].addr[0] = 59;
+ Tuner->Init_Ctrl[5].bit[0] = 0;
+ Tuner->Init_Ctrl[5].val[0] = 0;
+
+ Tuner->Init_Ctrl[6].Ctrl_Num = BB_DLPF_BANDSEL ;
+ Tuner->Init_Ctrl[6].size = 2 ;
+ Tuner->Init_Ctrl[6].addr[0] = 53;
+ Tuner->Init_Ctrl[6].bit[0] = 3;
+ Tuner->Init_Ctrl[6].val[0] = 0;
+ Tuner->Init_Ctrl[6].addr[1] = 53;
+ Tuner->Init_Ctrl[6].bit[1] = 4;
+ Tuner->Init_Ctrl[6].val[1] = 1;
+
+ Tuner->Init_Ctrl[7].Ctrl_Num = RFSYN_CHP_GAIN ;
+ Tuner->Init_Ctrl[7].size = 4 ;
+ Tuner->Init_Ctrl[7].addr[0] = 22;
+ Tuner->Init_Ctrl[7].bit[0] = 4;
+ Tuner->Init_Ctrl[7].val[0] = 0;
+ Tuner->Init_Ctrl[7].addr[1] = 22;
+ Tuner->Init_Ctrl[7].bit[1] = 5;
+ Tuner->Init_Ctrl[7].val[1] = 1;
+ Tuner->Init_Ctrl[7].addr[2] = 22;
+ Tuner->Init_Ctrl[7].bit[2] = 6;
+ Tuner->Init_Ctrl[7].val[2] = 1;
+ Tuner->Init_Ctrl[7].addr[3] = 22;
+ Tuner->Init_Ctrl[7].bit[3] = 7;
+ Tuner->Init_Ctrl[7].val[3] = 0;
+
+ Tuner->Init_Ctrl[8].Ctrl_Num = RFSYN_EN_CHP_HIGAIN ;
+ Tuner->Init_Ctrl[8].size = 1 ;
+ Tuner->Init_Ctrl[8].addr[0] = 22;
+ Tuner->Init_Ctrl[8].bit[0] = 2;
+ Tuner->Init_Ctrl[8].val[0] = 0;
+
+ Tuner->Init_Ctrl[9].Ctrl_Num = AGC_IF ;
+ Tuner->Init_Ctrl[9].size = 4 ;
+ Tuner->Init_Ctrl[9].addr[0] = 76;
+ Tuner->Init_Ctrl[9].bit[0] = 0;
+ Tuner->Init_Ctrl[9].val[0] = 1;
+ Tuner->Init_Ctrl[9].addr[1] = 76;
+ Tuner->Init_Ctrl[9].bit[1] = 1;
+ Tuner->Init_Ctrl[9].val[1] = 1;
+ Tuner->Init_Ctrl[9].addr[2] = 76;
+ Tuner->Init_Ctrl[9].bit[2] = 2;
+ Tuner->Init_Ctrl[9].val[2] = 0;
+ Tuner->Init_Ctrl[9].addr[3] = 76;
+ Tuner->Init_Ctrl[9].bit[3] = 3;
+ Tuner->Init_Ctrl[9].val[3] = 1;
+
+ Tuner->Init_Ctrl[10].Ctrl_Num = AGC_RF ;
+ Tuner->Init_Ctrl[10].size = 4 ;
+ Tuner->Init_Ctrl[10].addr[0] = 76;
+ Tuner->Init_Ctrl[10].bit[0] = 4;
+ Tuner->Init_Ctrl[10].val[0] = 1;
+ Tuner->Init_Ctrl[10].addr[1] = 76;
+ Tuner->Init_Ctrl[10].bit[1] = 5;
+ Tuner->Init_Ctrl[10].val[1] = 1;
+ Tuner->Init_Ctrl[10].addr[2] = 76;
+ Tuner->Init_Ctrl[10].bit[2] = 6;
+ Tuner->Init_Ctrl[10].val[2] = 0;
+ Tuner->Init_Ctrl[10].addr[3] = 76;
+ Tuner->Init_Ctrl[10].bit[3] = 7;
+ Tuner->Init_Ctrl[10].val[3] = 1;
+
+ Tuner->Init_Ctrl[11].Ctrl_Num = IF_DIVVAL ;
+ Tuner->Init_Ctrl[11].size = 5 ;
+ Tuner->Init_Ctrl[11].addr[0] = 43;
+ Tuner->Init_Ctrl[11].bit[0] = 3;
+ Tuner->Init_Ctrl[11].val[0] = 0;
+ Tuner->Init_Ctrl[11].addr[1] = 43;
+ Tuner->Init_Ctrl[11].bit[1] = 4;
+ Tuner->Init_Ctrl[11].val[1] = 0;
+ Tuner->Init_Ctrl[11].addr[2] = 43;
+ Tuner->Init_Ctrl[11].bit[2] = 5;
+ Tuner->Init_Ctrl[11].val[2] = 0;
+ Tuner->Init_Ctrl[11].addr[3] = 43;
+ Tuner->Init_Ctrl[11].bit[3] = 6;
+ Tuner->Init_Ctrl[11].val[3] = 1;
+ Tuner->Init_Ctrl[11].addr[4] = 43;
+ Tuner->Init_Ctrl[11].bit[4] = 7;
+ Tuner->Init_Ctrl[11].val[4] = 0;
+
+ Tuner->Init_Ctrl[12].Ctrl_Num = IF_VCO_BIAS ;
+ Tuner->Init_Ctrl[12].size = 6 ;
+ Tuner->Init_Ctrl[12].addr[0] = 44;
+ Tuner->Init_Ctrl[12].bit[0] = 2;
+ Tuner->Init_Ctrl[12].val[0] = 0;
+ Tuner->Init_Ctrl[12].addr[1] = 44;
+ Tuner->Init_Ctrl[12].bit[1] = 3;
+ Tuner->Init_Ctrl[12].val[1] = 0;
+ Tuner->Init_Ctrl[12].addr[2] = 44;
+ Tuner->Init_Ctrl[12].bit[2] = 4;
+ Tuner->Init_Ctrl[12].val[2] = 0;
+ Tuner->Init_Ctrl[12].addr[3] = 44;
+ Tuner->Init_Ctrl[12].bit[3] = 5;
+ Tuner->Init_Ctrl[12].val[3] = 1;
+ Tuner->Init_Ctrl[12].addr[4] = 44;
+ Tuner->Init_Ctrl[12].bit[4] = 6;
+ Tuner->Init_Ctrl[12].val[4] = 0;
+ Tuner->Init_Ctrl[12].addr[5] = 44;
+ Tuner->Init_Ctrl[12].bit[5] = 7;
+ Tuner->Init_Ctrl[12].val[5] = 0;
+
+ Tuner->Init_Ctrl[13].Ctrl_Num = CHCAL_INT_MOD_IF ;
+ Tuner->Init_Ctrl[13].size = 7 ;
+ Tuner->Init_Ctrl[13].addr[0] = 11;
+ Tuner->Init_Ctrl[13].bit[0] = 0;
+ Tuner->Init_Ctrl[13].val[0] = 1;
+ Tuner->Init_Ctrl[13].addr[1] = 11;
+ Tuner->Init_Ctrl[13].bit[1] = 1;
+ Tuner->Init_Ctrl[13].val[1] = 0;
+ Tuner->Init_Ctrl[13].addr[2] = 11;
+ Tuner->Init_Ctrl[13].bit[2] = 2;
+ Tuner->Init_Ctrl[13].val[2] = 0;
+ Tuner->Init_Ctrl[13].addr[3] = 11;
+ Tuner->Init_Ctrl[13].bit[3] = 3;
+ Tuner->Init_Ctrl[13].val[3] = 1;
+ Tuner->Init_Ctrl[13].addr[4] = 11;
+ Tuner->Init_Ctrl[13].bit[4] = 4;
+ Tuner->Init_Ctrl[13].val[4] = 1;
+ Tuner->Init_Ctrl[13].addr[5] = 11;
+ Tuner->Init_Ctrl[13].bit[5] = 5;
+ Tuner->Init_Ctrl[13].val[5] = 0;
+ Tuner->Init_Ctrl[13].addr[6] = 11;
+ Tuner->Init_Ctrl[13].bit[6] = 6;
+ Tuner->Init_Ctrl[13].val[6] = 0;
+
+ Tuner->Init_Ctrl[14].Ctrl_Num = CHCAL_FRAC_MOD_IF ;
+ Tuner->Init_Ctrl[14].size = 16 ;
+ Tuner->Init_Ctrl[14].addr[0] = 13;
+ Tuner->Init_Ctrl[14].bit[0] = 0;
+ Tuner->Init_Ctrl[14].val[0] = 0;
+ Tuner->Init_Ctrl[14].addr[1] = 13;
+ Tuner->Init_Ctrl[14].bit[1] = 1;
+ Tuner->Init_Ctrl[14].val[1] = 0;
+ Tuner->Init_Ctrl[14].addr[2] = 13;
+ Tuner->Init_Ctrl[14].bit[2] = 2;
+ Tuner->Init_Ctrl[14].val[2] = 0;
+ Tuner->Init_Ctrl[14].addr[3] = 13;
+ Tuner->Init_Ctrl[14].bit[3] = 3;
+ Tuner->Init_Ctrl[14].val[3] = 0;
+ Tuner->Init_Ctrl[14].addr[4] = 13;
+ Tuner->Init_Ctrl[14].bit[4] = 4;
+ Tuner->Init_Ctrl[14].val[4] = 0;
+ Tuner->Init_Ctrl[14].addr[5] = 13;
+ Tuner->Init_Ctrl[14].bit[5] = 5;
+ Tuner->Init_Ctrl[14].val[5] = 0;
+ Tuner->Init_Ctrl[14].addr[6] = 13;
+ Tuner->Init_Ctrl[14].bit[6] = 6;
+ Tuner->Init_Ctrl[14].val[6] = 0;
+ Tuner->Init_Ctrl[14].addr[7] = 13;
+ Tuner->Init_Ctrl[14].bit[7] = 7;
+ Tuner->Init_Ctrl[14].val[7] = 0;
+ Tuner->Init_Ctrl[14].addr[8] = 12;
+ Tuner->Init_Ctrl[14].bit[8] = 0;
+ Tuner->Init_Ctrl[14].val[8] = 0;
+ Tuner->Init_Ctrl[14].addr[9] = 12;
+ Tuner->Init_Ctrl[14].bit[9] = 1;
+ Tuner->Init_Ctrl[14].val[9] = 0;
+ Tuner->Init_Ctrl[14].addr[10] = 12;
+ Tuner->Init_Ctrl[14].bit[10] = 2;
+ Tuner->Init_Ctrl[14].val[10] = 0;
+ Tuner->Init_Ctrl[14].addr[11] = 12;
+ Tuner->Init_Ctrl[14].bit[11] = 3;
+ Tuner->Init_Ctrl[14].val[11] = 0;
+ Tuner->Init_Ctrl[14].addr[12] = 12;
+ Tuner->Init_Ctrl[14].bit[12] = 4;
+ Tuner->Init_Ctrl[14].val[12] = 0;
+ Tuner->Init_Ctrl[14].addr[13] = 12;
+ Tuner->Init_Ctrl[14].bit[13] = 5;
+ Tuner->Init_Ctrl[14].val[13] = 1;
+ Tuner->Init_Ctrl[14].addr[14] = 12;
+ Tuner->Init_Ctrl[14].bit[14] = 6;
+ Tuner->Init_Ctrl[14].val[14] = 1;
+ Tuner->Init_Ctrl[14].addr[15] = 12;
+ Tuner->Init_Ctrl[14].bit[15] = 7;
+ Tuner->Init_Ctrl[14].val[15] = 0;
+
+ Tuner->Init_Ctrl[15].Ctrl_Num = DRV_RES_SEL ;
+ Tuner->Init_Ctrl[15].size = 3 ;
+ Tuner->Init_Ctrl[15].addr[0] = 147;
+ Tuner->Init_Ctrl[15].bit[0] = 2;
+ Tuner->Init_Ctrl[15].val[0] = 0;
+ Tuner->Init_Ctrl[15].addr[1] = 147;
+ Tuner->Init_Ctrl[15].bit[1] = 3;
+ Tuner->Init_Ctrl[15].val[1] = 1;
+ Tuner->Init_Ctrl[15].addr[2] = 147;
+ Tuner->Init_Ctrl[15].bit[2] = 4;
+ Tuner->Init_Ctrl[15].val[2] = 1;
+
+ Tuner->Init_Ctrl[16].Ctrl_Num = I_DRIVER ;
+ Tuner->Init_Ctrl[16].size = 2 ;
+ Tuner->Init_Ctrl[16].addr[0] = 147;
+ Tuner->Init_Ctrl[16].bit[0] = 0;
+ Tuner->Init_Ctrl[16].val[0] = 0;
+ Tuner->Init_Ctrl[16].addr[1] = 147;
+ Tuner->Init_Ctrl[16].bit[1] = 1;
+ Tuner->Init_Ctrl[16].val[1] = 1;
+
+ Tuner->Init_Ctrl[17].Ctrl_Num = EN_AAF ;
+ Tuner->Init_Ctrl[17].size = 1 ;
+ Tuner->Init_Ctrl[17].addr[0] = 147;
+ Tuner->Init_Ctrl[17].bit[0] = 7;
+ Tuner->Init_Ctrl[17].val[0] = 0;
+
+ Tuner->Init_Ctrl[18].Ctrl_Num = EN_3P ;
+ Tuner->Init_Ctrl[18].size = 1 ;
+ Tuner->Init_Ctrl[18].addr[0] = 147;
+ Tuner->Init_Ctrl[18].bit[0] = 6;
+ Tuner->Init_Ctrl[18].val[0] = 0;
+
+ Tuner->Init_Ctrl[19].Ctrl_Num = EN_AUX_3P ;
+ Tuner->Init_Ctrl[19].size = 1 ;
+ Tuner->Init_Ctrl[19].addr[0] = 156;
+ Tuner->Init_Ctrl[19].bit[0] = 0;
+ Tuner->Init_Ctrl[19].val[0] = 0;
+
+ Tuner->Init_Ctrl[20].Ctrl_Num = SEL_AAF_BAND ;
+ Tuner->Init_Ctrl[20].size = 1 ;
+ Tuner->Init_Ctrl[20].addr[0] = 147;
+ Tuner->Init_Ctrl[20].bit[0] = 5;
+ Tuner->Init_Ctrl[20].val[0] = 0;
+
+ Tuner->Init_Ctrl[21].Ctrl_Num = SEQ_ENCLK16_CLK_OUT ;
+ Tuner->Init_Ctrl[21].size = 1 ;
+ Tuner->Init_Ctrl[21].addr[0] = 137;
+ Tuner->Init_Ctrl[21].bit[0] = 4;
+ Tuner->Init_Ctrl[21].val[0] = 0;
+
+ Tuner->Init_Ctrl[22].Ctrl_Num = SEQ_SEL4_16B ;
+ Tuner->Init_Ctrl[22].size = 1 ;
+ Tuner->Init_Ctrl[22].addr[0] = 137;
+ Tuner->Init_Ctrl[22].bit[0] = 7;
+ Tuner->Init_Ctrl[22].val[0] = 0;
+
+ Tuner->Init_Ctrl[23].Ctrl_Num = XTAL_CAPSELECT ;
+ Tuner->Init_Ctrl[23].size = 1 ;
+ Tuner->Init_Ctrl[23].addr[0] = 91;
+ Tuner->Init_Ctrl[23].bit[0] = 5;
+ Tuner->Init_Ctrl[23].val[0] = 1;
+
+ Tuner->Init_Ctrl[24].Ctrl_Num = IF_SEL_DBL ;
+ Tuner->Init_Ctrl[24].size = 1 ;
+ Tuner->Init_Ctrl[24].addr[0] = 43;
+ Tuner->Init_Ctrl[24].bit[0] = 0;
+ Tuner->Init_Ctrl[24].val[0] = 1;
+
+ Tuner->Init_Ctrl[25].Ctrl_Num = RFSYN_R_DIV ;
+ Tuner->Init_Ctrl[25].size = 2 ;
+ Tuner->Init_Ctrl[25].addr[0] = 22;
+ Tuner->Init_Ctrl[25].bit[0] = 0;
+ Tuner->Init_Ctrl[25].val[0] = 1;
+ Tuner->Init_Ctrl[25].addr[1] = 22;
+ Tuner->Init_Ctrl[25].bit[1] = 1;
+ Tuner->Init_Ctrl[25].val[1] = 1;
+
+ Tuner->Init_Ctrl[26].Ctrl_Num = SEQ_EXTSYNTHCALIF ;
+ Tuner->Init_Ctrl[26].size = 1 ;
+ Tuner->Init_Ctrl[26].addr[0] = 134;
+ Tuner->Init_Ctrl[26].bit[0] = 2;
+ Tuner->Init_Ctrl[26].val[0] = 0;
+
+ Tuner->Init_Ctrl[27].Ctrl_Num = SEQ_EXTDCCAL ;
+ Tuner->Init_Ctrl[27].size = 1 ;
+ Tuner->Init_Ctrl[27].addr[0] = 137;
+ Tuner->Init_Ctrl[27].bit[0] = 3;
+ Tuner->Init_Ctrl[27].val[0] = 0;
+
+ Tuner->Init_Ctrl[28].Ctrl_Num = AGC_EN_RSSI ;
+ Tuner->Init_Ctrl[28].size = 1 ;
+ Tuner->Init_Ctrl[28].addr[0] = 77;
+ Tuner->Init_Ctrl[28].bit[0] = 7;
+ Tuner->Init_Ctrl[28].val[0] = 0;
+
+ Tuner->Init_Ctrl[29].Ctrl_Num = RFA_ENCLKRFAGC ;
+ Tuner->Init_Ctrl[29].size = 1 ;
+ Tuner->Init_Ctrl[29].addr[0] = 166;
+ Tuner->Init_Ctrl[29].bit[0] = 7;
+ Tuner->Init_Ctrl[29].val[0] = 1;
+
+ Tuner->Init_Ctrl[30].Ctrl_Num = RFA_RSSI_REFH ;
+ Tuner->Init_Ctrl[30].size = 3 ;
+ Tuner->Init_Ctrl[30].addr[0] = 166;
+ Tuner->Init_Ctrl[30].bit[0] = 0;
+ Tuner->Init_Ctrl[30].val[0] = 0;
+ Tuner->Init_Ctrl[30].addr[1] = 166;
+ Tuner->Init_Ctrl[30].bit[1] = 1;
+ Tuner->Init_Ctrl[30].val[1] = 1;
+ Tuner->Init_Ctrl[30].addr[2] = 166;
+ Tuner->Init_Ctrl[30].bit[2] = 2;
+ Tuner->Init_Ctrl[30].val[2] = 1;
+
+ Tuner->Init_Ctrl[31].Ctrl_Num = RFA_RSSI_REF ;
+ Tuner->Init_Ctrl[31].size = 3 ;
+ Tuner->Init_Ctrl[31].addr[0] = 166;
+ Tuner->Init_Ctrl[31].bit[0] = 3;
+ Tuner->Init_Ctrl[31].val[0] = 1;
+ Tuner->Init_Ctrl[31].addr[1] = 166;
+ Tuner->Init_Ctrl[31].bit[1] = 4;
+ Tuner->Init_Ctrl[31].val[1] = 0;
+ Tuner->Init_Ctrl[31].addr[2] = 166;
+ Tuner->Init_Ctrl[31].bit[2] = 5;
+ Tuner->Init_Ctrl[31].val[2] = 1;
+
+ Tuner->Init_Ctrl[32].Ctrl_Num = RFA_RSSI_REFL ;
+ Tuner->Init_Ctrl[32].size = 3 ;
+ Tuner->Init_Ctrl[32].addr[0] = 167;
+ Tuner->Init_Ctrl[32].bit[0] = 0;
+ Tuner->Init_Ctrl[32].val[0] = 1;
+ Tuner->Init_Ctrl[32].addr[1] = 167;
+ Tuner->Init_Ctrl[32].bit[1] = 1;
+ Tuner->Init_Ctrl[32].val[1] = 1;
+ Tuner->Init_Ctrl[32].addr[2] = 167;
+ Tuner->Init_Ctrl[32].bit[2] = 2;
+ Tuner->Init_Ctrl[32].val[2] = 0;
+
+ Tuner->Init_Ctrl[33].Ctrl_Num = RFA_FLR ;
+ Tuner->Init_Ctrl[33].size = 4 ;
+ Tuner->Init_Ctrl[33].addr[0] = 168;
+ Tuner->Init_Ctrl[33].bit[0] = 0;
+ Tuner->Init_Ctrl[33].val[0] = 0;
+ Tuner->Init_Ctrl[33].addr[1] = 168;
+ Tuner->Init_Ctrl[33].bit[1] = 1;
+ Tuner->Init_Ctrl[33].val[1] = 1;
+ Tuner->Init_Ctrl[33].addr[2] = 168;
+ Tuner->Init_Ctrl[33].bit[2] = 2;
+ Tuner->Init_Ctrl[33].val[2] = 0;
+ Tuner->Init_Ctrl[33].addr[3] = 168;
+ Tuner->Init_Ctrl[33].bit[3] = 3;
+ Tuner->Init_Ctrl[33].val[3] = 0;
+
+ Tuner->Init_Ctrl[34].Ctrl_Num = RFA_CEIL ;
+ Tuner->Init_Ctrl[34].size = 4 ;
+ Tuner->Init_Ctrl[34].addr[0] = 168;
+ Tuner->Init_Ctrl[34].bit[0] = 4;
+ Tuner->Init_Ctrl[34].val[0] = 1;
+ Tuner->Init_Ctrl[34].addr[1] = 168;
+ Tuner->Init_Ctrl[34].bit[1] = 5;
+ Tuner->Init_Ctrl[34].val[1] = 1;
+ Tuner->Init_Ctrl[34].addr[2] = 168;
+ Tuner->Init_Ctrl[34].bit[2] = 6;
+ Tuner->Init_Ctrl[34].val[2] = 1;
+ Tuner->Init_Ctrl[34].addr[3] = 168;
+ Tuner->Init_Ctrl[34].bit[3] = 7;
+ Tuner->Init_Ctrl[34].val[3] = 1;
+
+ Tuner->Init_Ctrl[35].Ctrl_Num = SEQ_EXTIQFSMPULSE ;
+ Tuner->Init_Ctrl[35].size = 1 ;
+ Tuner->Init_Ctrl[35].addr[0] = 135;
+ Tuner->Init_Ctrl[35].bit[0] = 0;
+ Tuner->Init_Ctrl[35].val[0] = 0;
+
+ Tuner->Init_Ctrl[36].Ctrl_Num = OVERRIDE_1 ;
+ Tuner->Init_Ctrl[36].size = 1 ;
+ Tuner->Init_Ctrl[36].addr[0] = 56;
+ Tuner->Init_Ctrl[36].bit[0] = 3;
+ Tuner->Init_Ctrl[36].val[0] = 0;
+
+ Tuner->Init_Ctrl[37].Ctrl_Num = BB_INITSTATE_DLPF_TUNE ;
+ Tuner->Init_Ctrl[37].size = 7 ;
+ Tuner->Init_Ctrl[37].addr[0] = 59;
+ Tuner->Init_Ctrl[37].bit[0] = 1;
+ Tuner->Init_Ctrl[37].val[0] = 0;
+ Tuner->Init_Ctrl[37].addr[1] = 59;
+ Tuner->Init_Ctrl[37].bit[1] = 2;
+ Tuner->Init_Ctrl[37].val[1] = 0;
+ Tuner->Init_Ctrl[37].addr[2] = 59;
+ Tuner->Init_Ctrl[37].bit[2] = 3;
+ Tuner->Init_Ctrl[37].val[2] = 0;
+ Tuner->Init_Ctrl[37].addr[3] = 59;
+ Tuner->Init_Ctrl[37].bit[3] = 4;
+ Tuner->Init_Ctrl[37].val[3] = 0;
+ Tuner->Init_Ctrl[37].addr[4] = 59;
+ Tuner->Init_Ctrl[37].bit[4] = 5;
+ Tuner->Init_Ctrl[37].val[4] = 0;
+ Tuner->Init_Ctrl[37].addr[5] = 59;
+ Tuner->Init_Ctrl[37].bit[5] = 6;
+ Tuner->Init_Ctrl[37].val[5] = 0;
+ Tuner->Init_Ctrl[37].addr[6] = 59;
+ Tuner->Init_Ctrl[37].bit[6] = 7;
+ Tuner->Init_Ctrl[37].val[6] = 0;
+
+ Tuner->Init_Ctrl[38].Ctrl_Num = TG_R_DIV ;
+ Tuner->Init_Ctrl[38].size = 6 ;
+ Tuner->Init_Ctrl[38].addr[0] = 32;
+ Tuner->Init_Ctrl[38].bit[0] = 2;
+ Tuner->Init_Ctrl[38].val[0] = 0;
+ Tuner->Init_Ctrl[38].addr[1] = 32;
+ Tuner->Init_Ctrl[38].bit[1] = 3;
+ Tuner->Init_Ctrl[38].val[1] = 0;
+ Tuner->Init_Ctrl[38].addr[2] = 32;
+ Tuner->Init_Ctrl[38].bit[2] = 4;
+ Tuner->Init_Ctrl[38].val[2] = 0;
+ Tuner->Init_Ctrl[38].addr[3] = 32;
+ Tuner->Init_Ctrl[38].bit[3] = 5;
+ Tuner->Init_Ctrl[38].val[3] = 0;
+ Tuner->Init_Ctrl[38].addr[4] = 32;
+ Tuner->Init_Ctrl[38].bit[4] = 6;
+ Tuner->Init_Ctrl[38].val[4] = 1;
+ Tuner->Init_Ctrl[38].addr[5] = 32;
+ Tuner->Init_Ctrl[38].bit[5] = 7;
+ Tuner->Init_Ctrl[38].val[5] = 0;
+
+ Tuner->Init_Ctrl[39].Ctrl_Num = EN_CHP_LIN_B ;
+ Tuner->Init_Ctrl[39].size = 1 ;
+ Tuner->Init_Ctrl[39].addr[0] = 25;
+ Tuner->Init_Ctrl[39].bit[0] = 3;
+ Tuner->Init_Ctrl[39].val[0] = 1;
+
+
+ Tuner->CH_Ctrl_Num = CHCTRL_NUM ;
+
+ Tuner->CH_Ctrl[0].Ctrl_Num = DN_POLY ;
+ Tuner->CH_Ctrl[0].size = 2 ;
+ Tuner->CH_Ctrl[0].addr[0] = 68;
+ Tuner->CH_Ctrl[0].bit[0] = 6;
+ Tuner->CH_Ctrl[0].val[0] = 1;
+ Tuner->CH_Ctrl[0].addr[1] = 68;
+ Tuner->CH_Ctrl[0].bit[1] = 7;
+ Tuner->CH_Ctrl[0].val[1] = 1;
+
+ Tuner->CH_Ctrl[1].Ctrl_Num = DN_RFGAIN ;
+ Tuner->CH_Ctrl[1].size = 2 ;
+ Tuner->CH_Ctrl[1].addr[0] = 70;
+ Tuner->CH_Ctrl[1].bit[0] = 6;
+ Tuner->CH_Ctrl[1].val[0] = 1;
+ Tuner->CH_Ctrl[1].addr[1] = 70;
+ Tuner->CH_Ctrl[1].bit[1] = 7;
+ Tuner->CH_Ctrl[1].val[1] = 0;
+
+ Tuner->CH_Ctrl[2].Ctrl_Num = DN_CAP_RFLPF ;
+ Tuner->CH_Ctrl[2].size = 9 ;
+ Tuner->CH_Ctrl[2].addr[0] = 69;
+ Tuner->CH_Ctrl[2].bit[0] = 5;
+ Tuner->CH_Ctrl[2].val[0] = 0;
+ Tuner->CH_Ctrl[2].addr[1] = 69;
+ Tuner->CH_Ctrl[2].bit[1] = 6;
+ Tuner->CH_Ctrl[2].val[1] = 0;
+ Tuner->CH_Ctrl[2].addr[2] = 69;
+ Tuner->CH_Ctrl[2].bit[2] = 7;
+ Tuner->CH_Ctrl[2].val[2] = 0;
+ Tuner->CH_Ctrl[2].addr[3] = 68;
+ Tuner->CH_Ctrl[2].bit[3] = 0;
+ Tuner->CH_Ctrl[2].val[3] = 0;
+ Tuner->CH_Ctrl[2].addr[4] = 68;
+ Tuner->CH_Ctrl[2].bit[4] = 1;
+ Tuner->CH_Ctrl[2].val[4] = 0;
+ Tuner->CH_Ctrl[2].addr[5] = 68;
+ Tuner->CH_Ctrl[2].bit[5] = 2;
+ Tuner->CH_Ctrl[2].val[5] = 0;
+ Tuner->CH_Ctrl[2].addr[6] = 68;
+ Tuner->CH_Ctrl[2].bit[6] = 3;
+ Tuner->CH_Ctrl[2].val[6] = 0;
+ Tuner->CH_Ctrl[2].addr[7] = 68;
+ Tuner->CH_Ctrl[2].bit[7] = 4;
+ Tuner->CH_Ctrl[2].val[7] = 0;
+ Tuner->CH_Ctrl[2].addr[8] = 68;
+ Tuner->CH_Ctrl[2].bit[8] = 5;
+ Tuner->CH_Ctrl[2].val[8] = 0;
+
+ Tuner->CH_Ctrl[3].Ctrl_Num = DN_EN_VHFUHFBAR ;
+ Tuner->CH_Ctrl[3].size = 1 ;
+ Tuner->CH_Ctrl[3].addr[0] = 70;
+ Tuner->CH_Ctrl[3].bit[0] = 5;
+ Tuner->CH_Ctrl[3].val[0] = 0;
+
+ Tuner->CH_Ctrl[4].Ctrl_Num = DN_GAIN_ADJUST ;
+ Tuner->CH_Ctrl[4].size = 3 ;
+ Tuner->CH_Ctrl[4].addr[0] = 73;
+ Tuner->CH_Ctrl[4].bit[0] = 4;
+ Tuner->CH_Ctrl[4].val[0] = 0;
+ Tuner->CH_Ctrl[4].addr[1] = 73;
+ Tuner->CH_Ctrl[4].bit[1] = 5;
+ Tuner->CH_Ctrl[4].val[1] = 1;
+ Tuner->CH_Ctrl[4].addr[2] = 73;
+ Tuner->CH_Ctrl[4].bit[2] = 6;
+ Tuner->CH_Ctrl[4].val[2] = 0;
+
+ Tuner->CH_Ctrl[5].Ctrl_Num = DN_IQTNBUF_AMP ;
+ Tuner->CH_Ctrl[5].size = 4 ;
+ Tuner->CH_Ctrl[5].addr[0] = 70;
+ Tuner->CH_Ctrl[5].bit[0] = 0;
+ Tuner->CH_Ctrl[5].val[0] = 0;
+ Tuner->CH_Ctrl[5].addr[1] = 70;
+ Tuner->CH_Ctrl[5].bit[1] = 1;
+ Tuner->CH_Ctrl[5].val[1] = 0;
+ Tuner->CH_Ctrl[5].addr[2] = 70;
+ Tuner->CH_Ctrl[5].bit[2] = 2;
+ Tuner->CH_Ctrl[5].val[2] = 0;
+ Tuner->CH_Ctrl[5].addr[3] = 70;
+ Tuner->CH_Ctrl[5].bit[3] = 3;
+ Tuner->CH_Ctrl[5].val[3] = 0;
+
+ Tuner->CH_Ctrl[6].Ctrl_Num = DN_IQTNGNBFBIAS_BST ;
+ Tuner->CH_Ctrl[6].size = 1 ;
+ Tuner->CH_Ctrl[6].addr[0] = 70;
+ Tuner->CH_Ctrl[6].bit[0] = 4;
+ Tuner->CH_Ctrl[6].val[0] = 1;
+
+ Tuner->CH_Ctrl[7].Ctrl_Num = RFSYN_EN_OUTMUX ;
+ Tuner->CH_Ctrl[7].size = 1 ;
+ Tuner->CH_Ctrl[7].addr[0] = 111;
+ Tuner->CH_Ctrl[7].bit[0] = 4;
+ Tuner->CH_Ctrl[7].val[0] = 0;
+
+ Tuner->CH_Ctrl[8].Ctrl_Num = RFSYN_SEL_VCO_OUT ;
+ Tuner->CH_Ctrl[8].size = 1 ;
+ Tuner->CH_Ctrl[8].addr[0] = 111;
+ Tuner->CH_Ctrl[8].bit[0] = 7;
+ Tuner->CH_Ctrl[8].val[0] = 1;
+
+ Tuner->CH_Ctrl[9].Ctrl_Num = RFSYN_SEL_VCO_HI ;
+ Tuner->CH_Ctrl[9].size = 1 ;
+ Tuner->CH_Ctrl[9].addr[0] = 111;
+ Tuner->CH_Ctrl[9].bit[0] = 6;
+ Tuner->CH_Ctrl[9].val[0] = 1;
+
+ Tuner->CH_Ctrl[10].Ctrl_Num = RFSYN_SEL_DIVM ;
+ Tuner->CH_Ctrl[10].size = 1 ;
+ Tuner->CH_Ctrl[10].addr[0] = 111;
+ Tuner->CH_Ctrl[10].bit[0] = 5;
+ Tuner->CH_Ctrl[10].val[0] = 0;
+
+ Tuner->CH_Ctrl[11].Ctrl_Num = RFSYN_RF_DIV_BIAS ;
+ Tuner->CH_Ctrl[11].size = 2 ;
+ Tuner->CH_Ctrl[11].addr[0] = 110;
+ Tuner->CH_Ctrl[11].bit[0] = 0;
+ Tuner->CH_Ctrl[11].val[0] = 1;
+ Tuner->CH_Ctrl[11].addr[1] = 110;
+ Tuner->CH_Ctrl[11].bit[1] = 1;
+ Tuner->CH_Ctrl[11].val[1] = 0;
+
+ Tuner->CH_Ctrl[12].Ctrl_Num = DN_SEL_FREQ ;
+ Tuner->CH_Ctrl[12].size = 3 ;
+ Tuner->CH_Ctrl[12].addr[0] = 69;
+ Tuner->CH_Ctrl[12].bit[0] = 2;
+ Tuner->CH_Ctrl[12].val[0] = 0;
+ Tuner->CH_Ctrl[12].addr[1] = 69;
+ Tuner->CH_Ctrl[12].bit[1] = 3;
+ Tuner->CH_Ctrl[12].val[1] = 0;
+ Tuner->CH_Ctrl[12].addr[2] = 69;
+ Tuner->CH_Ctrl[12].bit[2] = 4;
+ Tuner->CH_Ctrl[12].val[2] = 0;
+
+ Tuner->CH_Ctrl[13].Ctrl_Num = RFSYN_VCO_BIAS ;
+ Tuner->CH_Ctrl[13].size = 6 ;
+ Tuner->CH_Ctrl[13].addr[0] = 110;
+ Tuner->CH_Ctrl[13].bit[0] = 2;
+ Tuner->CH_Ctrl[13].val[0] = 0;
+ Tuner->CH_Ctrl[13].addr[1] = 110;
+ Tuner->CH_Ctrl[13].bit[1] = 3;
+ Tuner->CH_Ctrl[13].val[1] = 0;
+ Tuner->CH_Ctrl[13].addr[2] = 110;
+ Tuner->CH_Ctrl[13].bit[2] = 4;
+ Tuner->CH_Ctrl[13].val[2] = 0;
+ Tuner->CH_Ctrl[13].addr[3] = 110;
+ Tuner->CH_Ctrl[13].bit[3] = 5;
+ Tuner->CH_Ctrl[13].val[3] = 0;
+ Tuner->CH_Ctrl[13].addr[4] = 110;
+ Tuner->CH_Ctrl[13].bit[4] = 6;
+ Tuner->CH_Ctrl[13].val[4] = 0;
+ Tuner->CH_Ctrl[13].addr[5] = 110;
+ Tuner->CH_Ctrl[13].bit[5] = 7;
+ Tuner->CH_Ctrl[13].val[5] = 1;
+
+ Tuner->CH_Ctrl[14].Ctrl_Num = CHCAL_INT_MOD_RF ;
+ Tuner->CH_Ctrl[14].size = 7 ;
+ Tuner->CH_Ctrl[14].addr[0] = 14;
+ Tuner->CH_Ctrl[14].bit[0] = 0;
+ Tuner->CH_Ctrl[14].val[0] = 0;
+ Tuner->CH_Ctrl[14].addr[1] = 14;
+ Tuner->CH_Ctrl[14].bit[1] = 1;
+ Tuner->CH_Ctrl[14].val[1] = 0;
+ Tuner->CH_Ctrl[14].addr[2] = 14;
+ Tuner->CH_Ctrl[14].bit[2] = 2;
+ Tuner->CH_Ctrl[14].val[2] = 0;
+ Tuner->CH_Ctrl[14].addr[3] = 14;
+ Tuner->CH_Ctrl[14].bit[3] = 3;
+ Tuner->CH_Ctrl[14].val[3] = 0;
+ Tuner->CH_Ctrl[14].addr[4] = 14;
+ Tuner->CH_Ctrl[14].bit[4] = 4;
+ Tuner->CH_Ctrl[14].val[4] = 0;
+ Tuner->CH_Ctrl[14].addr[5] = 14;
+ Tuner->CH_Ctrl[14].bit[5] = 5;
+ Tuner->CH_Ctrl[14].val[5] = 0;
+ Tuner->CH_Ctrl[14].addr[6] = 14;
+ Tuner->CH_Ctrl[14].bit[6] = 6;
+ Tuner->CH_Ctrl[14].val[6] = 0;
+
+ Tuner->CH_Ctrl[15].Ctrl_Num = CHCAL_FRAC_MOD_RF ;
+ Tuner->CH_Ctrl[15].size = 18 ;
+ Tuner->CH_Ctrl[15].addr[0] = 17;
+ Tuner->CH_Ctrl[15].bit[0] = 6;
+ Tuner->CH_Ctrl[15].val[0] = 0;
+ Tuner->CH_Ctrl[15].addr[1] = 17;
+ Tuner->CH_Ctrl[15].bit[1] = 7;
+ Tuner->CH_Ctrl[15].val[1] = 0;
+ Tuner->CH_Ctrl[15].addr[2] = 16;
+ Tuner->CH_Ctrl[15].bit[2] = 0;
+ Tuner->CH_Ctrl[15].val[2] = 0;
+ Tuner->CH_Ctrl[15].addr[3] = 16;
+ Tuner->CH_Ctrl[15].bit[3] = 1;
+ Tuner->CH_Ctrl[15].val[3] = 0;
+ Tuner->CH_Ctrl[15].addr[4] = 16;
+ Tuner->CH_Ctrl[15].bit[4] = 2;
+ Tuner->CH_Ctrl[15].val[4] = 0;
+ Tuner->CH_Ctrl[15].addr[5] = 16;
+ Tuner->CH_Ctrl[15].bit[5] = 3;
+ Tuner->CH_Ctrl[15].val[5] = 0;
+ Tuner->CH_Ctrl[15].addr[6] = 16;
+ Tuner->CH_Ctrl[15].bit[6] = 4;
+ Tuner->CH_Ctrl[15].val[6] = 0;
+ Tuner->CH_Ctrl[15].addr[7] = 16;
+ Tuner->CH_Ctrl[15].bit[7] = 5;
+ Tuner->CH_Ctrl[15].val[7] = 0;
+ Tuner->CH_Ctrl[15].addr[8] = 16;
+ Tuner->CH_Ctrl[15].bit[8] = 6;
+ Tuner->CH_Ctrl[15].val[8] = 0;
+ Tuner->CH_Ctrl[15].addr[9] = 16;
+ Tuner->CH_Ctrl[15].bit[9] = 7;
+ Tuner->CH_Ctrl[15].val[9] = 0;
+ Tuner->CH_Ctrl[15].addr[10] = 15;
+ Tuner->CH_Ctrl[15].bit[10] = 0;
+ Tuner->CH_Ctrl[15].val[10] = 0;
+ Tuner->CH_Ctrl[15].addr[11] = 15;
+ Tuner->CH_Ctrl[15].bit[11] = 1;
+ Tuner->CH_Ctrl[15].val[11] = 0;
+ Tuner->CH_Ctrl[15].addr[12] = 15;
+ Tuner->CH_Ctrl[15].bit[12] = 2;
+ Tuner->CH_Ctrl[15].val[12] = 0;
+ Tuner->CH_Ctrl[15].addr[13] = 15;
+ Tuner->CH_Ctrl[15].bit[13] = 3;
+ Tuner->CH_Ctrl[15].val[13] = 0;
+ Tuner->CH_Ctrl[15].addr[14] = 15;
+ Tuner->CH_Ctrl[15].bit[14] = 4;
+ Tuner->CH_Ctrl[15].val[14] = 0;
+ Tuner->CH_Ctrl[15].addr[15] = 15;
+ Tuner->CH_Ctrl[15].bit[15] = 5;
+ Tuner->CH_Ctrl[15].val[15] = 0;
+ Tuner->CH_Ctrl[15].addr[16] = 15;
+ Tuner->CH_Ctrl[15].bit[16] = 6;
+ Tuner->CH_Ctrl[15].val[16] = 1;
+ Tuner->CH_Ctrl[15].addr[17] = 15;
+ Tuner->CH_Ctrl[15].bit[17] = 7;
+ Tuner->CH_Ctrl[15].val[17] = 1;
+
+ Tuner->CH_Ctrl[16].Ctrl_Num = RFSYN_LPF_R ;
+ Tuner->CH_Ctrl[16].size = 5 ;
+ Tuner->CH_Ctrl[16].addr[0] = 112;
+ Tuner->CH_Ctrl[16].bit[0] = 0;
+ Tuner->CH_Ctrl[16].val[0] = 0;
+ Tuner->CH_Ctrl[16].addr[1] = 112;
+ Tuner->CH_Ctrl[16].bit[1] = 1;
+ Tuner->CH_Ctrl[16].val[1] = 0;
+ Tuner->CH_Ctrl[16].addr[2] = 112;
+ Tuner->CH_Ctrl[16].bit[2] = 2;
+ Tuner->CH_Ctrl[16].val[2] = 0;
+ Tuner->CH_Ctrl[16].addr[3] = 112;
+ Tuner->CH_Ctrl[16].bit[3] = 3;
+ Tuner->CH_Ctrl[16].val[3] = 0;
+ Tuner->CH_Ctrl[16].addr[4] = 112;
+ Tuner->CH_Ctrl[16].bit[4] = 4;
+ Tuner->CH_Ctrl[16].val[4] = 1;
+
+ Tuner->CH_Ctrl[17].Ctrl_Num = CHCAL_EN_INT_RF ;
+ Tuner->CH_Ctrl[17].size = 1 ;
+ Tuner->CH_Ctrl[17].addr[0] = 14;
+ Tuner->CH_Ctrl[17].bit[0] = 7;
+ Tuner->CH_Ctrl[17].val[0] = 0;
+
+ Tuner->CH_Ctrl[18].Ctrl_Num = TG_LO_DIVVAL ;
+ Tuner->CH_Ctrl[18].size = 4 ;
+ Tuner->CH_Ctrl[18].addr[0] = 107;
+ Tuner->CH_Ctrl[18].bit[0] = 3;
+ Tuner->CH_Ctrl[18].val[0] = 0;
+ Tuner->CH_Ctrl[18].addr[1] = 107;
+ Tuner->CH_Ctrl[18].bit[1] = 4;
+ Tuner->CH_Ctrl[18].val[1] = 0;
+ Tuner->CH_Ctrl[18].addr[2] = 107;
+ Tuner->CH_Ctrl[18].bit[2] = 5;
+ Tuner->CH_Ctrl[18].val[2] = 0;
+ Tuner->CH_Ctrl[18].addr[3] = 107;
+ Tuner->CH_Ctrl[18].bit[3] = 6;
+ Tuner->CH_Ctrl[18].val[3] = 0;
+
+ Tuner->CH_Ctrl[19].Ctrl_Num = TG_LO_SELVAL ;
+ Tuner->CH_Ctrl[19].size = 3 ;
+ Tuner->CH_Ctrl[19].addr[0] = 107;
+ Tuner->CH_Ctrl[19].bit[0] = 7;
+ Tuner->CH_Ctrl[19].val[0] = 1;
+ Tuner->CH_Ctrl[19].addr[1] = 106;
+ Tuner->CH_Ctrl[19].bit[1] = 0;
+ Tuner->CH_Ctrl[19].val[1] = 1;
+ Tuner->CH_Ctrl[19].addr[2] = 106;
+ Tuner->CH_Ctrl[19].bit[2] = 1;
+ Tuner->CH_Ctrl[19].val[2] = 1;
+
+ Tuner->CH_Ctrl[20].Ctrl_Num = TG_DIV_VAL ;
+ Tuner->CH_Ctrl[20].size = 11 ;
+ Tuner->CH_Ctrl[20].addr[0] = 109;
+ Tuner->CH_Ctrl[20].bit[0] = 2;
+ Tuner->CH_Ctrl[20].val[0] = 0;
+ Tuner->CH_Ctrl[20].addr[1] = 109;
+ Tuner->CH_Ctrl[20].bit[1] = 3;
+ Tuner->CH_Ctrl[20].val[1] = 0;
+ Tuner->CH_Ctrl[20].addr[2] = 109;
+ Tuner->CH_Ctrl[20].bit[2] = 4;
+ Tuner->CH_Ctrl[20].val[2] = 0;
+ Tuner->CH_Ctrl[20].addr[3] = 109;
+ Tuner->CH_Ctrl[20].bit[3] = 5;
+ Tuner->CH_Ctrl[20].val[3] = 0;
+ Tuner->CH_Ctrl[20].addr[4] = 109;
+ Tuner->CH_Ctrl[20].bit[4] = 6;
+ Tuner->CH_Ctrl[20].val[4] = 0;
+ Tuner->CH_Ctrl[20].addr[5] = 109;
+ Tuner->CH_Ctrl[20].bit[5] = 7;
+ Tuner->CH_Ctrl[20].val[5] = 0;
+ Tuner->CH_Ctrl[20].addr[6] = 108;
+ Tuner->CH_Ctrl[20].bit[6] = 0;
+ Tuner->CH_Ctrl[20].val[6] = 0;
+ Tuner->CH_Ctrl[20].addr[7] = 108;
+ Tuner->CH_Ctrl[20].bit[7] = 1;
+ Tuner->CH_Ctrl[20].val[7] = 0;
+ Tuner->CH_Ctrl[20].addr[8] = 108;
+ Tuner->CH_Ctrl[20].bit[8] = 2;
+ Tuner->CH_Ctrl[20].val[8] = 1;
+ Tuner->CH_Ctrl[20].addr[9] = 108;
+ Tuner->CH_Ctrl[20].bit[9] = 3;
+ Tuner->CH_Ctrl[20].val[9] = 1;
+ Tuner->CH_Ctrl[20].addr[10] = 108;
+ Tuner->CH_Ctrl[20].bit[10] = 4;
+ Tuner->CH_Ctrl[20].val[10] = 1;
+
+ Tuner->CH_Ctrl[21].Ctrl_Num = TG_VCO_BIAS ;
+ Tuner->CH_Ctrl[21].size = 6 ;
+ Tuner->CH_Ctrl[21].addr[0] = 106;
+ Tuner->CH_Ctrl[21].bit[0] = 2;
+ Tuner->CH_Ctrl[21].val[0] = 0;
+ Tuner->CH_Ctrl[21].addr[1] = 106;
+ Tuner->CH_Ctrl[21].bit[1] = 3;
+ Tuner->CH_Ctrl[21].val[1] = 0;
+ Tuner->CH_Ctrl[21].addr[2] = 106;
+ Tuner->CH_Ctrl[21].bit[2] = 4;
+ Tuner->CH_Ctrl[21].val[2] = 0;
+ Tuner->CH_Ctrl[21].addr[3] = 106;
+ Tuner->CH_Ctrl[21].bit[3] = 5;
+ Tuner->CH_Ctrl[21].val[3] = 0;
+ Tuner->CH_Ctrl[21].addr[4] = 106;
+ Tuner->CH_Ctrl[21].bit[4] = 6;
+ Tuner->CH_Ctrl[21].val[4] = 0;
+ Tuner->CH_Ctrl[21].addr[5] = 106;
+ Tuner->CH_Ctrl[21].bit[5] = 7;
+ Tuner->CH_Ctrl[21].val[5] = 1;
+
+ Tuner->CH_Ctrl[22].Ctrl_Num = SEQ_EXTPOWERUP ;
+ Tuner->CH_Ctrl[22].size = 1 ;
+ Tuner->CH_Ctrl[22].addr[0] = 138;
+ Tuner->CH_Ctrl[22].bit[0] = 4;
+ Tuner->CH_Ctrl[22].val[0] = 1;
+
+ Tuner->CH_Ctrl[23].Ctrl_Num = OVERRIDE_2 ;
+ Tuner->CH_Ctrl[23].size = 1 ;
+ Tuner->CH_Ctrl[23].addr[0] = 17;
+ Tuner->CH_Ctrl[23].bit[0] = 5;
+ Tuner->CH_Ctrl[23].val[0] = 0;
+
+ Tuner->CH_Ctrl[24].Ctrl_Num = OVERRIDE_3 ;
+ Tuner->CH_Ctrl[24].size = 1 ;
+ Tuner->CH_Ctrl[24].addr[0] = 111;
+ Tuner->CH_Ctrl[24].bit[0] = 3;
+ Tuner->CH_Ctrl[24].val[0] = 0;
+
+ Tuner->CH_Ctrl[25].Ctrl_Num = OVERRIDE_4 ;
+ Tuner->CH_Ctrl[25].size = 1 ;
+ Tuner->CH_Ctrl[25].addr[0] = 112;
+ Tuner->CH_Ctrl[25].bit[0] = 7;
+ Tuner->CH_Ctrl[25].val[0] = 0;
+
+ Tuner->CH_Ctrl[26].Ctrl_Num = SEQ_FSM_PULSE ;
+ Tuner->CH_Ctrl[26].size = 1 ;
+ Tuner->CH_Ctrl[26].addr[0] = 136;
+ Tuner->CH_Ctrl[26].bit[0] = 7;
+ Tuner->CH_Ctrl[26].val[0] = 0;
+
+ Tuner->CH_Ctrl[27].Ctrl_Num = GPIO_4B ;
+ Tuner->CH_Ctrl[27].size = 1 ;
+ Tuner->CH_Ctrl[27].addr[0] = 149;
+ Tuner->CH_Ctrl[27].bit[0] = 7;
+ Tuner->CH_Ctrl[27].val[0] = 0;
+
+ Tuner->CH_Ctrl[28].Ctrl_Num = GPIO_3B ;
+ Tuner->CH_Ctrl[28].size = 1 ;
+ Tuner->CH_Ctrl[28].addr[0] = 149;
+ Tuner->CH_Ctrl[28].bit[0] = 6;
+ Tuner->CH_Ctrl[28].val[0] = 0;
+
+ Tuner->CH_Ctrl[29].Ctrl_Num = GPIO_4 ;
+ Tuner->CH_Ctrl[29].size = 1 ;
+ Tuner->CH_Ctrl[29].addr[0] = 149;
+ Tuner->CH_Ctrl[29].bit[0] = 5;
+ Tuner->CH_Ctrl[29].val[0] = 1;
+
+ Tuner->CH_Ctrl[30].Ctrl_Num = GPIO_3 ;
+ Tuner->CH_Ctrl[30].size = 1 ;
+ Tuner->CH_Ctrl[30].addr[0] = 149;
+ Tuner->CH_Ctrl[30].bit[0] = 4;
+ Tuner->CH_Ctrl[30].val[0] = 1;
+
+ Tuner->CH_Ctrl[31].Ctrl_Num = GPIO_1B ;
+ Tuner->CH_Ctrl[31].size = 1 ;
+ Tuner->CH_Ctrl[31].addr[0] = 149;
+ Tuner->CH_Ctrl[31].bit[0] = 3;
+ Tuner->CH_Ctrl[31].val[0] = 0;
+
+ Tuner->CH_Ctrl[32].Ctrl_Num = DAC_A_ENABLE ;
+ Tuner->CH_Ctrl[32].size = 1 ;
+ Tuner->CH_Ctrl[32].addr[0] = 93;
+ Tuner->CH_Ctrl[32].bit[0] = 1;
+ Tuner->CH_Ctrl[32].val[0] = 0;
+
+ Tuner->CH_Ctrl[33].Ctrl_Num = DAC_B_ENABLE ;
+ Tuner->CH_Ctrl[33].size = 1 ;
+ Tuner->CH_Ctrl[33].addr[0] = 93;
+ Tuner->CH_Ctrl[33].bit[0] = 0;
+ Tuner->CH_Ctrl[33].val[0] = 0;
+
+ Tuner->CH_Ctrl[34].Ctrl_Num = DAC_DIN_A ;
+ Tuner->CH_Ctrl[34].size = 6 ;
+ Tuner->CH_Ctrl[34].addr[0] = 92;
+ Tuner->CH_Ctrl[34].bit[0] = 2;
+ Tuner->CH_Ctrl[34].val[0] = 0;
+ Tuner->CH_Ctrl[34].addr[1] = 92;
+ Tuner->CH_Ctrl[34].bit[1] = 3;
+ Tuner->CH_Ctrl[34].val[1] = 0;
+ Tuner->CH_Ctrl[34].addr[2] = 92;
+ Tuner->CH_Ctrl[34].bit[2] = 4;
+ Tuner->CH_Ctrl[34].val[2] = 0;
+ Tuner->CH_Ctrl[34].addr[3] = 92;
+ Tuner->CH_Ctrl[34].bit[3] = 5;
+ Tuner->CH_Ctrl[34].val[3] = 0;
+ Tuner->CH_Ctrl[34].addr[4] = 92;
+ Tuner->CH_Ctrl[34].bit[4] = 6;
+ Tuner->CH_Ctrl[34].val[4] = 0;
+ Tuner->CH_Ctrl[34].addr[5] = 92;
+ Tuner->CH_Ctrl[34].bit[5] = 7;
+ Tuner->CH_Ctrl[34].val[5] = 0;
+
+ Tuner->CH_Ctrl[35].Ctrl_Num = DAC_DIN_B ;
+ Tuner->CH_Ctrl[35].size = 6 ;
+ Tuner->CH_Ctrl[35].addr[0] = 93;
+ Tuner->CH_Ctrl[35].bit[0] = 2;
+ Tuner->CH_Ctrl[35].val[0] = 0;
+ Tuner->CH_Ctrl[35].addr[1] = 93;
+ Tuner->CH_Ctrl[35].bit[1] = 3;
+ Tuner->CH_Ctrl[35].val[1] = 0;
+ Tuner->CH_Ctrl[35].addr[2] = 93;
+ Tuner->CH_Ctrl[35].bit[2] = 4;
+ Tuner->CH_Ctrl[35].val[2] = 0;
+ Tuner->CH_Ctrl[35].addr[3] = 93;
+ Tuner->CH_Ctrl[35].bit[3] = 5;
+ Tuner->CH_Ctrl[35].val[3] = 0;
+ Tuner->CH_Ctrl[35].addr[4] = 93;
+ Tuner->CH_Ctrl[35].bit[4] = 6;
+ Tuner->CH_Ctrl[35].val[4] = 0;
+ Tuner->CH_Ctrl[35].addr[5] = 93;
+ Tuner->CH_Ctrl[35].bit[5] = 7;
+ Tuner->CH_Ctrl[35].val[5] = 0;
+
+#ifdef _MXL_PRODUCTION
+ Tuner->CH_Ctrl[36].Ctrl_Num = RFSYN_EN_DIV ;
+ Tuner->CH_Ctrl[36].size = 1 ;
+ Tuner->CH_Ctrl[36].addr[0] = 109;
+ Tuner->CH_Ctrl[36].bit[0] = 1;
+ Tuner->CH_Ctrl[36].val[0] = 1;
+
+ Tuner->CH_Ctrl[37].Ctrl_Num = RFSYN_DIVM ;
+ Tuner->CH_Ctrl[37].size = 2 ;
+ Tuner->CH_Ctrl[37].addr[0] = 112;
+ Tuner->CH_Ctrl[37].bit[0] = 5;
+ Tuner->CH_Ctrl[37].val[0] = 0;
+ Tuner->CH_Ctrl[37].addr[1] = 112;
+ Tuner->CH_Ctrl[37].bit[1] = 6;
+ Tuner->CH_Ctrl[37].val[1] = 0;
+
+ Tuner->CH_Ctrl[38].Ctrl_Num = DN_BYPASS_AGC_I2C ;
+ Tuner->CH_Ctrl[38].size = 1 ;
+ Tuner->CH_Ctrl[38].addr[0] = 65;
+ Tuner->CH_Ctrl[38].bit[0] = 1;
+ Tuner->CH_Ctrl[38].val[0] = 0;
+#endif
+
+ return 0 ;
+}
diff --git a/api/Maxlinear_MXL5005.c b/api/Maxlinear_MXL5005.c
new file mode 100644
index 0000000..6ae5dc5
--- /dev/null
+++ b/api/Maxlinear_MXL5005.c
@@ -0,0 +1,325 @@
+/**
+ * @(#)Maxlinear_MXL5005.cpp
+ *
+ * ==========================================================
+ * Version: 2.1
+ * Date: 2009.02.10
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * 2009.02.10 Yinding update tuner code
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "MXL5005.h"
+#include "Maxlinear_MXL5005_Script.h"
+
+
+Dword MXL_WriteI2C(
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte* pAddress,
+ IN Byte* pData,
+ IN Dword count
+) {
+ Dword error = Error_NO_ERROR; /* Status to be returned */
+ Byte buffer[25];
+ Byte numberOfRegisters = 9;
+ Byte i;
+
+#if (0) /** single write */
+ for (i = 0; i < count; i++) {
+ buffer[0] = *(pAddress + i);
+ buffer[1] = *(pData + i);
+ buffer[2] = 0xFE; /** Latch CMD request by MXL5005 Confidential Datasheet */
+ error = Standard_writeTunerRegisters (demodulator, chip, buffer[0], 2, &buffer[1]);
+ if (error) goto exit;
+ }
+#else /** burst write (Buf <= 19 byte) */
+ Byte j;
+ Byte blocks;
+ Byte remains;
+
+ blocks = (Byte)(count / numberOfRegisters);
+ remains = (Byte)(count % numberOfRegisters);
+
+ for (i = 0; i < blocks; i++) {
+ for (j = 0; j < numberOfRegisters * 2; j += 2) {
+ buffer[j] = pAddress[i * numberOfRegisters + j / 2];
+ buffer[j + 1] = pData[i * numberOfRegisters + j / 2];
+ }
+ if ((remains == 0) && (blocks == i + 1)) {
+ buffer[j]=0xFE; // Latch CMD
+ error = Standard_writeTunerRegisters (demodulator, chip, buffer[0], (numberOfRegisters * 2 ) + 1, &buffer[1]);
+ } else {
+ error = Standard_writeTunerRegisters (demodulator, chip, buffer[0], (numberOfRegisters * 2 ), &buffer[1]);
+ }
+ if (error) goto exit;
+ }
+
+ if (remains) {
+ for (j = 0; j< remains * 2; j += 2) {
+ buffer[j] = pAddress[i * numberOfRegisters + j / 2];
+ buffer[j + 1] = pData[i * numberOfRegisters + j / 2];
+ }
+ buffer[j] = 0xFE; /** Latch CMD */
+ error = Standard_writeTunerRegisters (demodulator, chip, buffer[0], (remains * 2) + 1, &buffer[1]);
+ if (error) goto exit;
+ }
+#endif
+exit:
+ return (error);
+}
+
+
+Dword MXL5005_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword MXL5005_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword MXL5005_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ Dword status = 0;
+ Tuner_struct tuner;
+ Dword if_divval_temp;
+ Dword error = Error_NO_ERROR;
+
+ Byte AGC_MASTER_BYTE;
+ Byte address[104];
+ Byte data[104];
+ Byte temp[10];
+ int count;
+
+ AGC_Mode agc_mode;
+ Tuner_Mode mode;
+ Tuner_IF_Mode if_mode;
+ Dword bandwidthInHz;
+ Dword if_out;
+ Dword fxtal;
+ Word top;
+ Word if_out_load;
+ Tuner_Clock_Out clock_out;
+ Tuner_Div_Out div_out;
+ Tuner_Cap_Select capselect;
+ Tuner_RSSI en_rssi;
+ Byte mod_type;
+ Byte TF_Type;
+ Dword frequencyInHz;
+
+ mode = MXL_DIGITAL_MODE;
+ if_mode = MXL_ZERO_IF;
+ bandwidthInHz = bandwidth * 1000;
+ if_out = 4570000;
+ fxtal = 16000000;
+ agc_mode = MXL_SINGLE_AGC;
+ top = 252;
+ if_out_load = 200;
+ clock_out = MXL_CLOCK_OUT_DISABLE;
+ div_out = MXL_DIV_OUT_4;
+ capselect = MXL_CAP_SEL_ENABLE;
+ en_rssi = MXL_RSSI_ENABLE;
+ mod_type = MXL_DVBT;
+ TF_Type = MXL_TF_OFF;
+ frequencyInHz = frequency * 1000;
+
+ if (agc_mode == MXL_DUAL_AGC) /** DUAL AGC */
+ AGC_MASTER_BYTE = 0x04;
+ else
+ AGC_MASTER_BYTE = 0x00;
+
+ status += MXL_GetMasterControl(data, MC_SYNTH_RESET);
+ address[0] = MASTER_CONTROL_ADDR;
+ data[0] |= AGC_MASTER_BYTE;
+ data[1] = 0xFE; /** Latch CMD */
+
+ error = Standard_writeTunerRegisters (demodulator, chip, address[0], 2, &data[0]);
+ if (error) goto exit;
+
+ status += MXL5005_TunerConfig( &tuner, mode, if_mode, bandwidth, if_out, fxtal, agc_mode, top, if_out_load,
+ clock_out, div_out, capselect, en_rssi, mod_type, TF_Type);
+
+ /**
+ * retrieve the init registers to write to tuner
+ */
+ status += MXL_GetInitRegister(&tuner, address, data, &count);
+
+ /**
+ * End Init
+ * Write Init Registers to tuner
+ */
+ error = MXL_WriteI2C (demodulator, chip, address, data, count);
+
+ /**
+ * Determine if the tuner is in Zero-IF mode or Analog Low-IF mode
+ */
+ if (if_mode == MXL_ZERO_IF) /** Analog or Digital Zero IF mode */
+ {
+ /**
+ * Set MasterControl = Synth_Reset
+ */
+
+ status += MXL_GetMasterControl(data, MC_SYNTH_RESET);
+ address[0] = MASTER_CONTROL_ADDR;
+ data[0] |= AGC_MASTER_BYTE;
+ data[1] = 0xFE; /** Latch CMD */
+
+ error = Standard_writeTunerRegisters (demodulator, chip, address[0], 2, &data[0]);
+
+ /** RF Tune */
+ status += MXL_TuneRF(&tuner, frequencyInHz);
+
+ /**
+ * Store the calculated IF_DIVVAL value into IF_Divval
+ */
+ status += MXL_ControlRead(&tuner, IF_DIVVAL, &if_divval_temp);
+ status += MXL_ControlWrite(&tuner, SEQ_FSM_PULSE, 0);
+ status += MXL_ControlWrite(&tuner, SEQ_EXTPOWERUP, 1);
+ status += MXL_ControlWrite(&tuner, IF_DIVVAL, 8);
+ status += MXL_GetCHRegister(&tuner, address, data, &count);
+
+ /**
+ * Set MasterControl = Load_Start
+ */
+ status += MXL_GetMasterControl(temp, MC_LOAD_START);
+ address[count] = MASTER_CONTROL_ADDR;
+ temp[0] |= AGC_MASTER_BYTE;
+ data[count] = temp[0];
+ error = MXL_WriteI2C (demodulator, chip, address, data, count + 1);
+
+ /** Wait 30 ms for calibration to complete */
+ User_delay (demodulator, 30);
+
+ status += MXL_ControlWrite(&tuner, SEQ_FSM_PULSE, 1);
+ status += MXL_ControlWrite(&tuner, IF_DIVVAL, if_divval_temp);
+ status += MXL_GetCHRegister_ZeroIF(&tuner, address, data, &count);
+
+ /**
+ * Set MasterControl = Load_Start
+ */
+ status += MXL_GetMasterControl(temp, MC_LOAD_START);
+ address[count] = MASTER_CONTROL_ADDR;
+ data[count] = temp[0] | AGC_MASTER_BYTE;
+
+ /**
+ * Set MasterControl = Load_Start
+ * Write all the data into chip and Latch
+ */
+ error = MXL_WriteI2C (demodulator, chip, address, data, count + 1);
+
+ }
+ else /** Analog Low IF mode */
+ {
+ /** RF Tune; */
+ status += MXL_TuneRF(&tuner, frequencyInHz);
+
+ status += MXL_ControlWrite(&tuner, SEQ_EXTPOWERUP, 1);
+ status += MXL_ControlWrite(&tuner, SEQ_FSM_PULSE, 0);
+ status += MXL_GetCHRegister(&tuner, address, data, &count);
+
+ /** Write Chan Change Registers to tuner */
+ error = MXL_WriteI2C (demodulator, chip, address, data, count);
+ /**
+ * Set MasterControl = Load_Start
+ */
+ status += MXL_GetMasterControl(data, MC_LOAD_START);
+ address[0] = MASTER_CONTROL_ADDR;
+ data[0] |= AGC_MASTER_BYTE;
+ data[1] = 0xFE; /** Latch CMD */
+ error = Standard_writeTunerRegisters (demodulator, chip, address[0], 2, &data[0]);
+
+ User_delay (demodulator, 100);
+
+ /**
+ * Set MasterControl = Seq_Off
+ */
+ status += MXL_GetMasterControl(data, MC_SEQ_OFF);
+ address[0] = MASTER_CONTROL_ADDR;
+ data[0] |= AGC_MASTER_BYTE;
+ data[1] = 0xFE; /** Latch CMD */
+ error = Standard_writeTunerRegisters (demodulator, chip, address[0], 2, &data[0]);
+
+ status += MXL_ControlWrite(&tuner, SEQ_EXTPOWERUP, 0);
+ status += MXL_GetCHRegister_LowIF(&tuner, address, data, &count);
+
+ /** Write Chan Change Registers to tuner for Seq 3 */
+ /*status += Write_I2C(DeviceID, address, data, count);*/
+ error = MXL_WriteI2C (demodulator, chip, address, data, count);
+ }
+
+exit:
+ return(error);
+}
+
+
+Dword SwPowerCtrlMXL5005(
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte control /** 0 for power down mode, 1 for normal operation mode */
+)
+{
+ Dword status = 0;
+ Dword error = Error_NO_ERROR;
+ Byte AGC_MASTER_BYTE = 0x00; /** For Single AGC =0 */
+ Byte address[104];
+ Byte data[104];
+
+ if (control) {
+ /** SetTuner will wake up tuner once it is called and so users don't have to call this function */
+ /** in order to wake-up MXL5005/5003S */
+ } else {
+ status += MXL_GetMasterControl(data, MC_POWER_DOWN);
+ address[0] = MASTER_CONTROL_ADDR;
+ data[0] |= AGC_MASTER_BYTE;
+ data[1] = 0xFE; /** Latch CMD */
+ error = Standard_writeTunerRegisters (demodulator, chip, address[0], 2, &data[0]);
+ if (error) goto exit;
+ }
+
+exit:
+ return (error);
+}
+
+
+TunerDescription tuner_MXL5005 = {
+ MXL5005_open,
+ MXL5005_close,
+ MXL5005_set,
+ MXL5005_scripts,
+ MXL5005_scriptSets,
+ MXL5005_ADDRESS, /** tuner i2c address */
+ 1, /** length of tuner register address */
+ 4570000, /** tuner if */
+ True, /** spectrum inverse */
+ 0x0D, /** tuner id */
+};
diff --git a/api/Maxlinear_MXL5005.h b/api/Maxlinear_MXL5005.h
new file mode 100644
index 0000000..363fbbc
--- /dev/null
+++ b/api/Maxlinear_MXL5005.h
@@ -0,0 +1,64 @@
+/**
+ * @(#)Maxlinear_MXL5005.h
+ *
+ * ==========================================================
+ * Version: 2.1
+ * Date: 2009.02.10
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * 2009.02.10 Yinding update tuner code
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __Maxlinear_MXL5005_H__
+#define __Maxlinear_MXL5005_H__
+
+
+#define MXL5005_VER_MAJOR 2
+#define MXL5005_VER_MINOR 1
+
+extern TunerDescription tuner_MXL5005;
+
+
+ValueSet Maxlinear_MXL5005_EXT_script[];
+
+
+/**
+ *
+ */
+Dword MXL5005_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword MXL5005_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword MXL5005_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Maxlinear_MXL5005_Script.h b/api/Maxlinear_MXL5005_Script.h
new file mode 100644
index 0000000..8918418
--- /dev/null
+++ b/api/Maxlinear_MXL5005_Script.h
@@ -0,0 +1,88 @@
+/** script version */
+
+#define MXL5005_ADDRESS 0xC6
+#define MXL5005_SCRIPTSETLENGTH 0x00000001
+
+
+Word MXL5005_scriptSets[] = {
+ 0x4C
+};
+
+ValueSet MXL5005_scripts[] = {
+ {0xF600, 0x05},
+ {0xF601, 0x08},
+ {0xF602, 0x0B},
+ {0xF603, 0x0E},
+ {0xF604, 0x11},
+ {0xF605, 0x14},
+ {0xF606, 0x17},
+ {0xF607, 0x20},
+ {0xF80F, 0x40},
+ {0xF810, 0x54},
+ {0xF811, 0x5a},
+ {0x009f, 0xCF},
+ {0x009e, 0xE1},
+ {0x00a5, 0x01},
+ {0xFD8B, 0x00},
+ {0x00a2, 0x01},
+ {0x00a3, 0x32},
+ {0xF1E6, 0x01},
+ {0xF00A, 0x19},
+ {0xF00B, 0x1A},
+ {0xF00C, 0x19},
+ {0xF00D, 0x1A},
+ {0xF016, 0x10},
+ {0xF017, 0x04},
+ {0xF018, 0x05},
+ {0xF019, 0x04},
+ {0xF01A, 0x05},
+ {0xF021, 0x03},
+ {0xF022, 0x0A},
+ {0xF023, 0x0A},
+ {0xF078, 0x01},
+ {0x006e, 0x01},
+ {0x006f, 0x01},
+ {0xF1E6, 0x01},
+ {0xF047, 0x00},
+ {0xF007, 0x00},
+ {0xF12F, 0x00},
+ {0xF077, 0x00},
+ {0x0079, 0x00},
+ {0xF00A, 0x19},
+ {0xF00B, 0x1A},
+ {0xF00C, 0x19},
+ {0xF00D, 0x1A},
+ {0xF01F, 0x80},
+ {0xF020, 0x00},
+ {0xF029, 0x80},
+ {0xF02A, 0x00},
+ {0xF010, 0x0F},
+ {0xF011, 0x02},
+ {0xF00E, 0x73},
+ {0xF00F, 0x01},
+ {0xF014, 0x00},
+ {0xF015, 0x00},
+ {0xF012, 0x00},
+ {0xF013, 0x00},
+ {0x004e, 0x23},
+ {0x004c, 0xfa},
+ {0x004d, 0x01},
+ {0xF01B, 0x70},
+ {0xF01C, 0x01},
+ {0xF01D, 0xff},
+ {0xF01E, 0x01},
+ {0xF025, 0x70},
+ {0xF026, 0x01},
+ {0xF027, 0xff},
+ {0xF028, 0x01},
+ {0xF02B, 0x00},
+ {0x0070, 0x01},
+ {0x009a, 0x78},
+ {0x009b, 0xA6},
+ {0x009c, 0x7F},
+ {0x009d, 0x7F},
+ {0xF02C, 0x01},
+ {0x006b, 0x0A},
+ {0x006c, 0x14},
+ {0x006d, 0x08},
+}; \ No newline at end of file
diff --git a/api/Microtune_MT2260B0.c b/api/Microtune_MT2260B0.c
new file mode 100644
index 0000000..0cf11e5
--- /dev/null
+++ b/api/Microtune_MT2260B0.c
@@ -0,0 +1,115 @@
+/**
+ * @(#)Microtune_MT2260B0.cpp
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "mt2260.h"
+#include "Microtune_MT2260B0_Script.h"
+
+
+#define Microtune_MT2260B0_EXT_ADDRESS 0xC0
+
+Handle_t Microtune_MT2260B0_tunerHandles[2];
+UserData Microtune_MT2260B0_userDatas[2];
+
+
+Dword MT2260B0_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+ UData_t status = MT_OK;
+
+ Microtune_MT2260B0_userDatas[chip].chip = chip;
+ Microtune_MT2260B0_userDatas[chip].demodulator = demodulator;
+ status = MT2260_Open ((unsigned int)Microtune_MT2260B0_EXT_ADDRESS, &Microtune_MT2260B0_tunerHandles[chip], &Microtune_MT2260B0_userDatas[chip]);
+ if (MT_NO_ERROR (status))
+ status |= MT2260_SetParam (Microtune_MT2260B0_tunerHandles[chip], MT2260_STEPSIZE, 62500);
+ if (MT_NO_ERROR (status))
+ status |= MT2260_SetParam (Microtune_MT2260B0_tunerHandles[chip], MT2260_RF_EXT, 1);
+ if (MT_NO_ERROR (status))
+ status |= MT2260_SetParam (Microtune_MT2260B0_tunerHandles[chip], MT2260_BB_EXT, 1);
+ if (MT_IS_ERROR (status))
+ error = Error_MT_TUNE_FAIL;
+
+ return (error);
+}
+
+
+Dword MT2260B0_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+ UData_t status = MT_OK;
+
+ status |= MT2260_Close (Microtune_MT2260B0_tunerHandles[chip]);
+ if (MT_IS_ERROR (status))
+ error = Error_MT_TUNE_FAIL;
+
+ return (error);
+}
+
+
+Dword MT2260B0_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ Dword error = Error_NO_ERROR;
+ UData_t status = MT_OK;
+ UData_t freq;
+ UData_t bw;
+
+ freq = frequency * 1000UL;
+ bw = (UData_t) bandwidth * 1000UL;
+
+ /** Change frequency */
+ status = MT2260_ChangeFreq (Microtune_MT2260B0_tunerHandles[chip], freq);
+ if (MT_NO_ERROR (status))
+ status |= MT2260_SetParam (Microtune_MT2260B0_tunerHandles[chip], MT2260_OUTPUT_BW, bw);
+ if (MT_IS_ERROR (status))
+ error = Error_MT_TUNE_FAIL;
+
+ User_delay (demodulator, 100);
+
+ return (error);
+}
+
+
+TunerDescription tuner_MT2260B0 = {
+ MT2260B0_open,
+ MT2260B0_close,
+ MT2260B0_set,
+ MT2260B0_scripts,
+ MT2260B0_scriptSets,
+ MT2260B0_ADDRESS, /** tuner i2c address */
+ 1, /** length of tuner register address */
+ 0, /** tuner if */
+ True, /** spectrum inverse */
+ 0x21, /** tuner id */
+};
diff --git a/api/Microtune_MT2260B0.h b/api/Microtune_MT2260B0.h
new file mode 100644
index 0000000..c2a8798
--- /dev/null
+++ b/api/Microtune_MT2260B0.h
@@ -0,0 +1,66 @@
+/**
+ * @(#)Microtune_MT2260B0.h
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __Microtune_MT2260B0_H__
+#define __Microtune_MT2260B0_H__
+
+
+#define MT2260B0_VER_MAJOR 2
+#define MT2260B0_VER_MINOR 0
+
+extern TunerDescription tuner_MT2260B0;
+
+
+extern int RF_IF_MT2060_X100[];
+
+
+ValueSet Microtune_MT2260B0_EXT_script[];
+
+
+/**
+ *
+ */
+Dword MT2260B0_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword MT2260B0_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword MT2260B0_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Microtune_MT2260B0_Script.h b/api/Microtune_MT2260B0_Script.h
new file mode 100644
index 0000000..d96a731
--- /dev/null
+++ b/api/Microtune_MT2260B0_Script.h
@@ -0,0 +1,130 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)Microtune_MT2260B0_EXT_EVB.cpp
+*
+* Copyright 2005 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 5
+#define VERSION2 1
+#define VERSION3 7
+#define VERSION4 0
+
+
+
+#define MT2260B0_ADDRESS 0xC0
+#define MT2260B0_SCRIPTSETLENGTH 0x00000001
+
+Word MT2260B0_scriptSets[] = {
+0x66
+};
+
+ValueSet MT2260B0_scripts[] = {
+ {0xF600, 0x05},
+ {0xF601, 0x08},
+ {0xF602, 0x0B},
+ {0xF603, 0x0E},
+ {0xF604, 0x11},
+ {0xF605, 0x14},
+ {0xF606, 0x17},
+ {0xF607, 0x1F},
+ {0xF5F8, 0x01},
+ {0xF5DF, 0xFB},
+ {0xF5E0, 0x00},
+ {0xF5E3, 0x09},
+ {0xF5E4, 0x01},
+ {0xF5E5, 0x01},
+ {0xF5FD, 0x01},
+ {0x0081, 0x0A},
+ {0x00c4, 0x19},
+ {0x007e, 0x04},
+ {0x00c0, 0x05},
+ {0xF80F, 0x40},
+ {0xF810, 0x54},
+ {0xF811, 0x5a},
+ {0xF78B, 0x01},
+ {0xFB06, 0x3},
+ {0x00a0, 0xCF},
+ {0x009f, 0xE1},
+ {0x00a6, 0x01},
+ {0xFD8B, 0x00},
+ {0x00ad, 0x01},
+ {0x00a3, 0x01},
+ {0x00a4, 0x3C},
+ {0x00ab, 0x01},
+ {0x008e, 0x01},
+ {0x008a, 0x01},
+ {0x0099, 0x01},
+ {0x00a9, 0x00},
+ {0x00a5, 0x01},
+ {0x00aa, 0x01},
+ {0x0092, 0x06},
+ {0xF078, 0x00},
+ {0xF016, 0x10},
+ {0xF017, 0x04},
+ {0xF018, 0x05},
+ {0xF019, 0x04},
+ {0xF01A, 0x05},
+ {0xF021, 0x03},
+ {0xF022, 0x0A},
+ {0xF023, 0x0A},
+ {0xF02B, 0x00},
+ {0x0070, 0x0A},
+ {0xF1CB, 0xA0},
+ {0xF1CC, 0x01},
+ {0x0046, 0x21},
+ {0x00b3, 0x02},
+ {0xF047, 0x01},
+ {0xF007, 0x01},
+ {0xF1E6, 0x01},
+ {0x0074, 0x00},
+ {0xF077, 0x01},
+ {0xF00A, 0x1B},
+ {0xF00B, 0x1C},
+ {0xF00C, 0x1B},
+ {0xF00D, 0x1C},
+ {0x0071, 0x05},
+ {0x0072, 0x02},
+ {0xF01F, 0xA0},
+ {0xF020, 0x00},
+ {0x0068, 0xA0},
+ {0xF029, 0x8C},
+ {0xF02A, 0x00},
+ {0xF010, 0x58},
+ {0xF011, 0x03},
+ {0xF00E, 0xFF},
+ {0xF00F, 0x01},
+ {0xF014, 0xf8},
+ {0xF015, 0x02},
+ {0xF012, 0xFF},
+ {0xF013, 0x01},
+ {0xF01B, 0xEF},
+ {0xF01C, 0x01},
+ {0xF01D, 0x68},
+ {0xF01E, 0x03},
+ {0xF025, 0xEF},
+ {0xF026, 0x01},
+ {0xF027, 0x68},
+ {0xF028, 0x03},
+ {0x006e, 0x52},
+ {0x006d, 0x01},
+ {0x0057, 0x00},
+ {0x0058, 0x00},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x0093, 0x00},
+ {0x0096, 0x00},
+ {0x0094, 0x00},
+ {0x0095, 0x00},
+ {0x0079, 0x01},
+ {0x00c2, 0x00},
+ {0x00c1, 0x01},
+ {0xF02C, 0x01},
+ {0x00b0, 0x01},
+ {0xF000, 0xF},
+
+};
diff --git a/api/Microtune_MT2266.c b/api/Microtune_MT2266.c
new file mode 100644
index 0000000..e6dd38b
--- /dev/null
+++ b/api/Microtune_MT2266.c
@@ -0,0 +1,178 @@
+/**
+ * @(#)Microtune_MT2266.cpp
+ *
+ * ==========================================================
+ * Version: 2.1
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * 2008.10.16 Tom Lin support TA4029CTC
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+//#include <stdio.h> // for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "mt2266.h"
+#include "Microtune_MT2266_Script.h"
+#include "Microtune_MT2266_TA4029CTC_Script.h"
+
+/** when mount TA4029CTC, set the value to be 1 */
+#define MT2266_TA4029CTC_SUPPORT 0
+
+
+Handle_t Microtune_MT2266_tunerHandles[2];
+UserData Microtune_MT2266_userDatas[2];
+
+
+Dword MT2266_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+ UData_t status = MT_OK;
+
+ Microtune_MT2266_userDatas[chip].chip = chip;
+ Microtune_MT2266_userDatas[chip].demodulator = demodulator;
+ status = MT2266_Open ((unsigned int)MT2266_ADDRESS, &Microtune_MT2266_tunerHandles[chip], &Microtune_MT2266_userDatas[chip]);
+ if (MT_NO_ERROR (status))
+ status |= MT2266_SetParam (Microtune_MT2266_tunerHandles[chip], MT2266_STEPSIZE, 62500);
+ if (MT_NO_ERROR (status))
+ status |= MT2266_SetParam (Microtune_MT2266_tunerHandles[chip], MT2266_RF_EXT, 1);
+ if (MT_NO_ERROR (status))
+ status |= MT2266_SetParam (Microtune_MT2266_tunerHandles[chip], MT2266_BB_EXT, 1);
+ if (MT_IS_ERROR (status))
+ error = Error_MT_TUNE_FAIL;
+
+ return (error);
+}
+
+
+Dword MT2266_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+ UData_t status = MT_OK;
+
+ status |= MT2266_Close (Microtune_MT2266_tunerHandles[chip]);
+ if (MT_IS_ERROR (status))
+ error = Error_MT_TUNE_FAIL;
+
+ return (error);
+}
+
+
+Dword MT2266_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ Dword error = Error_NO_ERROR;
+ UData_t status = MT_OK;
+ UData_t freq;
+ UData_t bw;
+
+ freq = frequency * 1000UL;
+ bw = (UData_t) bandwidth * 1000UL;
+
+ /** Change frequency */
+ status = MT2266_ChangeFreq (Microtune_MT2266_tunerHandles[chip], freq);
+ if (MT_NO_ERROR (status))
+ status |= MT2266_SetParam (Microtune_MT2266_tunerHandles[chip], MT2266_OUTPUT_BW, bw);
+ if (MT_IS_ERROR (status))
+ error = Error_MT_TUNE_FAIL;
+
+ User_delay (demodulator, 100);
+
+ return (error);
+}
+
+
+Dword Microtune_MT2266_EXT_getparam (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN MT2266_Param param,
+ IN Dword* value
+) {
+ Dword error = Error_NO_ERROR;
+ UData_t status = MT_OK;
+
+ status |= MT2266_GetParam (Microtune_MT2266_tunerHandles[chip], param, value);
+ if (MT_IS_ERROR (status))
+ error = Error_MT_TUNE_FAIL;
+
+ return (error);
+}
+
+
+Dword Microtune_MT2266_EXT_setparam (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN MT2266_Param param,
+ IN Dword value
+) {
+ Dword error = Error_NO_ERROR;
+ UData_t status = MT_OK;
+
+ status |= MT2266_SetParam (Microtune_MT2266_tunerHandles[chip], param, value);
+ if (MT_IS_ERROR (status))
+ error = Error_MT_TUNE_FAIL;
+
+ return (error);
+}
+
+
+TunerDescription tuner_MT2266 = {
+ MT2266_open,
+ MT2266_close,
+ MT2266_set,
+#if MT2266_TA4029CTC_SUPPORT
+ MT2266_TA4029CTC_scripts,
+ MT2266_TA4029CTC_scriptSets,
+ MT2266_TA4029CTC_ADDRESS, /** tuner i2c address */
+#else
+ MT2266_scripts,
+ MT2266_scriptSets,
+ MT2266_ADDRESS, /** tuner i2c address */
+#endif
+ 1, /** length of tuner register address */
+ 0, /** tuner if */
+ True, /** spectrum inverse */
+#if MT2266_TA4029CTC_SUPPORT
+ 0x2D, /** tuner id */
+#else
+ 0x23, /** tuner id */
+#endif
+};
+
+void MT2266_supportTA4029CTC (
+ IN Demodulator* demodulator,
+ IN INT support //for Linux
+ ) {
+ if (support) {
+ tuner_MT2266.tunerScript = MT2266_TA4029CTC_scripts;
+ tuner_MT2266.tunerScriptSets = MT2266_TA4029CTC_scriptSets;
+ tuner_MT2266.tunerAddress = MT2266_TA4029CTC_ADDRESS;
+ tuner_MT2266.tunerId = 0x2D;
+ } else {
+ tuner_MT2266.tunerScript = MT2266_scripts;
+ tuner_MT2266.tunerScriptSets = MT2266_scriptSets;
+ tuner_MT2266.tunerAddress = MT2266_ADDRESS;
+ tuner_MT2266.tunerId = 0x23;
+ }
+} \ No newline at end of file
diff --git a/api/Microtune_MT2266.h b/api/Microtune_MT2266.h
new file mode 100644
index 0000000..2c11479
--- /dev/null
+++ b/api/Microtune_MT2266.h
@@ -0,0 +1,71 @@
+/**
+ * @(#)Microtune_MT2266.h
+ *
+ * ==========================================================
+ * Version: 2.1
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * 2008.10.16 Tom Lin support TA4029CTC
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __Microtune_MT2266_H__
+#define __Microtune_MT2266_H__
+
+
+#define MT2266_VER_MAJOR 2
+#define MT2266_VER_MINOR 1
+
+extern TunerDescription tuner_MT2266;
+
+
+/**
+ *
+ */
+Dword MT2266_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword MT2266_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword MT2266_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+
+
+/**
+ *
+ */
+
+void MT2266_supportTA4029CTC (
+ IN Demodulator* demodulator,
+ IN INT support // for Linux
+);
+#endif \ No newline at end of file
diff --git a/api/Microtune_MT2266_Script.h b/api/Microtune_MT2266_Script.h
new file mode 100644
index 0000000..7d7f9d1
--- /dev/null
+++ b/api/Microtune_MT2266_Script.h
@@ -0,0 +1,89 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)Microtune_MT2266B0_EXT_EVB.cpp
+*
+* Copyright 2005 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 5
+#define VERSION2 66
+#define VERSION3 12
+#define VERSION4 0
+
+
+
+#define MT2266_ADDRESS 0xC0
+#define MT2266_SCRIPTSETLENGTH 0x00000001
+
+Word MT2266_scriptSets[] = {
+0x3D
+};
+
+ValueSet MT2266_scripts[] = {
+ {0x0046, 0x23},
+ {0x0057, 0x00},
+ {0x0058, 0x00},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x006a, 0xFF},
+ {0x006d, 0x01},
+ {0x006f, 0x07},
+ {0x0071, 0x05},
+ {0x0072, 0x02},
+ {0x0074, 0x00},
+ {0x0079, 0x01},
+ {0x007f, 0x00},
+ {0x0082, 0x60},
+ {0x0083, 0x53},
+ {0x0084, 0x5c},
+ {0x0085, 0x4d},
+ {0x0086, 0xb5},
+ {0x0087, 0x01},
+ {0x0088, 0xa7},
+ {0x0089, 0x01},
+ {0x0093, 0x00},
+ {0x0094, 0x00},
+ {0x0095, 0x00},
+ {0x0096, 0x00},
+ {0x009b, 0x3C},
+ {0x009c, 0x28},
+ {0x00b3, 0x02},
+ {0x00b4, 0x01},
+ {0x00b6, 0x01},
+ {0x00c3, 0x01},
+ {0x00c4, 0x00},
+ {0x00c7, 0x50},
+ {0xF007, 0x01},
+ {0xF00A, 0x1B},
+ {0xF00B, 0x1C},
+ {0xF00C, 0x1B},
+ {0xF00D, 0x1C},
+ {0xF00E, 0xb5},
+ {0xF00F, 0x01},
+ {0xF010, 0x24},
+ {0xF011, 0x03},
+ {0xF012, 0xFF},
+ {0xF013, 0x01},
+ {0xF014, 0x24},
+ {0xF015, 0x03},
+ {0xF01B, 0xa7},
+ {0xF01C, 0x01},
+ {0xF01D, 0x32},
+ {0xF01E, 0x03},
+ {0xF01F, 0xA0},
+ {0xF020, 0x00},
+ {0xF025, 0xa7},
+ {0xF026, 0x01},
+ {0xF027, 0x32},
+ {0xF028, 0x03},
+ {0xF029, 0x8C},
+ {0xF02A, 0x00},
+ {0xF047, 0x01},
+ {0xF077, 0x01},
+ {0xF1E6, 0x01},
+
+};
diff --git a/api/Microtune_MT2266_TA4029CTC_Script.h b/api/Microtune_MT2266_TA4029CTC_Script.h
new file mode 100644
index 0000000..a264780
--- /dev/null
+++ b/api/Microtune_MT2266_TA4029CTC_Script.h
@@ -0,0 +1,89 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)Microtune_MT2266B0_TA4029CTC_EXT_EVB.cpp
+*
+* Copyright 2005 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 5
+#define VERSION2 66
+#define VERSION3 12
+#define VERSION4 0
+
+
+
+#define MT2266_TA4029CTC_ADDRESS 0xC0
+#define MT2266_TA4029CTC_SCRIPTSETLENGTH 0x00000001
+
+Word MT2266_TA4029CTC_scriptSets[] = {
+0x3D
+};
+
+ValueSet MT2266_TA4029CTC_scripts[] = {
+ {0x0046, 0x23},
+ {0x0057, 0x00},
+ {0x0058, 0x00},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x006a, 0xFF},
+ {0x006d, 0x01},
+ {0x006f, 0x07},
+ {0x0071, 0x05},
+ {0x0072, 0x02},
+ {0x0074, 0x00},
+ {0x0079, 0x01},
+ {0x007f, 0x26},
+ {0x0082, 0x60},
+ {0x0083, 0x53},
+ {0x0084, 0x5c},
+ {0x0085, 0x4d},
+ {0x0086, 0xb5},
+ {0x0087, 0x01},
+ {0x0088, 0xa7},
+ {0x0089, 0x01},
+ {0x0093, 0x00},
+ {0x0094, 0x00},
+ {0x0095, 0x00},
+ {0x0096, 0x00},
+ {0x009b, 0x3C},
+ {0x009c, 0x28},
+ {0x00b3, 0x02},
+ {0x00b4, 0x01},
+ {0x00b6, 0x01},
+ {0x00c3, 0x01},
+ {0x00c4, 0x00},
+ {0x00c7, 0x50},
+ {0xF007, 0x01},
+ {0xF00A, 0x1B},
+ {0xF00B, 0x1C},
+ {0xF00C, 0x1B},
+ {0xF00D, 0x1C},
+ {0xF00E, 0xb5},
+ {0xF00F, 0x01},
+ {0xF010, 0x24},
+ {0xF011, 0x03},
+ {0xF012, 0xFF},
+ {0xF013, 0x01},
+ {0xF014, 0x24},
+ {0xF015, 0x03},
+ {0xF01B, 0xa7},
+ {0xF01C, 0x01},
+ {0xF01D, 0x32},
+ {0xF01E, 0x03},
+ {0xF01F, 0xA0},
+ {0xF020, 0x00},
+ {0xF025, 0xa7},
+ {0xF026, 0x01},
+ {0xF027, 0x32},
+ {0xF028, 0x03},
+ {0xF029, 0x8C},
+ {0xF02A, 0x00},
+ {0xF047, 0x01},
+ {0xF077, 0x01},
+ {0xF1E6, 0x01},
+
+};
diff --git a/api/Panasonic_ENV77H11D5.c b/api/Panasonic_ENV77H11D5.c
new file mode 100644
index 0000000..e76341c
--- /dev/null
+++ b/api/Panasonic_ENV77H11D5.c
@@ -0,0 +1,114 @@
+/**
+ * @(#)Panasonic_ENV77H11D5.cpp
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "Panasonic_ENV77H11D5_Script.h"
+
+
+Dword ENV77H11D5_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword ENV77H11D5_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword ENV77H11D5_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ Dword error = Error_NO_ERROR;
+ Word N;
+ Byte N1;
+ Byte N2;
+ Byte ucC1 = 0x8E;
+ Byte ucC2;
+ Byte buffer[10];
+
+ /** Round ((wFreq * 1000 + 36125) * 6 / 1000) so that "500" exists */
+ N = (Word)(((frequency + 36167) * 6 + 500) / 1000);
+ N1 = (Byte)(N / 256);
+ N2 = (Byte)(N % 256);
+
+ if ((174000 <= frequency) && (frequency <= 230000)) ucC2 = 0x42;
+ else if ((470000 < frequency) && (frequency <= 486000)) ucC2 = 0x64;
+ else if ((486000 < frequency) && (frequency <= 526000)) ucC2 = 0x84;
+ else if ((526000 < frequency) && (frequency <= 678000)) ucC2 = 0xA4;
+ else if ((678000 < frequency) && (frequency <= 862000)) ucC2 = 0xC4;
+ else {
+ error = Error_FREQ_OUT_OF_RANGE;
+ goto exit;
+ }
+
+ ucC1 = 0xC2;
+
+ buffer[0] = N1;
+ buffer[1] = N2;
+ buffer[2] = ucC1;
+ buffer[3] = ucC2;
+
+ /** Write freq parameters to tuner */
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x0000, 4, buffer);
+ if (error) goto exit;
+
+ ucC1 = 0x86;
+
+ buffer[0] = N1;
+ buffer[1] = N2;
+ buffer[2] = ucC1;
+ buffer[3] = ucC2;
+
+ /** Write freq parameters to tuner */
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x0000, 4, buffer);
+ if (error) goto exit;
+
+exit:
+ return(error);
+}
+
+
+TunerDescription tuner_ENV77H11D5 = {
+ ENV77H11D5_open,
+ ENV77H11D5_close,
+ ENV77H11D5_set,
+ ENV77H11D5_scripts,
+ ENV77H11D5_scriptSets,
+ ENV77H11D5_ADDRESS, /** tuner i2c address */
+ 0, /** length of tuner register address */
+ 36167000, /** tuner if */
+ True, /** spectrum inverse */
+ 0x01, /** tuner id */
+};
diff --git a/api/Panasonic_ENV77H11D5.h b/api/Panasonic_ENV77H11D5.h
new file mode 100644
index 0000000..a765fbf
--- /dev/null
+++ b/api/Panasonic_ENV77H11D5.h
@@ -0,0 +1,60 @@
+/**
+ * @(#)Panasonic_ENV77H11D5.h
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __Panasonic_ENV77H11D5_H__
+#define __Panasonic_ENV77H11D5_H__
+
+
+#define ENV77H11D5_VER_MAJOR 2
+#define ENV77H11D5_VER_MINOR 0
+
+extern TunerDescription tuner_ENV77H11D5;
+
+
+/**
+ *
+ */
+Dword ENV77H11D5_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword ENV77H11D5_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword ENV77H11D5_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Panasonic_ENV77H11D5_Script.h b/api/Panasonic_ENV77H11D5_Script.h
new file mode 100644
index 0000000..110a8cc
--- /dev/null
+++ b/api/Panasonic_ENV77H11D5_Script.h
@@ -0,0 +1,128 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+ * * @(#)Panasonic_ENV77H11D5_EXT_EVB.cpp
+ * *
+ * * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+*/
+
+#define VERSION1 5
+#define VERSION2 1
+#define VERSION3 7
+#define VERSION4 0
+
+#define ENV77H11D5_ADDRESS 0xC0
+#define ENV77H11D5_SCRIPTSETLENGTH 0x00000001
+
+Word ENV77H11D5_scriptSets[] = {
+0x66
+};
+
+ValueSet ENV77H11D5_scripts[] = {
+ {0xF600, 0x05},
+ {0xF601, 0x08},
+ {0xF602, 0x0B},
+ {0xF603, 0x0E},
+ {0xF604, 0x11},
+ {0xF605, 0x14},
+ {0xF606, 0x17},
+ {0xF607, 0x1F},
+ {0xF5F8, 0x01},
+ {0xF5DF, 0xFB},
+ {0xF5E0, 0x00},
+ {0xF5E3, 0x09},
+ {0xF5E4, 0x01},
+ {0xF5E5, 0x01},
+ {0xF5FD, 0x01},
+ {0x0081, 0x0A},
+ {0x00c4, 0x19},
+ {0x007e, 0x04},
+ {0x00c0, 0x05},
+ {0xF80F, 0x40},
+ {0xF810, 0x54},
+ {0xF811, 0x5a},
+ {0xF78B, 0x01},
+ {0xFB06, 0x3},
+ {0x00a0, 0xCF},
+ {0x009f, 0xE1},
+ {0x00a6, 0x01},
+ {0xFD8B, 0x00},
+ {0x00ad, 0x01},
+ {0x00a3, 0x01},
+ {0x00a4, 0x3C},
+ {0x00ab, 0x01},
+ {0x008e, 0x01},
+ {0x008a, 0x01},
+ {0x0099, 0x01},
+ {0x00a9, 0x00},
+ {0x00a5, 0x01},
+ {0x00aa, 0x01},
+ {0x0092, 0x06},
+ {0xF078, 0x00},
+ {0xF016, 0x10},
+ {0xF017, 0x04},
+ {0xF018, 0x05},
+ {0xF019, 0x04},
+ {0xF01A, 0x05},
+ {0xF021, 0x03},
+ {0xF022, 0x0A},
+ {0xF023, 0x0A},
+ {0xF02B, 0x00},
+ {0x0070, 0x0A},
+ {0xF1CB, 0xA0},
+ {0xF1CC, 0x01},
+ {0x0046, 0x01},
+ {0x00b3, 0x02},
+ {0xF047, 0x00},
+ {0xF007, 0x00},
+ {0xF1E6, 0x01},
+ {0x0074, 0x00},
+ {0xF077, 0x02},
+ {0xF00A, 0x1A},
+ {0xF00B, 0x1B},
+ {0xF00C, 0x1A},
+ {0xF00D, 0x1B},
+ {0x0071, 0x05},
+ {0x0072, 0x02},
+ {0xF01F, 0x50},
+ {0xF020, 0x00},
+ {0x0068, 0x50},
+ {0xF029, 0x46},
+ {0xF02A, 0x00},
+ {0xF010, 0xDF},
+ {0xF011, 0x02},
+ {0xF00E, 0x44},
+ {0xF00F, 0x01},
+ {0xF014, 0xEB},
+ {0xF015, 0x02},
+ {0xF012, 0xF4},
+ {0xF013, 0x01},
+ {0xF01B, 0x26},
+ {0xF01C, 0x01},
+ {0xF01D, 0x12},
+ {0xF01E, 0x03},
+ {0xF025, 0xE8},
+ {0xF026, 0x00},
+ {0xF027, 0x5F},
+ {0xF028, 0x03},
+ {0x006e, 0x52},
+ {0x006d, 0x00},
+ {0x0057, 0x01},
+ {0x0058, 0x01},
+ {0x005f, 0x01},
+ {0x0060, 0x00},
+ {0x0093, 0x00},
+ {0x0096, 0x00},
+ {0x0094, 0x00},
+ {0x0095, 0x00},
+ {0x0079, 0x01},
+ {0x00c2, 0x00},
+ {0x00c1, 0x01},
+ {0xF02C, 0x01},
+ {0x00b0, 0x01},
+ {0xF000, 0xF},
+
+};
diff --git a/api/Peacock.c b/api/Peacock.c
new file mode 100644
index 0000000..139597f
--- /dev/null
+++ b/api/Peacock.c
@@ -0,0 +1,2 @@
+
+
diff --git a/api/Peacock.h b/api/Peacock.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/api/Peacock.h
diff --git a/api/Philips_FQD1218ME_MK5.c b/api/Philips_FQD1218ME_MK5.c
new file mode 100644
index 0000000..139bdc6
--- /dev/null
+++ b/api/Philips_FQD1218ME_MK5.c
@@ -0,0 +1,146 @@
+/*
+ * @(#)Philips_FQD1218ME_MK5.cpp
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "Philips_FQD1218ME_MK5_Script.h"
+
+
+Dword FQD1218ME_MK5_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+ Ganymede* ganymede;
+ Byte buffer[11] = {0};
+
+ ganymede = (Ganymede*) demodulator;
+
+ buffer[4] = 0x67;
+ buffer[5] = 0x1F;
+ buffer[6] = 0x01;
+
+ ganymede->tunerDescription->tunerAddress = 0x86;
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x0000, 11, buffer);
+ ganymede->tunerDescription->tunerAddress = FQD1218ME_MK5_ADDRESS;
+
+ return (error);
+}
+
+
+Dword FQD1218ME_MK5_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword FQD1218ME_MK5_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ Dword error = Error_NO_ERROR;
+ Ganymede* ganymede;
+ const typedef enum { CB2 = 0, AB} MK5_1;
+ const typedef enum { DB1 = 0, DB2, CB1, BB} MK5_2;
+ Byte buffer_1[2] = {0};
+ Byte buffer_2[4] = {0};
+ Dword LO = 0;
+ Word N = 0;
+
+ ganymede = (Ganymede*) demodulator;
+ LO = frequency + ganymede->tunerDescription->ifFrequency / 1000;
+ N = (Word)(LO * 6 / 1000);
+
+ buffer_1[AB] = 0x20;
+
+ buffer_2[DB1] = (Byte)(N >> 8);
+ buffer_2[DB2] = (Byte)N;
+
+ if (frequency >= 51000 && frequency <= 157000) {/** Low band*/
+ if (LO < 180000) {
+ buffer_1[CB2] = 0x9C;
+ buffer_2[CB1] = 0xBC;
+ buffer_2[BB] = 0x01;
+ } else {
+ buffer_1[CB2] = 0xDC;
+ buffer_2[CB1] = 0xF4;
+ buffer_2[BB] = 0x01;
+ }
+ } else if (frequency >= 164000 && frequency <= 442000) {/** Mid band*/
+ if (LO < 366000) {
+ buffer_1[CB2] = 0x9C;
+ buffer_2[CB1] = 0xBC;
+ buffer_2[BB] = 0x02;
+ }else {
+ buffer_1[CB2] = 0xDC;
+ buffer_2[CB1] = 0xF4;
+ buffer_2[BB] = 0x02;
+ }
+ } else if (frequency >= 450000 && frequency <= 866000) {/** High band*/
+ if (LO < 662000) {
+ buffer_1[CB2] = 0x9C;
+ buffer_2[CB1] = 0xBC;
+ buffer_2[BB] = 0x04;
+ } else if (LO > 840000) {
+ buffer_1[CB2] = 0xDC;
+ buffer_2[CB1] = 0xFC;
+ buffer_2[BB] = 0x04;
+ } else {
+ buffer_1[CB2] = 0xDC;
+ buffer_2[CB1] = 0xF4;
+ buffer_2[BB] = 0x04;
+ }
+ } else {
+ error = Error_FREQ_OUT_OF_RANGE;
+ goto exit;
+ }
+
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x0000, 2, buffer_1);
+ if (error) goto exit;
+
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x0000, 4, buffer_2);
+
+exit:
+ return (error);
+}
+
+
+TunerDescription tuner_FQD1218ME_MK5 = {
+ FQD1218ME_MK5_open,
+ FQD1218ME_MK5_close,
+ FQD1218ME_MK5_set,
+ FQD1218ME_MK5_scripts,
+ FQD1218ME_MK5_scriptSets,
+ FQD1218ME_MK5_ADDRESS, /** tuner i2c address */
+ 0, /** length of tuner register address */
+ 36130000, /** tuner if */
+ True, /** spectrum inverse */
+ 0x30, /** tuner id */
+};
diff --git a/api/Philips_FQD1218ME_MK5.h b/api/Philips_FQD1218ME_MK5.h
new file mode 100644
index 0000000..ec05f3b
--- /dev/null
+++ b/api/Philips_FQD1218ME_MK5.h
@@ -0,0 +1,60 @@
+/**
+ * @(#)Philips_FQD1218ME_MK5.h
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __Philips_FQD1218ME_MK5_H__
+#define __Philips_FQD1218ME_MK5_H__
+
+
+#define FQD1218ME_MK5_VER_MAJOR 2
+#define FQD1218ME_MK5_VER_MINOR 0
+
+extern TunerDescription tuner_FQD1218ME_MK5;
+
+
+/**
+ *
+ */
+Dword FQD1218ME_MK5_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword FQD1218ME_MK5_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword FQD1218ME_MK5_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Philips_FQD1218ME_MK5_Script.h b/api/Philips_FQD1218ME_MK5_Script.h
new file mode 100644
index 0000000..353e41f
--- /dev/null
+++ b/api/Philips_FQD1218ME_MK5_Script.h
@@ -0,0 +1,92 @@
+/** script version */
+
+#define FQD1218ME_MK5_ADDRESS 0xC2
+#define FQD1218ME_MK5_SCRIPTSETLENGTH 0x00000001
+
+
+Word FQD1218ME_MK5_scriptSets[] = {
+0x4F
+};
+
+ValueSet FQD1218ME_MK5_scripts[] = {
+ {0xF600, 0x05},
+ {0xF601, 0x08},
+ {0xF602, 0x0B},
+ {0xF603, 0x0E},
+ {0xF604, 0x11},
+ {0xF605, 0x14},
+ {0xF606, 0x17},
+ {0xF607, 0x1F},
+ {0xF5F8, 0x01},
+ {0xF5DF, 0xFB},
+ {0xF5E0, 0x00},
+ {0xF5E3, 0x09},
+ {0xF5E4, 0x01},
+ {0xF5E5, 0x01},
+ {0xF5FD, 0x01},
+ {0xF80F, 0x40},
+ {0xF810, 0x54},
+ {0xF811, 0x5a},
+ {0xF78B, 0x01},
+ {0xFB06, 0x3},
+ {0x00a0, 0xCF},
+ {0x009f, 0xE1},
+ {0x00a6, 0x01},
+ {0xFD8B, 0x00},
+ {0x00ad, 0x01},
+ {0x00a3, 0x01},
+ {0x00a4, 0x3C},
+ {0x00ab, 0x01},
+ {0x008e, 0x01},
+ {0x008a, 0x01},
+ {0x0099, 0x01},
+ {0x00a9, 0x00},
+ {0x00a5, 0x01},
+ {0x00aa, 0x01},
+ {0x0092, 0x06},
+ {0xF078, 0x00},
+ {0xF016, 0x10},
+ {0xF017, 0x04},
+ {0xF018, 0x05},
+ {0xF019, 0x04},
+ {0xF01A, 0x05},
+ {0xF021, 0x03},
+ {0xF022, 0x0A},
+ {0xF023, 0x0A},
+ {0xF02B, 0x00},
+ {0x0070, 0x0A},
+ {0xF1CB, 0xA0},
+ {0xF1CC, 0x01},
+ {0x0046, 0x30},
+ {0x00b3, 0x01},
+ {0xF007, 0x00},
+ {0xF1E6, 0x00},
+ {0x0074, 0x01},
+ {0xF077, 0x02},
+ {0xF00C, 0x19},
+ {0xF00D, 0x1A},
+ {0x0071, 0x05},
+ {0x0072, 0x02},
+ {0xF01F, 0x96},
+ {0xF020, 0x00},
+ {0x0068, 0x96},
+ {0xF029, 0x96},
+ {0xF02A, 0x00},
+ {0xF014, 0x78},
+ {0xF015, 0x02},
+ {0xF012, 0x6d},
+ {0xF013, 0x00},
+ {0x0057, 0x01},
+ {0x0058, 0x01},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x0093, 0x00},
+ {0x0096, 0x00},
+ {0x0094, 0x00},
+ {0x0095, 0x00},
+ {0x0079, 0x01},
+ {0xF02C, 0x01},
+ {0x00b0, 0x01},
+ {0xF000, 0xF},
+
+}; \ No newline at end of file
diff --git a/api/Philips_TD1316AFIHP.c b/api/Philips_TD1316AFIHP.c
new file mode 100644
index 0000000..da8c7b6
--- /dev/null
+++ b/api/Philips_TD1316AFIHP.c
@@ -0,0 +1,136 @@
+/**
+ * @(#)Philips_TD1316AFIHP.cpp
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+//#include <stdio.h> for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "Philips_TD1316AFIHP_Script.h"
+
+
+Dword TD1316AFIHP_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword TD1316AFIHP_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword TD1316AFIHP_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ Dword error = Error_NO_ERROR;
+ Byte buffer[10];
+ Word N;
+ Byte N1;
+ Byte N2;
+ Byte R10;
+ Byte T210;
+ Byte SP3;
+ Byte SP210;
+ Byte CP;
+ Byte AGC;
+ Byte AL210;
+ Byte CB;
+ Byte SB;
+ Byte AB;
+
+ N = (Word)(((frequency + 36167) * 6) / 1000);
+ N1 = (Byte)(N >> 8) & 0x00FF;
+ N2 = (Byte)(N & 0x00FF);
+
+ if (bandwidth == 8000)
+ SP3 = 0x01;
+ else
+ SP3 = 0x00;
+
+ if(frequency > 790000) {CP = 0x01; T210 = 0x07;}
+ else if(frequency > 646000) {CP = 0x01; T210 = 0x06;}
+ else if(frequency > 484000) {CP = 0x00; T210 = 0x07;}
+ else if(frequency > 366000) {CP = 0x01; T210 = 0x06;}
+ else if(frequency > 197000) {CP = 0x00; T210 = 0x07;}
+ else if(frequency > 180000) {CP = 0x01; T210 = 0x06;}
+ else if(frequency > 84000) {CP = 0x00; T210 = 0x07;}
+ else
+ {
+ error = Error_FREQ_OUT_OF_RANGE;
+ goto exit;
+ }
+
+ if(frequency > 473900) {SP210 = 0x04;}
+ else if(frequency > 173900){SP210 = 0x02;}
+ else {SP210 = 0x01;}
+
+ R10 = 0x02;
+ AGC = 0x00; /** 0x01 */
+ AL210 = 0x03; /** 0x04 */
+
+
+ CB = 0x80 + (CP<<6) + (T210<<3) + (R10<<1);
+ SB = (SP3<<3) + SP210;
+ AB = (AGC<<7) + (AL210<<4);
+
+ buffer[0] = N1;
+ buffer[1] = N2;
+ buffer[2] = CB;
+ buffer[3] = SB;
+
+ T210 = 0x03;
+ CB = 0x80 + (CP<<6) + (T210<<3) + (R10<<1);
+
+ buffer[4] = CB;
+ buffer[5] = AB;
+
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x0000, 6, buffer);
+ if (error) goto exit;
+
+ User_delay (demodulator, 60);
+
+exit :
+ return (error);
+}
+
+
+TunerDescription tuner_TD1316AFIHP = {
+ TD1316AFIHP_open,
+ TD1316AFIHP_close,
+ TD1316AFIHP_set,
+ TD1316AFIHP_scripts,
+ TD1316AFIHP_scriptSets,
+ TD1316AFIHP_ADDRESS, /** tuner i2c address */
+ 0, /** length of tuner register address */
+ 36167000, /** tuner if */
+ True, /** spectrum inverse */
+ 0x04, /** tuner id */
+};
diff --git a/api/Philips_TD1316AFIHP.h b/api/Philips_TD1316AFIHP.h
new file mode 100644
index 0000000..a2d8942
--- /dev/null
+++ b/api/Philips_TD1316AFIHP.h
@@ -0,0 +1,60 @@
+/**
+ * @(#)Philips_TD1316AFIHP.h
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __Philips_TD1316AFIHP_H__
+#define __Philips_TD1316AFIHP_H__
+
+
+#define TD1316AFIHP_VER_MAJOR 2
+#define TD1316AFIHP_VER_MINOR 0
+
+extern TunerDescription tuner_TD1316AFIHP;
+
+
+/**
+ *
+ */
+Dword TD1316AFIHP_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword TD1316AFIHP_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword TD1316AFIHP_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Philips_TD1316AFIHP_Script.h b/api/Philips_TD1316AFIHP_Script.h
new file mode 100644
index 0000000..e4badf1
--- /dev/null
+++ b/api/Philips_TD1316AFIHP_Script.h
@@ -0,0 +1,78 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)Philips_TD1316_EXT_EVB.cpp
+*
+* Copyright 2005 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 5
+#define VERSION2 61
+#define VERSION3 12
+#define VERSION4 0
+
+
+
+#define TD1316AFIHP_ADDRESS 0xC0
+#define TD1316AFIHP_SCRIPTSETLENGTH 0x00000001
+
+Word TD1316AFIHP_scriptSets[] = {
+0x32
+};
+
+ValueSet TD1316AFIHP_scripts[] = {
+ {0x0046, 0x04},
+ {0x0057, 0x00},
+ {0x0058, 0x01},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x006e, 0x01},
+ {0x0071, 0x0A},
+ {0x0072, 0x02},
+ {0x0074, 0x01},
+ {0x0079, 0x01},
+ {0x0093, 0x00},
+ {0x0094, 0x00},
+ {0x0095, 0x00},
+ {0x0096, 0x00},
+ {0x009b, 0x3C},
+ {0x009c, 0x40},
+ {0x00b3, 0x01},
+ {0x00c3, 0x0},
+ {0x00c4, 0x0},
+ {0x00c8, 0x52},
+ {0xF007, 0x00},
+ {0xF00A, 0x1B},
+ {0xF00B, 0x1B},
+ {0xF00C, 0x1B},
+ {0xF00D, 0x1B},
+ {0xF00E, 0xFF},
+ {0xF00F, 0x01},
+ {0xF010, 0x00},
+ {0xF011, 0x02},
+ {0xF012, 0xFF},
+ {0xF013, 0x01},
+ {0xF014, 0x00},
+ {0xF015, 0x02},
+ {0xF01B, 0xEF},
+ {0xF01C, 0x01},
+ {0xF01D, 0x0f},
+ {0xF01E, 0x02},
+ {0xF01F, 0x5A},
+ {0xF020, 0x00},
+ {0xF025, 0xDE},
+ {0xF026, 0x00},
+ {0xF027, 0x0A},
+ {0xF028, 0x03},
+ {0xF029, 0x5A},
+ {0xF02A, 0x00},
+ {0xF047, 0x00},
+ {0xF054, 0x0},
+ {0xF055, 0x0},
+ {0xF077, 0x02},
+ {0xF1E6, 0x00},
+
+};
diff --git a/api/Philips_TD1316_Script.h b/api/Philips_TD1316_Script.h
new file mode 100644
index 0000000..7d934c1
--- /dev/null
+++ b/api/Philips_TD1316_Script.h
@@ -0,0 +1,78 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)Philips_TD1316_EXT_EVB.cpp
+*
+* Copyright 2005 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 5
+#define VERSION2 66
+#define VERSION3 12
+#define VERSION4 0
+
+
+
+#define TD1316_ADDRESS 0xC0
+#define TD1316_SCRIPTSETLENGTH 0x00000001
+
+Word TD1316_scriptSets[] = {
+0x32
+};
+
+ValueSet TD1316_scripts[] = {
+ {0x0046, 0x04},
+ {0x0057, 0x00},
+ {0x0058, 0x01},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x006e, 0x01},
+ {0x0071, 0x0A},
+ {0x0072, 0x02},
+ {0x0074, 0x01},
+ {0x0079, 0x01},
+ {0x0093, 0x00},
+ {0x0094, 0x00},
+ {0x0095, 0x00},
+ {0x0096, 0x00},
+ {0x009b, 0x3C},
+ {0x009c, 0x40},
+ {0x00b3, 0x01},
+ {0x00c3, 0x0},
+ {0x00c4, 0x0},
+ {0x00c7, 0x52},
+ {0xF007, 0x00},
+ {0xF00A, 0x1B},
+ {0xF00B, 0x1B},
+ {0xF00C, 0x1B},
+ {0xF00D, 0x1B},
+ {0xF00E, 0xFF},
+ {0xF00F, 0x01},
+ {0xF010, 0x00},
+ {0xF011, 0x02},
+ {0xF012, 0xFF},
+ {0xF013, 0x01},
+ {0xF014, 0x00},
+ {0xF015, 0x02},
+ {0xF01B, 0xEF},
+ {0xF01C, 0x01},
+ {0xF01D, 0x0f},
+ {0xF01E, 0x02},
+ {0xF01F, 0x5A},
+ {0xF020, 0x00},
+ {0xF025, 0xDE},
+ {0xF026, 0x00},
+ {0xF027, 0x0A},
+ {0xF028, 0x03},
+ {0xF029, 0x5A},
+ {0xF02A, 0x00},
+ {0xF047, 0x00},
+ {0xF054, 0x0},
+ {0xF055, 0x0},
+ {0xF077, 0x02},
+ {0xF1E6, 0x00},
+
+};
diff --git a/api/Philips_TDA18271.c b/api/Philips_TDA18271.c
new file mode 100644
index 0000000..d047f00
--- /dev/null
+++ b/api/Philips_TDA18271.c
@@ -0,0 +1,139 @@
+/**
+ * @(#)Philips_TDA18271.cpp
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2007 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "TDA18271Local.h"
+#include "TDA18271.h"
+#include "Philips_TDA18271_Script.h"
+
+
+extern tmTDA18271Object_t gTDA18271Instance[];
+
+Dword Standard_computeFcw (
+ IN Demodulator* demodulator,
+ IN Long adcFrequency, /** ADC frequency (Hz) */
+ IN Long ifFrequency, /** IF frequency (Hz) */
+ IN Bool inversion, /** RF spectrum inversion */
+ OUT Dword* fcw
+);
+
+
+Dword TDA18271_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword TDA18271_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword TDA18271_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+
+ Dword error = Error_NO_ERROR;
+ tmbslTuParam_t param;
+ Byte fc = 1;
+ Long IfFreq;
+ Dword fcw;
+ Byte buffer[3];
+ Ganymede* ganymede;
+ ganymede = (Ganymede*) demodulator;
+
+ gTDA18271Instance[0].AFAInfo.demodulator = demodulator;
+ gTDA18271Instance[0].AFAInfo.chip = chip;
+
+ param.systemFunc.SY_Read = SY_Read;
+ param.systemFunc.SY_Write = SY_Write;
+ param.uHwAddress = 0xC0ul;
+
+
+ switch(bandwidth)
+ {
+ case 6000:
+ IfFreq = 3300000;
+ fc = tmDigital_TV_ATSC_6MHz;
+ break;
+ case 7000:
+ IfFreq = 3800000;
+ fc = tmDigital_TV_DVBT_7MHz;
+ break;
+ case 8000:
+ IfFreq = 4300000;
+ fc = tmDigital_TV_DVBT_8MHz;
+ break;
+ default:
+ error = Error_INVALID_BW;
+ goto exit;
+ }
+
+ error = Standard_computeFcw (demodulator, (Long) ganymede->adcFrequency, IfFreq, ganymede->tunerDescription->inversion, &fcw);
+ if (error) goto exit;
+ ganymede->fcw = fcw;
+
+ buffer[0] = (Byte) (fcw & 0x000000FF);
+ buffer[1] = (Byte) ((fcw & 0x0000FF00) >> 8);
+ buffer[2] = (Byte) ((fcw & 0x007F0000) >> 16);
+ error = Standard_writeRegisters (demodulator, chip, Processor_OFDM, bfs_fcw_7_0, bfs_fcw_22_16 - bfs_fcw_7_0 + 1, buffer);
+ if (error) goto exit;
+
+
+ error = tmbslTDA18271Init(0, param);
+ if (error) goto exit;
+
+ error = tmbslTDA18271SetConfig(0, STANDARDMODE, fc);
+ if (error) goto exit;
+
+ error = tmbslTDA18271SetRf(0, frequency * 1000);
+
+exit:
+ return (error);
+}
+
+
+TunerDescription tuner_TDA18271 = {
+ TDA18271_open,
+ TDA18271_close,
+ TDA18271_set,
+ TDA18271_scripts,
+ TDA18271_scriptSets,
+ TDA18271_ADDRESS, /** tuner i2c address */
+ 1, /** length of tuner register address */
+ 0, /** tuner if */
+ (Bool)True, /** spectrum inverse */
+ 0x1B, /** tuner id */
+};
diff --git a/api/Philips_TDA18271.h b/api/Philips_TDA18271.h
new file mode 100644
index 0000000..67fad51
--- /dev/null
+++ b/api/Philips_TDA18271.h
@@ -0,0 +1,60 @@
+/**
+ * @(#)Philips_TDA18271.h
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2007 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __Philips_TDA18271_H__
+#define __Philips_TDA18271_H__
+
+
+#define TDA18271_VER_MAJOR 2
+#define TDA18271_VER_MINOR 0
+
+extern TunerDescription tuner_TDA18271;
+
+
+/**
+ *
+ */
+Dword TDA18271_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword TDA1821_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword TDA1821_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Philips_TDA18271_C2.c b/api/Philips_TDA18271_C2.c
new file mode 100644
index 0000000..e751c46
--- /dev/null
+++ b/api/Philips_TDA18271_C2.c
@@ -0,0 +1,128 @@
+/**
+ * @(#)Philips_TDA18271_C2_INT.cpp
+ *
+ * Copyright 2007 Afatech, Inc. All rights reserved.
+ */
+
+
+
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+
+#include "TDA18271local_C2.h"
+#include "TDA18271_C2.h"
+#include "Philips_TDA18271_C2_Script.h"
+
+
+extern tmTDA18271Object_t_C2 gTDA18271Instance_C2[];
+
+Dword Standard_computeFcw (
+ IN Demodulator* demodulator,
+ IN Long adcFrequency, /** ADC frequency (Hz) */
+ IN Long ifFrequency, /** IF frequency (Hz) */
+ IN Bool inversion, /** RF spectrum inversion */
+ OUT Dword* fcw
+);
+
+Dword TDA18271_C2_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+ tmbslTuParam_t_C2 param;
+
+ gTDA18271Instance_C2[0].AFAInfo_C2.demodulator = demodulator;
+ gTDA18271Instance_C2[0].AFAInfo_C2.chip = chip;
+
+ param.systemFunc.SY_Read_C2 = SY_Read_C2;
+ param.systemFunc.SY_Write_C2 = SY_Write_C2;
+ param.uHwAddress = 0xC0ul;
+
+ error = tmbslTDA18271Init_C2(0, param);
+ if (error) goto exit;
+
+ error = TDA18271Init_C2(0);
+ if (error) goto exit;
+
+exit:
+ return (error);
+}
+
+Dword TDA18271_C2_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+Dword TDA18271_C2_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+
+ Dword error = Error_NO_ERROR;
+ Byte fc = 1;
+ Long IfFreq;
+ Dword fcw;
+ Byte buffer[3];
+ Ganymede* ganymede;
+ ganymede = (Ganymede*) demodulator;
+
+ switch(bandwidth)
+ {
+ case 6000:
+ IfFreq = 3300000;
+ fc = tmDigital_TV_ATSC_6MHz_C2;
+ break;
+ case 7000:
+ IfFreq = 3500000;
+ fc = tmDigital_TV_DVBT_7MHz_C2;
+ break;
+ case 8000:
+ IfFreq = 4000000;
+ fc = tmDigital_TV_DVBT_8MHz_C2;
+ break;
+ default:
+ error = Error_INVALID_BW;
+ goto exit;
+ }
+
+ error = Standard_computeFcw (demodulator, (Long) ganymede->adcFrequency, IfFreq, ganymede->tunerDescription->inversion, &fcw);
+ if (error) goto exit;
+ ganymede->fcw = fcw;
+
+ buffer[0] = (Byte) (fcw & 0x000000FF);
+ buffer[1] = (Byte) ((fcw & 0x0000FF00) >> 8);
+ buffer[2] = (Byte) ((fcw & 0x007F0000) >> 16);
+ error = Standard_writeRegisters (demodulator, chip, Processor_OFDM, bfs_fcw_7_0, bfs_fcw_22_16 - bfs_fcw_7_0 + 1, buffer);
+ if (error) goto exit;
+
+ error = tmbslTDA18271SetConfig_C2(0, STANDARDMODE_C2, fc);
+ if (error) goto exit;
+
+ error = tmbslTDA18271SetRf_C2(0, frequency * 1000);
+
+exit:
+ return (error);
+}
+
+
+TunerDescription tuner_TDA18271_C2 = {
+ TDA18271_C2_open,
+ TDA18271_C2_close,
+ TDA18271_C2_set,
+ TDA18271_C2_scripts,
+ TDA18271_C2_scriptSets,
+ TDA18271_C2_ADDRESS, /** tuner i2c address */
+ 1, /** length of tuner register address */
+ 0, /** tuner if */
+ (Bool)True, /** spectrum inverse */
+ 0x2B, /** tuner id */
+};
diff --git a/api/Philips_TDA18271_C2.h b/api/Philips_TDA18271_C2.h
new file mode 100644
index 0000000..051d641
--- /dev/null
+++ b/api/Philips_TDA18271_C2.h
@@ -0,0 +1,42 @@
+/**
+ * @(#)Philips_TDA18271_C2.h
+ *
+ * Copyright 2007 Afatech, Inc. All rights reserved.
+ */
+#ifndef __Philips_TDA18271_C2_H__
+#define __Philips_TDA18271_C2_H__
+
+#define TDA18271_C2_VER_MAJOR 1
+#define TDA18271_C2_VER_MINOR 0
+
+extern TunerDescription tuner_TDA18271_C2;
+
+
+/**
+ *
+ */
+Dword TDA18271_C2_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword TDA18271_C2_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword TDA18271_C2_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Philips_TDA18271_C2_Askey.c b/api/Philips_TDA18271_C2_Askey.c
new file mode 100644
index 0000000..cc8722e
--- /dev/null
+++ b/api/Philips_TDA18271_C2_Askey.c
@@ -0,0 +1,128 @@
+/**
+ * @(#)Philips_TDA18271_C2_Askey_INT.cpp
+ *
+ * Copyright 2007 Afatech, Inc. All rights reserved.
+ */
+
+
+
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+
+#include "TDA18271local_C2_Askey.h"
+#include "TDA18271_C2_Askey.h"
+#include "Philips_TDA18271_C2_Askey_Script.h"
+
+
+extern tmTDA18271Object_t_C2_Askey gTDA18271Instance_C2_Askey[];
+
+Dword Standard_computeFcw (
+ IN Demodulator* demodulator,
+ IN Long adcFrequency, /** ADC frequency (Hz) */
+ IN Long ifFrequency, /** IF frequency (Hz) */
+ IN Bool inversion, /** RF spectrum inversion */
+ OUT Dword* fcw
+);
+
+Dword TDA18271_C2_Askey_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+ tmbslTuParam_t_C2_Askey param;
+
+ gTDA18271Instance_C2_Askey[0].AFAInfo_C2_Askey.demodulator = demodulator;
+ gTDA18271Instance_C2_Askey[0].AFAInfo_C2_Askey.chip = chip;
+
+ param.systemFunc.SY_Read_C2_Askey = SY_Read_C2_Askey;
+ param.systemFunc.SY_Write_C2_Askey = SY_Write_C2_Askey;
+ param.uHwAddress = 0xC0ul;
+
+ error = tmbslTDA18271Init_C2_Askey(0, param);
+ if (error) goto exit;
+
+ error = TDA18271Init_C2_Askey(0);
+ if (error) goto exit;
+
+exit:
+ return (error);
+}
+
+Dword TDA18271_C2_Askey_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+Dword TDA18271_C2_Askey_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+
+ Dword error = Error_NO_ERROR;
+ Byte fc = 1;
+ Long IfFreq;
+ Dword fcw;
+ Byte buffer[3];
+ Ganymede* ganymede;
+ ganymede = (Ganymede*) demodulator;
+
+ switch(bandwidth)
+ {
+ case 6000:
+ IfFreq = 3300000;
+ fc = tmDigital_TV_ATSC_6MHz_C2_Askey;
+ break;
+ case 7000:
+ IfFreq = 3500000;
+ fc = tmDigital_TV_DVBT_7MHz_C2_Askey;
+ break;
+ case 8000:
+ IfFreq = 4000000;
+ fc = tmDigital_TV_DVBT_8MHz_C2_Askey;
+ break;
+ default:
+ error = Error_INVALID_BW;
+ goto exit;
+ }
+
+ error = Standard_computeFcw (demodulator, (Long) ganymede->adcFrequency, IfFreq, ganymede->tunerDescription->inversion, &fcw);
+ if (error) goto exit;
+ ganymede->fcw = fcw;
+
+ buffer[0] = (Byte) (fcw & 0x000000FF);
+ buffer[1] = (Byte) ((fcw & 0x0000FF00) >> 8);
+ buffer[2] = (Byte) ((fcw & 0x007F0000) >> 16);
+ error = Standard_writeRegisters (demodulator, chip, Processor_OFDM, bfs_fcw_7_0, bfs_fcw_22_16 - bfs_fcw_7_0 + 1, buffer);
+ if (error) goto exit;
+
+ error = tmbslTDA18271SetConfig_C2_Askey(0, STANDARDMODE_C2_Askey, fc);
+ if (error) goto exit;
+
+ error = tmbslTDA18271SetRf_C2_Askey(0, frequency * 1000);
+
+exit:
+ return (error);
+}
+
+
+TunerDescription tuner_TDA18271_C2_Askey = {
+ TDA18271_C2_Askey_open,
+ TDA18271_C2_Askey_close,
+ TDA18271_C2_Askey_set,
+ TDA18271_C2_Askey_scripts,
+ TDA18271_C2_Askey_scriptSets,
+ TDA18271_C2_Askey_ADDRESS, /** tuner i2c address */
+ 1, /** length of tuner register address */
+ 0, /** tuner if */
+ (Bool)True, /** spectrum inverse */
+ 0x2F, /** tuner id */
+};
diff --git a/api/Philips_TDA18271_C2_Askey.h b/api/Philips_TDA18271_C2_Askey.h
new file mode 100644
index 0000000..63e745a
--- /dev/null
+++ b/api/Philips_TDA18271_C2_Askey.h
@@ -0,0 +1,42 @@
+/**
+ * @(#)Philips_TDA18271_C2_Askey.h
+ *
+ * Copyright 2007 Afatech, Inc. All rights reserved.
+ */
+#ifndef __Philips_TDA18271_C2_Askey_H__
+#define __Philips_TDA18271_C2_Askey_H__
+
+#define TDA18271_C2_Askey_VER_MAJOR 2
+#define TDA18271_C2_Askey_VER_MINOR 0
+
+extern TunerDescription tuner_TDA18271_C2_Askey;
+
+
+/**
+ *
+ */
+Dword TDA18271_C2_Askey_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword TDA18271_C2_Askey_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword TDA18271_C2_Askey_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Philips_TDA18271_C2_Askey_Script.h b/api/Philips_TDA18271_C2_Askey_Script.h
new file mode 100644
index 0000000..8be9340
--- /dev/null
+++ b/api/Philips_TDA18271_C2_Askey_Script.h
@@ -0,0 +1,58 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)Philips_TDA18271_C2_Askey_EXT_EVB.cpp
+*
+* Copyright 2005 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 5
+#define VERSION2 15
+#define VERSION3 9
+#define VERSION4 0
+
+
+
+#define TDA18271_C2_Askey_ADDRESS 0xC0
+#define TDA18271_C2_Askey_SCRIPTSETLENGTH 0x00000001
+
+Word TDA18271_C2_Askey_scriptSets[] = {
+0x1E
+};
+
+ValueSet TDA18271_C2_Askey_scripts[] = {
+ {0x0046, 0x1B},
+ {0x0057, 0x01},
+ {0x0058, 0x01},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x0068, 0x96},
+ {0x0071, 0x05},
+ {0x0072, 0x02},
+ {0x0074, 0x01},
+ {0x0079, 0x01},
+ {0x0093, 0x00},
+ {0x0094, 0x00},
+ {0x0095, 0x00},
+ {0x0096, 0x00},
+ {0x00b3, 0x01},
+ {0x00c1, 0x01},
+ {0x00c2, 0x00},
+ {0xF007, 0x00},
+ {0xF00C, 0x19},
+ {0xF00D, 0x1A},
+ {0xF012, 0xda},
+ {0xF013, 0x00},
+ {0xF014, 0x00},
+ {0xF015, 0x02},
+ {0xF01F, 0x82},
+ {0xF020, 0x00},
+ {0xF029, 0x82},
+ {0xF02A, 0x00},
+ {0xF077, 0x02},
+ {0xF1E6, 0x00},
+
+};
diff --git a/api/Philips_TDA18271_C2_Script.h b/api/Philips_TDA18271_C2_Script.h
new file mode 100644
index 0000000..12e86b1
--- /dev/null
+++ b/api/Philips_TDA18271_C2_Script.h
@@ -0,0 +1,58 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)Philips_TDA18271_C2_EXT_EVB.cpp
+*
+* Copyright 2005 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 5
+#define VERSION2 15
+#define VERSION3 9
+#define VERSION4 0
+
+
+
+#define TDA18271_C2_ADDRESS 0xC0
+#define TDA18271_C2_SCRIPTSETLENGTH 0x00000001
+
+Word TDA18271_C2_scriptSets[] = {
+0x1E
+};
+
+ValueSet TDA18271_C2_scripts[] = {
+ {0x0046, 0x1B},
+ {0x0057, 0x01},
+ {0x0058, 0x01},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x0068, 0x96},
+ {0x0071, 0x05},
+ {0x0072, 0x02},
+ {0x0074, 0x01},
+ {0x0079, 0x01},
+ {0x0093, 0x00},
+ {0x0094, 0x00},
+ {0x0095, 0x00},
+ {0x0096, 0x00},
+ {0x00b3, 0x01},
+ {0x00c1, 0x01},
+ {0x00c2, 0x00},
+ {0xF007, 0x00},
+ {0xF00C, 0x19},
+ {0xF00D, 0x1A},
+ {0xF012, 0xda},
+ {0xF013, 0x00},
+ {0xF014, 0x00},
+ {0xF015, 0x02},
+ {0xF01F, 0x82},
+ {0xF020, 0x00},
+ {0xF029, 0x82},
+ {0xF02A, 0x00},
+ {0xF077, 0x02},
+ {0xF1E6, 0x00},
+
+};
diff --git a/api/Philips_TDA18271_Script.h b/api/Philips_TDA18271_Script.h
new file mode 100644
index 0000000..53cd755
--- /dev/null
+++ b/api/Philips_TDA18271_Script.h
@@ -0,0 +1,57 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)Philips_TDA18271_EXT_EVB.cpp
+*
+* Copyright 2005 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 5
+#define VERSION2 66
+#define VERSION3 12
+#define VERSION4 0
+
+
+
+#define TDA18271_ADDRESS 0xC0
+#define TDA18271_SCRIPTSETLENGTH 0x00000001
+
+Word TDA18271_scriptSets[] = {
+0x1D
+};
+
+ValueSet TDA18271_scripts[] = {
+ {0x0046, 0x1B},
+ {0x0057, 0x01},
+ {0x0058, 0x01},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x0071, 0x05},
+ {0x0072, 0x02},
+ {0x0074, 0x01},
+ {0x0079, 0x01},
+ {0x0093, 0x00},
+ {0x0094, 0x00},
+ {0x0095, 0x00},
+ {0x0096, 0x00},
+ {0x00b3, 0x01},
+ {0x00c3, 0x01},
+ {0x00c4, 0x00},
+ {0xF007, 0x00},
+ {0xF00C, 0x19},
+ {0xF00D, 0x1A},
+ {0xF012, 0xda},
+ {0xF013, 0x00},
+ {0xF014, 0x00},
+ {0xF015, 0x02},
+ {0xF01F, 0x82},
+ {0xF020, 0x00},
+ {0xF029, 0x82},
+ {0xF02A, 0x00},
+ {0xF077, 0x02},
+ {0xF1E6, 0x00},
+
+};
diff --git a/api/Philips_TDA18291HN.c b/api/Philips_TDA18291HN.c
new file mode 100644
index 0000000..160349e
--- /dev/null
+++ b/api/Philips_TDA18291HN.c
@@ -0,0 +1,166 @@
+/**
+ * @(#)Philips_TDA18291HN.cpp
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2007 Afatech, Inc. All rights reserved.
+ *
+ */
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "TDA18291local.h"
+#include "TDA18291.h"
+#include "Philips_TDA18291HN_Script.h"
+
+
+extern tm18291object_t g18291Instance[];
+
+
+Dword TDA18291HN_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+
+ /** U/V band switch **/
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh2_o, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh2_on, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh2_en, 1);
+ if (error) goto exit;
+
+ /** Set registers for driving power **/
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_on, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_en, 1);
+ if (error) goto exit;
+
+exit:
+ return (error);
+}
+
+
+Dword TDA18291HN_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+
+ /** Set registers for driving power **/
+ /** set to GPI **/
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_on, 0);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_en, 0);
+ if (error) goto exit;
+
+exit:
+ return (error);
+}
+
+
+Dword TDA18291HN_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ Dword error = Error_NO_ERROR;
+ tmbslTuParam_t param;
+ Byte fc = 1;
+
+ if (bandwidth == 5000)
+ {
+ fc = CUTOFF_FREQ_FOR_5MHZ;
+ }
+ else if (bandwidth == 6000)
+ {
+ fc = CUTOFF_FREQ_FOR_6MHZ;
+ }
+ else if (bandwidth == 7000)
+ {
+ fc = CUTOFF_FREQ_FOR_7MHZ;
+ }
+ else if (bandwidth == 8000)
+ {
+ fc = CUTOFF_FREQ_FOR_8MHZ;
+ }
+ else
+ {
+ error = Error_INVALID_BW;
+ goto exit;
+ }
+
+ if (frequency > 300000)
+ {
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh2_o, 1);
+ if (error) goto exit;
+ }
+ else
+ {
+ error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh2_o, 0);
+ if (error) goto exit;
+ }
+
+ g18291Instance[0].AFAInfo.demodulator = demodulator;
+ g18291Instance[0].AFAInfo.chip = chip;
+
+ param.systemFunc.SY_Read = SY_Read2;
+ param.systemFunc.SY_Write = SY_Write2;
+ param.uHwAddress = 0xC0ul;
+
+ /** Init tuner */
+ error = tmbslTDA18291Init(0, param);
+ if (error) goto exit;
+
+ /** Select board */
+ error = tmbslTDA18291SetConfig(0, BOARD, OM5768_BOARD_DEF);
+ if (error) goto exit;
+
+ /** Set cut-off frequency */
+ error = tmbslTDA18291SetConfig(0, SET_CUTOFF_FREQ, fc);
+ if (error) goto exit;
+
+ /** Set frequency */
+ error = tmbslTDA18291SetRf(0, frequency * 1000);
+ if (error) goto exit;
+
+exit:
+ return (error);
+
+}
+
+
+TunerDescription tuner_TDA18291HN = {
+ TDA18291HN_open,
+ TDA18291HN_close,
+ TDA18291HN_set,
+ TDA18291HN_scripts,
+ TDA18291HN_scriptSets,
+ TDA18291HN_ADDRESS, /** tuner i2c address */
+ 1, /** length of tuner register address */
+ 0, /** tuner if */
+ (Bool)True, /** spectrum inverse */
+ 0x22, /** tuner id */
+}; \ No newline at end of file
diff --git a/api/Philips_TDA18291HN.h b/api/Philips_TDA18291HN.h
new file mode 100644
index 0000000..82cec29
--- /dev/null
+++ b/api/Philips_TDA18291HN.h
@@ -0,0 +1,60 @@
+/**
+ * @(#)Philips_TDA18291HN.h
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2007 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __Philips_TDA18291HN_H__
+#define __Philips_TDA18291HN_H__
+
+
+#define TDA18291HN_VER_MAJOR 2
+#define TDA18291HN_VER_MINOR 0
+
+extern TunerDescription tuner_TDA18291HN;
+
+
+/**
+ *
+ */
+Dword TDA18291HN_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword TDA18291HN_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword TDA18291HN_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Philips_TDA18291HN_Script.h b/api/Philips_TDA18291HN_Script.h
new file mode 100644
index 0000000..03222fe
--- /dev/null
+++ b/api/Philips_TDA18291HN_Script.h
@@ -0,0 +1,84 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)Philips_TDA18291_EXT_EVB.cpp
+*
+* Copyright 2005 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 5
+#define VERSION2 66
+#define VERSION3 12
+#define VERSION4 0
+
+
+#define TDA18291HN_ADDRESS 0xC0
+#define TDA18291HN_SCRIPTSETLENGTH 0x00000001
+
+Word TDA18291HN_scriptSets[] = {
+0x39
+};
+
+ValueSet TDA18291HN_scripts[] = {
+ {0x0046, 0x22},
+ {0x0057, 0x00},
+ {0x0058, 0x01},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x0068, 0x5b},
+ {0x006d, 0x00},
+ {0x006e, 0x01},
+ {0x0071, 0x05},
+ {0x0072, 0x02},
+ {0x0074, 0x00},
+ {0x0075, 0x3},
+ {0x0076, 0x02},
+ {0x0077, 0x01},
+ {0x0078, 0x00},
+ {0x0079, 0x00},
+ {0x007a, 0x7F},
+ {0x007b, 0x01},
+ {0x0093, 0x00},
+ {0x0094, 0x01},
+ {0x0095, 0x02},
+ {0x0096, 0x01},
+ {0x0098, 0x0A},
+ {0x009b, 0x09},
+ {0x009c, 0x80},
+ {0x009d, 0x1A},
+ {0x00a4, 0x10},
+ {0x00ad, 0x33},
+ {0x00b3, 0x00},
+ {0x00b7, 0x5b},
+ {0x00b8, 0x73},
+ {0x00ba, 0x00},
+ {0x00c3, 0x01},
+ {0x00c4, 0x01},
+ {0x00c7, 0x5B},
+ {0xF007, 0x0},
+ {0xF00A, 0x19},
+ {0xF00B, 0x1A},
+ {0xF00C, 0x19},
+ {0xF00D, 0x1A},
+ {0xF00E, 0x00},
+ {0xF00F, 0x00},
+ {0xF010, 0x00},
+ {0xF011, 0x00},
+ {0xF012, 0x00},
+ {0xF013, 0x00},
+ {0xF014, 0x00},
+ {0xF015, 0x00},
+ {0xF01F, 0x83},
+ {0xF020, 0x00},
+ {0xF029, 0x83},
+ {0xF02A, 0x00},
+ {0xF047, 0x0},
+ {0xF054, 0x0},
+ {0xF055, 0x0},
+ {0xF077, 0x01},
+ {0xF1E6, 0x01},
+
+};
diff --git a/api/TDA18271.c b/api/TDA18271.c
new file mode 100644
index 0000000..d47f1f0
--- /dev/null
+++ b/api/TDA18271.c
@@ -0,0 +1,2933 @@
+//-----------------------------------------------------------------------------
+// $Header:
+// (C) Copyright 2001 NXP Semiconductors, All rights reserved
+//
+// This source code and any compilation or derivative thereof is the sole
+// property of NXP Corporation and is provided pursuant to a Software
+// License Agreement. This code is the proprietary information of NXP
+// Corporation and is confidential in nature. Its use and dissemination by
+// any party other than NXP Corporation is strictly limited by the
+// confidential information provisions of the Agreement referenced above.
+//-----------------------------------------------------------------------------
+// FILE NAME: tmbslTDA18271.c
+//
+// DESCRIPTION: Function for the Hybrid silicon tuner TDA18271
+//
+// DOCUMENT REF:
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+
+//-----------------------------------------------------------------------------
+// Standard include files:
+//-----------------------------------------------------------------------------
+//
+
+//-----------------------------------------------------------------------------
+// Project include files:
+//-----------------------------------------------------------------------------
+//
+//#include "tmbslTuner.h"
+#include "TDA18271Local.h"
+
+#include "standard.h"
+
+//-----------------------------------------------------------------------------
+// Types and defines:
+//-----------------------------------------------------------------------------
+//
+
+//-----------------------------------------------------------------------------
+// Global data:
+//-----------------------------------------------------------------------------
+//
+//
+// default instance
+tmTDA18271Object_t gTDA18271Instance[] =
+{
+ {
+ {
+ NULL, /* Demodulator */
+ 0x01 /* chip */
+ },
+
+ False, // init (instance initialization default)
+
+ 0, // uHwAddress (HwId default value)
+
+ { // SystemFunc (system functions default addresses)
+ NULL,
+ NULL,
+ },
+ tmPowerSleepMode, // default power state
+ tmDigital_TV_ATSC_6MHz, // default standard mode
+ { // Config
+ CUSTOM_BOARD_DEF, // uBoard [default Configuration structure]
+ OM57XX_STANDARD_DEF, // uStandard
+ 545000000, // uRF
+ 3250000, // uIF
+ 6000000, // uBW
+ 0, // uTMMODE
+ 1, // uPLMODE
+ 0, // uMapName
+ 0, // uMAPCOLUMN
+ 0, // uMAPROW
+ 0x6F, // uPROTOCOLSTEP
+ 0x051E3C00, // uPROTOCOLWAIT
+ { // IR_MEAS_Map uRF_Max
+ {30000000},
+ {200000000},
+ {600000000},
+ {865000000},
+ },
+ { // IR_CAL_Map uRF, uIR_GStep
+ {72000000, 0x03},
+ {408000000, 0x03},
+ {808000000, 0x03},
+ },
+ { // BP_FILTER_Map uRF_Max, uBP_Filter
+ {62000000, 0x00},
+ {84000000, 0x01},
+ {100000000, 0x02},
+ {140000000, 0x03},
+ {170000000, 0x04},
+ {180000000, 0x05},
+ {865000000, 0x06},
+ },
+ { // RF_BAND_Map uRF_Max, uRF_Band
+ {47900000, 0x00},
+ {61100000, 0x01},
+ {152600000, 0x02},
+ {164700000, 0x03},
+ {203500000, 0x04},
+ {457800000, 0x05},
+ {865000000, 0x06},
+ },
+ { // GAIN_TAPER_Map uRF_Max, uGain_Taper
+ {45400000, 0x1F},
+ {45800000, 0x1E},
+ {46200000, 0x1D},
+ {46700000, 0x1C},
+ {47100000, 0x1B},
+ {47500000, 0x1A},
+ {47900000, 0x19},
+ {49600000, 0x17},
+ {51200000, 0x16},
+ {52900000, 0x15},
+ {54500000, 0x14},
+ {56200000, 0x13},
+ {57800000, 0x12},
+ {59500000, 0x11},
+ {61100000, 0x10},
+ {67600000, 0x0D},
+ {74200000, 0x0C},
+ {80700000, 0x0B},
+ {87200000, 0x0A},
+ {93800000, 0x09},
+ {100300000, 0x08},
+ {106900000, 0x07},
+ {113400000, 0x06},
+ {119900000, 0x05},
+ {126500000, 0x04},
+ {133000000, 0x03},
+ {139500000, 0x02},
+ {146100000, 0x01},
+ {152600000, 0x00},
+ {154300000, 0x1F},
+ {156100000, 0x1E},
+ {157800000, 0x1D},
+ {159500000, 0x1C},
+ {161200000, 0x1B},
+ {163000000, 0x1A},
+ {164700000, 0x19},
+ {170200000, 0x17},
+ {175800000, 0x16},
+ {181300000, 0x15},
+ {186900000, 0x14},
+ {192400000, 0x13},
+ {198000000, 0x12},
+ {203500000, 0x11},
+ {216200000, 0x14},
+ {228900000, 0x13},
+ {241600000, 0x12},
+ {254400000, 0x11},
+ {267100000, 0x10},
+ {279800000, 0x0F},
+ {292500000, 0x0E},
+ {305200000, 0x0D},
+ {317900000, 0x0C},
+ {330700000, 0x0B},
+ {343400000, 0x0A},
+ {356100000, 0x09},
+ {368800000, 0x08},
+ {381500000, 0x07},
+ {394200000, 0x06},
+ {406900000, 0x05},
+ {419700000, 0x04},
+ {432400000, 0x03},
+ {445100000, 0x02},
+ {457800000, 0x01},
+ {476300000, 0x19},
+ {494800000, 0x18},
+ {513300000, 0x17},
+ {531800000, 0x16},
+ {550300000, 0x15},
+ {568900000, 0x14},
+ {587400000, 0x13},
+ {605900000, 0x12},
+ {624400000, 0x11},
+ {642900000, 0x10},
+ {661400000, 0x0F},
+ {679900000, 0x0E},
+ {698400000, 0x0D},
+ {716900000, 0x0C},
+ {735400000, 0x0B},
+ {753900000, 0x0A},
+ {772500000, 0x09},
+ {791000000, 0x08},
+ {809500000, 0x07},
+ {828000000, 0x06},
+ {846500000, 0x05},
+ {865000000, 0x04},
+ },
+ { // RF_CAL_Map uRF_Max, uRFC_Cprog
+ {41000000, 0x1E},
+ {43000000, 0x30},
+ {45000000, 0x43},
+ {46000000, 0x4D},
+ {47000000, 0x54},
+ {47900000, 0x64},
+ {49100000, 0x20},
+ {50000000, 0x22},
+ {51000000, 0x2A},
+ {53000000, 0x32},
+ {55000000, 0x35},
+ {56000000, 0x3C},
+ {57000000, 0x3F},
+ {58000000, 0x48},
+ {59000000, 0x4D},
+ {60000000, 0x58},
+ {61100000, 0x5F},
+ },
+ { // RF_CAL_KMCO_Map uRF_Max uK, uM, UCOAmp
+ {61100000, 7, 1, 3},
+ {350000000, 4, 0, 3},
+ {720000000, 3, 0, 3},
+ {865000000, 4, 0, 3},
+ },
+ { // THERMOMETER_Map uTM_D, uTM_60_92, uTM_92_122
+ {0x00, 0x3C, 0x5C},
+ {0x01, 0x3E, 0x5E},
+ {0x02, 0x42, 0x62},
+ {0x03, 0x40, 0x60},
+ {0x04, 0x4A, 0x6A},
+ {0x05, 0x48, 0x68},
+ {0x06, 0x44, 0x64},
+ {0x07, 0x46, 0x66},
+ {0x08, 0x5A, 0x7A},
+ {0x09, 0x58, 0x78},
+ {0x0A, 0x54, 0x74},
+ {0x0B, 0x56, 0x76},
+ {0x0C, 0x4C, 0x6C},
+ {0x0D, 0x4E, 0x6E},
+ {0x0E, 0x52, 0x72},
+ {0x0F, 0x50, 0x70},
+ },
+ { // CAL_PLL_Map uLO_Max, uPost_Div, uDiv
+ {33000000, 0xDD, 0xD0},
+ {36000000, 0xDC, 0xC0},
+ {40000000, 0xDB, 0xB0},
+ {44000000, 0xDA, 0xA0},
+ {49000000, 0xD9, 0x90},
+ {55000000, 0xD8, 0x80},
+ {63000000, 0xD3, 0x70},
+ {67000000, 0xCD, 0x68},
+ {73000000, 0xCC, 0x60},
+ {80000000, 0xCB, 0x58},
+ {88000000, 0xCA, 0x50},
+ {98000000, 0xC9, 0x48},
+ {110000000, 0xC8, 0x40},
+ {126000000, 0xC3, 0x38},
+ {135000000, 0xBD, 0x34},
+ {147000000, 0xBC, 0x30},
+ {160000000, 0xBB, 0x2C},
+ {176000000, 0xBA, 0x28},
+ {196000000, 0xB9, 0x24},
+ {220000000, 0xB8, 0x20},
+ {252000000, 0xB3, 0x1C},
+ {271000000, 0xAD, 0x1A},
+ {294000000, 0xAC, 0x18},
+ {321000000, 0xAB, 0x16},
+ {353000000, 0xAA, 0x14},
+ {392000000, 0xA9, 0x12},
+ {441000000, 0xA8, 0x10},
+ {505000000, 0xA3, 0x0E},
+ {543000000, 0x9D, 0x0D},
+ {589000000, 0x9C, 0x0C},
+ {642000000, 0x9B, 0x0B},
+ {707000000, 0x9A, 0x0A},
+ {785000000, 0x99, 0x09},
+ {883000000, 0x98, 0x08},
+ {1010000000,0x93, 0x07},
+ },
+ { // MAIN_PLL_Map uLO_Max, uPost_Div, uDiv
+ {32000000, 0x5F, 0xF0},
+ {35000000, 0x5E, 0xE0},
+ {37000000, 0x5D, 0xD0},
+ {41000000, 0x5C, 0xC0},
+ {44000000, 0x5B, 0xB0},
+ {49000000, 0x5A, 0xA0},
+ {54000000, 0x59, 0x90},
+ {61000000, 0x58, 0x80},
+ {65000000, 0x4F, 0x78},
+ {70000000, 0x4E, 0x70},
+ {75000000, 0x4D, 0x68},
+ {82000000, 0x4C, 0x60},
+ {89000000, 0x4B, 0x58},
+ {98000000, 0x4A, 0x50},
+ {109000000, 0x49, 0x48},
+ {123000000, 0x48, 0x40},
+ {131000000, 0x3F, 0x3C},
+ {141000000, 0x3E, 0x38},
+ {151000000, 0x3D, 0x34},
+ {164000000, 0x3C, 0x30},
+ {179000000, 0x3B, 0x2C},
+ {197000000, 0x3A, 0x28},
+ {219000000, 0x39, 0x24},
+ {246000000, 0x38, 0x20},
+ {263000000, 0x2F, 0x1E},
+ {282000000, 0x2E, 0x1C},
+ {303000000, 0x2D, 0x1A},
+ {329000000, 0x2C, 0x18},
+ {359000000, 0x2B, 0x16},
+ {395000000, 0x2A, 0x14},
+ {438000000, 0x29, 0x12},
+ {493000000, 0x28, 0x10},
+ {526000000, 0x1F, 0x0F},
+ {564000000, 0x1E, 0x0E},
+ {607000000, 0x1D, 0x0D},
+ {658000000, 0x1C, 0x0C},
+ {718000000, 0x1B, 0x0B},
+ {790000000, 0x1A, 0x0A},
+ {877000000, 0x19, 0x09},
+ {987000000, 0x18, 0x08},
+ },
+ },
+ 0, // I2CMap
+ 0, // I2CLog
+ 0, // uTickEnd [end tick value]
+ }, // end of 1st element
+ {
+ {
+ NULL, /* Demodulator */
+ 0x01 /* chip */
+ },
+
+ False, // init (instance initialization default)
+
+ 0, // uHwAddress (HwId default value)
+
+ { // SystemFunc (system functions default addresses)
+ NULL,
+ NULL,
+ },
+ tmPowerSleepMode, // default power state
+ tmDigital_TV_ATSC_6MHz, // default standard mode
+ { // Config
+ CUSTOM_BOARD_DEF, // uBoard [default Configuration structure]
+ OM57XX_STANDARD_DEF, // uStandard
+ 545000000, // uRF
+ 3250000, // uIF
+ 6000000, // uBW
+ 0, // uTMMODE
+ 1, // uPLMODE
+ 0, // uMapName
+ 0, // uMAPCOLUMN
+ 0, // uMAPROW
+ 0x6F, // uPROTOCOLSTEP
+ 0x051E3C00, // uPROTOCOLWAIT
+ { // IR_MEAS_Map uRF_Max
+ {30000000},
+ {200000000},
+ {600000000},
+ {865000000},
+ },
+ { // IR_CAL_Map uRF, uIR_GStep
+ {72000000, 0x03},
+ {408000000, 0x03},
+ {808000000, 0x03},
+ },
+ { // BP_FILTER_Map uRF_Max, uBP_Filter
+ {62000000, 0x00},
+ {84000000, 0x01},
+ {100000000, 0x02},
+ {140000000, 0x03},
+ {170000000, 0x04},
+ {180000000, 0x05},
+ {865000000, 0x06},
+ },
+ { // RF_BAND_Map uRF_Max, uRF_Band
+ {47900000, 0x00},
+ {61100000, 0x01},
+ {152600000, 0x02},
+ {164700000, 0x03},
+ {203500000, 0x04},
+ {457800000, 0x05},
+ {865000000, 0x06},
+ },
+ { // GAIN_TAPER_Map uRF_Max, uGain_Taper
+ {45400000, 0x1F},
+ {45800000, 0x1E},
+ {46200000, 0x1D},
+ {46700000, 0x1C},
+ {47100000, 0x1B},
+ {47500000, 0x1A},
+ {47900000, 0x19},
+ {49600000, 0x17},
+ {51200000, 0x16},
+ {52900000, 0x15},
+ {54500000, 0x14},
+ {56200000, 0x13},
+ {57800000, 0x12},
+ {59500000, 0x11},
+ {61100000, 0x10},
+ {67600000, 0x0D},
+ {74200000, 0x0C},
+ {80700000, 0x0B},
+ {87200000, 0x0A},
+ {93800000, 0x09},
+ {100300000, 0x08},
+ {106900000, 0x07},
+ {113400000, 0x06},
+ {119900000, 0x05},
+ {126500000, 0x04},
+ {133000000, 0x03},
+ {139500000, 0x02},
+ {146100000, 0x01},
+ {152600000, 0x00},
+ {154300000, 0x1F},
+ {156100000, 0x1E},
+ {157800000, 0x1D},
+ {159500000, 0x1C},
+ {161200000, 0x1B},
+ {163000000, 0x1A},
+ {164700000, 0x19},
+ {170200000, 0x17},
+ {175800000, 0x16},
+ {181300000, 0x15},
+ {186900000, 0x14},
+ {192400000, 0x13},
+ {198000000, 0x12},
+ {203500000, 0x11},
+ {216200000, 0x14},
+ {228900000, 0x13},
+ {241600000, 0x12},
+ {254400000, 0x11},
+ {267100000, 0x10},
+ {279800000, 0x0F},
+ {292500000, 0x0E},
+ {305200000, 0x0D},
+ {317900000, 0x0C},
+ {330700000, 0x0B},
+ {343400000, 0x0A},
+ {356100000, 0x09},
+ {368800000, 0x08},
+ {381500000, 0x07},
+ {394200000, 0x06},
+ {406900000, 0x05},
+ {419700000, 0x04},
+ {432400000, 0x03},
+ {445100000, 0x02},
+ {457800000, 0x01},
+ {476300000, 0x19},
+ {494800000, 0x18},
+ {513300000, 0x17},
+ {531800000, 0x16},
+ {550300000, 0x15},
+ {568900000, 0x14},
+ {587400000, 0x13},
+ {605900000, 0x12},
+ {624400000, 0x11},
+ {642900000, 0x10},
+ {661400000, 0x0F},
+ {679900000, 0x0E},
+ {698400000, 0x0D},
+ {716900000, 0x0C},
+ {735400000, 0x0B},
+ {753900000, 0x0A},
+ {772500000, 0x09},
+ {791000000, 0x08},
+ {809500000, 0x07},
+ {828000000, 0x06},
+ {846500000, 0x05},
+ {865000000, 0x04},
+ },
+ { // RF_CAL_Map uRF_Max, uRFC_Cprog
+ {41000000, 0x1E},
+ {43000000, 0x30},
+ {45000000, 0x43},
+ {46000000, 0x4D},
+ {47000000, 0x54},
+ {47900000, 0x64},
+ {49100000, 0x20},
+ {50000000, 0x22},
+ {51000000, 0x2A},
+ {53000000, 0x32},
+ {55000000, 0x35},
+ {56000000, 0x3C},
+ {57000000, 0x3F},
+ {58000000, 0x48},
+ {59000000, 0x4D},
+ {60000000, 0x58},
+ {61100000, 0x5F},
+ },
+ { // RF_CAL_KMCO_Map uRF_Max uK, uM, UCOAmp
+ {61100000, 7, 1, 3},
+ {350000000, 4, 0, 3},
+ {720000000, 3, 0, 3},
+ {865000000, 4, 0, 3},
+ },
+ { // THERMOMETER_Map uTM_D, uTM_60_92, uTM_92_122
+ {0x00, 0x3C, 0x5C},
+ {0x01, 0x3E, 0x5E},
+ {0x02, 0x42, 0x62},
+ {0x03, 0x40, 0x60},
+ {0x04, 0x4A, 0x6A},
+ {0x05, 0x48, 0x68},
+ {0x06, 0x44, 0x64},
+ {0x07, 0x46, 0x66},
+ {0x08, 0x5A, 0x7A},
+ {0x09, 0x58, 0x78},
+ {0x0A, 0x54, 0x74},
+ {0x0B, 0x56, 0x76},
+ {0x0C, 0x4C, 0x6C},
+ {0x0D, 0x4E, 0x6E},
+ {0x0E, 0x52, 0x72},
+ {0x0F, 0x50, 0x70},
+ },
+ { // CAL_PLL_Map uLO_Max, uPost_Div, uDiv
+ {33000000, 0xDD, 0xD0},
+ {36000000, 0xDC, 0xC0},
+ {40000000, 0xDB, 0xB0},
+ {44000000, 0xDA, 0xA0},
+ {49000000, 0xD9, 0x90},
+ {55000000, 0xD8, 0x80},
+ {63000000, 0xD3, 0x70},
+ {67000000, 0xCD, 0x68},
+ {73000000, 0xCC, 0x60},
+ {80000000, 0xCB, 0x58},
+ {88000000, 0xCA, 0x50},
+ {98000000, 0xC9, 0x48},
+ {110000000, 0xC8, 0x40},
+ {126000000, 0xC3, 0x38},
+ {135000000, 0xBD, 0x34},
+ {147000000, 0xBC, 0x30},
+ {160000000, 0xBB, 0x2C},
+ {176000000, 0xBA, 0x28},
+ {196000000, 0xB9, 0x24},
+ {220000000, 0xB8, 0x20},
+ {252000000, 0xB3, 0x1C},
+ {271000000, 0xAD, 0x1A},
+ {294000000, 0xAC, 0x18},
+ {321000000, 0xAB, 0x16},
+ {353000000, 0xAA, 0x14},
+ {392000000, 0xA9, 0x12},
+ {441000000, 0xA8, 0x10},
+ {505000000, 0xA3, 0x0E},
+ {543000000, 0x9D, 0x0D},
+ {589000000, 0x9C, 0x0C},
+ {642000000, 0x9B, 0x0B},
+ {707000000, 0x9A, 0x0A},
+ {785000000, 0x99, 0x09},
+ {883000000, 0x98, 0x08},
+ {1010000000,0x93, 0x07},
+ },
+ { // MAIN_PLL_Map uLO_Max, uPost_Div, uDiv
+ {32000000, 0x5F, 0xF0},
+ {35000000, 0x5E, 0xE0},
+ {37000000, 0x5D, 0xD0},
+ {41000000, 0x5C, 0xC0},
+ {44000000, 0x5B, 0xB0},
+ {49000000, 0x5A, 0xA0},
+ {54000000, 0x59, 0x90},
+ {61000000, 0x58, 0x80},
+ {65000000, 0x4F, 0x78},
+ {70000000, 0x4E, 0x70},
+ {75000000, 0x4D, 0x68},
+ {82000000, 0x4C, 0x60},
+ {89000000, 0x4B, 0x58},
+ {98000000, 0x4A, 0x50},
+ {109000000, 0x49, 0x48},
+ {123000000, 0x48, 0x40},
+ {131000000, 0x3F, 0x3C},
+ {141000000, 0x3E, 0x38},
+ {151000000, 0x3D, 0x34},
+ {164000000, 0x3C, 0x30},
+ {179000000, 0x3B, 0x2C},
+ {197000000, 0x3A, 0x28},
+ {219000000, 0x39, 0x24},
+ {246000000, 0x38, 0x20},
+ {263000000, 0x2F, 0x1E},
+ {282000000, 0x2E, 0x1C},
+ {303000000, 0x2D, 0x1A},
+ {329000000, 0x2C, 0x18},
+ {359000000, 0x2B, 0x16},
+ {395000000, 0x2A, 0x14},
+ {438000000, 0x29, 0x12},
+ {493000000, 0x28, 0x10},
+ {526000000, 0x1F, 0x0F},
+ {564000000, 0x1E, 0x0E},
+ {607000000, 0x1D, 0x0D},
+ {658000000, 0x1C, 0x0C},
+ {718000000, 0x1B, 0x0B},
+ {790000000, 0x1A, 0x0A},
+ {877000000, 0x19, 0x09},
+ {987000000, 0x18, 0x08},
+ },
+ },
+ 0, // I2CMap
+ 0, // I2CLog
+ 0, // uTickEnd [end tick value]
+ }, // end of 2nd element
+};
+
+//-----------------------------------------------------------------------------
+// Internal Prototypes:
+//-----------------------------------------------------------------------------
+//
+Bool_
+TDA18271Init (
+ tmUnitSelect_t TunerUnit // I: Tuner Object
+ );
+Bool_
+TDA18271WaitTick(
+ ptmTDA18271Object_t pObj // I: Tuner unit number
+ );
+Bool_
+TDA18271Write(
+ ptmTDA18271Object_t pObj, // I: Tuner unit number
+ UInt8 uSubAddress,// I: sub address
+ UInt8 uNbData // I: nb of data
+ );
+Bool_
+TDA18271Read(
+ ptmTDA18271Object_t pObj, // I: Tuner unit number
+ UInt8 uSubAddress,// I: sub address
+ UInt8 uNbData // I: nb of data
+ );
+Bool_
+TDA18271Wait(
+ ptmTDA18271Object_t pObj, // I: Tuner unit number
+ UInt16 wTime // I: time to wait for
+ );
+Bool_
+TDA18271ShiftLog(
+ ptmTDA18271Object_t pObj, // I: Tuner unit number
+ UInt8 uNbRows // I: nb of lines
+ );
+Bool_
+TDA18271CalcMAINPLL (
+ ptmTDA18271Object_t pObj, // I: tuner Object
+ UInt32 uLO // I: local oscillator frequency in hertz
+ );
+Bool_
+TDA18271CalcCALPLL (
+ ptmTDA18271Object_t pObj, // I: tuner Object
+ UInt32 uLO // I: local oscillator frequency in hertz
+ );
+Bool_
+TDA18271CalcRFFilter (
+ ptmTDA18271Object_t pObj, // I: tuner Object
+ UInt32 uLO // I: local oscillator frequency in hertz
+ );
+tmErrorCode_t
+tmbslTDA18271SetConfig(
+ tmUnitSelect_t TunerUnit, // I: TunerUnit number
+ UInt32 uItemId, // I: Identifier of the item to modify
+ UInt32 uValue // I: Value to set for the config item
+ );
+
+Bool_ SY_Write(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff)
+{
+ Bool_ RetStatus = False;
+ ptmTDA18271Object_t pObj;
+ UInt32 dwError = 0;
+ UInt8 uBuffer[39];
+ UInt32 i;
+
+ for (i = 0; i < uNbData; i++)
+ {
+ uBuffer[i] = (UInt8)pDataBuff[i];
+ }
+
+ pObj = &gTDA18271Instance[0];
+
+ dwError = Standard_writeTunerRegisters (pObj->AFAInfo.demodulator, pObj->AFAInfo.chip,
+ (unsigned short)uSubAddress, (UInt8)uNbData, uBuffer);
+
+ if (dwError == 0) RetStatus = True;
+
+ return (RetStatus);
+};
+
+Bool_ SY_Read(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff)
+{
+ Bool_ RetStatus = False;
+ ptmTDA18271Object_t pObj;
+ UInt32 dwError = 0;
+ UInt8 uBuffer[39];
+ UInt32 i;
+
+ pObj = &gTDA18271Instance[0];
+
+ dwError = Standard_readTunerRegisters (pObj->AFAInfo.demodulator, pObj->AFAInfo.chip, (UInt16)uSubAddress, (UInt8)uNbData, uBuffer);
+
+ if (dwError == 0)
+ {
+ RetStatus = True;
+
+ for (i = 0; i < uNbData; i++)
+ {
+ pDataBuff[i] = (UInt32)uBuffer[i];
+ }
+ }
+
+ return (RetStatus);
+};
+
+
+//-----------------------------------------------------------------------------
+// Exported functions:
+//-----------------------------------------------------------------------------
+//
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271Init:
+//
+// DESCRIPTION: create an instance of a TDA18271 Tuner
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TM_OK
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271Init(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmbslTuParam_t Param // I: setup parameters
+ )
+{
+ ptmTDA18271Object_t pObj;
+
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the max number
+ if (TunerUnit > TDA18271_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ //----------------------
+ // initialize the Object
+ //----------------------
+ // return if already initialized
+ if(gTDA18271Instance[TunerUnit].init == True)
+ return TM_OK;
+
+ // pObj initialisation
+ pObj = &gTDA18271Instance[TunerUnit];
+
+ //----------------
+ // init the Object
+ //----------------
+ // initialize the Object by default values
+ pObj->uHwAddress = Param.uHwAddress;
+ pObj->SystemFunc = Param.systemFunc;
+ pObj->init = True;
+
+ return TM_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271DeInit:
+//
+// DESCRIPTION: destroy an instance of a TDA18271 Tuner
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271DeInit (
+ tmUnitSelect_t TunerUnit // I: Tuner unit number
+ )
+{
+ ptmTDA18271Object_t pObj;
+
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ // test the Object
+ if (gTDA18271Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ // pObj initialisation
+ pObj = &gTDA18271Instance[TunerUnit];
+
+ //-------------------------
+ // De-initialize the Object
+ //-------------------------
+ pObj->init = False;
+
+ return TM_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271GetSWVersion:
+//
+// DESCRIPTION: Return the version of this device
+//
+// RETURN: TM_OK
+//
+// NOTES: Values defined in the tmTDA18271Local.h file
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271GetSWVersion (
+ ptmSWVersion_t pSWVersion // I: Receives SW Version
+ )
+{
+ pSWVersion->compatibilityNr = TDA18271_BSL_COMP_NUM;
+ pSWVersion->majorVersionNr = TDA18271_BSL_MAJOR_VER;
+ pSWVersion->minorVersionNr = TDA18271_BSL_MINOR_VER;
+
+ return TM_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271SetPowerState:
+//
+// DESCRIPTION: Set the power state of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271SetPowerState (
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmTDA18271PowerState_t powerState // I: Power state of this device
+ )
+{
+ ptmTDA18271Object_t pObj;
+
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ // test the object
+ if (gTDA18271Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ // pObj initialisation
+ pObj = &gTDA18271Instance[TunerUnit];
+
+ switch (powerState)
+ {
+ case tmPowerNormalMode:
+ // set SM bits
+ pObj->I2CMap.SM = 0x00;
+ pObj->I2CMap.SM_LT = 0x00;
+ pObj->I2CMap.SM_XT = 0x00;
+ break;
+
+ case tmPowerSleepMode:
+ // set SM bits
+ pObj->I2CMap.SM = 0x01;
+ pObj->I2CMap.SM_LT = 0x01;
+ pObj->I2CMap.SM_XT = 0x01;
+ break;
+
+ case tmPowerStandbyWith16MHz:
+ // set SM bits
+ pObj->I2CMap.SM = 0x01;
+ pObj->I2CMap.SM_LT = 0x01;
+ pObj->I2CMap.SM_XT = 0x00;
+ break;
+
+ case tmPowerStandbyWith16MHzAndLoopThrough:
+ // set SM bits
+ pObj->I2CMap.SM = 0x01;
+ pObj->I2CMap.SM_LT = 0x00;
+ pObj->I2CMap.SM_XT = 0x00;
+ break;
+
+ case tmPowerStandbyWithLoopThrough:
+ // set SM bits
+ pObj->I2CMap.SM = 0x01;
+ pObj->I2CMap.SM_LT = 0x00;
+ pObj->I2CMap.SM_XT = 0x01;
+ break;
+
+ default:
+ // power state not supported
+ return TM_ERR_NOT_SUPPORTED;
+ }
+
+ // store powerstate
+ pObj->curPowerState = powerState;
+
+ return TM_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271GetPowerState:
+//
+// DESCRIPTION: Get the power state of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271GetPowerState (
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmTDA18271PowerState_t *pPowerState // O: Power state of this device
+ )
+{
+ ptmTDA18271Object_t pObj;
+
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ // test the object
+ if (gTDA18271Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ // pObj initialisation
+ pObj = &gTDA18271Instance[TunerUnit];
+
+ //----------------------
+ // get the value
+ //----------------------
+ if ((pObj->I2CMap.SM == 0x00) && (pObj->I2CMap.SM_LT == 0x00) && (pObj->I2CMap.SM_XT == 0x00))
+ *pPowerState = tmPowerNormalMode;
+ else if ((pObj->I2CMap.SM == 0x01) && (pObj->I2CMap.SM_LT == 0x01) && (pObj->I2CMap.SM_XT == 0x01))
+ *pPowerState = tmPowerSleepMode;
+ else if ((pObj->I2CMap.SM == 0x01) && (pObj->I2CMap.SM_LT == 0x01) && (pObj->I2CMap.SM_XT == 0x00))
+ *pPowerState = tmPowerStandbyWith16MHz;
+ else if ((pObj->I2CMap.SM == 0x01) && (pObj->I2CMap.SM_LT == 0x00) && (pObj->I2CMap.SM_XT == 0x00))
+ *pPowerState = tmPowerStandbyWith16MHzAndLoopThrough;
+ else if ((pObj->I2CMap.SM == 0x01) && (pObj->I2CMap.SM_LT == 0x00) && (pObj->I2CMap.SM_XT == 0x01))
+ *pPowerState = tmPowerStandbyWithLoopThrough;
+ else
+ *pPowerState = tmPowerNotSupported;
+
+ return TM_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271SetStandardMode:
+//
+// DESCRIPTION: Set the standard mode of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271SetStandardMode (
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmTDA18271StandardMode_t StandardMode // I: Standard mode of this device
+ )
+{
+ ptmTDA18271Object_t pObj;
+
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ // test the object
+ if (gTDA18271Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ // pObj initialisation
+ pObj = &gTDA18271Instance[TunerUnit];
+
+ // set uIF & Std & FM_RFn
+ switch (StandardMode)
+ {
+ case tmDigital_TV_ATSC_6MHz:
+ // set IF frequency
+ pObj->Config.uIF = 3250000;
+ // set Bandwith value
+ pObj->Config.uBW = 6000000;
+ // set Std bit
+ pObj->I2CMap.Std = 0x1C;
+ // set FM_RFn bit
+ pObj->I2CMap.FM_RFn = 0x00;
+ break;
+
+ case tmDigital_TV_DVBT_7MHz:
+ // set IF frequency
+ pObj->Config.uIF = 3800000;
+ // set Bandwith value
+ pObj->Config.uBW = 7000000;
+ // set Std bit
+ pObj->I2CMap.Std = 0x1D;
+ // set FM_RFn bit
+ pObj->I2CMap.FM_RFn = 0x00;
+ break;
+
+ case tmDigital_TV_DVBT_8MHz:
+ // set IF frequency
+ pObj->Config.uIF = 4300000;
+ // set Bandwith value
+ pObj->Config.uBW = 8000000;
+ // set Std bit
+ pObj->I2CMap.Std = 0x1E;
+ // set FM_RFn bit
+ pObj->I2CMap.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_TV_MN:
+ // set IF frequency
+ pObj->Config.uIF = 5750000;
+ // set Bandwith value
+ pObj->Config.uBW = 6000000;
+ // set Std bit
+ pObj->I2CMap.Std = 0x0D;
+ // set FM_RFn bit
+ pObj->I2CMap.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_TV_B:
+ // set IF frequency
+ pObj->Config.uIF = 6750000;
+ // set Bandwith value
+ pObj->Config.uBW = 7000000;
+ // set Std bit
+ pObj->I2CMap.Std = 0x0E;
+ // set FM_RFn bit
+ pObj->I2CMap.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_TV_GH:
+ case tmAnalog_TV_I:
+ case tmAnalog_TV_DK:
+ case tmAnalog_TV_L:
+ // set IF frequency
+ pObj->Config.uIF = 7750000;
+ // set Bandwith value
+ pObj->Config.uBW = 8000000;
+ // set Std bit
+ pObj->I2CMap.Std = 0x0F;
+ // set FM_RFn bit
+ pObj->I2CMap.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_TV_LL:
+ // set IF frequency
+ pObj->Config.uIF = 1250000;
+ // set Bandwith value
+ pObj->Config.uBW = 1500000;
+ // set Std bit
+ pObj->I2CMap.Std = 0x0F;
+ // set FM_RFn bit
+ pObj->I2CMap.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_FM_Radio:
+ // set IF frequency
+ pObj->Config.uIF = 1250000;
+ // set Bandwith value
+ pObj->Config.uBW = 250000;
+ // set Std bit
+ pObj->I2CMap.Std = 0x18; /* FM radio in digital mode */
+ // set FM_RFn bit
+ pObj->I2CMap.FM_RFn = 0x01;
+ break;
+
+ case tmDigital_TV_QAM_6MHz:
+ // set IF frequency
+ pObj->Config.uIF = 4000000;
+ // set Bandwith value
+ pObj->Config.uBW = 6000000;
+ // set Std bit
+ pObj->I2CMap.Std = 0x1D;
+ // set FM_RFn bit
+ pObj->I2CMap.FM_RFn = 0x00;
+ break;
+
+ case tmDigital_TV_QAM_8MHz:
+ // set IF frequency
+ pObj->Config.uIF = 5000000;
+ // set Bandwith value
+ pObj->Config.uBW = 8000000;
+ // set Std bit
+ pObj->I2CMap.Std = 0x1F;
+ // set FM_RFn bit
+ pObj->I2CMap.FM_RFn = 0x00;
+ break;
+ }
+
+ // set IF_Level & IF_notch & RFAGC_Top & IFAGC_Top
+ switch (StandardMode)
+ {
+ case tmDigital_TV_ATSC_6MHz:
+ case tmDigital_TV_DVBT_7MHz:
+ case tmDigital_TV_DVBT_8MHz:
+ case tmDigital_TV_QAM_6MHz:
+ case tmDigital_TV_QAM_8MHz:
+ // set IF_Level
+ pObj->I2CMap.IF_Level = 0x01;
+ // set IF_notch
+ pObj->I2CMap.IF_notch = 0x01;
+ // set RFAGC_Top & IFAGC_Top
+ pObj->I2CMap.EXTENDED_BYTE_22 = 0x37;
+ break;
+
+ case tmAnalog_TV_MN:
+ case tmAnalog_TV_B:
+ case tmAnalog_TV_GH:
+ case tmAnalog_TV_I:
+ case tmAnalog_TV_DK:
+ case tmAnalog_TV_L:
+ case tmAnalog_TV_LL:
+ case tmAnalog_FM_Radio:
+ // set IF_Level
+ pObj->I2CMap.IF_Level = 0x00;
+ // set IF_notch
+ pObj->I2CMap.IF_notch = 0x00;
+ // set RFAGC_Top & IFAGC_Top
+ pObj->I2CMap.EXTENDED_BYTE_22 = 0x2C;
+ break;
+
+ default:
+ // standard mode not supported
+ return TM_ERR_NOT_SUPPORTED;
+ }
+
+ // store standard mode
+ pObj->StandardMode = StandardMode;
+
+ return TM_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271GetStandardMode:
+//
+// DESCRIPTION: Get the standard mode of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271GetStandardMode (
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmTDA18271StandardMode_t *pStandardMode // O: Standard mode of this device
+ )
+{
+ ptmTDA18271Object_t pObj;
+
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ // test the object
+ if (gTDA18271Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ // pObj initialisation
+ pObj = &gTDA18271Instance[TunerUnit];
+
+ //----------------------
+ // get the value
+ //----------------------
+ *pStandardMode = pObj->StandardMode;
+
+ return TM_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271Write:
+//
+// DESCRIPTION: Write in the Tuner.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES: uIndex: IN parameter containing the HW Sub Address as specified in
+// the datasheet (i.e. looks like 0xX0)
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271Write (
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32 uIndex, // I: Start index to write
+ UInt32 uNbBytes, // I: Number of bytes to write
+ UInt32* puBytes // I: Pointer on an array of bytes
+)
+{
+
+ UInt32 uCounter;
+ UInt8* pI2CMap;
+
+ ptmTDA18271Object_t pObj;
+
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ // test the Object
+ if (gTDA18271Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ // test the parameters. uIndex is: 0x0X
+ if ((uIndex + uNbBytes) > TDA18271_NB_BYTES)
+ return TMBSL_ERR_TUNER_BAD_PARAMETER;
+
+ // pObj & pI2CMap initialisation
+ pObj = &gTDA18271Instance[TunerUnit];
+ pI2CMap = &(pObj->I2CMap.ID_BYTE) + uIndex;
+
+ //--------------
+ // set the value
+ //--------------
+ // save the values written in the Tuner
+ for (uCounter = 0; uCounter < uNbBytes; uCounter++){
+ *pI2CMap = (UInt8)(puBytes[uCounter]);
+ pI2CMap ++;
+ }
+
+ // write in the Tuner
+ if (TDA18271Write(pObj,(UInt8)(uIndex),(UInt8)(uNbBytes)) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ return TM_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271WriteBit:
+//
+// DESCRIPTION: Write in the Tuner.
+//
+// RETURN: TM_ERR_NOT_SUPPORTED
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271WriteBit (
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32 uIndex, // I: Start index to write
+ UInt32 uBitMask, // I: bit mask
+ UInt32 uBitValue // I: bit value
+)
+{
+ return TM_ERR_NOT_SUPPORTED;
+}
+
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271Read:
+//
+// DESCRIPTION: Read in the Tuner.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TMBSL_ERR_TUNER_BAD_PARAMETER
+// TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271Read (
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32 uIndex, // I: Start index to read
+ UInt32 uNbBytes, // I: Number of bytes to read
+ UInt32* puBytes // I: Pointer on an array of bytes
+)
+{
+ UInt32 uCounter;
+ UInt8* pI2CMap;
+
+ ptmTDA18271Object_t pObj;
+
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ // test the Object
+ if (gTDA18271Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ // test the Object
+ if (uNbBytes > TDA18271_NB_BYTES)
+ return TMBSL_ERR_TUNER_BAD_PARAMETER;
+
+ // test uIndex
+ if (uIndex == -1)
+ uIndex = 0;
+
+ // pObj & pI2CMap initialisation
+ pObj = &gTDA18271Instance[TunerUnit];
+ pI2CMap = &(pObj->I2CMap.ID_BYTE) + uIndex;
+
+ //--------------
+ // get the value
+ //--------------
+ // read from the Tuner
+ if (TDA18271Read(pObj,(UInt8)(uIndex),(UInt8)(uNbBytes)) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // copy readen values to puBytes
+ for (uCounter = 0; uCounter < uNbBytes; uCounter++)
+ {
+ *puBytes = (UInt32)(*pI2CMap);
+ pI2CMap ++;
+ puBytes ++;
+ }
+ return TM_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271SetConfig:
+//
+// DESCRIPTION: Set the Config of the TDA18271
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_ERR_NOT_SUPPORTED
+// TMBSL_ERR_TUNER_BAD_PARAMETER
+// TM_OK
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271SetConfig(
+ tmUnitSelect_t TunerUnit, // I: TunerUnit number
+ UInt32 uItemId, // I: Identifier of the item to modify
+ UInt32 uValue // I: Value to set for the Config item
+ )
+{
+ ptmTDA18271Object_t pObj;
+ UInt8* pI2CMap;
+ UInt32* pDataMap;
+
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ // test the Object
+ if (gTDA18271Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ // pObj initialisation
+ pObj = &gTDA18271Instance[TunerUnit];
+
+ //--------------
+ // set the value
+ //--------------
+ switch((tmTDA18271cfgIndex_t)uItemId)
+ {
+ case BOARD:
+ switch (uValue & 0xffff0000)
+ {
+ case OM5776_BOARD_DEF:
+ case OM5780_BOARD_DEF:
+ case OM5782_BOARD_DEF:
+ case OM5764_BOARD_DEF:
+ /*pObj->Config.uXTOUT = 1;
+ pObj->I2CMap.XTout_ON = 1;*/
+ break;
+ case OM5770C2_BOARD_DEF & 0xffff0000:
+ case OM5775_BOARD_DEF:
+ case OM5777_BOARD_DEF:
+ case CUSTOM_BOARD_DEF:
+ // do nothing more than setting the default values
+ break;
+ default:
+ // board not supported
+ return TM_ERR_NOT_SUPPORTED;
+ }
+ // store board
+ gTDA18271Instance[TunerUnit].Config.uBoard = uValue;
+ break;
+
+ case FEINIT:
+ TDA18271Init(TunerUnit);
+ break;
+
+ case RF:
+ // set RF frequency
+ pObj->Config.uRF = uValue;
+ break;
+
+ case IF:
+ // set IF frequency
+ pObj->Config.uIF = uValue;
+ break;
+
+ case TMMODE:
+ // set TMMODE
+ pObj->Config.uTMMODE = uValue;
+ // set TM_ON
+ pObj->I2CMap.TM_ON = (UInt8)uValue;
+ // write byte THERMO_BYTE
+ if (TDA18271Write(pObj,0x01,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+ break;
+
+ case PLMODE:
+ // set uPLMODE
+ pObj->Config.uPLMODE = uValue;
+ // set Dis_Power_level
+ pObj->I2CMap.Dis_Power_level = (UInt8)uValue;
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+ break;
+
+ case POWERSTATE:
+ // set POWERSTATE
+ tmbslTDA18271SetPowerState (TunerUnit, (tmTDA18271PowerState_t)uValue);
+ // set CAL_Mode to normal mode
+ pObj->I2CMap.CAL_Mode = 0x00;
+ // write byte EASY_PROG_BYTE_3
+ if (TDA18271Write(pObj,0x05,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+ /*// wait 20 ms
+ if (TDA18271Wait(pObj,20) == False)
+ return TM_FALSE;*/
+ break;
+
+ case STANDARDMODE:
+ // set STANDARDMODE
+ tmbslTDA18271SetStandardMode (TunerUnit, (tmTDA18271StandardMode_t)uValue);
+ // set CAL_Mode to normal mode
+ pObj->I2CMap.CAL_Mode = 0x00;
+ // write bytes EASY_PROG_BYTE_3 & EASY_PROG_BYTE_4
+ if (TDA18271Write(pObj,0x05,2) != True)
+ return TMBSL_ERR_IIC_ERR;
+ // write MAIN_POST_DIV_BYTE
+ if (TDA18271Write(pObj,0x0C,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+ // write EXTENDED_BYTE_22
+ if (TDA18271Write(pObj,0x25,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+ break;
+
+ case XTOUT:
+ // set XTout_ON
+ pObj->I2CMap.XTout_ON = (UInt8)(uValue) >> 1;
+ // set Xtout_400mV
+ pObj->I2CMap.Xtout_400mV = (UInt8)(uValue) & 0x01;
+ // write byte EASY_PROG_BYTE_4
+ if (TDA18271Write(pObj,0x06,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+ break;
+
+ case IFLEVEL:
+ // set IF_Level
+ pObj->I2CMap.IF_Level = (UInt8)uValue;
+ // write byte EASY_PROG_BYTE_4
+ if (TDA18271Write(pObj,0x06,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+ break;
+
+ case EXTENDEDREG:
+ // set Extended_Reg
+ pObj->I2CMap.Extended_Reg = (UInt8)uValue;
+ // write byte EASY_PROG_BYTE_5
+ if (TDA18271Write(pObj,0x07,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+ break;
+
+ case MAPNAME:
+ // set map name
+ pObj->Config.uMapName = uValue;
+ break;
+
+ case MAPCOLUMN:
+ // set map x
+ pObj->Config.uMAPCOLUMN = uValue;
+ break;
+
+ case MAPROW:
+ // set map y
+ pObj->Config.uMAPROW = uValue;
+ break;
+
+ case MAPVALUE:
+ // set pointer on wanted cell
+ switch (pObj->Config.uMapName)
+ {
+ case tmTDA18271_IR_MEAS_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_IR_MEAS_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_IR_MEAS_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.IR_MEAS_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_IR_CAL_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_IR_CAL_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_IR_CAL_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.IR_CAL_Map[pObj->Config.uMAPROW].uRF);
+ break;
+
+ case tmTDA18271_BP_FILTER_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_BP_FILTER_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_BP_FILTER_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.BP_FILTER_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_BAND_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_BAND_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_RF_BAND_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.RF_BAND_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_GAIN_TAPER_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_GAIN_TAPER_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_GAIN_TAPER_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.GAIN_TAPER_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.RF_CAL_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_KMCO_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_KMCO_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_KMCO_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.RF_CAL_KMCO_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_THERMOMETER_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_THERMOMETER_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_THERMOMETER_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.THERMOMETER_Map[pObj->Config.uMAPROW].uTM_D);
+ break;
+
+ case tmTDA18271_CAL_PLL_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_CAL_PLL_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_CAL_PLL_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.CAL_PLL_Map[pObj->Config.uMAPROW].uLO_Max);
+ break;
+
+ case tmTDA18271_MAIN_PLL_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_MAIN_PLL_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_MAIN_PLL_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.MAIN_PLL_Map[pObj->Config.uMAPROW].uLO_Max);
+ break;
+
+ case tmTDA18271_I2C_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > 0) || (pObj->Config.uMAPROW > TDA18271_NB_BYTES - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pI2CMap initialisation
+ pI2CMap = &(pObj->I2CMap.ID_BYTE) + pObj->Config.uMAPROW;
+ break;
+ }
+
+ // set cell value
+ if (pObj->Config.uMapName == tmTDA18271_I2C_Map)
+ *(pI2CMap + (UInt8)pObj->Config.uMAPCOLUMN) = (UInt8)uValue;
+ else
+ *(pDataMap + pObj->Config.uMAPCOLUMN) = uValue;
+ break;
+
+ case PROTOCOLSTEP:
+ // set channel configuration protocol steps to execute
+ pObj->Config.uPROTOCOLSTEP = uValue;
+ break;
+
+ case PROTOCOLWAIT:
+ // set channel configuration protocol wait times
+ pObj->Config.uPROTOCOLWAIT = uValue;
+ break;
+
+ case READINIT:
+ // activate extended register access
+ // read bytes 0x00 to 0x26
+#if (0)
+ if (TDA18271Read (pObj,0x00,39) != True)
+ return TMBSL_ERR_IIC_ERR;
+#else
+ if (TDA18271Read (pObj,0x00,16) != True)
+ return TMBSL_ERR_IIC_ERR;
+#endif
+ break;
+
+ }
+ return TM_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271GetConfig:
+//
+// DESCRIPTION: Get the Config of the TDA18271
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271GetConfig(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32 uItemId, // I: Identifier of the item to get value
+ UInt32* puValue // I: Address of the variable to output the Config item value
+ )
+{
+ UInt32 uCounter = 0;
+
+ ptmTDA18271Object_t pObj;
+ UInt8* pI2CMap;
+ UInt32* pDataMap;
+ UInt32 uByte=0;
+
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ // test the Object
+ if (gTDA18271Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ // pObj initialisation
+ pObj = &gTDA18271Instance[TunerUnit];
+
+ //--------------
+ // get the value
+ //--------------
+ switch((tmTDA18271cfgIndex_t)uItemId)
+ {
+ case BOARD:
+ // get board
+ *puValue = pObj->Config.uBoard;
+ break;
+
+ case RF:
+ // get RF frequency
+ *puValue = pObj->Config.uRF;
+ break;
+
+ case IF:
+ // get IF frequency
+ *puValue = pObj->Config.uIF;
+ break;
+
+ case STATUSBYTE:
+ // read bytes 0x00 to 0x0F
+ if (TDA18271Read (pObj, 0x00, 16) != True)
+ return TMBSL_ERR_IIC_ERR;
+ break;
+
+ case GETNBOFUNIT:
+ *puValue = TDA18271_MAX_UNITS;
+ break;
+
+ case ID:
+ // get ID value
+ *puValue = pObj->I2CMap.ID;
+ break;
+
+ case POR:
+ // get POR value
+ *puValue = pObj->I2CMap.POR;
+ break;
+
+ case MAINLOCK:
+ // get MAINLOCK value
+ *puValue = pObj->I2CMap.MAIN_Lock;
+ break;
+
+ case TMMODE:
+ // get TMMODE value
+ *puValue = pObj->Config.uTMMODE;
+ break;
+
+ case TMVALUE:
+ // test IRCALOK value
+ if (pObj->I2CMap.IR_CAL_OK != 1)
+ return TMBSL_ERR_IIC_ERR;
+
+ // set CAL_Mode to thermo mode
+ pObj->I2CMap.CAL_Mode = 0x03;
+ // write byte EASY_PROG_BYTE_4
+ if (TDA18271Write(pObj,0x06,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // read byte THERMO_BYTE
+ if (TDA18271Read (pObj, 0x00, 16) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // set & write TM_Range
+ if (((pObj->I2CMap.TM_D == 0x00) && (pObj->I2CMap.TM_Range == 0x01)) || ((pObj->I2CMap.TM_D == 0x08) && (pObj->I2CMap.TM_Range == 0x00)))
+ {
+ pObj->I2CMap.TM_Range = !(pObj->I2CMap.TM_Range);
+ // write byte THERMO_BYTE
+ if (TDA18271Write(pObj,0x01,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+ // wait 10ms
+ if (TDA18271Wait(pObj,10) == False)
+ return TM_FALSE;
+ // read byte THERMO_BYTE
+ if (TDA18271Read (pObj, 0x00, 16) != True)
+ return TMBSL_ERR_IIC_ERR;
+ }
+
+ // set & write CAL_Mode to normal mode
+ pObj->I2CMap.CAL_Mode = 0x00;
+ // write byte EASY_PROG_BYTE_4
+ if (TDA18271Write(pObj,0x06,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // search for TMVALUE corresponding to TM_D
+ uCounter = 0;
+ do uCounter ++;
+ while (pObj->I2CMap.TM_D > pObj->Config.THERMOMETER_Map[uCounter - 1].uTM_D && uCounter < TDA18271_THERMOMETER_NB_ROWS);
+ // get TMVALUE value
+ if (pObj->I2CMap.TM_Range == 0x00)
+ *puValue = (UInt8)pObj->Config.THERMOMETER_Map[uCounter - 1].uTM_60_92;
+ else
+ *puValue = (UInt8)pObj->Config.THERMOMETER_Map[uCounter - 1].uTM_92_122;
+
+ break;
+
+ case PLMODE:
+ // get PLMODE value
+ *puValue = pObj->Config.uPLMODE;
+ break;
+
+ case PLAGC1:
+ // get PLAGC1 value
+ *puValue = 3 * (2 + ((pObj->I2CMap.Power_Level_7_to_0 & 0x7F) >> 5));
+ break;
+
+ case PLAGC2:
+ // get PLAGC2 value
+ *puValue = 3 * (2 + (3 - (pObj->I2CMap.Power_Level_8 << 1 | pObj->I2CMap.Power_Level_7_to_0 >> 7)));
+ break;
+
+ case PLRFAGC:
+ // get PLRFAGC value (PLRFAGC = PLRFAGC - 11)
+ if (((pObj->I2CMap.EXTENDED_BYTE_22 & 0x7F) >> 4) < 5)
+ *puValue = 11 + (92 + 2 * ((pObj->I2CMap.EXTENDED_BYTE_22 & 0x7F) >> 4)) - (103 - (pObj->I2CMap.Power_Level_7_to_0 & 0x1F));
+ else
+ *puValue = 11 + 102 - (103 - (pObj->I2CMap.Power_Level_7_to_0 & 0x1F));
+ // limit PLRFAGC value
+ if (*puValue > 33)
+ *puValue = 33;
+ else if (*puValue < 1)
+ *puValue = 1;
+ break;
+
+ case RFCALOK:
+ // get RFCALOK value
+ *puValue = pObj->I2CMap.RF_CAL_OK;
+ break;
+
+ case IRCALOK:
+ // get IRCALOK value
+ *puValue = pObj->I2CMap.IR_CAL_OK;
+ break;
+
+ case BPFILTER:
+ // get BPFILTER value
+ *puValue = pObj->I2CMap.BP_Filter;
+ break;
+
+ case RFBAND:
+ // get RFBAND value
+ *puValue = pObj->I2CMap.RF_Band;
+ break;
+
+ case GAINTAPER:
+ // get GAINTAPER value
+ *puValue = pObj->I2CMap.Gain_Taper;
+ break;
+
+ case POWERSTATE:
+ // get POWERSTATE
+ tmbslTDA18271GetPowerState(TunerUnit,(ptmTDA18271PowerState_t)puValue);
+ break;
+
+ case LPFC:
+ // get LPFC value
+ *puValue = pObj->I2CMap.Std & 0x03;
+ break;
+
+ case FMRFN:
+ // get FMRFN value
+ *puValue = pObj->I2CMap.FM_RFn;
+ break;
+
+ case STANDARDMODE:
+ // get STANDARDMODE
+ tmbslTDA18271GetStandardMode(TunerUnit,(ptmTDA18271StandardMode_t)puValue);
+ break;
+
+ case XTOUT:
+ // get XTout_ON & Xtout_400mV value
+ *puValue = (UInt32)(pObj->I2CMap.XTout_ON << 1 | pObj->I2CMap.Xtout_400mV);
+ break;
+
+ case IFLEVEL:
+ // get IFLEVEL value
+ *puValue = pObj->I2CMap.IF_Level;
+ break;
+
+ case EXTENDEDREG:
+ // get EXTENDEDREG value
+ *puValue = pObj->I2CMap.Extended_Reg;
+ break;
+
+ case CALPOSTDIV:
+ // get CALPOSTDIV value
+ *puValue = pObj->I2CMap.CAL_POST_DIV_BYTE & 0x7F;
+ break;
+
+ case CALDIV:
+ // get CALDIV value
+ *puValue = pObj->I2CMap.CAL_Div_22_to_16 << 16 | pObj->I2CMap.CAL_Div_15_to_8 << 8 | pObj->I2CMap.CAL_Div_7_to_0;
+ break;
+
+ case MAINPOSTDIV:
+ // get MAINPOSTDIV value
+ *puValue = pObj->I2CMap.MAIN_Post_Div;
+ break;
+
+ case MAINDIV:
+ // get MAINDIV value
+ *puValue = pObj->I2CMap.MAIN_Div_22_to_16 << 16 | pObj->I2CMap.MAIN_Div_15_to_8 << 8 | pObj->I2CMap.MAIN_Div_7_to_0;
+ break;
+
+ case MAPVALUE:
+ // set pointer on wanted cell
+ switch (pObj->Config.uMapName)
+ {
+ case tmTDA18271_IR_MEAS_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_IR_MEAS_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_IR_MEAS_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.IR_MEAS_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_IR_CAL_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_IR_CAL_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_IR_CAL_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.IR_CAL_Map[pObj->Config.uMAPROW].uRF);
+ break;
+
+ case tmTDA18271_BP_FILTER_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_BP_FILTER_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_BP_FILTER_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.BP_FILTER_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_BAND_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_BAND_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_RF_BAND_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.RF_BAND_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_GAIN_TAPER_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_GAIN_TAPER_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_GAIN_TAPER_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.GAIN_TAPER_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.RF_CAL_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_KMCO_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_KMCO_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_KMCO_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.RF_CAL_KMCO_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_THERMOMETER_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_THERMOMETER_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_THERMOMETER_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.THERMOMETER_Map[pObj->Config.uMAPROW].uTM_D);
+ break;
+
+ case tmTDA18271_CAL_PLL_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_CAL_PLL_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_CAL_PLL_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.CAL_PLL_Map[pObj->Config.uMAPROW].uLO_Max);
+ break;
+
+ case tmTDA18271_MAIN_PLL_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_MAIN_PLL_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18271_MAIN_PLL_NB_ROWS - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pDataMap initialisation
+ pDataMap = &(pObj->Config.MAIN_PLL_Map[pObj->Config.uMAPROW].uLO_Max);
+ break;
+
+ case tmTDA18271_I2C_Map:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > 0) || (pObj->Config.uMAPROW > TDA18271_NB_BYTES - 1))
+ return TM_ERR_NOT_SUPPORTED;
+ // pI2CMap initialisation
+ pI2CMap = &(pObj->I2CMap.ID_BYTE) + pObj->Config.uMAPROW;
+ break;
+ }
+ // get cell value
+ if (pObj->Config.uMapName == tmTDA18271_I2C_Map)
+ *puValue = *(pI2CMap + pObj->Config.uMAPCOLUMN);
+ else
+ *puValue = *(pDataMap + pObj->Config.uMAPCOLUMN);
+ break;
+
+ // backdoor functions
+ case IDENTITY:
+ pObj->SystemFunc.SY_Read( pObj->uHwAddress, TDA18271_IDENTITY_IND, 1, &uByte);
+ /*if (uByte != 0x82)
+ *puValue = False;
+ else
+ *puValue = True;
+ */
+ switch (pObj->Config.uBoard & 0xffff0000)
+ {
+ case 0x57750000:
+ *puValue = True;
+ break;
+ default:
+ *puValue = False;
+ break;
+ }
+ break;
+
+ }
+ return TM_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271SetRf:
+//
+// DESCRIPTION: Calculate i2c I2CMap & write in TDA18271
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TMBSL_ERR_TUNER_BAD_PARAMETER
+// TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271SetRf(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32 uRF // I: RF frequency in hertz
+ )
+{
+ UInt16 uCounter = 0;
+ UInt8 uIRMeasCounter = 0;
+
+ ptmTDA18271Object_t pObj;
+
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ // test the Object
+ if (gTDA18271Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ // pObj initialisation
+ pObj = &gTDA18271Instance[TunerUnit];
+
+ // Config.uRF update
+ pObj->Config.uRF = uRF;
+
+ //----------------------
+ // read IR_CAL_OK bit value
+ //----------------------
+ if (((pObj->Config.uPROTOCOLSTEP & 0x40) >> 6) == 0x01)
+ {
+ // read bytes 0x00 to 0x0F
+ if (TDA18271Read (pObj,0x00,16) != True)
+ return TMBSL_ERR_IIC_ERR;
+ }
+
+ //----------------------
+ // power on reset initialisation
+ // test IR_CAL_OK bit value to determine if initialisation is needed
+ //----------------------
+ if ((pObj->I2CMap.IR_CAL_OK != 1 && ((pObj->Config.uPROTOCOLSTEP & 0x20) >> 5) == 0x01) || ((pObj->Config.uPROTOCOLSTEP & 0x10) >> 4) == 0x01)
+ {
+ //----------------------
+ // I2C map initialisation
+ //----------------------
+ // set & write all bytes
+ pObj->I2CMap.ID_BYTE = 0x83;
+ pObj->I2CMap.THERMO_BYTE = 0x08;
+ pObj->I2CMap.POWER_LEVEL_BYTE = 0x80;
+ pObj->I2CMap.EASY_PROG_BYTE_1 = 0xC6;
+ pObj->I2CMap.EASY_PROG_BYTE_2 = 0xDF;
+ pObj->I2CMap.EASY_PROG_BYTE_3 = 0x16; // SM = '0', AGC_Low_BW = 1;
+ pObj->I2CMap.EASY_PROG_BYTE_4 = 0x60;
+ pObj->I2CMap.EASY_PROG_BYTE_5 = 0x80; // Extended_Reg = '1'
+ pObj->I2CMap.CAL_POST_DIV_BYTE = 0x80; // Enable_Bus_Cal = '1', IR_GStep = '0'
+ pObj->I2CMap.CAL_DIV_BYTE_1 = 0x00;
+ pObj->I2CMap.CAL_DIV_BYTE_2 = 0x00;
+ pObj->I2CMap.CAL_DIV_BYTE_3 = 0x00;
+ pObj->I2CMap.MAIN_POST_DIV_BYTE = 0x00;
+ pObj->I2CMap.MAIN_DIV_BYTE_1 = 0x00;
+ pObj->I2CMap.MAIN_DIV_BYTE_2 = 0x00;
+ pObj->I2CMap.MAIN_DIV_BYTE_3 = 0x00;
+ pObj->I2CMap.EXTENDED_BYTE_1 = 0xFF;
+ pObj->I2CMap.EXTENDED_BYTE_2 = 0x01;
+ pObj->I2CMap.EXTENDED_BYTE_3 = 0x84;
+ pObj->I2CMap.EXTENDED_BYTE_4 = 0x41;
+ pObj->I2CMap.EXTENDED_BYTE_5 = 0x01; // HCvco[1] = '0'
+ pObj->I2CMap.EXTENDED_BYTE_6 = 0x84;
+ pObj->I2CMap.EXTENDED_BYTE_7 = 0x40; // Cal_Pulse_src = '125�s' // Decrease CAL pll locking time for IR calibration success
+ pObj->I2CMap.EXTENDED_BYTE_8 = 0x07; // IR_Loop = '8' & IR_Target = '62dB'
+ pObj->I2CMap.EXTENDED_BYTE_9 = 0x00;
+ pObj->I2CMap.EXTENDED_BYTE_10 = 0x00;
+ pObj->I2CMap.EXTENDED_BYTE_11 = 0x96; // CID_EN_Filt1M='1', HCvco[0]='1', CID_CkSpeed='250KHz/4�s', CID_CkDigSpeed='4MHz'
+ pObj->I2CMap.EXTENDED_BYTE_12 = 0x0F; // AGC12_Speed = '250 KHz'
+ pObj->I2CMap.EXTENDED_BYTE_13 = 0xC1; // RFC_Ckspeed = '62.5 KHz'
+ pObj->I2CMap.EXTENDED_BYTE_14 = 0x00;
+ pObj->I2CMap.EXTENDED_BYTE_15 = 0x8F;
+ pObj->I2CMap.EXTENDED_BYTE_16 = 0x00;
+ pObj->I2CMap.EXTENDED_BYTE_17 = 0x00;
+ pObj->I2CMap.EXTENDED_BYTE_18 = 0x00;
+ pObj->I2CMap.EXTENDED_BYTE_19 = 0x00;
+ pObj->I2CMap.EXTENDED_BYTE_20 = 0x20; // Force_Lock = '1'
+ pObj->I2CMap.EXTENDED_BYTE_21 = 0x33;
+ pObj->I2CMap.EXTENDED_BYTE_22 = 0x48;
+ pObj->I2CMap.EXTENDED_BYTE_23 = 0xB0;
+#if (0)
+ if (TDA18271Write(pObj,0x00,39) != True)
+ return TMBSL_ERR_IIC_ERR;
+#else
+ if (TDA18271Write(pObj,0,16) != True)
+ return TMBSL_ERR_IIC_ERR;
+ if (TDA18271Write(pObj,16,16) != True)
+ return TMBSL_ERR_IIC_ERR;
+ if (TDA18271Write(pObj,32,7) != True)
+ return TMBSL_ERR_IIC_ERR;
+#endif
+
+ //----------------------
+ // AGC1 & AGC2 gains setup
+ //----------------------
+ // AGC1_Gain_do
+ // update & write EXTENDED_BYTE_17
+ pObj->I2CMap.EXTENDED_BYTE_17 = 0x00; // set gain_do address
+ if (TDA18271Write(pObj,0x20,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+ pObj->I2CMap.EXTENDED_BYTE_17 = 0x03; // keep gain_do address, set gain_do
+ if (TDA18271Write(pObj,0x20,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // AGC1_Gain_up
+ // update & write EXTENDED_BYTE_17
+ pObj->I2CMap.EXTENDED_BYTE_17 = 0x43; // set gain_up address, keep gain_do
+ if (TDA18271Write(pObj,0x20,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+ pObj->I2CMap.EXTENDED_BYTE_17 = 0x4C; // keep gain_up address, set gain_up
+ if (TDA18271Write(pObj,0x20,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // AGC2_Gain_do
+ // update & write EXTENDED_BYTE_20
+ pObj->I2CMap.EXTENDED_BYTE_20 = 0xA0; // set gain_do address
+ if (TDA18271Write(pObj,0x23,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+ pObj->I2CMap.EXTENDED_BYTE_20 = 0xA7; // keep gain_do address, set gain_do
+ if (TDA18271Write(pObj,0x23,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // AGC2_Gain_up
+ // update & write EXTENDED_BYTE_20
+ pObj->I2CMap.EXTENDED_BYTE_20 = 0xE7; // set gain_up address, keep gain_do
+ if (TDA18271Write(pObj,0x23,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+ pObj->I2CMap.EXTENDED_BYTE_20 = 0xEC; // keep gain_up address, set gain_up
+ if (TDA18271Write(pObj,0x23,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ //----------------------
+ // image rejection calibration
+ //----------------------
+ //
+ //------- low band calibration -------
+ //
+ // update & write bytes 0x05 to 0x0F
+ pObj->I2CMap.EASY_PROG_BYTE_3 = 0x1F;
+ pObj->I2CMap.EASY_PROG_BYTE_4 = 0x66;
+ pObj->I2CMap.EASY_PROG_BYTE_5 = 0x81;
+ pObj->I2CMap.CAL_POST_DIV_BYTE = 0xCC;
+ pObj->I2CMap.CAL_DIV_BYTE_1 = 0x6C;
+ pObj->I2CMap.CAL_DIV_BYTE_2 = 0x00;
+ pObj->I2CMap.CAL_DIV_BYTE_3 = 0x00;
+ pObj->I2CMap.MAIN_POST_DIV_BYTE = 0xCD;
+ pObj->I2CMap.MAIN_DIV_BYTE_1 = 0x77;
+ pObj->I2CMap.MAIN_DIV_BYTE_2 = 0x08;
+ pObj->I2CMap.MAIN_DIV_BYTE_3 = 0x00;
+ if (TDA18271Write(pObj,0x05,11) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait(pObj,5) == False)
+ return TM_FALSE;
+
+ // update & write byte EASY_PROG_BYTE_1
+ pObj->I2CMap.EASY_PROG_BYTE_1 = 0xC6;
+ if (TDA18271Write(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // wait x ms for wanted low measurement (default 5 ms)
+ if (TDA18271Wait(pObj,(UInt16)((pObj->Config.uPROTOCOLWAIT & 0xFF000000) >> 24)) == False)
+ return TM_FALSE;
+
+ // update & write bytes 0x05 to 0x0B
+ pObj->I2CMap.EASY_PROG_BYTE_3 = 0x1F;
+ pObj->I2CMap.EASY_PROG_BYTE_4 = 0x66;
+ pObj->I2CMap.EASY_PROG_BYTE_5 = 0x85;
+ pObj->I2CMap.CAL_POST_DIV_BYTE = 0xCB;
+ pObj->I2CMap.CAL_DIV_BYTE_1 = 0x66;
+ pObj->I2CMap.CAL_DIV_BYTE_2 = 0x70;
+ pObj->I2CMap.CAL_DIV_BYTE_3 = 0x00;
+ if (TDA18271Write(pObj,0x05,7) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait(pObj,5) == False)
+ return TM_FALSE;
+
+ // update & write byte EASY_PROG_BYTE_2
+ pObj->I2CMap.EASY_PROG_BYTE_2 = 0xDF;
+ if (TDA18271Write(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // wait x ms for image low optimization completion (default 30 ms)
+ if (TDA18271Wait(pObj,(UInt16)((pObj->Config.uPROTOCOLWAIT & 0xFF0000) >> 16)) == False)
+ return TM_FALSE;
+
+ //
+ //------- mid band calibration -------
+ //
+ // update & write bytes 0x05 to 0x0F
+ pObj->I2CMap.EASY_PROG_BYTE_3 = 0x1F;
+ pObj->I2CMap.EASY_PROG_BYTE_4 = 0x66;
+ pObj->I2CMap.EASY_PROG_BYTE_5 = 0x82;
+ pObj->I2CMap.CAL_POST_DIV_BYTE = 0xA8;
+ pObj->I2CMap.CAL_DIV_BYTE_1 = 0x66;
+ pObj->I2CMap.CAL_DIV_BYTE_2 = 0x00;
+ pObj->I2CMap.CAL_DIV_BYTE_3 = 0x00;
+ pObj->I2CMap.MAIN_POST_DIV_BYTE = 0xA9;
+ pObj->I2CMap.MAIN_DIV_BYTE_1 = 0x73;
+ pObj->I2CMap.MAIN_DIV_BYTE_2 = 0x1A;
+ pObj->I2CMap.MAIN_DIV_BYTE_3 = 0x00;
+ if (TDA18271Write(pObj,0x05,11) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait(pObj,5) == False)
+ return TM_FALSE;
+
+ // update & write byte EASY_PROG_BYTE_1
+ pObj->I2CMap.EASY_PROG_BYTE_1 = 0xC6;
+ if (TDA18271Write(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // wait x ms for wanted mid measurement (default 5 ms)
+ if (TDA18271Wait(pObj,(UInt16)((pObj->Config.uPROTOCOLWAIT & 0xFF000000) >> 24)) == False)
+ return TM_FALSE;
+
+ // update & write bytes 0x05 to 0x0B
+ pObj->I2CMap.EASY_PROG_BYTE_3 = 0x1F;
+ pObj->I2CMap.EASY_PROG_BYTE_4 = 0x66;
+ pObj->I2CMap.EASY_PROG_BYTE_5 = 0x86;
+ pObj->I2CMap.CAL_POST_DIV_BYTE = 0xA8;
+ pObj->I2CMap.CAL_DIV_BYTE_1 = 0x66;
+ pObj->I2CMap.CAL_DIV_BYTE_2 = 0xA0;
+ pObj->I2CMap.CAL_DIV_BYTE_3 = 0x00;
+ if (TDA18271Write(pObj,0x05,7) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait(pObj,5) == False)
+ return TM_FALSE;
+
+ // update & write byte EASY_PROG_BYTE_2
+ pObj->I2CMap.EASY_PROG_BYTE_2 = 0xDF;
+ if (TDA18271Write(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // wait x ms for image mid optimization completion (default 30 ms)
+ if (TDA18271Wait(pObj,(UInt16)((pObj->Config.uPROTOCOLWAIT & 0xFF0000) >> 16)) == False)
+ return TM_FALSE;
+
+ //
+ //------- high band calibration -------
+ //
+ // update & write bytes 0x05 to 0x0F
+ pObj->I2CMap.EASY_PROG_BYTE_3 = 0x1F;
+ pObj->I2CMap.EASY_PROG_BYTE_4 = 0x66;
+ pObj->I2CMap.EASY_PROG_BYTE_5 = 0x83;
+ pObj->I2CMap.CAL_POST_DIV_BYTE = 0x98;
+ pObj->I2CMap.CAL_DIV_BYTE_1 = 0x65;
+ pObj->I2CMap.CAL_DIV_BYTE_2 = 0x00;
+ pObj->I2CMap.CAL_DIV_BYTE_3 = 0x00;
+ pObj->I2CMap.MAIN_POST_DIV_BYTE = 0x99;
+ pObj->I2CMap.MAIN_DIV_BYTE_1 = 0x71;
+ pObj->I2CMap.MAIN_DIV_BYTE_2 = 0xCD;
+ pObj->I2CMap.MAIN_DIV_BYTE_3 = 0x00;
+ if (TDA18271Write(pObj,0x05,11) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait(pObj,5) == False)
+ return TM_FALSE;
+
+ // update & write byte EASY_PROG_BYTE_1
+ pObj->I2CMap.EASY_PROG_BYTE_1 = 0xC6;
+ if (TDA18271Write(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // wait x ms for wanted high measurement (default 5 ms)
+ if (TDA18271Wait(pObj,(UInt16)((pObj->Config.uPROTOCOLWAIT & 0xFF000000) >> 24)) == False)
+ return TM_FALSE;
+
+ // update & write bytes 0x05 to 0x0B
+ pObj->I2CMap.EASY_PROG_BYTE_3 = 0x1F;
+ pObj->I2CMap.EASY_PROG_BYTE_4 = 0x66;
+ pObj->I2CMap.EASY_PROG_BYTE_5 = 0x87;
+ pObj->I2CMap.CAL_POST_DIV_BYTE = 0x98;
+ pObj->I2CMap.CAL_DIV_BYTE_1 = 0x65;
+ pObj->I2CMap.CAL_DIV_BYTE_2 = 0x50;
+ pObj->I2CMap.CAL_DIV_BYTE_3 = 0x00;
+ if (TDA18271Write(pObj,0x05,7) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait(pObj,5) == False)
+ return TM_FALSE;
+
+ // update & write byte EASY_PROG_BYTE_2
+ pObj->I2CMap.EASY_PROG_BYTE_2 = 0xDF;
+ if (TDA18271Write(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // wait x ms for image high optimization completion (default 30 ms)
+ if (TDA18271Wait(pObj,(UInt16)((pObj->Config.uPROTOCOLWAIT & 0xFF0000) >> 16)) == False)
+ return TM_FALSE;
+
+ // update & write byte EASY_PROG_BYTE_4
+ pObj->I2CMap.EASY_PROG_BYTE_4 = 0x64;
+ if (TDA18271Write(pObj,0x06,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // update & write byte EASY_PROG_BYTE_1
+ pObj->I2CMap.EASY_PROG_BYTE_1 = 0xC6;
+ if (TDA18271Write(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+ }
+
+ //----------------------
+ // RF tracking filter calibration
+ //----------------------
+ if (((pObj->Config.uPROTOCOLSTEP & 0x08) >> 3) == 0x01)
+ {
+ // search for BP_Filter corresponding to uRF
+ do uCounter ++;
+ while (pObj->Config.uRF > pObj->Config.BP_FILTER_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_BP_FILTER_NB_ROWS);
+ pObj->I2CMap.BP_Filter = (UInt8)pObj->Config.BP_FILTER_Map[uCounter - 1].uBP_Filter;
+
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // update & write byte EXTENDED_BYTE_4
+ pObj->I2CMap.EXTENDED_BYTE_4 = (pObj->I2CMap.EXTENDED_BYTE_4 & 0x07) | 0x60;
+ if (TDA18271Write(pObj,0x13,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // update & write byte EXTENDED_BYTE_7
+ pObj->I2CMap.EXTENDED_BYTE_7 = 0x60;
+ if (TDA18271Write(pObj,0x16,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // update & write byte EXTENDED_BYTE_14
+ pObj->I2CMap.EXTENDED_BYTE_14 = 0x00;
+ if (TDA18271Write(pObj,0x1D,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // update & write byte EXTENDED_BYTE_20
+ pObj->I2CMap.EXTENDED_BYTE_20 = 0xCC;
+ if (TDA18271Write(pObj,0x23,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // set CAL_Mode to RF tracking filter calibration
+ pObj->I2CMap.CAL_Mode = 0x03;
+
+ // calculate CAL PLL
+ // CAL LO Frequency = beginning of the channel in analog / channel center frequency + bandwith/2 in digital
+ if (TDA18271CalcCALPLL(pObj, (pObj->StandardMode > 2) && (pObj->StandardMode < 11) ?
+ pObj->Config.uRF - 1250000 : pObj->Config.uRF + (pObj->Config.uBW/2)) == False)
+ return TM_FALSE;
+
+ // calculate MAIN PLL
+ // MAIN LO Frequency = beginning of the channel + 1MHz in analog / channel center frequency + bandwith/2 + 1MHz in digital
+ if (TDA18271CalcMAINPLL(pObj,(pObj->StandardMode > 2) && (pObj->StandardMode < 11) ?
+ pObj->Config.uRF - 250000 : pObj->Config.uRF + (pObj->Config.uBW/2) + 1000000) == False)
+ return TM_FALSE;
+
+ // write bytes 0x05 to 0x0F
+ if (TDA18271Write(pObj,0x05,11) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // wait 5 ms for RF tracking filter calibration initialisation
+ if (TDA18271Wait(pObj,5) == False)
+ return TM_FALSE;
+
+ // search for K,M,CO for RF Calibration, corresponding to uRF
+ uCounter=0;
+ do uCounter ++;
+ while (pObj->Config.uRF > pObj->Config.RF_CAL_KMCO_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_KMCO_NB_ROWS);
+
+ // update & write EXTENDED_BYTE_13
+ pObj->I2CMap.EXTENDED_BYTE_13 = (UInt8)((pObj->I2CMap.EXTENDED_BYTE_13 & 0x83) | pObj->Config.RF_CAL_KMCO_Map[uCounter - 1].uK << 4 | pObj->Config.RF_CAL_KMCO_Map[uCounter - 1].uM << 2 );
+ if (TDA18271Write(pObj,0x1C,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ /*// update & write EXTENDED_BYTE_23
+ pObj->I2CMap.EXTENDED_BYTE_23 = (UInt8)((pObj->I2CMap.EXTENDED_BYTE_23 & 0xCF) | pObj->Config.RF_CAL_KMCO_Map[uCounter - 1].uCOAmpl << 4);
+ if (TDA18271Write(pObj,0x26,1) != True)
+ return TMBSL_ERR_IIC_ERR;*/
+
+ // search for RF_BAND corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (pObj->Config.uRF > pObj->Config.RF_BAND_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_BAND_NB_ROWS);
+ pObj->I2CMap.RF_Band = (UInt8)pObj->Config.RF_BAND_Map[uCounter - 1].uRF_Band;
+
+ // search for Gain_Taper corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (pObj->Config.uRF > pObj->Config.GAIN_TAPER_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_GAIN_TAPER_NB_ROWS);
+ pObj->I2CMap.Gain_Taper = (UInt8)pObj->Config.GAIN_TAPER_Map[uCounter - 1].uGain_Taper;
+
+ // write byte EASY_PROG_BYTE_2
+ if (TDA18271Write(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // write byte EASY_PROG_BYTE_2
+ if (TDA18271Write(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // update & write byte EXTENDED_BYTE_4
+ pObj->I2CMap.EXTENDED_BYTE_4 = (pObj->I2CMap.EXTENDED_BYTE_4 & 0x07) | 0x40;
+ if (TDA18271Write(pObj,0x13,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // update & write byte EXTENDED_BYTE_7
+ pObj->I2CMap.EXTENDED_BYTE_7 = 0x40;
+ if (TDA18271Write(pObj,0x16,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // wait 10 ms for pll locking
+ if (TDA18271Wait(pObj,10) == False)
+ return TM_FALSE;
+
+ // update & write byte EXTENDED_BYTE_20
+ pObj->I2CMap.EXTENDED_BYTE_20 = 0xEC;
+ if (TDA18271Write(pObj,0x23,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // wait x ms for for RF tracking filter calibration completion (default 60 ms)
+ if (TDA18271Wait(pObj,(UInt16)((pObj->Config.uPROTOCOLWAIT & 0xFF00) >> 8)) == False)
+ return TM_FALSE;
+
+ // set CAL_Mode to normal mode
+ pObj->I2CMap.CAL_Mode = 0x00;
+
+ // write byte EASY_PROG_BYTE_4
+ if (TDA18271Write(pObj,0x06,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+ }
+
+ //----------------------
+ // RF tracking filter correction for VHF_Low band
+ //----------------------
+ if ((((pObj->Config.uPROTOCOLSTEP & 0x04) >> 2) == 0x01) && (uRF <= pObj->Config.RF_CAL_Map[TDA18271_RF_CAL_NB_ROWS - 1].uRF_Max))
+ {
+ // search for RFC_Cprog corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.RF_CAL_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_NB_ROWS);
+
+ // update & write EXTENDED_BYTE_14
+ pObj->I2CMap.EXTENDED_BYTE_14 = (UInt8)pObj->Config.RF_CAL_Map[uCounter - 1].uRFC_Cprog;
+ if (TDA18271Write(pObj,0x1D,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+ }
+
+ //----------------------
+ // channel configuration
+ //----------------------
+ if (((pObj->Config.uPROTOCOLSTEP & 0x01) >> 0) == 0x01)
+ {
+ if (((pObj->Config.uPROTOCOLSTEP & 0x02) >> 1) == 0x01)
+ {
+ // set standard mode to current standard
+ tmbslTDA18271SetStandardMode (TunerUnit,pObj->StandardMode);
+ }
+
+ // write EXTENDED_BYTE_22
+ if (TDA18271Write(pObj,0x25,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // set CAL_Mode to normal mode
+ pObj->I2CMap.CAL_Mode = 0x00;
+
+ // set power level indicator to off
+ pObj->Config.uPLMODE = 1;
+ pObj->I2CMap.Dis_Power_level = 1;
+
+ // set thermometer to off
+ pObj->Config.uTMMODE = 0;
+ pObj->I2CMap.TM_ON = 0;
+
+ // search for IR_Meas corresponding to wanted frequency
+ uIRMeasCounter = 0;
+ do uIRMeasCounter ++;
+ while (pObj->Config.uRF > pObj->Config.IR_MEAS_Map[uIRMeasCounter - 1].uRF_Max && uIRMeasCounter - 1 < TDA18271_IR_MEAS_NB_ROWS);
+ pObj->I2CMap.IR_Meas = uIRMeasCounter + 3;
+
+ // calculate MAIN PLL
+ if (TDA18271CalcMAINPLL(pObj, pObj->Config.uRF + pObj->Config.uIF) == False)
+ return TM_FALSE;
+
+ // write bytes 0x01 to 0x0F
+ if (TDA18271Write(pObj,0x01,15) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait(pObj,5) == False)
+ return TM_FALSE;
+
+ // read bytes 0x00 to 0x0F
+ if (TDA18271Read (pObj,0x00,16) != True)
+ return TMBSL_ERR_IIC_ERR;
+ }
+
+ return TM_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271GetRf:
+//
+// DESCRIPTION: Get the frequency programmed in the tuner
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES: The value returned is the one stored in the Object
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271GetRf(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32* pRF // O: RF frequency in hertz
+ )
+{
+ ptmTDA18271Object_t pObj;
+
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ // test the Object
+ if (gTDA18271Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ // pObj initialisation
+ pObj = &gTDA18271Instance[TunerUnit];
+
+ //----------------------
+ // get the value
+ //----------------------
+ // the read function can't be used
+ *pRF = pObj->Config.uRF;
+
+ return TM_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// Internal functions:
+//-----------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------
+// FUNCTION: TDA18271Init:
+//
+// DESCRIPTION: Initialisation of the Tuner
+//
+// RETURN: always True
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+Bool_
+TDA18271Init (
+ tmUnitSelect_t TunerUnit // I: Tuner Object
+ )
+{
+ return True;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271Write
+//
+// DESCRIPTION: This function writes I2C data in the Tuner
+//
+// RETURN: True or False
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271Write(
+ ptmTDA18271Object_t pObj, // I: Tuner unit number
+ UInt8 uSubAddress,// I: sub address
+ UInt8 uNbData // I: nb of data
+ )
+{
+ Bool_ I2CCommResult;
+
+ UInt8 uCounter;
+ UInt8* pI2CMap;
+ UInt32 WriteBuffer[TDA18271_NB_BYTES] = {0};
+ UInt32* pWriteBuffer;
+
+ // pI2CMap & pWriteBuffer initialisation
+ pI2CMap = &(pObj->I2CMap.ID_BYTE);
+ pWriteBuffer = &(WriteBuffer[0]);
+
+ // copy I2CMap data in WriteBuffer
+ for (uCounter = 0; uCounter < TDA18271_NB_BYTES; uCounter++)
+ {
+ *pWriteBuffer = (UInt32)(*pI2CMap);
+ pWriteBuffer ++;
+ pI2CMap ++;
+ }
+
+ /*// activate extended register access if needed
+ if ( (uSubAddress + uNbData >= 0x11) && (uNbData > 1) )
+ {
+ // update & write byte EASY_PROG_BYTE_5
+ pObj->I2CMap.Extended_Reg = 0x01;
+ I2CCommResult = TDA18271Write(pObj,0x07,1);
+ }*/
+
+ // write data in the Tuner
+ I2CCommResult = pObj->SystemFunc.SY_Write( pObj->uHwAddress,
+ uSubAddress,
+ uNbData,
+ &(WriteBuffer[uSubAddress]) );
+
+ // shift I2CLog content
+ TDA18271ShiftLog (pObj,1);
+
+ // copy written data in I2CLog [0]
+ for (uCounter = uSubAddress; uCounter < uSubAddress + uNbData; uCounter++)
+ pObj->I2CLog [0][uCounter] = WriteBuffer [uCounter];
+
+ // set additional values
+ pObj->I2CLog [0][TDA18271_NB_BYTES] = pObj->uHwAddress;
+ pObj->I2CLog [0][TDA18271_NB_BYTES + 1] = I2CCommResult;
+
+ /*// deactivate extended register access if needed
+ if ( (uSubAddress + uNbData >= 0x11) && (uNbData > 1) )
+ {
+ // update & write byte EASY_PROG_BYTE_5
+ pObj->I2CMap.Extended_Reg = 0x00;
+ I2CCommResult = TDA18271Write(pObj,0x07,1);
+ }*/
+
+ // return value
+ return I2CCommResult;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271Read
+//
+// DESCRIPTION: This function reads I2C data from the Tuner
+//
+// RETURN: True or False
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271Read(
+ ptmTDA18271Object_t pObj, // I: Tuner unit number
+ UInt8 uSubAddress,// I: sub address
+ UInt8 uNbData // I: nb of data
+ )
+{
+ Bool_ I2CCommResult;
+
+ UInt8 uCounter;
+ UInt8* pI2CMap;
+ UInt32 ReadBuffer[TDA18271_NB_BYTES] = {0};
+ UInt32* pReadBuffer;
+
+ // pI2CMap & pReadBuffer initialisation
+ pI2CMap = &(pObj->I2CMap.ID_BYTE) + uSubAddress;
+ pReadBuffer = &(ReadBuffer[uSubAddress]);
+
+ // read data from the Tuner
+ I2CCommResult = pObj->SystemFunc.SY_Read( pObj->uHwAddress,
+ 0,
+ uSubAddress + uNbData,
+ &(ReadBuffer[0]));
+
+ // copy readen data in I2CMap
+ for (uCounter = 0; uCounter < uNbData; uCounter++)
+ {
+ *pI2CMap = (UInt8)(*pReadBuffer);
+ pI2CMap ++;
+ pReadBuffer ++;
+ }
+
+ // shift I2CLog content
+ TDA18271ShiftLog (pObj,1);
+
+ // copy readen data in I2CLog [0]
+ for (uCounter = uSubAddress; uCounter < uSubAddress + uNbData; uCounter++)
+ pObj->I2CLog [0][uCounter] = ReadBuffer [uCounter];
+
+ // set additional values
+ pObj->I2CLog [0][TDA18271_NB_BYTES] = pObj->uHwAddress + 1;
+ pObj->I2CLog [0][TDA18271_NB_BYTES + 1] = I2CCommResult;
+
+ // return value
+ return I2CCommResult;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271Wait
+//
+// DESCRIPTION: This function waits for requested time
+//
+// RETURN: True or False
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271Wait(
+ ptmTDA18271Object_t pObj, // I: Tuner unit number
+ UInt16 wTime // I: time to wait for
+ )
+{
+ User_delay( pObj->AFAInfo.demodulator, wTime);
+
+ return True;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271ShiftLog
+//
+// DESCRIPTION: Shift I2CLog content of wanted lines
+//
+// RETURN: True
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271ShiftLog(
+ ptmTDA18271Object_t pObj, // I: Tuner unit number
+ UInt8 uNbRows // I: nb of lines
+ )
+{
+ UInt8 uRow;
+ UInt8 uColumn;
+ UInt8 uCounter;
+
+ // Shift I2CLog content of wanted lines
+ for (uCounter = 0; uCounter < uNbRows; uCounter++)
+ {
+ for (uRow = TDA18271_LOG_NB_ROWS - 1; uRow > 0; uRow--)
+ {
+ for (uColumn = 0; uColumn < TDA18271_NB_BYTES + 2; uColumn++)
+ pObj->I2CLog [uRow][uColumn] = pObj->I2CLog [uRow - 1][uColumn];
+ }
+
+ for (uColumn = 0; uColumn < TDA18271_NB_BYTES + 2; uColumn++)
+ pObj->I2CLog [0][uColumn] = 256;
+ }
+
+ // Return value
+ return True;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271CalcMAINPLL:
+//
+// DESCRIPTION: Calculate the MAIN fractionnal PLL settings
+//
+// RETURN: True or False
+//
+// NOTES: This function doesn't write in the tuner
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271CalcMAINPLL (
+ ptmTDA18271Object_t pObj, // I: tuner Object
+ UInt32 uLO // I: local oscillator frequency in hertz
+ )
+{
+ UInt8 uCounter = 0;
+ UInt32 uDiv;
+
+ // search for MAIN_Post_Div corresponding to uLO
+ uCounter = 0;
+ do uCounter ++;
+ while (uLO > pObj->Config.MAIN_PLL_Map[uCounter - 1].uLO_Max && uCounter < TDA18271_MAIN_PLL_NB_ROWS);
+ // Decalage table : MAIN_Post_Div[4] = 0 in table or MAIN_Post_Div[4] = 1
+ pObj->I2CMap.MAIN_Post_Div = ((UInt8)pObj->Config.MAIN_PLL_Map[uCounter - 1].uPost_Div) & 0x7F;
+
+ // calculate MAIN_Div
+ uDiv = (((UInt32)(pObj->Config.MAIN_PLL_Map[uCounter - 1].uDiv) * (uLO / 1000)) << 7) / 125;
+ pObj->I2CMap.MAIN_Div_22_to_16 = (UInt8)(uDiv >> 16) & 0x7F;
+ pObj->I2CMap.MAIN_Div_15_to_8 = (UInt8)(uDiv >> 8);
+ pObj->I2CMap.MAIN_Div_7_to_0 = (UInt8)(uDiv);
+
+ return True;
+}
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271CalcCALPLL:
+//
+// DESCRIPTION: Calculate the CAL fractionnal PLL settings
+//
+// RETURN: True or False
+//
+// NOTES: This function doesn't write in the tuner
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271CalcCALPLL (
+ ptmTDA18271Object_t pObj, // I: tuner Object
+ UInt32 uLO // I: local oscillator frequency in hertz
+ )
+{
+ UInt8 uCounter = 0;
+ UInt32 uDiv;
+
+ // search for CAL_Post_Div corresponding to uLO
+ do uCounter ++;
+ while (uLO > pObj->Config.CAL_PLL_Map[uCounter - 1].uLO_Max && uCounter < TDA18271_CAL_PLL_NB_ROWS);
+ //CAL_POST_DIV_BYTE[7] = 0 in table or CAL_POST_DIV_BYTE[7]=1 =>(| 0x80)
+ pObj->I2CMap.CAL_POST_DIV_BYTE = (UInt8)pObj->Config.CAL_PLL_Map[uCounter - 1].uPost_Div;
+
+ // calculate CAL_Div
+ uDiv = (((UInt32)(pObj->Config.CAL_PLL_Map[uCounter - 1].uDiv) * (uLO / 1000)) << 7) / 125;
+ pObj->I2CMap.CAL_Div_22_to_16 = (UInt8)(uDiv >> 16) & 0x7F;
+ pObj->I2CMap.CAL_Div_15_to_8 = (UInt8)(uDiv >> 8);
+ pObj->I2CMap.CAL_Div_7_to_0 = (UInt8)(uDiv);
+
+ return True;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271CalcRFFilter:
+//
+// DESCRIPTION: Calculate the RF Filters
+//
+// RETURN: True or False
+//
+// NOTES: This function doesn't write in the tuner
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271CalcRFFilter (
+ ptmTDA18271Object_t pObj, // I: tuner Object
+ UInt32 uLO // I: local oscillator frequency in hertz
+ )
+{
+ UInt8 uCounter = 0;
+
+ // search for BP_Filter corresponding to uRF
+ do uCounter ++;
+ while (pObj->Config.uRF > pObj->Config.BP_FILTER_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_BP_FILTER_NB_ROWS);
+ pObj->I2CMap.BP_Filter = (UInt8)pObj->Config.BP_FILTER_Map[uCounter - 1].uBP_Filter;
+
+ // search for RF_BAND corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (pObj->Config.uRF > pObj->Config.RF_BAND_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_BAND_NB_ROWS);
+ pObj->I2CMap.RF_Band = (UInt8)pObj->Config.RF_BAND_Map[uCounter - 1].uRF_Band;
+
+ // search for Gain_Taper corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (pObj->Config.uRF > pObj->Config.GAIN_TAPER_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_GAIN_TAPER_NB_ROWS);
+ pObj->I2CMap.Gain_Taper = (UInt8)pObj->Config.GAIN_TAPER_Map[uCounter - 1].uGain_Taper;
+
+ return True;
+}
+
+//-------------------------------------------------------------------------------------
+// TUNER ERRORS TYPES
+//
+// RETURN: TM_OK
+// TM_FALSE
+// TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TMBSL_ERR_TUNER_BAD_PARAMETER
+// TMBSL_ERR_TUNER_NOT_SUPPORTED
+// TM_ERR_IIC_ERR
+//
+//-------------------------------------------------------------------------------------
+// \ No newline at end of file
diff --git a/api/TDA18271.h b/api/TDA18271.h
new file mode 100644
index 0000000..2c1e68e
--- /dev/null
+++ b/api/TDA18271.h
@@ -0,0 +1,67 @@
+//-----------------------------------------------------------------------------
+// $Header:
+// (C) Copyright 2001 NXP Semiconductors, All rights reserved
+//
+// This source code and any compilation or derivative thereof is the sole
+// property of NXP Corporation and is provided pursuant to a Software
+// License Agreement. This code is the proprietary information of NXP
+// Corporation and is confidential in nature. Its use and dissemination by
+// any party other than NXP Corporation is strictly limited by the
+// confidential information provisions of the Agreement referenced above.
+//-----------------------------------------------------------------------------
+// FILE NAME: tmbslTDA18271Local.h
+//
+// DESCRIPTION: define the Object for the TDA18271
+//
+// DOCUMENT REF: DVP Software Coding Guidelines v1.14
+// DVP Board Support Library Architecture Specification v0.5
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+#ifndef _TMBSL_TDA18271_H //-----------------
+#define _TMBSL_TDA18271_H
+
+#include "TDA18271Local.h"
+
+//-----------------------------------------------------------------------------
+// Standard include files:
+//-----------------------------------------------------------------------------
+//#include "dvp.h"
+//#include "tmbslTuner.h"
+//-----------------------------------------------------------------------------
+// Project include files:
+//-----------------------------------------------------------------------------
+//
+Bool_ SY_Read(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff
+);
+
+Bool_ SY_Write(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff
+);
+
+tmErrorCode_t
+tmbslTDA18271Init(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmbslTuParam_t Param // I: setup parameters
+);
+
+tmErrorCode_t
+tmbslTDA18271SetConfig(
+ tmUnitSelect_t TunerUnit, // I: TunerUnit number
+ UInt32 uItemId, // I: Identifier of the item to modify
+ UInt32 uValue // I: Value to set for the Config item
+);
+
+tmErrorCode_t
+tmbslTDA18271SetRf(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32 uRF // I: RF frequency in hertz
+);
+
+#endif // _TMBSL_TDA18271LOCAL_H //--------------- \ No newline at end of file
diff --git a/api/TDA18271Local.h b/api/TDA18271Local.h
new file mode 100644
index 0000000..c17f053
--- /dev/null
+++ b/api/TDA18271Local.h
@@ -0,0 +1,650 @@
+//-----------------------------------------------------------------------------
+// $Header:
+// (C) Copyright 2001 NXP Semiconductors, All rights reserved
+//
+// This source code and any compilation or derivative thereof is the sole
+// property of NXP Corporation and is provided pursuant to a Software
+// License Agreement. This code is the proprietary information of NXP
+// Corporation and is confidential in nature. Its use and dissemination by
+// any party other than NXP Corporation is strictly limited by the
+// confidential information provisions of the Agreement referenced above.
+//-----------------------------------------------------------------------------
+// FILE NAME: tmbslTDA18271Local.h
+//
+// DESCRIPTION: define the Object for the TDA18271
+//
+// DOCUMENT REF: DVP Software Coding Guidelines v1.14
+// DVP Board Support Library Architecture Specification v0.5
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+#ifndef _TMBSL_TDA18271LOCAL_H //-----------------
+#define _TMBSL_TDA18271LOCAL_H
+
+#include "type.h"
+
+//-----------------------------------------------------------------------------
+// Standard include files:
+//-----------------------------------------------------------------------------
+//#include "dvp.h"
+//#include "tmbslTuner.h"
+//-----------------------------------------------------------------------------
+// Project include files:
+//-----------------------------------------------------------------------------
+//
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+//-----------------------------------------------------------------------------
+// Types and defines:
+//-----------------------------------------------------------------------------
+//
+#define TDA18271_BSL_COMP_NUM 1
+#define TDA18271_BSL_MAJOR_VER 8
+#define TDA18271_BSL_MINOR_VER 3
+//-------------
+// ERROR CODES
+//-------------
+#define TMBSL_ERR_TUNER_BASE 0x80000000U
+#define TM_ERR_BAD_UNIT_NUMBER 0x00000001U
+#define TM_ERR_NOT_INITIALIZED 0x00000002U
+#define TM_ERR_BAD_PARAMETER 0x00000003U
+#define TM_ERR_NOT_SUPPORTED 0x00000004U
+#define TM_ERR_IIC_ERR 0x00000005U
+
+// Invalid unit id
+#define TMBSL_ERR_TUNER_BAD_UNIT_NUMBER \
+(TMBSL_ERR_TUNER_BASE + TM_ERR_BAD_UNIT_NUMBER)
+
+// Component is not initialized
+#define TMBSL_ERR_TUNER_NOT_INITIALIZED \
+(TMBSL_ERR_TUNER_BASE+ TM_ERR_NOT_INITIALIZED)
+
+// Invalid input parameter
+#define TMBSL_ERR_TUNER_BAD_PARAMETER \
+(TMBSL_ERR_TUNER_BASE + TM_ERR_BAD_PARAMETER)
+
+// Function is not supported
+#define TMBSL_ERR_TUNER_NOT_SUPPORTED \
+(TMBSL_ERR_TUNER_BASE + TM_ERR_NOT_SUPPORTED)
+
+// Function is not supported
+#define TMBSL_ERR_IIC_ERR \
+(TMBSL_ERR_TUNER_BASE + TM_ERR_IIC_ERR)
+
+#define TDA18271_MAX_UNITS 10 //
+#define TDA18271_NB_BYTES 39 //
+#define TDA18271_LOG_NB_ROWS 50 //
+
+#define TDA18271_IR_MEAS_NB_COLUMNS 1 //
+#define TDA18271_IR_MEAS_NB_ROWS 4 //
+
+#define TDA18271_IR_CAL_NB_COLUMNS 2 //
+#define TDA18271_IR_CAL_NB_ROWS 3 //
+
+#define TDA18271_BP_FILTER_NB_COLUMNS 2 //
+#define TDA18271_BP_FILTER_NB_ROWS 7 //
+
+#define TDA18271_RF_BAND_NB_COLUMNS 2 //
+#define TDA18271_RF_BAND_NB_ROWS 7 //
+
+#define TDA18271_GAIN_TAPER_NB_COLUMNS 2 //
+#define TDA18271_GAIN_TAPER_NB_ROWS 85 //
+
+#define TDA18271_RF_CAL_NB_COLUMNS 2 //
+#define TDA18271_RF_CAL_NB_ROWS 17 //
+
+#define TDA18271_RF_CAL_KMCO_NB_COLUMNS 4 //
+#define TDA18271_RF_CAL_KMCO_NB_ROWS 4 //
+
+#define TDA18271_THERMOMETER_NB_COLUMNS 3 //
+#define TDA18271_THERMOMETER_NB_ROWS 16 //
+
+#define TDA18271_CAL_PLL_NB_COLUMNS 3 //
+#define TDA18271_CAL_PLL_NB_ROWS 35 //
+
+#define TDA18271_MAIN_PLL_NB_COLUMNS 3 //
+#define TDA18271_MAIN_PLL_NB_ROWS 40 //
+
+#define TDA18271_IDENTITY_IND 0 //
+
+#define OM5770C2_BOARD_DEF 0x57700002 // TDA8295C1 + TDA10046 + TDA18271
+#define OM5775_BOARD_DEF 0x57750000 // 2xTDA8290C1 + 2xTDA10048 + 2xTDA18271
+#define OM5776_BOARD_DEF 0x57760000 //
+#define OM5777_BOARD_DEF 0x57770000 //
+#define OM5780_BOARD_DEF 0x57800000 //
+#define OM5782_BOARD_DEF 0x57820000 //
+#define OM5764_BOARD_DEF 0x57640199 //
+#define CUSTOM_BOARD_DEF 0x00000000 // custom
+#define OM57XX_STANDARD_DEF 2
+
+
+// types
+typedef unsigned long UInt32; /* 32 bit unsigned integer */
+typedef unsigned short UInt16; /* 16 bit unsigned integer */
+typedef unsigned char UInt8; /* 8 bit unsigned integer */
+typedef UInt32 tmErrorCode_t;
+typedef unsigned int Bool_; /* Boolean (True/False) */
+typedef int tmUnitSelect_t, *ptmUnitSelect_t;
+#define NULL 0
+
+#define TM_OK 0U /* Global success return status */
+#define TM_FALSE 0
+#define TM_TRUE 1
+
+#define True TM_TRUE
+#define False TM_FALSE
+
+// added
+// system function
+Bool_ SY_Write(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+
+Bool_ SY_Read(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+
+Bool_ SY_Write_Slave(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+
+Bool_ SY_Read_Slave(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+
+typedef struct _tmhalFEBslSystemFunc_t
+{
+ Bool_ (*SY_Write) (UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+ Bool_ (*SY_Read) (UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+} tmhalFEBslSystemFunc_t, *ptmhalFEBslSystemFunc_t;
+
+typedef struct _tmbslTuParam_t
+{
+ unsigned long uHwAddress;
+ tmhalFEBslSystemFunc_t systemFunc;
+} tmbslTuParam_t, *ptmbslTuParam_t;
+
+typedef struct tmSWVersion
+{
+ UInt32 compatibilityNr; /* Interface compatibility number */
+ UInt32 majorVersionNr; /* Interface major version number */
+ UInt32 minorVersionNr; /* Interface minor version number */
+
+} tmSWVersion_t, *ptmSWVersion_t;
+
+// added
+
+typedef enum _tmTDA18271cfgIndex_t {
+ BOARD = 0,
+ STANDARD = 1,
+ FEINIT = 100,
+ IDENTITY = 102,
+ GETNBOFUNIT = 200,
+ BANDWIDTH = 300,
+ RFBAND = 302,
+ RF,
+ ID,
+ POR,
+ MAINLOCK,
+ PLRFAGC = 310,
+ POWERSTATE = 312,
+ TMMODE = 350,
+ TMVALUE,
+ PLMODE,
+ PLAGC1,
+ PLAGC2,
+ RFCALOK,
+ IRCALOK,
+ BPFILTER,
+ GAINTAPER,
+ LPFC,
+ FMRFN,
+ XTOUT,
+ IFLEVEL,
+ EXTENDEDREG,
+ CALPOSTDIV,
+ CALDIV,
+ MAINPOSTDIV,
+ MAINDIV,
+ MAPNAME,
+ MAPCOLUMN,
+ MAPROW,
+ MAPVALUE,
+ READINIT,
+ STATUSBYTE = 380,
+ PROTOCOLSTEP,
+ PROTOCOLWAIT,
+ STANDARDMODE = 400,
+ IF = 517
+} tmTDA18271cfgIndex_t;
+
+typedef enum _tmTDA18271PowerState_t {
+ tmPowerNormalMode, // Device normal mode
+ tmPowerSleepMode, // Device sleep mode
+ tmPowerStandbyWith16MHz, // Device standby with 16Mhz
+ tmPowerStandbyWith16MHzAndLoopThrough, // Device standby with 16Mhz and loop through
+ tmPowerStandbyWithLoopThrough, // Device standby with loop through
+ tmPowerNotSupported, // Not supported power mode
+} tmTDA18271PowerState_t, *ptmTDA18271PowerState_t;
+
+typedef enum _tmTDA18271StandardMode_t {
+ tmDigital_TV_ATSC_6MHz, // Digital TV ATSC 6MHz
+ tmDigital_TV_DVBT_7MHz, // Digital TV DVB-T 7MHz
+ tmDigital_TV_DVBT_8MHz, // Digital TV DVB-T 8MHz
+ tmAnalog_TV_MN, // Analog TV M/N
+ tmAnalog_TV_B, // Analog TV B
+ tmAnalog_TV_GH, // Analog TV G/H
+ tmAnalog_TV_I, // Analog TV I
+ tmAnalog_TV_DK, // Analog TV D/K
+ tmAnalog_TV_L, // Analog TV L
+ tmAnalog_TV_LL, // Analog TV L'
+ tmAnalog_FM_Radio, // Analog FM Radio
+ tmDigital_TV_QAM_6MHz, // Digital TV QAM 6MHz
+ tmDigital_TV_QAM_8MHz, // Digital TV QAM 8MHz
+ tmStandardNotSupported, // Not supported standard
+} tmTDA18271StandardMode_t, *ptmTDA18271StandardMode_t;
+
+typedef enum _tmTDA18271ThermometerMode_t {
+ tmThermometerOff, // Thermometer off
+ tmThermometerOn, // Thermometer on
+} tmTDA18271ThermometerMode_t, *ptmTDA18271ThermometerMode_t;
+
+typedef enum _tmTDA18271MapName_t {
+ tmTDA18271_IR_MEAS_Map, // Image rejection measurement map
+ tmTDA18271_IR_CAL_Map, // Image rejection calibration map
+ tmTDA18271_BP_FILTER_Map, // Band pass filter map
+ tmTDA18271_RF_BAND_Map, // RF band map
+ tmTDA18271_GAIN_TAPER_Map, // Gain tapper map
+ tmTDA18271_RF_CAL_Map, // RF calibration map
+ tmTDA18271_RF_CAL_KMCO_Map, // RF calibration protocol map
+ tmTDA18271_THERMOMETER_Map, // Thermometer map
+ tmTDA18271_CAL_PLL_Map, // Calibration PLL map
+ tmTDA18271_MAIN_PLL_Map, // Main PLL map
+ tmTDA18271_I2C_Map, // I2C map
+} tmTDA18271MapName_t, *ptmTDA18271MapName_t;
+
+typedef struct _tmTDA18271_IR_MEAS_Map_t {
+ UInt32 uRF_Max;
+} tmTDA18271_IR_MEAS_Map_t, *ptmTDA18271_IR_MEAS_Map_t;
+
+typedef struct _tmTDA18271_IR_CAL_Map_t {
+ UInt32 uRF;
+ UInt32 uIR_GStep;
+} tmTDA18271_IR_CAL_Map_t, *ptmTDA18271_IR_CAL_Map_t;
+
+typedef struct _tmTDA18271_BP_FILTER_Map_t {
+ UInt32 uRF_Max;
+ UInt32 uBP_Filter;
+} tmTDA18271_BP_FILTER_Map_t, *ptmTDA18271_BP_FILTER_Map_t;
+
+typedef struct _tmTDA18271_RF_BAND_Map_t {
+ UInt32 uRF_Max;
+ UInt32 uRF_Band;
+} tmTDA18271_RF_BAND_Map_t, *ptmTDA18271_RF_BAND_Map_t;
+
+typedef struct _tmTDA18271_GAIN_TAPER_Map_t {
+ UInt32 uRF_Max;
+ UInt32 uGain_Taper;
+} tmTDA18271_GAIN_TAPER_Map_t, *ptmTDA18271_GAIN_TAPER_Map_t;
+
+typedef struct _tmTDA18271_RF_CAL_Map_t {
+ UInt32 uRF_Max;
+ UInt32 uRFC_Cprog;
+} tmTDA18271_RF_CAL_Map_t, *ptmTDA18271_RF_CAL_Map_t;
+
+typedef struct _tmTDA18271_RF_CAL_KMCO_Map_t {
+ UInt32 uRF_Max;
+ UInt32 uK;
+ UInt32 uM;
+ UInt32 uCOAmpl;
+} tmTDA18271_RF_CAL_KMCO_Map_t, *ptmTDA18271_RF_CAL_KMCO_Map_t;
+
+typedef struct _tmTDA18271_THERMOMETER_Map_t {
+ UInt32 uTM_D;
+ UInt32 uTM_60_92;
+ UInt32 uTM_92_122;
+} tmTDA18271_THERMOMETER_Map_t, *ptmTDA18271_THERMOMETER_Map_t;
+
+typedef struct _tmTDA18271_PLL_Map_t {
+ UInt32 uLO_Max;
+ UInt32 uPost_Div;
+ UInt32 uDiv;
+} tmTDA18271_PLL_Map_t, *ptmTDA18271_PLL_Map_t;
+
+typedef struct _tmTDA18271Config_t {
+ UInt32 uBoard;
+ UInt32 uStandard;
+ UInt32 uRF;
+ UInt32 uIF;
+ UInt32 uBW;
+ UInt32 uTMMODE;
+ UInt32 uPLMODE;
+ UInt32 uMapName;
+ UInt32 uMAPCOLUMN;
+ UInt32 uMAPROW;
+ UInt32 uPROTOCOLSTEP;
+ UInt32 uPROTOCOLWAIT;
+ tmTDA18271_IR_MEAS_Map_t IR_MEAS_Map[TDA18271_IR_MEAS_NB_ROWS];
+ tmTDA18271_IR_CAL_Map_t IR_CAL_Map[TDA18271_IR_CAL_NB_ROWS];
+ tmTDA18271_BP_FILTER_Map_t BP_FILTER_Map[TDA18271_BP_FILTER_NB_ROWS];
+ tmTDA18271_RF_BAND_Map_t RF_BAND_Map[TDA18271_RF_BAND_NB_ROWS];
+ tmTDA18271_GAIN_TAPER_Map_t GAIN_TAPER_Map[TDA18271_GAIN_TAPER_NB_ROWS];
+ tmTDA18271_RF_CAL_Map_t RF_CAL_Map[TDA18271_RF_CAL_NB_ROWS];
+ tmTDA18271_RF_CAL_KMCO_Map_t RF_CAL_KMCO_Map[TDA18271_RF_CAL_KMCO_NB_ROWS];
+ tmTDA18271_THERMOMETER_Map_t THERMOMETER_Map[TDA18271_THERMOMETER_NB_ROWS];
+ tmTDA18271_PLL_Map_t CAL_PLL_Map[TDA18271_CAL_PLL_NB_ROWS];
+ tmTDA18271_PLL_Map_t MAIN_PLL_Map[TDA18271_MAIN_PLL_NB_ROWS];
+} tmTDA18271Config_t, *ptmTDA18271Config_t;
+
+typedef struct _tmTDA18271I2CMap_t
+{
+ union
+ {
+ UInt8 ID_BYTE; // address 0x00
+ // Chip identification byte
+ struct
+ {
+ UInt8 ID :7; // Chip identification number
+ UInt8 UNUSED_0x00 :1; // Reserved, must be written as 1
+ };
+ };
+
+ union
+ {
+ UInt8 THERMO_BYTE; // address 0x01
+ // Thermometer byte
+ struct
+ {
+ UInt8 TM_D :4; // Data from die temperature measurement
+ UInt8 TM_ON :1; // Enable Die temperature measurement
+ UInt8 TM_Range :1; // Range selection bit for the internal die sensor
+ // 0: 60 to 92�C
+ // 1: 92 to 122�C
+ UInt8 MAIN_Lock :1; // Indicate that the MAIN synthesizer is locked to the programmed frequency
+ // 0: Not Locked
+ // 1: Locked
+ UInt8 POR :1; // Power on reset bit
+ // This bit is set to 1 each time the power supply falls below a certain level (around 1.4V) and is reset after a read operation ending with a stop condition
+ };
+ };
+
+ union
+ {
+ UInt8 POWER_LEVEL_BYTE; // address 0x02
+ // Power level byte
+ struct
+ {
+ UInt8 Power_Level_7_to_0:8;// Power level indicator value
+ };
+ };
+
+ union
+ {
+ UInt8 EASY_PROG_BYTE_1; // address 0x03
+ // Easy programming byte 1
+ struct
+ {
+ UInt8 BP_Filter :3; // RF band-pass filter selection (H3/H5)
+ UInt8 IR_CAL_OK :1; // Indicate that the 3 Image rejection calibration procedure (Flow, Fmid, Fhigh) have been successful
+ UInt8 RF_CAL_OK :1; // Indicate that the RF tracking filter calibration procedure has been successful
+ UInt8 UNUSED_0x03 :1; // Reserved, must be written as 0
+ UInt8 Dis_Power_level:1;// Disable power level measurement
+ // 0: Power measurement valid
+ // 1: Power measurement not guaranted
+ UInt8 Power_Level_8 :1; // Power level indicator value
+ };
+ };
+
+ union
+ {
+ UInt8 EASY_PROG_BYTE_2; // address 0x04
+ // Easy programming byte 2
+ struct
+ {
+ UInt8 Gain_Taper :5; // Gain taper value
+ // 0 : max atten. (end of Band)
+ // 31: min atten. (start of Band)
+ UInt8 RF_Band :3; // RF tracking filter band and sub-band selection
+ };
+ };
+
+ union
+ {
+ UInt8 EASY_PROG_BYTE_3; // address 0x05
+ // Easy programming byte 3
+ struct
+ {
+ UInt8 Std :5; // Standard selection
+ UInt8 SM_XT :1; // XTAL output sleep mode
+ UInt8 SM_LT :1; // Loop through sleep mode
+ UInt8 SM :1; // General sleep mode
+ };
+ };
+
+ union
+ {
+ UInt8 EASY_PROG_BYTE_4; // address 0x06
+ // Easy programming byte 4
+ struct
+ {
+ UInt8 CAL_Mode :2; // calibration mode selection
+ UInt8 IF_Level :3; // IF output level selection
+ UInt8 Xtout_400mV :1; // XTAL output level optional selection
+ UInt8 XTout_ON :1; // Enable 16MHz on XTAL output
+ UInt8 FM_RFn :1; // FM or RF input selection
+ };
+ };
+
+ union
+ {
+ UInt8 EASY_PROG_BYTE_5; // address 0x07
+ // Easy programming byte 5
+ struct
+ {
+ UInt8 IR_Meas :3; // Image rejection measurement mode
+ UInt8 UNUSED_0x07 :1; // Reserved, must be written as 0
+ UInt8 IR_Gstep :3; // Gain step for image rejection measurement. Depends on frequency
+ UInt8 Extended_Reg :1; // Enable the extended byte addressing
+ // 0: Limited byte (&h00:&h0F)
+ // 1: Extended byte (&h00:&h26)
+ };
+ };
+
+ union
+ {
+ UInt8 CAL_POST_DIV_BYTE; // address 0x08
+ // CAL post divider byte
+ };
+
+ union
+ {
+ UInt8 CAL_DIV_BYTE_1; // address 0x09
+ // CAL divider byte 1
+ struct
+ {
+ UInt8 CAL_Div_22_to_16:7;// CAL divider value 22 to 16
+ UInt8 UNUSED_0x09 :1; // Reserved, must be written as 0
+ };
+ };
+
+ union
+ {
+ UInt8 CAL_DIV_BYTE_2; // address 0x0A
+ // CAL divider byte 2
+ struct
+ {
+ UInt8 CAL_Div_15_to_8:8;// CAL divider value 15 to 8
+ };
+ };
+
+ union
+ {
+ UInt8 CAL_DIV_BYTE_3; // address 0x0B
+ // CAL divider byte 3
+ struct
+ {
+ UInt8 CAL_Div_7_to_0:8; // CAL divider value 7 to 0
+ };
+ };
+
+ union
+ {
+ UInt8 MAIN_POST_DIV_BYTE; // address 0x0C
+ // MAIN post divider byte
+ struct
+ {
+ UInt8 MAIN_Post_Div :7; // MAIN post divider value
+ UInt8 IF_notch :1; // Reserved, must be written as 0
+ };
+ };
+
+ union
+ {
+ UInt8 MAIN_DIV_BYTE_1; // address 0x0D
+ // MAIN divider byte 1
+ struct
+ {
+ UInt8 MAIN_Div_22_to_16:7;// MAIN divider value 22 to 16
+ UInt8 UNUSED_0x0D :1; // Reserved, must be written as 0
+ };
+ };
+
+ union
+ {
+ UInt8 MAIN_DIV_BYTE_2; // address 0x0E
+ // MAIN divider byte 2
+ struct
+ {
+ UInt8 MAIN_Div_15_to_8:8;// MAIN divider value 15 to 8
+ };
+ };
+
+ union
+ {
+ UInt8 MAIN_DIV_BYTE_3; // address 0x0F
+ // MAIN divider byte 3
+ struct
+ {
+ UInt8 MAIN_Div_7_to_0:8;// MAIN divider value 7 to 0
+ };
+ };
+
+ UInt8 EXTENDED_BYTE_1; // address 0x10
+ // extended byte 1
+
+ UInt8 EXTENDED_BYTE_2; // address 0x11
+ // extended byte 2
+
+ UInt8 EXTENDED_BYTE_3; // address 0x12
+ // extended byte 3
+
+ UInt8 EXTENDED_BYTE_4; // address 0x13
+ // extended byte 4
+
+ UInt8 EXTENDED_BYTE_5; // address 0x14
+ // extended byte 5
+
+ UInt8 EXTENDED_BYTE_6; // address 0x15
+ // extended byte 6
+
+ UInt8 EXTENDED_BYTE_7; // address 0x16
+ // extended byte7
+
+ UInt8 EXTENDED_BYTE_8; // address 0x17
+ // extended byte 8
+
+ UInt8 EXTENDED_BYTE_9; // address 0x18
+ // extended byte 9
+
+ UInt8 EXTENDED_BYTE_10; // address 0x19
+ // extended byte 10
+
+ UInt8 EXTENDED_BYTE_11; // address 0x1A
+ // extended byte 11
+
+ UInt8 EXTENDED_BYTE_12; // address 0x1B
+ // extended byte 12
+
+ UInt8 EXTENDED_BYTE_13; // address 0x1C
+ // extended byte 13
+
+ UInt8 EXTENDED_BYTE_14; // address 0x1D
+ // extended byte 14
+
+ UInt8 EXTENDED_BYTE_15; // address 0x1E
+ // extended byte 15
+
+ UInt8 EXTENDED_BYTE_16; // address 0x1F
+ // extended byte 16
+
+ UInt8 EXTENDED_BYTE_17; // address 0x20
+ // extended byte 17
+
+ UInt8 EXTENDED_BYTE_18; // address 0x21
+ // extended byte 18
+
+ UInt8 EXTENDED_BYTE_19; // address 0x22
+ // extended byte 19
+
+ UInt8 EXTENDED_BYTE_20; // address 0x23
+ // extended byte 20
+
+ UInt8 EXTENDED_BYTE_21; // address 0x24
+ // extended byte 21
+
+ UInt8 EXTENDED_BYTE_22; // address 0x25
+ // extended byte 22
+
+ UInt8 EXTENDED_BYTE_23; // address 0x26
+ // extended byte 23
+
+} tmTDA18271I2CMap_t, *ptmTDA18271I2CMap_t;
+
+typedef struct _tmAFAInfo_t {
+ Demodulator* demodulator;
+ UInt8 chip;
+} tmAFAInfo_t, *ptmAFAInfo_t;
+
+typedef struct _tmTDA18271Object_t {
+ tmAFAInfo_t AFAInfo;
+ Bool_ init;
+ UInt32 uHwAddress;
+ tmhalFEBslSystemFunc_t SystemFunc;
+ tmTDA18271PowerState_t curPowerState;
+ tmTDA18271StandardMode_t StandardMode;
+ tmTDA18271Config_t Config;
+ tmTDA18271I2CMap_t I2CMap;
+ UInt32 I2CLog[TDA18271_LOG_NB_ROWS][TDA18271_NB_BYTES + 2];
+ UInt32 uTickEnd;
+} tmTDA18271Object_t, *ptmTDA18271Object_t;
+
+//-----------------------------------------------------------------------------
+// Function:
+//-----------------------------------------------------------------------------
+//
+
+tmErrorCode_t
+tmbslTDA18271Init(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmbslTuParam_t Param // I: setup parameters
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // _TMBSL_TDA18271LOCAL_H //--------------- \ No newline at end of file
diff --git a/api/TDA18271StaticInstance_C2.h b/api/TDA18271StaticInstance_C2.h
new file mode 100644
index 0000000..19d84f8
--- /dev/null
+++ b/api/TDA18271StaticInstance_C2.h
@@ -0,0 +1,1670 @@
+//-----------------------------------------------------------------------------
+// $Header:
+// (C) Copyright 2001 NXP Semiconductors, All rights reserved
+//
+// This source code and any compilation or derivative thereof is the sole
+// property of NXP Corporation and is provided pursuant to a Software
+// License Agreement. This code is the proprietary information of NXP
+// Corporation and is confidential in nature. Its use and dissemination by
+// any party other than NXP Corporation is strictly limited by the
+// confidential information provisions of the Agreement referenced above.
+//-----------------------------------------------------------------------------
+// FILE NAME: allocStaticInstance.h
+//
+// DESCRIPTION: define the static Objects
+//
+// DOCUMENT REF: DVP Software Coding Guidelines v1.14
+// DVP Board Support Library Architecture Specification v0.5
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+#ifndef _TMBSL_ALLOC_STATIC_INSTANCE_H //-----------------
+#define _TMBSL_ALLOC_STATIC_INSTANCE_H
+#define FALSE 0
+#define TRUE 1
+#define Null 0
+
+//-----------------------------------------------------------------------------
+// Global data:
+//-----------------------------------------------------------------------------
+//
+//
+// default instance
+tmTDA18271Object_t_C2 gTDA18271Instance_C2[] =
+{
+ {
+ {
+ NULL, /* Demodulator */
+ 0x01 /* chip */
+ },
+ 0x00, // TunerUnit
+ False, // init (instance initialization default)
+
+ 0x00, // uHwAddress (HwId default value)
+
+#ifdef NXPFE
+ nullptr, // SystemFuncd
+#else // NXPFE
+ { // SystemFunc (system functions default addresses)
+ Null,
+ Null,
+ Null,
+ Null,
+ },
+#endif // NXPFE
+ tmPowerSleepMode_C2, // default power state
+ tmDigital_TV_DVBT_8MHz_C2, // default standard mode
+ { // Config
+ CUSTOM_BOARD_DEF, // uBoard [default Configuration structure]
+ OM57XX_STANDARD_DEF, // uStandard
+ 500000000, // uRF
+ 6750000, // uIF
+ //6000000, // uBW
+ 0x00, // uTMVALUE_RFCAL
+ 0x01, // uPLMODE
+ 0x00, // uRFCAL_TCOMP
+ 0x00, // uMAPNAME
+ 0x00, // uMAPCOLUMN
+ 0x00, // uMAPROW
+ 0x00, // uPROTOCOLSTEP
+ { // IR_MEAS_Map uRF_Max, uIR_Meas
+ {200000000, 0x05},
+ {600000000, 0x06},
+ {865000000, 0x07},
+ },
+ { // IR_CAL_Map uRF, uIR_GStep
+ {72000000, 0x03},
+ {408000000, 0x03},
+ {808000000, 0x03},
+ },
+ { // BP_FILTER_Map uRF_Max, uBP_Filter
+ {62000000, 0x00},
+ {84000000, 0x01},
+ {100000000, 0x02},
+ {140000000, 0x03},
+ {170000000, 0x04},
+ {180000000, 0x05},
+ {865000000, 0x06},
+ },
+ { // RF_BAND_Map uRF_Max, uRF_Band, uRF1, uRF2, uRF3, uRF_A1, uRF_B1, uRF_A2, uRF_B2, uRF1_default, uRF2_default, uRF3_default
+ {47900000, 0x00, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 46000000, 0, 0 },
+ {61100000, 0x01, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 52200000, 0, 0 },
+ {152600000, 0x02, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 70100000, 136800000, 0 },
+ {164700000, 0x03, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 156700000, 0, 0 },
+ {203500000, 0x04, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 186250000, 0, 0 },
+ {457800000, 0x05, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 230000000, 345000000, 426000000 },
+ {865000000, 0x06, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 489500000, 697500000, 842000000 },
+ },
+ { // GAIN_TAPER_Map uRF_Max, uGain_Taper
+ {45400000, 0x1F},
+ {45800000, 0x1E},
+ {46200000, 0x1D},
+ {46700000, 0x1C},
+ {47100000, 0x1B},
+ {47500000, 0x1A},
+ {47900000, 0x19},
+ {49600000, 0x17},
+ {51200000, 0x16},
+ {52900000, 0x15},
+ {54500000, 0x14},
+ {56200000, 0x13},
+ {57800000, 0x12},
+ {59500000, 0x11},
+ {61100000, 0x10},
+ {67600000, 0x0D},
+ {74200000, 0x0C},
+ {80700000, 0x0B},
+ {87200000, 0x0A},
+ {93800000, 0x09},
+ {100300000, 0x08},
+ {106900000, 0x07},
+ {113400000, 0x06},
+ {119900000, 0x05},
+ {126500000, 0x04},
+ {133000000, 0x03},
+ {139500000, 0x02},
+ {146100000, 0x01},
+ {152600000, 0x00},
+ {154300000, 0x1F},
+ {156100000, 0x1E},
+ {157800000, 0x1D},
+ {159500000, 0x1C},
+ {161200000, 0x1B},
+ {163000000, 0x1A},
+ {164700000, 0x19},
+ {170200000, 0x17},
+ {175800000, 0x16},
+ {181300000, 0x15},
+ {186900000, 0x14},
+ {192400000, 0x13},
+ {198000000, 0x12},
+ {203500000, 0x11},
+ {216200000, 0x14},
+ {228900000, 0x13},
+ {241600000, 0x12},
+ {254400000, 0x11},
+ {267100000, 0x10},
+ {279800000, 0x0F},
+ {292500000, 0x0E},
+ {305200000, 0x0D},
+ {317900000, 0x0C},
+ {330700000, 0x0B},
+ {343400000, 0x0A},
+ {356100000, 0x09},
+ {368800000, 0x08},
+ {381500000, 0x07},
+ {394200000, 0x06},
+ {406900000, 0x05},
+ {419700000, 0x04},
+ {432400000, 0x03},
+ {445100000, 0x02},
+ {457800000, 0x01},
+ {476300000, 0x19},
+ {494800000, 0x18},
+ {513300000, 0x17},
+ {531800000, 0x16},
+ {550300000, 0x15},
+ {568900000, 0x14},
+ {587400000, 0x13},
+ {605900000, 0x12},
+ {624400000, 0x11},
+ {642900000, 0x10},
+ {661400000, 0x0F},
+ {679900000, 0x0E},
+ {698400000, 0x0D},
+ {716900000, 0x0C},
+ {735400000, 0x0B},
+ {753900000, 0x0A},
+ {772500000, 0x09},
+ {791000000, 0x08},
+ {809500000, 0x07},
+ {828000000, 0x06},
+ {846500000, 0x05},
+ {865000000, 0x04},
+ },
+ { // RF_CAL_Map uRF_Max, uRFC_Cprog
+ {41000000, 0x0F},
+ {43000000, 0x1C},
+ {45000000, 0x2F},
+ {46000000, 0x39},
+ {47000000, 0x40},
+ {47900000, 0x50},
+ {49100000, 0x16},
+ {50000000, 0x18},
+ {51000000, 0x20},
+ {53000000, 0x28},
+ {55000000, 0x2B},
+ {56000000, 0x32},
+ {57000000, 0x35},
+ {58000000, 0x3E},
+ {59000000, 0x43},
+ {60000000, 0x4E},
+ {61100000, 0x55},
+ {63000000, 0x0F},
+ {64000000, 0x11},
+ {65000000, 0x12},
+ {66000000, 0x15},
+ {67000000, 0x16},
+ {68000000, 0x17},
+ {70000000, 0x19},
+ {71000000, 0x1C},
+ {72000000, 0x1D},
+ {73000000, 0x1F},
+ {74000000, 0x20},
+ {75000000, 0x21},
+ {76000000, 0x24},
+ {77000000, 0x25},
+ {78000000, 0x27},
+ {80000000, 0x28},
+ {81000000, 0x29},
+ {82000000, 0x2D},
+ {83000000, 0x2E},
+ {84000000, 0x2F},
+ {85000000, 0x31},
+ {86000000, 0x33},
+ {87000000, 0x34},
+ {88000000, 0x35},
+ {89000000, 0x37},
+ {90000000, 0x38},
+ {91000000, 0x39},
+ {93000000, 0x3C},
+ {94000000, 0x3E},
+ {95000000, 0x3F},
+ {96000000, 0x40},
+ {97000000, 0x42},
+ {99000000, 0x45},
+ {100000000, 0x46},
+ {102000000, 0x48},
+ {103000000, 0x4A},
+ {105000000, 0x4D},
+ {106000000, 0x4E},
+ {107000000, 0x50},
+ {108000000, 0x51},
+ {110000000, 0x54},
+ {111000000, 0x56},
+ {112000000, 0x57},
+ {113000000, 0x58},
+ {114000000, 0x59},
+ {115000000, 0x5C},
+ {116000000, 0x5D},
+ {117000000, 0x5F},
+ {119000000, 0x60},
+ {120000000, 0x64},
+ {121000000, 0x65},
+ {122000000, 0x66},
+ {123000000, 0x68},
+ {124000000, 0x69},
+ {125000000, 0x6C},
+ {126000000, 0x6D},
+ {127000000, 0x6E},
+ {128000000, 0x70},
+ {129000000, 0x71},
+ {130000000, 0x75},
+ {131000000, 0x77},
+ {132000000, 0x78},
+ {133000000, 0x7B},
+ {134000000, 0x7E},
+ {135000000, 0x81},
+ {136000000, 0x82},
+ {137000000, 0x87},
+ {138000000, 0x88},
+ {139000000, 0x8D},
+ {140000000, 0x8E},
+ {141000000, 0x91},
+ {142000000, 0x95},
+ {143000000, 0x9A},
+ {144000000, 0x9D},
+ {145000000, 0xA1},
+ {146000000, 0xA2},
+ {147000000, 0xA4},
+ {148000000, 0xA9},
+ {149000000, 0xAE},
+ {150000000, 0xB0},
+ {151000000, 0xB1},
+ {152000000, 0xB7},
+ {152600000, 0xBD},
+ {154000000, 0x20},
+ {155000000, 0x22},
+ {156000000, 0x24},
+ {157000000, 0x25},
+ {158000000, 0x27},
+ {159000000, 0x29},
+ {160000000, 0x2C},
+ {161000000, 0x2D},
+ {163000000, 0x2E},
+ {164000000, 0x2F},
+ {164700000, 0x30},
+ {166000000, 0x11},
+ {167000000, 0x12},
+ {168000000, 0x13},
+ {169000000, 0x14},
+ {170000000, 0x15},
+ {172000000, 0x16},
+ {173000000, 0x17},
+ {174000000, 0x18},
+ {175000000, 0x1A},
+ {176000000, 0x1B},
+ {178000000, 0x1D},
+ {179000000, 0x1E},
+ {180000000, 0x1F},
+ {181000000, 0x20},
+ {182000000, 0x21},
+ {183000000, 0x22},
+ {184000000, 0x24},
+ {185000000, 0x25},
+ {186000000, 0x26},
+ {187000000, 0x27},
+ {188000000, 0x29},
+ {189000000, 0x2A},
+ {190000000, 0x2C},
+ {191000000, 0x2D},
+ {192000000, 0x2E},
+ {193000000, 0x2F},
+ {194000000, 0x30},
+ {195000000, 0x33},
+ {196000000, 0x35},
+ {198000000, 0x36},
+ {200000000, 0x38},
+ {201000000, 0x3C},
+ {202000000, 0x3D},
+ {203500000, 0x3E},
+ {206000000, 0x0E},
+ {208000000, 0x0F},
+ {212000000, 0x10},
+ {216000000, 0x11},
+ {217000000, 0x12},
+ {218000000, 0x13},
+ {220000000, 0x14},
+ {222000000, 0x15},
+ {225000000, 0x16},
+ {228000000, 0x17},
+ {231000000, 0x18},
+ {234000000, 0x19},
+ {235000000, 0x1A},
+ {236000000, 0x1B},
+ {237000000, 0x1C},
+ {240000000, 0x1D},
+ {242000000, 0x1E},
+ {244000000, 0x1F},
+ {247000000, 0x20},
+ {249000000, 0x21},
+ {252000000, 0x22},
+ {253000000, 0x23},
+ {254000000, 0x24},
+ {256000000, 0x25},
+ {259000000, 0x26},
+ {262000000, 0x27},
+ {264000000, 0x28},
+ {267000000, 0x29},
+ {269000000, 0x2A},
+ {271000000, 0x2B},
+ {273000000, 0x2C},
+ {275000000, 0x2D},
+ {277000000, 0x2E},
+ {279000000, 0x2F},
+ {282000000, 0x30},
+ {284000000, 0x31},
+ {286000000, 0x32},
+ {287000000, 0x33},
+ {290000000, 0x34},
+ {293000000, 0x35},
+ {295000000, 0x36},
+ {297000000, 0x37},
+ {300000000, 0x38},
+ {303000000, 0x39},
+ {305000000, 0x3A},
+ {306000000, 0x3B},
+ {307000000, 0x3C},
+ {310000000, 0x3D},
+ {312000000, 0x3E},
+ {315000000, 0x3F},
+ {318000000, 0x40},
+ {320000000, 0x41},
+ {323000000, 0x42},
+ {324000000, 0x43},
+ {325000000, 0x44},
+ {327000000, 0x45},
+ {331000000, 0x46},
+ {334000000, 0x47},
+ {337000000, 0x48},
+ {339000000, 0x49},
+ {340000000, 0x4A},
+ {341000000, 0x4B},
+ {343000000, 0x4C},
+ {345000000, 0x4D},
+ {349000000, 0x4E},
+ {352000000, 0x4F},
+ {353000000, 0x50},
+ {355000000, 0x51},
+ {357000000, 0x52},
+ {359000000, 0x53},
+ {361000000, 0x54},
+ {362000000, 0x55},
+ {364000000, 0x56},
+ {368000000, 0x57},
+ {370000000, 0x58},
+ {372000000, 0x59},
+ {375000000, 0x5A},
+ {376000000, 0x5B},
+ {377000000, 0x5C},
+ {379000000, 0x5D},
+ {382000000, 0x5E},
+ {384000000, 0x5F},
+ {385000000, 0x60},
+ {386000000, 0x61},
+ {388000000, 0x62},
+ {390000000, 0x63},
+ {393000000, 0x64},
+ {394000000, 0x65},
+ {396000000, 0x66},
+ {397000000, 0x67},
+ {398000000, 0x68},
+ {400000000, 0x69},
+ {402000000, 0x6A},
+ {403000000, 0x6B},
+ {407000000, 0x6C},
+ {408000000, 0x6D},
+ {409000000, 0x6E},
+ {410000000, 0x6F},
+ {411000000, 0x70},
+ {412000000, 0x71},
+ {413000000, 0x72},
+ {414000000, 0x73},
+ {417000000, 0x74},
+ {418000000, 0x75},
+ {420000000, 0x76},
+ {422000000, 0x77},
+ {423000000, 0x78},
+ {424000000, 0x79},
+ {427000000, 0x7A},
+ {428000000, 0x7B},
+ {429000000, 0x7D},
+ {432000000, 0x7F},
+ {434000000, 0x80},
+ {435000000, 0x81},
+ {436000000, 0x83},
+ {437000000, 0x84},
+ {438000000, 0x85},
+ {439000000, 0x86},
+ {440000000, 0x87},
+ {441000000, 0x88},
+ {442000000, 0x89},
+ {445000000, 0x8A},
+ {446000000, 0x8B},
+ {447000000, 0x8C},
+ {448000000, 0x8E},
+ {449000000, 0x8F},
+ {450000000, 0x90},
+ {452000000, 0x91},
+ {453000000, 0x93},
+ {454000000, 0x94},
+ {456000000, 0x96},
+ {457800000, 0x98},
+ {461000000, 0x11},
+ {468000000, 0x12},
+ {472000000, 0x13},
+ {473000000, 0x14},
+ {474000000, 0x15},
+ {481000000, 0x16},
+ {486000000, 0x17},
+ {491000000, 0x18},
+ {498000000, 0x19},
+ {499000000, 0x1A},
+ {501000000, 0x1B},
+ {506000000, 0x1C},
+ {511000000, 0x1D},
+ {516000000, 0x1E},
+ {520000000, 0x1F},
+ {521000000, 0x20},
+ {525000000, 0x21},
+ {529000000, 0x22},
+ {533000000, 0x23},
+ {539000000, 0x24},
+ {541000000, 0x25},
+ {547000000, 0x26},
+ {549000000, 0x27},
+ {551000000, 0x28},
+ {556000000, 0x29},
+ {561000000, 0x2A},
+ {563000000, 0x2B},
+ {565000000, 0x2C},
+ {569000000, 0x2D},
+ {571000000, 0x2E},
+ {577000000, 0x2F},
+ {580000000, 0x30},
+ {582000000, 0x31},
+ {584000000, 0x32},
+ {588000000, 0x33},
+ {591000000, 0x34},
+ {596000000, 0x35},
+ {598000000, 0x36},
+ {603000000, 0x37},
+ {604000000, 0x38},
+ {606000000, 0x39},
+ {612000000, 0x3A},
+ {615000000, 0x3B},
+ {617000000, 0x3C},
+ {621000000, 0x3D},
+ {622000000, 0x3E},
+ {625000000, 0x3F},
+ {632000000, 0x40},
+ {633000000, 0x41},
+ {634000000, 0x42},
+ {642000000, 0x43},
+ {643000000, 0x44},
+ {647000000, 0x45},
+ {650000000, 0x46},
+ {652000000, 0x47},
+ {657000000, 0x48},
+ {661000000, 0x49},
+ {662000000, 0x4A},
+ {665000000, 0x4B},
+ {667000000, 0x4C},
+ {670000000, 0x4D},
+ {673000000, 0x4E},
+ {676000000, 0x4F},
+ {677000000, 0x50},
+ {681000000, 0x51},
+ {683000000, 0x52},
+ {686000000, 0x53},
+ {688000000, 0x54},
+ {689000000, 0x55},
+ {691000000, 0x56},
+ {695000000, 0x57},
+ {698000000, 0x58},
+ {703000000, 0x59},
+ {704000000, 0x5A},
+ {705000000, 0x5B},
+ {707000000, 0x5C},
+ {710000000, 0x5D},
+ {712000000, 0x5E},
+ {717000000, 0x5F},
+ {718000000, 0x60},
+ {721000000, 0x61},
+ {722000000, 0x62},
+ {723000000, 0x63},
+ {725000000, 0x64},
+ {727000000, 0x65},
+ {730000000, 0x66},
+ {732000000, 0x67},
+ {735000000, 0x68},
+ {740000000, 0x69},
+ {741000000, 0x6A},
+ {742000000, 0x6B},
+ {743000000, 0x6C},
+ {745000000, 0x6D},
+ {747000000, 0x6E},
+ {748000000, 0x6F},
+ {750000000, 0x70},
+ {752000000, 0x71},
+ {754000000, 0x72},
+ {757000000, 0x73},
+ {758000000, 0x74},
+ {760000000, 0x75},
+ {763000000, 0x76},
+ {764000000, 0x77},
+ {766000000, 0x78},
+ {767000000, 0x79},
+ {768000000, 0x7A},
+ {773000000, 0x7B},
+ {774000000, 0x7C},
+ {776000000, 0x7D},
+ {777000000, 0x7E},
+ {778000000, 0x7F},
+ {779000000, 0x80},
+ {781000000, 0x81},
+ {783000000, 0x82},
+ {784000000, 0x83},
+ {785000000, 0x84},
+ {786000000, 0x85},
+ {793000000, 0x86},
+ {794000000, 0x87},
+ {795000000, 0x88},
+ {797000000, 0x89},
+ {799000000, 0x8A},
+ {801000000, 0x8B},
+ {802000000, 0x8C},
+ {803000000, 0x8D},
+ {804000000, 0x8E},
+ {810000000, 0x90},
+ {811000000, 0x91},
+ {812000000, 0x92},
+ {814000000, 0x93},
+ {816000000, 0x94},
+ {817000000, 0x96},
+ {818000000, 0x97},
+ {820000000, 0x98},
+ {821000000, 0x99},
+ {822000000, 0x9A},
+ {828000000, 0x9B},
+ {829000000, 0x9D},
+ {830000000, 0x9F},
+ {831000000, 0xA0},
+ {833000000, 0xA1},
+ {835000000, 0xA2},
+ {836000000, 0xA3},
+ {837000000, 0xA4},
+ {838000000, 0xA6},
+ {840000000, 0xA8},
+ {842000000, 0xA9},
+ {845000000, 0xAA},
+ {846000000, 0xAB},
+ {847000000, 0xAD},
+ {848000000, 0xAE},
+ {852000000, 0xAF},
+ {853000000, 0xB0},
+ {858000000, 0xB1},
+ {860000000, 0xB2},
+ {861000000, 0xB3},
+ {862000000, 0xB4},
+ {863000000, 0xB6},
+ {864000000, 0xB8},
+ {865000000, 0xB9},
+ },
+ { // RF_CAL_DC_OVER_DT_Map uRF_Max, udC_Over_dT
+ {47900000, 0x00},
+ {55000000, 0x00},
+ {61100000, 0x0A},
+ {64000000, 0x0A},
+ {82000000, 0x14},
+ {84000000, 0x19},
+ {119000000, 0x1C},
+ {124000000, 0x20},
+ {129000000, 0x2A},
+ {134000000, 0x32},
+ {139000000, 0x39},
+ {144000000, 0x3E},
+ {149000000, 0x3F},
+ {152600000, 0x40},
+ {154000000, 0x40},
+ {164700000, 0x41},
+ {203500000, 0x32},
+ {353000000, 0x19},
+ {356000000, 0x1A},
+ {359000000, 0x1B},
+ {363000000, 0x1C},
+ {366000000, 0x1D},
+ {369000000, 0x1E},
+ {373000000, 0x1F},
+ {376000000, 0x20},
+ {379000000, 0x21},
+ {383000000, 0x22},
+ {386000000, 0x23},
+ {389000000, 0x24},
+ {393000000, 0x25},
+ {396000000, 0x26},
+ {399000000, 0x27},
+ {402000000, 0x28},
+ {404000000, 0x29},
+ {407000000, 0x2A},
+ {409000000, 0x2B},
+ {412000000, 0x2C},
+ {414000000, 0x2D},
+ {417000000, 0x2E},
+ {419000000, 0x2F},
+ {422000000, 0x30},
+ {424000000, 0x31},
+ {427000000, 0x32},
+ {429000000, 0x33},
+ {432000000, 0x34},
+ {434000000, 0x35},
+ {437000000, 0x36},
+ {439000000, 0x37},
+ {442000000, 0x38},
+ {444000000, 0x39},
+ {447000000, 0x3A},
+ {449000000, 0x3B},
+ {457800000, 0x3C},
+ {465000000, 0x0F},
+ {477000000, 0x12},
+ {483000000, 0x14},
+ {502000000, 0x19},
+ {508000000, 0x1B},
+ {519000000, 0x1C},
+ {522000000, 0x1D},
+ {524000000, 0x1E},
+ {534000000, 0x1F},
+ {549000000, 0x20},
+ {554000000, 0x22},
+ {584000000, 0x24},
+ {589000000, 0x26},
+ {658000000, 0x27},
+ {664000000, 0x2C},
+ {669000000, 0x2D},
+ {699000000, 0x2E},
+ {704000000, 0x30},
+ {709000000, 0x31},
+ {714000000, 0x32},
+ {724000000, 0x33},
+ {729000000, 0x36},
+ {739000000, 0x38},
+ {744000000, 0x39},
+ {749000000, 0x3B},
+ {754000000, 0x3C},
+ {759000000, 0x3D},
+ {764000000, 0x3E},
+ {769000000, 0x3F},
+ {774000000, 0x40},
+ {779000000, 0x41},
+ {784000000, 0x43},
+ {789000000, 0x46},
+ {794000000, 0x48},
+ {799000000, 0x4B},
+ {804000000, 0x4F},
+ {809000000, 0x54},
+ {814000000, 0x59},
+ {819000000, 0x5D},
+ {824000000, 0x61},
+ {829000000, 0x68},
+ {834000000, 0x6E},
+ {839000000, 0x75},
+ {844000000, 0x7E},
+ {849000000, 0x82},
+ {854000000, 0x84},
+ {859000000, 0x8F},
+ {865000000, 0x9A},
+ },
+ { // RF_CAL_KMCO_Map uRF_Max, uK, uM, UCOAmp
+ {47900000, 0x03, 0x02, 0x03},
+ {61100000, 0x04, 0x01, 0x03},
+ {350000000, 0x03, 0x00, 0x03},
+ {720000000, 0x02, 0x01, 0x03},
+ {865000000, 0x03, 0x03, 0x03},
+ },
+ { // RF_CAL_CID_TARGET_Map uRF_Max, uCID_Target, uCount_Limit
+ {46000000, 0x04, 1800000},
+ {52200000, 0x0A, 1500000},
+ {70100000, 0x01, 4000000},
+ {136800000, 0x18, 4000000},
+ {156700000, 0x18, 4000000},
+#endif // TMBSL_TDA1827
+ {186250000, 0x0A, 4000000},
+ {230000000, 0x0A, 4000000},
+ {345000000, 0x18, 4000000},
+ {426000000, 0x0E, 4000000},
+ {489500000, 0x1E, 4000000},
+ {697500000, 0x32, 4000000},
+ {842000000, 0x3A, 4000000},
+ },
+ { // THERMOMETER_Map uTM_D, uTM_60_92, uTM_92_122
+ {0x00, 0x28, 0x5C},
+ {0x01, 0x3E, 0x5E},
+ {0x02, 0x42, 0x62},
+ {0x03, 0x40, 0x60},
+ {0x04, 0x4A, 0x6A},
+ {0x05, 0x48, 0x68},
+ {0x06, 0x44, 0x64},
+ {0x07, 0x46, 0x66},
+ {0x08, 0x5A, 0x7A},
+ {0x09, 0x58, 0x78},
+ {0x0A, 0x54, 0x74},
+ {0x0B, 0x56, 0x76},
+ {0x0C, 0x4C, 0x6C},
+ {0x0D, 0x4E, 0x6E},
+ {0x0E, 0x52, 0x72},
+ {0x0F, 0x50, 0x70},
+ },
+ { // CAL_PLL_Map uLO_Max, uPost_Div, uDiv
+ {33812500, 0xDD, 0xD0},
+ {36625000, 0xDC, 0xC0},
+ {39937500, 0xDB, 0xB0},
+ {43937500, 0xDA, 0xA0},
+ {48812500, 0xD9, 0x90},
+ {54937500, 0xD8, 0x80},
+ {62812500, 0xD3, 0x70},
+ {67625000, 0xCD, 0x68},
+ {73250000, 0xCC, 0x60},
+ {79875000, 0xCB, 0x58},
+ {87875000, 0xCA, 0x50},
+ {97625000, 0xC9, 0x48},
+ {109875000, 0xC8, 0x40},
+ {125625000, 0xC3, 0x38},
+ {135250000, 0xBD, 0x34},
+ {146500000, 0xBC, 0x30},
+ {159750000, 0xBB, 0x2C},
+ {175750000, 0xBA, 0x28},
+ {195250000, 0xB9, 0x24},
+ {219750000, 0xB8, 0x20},
+ {251250000, 0xB3, 0x1C},
+ {270500000, 0xAD, 0x1A},
+ {293000000, 0xAC, 0x18},
+ {319500000, 0xAB, 0x16},
+ {351500000, 0xAA, 0x14},
+ {390500000, 0xA9, 0x12},
+ {439500000, 0xA8, 0x10},
+ {502500000, 0xA3, 0x0E},
+ {541000000, 0x9D, 0x0D},
+ {586000000, 0x9C, 0x0C},
+ {639000000, 0x9B, 0x0B},
+ {703000000, 0x9A, 0x0A},
+ {781000000, 0x99, 0x09},
+ {879000000, 0x98, 0x08},
+ {1005000000,0x93, 0x07},
+ },
+ { // MAIN_PLL_Map uLO_Max, uPost_Div, uDiv
+ {33125000, 0x5F, 0xF0},
+ {35500000, 0x5E, 0xE0},
+ {38187500, 0x5D, 0xD0},
+ {41375000, 0x5C, 0xC0},
+ {45125000, 0x5B, 0xB0},
+ {49687500, 0x5A, 0xA0},
+ {55187500, 0x59, 0x90},
+ {62125000, 0x58, 0x80},
+ {66250000, 0x4F, 0x78},
+ {71000000, 0x4E, 0x70},
+ {76375000, 0x4D, 0x68},
+ {82750000, 0x4C, 0x60},
+ {90250000, 0x4B, 0x58},
+ {99375000, 0x4A, 0x50},
+ {110375000, 0x49, 0x48},
+ {124250000, 0x48, 0x40},
+ {132500000, 0x3F, 0x3C},
+ {142000000, 0x3E, 0x38},
+ {152750000, 0x3D, 0x34},
+ {165500000, 0x3C, 0x30},
+ {180500000, 0x3B, 0x2C},
+ {198750000, 0x3A, 0x28},
+ {220750000, 0x39, 0x24},
+ {248500000, 0x38, 0x20},
+ {265000000, 0x2F, 0x1E},
+ {284000000, 0x2E, 0x1C},
+ {305500000, 0x2D, 0x1A},
+ {331000000, 0x2C, 0x18},
+ {361000000, 0x2B, 0x16},
+ {397500000, 0x2A, 0x14},
+ {441500000, 0x29, 0x12},
+ {497000000, 0x28, 0x10},
+ {530000000, 0x1F, 0x0F},
+ {568000000, 0x1E, 0x0E},
+ {611000000, 0x1D, 0x0D},
+ {662000000, 0x1C, 0x0C},
+ {722000000, 0x1B, 0x0B},
+ {795000000, 0x1A, 0x0A},
+ {883000000, 0x19, 0x09},
+ {994000000, 0x18, 0x08},
+ },
+ },
+ 0x00, // I2CMap
+ 0x00, // I2CLog
+ 0x00, // uTickEnd [end tick value]
+ },
+ {
+ {
+ NULL, /* Demodulator */
+ 0x01 /* chip */
+ },
+ 0x01, // TunerUnit
+ False, // init (instance initialization default)
+
+ 0x00, // uHwAddress (HwId default value)
+
+#ifdef NXPFE
+ nullptr, // SystemFuncd
+#else // NXPFE
+ { // SystemFunc (system functions default addresses)
+ Null,
+ Null,
+ Null,
+ Null,
+ },
+#endif // NXPFE
+ tmPowerSleepMode_C2, // default power state
+ tmDigital_TV_DVBT_8MHz_C2, // default standard mode
+ { // Config
+ CUSTOM_BOARD_DEF, // uBoard [default Configuration structure]
+ OM57XX_STANDARD_DEF, // uStandard
+ 500000000, // uRF
+ 6750000, // uIF
+ //6000000, // uBW
+ 0x00, // uTMVALUE_RFCAL
+ 0x01, // uPLMODE
+ 0x00, // uRFCAL_TCOMP
+ 0x00, // uMAPNAME
+ 0x00, // uMAPCOLUMN
+ 0x00, // uMAPROW
+ 0x00, // uPROTOCOLSTEP
+ { // IR_MEAS_Map uRF_Max, uIR_Meas
+ {200000000, 0x05},
+ {600000000, 0x06},
+ {865000000, 0x07},
+ },
+ { // IR_CAL_Map uRF, uIR_GStep
+ {72000000, 0x03},
+ {408000000, 0x03},
+ {808000000, 0x03},
+ },
+ { // BP_FILTER_Map uRF_Max, uBP_Filter
+ {62000000, 0x00},
+ {84000000, 0x01},
+ {100000000, 0x02},
+ {140000000, 0x03},
+ {170000000, 0x04},
+ {180000000, 0x05},
+ {865000000, 0x06},
+ },
+ { // RF_BAND_Map uRF_Max, uRF_Band, uRF1, uRF2, uRF3, uRF_A1, uRF_B1, uRF_A2, uRF_B2, uRF1_default, uRF2_default, uRF3_default
+ {47900000, 0x00, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 46000000, 0, 0 },
+ {61100000, 0x01, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 52200000, 0, 0 },
+ {152600000, 0x02, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 70100000, 136800000, 0 },
+ {164700000, 0x03, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 156700000, 0, 0 },
+ {203500000, 0x04, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 186250000, 0, 0 },
+ {457800000, 0x05, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 230000000, 345000000, 426000000 },
+ {865000000, 0x06, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 489500000, 697500000, 842000000 },
+ },
+ { // GAIN_TAPER_Map uRF_Max, uGain_Taper
+ {45400000, 0x1F},
+ {45800000, 0x1E},
+ {46200000, 0x1D},
+ {46700000, 0x1C},
+ {47100000, 0x1B},
+ {47500000, 0x1A},
+ {47900000, 0x19},
+ {49600000, 0x17},
+ {51200000, 0x16},
+ {52900000, 0x15},
+ {54500000, 0x14},
+ {56200000, 0x13},
+ {57800000, 0x12},
+ {59500000, 0x11},
+ {61100000, 0x10},
+ {67600000, 0x0D},
+ {74200000, 0x0C},
+ {80700000, 0x0B},
+ {87200000, 0x0A},
+ {93800000, 0x09},
+ {100300000, 0x08},
+ {106900000, 0x07},
+ {113400000, 0x06},
+ {119900000, 0x05},
+ {126500000, 0x04},
+ {133000000, 0x03},
+ {139500000, 0x02},
+ {146100000, 0x01},
+ {152600000, 0x00},
+ {154300000, 0x1F},
+ {156100000, 0x1E},
+ {157800000, 0x1D},
+ {159500000, 0x1C},
+ {161200000, 0x1B},
+ {163000000, 0x1A},
+ {164700000, 0x19},
+ {170200000, 0x17},
+ {175800000, 0x16},
+ {181300000, 0x15},
+ {186900000, 0x14},
+ {192400000, 0x13},
+ {198000000, 0x12},
+ {203500000, 0x11},
+ {216200000, 0x14},
+ {228900000, 0x13},
+ {241600000, 0x12},
+ {254400000, 0x11},
+ {267100000, 0x10},
+ {279800000, 0x0F},
+ {292500000, 0x0E},
+ {305200000, 0x0D},
+ {317900000, 0x0C},
+ {330700000, 0x0B},
+ {343400000, 0x0A},
+ {356100000, 0x09},
+ {368800000, 0x08},
+ {381500000, 0x07},
+ {394200000, 0x06},
+ {406900000, 0x05},
+ {419700000, 0x04},
+ {432400000, 0x03},
+ {445100000, 0x02},
+ {457800000, 0x01},
+ {476300000, 0x19},
+ {494800000, 0x18},
+ {513300000, 0x17},
+ {531800000, 0x16},
+ {550300000, 0x15},
+ {568900000, 0x14},
+ {587400000, 0x13},
+ {605900000, 0x12},
+ {624400000, 0x11},
+ {642900000, 0x10},
+ {661400000, 0x0F},
+ {679900000, 0x0E},
+ {698400000, 0x0D},
+ {716900000, 0x0C},
+ {735400000, 0x0B},
+ {753900000, 0x0A},
+ {772500000, 0x09},
+ {791000000, 0x08},
+ {809500000, 0x07},
+ {828000000, 0x06},
+ {846500000, 0x05},
+ {865000000, 0x04},
+ },
+ { // RF_CAL_Map uRF_Max, uRFC_Cprog
+ {41000000, 0x0F},
+ {43000000, 0x1C},
+ {45000000, 0x2F},
+ {46000000, 0x39},
+ {47000000, 0x40},
+ {47900000, 0x50},
+ {49100000, 0x16},
+ {50000000, 0x18},
+ {51000000, 0x20},
+ {53000000, 0x28},
+ {55000000, 0x2B},
+ {56000000, 0x32},
+ {57000000, 0x35},
+ {58000000, 0x3E},
+ {59000000, 0x43},
+ {60000000, 0x4E},
+ {61100000, 0x55},
+ {63000000, 0x0F},
+ {64000000, 0x11},
+ {65000000, 0x12},
+ {66000000, 0x15},
+ {67000000, 0x16},
+ {68000000, 0x17},
+ {70000000, 0x19},
+ {71000000, 0x1C},
+ {72000000, 0x1D},
+ {73000000, 0x1F},
+ {74000000, 0x20},
+ {75000000, 0x21},
+ {76000000, 0x24},
+ {77000000, 0x25},
+ {78000000, 0x27},
+ {80000000, 0x28},
+ {81000000, 0x29},
+ {82000000, 0x2D},
+ {83000000, 0x2E},
+ {84000000, 0x2F},
+ {85000000, 0x31},
+ {86000000, 0x33},
+ {87000000, 0x34},
+ {88000000, 0x35},
+ {89000000, 0x37},
+ {90000000, 0x38},
+ {91000000, 0x39},
+ {93000000, 0x3C},
+ {94000000, 0x3E},
+ {95000000, 0x3F},
+ {96000000, 0x40},
+ {97000000, 0x42},
+ {99000000, 0x45},
+ {100000000, 0x46},
+ {102000000, 0x48},
+ {103000000, 0x4A},
+ {105000000, 0x4D},
+ {106000000, 0x4E},
+ {107000000, 0x50},
+ {108000000, 0x51},
+ {110000000, 0x54},
+ {111000000, 0x56},
+ {112000000, 0x57},
+ {113000000, 0x58},
+ {114000000, 0x59},
+ {115000000, 0x5C},
+ {116000000, 0x5D},
+ {117000000, 0x5F},
+ {119000000, 0x60},
+ {120000000, 0x64},
+ {121000000, 0x65},
+ {122000000, 0x66},
+ {123000000, 0x68},
+ {124000000, 0x69},
+ {125000000, 0x6C},
+ {126000000, 0x6D},
+ {127000000, 0x6E},
+ {128000000, 0x70},
+ {129000000, 0x71},
+ {130000000, 0x75},
+ {131000000, 0x77},
+ {132000000, 0x78},
+ {133000000, 0x7B},
+ {134000000, 0x7E},
+ {135000000, 0x81},
+ {136000000, 0x82},
+ {137000000, 0x87},
+ {138000000, 0x88},
+ {139000000, 0x8D},
+ {140000000, 0x8E},
+ {141000000, 0x91},
+ {142000000, 0x95},
+ {143000000, 0x9A},
+ {144000000, 0x9D},
+ {145000000, 0xA1},
+ {146000000, 0xA2},
+ {147000000, 0xA4},
+ {148000000, 0xA9},
+ {149000000, 0xAE},
+ {150000000, 0xB0},
+ {151000000, 0xB1},
+ {152000000, 0xB7},
+ {152600000, 0xBD},
+ {154000000, 0x20},
+ {155000000, 0x22},
+ {156000000, 0x24},
+ {157000000, 0x25},
+ {158000000, 0x27},
+ {159000000, 0x29},
+ {160000000, 0x2C},
+ {161000000, 0x2D},
+ {163000000, 0x2E},
+ {164000000, 0x2F},
+ {164700000, 0x30},
+ {166000000, 0x11},
+ {167000000, 0x12},
+ {168000000, 0x13},
+ {169000000, 0x14},
+ {170000000, 0x15},
+ {172000000, 0x16},
+ {173000000, 0x17},
+ {174000000, 0x18},
+ {175000000, 0x1A},
+ {176000000, 0x1B},
+ {178000000, 0x1D},
+ {179000000, 0x1E},
+ {180000000, 0x1F},
+ {181000000, 0x20},
+ {182000000, 0x21},
+ {183000000, 0x22},
+ {184000000, 0x24},
+ {185000000, 0x25},
+ {186000000, 0x26},
+ {187000000, 0x27},
+ {188000000, 0x29},
+ {189000000, 0x2A},
+ {190000000, 0x2C},
+ {191000000, 0x2D},
+ {192000000, 0x2E},
+ {193000000, 0x2F},
+ {194000000, 0x30},
+ {195000000, 0x33},
+ {196000000, 0x35},
+ {198000000, 0x36},
+ {200000000, 0x38},
+ {201000000, 0x3C},
+ {202000000, 0x3D},
+ {203500000, 0x3E},
+ {206000000, 0x0E},
+ {208000000, 0x0F},
+ {212000000, 0x10},
+ {216000000, 0x11},
+ {217000000, 0x12},
+ {218000000, 0x13},
+ {220000000, 0x14},
+ {222000000, 0x15},
+ {225000000, 0x16},
+ {228000000, 0x17},
+ {231000000, 0x18},
+ {234000000, 0x19},
+ {235000000, 0x1A},
+ {236000000, 0x1B},
+ {237000000, 0x1C},
+ {240000000, 0x1D},
+ {242000000, 0x1E},
+ {244000000, 0x1F},
+ {247000000, 0x20},
+ {249000000, 0x21},
+ {252000000, 0x22},
+ {253000000, 0x23},
+ {254000000, 0x24},
+ {256000000, 0x25},
+ {259000000, 0x26},
+ {262000000, 0x27},
+ {264000000, 0x28},
+ {267000000, 0x29},
+ {269000000, 0x2A},
+ {271000000, 0x2B},
+ {273000000, 0x2C},
+ {275000000, 0x2D},
+ {277000000, 0x2E},
+ {279000000, 0x2F},
+ {282000000, 0x30},
+ {284000000, 0x31},
+ {286000000, 0x32},
+ {287000000, 0x33},
+ {290000000, 0x34},
+ {293000000, 0x35},
+ {295000000, 0x36},
+ {297000000, 0x37},
+ {300000000, 0x38},
+ {303000000, 0x39},
+ {305000000, 0x3A},
+ {306000000, 0x3B},
+ {307000000, 0x3C},
+ {310000000, 0x3D},
+ {312000000, 0x3E},
+ {315000000, 0x3F},
+ {318000000, 0x40},
+ {320000000, 0x41},
+ {323000000, 0x42},
+ {324000000, 0x43},
+ {325000000, 0x44},
+ {327000000, 0x45},
+ {331000000, 0x46},
+ {334000000, 0x47},
+ {337000000, 0x48},
+ {339000000, 0x49},
+ {340000000, 0x4A},
+ {341000000, 0x4B},
+ {343000000, 0x4C},
+ {345000000, 0x4D},
+ {349000000, 0x4E},
+ {352000000, 0x4F},
+ {353000000, 0x50},
+ {355000000, 0x51},
+ {357000000, 0x52},
+ {359000000, 0x53},
+ {361000000, 0x54},
+ {362000000, 0x55},
+ {364000000, 0x56},
+ {368000000, 0x57},
+ {370000000, 0x58},
+ {372000000, 0x59},
+ {375000000, 0x5A},
+ {376000000, 0x5B},
+ {377000000, 0x5C},
+ {379000000, 0x5D},
+ {382000000, 0x5E},
+ {384000000, 0x5F},
+ {385000000, 0x60},
+ {386000000, 0x61},
+ {388000000, 0x62},
+ {390000000, 0x63},
+ {393000000, 0x64},
+ {394000000, 0x65},
+ {396000000, 0x66},
+ {397000000, 0x67},
+ {398000000, 0x68},
+ {400000000, 0x69},
+ {402000000, 0x6A},
+ {403000000, 0x6B},
+ {407000000, 0x6C},
+ {408000000, 0x6D},
+ {409000000, 0x6E},
+ {410000000, 0x6F},
+ {411000000, 0x70},
+ {412000000, 0x71},
+ {413000000, 0x72},
+ {414000000, 0x73},
+ {417000000, 0x74},
+ {418000000, 0x75},
+ {420000000, 0x76},
+ {422000000, 0x77},
+ {423000000, 0x78},
+ {424000000, 0x79},
+ {427000000, 0x7A},
+ {428000000, 0x7B},
+ {429000000, 0x7D},
+ {432000000, 0x7F},
+ {434000000, 0x80},
+ {435000000, 0x81},
+ {436000000, 0x83},
+ {437000000, 0x84},
+ {438000000, 0x85},
+ {439000000, 0x86},
+ {440000000, 0x87},
+ {441000000, 0x88},
+ {442000000, 0x89},
+ {445000000, 0x8A},
+ {446000000, 0x8B},
+ {447000000, 0x8C},
+ {448000000, 0x8E},
+ {449000000, 0x8F},
+ {450000000, 0x90},
+ {452000000, 0x91},
+ {453000000, 0x93},
+ {454000000, 0x94},
+ {456000000, 0x96},
+ {457800000, 0x98},
+ {461000000, 0x11},
+ {468000000, 0x12},
+ {472000000, 0x13},
+ {473000000, 0x14},
+ {474000000, 0x15},
+ {481000000, 0x16},
+ {486000000, 0x17},
+ {491000000, 0x18},
+ {498000000, 0x19},
+ {499000000, 0x1A},
+ {501000000, 0x1B},
+ {506000000, 0x1C},
+ {511000000, 0x1D},
+ {516000000, 0x1E},
+ {520000000, 0x1F},
+ {521000000, 0x20},
+ {525000000, 0x21},
+ {529000000, 0x22},
+ {533000000, 0x23},
+ {539000000, 0x24},
+ {541000000, 0x25},
+ {547000000, 0x26},
+ {549000000, 0x27},
+ {551000000, 0x28},
+ {556000000, 0x29},
+ {561000000, 0x2A},
+ {563000000, 0x2B},
+ {565000000, 0x2C},
+ {569000000, 0x2D},
+ {571000000, 0x2E},
+ {577000000, 0x2F},
+ {580000000, 0x30},
+ {582000000, 0x31},
+ {584000000, 0x32},
+ {588000000, 0x33},
+ {591000000, 0x34},
+ {596000000, 0x35},
+ {598000000, 0x36},
+ {603000000, 0x37},
+ {604000000, 0x38},
+ {606000000, 0x39},
+ {612000000, 0x3A},
+ {615000000, 0x3B},
+ {617000000, 0x3C},
+ {621000000, 0x3D},
+ {622000000, 0x3E},
+ {625000000, 0x3F},
+ {632000000, 0x40},
+ {633000000, 0x41},
+ {634000000, 0x42},
+ {642000000, 0x43},
+ {643000000, 0x44},
+ {647000000, 0x45},
+ {650000000, 0x46},
+ {652000000, 0x47},
+ {657000000, 0x48},
+ {661000000, 0x49},
+ {662000000, 0x4A},
+ {665000000, 0x4B},
+ {667000000, 0x4C},
+ {670000000, 0x4D},
+ {673000000, 0x4E},
+ {676000000, 0x4F},
+ {677000000, 0x50},
+ {681000000, 0x51},
+ {683000000, 0x52},
+ {686000000, 0x53},
+ {688000000, 0x54},
+ {689000000, 0x55},
+ {691000000, 0x56},
+ {695000000, 0x57},
+ {698000000, 0x58},
+ {703000000, 0x59},
+ {704000000, 0x5A},
+ {705000000, 0x5B},
+ {707000000, 0x5C},
+ {710000000, 0x5D},
+ {712000000, 0x5E},
+ {717000000, 0x5F},
+ {718000000, 0x60},
+ {721000000, 0x61},
+ {722000000, 0x62},
+ {723000000, 0x63},
+ {725000000, 0x64},
+ {727000000, 0x65},
+ {730000000, 0x66},
+ {732000000, 0x67},
+ {735000000, 0x68},
+ {740000000, 0x69},
+ {741000000, 0x6A},
+ {742000000, 0x6B},
+ {743000000, 0x6C},
+ {745000000, 0x6D},
+ {747000000, 0x6E},
+ {748000000, 0x6F},
+ {750000000, 0x70},
+ {752000000, 0x71},
+ {754000000, 0x72},
+ {757000000, 0x73},
+ {758000000, 0x74},
+ {760000000, 0x75},
+ {763000000, 0x76},
+ {764000000, 0x77},
+ {766000000, 0x78},
+ {767000000, 0x79},
+ {768000000, 0x7A},
+ {773000000, 0x7B},
+ {774000000, 0x7C},
+ {776000000, 0x7D},
+ {777000000, 0x7E},
+ {778000000, 0x7F},
+ {779000000, 0x80},
+ {781000000, 0x81},
+ {783000000, 0x82},
+ {784000000, 0x83},
+ {785000000, 0x84},
+ {786000000, 0x85},
+ {793000000, 0x86},
+ {794000000, 0x87},
+ {795000000, 0x88},
+ {797000000, 0x89},
+ {799000000, 0x8A},
+ {801000000, 0x8B},
+ {802000000, 0x8C},
+ {803000000, 0x8D},
+ {804000000, 0x8E},
+ {810000000, 0x90},
+ {811000000, 0x91},
+ {812000000, 0x92},
+ {814000000, 0x93},
+ {816000000, 0x94},
+ {817000000, 0x96},
+ {818000000, 0x97},
+ {820000000, 0x98},
+ {821000000, 0x99},
+ {822000000, 0x9A},
+ {828000000, 0x9B},
+ {829000000, 0x9D},
+ {830000000, 0x9F},
+ {831000000, 0xA0},
+ {833000000, 0xA1},
+ {835000000, 0xA2},
+ {836000000, 0xA3},
+ {837000000, 0xA4},
+ {838000000, 0xA6},
+ {840000000, 0xA8},
+ {842000000, 0xA9},
+ {845000000, 0xAA},
+ {846000000, 0xAB},
+ {847000000, 0xAD},
+ {848000000, 0xAE},
+ {852000000, 0xAF},
+ {853000000, 0xB0},
+ {858000000, 0xB1},
+ {860000000, 0xB2},
+ {861000000, 0xB3},
+ {862000000, 0xB4},
+ {863000000, 0xB6},
+ {864000000, 0xB8},
+ {865000000, 0xB9},
+ },
+ { // RF_CAL_DC_OVER_DT_Map uRF_Max, udC_Over_dT
+ {47900000, 0x00},
+ {55000000, 0x00},
+ {61100000, 0x0A},
+ {64000000, 0x0A},
+ {82000000, 0x14},
+ {84000000, 0x19},
+ {119000000, 0x1C},
+ {124000000, 0x20},
+ {129000000, 0x2A},
+ {134000000, 0x32},
+ {139000000, 0x39},
+ {144000000, 0x3E},
+ {149000000, 0x3F},
+ {152600000, 0x40},
+ {154000000, 0x40},
+ {164700000, 0x41},
+ {203500000, 0x32},
+ {353000000, 0x19},
+ {356000000, 0x1A},
+ {359000000, 0x1B},
+ {363000000, 0x1C},
+ {366000000, 0x1D},
+ {369000000, 0x1E},
+ {373000000, 0x1F},
+ {376000000, 0x20},
+ {379000000, 0x21},
+ {383000000, 0x22},
+ {386000000, 0x23},
+ {389000000, 0x24},
+ {393000000, 0x25},
+ {396000000, 0x26},
+ {399000000, 0x27},
+ {402000000, 0x28},
+ {404000000, 0x29},
+ {407000000, 0x2A},
+ {409000000, 0x2B},
+ {412000000, 0x2C},
+ {414000000, 0x2D},
+ {417000000, 0x2E},
+ {419000000, 0x2F},
+ {422000000, 0x30},
+ {424000000, 0x31},
+ {427000000, 0x32},
+ {429000000, 0x33},
+ {432000000, 0x34},
+ {434000000, 0x35},
+ {437000000, 0x36},
+ {439000000, 0x37},
+ {442000000, 0x38},
+ {444000000, 0x39},
+ {447000000, 0x3A},
+ {449000000, 0x3B},
+ {457800000, 0x3C},
+ {465000000, 0x0F},
+ {477000000, 0x12},
+ {483000000, 0x14},
+ {502000000, 0x19},
+ {508000000, 0x1B},
+ {519000000, 0x1C},
+ {522000000, 0x1D},
+ {524000000, 0x1E},
+ {534000000, 0x1F},
+ {549000000, 0x20},
+ {554000000, 0x22},
+ {584000000, 0x24},
+ {589000000, 0x26},
+ {658000000, 0x27},
+ {664000000, 0x2C},
+ {669000000, 0x2D},
+ {699000000, 0x2E},
+ {704000000, 0x30},
+ {709000000, 0x31},
+ {714000000, 0x32},
+ {724000000, 0x33},
+ {729000000, 0x36},
+ {739000000, 0x38},
+ {744000000, 0x39},
+ {749000000, 0x3B},
+ {754000000, 0x3C},
+ {759000000, 0x3D},
+ {764000000, 0x3E},
+ {769000000, 0x3F},
+ {774000000, 0x40},
+ {779000000, 0x41},
+ {784000000, 0x43},
+ {789000000, 0x46},
+ {794000000, 0x48},
+ {799000000, 0x4B},
+ {804000000, 0x4F},
+ {809000000, 0x54},
+ {814000000, 0x59},
+ {819000000, 0x5D},
+ {824000000, 0x61},
+ {829000000, 0x68},
+ {834000000, 0x6E},
+ {839000000, 0x75},
+ {844000000, 0x7E},
+ {849000000, 0x82},
+ {854000000, 0x84},
+ {859000000, 0x8F},
+ {865000000, 0x9A},
+ },
+ { // RF_CAL_KMCO_Map uRF_Max, uK, uM, UCOAmp
+ {47900000, 0x03, 0x02, 0x03},
+ {61100000, 0x04, 0x01, 0x03},
+ {350000000, 0x03, 0x00, 0x03},
+ {720000000, 0x02, 0x01, 0x03},
+ {865000000, 0x03, 0x03, 0x03},
+ },
+ { // RF_CAL_CID_TARGET_Map uRF_Max, uCID_Target, uCount_Limit
+ {46000000, 0x04, 1800000},
+ {52200000, 0x0A, 1500000},
+ {70100000, 0x01, 4000000},
+ {136800000, 0x18, 4000000},
+ {156700000, 0x18, 4000000},
+//#endif // TMBSL_TDA1827
+ {186250000, 0x0A, 4000000},
+ {230000000, 0x0A, 4000000},
+ {345000000, 0x18, 4000000},
+ {426000000, 0x0E, 4000000},
+ {489500000, 0x1E, 4000000},
+ {697500000, 0x32, 4000000},
+ {842000000, 0x3A, 4000000},
+ },
+ { // THERMOMETER_Map uTM_D, uTM_60_92, uTM_92_122
+ {0x00, 0x28, 0x5C},
+ {0x01, 0x3E, 0x5E},
+ {0x02, 0x42, 0x62},
+ {0x03, 0x40, 0x60},
+ {0x04, 0x4A, 0x6A},
+ {0x05, 0x48, 0x68},
+ {0x06, 0x44, 0x64},
+ {0x07, 0x46, 0x66},
+ {0x08, 0x5A, 0x7A},
+ {0x09, 0x58, 0x78},
+ {0x0A, 0x54, 0x74},
+ {0x0B, 0x56, 0x76},
+ {0x0C, 0x4C, 0x6C},
+ {0x0D, 0x4E, 0x6E},
+ {0x0E, 0x52, 0x72},
+ {0x0F, 0x50, 0x70},
+ },
+ { // CAL_PLL_Map uLO_Max, uPost_Div, uDiv
+ {33812500, 0xDD, 0xD0},
+ {36625000, 0xDC, 0xC0},
+ {39937500, 0xDB, 0xB0},
+ {43937500, 0xDA, 0xA0},
+ {48812500, 0xD9, 0x90},
+ {54937500, 0xD8, 0x80},
+ {62812500, 0xD3, 0x70},
+ {67625000, 0xCD, 0x68},
+ {73250000, 0xCC, 0x60},
+ {79875000, 0xCB, 0x58},
+ {87875000, 0xCA, 0x50},
+ {97625000, 0xC9, 0x48},
+ {109875000, 0xC8, 0x40},
+ {125625000, 0xC3, 0x38},
+ {135250000, 0xBD, 0x34},
+ {146500000, 0xBC, 0x30},
+ {159750000, 0xBB, 0x2C},
+ {175750000, 0xBA, 0x28},
+ {195250000, 0xB9, 0x24},
+ {219750000, 0xB8, 0x20},
+ {251250000, 0xB3, 0x1C},
+ {270500000, 0xAD, 0x1A},
+ {293000000, 0xAC, 0x18},
+ {319500000, 0xAB, 0x16},
+ {351500000, 0xAA, 0x14},
+ {390500000, 0xA9, 0x12},
+ {439500000, 0xA8, 0x10},
+ {502500000, 0xA3, 0x0E},
+ {541000000, 0x9D, 0x0D},
+ {586000000, 0x9C, 0x0C},
+ {639000000, 0x9B, 0x0B},
+ {703000000, 0x9A, 0x0A},
+ {781000000, 0x99, 0x09},
+ {879000000, 0x98, 0x08},
+ {1005000000,0x93, 0x07},
+ },
+ { // MAIN_PLL_Map uLO_Max, uPost_Div, uDiv
+ {33125000, 0x5F, 0xF0},
+ {35500000, 0x5E, 0xE0},
+ {38187500, 0x5D, 0xD0},
+ {41375000, 0x5C, 0xC0},
+ {45125000, 0x5B, 0xB0},
+ {49687500, 0x5A, 0xA0},
+ {55187500, 0x59, 0x90},
+ {62125000, 0x58, 0x80},
+ {66250000, 0x4F, 0x78},
+ {71000000, 0x4E, 0x70},
+ {76375000, 0x4D, 0x68},
+ {82750000, 0x4C, 0x60},
+ {90250000, 0x4B, 0x58},
+ {99375000, 0x4A, 0x50},
+ {110375000, 0x49, 0x48},
+ {124250000, 0x48, 0x40},
+ {132500000, 0x3F, 0x3C},
+ {142000000, 0x3E, 0x38},
+ {152750000, 0x3D, 0x34},
+ {165500000, 0x3C, 0x30},
+ {180500000, 0x3B, 0x2C},
+ {198750000, 0x3A, 0x28},
+ {220750000, 0x39, 0x24},
+ {248500000, 0x38, 0x20},
+ {265000000, 0x2F, 0x1E},
+ {284000000, 0x2E, 0x1C},
+ {305500000, 0x2D, 0x1A},
+ {331000000, 0x2C, 0x18},
+ {361000000, 0x2B, 0x16},
+ {397500000, 0x2A, 0x14},
+ {441500000, 0x29, 0x12},
+ {497000000, 0x28, 0x10},
+ {530000000, 0x1F, 0x0F},
+ {568000000, 0x1E, 0x0E},
+ {611000000, 0x1D, 0x0D},
+ {662000000, 0x1C, 0x0C},
+ {722000000, 0x1B, 0x0B},
+ {795000000, 0x1A, 0x0A},
+ {883000000, 0x19, 0x09},
+ {994000000, 0x18, 0x08},
+ },
+ },
+ 0x00, // I2CMap
+ 0x00, // I2CLog
+ 0x00, // uTickEnd [end tick value]
+ },
+};
+
+//#endif // _TMBSL_ALLOC_STATIC_INSTANCE_H //--------------- \ No newline at end of file
diff --git a/api/TDA18271StaticInstance_C2_Askey.h b/api/TDA18271StaticInstance_C2_Askey.h
new file mode 100644
index 0000000..a4c90d2
--- /dev/null
+++ b/api/TDA18271StaticInstance_C2_Askey.h
@@ -0,0 +1,1668 @@
+//-----------------------------------------------------------------------------
+// $Header:
+// (C) Copyright 2001 NXP Semiconductors, All rights reserved
+//
+// This source code and any compilation or derivative thereof is the sole
+// property of NXP Corporation and is provided pursuant to a Software
+// License Agreement. This code is the proprietary information of NXP
+// Corporation and is confidential in nature. Its use and dissemination by
+// any party other than NXP Corporation is strictly limited by the
+// confidential information provisions of the Agreement referenced above.
+//-----------------------------------------------------------------------------
+// FILE NAME: allocStaticInstance.h
+//
+// DESCRIPTION: define the static Objects
+//
+// DOCUMENT REF: DVP Software Coding Guidelines v1.14
+// DVP Board Support Library Architecture Specification v0.5
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+#ifndef _TMBSL_ALLOC_STATIC_INSTANCE_H //-----------------
+#define _TMBSL_ALLOC_STATIC_INSTANCE_H
+#define FALSE 0
+#define TRUE 1
+#define Null 0
+
+//-----------------------------------------------------------------------------
+// Global data:
+//-----------------------------------------------------------------------------
+//
+//
+// default instance
+tmTDA18271Object_t_C2_Askey gTDA18271Instance_C2_Askey[] =
+{
+ {
+ {
+ NULL, /* Demodulator */
+ 0x01 /* chip */
+ },
+ 0x00, // TunerUnit
+ False, // init (instance initialization default)
+
+ 0x00, // uHwAddress (HwId default value)
+
+#ifdef NXPFE
+ nullptr, // SystemFuncd
+#else // NXPFE
+ { // SystemFunc (system functions default addresses)
+ Null,
+ Null,
+ Null,
+ Null,
+ },
+#endif // NXPFE
+ tmPowerSleepMode_C2_Askey, // default power state
+ tmDigital_TV_DVBT_8MHz_C2_Askey, // default standard mode
+ { // Config
+ CUSTOM_BOARD_DEF, // uBoard [default Configuration structure]
+ OM57XX_STANDARD_DEF, // uStandard
+ 500000000, // uRF
+ 6750000, // uIF
+ //6000000, // uBW
+ 0x00, // uTMVALUE_RFCAL
+ 0x01, // uPLMODE
+ 0x00, // uRFCAL_TCOMP
+ 0x00, // uMAPNAME
+ 0x00, // uMAPCOLUMN
+ 0x00, // uMAPROW
+ 0x00, // uPROTOCOLSTEP
+ { // IR_MEAS_Map uRF_Max, uIR_Meas
+ {200000000, 0x05},
+ {600000000, 0x06},
+ {865000000, 0x07},
+ },
+ { // IR_CAL_Map uRF, uIR_GStep
+ {72000000, 0x03},
+ {408000000, 0x03},
+ {808000000, 0x03},
+ },
+ { // BP_FILTER_Map uRF_Max, uBP_Filter
+ {62000000, 0x00},
+ {84000000, 0x01},
+ {100000000, 0x02},
+ {140000000, 0x03},
+ {170000000, 0x04},
+ {180000000, 0x05},
+ {865000000, 0x06},
+ },
+ { // RF_BAND_Map uRF_Max, uRF_Band, uRF1, uRF2, uRF3, uRF_A1, uRF_B1, uRF_A2, uRF_B2, uRF1_default, uRF2_default, uRF3_default
+ {47900000, 0x00, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 46000000, 0, 0 },
+ {61100000, 0x01, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 52200000, 0, 0 },
+ {152600000, 0x02, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 70100000, 136800000, 0 },
+ {164700000, 0x03, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 156700000, 0, 0 },
+ {203500000, 0x04, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 186250000, 0, 0 },
+ {457800000, 0x05, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 230000000, 345000000, 426000000 },
+ {865000000, 0x06, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 489500000, 697500000, 842000000 },
+ },
+ { // GAIN_TAPER_Map uRF_Max, uGain_Taper
+ {45400000, 0x1F},
+ {45800000, 0x1E},
+ {46200000, 0x1D},
+ {46700000, 0x1C},
+ {47100000, 0x1B},
+ {47500000, 0x1A},
+ {47900000, 0x19},
+ {49600000, 0x17},
+ {51200000, 0x16},
+ {52900000, 0x15},
+ {54500000, 0x14},
+ {56200000, 0x13},
+ {57800000, 0x12},
+ {59500000, 0x11},
+ {61100000, 0x10},
+ {67600000, 0x0D},
+ {74200000, 0x0C},
+ {80700000, 0x0B},
+ {87200000, 0x0A},
+ {93800000, 0x09},
+ {100300000, 0x08},
+ {106900000, 0x07},
+ {113400000, 0x06},
+ {119900000, 0x05},
+ {126500000, 0x04},
+ {133000000, 0x03},
+ {139500000, 0x02},
+ {146100000, 0x01},
+ {152600000, 0x00},
+ {154300000, 0x1F},
+ {156100000, 0x1E},
+ {157800000, 0x1D},
+ {159500000, 0x1C},
+ {161200000, 0x1B},
+ {163000000, 0x1A},
+ {164700000, 0x19},
+ {170200000, 0x17},
+ {175800000, 0x16},
+ {181300000, 0x15},
+ {186900000, 0x14},
+ {192400000, 0x13},
+ {198000000, 0x12},
+ {203500000, 0x11},
+ {216200000, 0x14},
+ {228900000, 0x13},
+ {241600000, 0x12},
+ {254400000, 0x11},
+ {267100000, 0x10},
+ {279800000, 0x0F},
+ {292500000, 0x0E},
+ {305200000, 0x0D},
+ {317900000, 0x0C},
+ {330700000, 0x0B},
+ {343400000, 0x0A},
+ {356100000, 0x09},
+ {368800000, 0x08},
+ {381500000, 0x07},
+ {394200000, 0x06},
+ {406900000, 0x05},
+ {419700000, 0x04},
+ {432400000, 0x03},
+ {445100000, 0x02},
+ {457800000, 0x01},
+ {476300000, 0x19},
+ {494800000, 0x18},
+ {513300000, 0x17},
+ {531800000, 0x16},
+ {550300000, 0x15},
+ {568900000, 0x14},
+ {587400000, 0x13},
+ {605900000, 0x12},
+ {624400000, 0x11},
+ {642900000, 0x10},
+ {661400000, 0x0F},
+ {679900000, 0x0E},
+ {698400000, 0x0D},
+ {716900000, 0x0C},
+ {735400000, 0x0B},
+ {753900000, 0x0A},
+ {772500000, 0x09},
+ {791000000, 0x08},
+ {809500000, 0x07},
+ {828000000, 0x06},
+ {846500000, 0x05},
+ {865000000, 0x04},
+ },
+ { // RF_CAL_Map uRF_Max, uRFC_Cprog
+ {41000000, 0x0F},
+ {43000000, 0x1C},
+ {45000000, 0x2F},
+ {46000000, 0x39},
+ {47000000, 0x40},
+ {47900000, 0x50},
+ {49100000, 0x16},
+ {50000000, 0x18},
+ {51000000, 0x20},
+ {53000000, 0x28},
+ {55000000, 0x2B},
+ {56000000, 0x32},
+ {57000000, 0x35},
+ {58000000, 0x3E},
+ {59000000, 0x43},
+ {60000000, 0x4E},
+ {61100000, 0x55},
+ {63000000, 0x0F},
+ {64000000, 0x11},
+ {65000000, 0x12},
+ {66000000, 0x15},
+ {67000000, 0x16},
+ {68000000, 0x17},
+ {70000000, 0x19},
+ {71000000, 0x1C},
+ {72000000, 0x1D},
+ {73000000, 0x1F},
+ {74000000, 0x20},
+ {75000000, 0x21},
+ {76000000, 0x24},
+ {77000000, 0x25},
+ {78000000, 0x27},
+ {80000000, 0x28},
+ {81000000, 0x29},
+ {82000000, 0x2D},
+ {83000000, 0x2E},
+ {84000000, 0x2F},
+ {85000000, 0x31},
+ {86000000, 0x33},
+ {87000000, 0x34},
+ {88000000, 0x35},
+ {89000000, 0x37},
+ {90000000, 0x38},
+ {91000000, 0x39},
+ {93000000, 0x3C},
+ {94000000, 0x3E},
+ {95000000, 0x3F},
+ {96000000, 0x40},
+ {97000000, 0x42},
+ {99000000, 0x45},
+ {100000000, 0x46},
+ {102000000, 0x48},
+ {103000000, 0x4A},
+ {105000000, 0x4D},
+ {106000000, 0x4E},
+ {107000000, 0x50},
+ {108000000, 0x51},
+ {110000000, 0x54},
+ {111000000, 0x56},
+ {112000000, 0x57},
+ {113000000, 0x58},
+ {114000000, 0x59},
+ {115000000, 0x5C},
+ {116000000, 0x5D},
+ {117000000, 0x5F},
+ {119000000, 0x60},
+ {120000000, 0x64},
+ {121000000, 0x65},
+ {122000000, 0x66},
+ {123000000, 0x68},
+ {124000000, 0x69},
+ {125000000, 0x6C},
+ {126000000, 0x6D},
+ {127000000, 0x6E},
+ {128000000, 0x70},
+ {129000000, 0x71},
+ {130000000, 0x75},
+ {131000000, 0x77},
+ {132000000, 0x78},
+ {133000000, 0x7B},
+ {134000000, 0x7E},
+ {135000000, 0x81},
+ {136000000, 0x82},
+ {137000000, 0x87},
+ {138000000, 0x88},
+ {139000000, 0x8D},
+ {140000000, 0x8E},
+ {141000000, 0x91},
+ {142000000, 0x95},
+ {143000000, 0x9A},
+ {144000000, 0x9D},
+ {145000000, 0xA1},
+ {146000000, 0xA2},
+ {147000000, 0xA4},
+ {148000000, 0xA9},
+ {149000000, 0xAE},
+ {150000000, 0xB0},
+ {151000000, 0xB1},
+ {152000000, 0xB7},
+ {152600000, 0xBD},
+ {154000000, 0x20},
+ {155000000, 0x22},
+ {156000000, 0x24},
+ {157000000, 0x25},
+ {158000000, 0x27},
+ {159000000, 0x29},
+ {160000000, 0x2C},
+ {161000000, 0x2D},
+ {163000000, 0x2E},
+ {164000000, 0x2F},
+ {164700000, 0x30},
+ {166000000, 0x11},
+ {167000000, 0x12},
+ {168000000, 0x13},
+ {169000000, 0x14},
+ {170000000, 0x15},
+ {172000000, 0x16},
+ {173000000, 0x17},
+ {174000000, 0x18},
+ {175000000, 0x1A},
+ {176000000, 0x1B},
+ {178000000, 0x1D},
+ {179000000, 0x1E},
+ {180000000, 0x1F},
+ {181000000, 0x20},
+ {182000000, 0x21},
+ {183000000, 0x22},
+ {184000000, 0x24},
+ {185000000, 0x25},
+ {186000000, 0x26},
+ {187000000, 0x27},
+ {188000000, 0x29},
+ {189000000, 0x2A},
+ {190000000, 0x2C},
+ {191000000, 0x2D},
+ {192000000, 0x2E},
+ {193000000, 0x2F},
+ {194000000, 0x30},
+ {195000000, 0x33},
+ {196000000, 0x35},
+ {198000000, 0x36},
+ {200000000, 0x38},
+ {201000000, 0x3C},
+ {202000000, 0x3D},
+ {203500000, 0x3E},
+ {206000000, 0x0E},
+ {208000000, 0x0F},
+ {212000000, 0x10},
+ {216000000, 0x11},
+ {217000000, 0x12},
+ {218000000, 0x13},
+ {220000000, 0x14},
+ {222000000, 0x15},
+ {225000000, 0x16},
+ {228000000, 0x17},
+ {231000000, 0x18},
+ {234000000, 0x19},
+ {235000000, 0x1A},
+ {236000000, 0x1B},
+ {237000000, 0x1C},
+ {240000000, 0x1D},
+ {242000000, 0x1E},
+ {244000000, 0x1F},
+ {247000000, 0x20},
+ {249000000, 0x21},
+ {252000000, 0x22},
+ {253000000, 0x23},
+ {254000000, 0x24},
+ {256000000, 0x25},
+ {259000000, 0x26},
+ {262000000, 0x27},
+ {264000000, 0x28},
+ {267000000, 0x29},
+ {269000000, 0x2A},
+ {271000000, 0x2B},
+ {273000000, 0x2C},
+ {275000000, 0x2D},
+ {277000000, 0x2E},
+ {279000000, 0x2F},
+ {282000000, 0x30},
+ {284000000, 0x31},
+ {286000000, 0x32},
+ {287000000, 0x33},
+ {290000000, 0x34},
+ {293000000, 0x35},
+ {295000000, 0x36},
+ {297000000, 0x37},
+ {300000000, 0x38},
+ {303000000, 0x39},
+ {305000000, 0x3A},
+ {306000000, 0x3B},
+ {307000000, 0x3C},
+ {310000000, 0x3D},
+ {312000000, 0x3E},
+ {315000000, 0x3F},
+ {318000000, 0x40},
+ {320000000, 0x41},
+ {323000000, 0x42},
+ {324000000, 0x43},
+ {325000000, 0x44},
+ {327000000, 0x45},
+ {331000000, 0x46},
+ {334000000, 0x47},
+ {337000000, 0x48},
+ {339000000, 0x49},
+ {340000000, 0x4A},
+ {341000000, 0x4B},
+ {343000000, 0x4C},
+ {345000000, 0x4D},
+ {349000000, 0x4E},
+ {352000000, 0x4F},
+ {353000000, 0x50},
+ {355000000, 0x51},
+ {357000000, 0x52},
+ {359000000, 0x53},
+ {361000000, 0x54},
+ {362000000, 0x55},
+ {364000000, 0x56},
+ {368000000, 0x57},
+ {370000000, 0x58},
+ {372000000, 0x59},
+ {375000000, 0x5A},
+ {376000000, 0x5B},
+ {377000000, 0x5C},
+ {379000000, 0x5D},
+ {382000000, 0x5E},
+ {384000000, 0x5F},
+ {385000000, 0x60},
+ {386000000, 0x61},
+ {388000000, 0x62},
+ {390000000, 0x63},
+ {393000000, 0x64},
+ {394000000, 0x65},
+ {396000000, 0x66},
+ {397000000, 0x67},
+ {398000000, 0x68},
+ {400000000, 0x69},
+ {402000000, 0x6A},
+ {403000000, 0x6B},
+ {407000000, 0x6C},
+ {408000000, 0x6D},
+ {409000000, 0x6E},
+ {410000000, 0x6F},
+ {411000000, 0x70},
+ {412000000, 0x71},
+ {413000000, 0x72},
+ {414000000, 0x73},
+ {417000000, 0x74},
+ {418000000, 0x75},
+ {420000000, 0x76},
+ {422000000, 0x77},
+ {423000000, 0x78},
+ {424000000, 0x79},
+ {427000000, 0x7A},
+ {428000000, 0x7B},
+ {429000000, 0x7D},
+ {432000000, 0x7F},
+ {434000000, 0x80},
+ {435000000, 0x81},
+ {436000000, 0x83},
+ {437000000, 0x84},
+ {438000000, 0x85},
+ {439000000, 0x86},
+ {440000000, 0x87},
+ {441000000, 0x88},
+ {442000000, 0x89},
+ {445000000, 0x8A},
+ {446000000, 0x8B},
+ {447000000, 0x8C},
+ {448000000, 0x8E},
+ {449000000, 0x8F},
+ {450000000, 0x90},
+ {452000000, 0x91},
+ {453000000, 0x93},
+ {454000000, 0x94},
+ {456000000, 0x96},
+ {457800000, 0x98},
+ {461000000, 0x11},
+ {468000000, 0x12},
+ {472000000, 0x13},
+ {473000000, 0x14},
+ {474000000, 0x15},
+ {481000000, 0x16},
+ {486000000, 0x17},
+ {491000000, 0x18},
+ {498000000, 0x19},
+ {499000000, 0x1A},
+ {501000000, 0x1B},
+ {506000000, 0x1C},
+ {511000000, 0x1D},
+ {516000000, 0x1E},
+ {520000000, 0x1F},
+ {521000000, 0x20},
+ {525000000, 0x21},
+ {529000000, 0x22},
+ {533000000, 0x23},
+ {539000000, 0x24},
+ {541000000, 0x25},
+ {547000000, 0x26},
+ {549000000, 0x27},
+ {551000000, 0x28},
+ {556000000, 0x29},
+ {561000000, 0x2A},
+ {563000000, 0x2B},
+ {565000000, 0x2C},
+ {569000000, 0x2D},
+ {571000000, 0x2E},
+ {577000000, 0x2F},
+ {580000000, 0x30},
+ {582000000, 0x31},
+ {584000000, 0x32},
+ {588000000, 0x33},
+ {591000000, 0x34},
+ {596000000, 0x35},
+ {598000000, 0x36},
+ {603000000, 0x37},
+ {604000000, 0x38},
+ {606000000, 0x39},
+ {612000000, 0x3A},
+ {615000000, 0x3B},
+ {617000000, 0x3C},
+ {621000000, 0x3D},
+ {622000000, 0x3E},
+ {625000000, 0x3F},
+ {632000000, 0x40},
+ {633000000, 0x41},
+ {634000000, 0x42},
+ {642000000, 0x43},
+ {643000000, 0x44},
+ {647000000, 0x45},
+ {650000000, 0x46},
+ {652000000, 0x47},
+ {657000000, 0x48},
+ {661000000, 0x49},
+ {662000000, 0x4A},
+ {665000000, 0x4B},
+ {667000000, 0x4C},
+ {670000000, 0x4D},
+ {673000000, 0x4E},
+ {676000000, 0x4F},
+ {677000000, 0x50},
+ {681000000, 0x51},
+ {683000000, 0x52},
+ {686000000, 0x53},
+ {688000000, 0x54},
+ {689000000, 0x55},
+ {691000000, 0x56},
+ {695000000, 0x57},
+ {698000000, 0x58},
+ {703000000, 0x59},
+ {704000000, 0x5A},
+ {705000000, 0x5B},
+ {707000000, 0x5C},
+ {710000000, 0x5D},
+ {712000000, 0x5E},
+ {717000000, 0x5F},
+ {718000000, 0x60},
+ {721000000, 0x61},
+ {722000000, 0x62},
+ {723000000, 0x63},
+ {725000000, 0x64},
+ {727000000, 0x65},
+ {730000000, 0x66},
+ {732000000, 0x67},
+ {735000000, 0x68},
+ {740000000, 0x69},
+ {741000000, 0x6A},
+ {742000000, 0x6B},
+ {743000000, 0x6C},
+ {745000000, 0x6D},
+ {747000000, 0x6E},
+ {748000000, 0x6F},
+ {750000000, 0x70},
+ {752000000, 0x71},
+ {754000000, 0x72},
+ {757000000, 0x73},
+ {758000000, 0x74},
+ {760000000, 0x75},
+ {763000000, 0x76},
+ {764000000, 0x77},
+ {766000000, 0x78},
+ {767000000, 0x79},
+ {768000000, 0x7A},
+ {773000000, 0x7B},
+ {774000000, 0x7C},
+ {776000000, 0x7D},
+ {777000000, 0x7E},
+ {778000000, 0x7F},
+ {779000000, 0x80},
+ {781000000, 0x81},
+ {783000000, 0x82},
+ {784000000, 0x83},
+ {785000000, 0x84},
+ {786000000, 0x85},
+ {793000000, 0x86},
+ {794000000, 0x87},
+ {795000000, 0x88},
+ {797000000, 0x89},
+ {799000000, 0x8A},
+ {801000000, 0x8B},
+ {802000000, 0x8C},
+ {803000000, 0x8D},
+ {804000000, 0x8E},
+ {810000000, 0x90},
+ {811000000, 0x91},
+ {812000000, 0x92},
+ {814000000, 0x93},
+ {816000000, 0x94},
+ {817000000, 0x96},
+ {818000000, 0x97},
+ {820000000, 0x98},
+ {821000000, 0x99},
+ {822000000, 0x9A},
+ {828000000, 0x9B},
+ {829000000, 0x9D},
+ {830000000, 0x9F},
+ {831000000, 0xA0},
+ {833000000, 0xA1},
+ {835000000, 0xA2},
+ {836000000, 0xA3},
+ {837000000, 0xA4},
+ {838000000, 0xA6},
+ {840000000, 0xA8},
+ {842000000, 0xA9},
+ {845000000, 0xAA},
+ {846000000, 0xAB},
+ {847000000, 0xAD},
+ {848000000, 0xAE},
+ {852000000, 0xAF},
+ {853000000, 0xB0},
+ {858000000, 0xB1},
+ {860000000, 0xB2},
+ {861000000, 0xB3},
+ {862000000, 0xB4},
+ {863000000, 0xB6},
+ {864000000, 0xB8},
+ {865000000, 0xB9},
+ },
+ { // RF_CAL_DC_OVER_DT_Map uRF_Max, udC_Over_dT
+ {47900000, 0x00},
+ {55000000, 0x00},
+ {61100000, 0x0A},
+ {64000000, 0x0A},
+ {82000000, 0x14},
+ {84000000, 0x19},
+ {119000000, 0x1C},
+ {124000000, 0x20},
+ {129000000, 0x2A},
+ {134000000, 0x32},
+ {139000000, 0x39},
+ {144000000, 0x3E},
+ {149000000, 0x3F},
+ {152600000, 0x40},
+ {154000000, 0x40},
+ {164700000, 0x41},
+ {203500000, 0x32},
+ {353000000, 0x19},
+ {356000000, 0x1A},
+ {359000000, 0x1B},
+ {363000000, 0x1C},
+ {366000000, 0x1D},
+ {369000000, 0x1E},
+ {373000000, 0x1F},
+ {376000000, 0x20},
+ {379000000, 0x21},
+ {383000000, 0x22},
+ {386000000, 0x23},
+ {389000000, 0x24},
+ {393000000, 0x25},
+ {396000000, 0x26},
+ {399000000, 0x27},
+ {402000000, 0x28},
+ {404000000, 0x29},
+ {407000000, 0x2A},
+ {409000000, 0x2B},
+ {412000000, 0x2C},
+ {414000000, 0x2D},
+ {417000000, 0x2E},
+ {419000000, 0x2F},
+ {422000000, 0x30},
+ {424000000, 0x31},
+ {427000000, 0x32},
+ {429000000, 0x33},
+ {432000000, 0x34},
+ {434000000, 0x35},
+ {437000000, 0x36},
+ {439000000, 0x37},
+ {442000000, 0x38},
+ {444000000, 0x39},
+ {447000000, 0x3A},
+ {449000000, 0x3B},
+ {457800000, 0x3C},
+ {465000000, 0x0F},
+ {477000000, 0x12},
+ {483000000, 0x14},
+ {502000000, 0x19},
+ {508000000, 0x1B},
+ {519000000, 0x1C},
+ {522000000, 0x1D},
+ {524000000, 0x1E},
+ {534000000, 0x1F},
+ {549000000, 0x20},
+ {554000000, 0x22},
+ {584000000, 0x24},
+ {589000000, 0x26},
+ {658000000, 0x27},
+ {664000000, 0x2C},
+ {669000000, 0x2D},
+ {699000000, 0x2E},
+ {704000000, 0x30},
+ {709000000, 0x31},
+ {714000000, 0x32},
+ {724000000, 0x33},
+ {729000000, 0x36},
+ {739000000, 0x38},
+ {744000000, 0x39},
+ {749000000, 0x3B},
+ {754000000, 0x3C},
+ {759000000, 0x3D},
+ {764000000, 0x3E},
+ {769000000, 0x3F},
+ {774000000, 0x40},
+ {779000000, 0x41},
+ {784000000, 0x43},
+ {789000000, 0x46},
+ {794000000, 0x48},
+ {799000000, 0x4B},
+ {804000000, 0x4F},
+ {809000000, 0x54},
+ {814000000, 0x59},
+ {819000000, 0x5D},
+ {824000000, 0x61},
+ {829000000, 0x68},
+ {834000000, 0x6E},
+ {839000000, 0x75},
+ {844000000, 0x7E},
+ {849000000, 0x82},
+ {854000000, 0x84},
+ {859000000, 0x8F},
+ {865000000, 0x9A},
+ },
+ { // RF_CAL_KMCO_Map uRF_Max, uK, uM, UCOAmp
+ {47900000, 0x03, 0x02, 0x03},
+ {61100000, 0x04, 0x01, 0x03},
+ {350000000, 0x03, 0x00, 0x03},
+ {720000000, 0x02, 0x01, 0x03},
+ {865000000, 0x03, 0x03, 0x03},
+ },
+ { // RF_CAL_CID_TARGET_Map uRF_Max, uCID_Target, uCount_Limit
+ {46000000, 0x04, 1800000},
+ {52200000, 0x0A, 1500000},
+ {70100000, 0x01, 4000000},
+ {136800000, 0x18, 4000000},
+ {156700000, 0x18, 4000000},
+ {186250000, 0x0A, 4000000},
+ {230000000, 0x0A, 4000000},
+ {345000000, 0x18, 4000000},
+ {426000000, 0x0E, 4000000},
+ {489500000, 0x1E, 4000000},
+ {697500000, 0x32, 4000000},
+ {842000000, 0x3A, 4000000},
+ },
+ { // THERMOMETER_Map uTM_D, uTM_60_92, uTM_92_122
+ {0x00, 0x28, 0x5C},
+ {0x01, 0x3E, 0x5E},
+ {0x02, 0x42, 0x62},
+ {0x03, 0x40, 0x60},
+ {0x04, 0x4A, 0x6A},
+ {0x05, 0x48, 0x68},
+ {0x06, 0x44, 0x64},
+ {0x07, 0x46, 0x66},
+ {0x08, 0x5A, 0x7A},
+ {0x09, 0x58, 0x78},
+ {0x0A, 0x54, 0x74},
+ {0x0B, 0x56, 0x76},
+ {0x0C, 0x4C, 0x6C},
+ {0x0D, 0x4E, 0x6E},
+ {0x0E, 0x52, 0x72},
+ {0x0F, 0x50, 0x70},
+ },
+ { // CAL_PLL_Map uLO_Max, uPost_Div, uDiv
+ {33812500, 0xDD, 0xD0},
+ {36625000, 0xDC, 0xC0},
+ {39937500, 0xDB, 0xB0},
+ {43937500, 0xDA, 0xA0},
+ {48812500, 0xD9, 0x90},
+ {54937500, 0xD8, 0x80},
+ {62812500, 0xD3, 0x70},
+ {67625000, 0xCD, 0x68},
+ {73250000, 0xCC, 0x60},
+ {79875000, 0xCB, 0x58},
+ {87875000, 0xCA, 0x50},
+ {97625000, 0xC9, 0x48},
+ {109875000, 0xC8, 0x40},
+ {125625000, 0xC3, 0x38},
+ {135250000, 0xBD, 0x34},
+ {146500000, 0xBC, 0x30},
+ {159750000, 0xBB, 0x2C},
+ {175750000, 0xBA, 0x28},
+ {195250000, 0xB9, 0x24},
+ {219750000, 0xB8, 0x20},
+ {251250000, 0xB3, 0x1C},
+ {270500000, 0xAD, 0x1A},
+ {293000000, 0xAC, 0x18},
+ {319500000, 0xAB, 0x16},
+ {351500000, 0xAA, 0x14},
+ {390500000, 0xA9, 0x12},
+ {439500000, 0xA8, 0x10},
+ {502500000, 0xA3, 0x0E},
+ {541000000, 0x9D, 0x0D},
+ {586000000, 0x9C, 0x0C},
+ {639000000, 0x9B, 0x0B},
+ {703000000, 0x9A, 0x0A},
+ {781000000, 0x99, 0x09},
+ {879000000, 0x98, 0x08},
+ {1005000000,0x93, 0x07},
+ },
+ { // MAIN_PLL_Map uLO_Max, uPost_Div, uDiv
+ {33125000, 0x5F, 0xF0},
+ {35500000, 0x5E, 0xE0},
+ {38187500, 0x5D, 0xD0},
+ {41375000, 0x5C, 0xC0},
+ {45125000, 0x5B, 0xB0},
+ {49687500, 0x5A, 0xA0},
+ {55187500, 0x59, 0x90},
+ {62125000, 0x58, 0x80},
+ {66250000, 0x4F, 0x78},
+ {71000000, 0x4E, 0x70},
+ {76375000, 0x4D, 0x68},
+ {82750000, 0x4C, 0x60},
+ {90250000, 0x4B, 0x58},
+ {99375000, 0x4A, 0x50},
+ {110375000, 0x49, 0x48},
+ {124250000, 0x48, 0x40},
+ {132500000, 0x3F, 0x3C},
+ {142000000, 0x3E, 0x38},
+ {152750000, 0x3D, 0x34},
+ {165500000, 0x3C, 0x30},
+ {180500000, 0x3B, 0x2C},
+ {198750000, 0x3A, 0x28},
+ {220750000, 0x39, 0x24},
+ {248500000, 0x38, 0x20},
+ {265000000, 0x2F, 0x1E},
+ {284000000, 0x2E, 0x1C},
+ {305500000, 0x2D, 0x1A},
+ {331000000, 0x2C, 0x18},
+ {361000000, 0x2B, 0x16},
+ {397500000, 0x2A, 0x14},
+ {441500000, 0x29, 0x12},
+ {497000000, 0x28, 0x10},
+ {530000000, 0x1F, 0x0F},
+ {568000000, 0x1E, 0x0E},
+ {611000000, 0x1D, 0x0D},
+ {662000000, 0x1C, 0x0C},
+ {722000000, 0x1B, 0x0B},
+ {795000000, 0x1A, 0x0A},
+ {883000000, 0x19, 0x09},
+ {994000000, 0x18, 0x08},
+ },
+ },
+ 0x00, // I2CMap
+ 0x00, // I2CLog
+ 0x00, // uTickEnd [end tick value]
+ },
+ {
+ {
+ NULL, /* Demodulator */
+ 0x01 /* chip */
+ },
+ 0x01, // TunerUnit
+ False, // init (instance initialization default)
+
+ 0x00, // uHwAddress (HwId default value)
+
+#ifdef NXPFE
+ nullptr, // SystemFuncd
+#else // NXPFE
+ { // SystemFunc (system functions default addresses)
+ Null,
+ Null,
+ Null,
+ Null,
+ },
+#endif // NXPFE
+ tmPowerSleepMode_C2_Askey, // default power state
+ tmDigital_TV_DVBT_8MHz_C2_Askey, // default standard mode
+ { // Config
+ CUSTOM_BOARD_DEF, // uBoard [default Configuration structure]
+ OM57XX_STANDARD_DEF, // uStandard
+ 500000000, // uRF
+ 6750000, // uIF
+ //6000000, // uBW
+ 0x00, // uTMVALUE_RFCAL
+ 0x01, // uPLMODE
+ 0x00, // uRFCAL_TCOMP
+ 0x00, // uMAPNAME
+ 0x00, // uMAPCOLUMN
+ 0x00, // uMAPROW
+ 0x00, // uPROTOCOLSTEP
+ { // IR_MEAS_Map uRF_Max, uIR_Meas
+ {200000000, 0x05},
+ {600000000, 0x06},
+ {865000000, 0x07},
+ },
+ { // IR_CAL_Map uRF, uIR_GStep
+ {72000000, 0x03},
+ {408000000, 0x03},
+ {808000000, 0x03},
+ },
+ { // BP_FILTER_Map uRF_Max, uBP_Filter
+ {62000000, 0x00},
+ {84000000, 0x01},
+ {100000000, 0x02},
+ {140000000, 0x03},
+ {170000000, 0x04},
+ {180000000, 0x05},
+ {865000000, 0x06},
+ },
+ { // RF_BAND_Map uRF_Max, uRF_Band, uRF1, uRF2, uRF3, uRF_A1, uRF_B1, uRF_A2, uRF_B2, uRF1_default, uRF2_default, uRF3_default
+ {47900000, 0x00, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 46000000, 0, 0 },
+ {61100000, 0x01, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 52200000, 0, 0 },
+ {152600000, 0x02, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 70100000, 136800000, 0 },
+ {164700000, 0x03, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 156700000, 0, 0 },
+ {203500000, 0x04, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 186250000, 0, 0 },
+ {457800000, 0x05, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 230000000, 345000000, 426000000 },
+ {865000000, 0x06, 0, 0, 0, 0x00, 0x00, 0x00, 0x00, 489500000, 697500000, 842000000 },
+ },
+ { // GAIN_TAPER_Map uRF_Max, uGain_Taper
+ {45400000, 0x1F},
+ {45800000, 0x1E},
+ {46200000, 0x1D},
+ {46700000, 0x1C},
+ {47100000, 0x1B},
+ {47500000, 0x1A},
+ {47900000, 0x19},
+ {49600000, 0x17},
+ {51200000, 0x16},
+ {52900000, 0x15},
+ {54500000, 0x14},
+ {56200000, 0x13},
+ {57800000, 0x12},
+ {59500000, 0x11},
+ {61100000, 0x10},
+ {67600000, 0x0D},
+ {74200000, 0x0C},
+ {80700000, 0x0B},
+ {87200000, 0x0A},
+ {93800000, 0x09},
+ {100300000, 0x08},
+ {106900000, 0x07},
+ {113400000, 0x06},
+ {119900000, 0x05},
+ {126500000, 0x04},
+ {133000000, 0x03},
+ {139500000, 0x02},
+ {146100000, 0x01},
+ {152600000, 0x00},
+ {154300000, 0x1F},
+ {156100000, 0x1E},
+ {157800000, 0x1D},
+ {159500000, 0x1C},
+ {161200000, 0x1B},
+ {163000000, 0x1A},
+ {164700000, 0x19},
+ {170200000, 0x17},
+ {175800000, 0x16},
+ {181300000, 0x15},
+ {186900000, 0x14},
+ {192400000, 0x13},
+ {198000000, 0x12},
+ {203500000, 0x11},
+ {216200000, 0x14},
+ {228900000, 0x13},
+ {241600000, 0x12},
+ {254400000, 0x11},
+ {267100000, 0x10},
+ {279800000, 0x0F},
+ {292500000, 0x0E},
+ {305200000, 0x0D},
+ {317900000, 0x0C},
+ {330700000, 0x0B},
+ {343400000, 0x0A},
+ {356100000, 0x09},
+ {368800000, 0x08},
+ {381500000, 0x07},
+ {394200000, 0x06},
+ {406900000, 0x05},
+ {419700000, 0x04},
+ {432400000, 0x03},
+ {445100000, 0x02},
+ {457800000, 0x01},
+ {476300000, 0x19},
+ {494800000, 0x18},
+ {513300000, 0x17},
+ {531800000, 0x16},
+ {550300000, 0x15},
+ {568900000, 0x14},
+ {587400000, 0x13},
+ {605900000, 0x12},
+ {624400000, 0x11},
+ {642900000, 0x10},
+ {661400000, 0x0F},
+ {679900000, 0x0E},
+ {698400000, 0x0D},
+ {716900000, 0x0C},
+ {735400000, 0x0B},
+ {753900000, 0x0A},
+ {772500000, 0x09},
+ {791000000, 0x08},
+ {809500000, 0x07},
+ {828000000, 0x06},
+ {846500000, 0x05},
+ {865000000, 0x04},
+ },
+ { // RF_CAL_Map uRF_Max, uRFC_Cprog
+ {41000000, 0x0F},
+ {43000000, 0x1C},
+ {45000000, 0x2F},
+ {46000000, 0x39},
+ {47000000, 0x40},
+ {47900000, 0x50},
+ {49100000, 0x16},
+ {50000000, 0x18},
+ {51000000, 0x20},
+ {53000000, 0x28},
+ {55000000, 0x2B},
+ {56000000, 0x32},
+ {57000000, 0x35},
+ {58000000, 0x3E},
+ {59000000, 0x43},
+ {60000000, 0x4E},
+ {61100000, 0x55},
+ {63000000, 0x0F},
+ {64000000, 0x11},
+ {65000000, 0x12},
+ {66000000, 0x15},
+ {67000000, 0x16},
+ {68000000, 0x17},
+ {70000000, 0x19},
+ {71000000, 0x1C},
+ {72000000, 0x1D},
+ {73000000, 0x1F},
+ {74000000, 0x20},
+ {75000000, 0x21},
+ {76000000, 0x24},
+ {77000000, 0x25},
+ {78000000, 0x27},
+ {80000000, 0x28},
+ {81000000, 0x29},
+ {82000000, 0x2D},
+ {83000000, 0x2E},
+ {84000000, 0x2F},
+ {85000000, 0x31},
+ {86000000, 0x33},
+ {87000000, 0x34},
+ {88000000, 0x35},
+ {89000000, 0x37},
+ {90000000, 0x38},
+ {91000000, 0x39},
+ {93000000, 0x3C},
+ {94000000, 0x3E},
+ {95000000, 0x3F},
+ {96000000, 0x40},
+ {97000000, 0x42},
+ {99000000, 0x45},
+ {100000000, 0x46},
+ {102000000, 0x48},
+ {103000000, 0x4A},
+ {105000000, 0x4D},
+ {106000000, 0x4E},
+ {107000000, 0x50},
+ {108000000, 0x51},
+ {110000000, 0x54},
+ {111000000, 0x56},
+ {112000000, 0x57},
+ {113000000, 0x58},
+ {114000000, 0x59},
+ {115000000, 0x5C},
+ {116000000, 0x5D},
+ {117000000, 0x5F},
+ {119000000, 0x60},
+ {120000000, 0x64},
+ {121000000, 0x65},
+ {122000000, 0x66},
+ {123000000, 0x68},
+ {124000000, 0x69},
+ {125000000, 0x6C},
+ {126000000, 0x6D},
+ {127000000, 0x6E},
+ {128000000, 0x70},
+ {129000000, 0x71},
+ {130000000, 0x75},
+ {131000000, 0x77},
+ {132000000, 0x78},
+ {133000000, 0x7B},
+ {134000000, 0x7E},
+ {135000000, 0x81},
+ {136000000, 0x82},
+ {137000000, 0x87},
+ {138000000, 0x88},
+ {139000000, 0x8D},
+ {140000000, 0x8E},
+ {141000000, 0x91},
+ {142000000, 0x95},
+ {143000000, 0x9A},
+ {144000000, 0x9D},
+ {145000000, 0xA1},
+ {146000000, 0xA2},
+ {147000000, 0xA4},
+ {148000000, 0xA9},
+ {149000000, 0xAE},
+ {150000000, 0xB0},
+ {151000000, 0xB1},
+ {152000000, 0xB7},
+ {152600000, 0xBD},
+ {154000000, 0x20},
+ {155000000, 0x22},
+ {156000000, 0x24},
+ {157000000, 0x25},
+ {158000000, 0x27},
+ {159000000, 0x29},
+ {160000000, 0x2C},
+ {161000000, 0x2D},
+ {163000000, 0x2E},
+ {164000000, 0x2F},
+ {164700000, 0x30},
+ {166000000, 0x11},
+ {167000000, 0x12},
+ {168000000, 0x13},
+ {169000000, 0x14},
+ {170000000, 0x15},
+ {172000000, 0x16},
+ {173000000, 0x17},
+ {174000000, 0x18},
+ {175000000, 0x1A},
+ {176000000, 0x1B},
+ {178000000, 0x1D},
+ {179000000, 0x1E},
+ {180000000, 0x1F},
+ {181000000, 0x20},
+ {182000000, 0x21},
+ {183000000, 0x22},
+ {184000000, 0x24},
+ {185000000, 0x25},
+ {186000000, 0x26},
+ {187000000, 0x27},
+ {188000000, 0x29},
+ {189000000, 0x2A},
+ {190000000, 0x2C},
+ {191000000, 0x2D},
+ {192000000, 0x2E},
+ {193000000, 0x2F},
+ {194000000, 0x30},
+ {195000000, 0x33},
+ {196000000, 0x35},
+ {198000000, 0x36},
+ {200000000, 0x38},
+ {201000000, 0x3C},
+ {202000000, 0x3D},
+ {203500000, 0x3E},
+ {206000000, 0x0E},
+ {208000000, 0x0F},
+ {212000000, 0x10},
+ {216000000, 0x11},
+ {217000000, 0x12},
+ {218000000, 0x13},
+ {220000000, 0x14},
+ {222000000, 0x15},
+ {225000000, 0x16},
+ {228000000, 0x17},
+ {231000000, 0x18},
+ {234000000, 0x19},
+ {235000000, 0x1A},
+ {236000000, 0x1B},
+ {237000000, 0x1C},
+ {240000000, 0x1D},
+ {242000000, 0x1E},
+ {244000000, 0x1F},
+ {247000000, 0x20},
+ {249000000, 0x21},
+ {252000000, 0x22},
+ {253000000, 0x23},
+ {254000000, 0x24},
+ {256000000, 0x25},
+ {259000000, 0x26},
+ {262000000, 0x27},
+ {264000000, 0x28},
+ {267000000, 0x29},
+ {269000000, 0x2A},
+ {271000000, 0x2B},
+ {273000000, 0x2C},
+ {275000000, 0x2D},
+ {277000000, 0x2E},
+ {279000000, 0x2F},
+ {282000000, 0x30},
+ {284000000, 0x31},
+ {286000000, 0x32},
+ {287000000, 0x33},
+ {290000000, 0x34},
+ {293000000, 0x35},
+ {295000000, 0x36},
+ {297000000, 0x37},
+ {300000000, 0x38},
+ {303000000, 0x39},
+ {305000000, 0x3A},
+ {306000000, 0x3B},
+ {307000000, 0x3C},
+ {310000000, 0x3D},
+ {312000000, 0x3E},
+ {315000000, 0x3F},
+ {318000000, 0x40},
+ {320000000, 0x41},
+ {323000000, 0x42},
+ {324000000, 0x43},
+ {325000000, 0x44},
+ {327000000, 0x45},
+ {331000000, 0x46},
+ {334000000, 0x47},
+ {337000000, 0x48},
+ {339000000, 0x49},
+ {340000000, 0x4A},
+ {341000000, 0x4B},
+ {343000000, 0x4C},
+ {345000000, 0x4D},
+ {349000000, 0x4E},
+ {352000000, 0x4F},
+ {353000000, 0x50},
+ {355000000, 0x51},
+ {357000000, 0x52},
+ {359000000, 0x53},
+ {361000000, 0x54},
+ {362000000, 0x55},
+ {364000000, 0x56},
+ {368000000, 0x57},
+ {370000000, 0x58},
+ {372000000, 0x59},
+ {375000000, 0x5A},
+ {376000000, 0x5B},
+ {377000000, 0x5C},
+ {379000000, 0x5D},
+ {382000000, 0x5E},
+ {384000000, 0x5F},
+ {385000000, 0x60},
+ {386000000, 0x61},
+ {388000000, 0x62},
+ {390000000, 0x63},
+ {393000000, 0x64},
+ {394000000, 0x65},
+ {396000000, 0x66},
+ {397000000, 0x67},
+ {398000000, 0x68},
+ {400000000, 0x69},
+ {402000000, 0x6A},
+ {403000000, 0x6B},
+ {407000000, 0x6C},
+ {408000000, 0x6D},
+ {409000000, 0x6E},
+ {410000000, 0x6F},
+ {411000000, 0x70},
+ {412000000, 0x71},
+ {413000000, 0x72},
+ {414000000, 0x73},
+ {417000000, 0x74},
+ {418000000, 0x75},
+ {420000000, 0x76},
+ {422000000, 0x77},
+ {423000000, 0x78},
+ {424000000, 0x79},
+ {427000000, 0x7A},
+ {428000000, 0x7B},
+ {429000000, 0x7D},
+ {432000000, 0x7F},
+ {434000000, 0x80},
+ {435000000, 0x81},
+ {436000000, 0x83},
+ {437000000, 0x84},
+ {438000000, 0x85},
+ {439000000, 0x86},
+ {440000000, 0x87},
+ {441000000, 0x88},
+ {442000000, 0x89},
+ {445000000, 0x8A},
+ {446000000, 0x8B},
+ {447000000, 0x8C},
+ {448000000, 0x8E},
+ {449000000, 0x8F},
+ {450000000, 0x90},
+ {452000000, 0x91},
+ {453000000, 0x93},
+ {454000000, 0x94},
+ {456000000, 0x96},
+ {457800000, 0x98},
+ {461000000, 0x11},
+ {468000000, 0x12},
+ {472000000, 0x13},
+ {473000000, 0x14},
+ {474000000, 0x15},
+ {481000000, 0x16},
+ {486000000, 0x17},
+ {491000000, 0x18},
+ {498000000, 0x19},
+ {499000000, 0x1A},
+ {501000000, 0x1B},
+ {506000000, 0x1C},
+ {511000000, 0x1D},
+ {516000000, 0x1E},
+ {520000000, 0x1F},
+ {521000000, 0x20},
+ {525000000, 0x21},
+ {529000000, 0x22},
+ {533000000, 0x23},
+ {539000000, 0x24},
+ {541000000, 0x25},
+ {547000000, 0x26},
+ {549000000, 0x27},
+ {551000000, 0x28},
+ {556000000, 0x29},
+ {561000000, 0x2A},
+ {563000000, 0x2B},
+ {565000000, 0x2C},
+ {569000000, 0x2D},
+ {571000000, 0x2E},
+ {577000000, 0x2F},
+ {580000000, 0x30},
+ {582000000, 0x31},
+ {584000000, 0x32},
+ {588000000, 0x33},
+ {591000000, 0x34},
+ {596000000, 0x35},
+ {598000000, 0x36},
+ {603000000, 0x37},
+ {604000000, 0x38},
+ {606000000, 0x39},
+ {612000000, 0x3A},
+ {615000000, 0x3B},
+ {617000000, 0x3C},
+ {621000000, 0x3D},
+ {622000000, 0x3E},
+ {625000000, 0x3F},
+ {632000000, 0x40},
+ {633000000, 0x41},
+ {634000000, 0x42},
+ {642000000, 0x43},
+ {643000000, 0x44},
+ {647000000, 0x45},
+ {650000000, 0x46},
+ {652000000, 0x47},
+ {657000000, 0x48},
+ {661000000, 0x49},
+ {662000000, 0x4A},
+ {665000000, 0x4B},
+ {667000000, 0x4C},
+ {670000000, 0x4D},
+ {673000000, 0x4E},
+ {676000000, 0x4F},
+ {677000000, 0x50},
+ {681000000, 0x51},
+ {683000000, 0x52},
+ {686000000, 0x53},
+ {688000000, 0x54},
+ {689000000, 0x55},
+ {691000000, 0x56},
+ {695000000, 0x57},
+ {698000000, 0x58},
+ {703000000, 0x59},
+ {704000000, 0x5A},
+ {705000000, 0x5B},
+ {707000000, 0x5C},
+ {710000000, 0x5D},
+ {712000000, 0x5E},
+ {717000000, 0x5F},
+ {718000000, 0x60},
+ {721000000, 0x61},
+ {722000000, 0x62},
+ {723000000, 0x63},
+ {725000000, 0x64},
+ {727000000, 0x65},
+ {730000000, 0x66},
+ {732000000, 0x67},
+ {735000000, 0x68},
+ {740000000, 0x69},
+ {741000000, 0x6A},
+ {742000000, 0x6B},
+ {743000000, 0x6C},
+ {745000000, 0x6D},
+ {747000000, 0x6E},
+ {748000000, 0x6F},
+ {750000000, 0x70},
+ {752000000, 0x71},
+ {754000000, 0x72},
+ {757000000, 0x73},
+ {758000000, 0x74},
+ {760000000, 0x75},
+ {763000000, 0x76},
+ {764000000, 0x77},
+ {766000000, 0x78},
+ {767000000, 0x79},
+ {768000000, 0x7A},
+ {773000000, 0x7B},
+ {774000000, 0x7C},
+ {776000000, 0x7D},
+ {777000000, 0x7E},
+ {778000000, 0x7F},
+ {779000000, 0x80},
+ {781000000, 0x81},
+ {783000000, 0x82},
+ {784000000, 0x83},
+ {785000000, 0x84},
+ {786000000, 0x85},
+ {793000000, 0x86},
+ {794000000, 0x87},
+ {795000000, 0x88},
+ {797000000, 0x89},
+ {799000000, 0x8A},
+ {801000000, 0x8B},
+ {802000000, 0x8C},
+ {803000000, 0x8D},
+ {804000000, 0x8E},
+ {810000000, 0x90},
+ {811000000, 0x91},
+ {812000000, 0x92},
+ {814000000, 0x93},
+ {816000000, 0x94},
+ {817000000, 0x96},
+ {818000000, 0x97},
+ {820000000, 0x98},
+ {821000000, 0x99},
+ {822000000, 0x9A},
+ {828000000, 0x9B},
+ {829000000, 0x9D},
+ {830000000, 0x9F},
+ {831000000, 0xA0},
+ {833000000, 0xA1},
+ {835000000, 0xA2},
+ {836000000, 0xA3},
+ {837000000, 0xA4},
+ {838000000, 0xA6},
+ {840000000, 0xA8},
+ {842000000, 0xA9},
+ {845000000, 0xAA},
+ {846000000, 0xAB},
+ {847000000, 0xAD},
+ {848000000, 0xAE},
+ {852000000, 0xAF},
+ {853000000, 0xB0},
+ {858000000, 0xB1},
+ {860000000, 0xB2},
+ {861000000, 0xB3},
+ {862000000, 0xB4},
+ {863000000, 0xB6},
+ {864000000, 0xB8},
+ {865000000, 0xB9},
+ },
+ { // RF_CAL_DC_OVER_DT_Map uRF_Max, udC_Over_dT
+ {47900000, 0x00},
+ {55000000, 0x00},
+ {61100000, 0x0A},
+ {64000000, 0x0A},
+ {82000000, 0x14},
+ {84000000, 0x19},
+ {119000000, 0x1C},
+ {124000000, 0x20},
+ {129000000, 0x2A},
+ {134000000, 0x32},
+ {139000000, 0x39},
+ {144000000, 0x3E},
+ {149000000, 0x3F},
+ {152600000, 0x40},
+ {154000000, 0x40},
+ {164700000, 0x41},
+ {203500000, 0x32},
+ {353000000, 0x19},
+ {356000000, 0x1A},
+ {359000000, 0x1B},
+ {363000000, 0x1C},
+ {366000000, 0x1D},
+ {369000000, 0x1E},
+ {373000000, 0x1F},
+ {376000000, 0x20},
+ {379000000, 0x21},
+ {383000000, 0x22},
+ {386000000, 0x23},
+ {389000000, 0x24},
+ {393000000, 0x25},
+ {396000000, 0x26},
+ {399000000, 0x27},
+ {402000000, 0x28},
+ {404000000, 0x29},
+ {407000000, 0x2A},
+ {409000000, 0x2B},
+ {412000000, 0x2C},
+ {414000000, 0x2D},
+ {417000000, 0x2E},
+ {419000000, 0x2F},
+ {422000000, 0x30},
+ {424000000, 0x31},
+ {427000000, 0x32},
+ {429000000, 0x33},
+ {432000000, 0x34},
+ {434000000, 0x35},
+ {437000000, 0x36},
+ {439000000, 0x37},
+ {442000000, 0x38},
+ {444000000, 0x39},
+ {447000000, 0x3A},
+ {449000000, 0x3B},
+ {457800000, 0x3C},
+ {465000000, 0x0F},
+ {477000000, 0x12},
+ {483000000, 0x14},
+ {502000000, 0x19},
+ {508000000, 0x1B},
+ {519000000, 0x1C},
+ {522000000, 0x1D},
+ {524000000, 0x1E},
+ {534000000, 0x1F},
+ {549000000, 0x20},
+ {554000000, 0x22},
+ {584000000, 0x24},
+ {589000000, 0x26},
+ {658000000, 0x27},
+ {664000000, 0x2C},
+ {669000000, 0x2D},
+ {699000000, 0x2E},
+ {704000000, 0x30},
+ {709000000, 0x31},
+ {714000000, 0x32},
+ {724000000, 0x33},
+ {729000000, 0x36},
+ {739000000, 0x38},
+ {744000000, 0x39},
+ {749000000, 0x3B},
+ {754000000, 0x3C},
+ {759000000, 0x3D},
+ {764000000, 0x3E},
+ {769000000, 0x3F},
+ {774000000, 0x40},
+ {779000000, 0x41},
+ {784000000, 0x43},
+ {789000000, 0x46},
+ {794000000, 0x48},
+ {799000000, 0x4B},
+ {804000000, 0x4F},
+ {809000000, 0x54},
+ {814000000, 0x59},
+ {819000000, 0x5D},
+ {824000000, 0x61},
+ {829000000, 0x68},
+ {834000000, 0x6E},
+ {839000000, 0x75},
+ {844000000, 0x7E},
+ {849000000, 0x82},
+ {854000000, 0x84},
+ {859000000, 0x8F},
+ {865000000, 0x9A},
+ },
+ { // RF_CAL_KMCO_Map uRF_Max, uK, uM, UCOAmp
+ {47900000, 0x03, 0x02, 0x03},
+ {61100000, 0x04, 0x01, 0x03},
+ {350000000, 0x03, 0x00, 0x03},
+ {720000000, 0x02, 0x01, 0x03},
+ {865000000, 0x03, 0x03, 0x03},
+ },
+ { // RF_CAL_CID_TARGET_Map uRF_Max, uCID_Target, uCount_Limit
+ {46000000, 0x04, 1800000},
+ {52200000, 0x0A, 1500000},
+ {70100000, 0x01, 4000000},
+ {136800000, 0x18, 4000000},
+ {156700000, 0x18, 4000000},
+ {186250000, 0x0A, 4000000},
+ {230000000, 0x0A, 4000000},
+ {345000000, 0x18, 4000000},
+ {426000000, 0x0E, 4000000},
+ {489500000, 0x1E, 4000000},
+ {697500000, 0x32, 4000000},
+ {842000000, 0x3A, 4000000},
+ },
+ { // THERMOMETER_Map uTM_D, uTM_60_92, uTM_92_122
+ {0x00, 0x28, 0x5C},
+ {0x01, 0x3E, 0x5E},
+ {0x02, 0x42, 0x62},
+ {0x03, 0x40, 0x60},
+ {0x04, 0x4A, 0x6A},
+ {0x05, 0x48, 0x68},
+ {0x06, 0x44, 0x64},
+ {0x07, 0x46, 0x66},
+ {0x08, 0x5A, 0x7A},
+ {0x09, 0x58, 0x78},
+ {0x0A, 0x54, 0x74},
+ {0x0B, 0x56, 0x76},
+ {0x0C, 0x4C, 0x6C},
+ {0x0D, 0x4E, 0x6E},
+ {0x0E, 0x52, 0x72},
+ {0x0F, 0x50, 0x70},
+ },
+ { // CAL_PLL_Map uLO_Max, uPost_Div, uDiv
+ {33812500, 0xDD, 0xD0},
+ {36625000, 0xDC, 0xC0},
+ {39937500, 0xDB, 0xB0},
+ {43937500, 0xDA, 0xA0},
+ {48812500, 0xD9, 0x90},
+ {54937500, 0xD8, 0x80},
+ {62812500, 0xD3, 0x70},
+ {67625000, 0xCD, 0x68},
+ {73250000, 0xCC, 0x60},
+ {79875000, 0xCB, 0x58},
+ {87875000, 0xCA, 0x50},
+ {97625000, 0xC9, 0x48},
+ {109875000, 0xC8, 0x40},
+ {125625000, 0xC3, 0x38},
+ {135250000, 0xBD, 0x34},
+ {146500000, 0xBC, 0x30},
+ {159750000, 0xBB, 0x2C},
+ {175750000, 0xBA, 0x28},
+ {195250000, 0xB9, 0x24},
+ {219750000, 0xB8, 0x20},
+ {251250000, 0xB3, 0x1C},
+ {270500000, 0xAD, 0x1A},
+ {293000000, 0xAC, 0x18},
+ {319500000, 0xAB, 0x16},
+ {351500000, 0xAA, 0x14},
+ {390500000, 0xA9, 0x12},
+ {439500000, 0xA8, 0x10},
+ {502500000, 0xA3, 0x0E},
+ {541000000, 0x9D, 0x0D},
+ {586000000, 0x9C, 0x0C},
+ {639000000, 0x9B, 0x0B},
+ {703000000, 0x9A, 0x0A},
+ {781000000, 0x99, 0x09},
+ {879000000, 0x98, 0x08},
+ {1005000000,0x93, 0x07},
+ },
+ { // MAIN_PLL_Map uLO_Max, uPost_Div, uDiv
+ {33125000, 0x5F, 0xF0},
+ {35500000, 0x5E, 0xE0},
+ {38187500, 0x5D, 0xD0},
+ {41375000, 0x5C, 0xC0},
+ {45125000, 0x5B, 0xB0},
+ {49687500, 0x5A, 0xA0},
+ {55187500, 0x59, 0x90},
+ {62125000, 0x58, 0x80},
+ {66250000, 0x4F, 0x78},
+ {71000000, 0x4E, 0x70},
+ {76375000, 0x4D, 0x68},
+ {82750000, 0x4C, 0x60},
+ {90250000, 0x4B, 0x58},
+ {99375000, 0x4A, 0x50},
+ {110375000, 0x49, 0x48},
+ {124250000, 0x48, 0x40},
+ {132500000, 0x3F, 0x3C},
+ {142000000, 0x3E, 0x38},
+ {152750000, 0x3D, 0x34},
+ {165500000, 0x3C, 0x30},
+ {180500000, 0x3B, 0x2C},
+ {198750000, 0x3A, 0x28},
+ {220750000, 0x39, 0x24},
+ {248500000, 0x38, 0x20},
+ {265000000, 0x2F, 0x1E},
+ {284000000, 0x2E, 0x1C},
+ {305500000, 0x2D, 0x1A},
+ {331000000, 0x2C, 0x18},
+ {361000000, 0x2B, 0x16},
+ {397500000, 0x2A, 0x14},
+ {441500000, 0x29, 0x12},
+ {497000000, 0x28, 0x10},
+ {530000000, 0x1F, 0x0F},
+ {568000000, 0x1E, 0x0E},
+ {611000000, 0x1D, 0x0D},
+ {662000000, 0x1C, 0x0C},
+ {722000000, 0x1B, 0x0B},
+ {795000000, 0x1A, 0x0A},
+ {883000000, 0x19, 0x09},
+ {994000000, 0x18, 0x08},
+ },
+ },
+ 0x00, // I2CMap
+ 0x00, // I2CLog
+ 0x00, // uTickEnd [end tick value]
+ },
+};
+
+#endif // _TMBSL_ALLOC_STATIC_INSTANCE_H //--------------- \ No newline at end of file
diff --git a/api/TDA18271_C2.c b/api/TDA18271_C2.c
new file mode 100644
index 0000000..d493ff8
--- /dev/null
+++ b/api/TDA18271_C2.c
@@ -0,0 +1,3599 @@
+//-----------------------------------------------------------------------------
+// $Header:
+// (C) Copyright 2001 NXP Semiconductors, All rights reserved
+//
+// This source code and any compilation or derivative thereof is the sole
+// property of NXP Corporation and is provided pursuant to a Software
+// License Agreement. This code is the proprietary information of NXP
+// Corporation and is confidential in nature. Its use and dissemination by
+// any party other than NXP Corporation is strictly limited by the
+// confidential information provisions of the Agreement referenced above.
+//-----------------------------------------------------------------------------
+// FILE NAME: tmbslTDA18271_C2.c
+//
+// DESCRIPTION: Function for the Hybrid silicon tuner TDA18271
+//
+// DOCUMENT REF:
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+
+//-----------------------------------------------------------------------------
+// Standard include files:
+//-----------------------------------------------------------------------------
+//
+
+//-----------------------------------------------------------------------------
+// Project include files:
+//-----------------------------------------------------------------------------
+//
+#include "TDA18271local_C2.h"
+#include "TDA18271_C2.h"
+#include "TDA18271StaticInstance_C2.h"
+#include "standard.h"
+
+//-----------------------------------------------------------------------------
+// Types and defines:
+//-----------------------------------------------------------------------------
+//
+
+//-----------------------------------------------------------------------------
+// Global data:
+//-----------------------------------------------------------------------------
+//
+
+//-----------------------------------------------------------------------------
+// Internal Prototypes:
+//-----------------------------------------------------------------------------
+//
+Bool_ SY_Write_C2(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff)
+{
+ Bool_ RetStatus = False;
+ ptmTDA18271Object_t_C2 pObj;
+ UInt32 dwError = 0;
+ UInt8 uBuffer[39];
+ UInt32 i;
+
+ for (i = 0; i < uNbData; i++)
+ {
+ uBuffer[i] = (UInt8)pDataBuff[i];
+ }
+
+ pObj = &gTDA18271Instance_C2[0];
+
+ dwError = Standard_writeTunerRegisters (pObj->AFAInfo_C2.demodulator, pObj->AFAInfo_C2.chip,
+ (unsigned short)uSubAddress, (UInt8)uNbData, uBuffer);
+
+ if (dwError == 0) RetStatus = True;
+
+ return (RetStatus);
+};
+
+Bool_ SY_Read_C2(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff)
+{
+ Bool_ RetStatus = False;
+ ptmTDA18271Object_t_C2 pObj;
+ UInt32 dwError = 0;
+ UInt8 uBuffer[39];
+ UInt32 i;
+
+ pObj = &gTDA18271Instance_C2[0];
+
+ dwError = Standard_readTunerRegisters (pObj->AFAInfo_C2.demodulator, pObj->AFAInfo_C2.chip, (UInt16)uSubAddress, (UInt8)uNbData, uBuffer);
+
+ if (dwError == 0)
+ {
+ RetStatus = True;
+
+ for (i = 0; i < uNbData; i++)
+ {
+ pDataBuff[i] = (UInt32)uBuffer[i];
+ }
+ }
+
+ return (RetStatus);
+};
+
+
+Bool_ SY_Write_Slave_C2(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff)
+{
+ Bool_ RetStatus = False;
+ ptmTDA18271Object_t_C2 pObj;
+ UInt32 dwError = 0;
+ UInt8 uBuffer[39];
+ UInt32 i;
+
+ for (i = 0; i < uNbData; i++)
+ {
+ uBuffer[i] = (UInt8)pDataBuff[i];
+ }
+
+ pObj = &gTDA18271Instance_C2[1];
+
+ dwError = Standard_writeTunerRegisters (pObj->AFAInfo_C2.demodulator, pObj->AFAInfo_C2.chip,
+ (unsigned short)uSubAddress, (UInt8)uNbData, uBuffer);
+
+ if (dwError == 0) RetStatus = True;
+
+ return (RetStatus);
+};
+
+Bool_ SY_Read_Slave_C2(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff)
+{
+ Bool_ RetStatus = False;
+ ptmTDA18271Object_t_C2 pObj;
+ UInt32 dwError = 0;
+ UInt8 uBuffer[39];
+ UInt32 i;
+
+ pObj = &gTDA18271Instance_C2[1];
+
+ dwError = Standard_readTunerRegisters (pObj->AFAInfo_C2.demodulator, pObj->AFAInfo_C2.chip, (UInt16)uSubAddress, (UInt8)uNbData, uBuffer);
+
+ if (dwError == 0)
+ {
+ RetStatus = True;
+
+ for (i = 0; i < uNbData; i++)
+ {
+ pDataBuff[i] = (UInt32)uBuffer[i];
+ }
+ }
+
+ return (RetStatus);
+};
+//-----------------------------------------------------------------------------
+// Exported functions:
+//-----------------------------------------------------------------------------
+//
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271Init:
+//
+// DESCRIPTION: create an instance of a TDA18271_C2 Tuner
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TM_OK
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271Init_C2
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmbslTuParam_t_C2 Param // I: setup parameters
+ )
+{
+ ptmTDA18271Object_t_C2 pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the max number
+ if (TunerUnit > TDA18271_MAX_UNITS_C2)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2;
+
+ //----------------------
+ // initialize the Object
+ //----------------------
+ // pObj initialization
+ getInstance_C2(TunerUnit, &pObj);
+
+ // return if already initialized
+ if (pObj != Null && pObj->init == True)
+ return TM_OK;
+
+ //----------------
+ // init the Object
+ //----------------
+ // initialize the Object
+// if (pObj == Null)
+// {
+ ret = allocInstance_C2(TunerUnit, &pObj);
+ if (ret != TM_OK || pObj == Null)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ // initialize the Object by default values
+ pObj->SystemFunc = Param.systemFunc;
+ pObj->uHwAddress = Param.uHwAddress;
+ pObj->init = True;
+// }
+
+ return TM_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271DeInit:
+//
+// DESCRIPTION: destroy an instance of a TDA18271 Tuner
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271DeInit_C2
+(
+ tmUnitSelect_t TunerUnit // I: Tuner unit number
+ )
+{
+ ptmTDA18271Object_t_C2 pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS_C2)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2;
+
+ //----------------------
+ // De-initialize the Object
+ //----------------------
+ // pObj initialization
+ getInstance_C2(TunerUnit, &pObj);
+
+ // return if already initialized
+ if (pObj == Null || pObj->init == False)
+ return TM_OK;
+
+ //----------------
+ // Deinit the Object
+ //----------------
+ // initialize the Object
+ if (pObj != Null)
+ {
+ pObj->init = False;
+ ret = deAllocInstance_C2(TunerUnit);
+ }
+
+ return ret;
+}
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271GetSWVersion:
+//
+// DESCRIPTION: Return the version of this device
+//
+// RETURN: TM_OK
+//
+// NOTES: Values defined in the tmTDA18271Local.h file
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271GetSWVersion_C2
+(
+ ptmSWVersion_t_C2 pSWVersion // I: Receives SW Version
+ )
+{
+ pSWVersion->compatibilityNr = TDA18271_BSL_COMP_NUM_C2;
+ pSWVersion->majorVersionNr = TDA18271_BSL_MAJOR_VER_C2;
+ pSWVersion->minorVersionNr = TDA18271_BSL_MINOR_VER_C2;
+
+ return TM_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271SetPowerState_C2:
+//
+// DESCRIPTION: Set the power state of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271SetPowerState_C2
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmTDA18271PowerState_t_C2 powerState_C2 // I: Power state of this device
+ )
+{
+ ptmTDA18271Object_t_C2 pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the max number
+ if (TunerUnit > TDA18271_MAX_UNITS_C2)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2;
+
+ // pObj initialization
+ ret = getInstance_C2(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ // set power state
+ return TDA18271SetPowerState_C2(pObj, powerState_C2);
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271SetPowerState_C2:
+//
+// DESCRIPTION: Set the power state of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271SetPowerState_C2(
+ ptmTDA18271Object_t_C2 pObj, // I: tuner Object
+ tmTDA18271PowerState_t_C2 powerState // I: Power state of this device
+ )
+{
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ switch (powerState)
+ {
+ case tmPowerNormalMode_C2:
+ // set SM bits
+ pObj->I2CMap.uBx05.bF.SM = 0x00;
+ pObj->I2CMap.uBx05.bF.SM_LT = 0x00;
+ pObj->I2CMap.uBx05.bF.SM_XT = 0x00;
+ break;
+
+ case tmPowerSleepMode_C2:
+ // set SM bits
+ pObj->I2CMap.uBx05.bF.SM = 0x01;
+ pObj->I2CMap.uBx05.bF.SM_LT = 0x01;
+ pObj->I2CMap.uBx05.bF.SM_XT = 0x01;
+ break;
+
+ case tmPowerStandbyWith16MHz_C2:
+ // set SM bits
+ pObj->I2CMap.uBx05.bF.SM = 0x01;
+ pObj->I2CMap.uBx05.bF.SM_LT = 0x01;
+ pObj->I2CMap.uBx05.bF.SM_XT = 0x00;
+ break;
+
+ case tmPowerStandbyWith16MHzAndLoopThrough_C2:
+ // set SM bits
+ pObj->I2CMap.uBx05.bF.SM = 0x01;
+ pObj->I2CMap.uBx05.bF.SM_LT = 0x00;
+ pObj->I2CMap.uBx05.bF.SM_XT = 0x00;
+ break;
+
+ case tmPowerStandbyWithLoopThrough_C2:
+ // set SM bits
+ pObj->I2CMap.uBx05.bF.SM = 0x01;
+ pObj->I2CMap.uBx05.bF.SM_LT = 0x00;
+ pObj->I2CMap.uBx05.bF.SM_XT = 0x01;
+ break;
+
+ default:
+ // power state not supported
+ return TM_ERR_NOT_SUPPORTED_C2;
+ }
+
+ // store powerstate
+ pObj->curPowerState = powerState;
+
+ return TM_OK;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271GetPowerState_C2:
+//
+// DESCRIPTION: Get the power state of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271GetPowerState_C2
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmTDA18271PowerState_t_C2 *pPowerState_C2 // O: Power state of this device
+ )
+{
+ ptmTDA18271Object_t_C2 pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS_C2)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2;
+
+ // pObj initialization
+ ret = getInstance_C2(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ // get power state
+ return TDA18271GetPowerState_C2(pObj, pPowerState_C2);
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271GetPowerState_C2:
+//
+// DESCRIPTION: Get the power state of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271GetPowerState_C2(
+ ptmTDA18271Object_t_C2 pObj, // I: tuner Object
+ tmTDA18271PowerState_t_C2 *pPowerState// I: Power state of this device
+ )
+{
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ //----------------------
+ // get the value
+ //----------------------
+ if ((pObj->I2CMap.uBx05.bF.SM == 0x00) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x00) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x00))
+ *pPowerState = tmPowerNormalMode_C2;
+ else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x01) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x01))
+ *pPowerState = tmPowerSleepMode_C2;
+ else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x01) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x00))
+ *pPowerState = tmPowerStandbyWith16MHz_C2;
+ else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x00) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x00))
+ *pPowerState = tmPowerStandbyWith16MHzAndLoopThrough_C2;
+ else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x00) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x01))
+ *pPowerState = tmPowerStandbyWithLoopThrough_C2;
+ else
+ *pPowerState = tmPowerNotSupported_C2;
+
+ return TM_OK;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271SetStandardMode_C2:
+//
+// DESCRIPTION: Set the standard mode of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271SetStandardMode_C2
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmTDA18271StandardMode_t_C2 StandardMode // I: Standard mode of this device
+ )
+{
+ ptmTDA18271Object_t_C2 pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the max number
+ if (TunerUnit > TDA18271_MAX_UNITS_C2)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2;
+
+ // pObj initialization
+ ret = getInstance_C2(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ // set standard mode
+ return TDA18271SetStandardMode_C2(pObj, StandardMode);
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271SetStandardMode_C2:
+//
+// DESCRIPTION: Set the standard mode of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271SetStandardMode_C2(
+ ptmTDA18271Object_t_C2 pObj, // I: tuner Object
+ tmTDA18271StandardMode_t_C2 StandardMode// I: Standard mode of this device
+ )
+{
+ Bool_ customIF = FALSE;
+ Bool_ customLPFc = FALSE;
+ UInt8 stdValue = 0;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ // set custom IF flag
+ if (((pObj->Config.uPROTOCOLSTEP & 0x02) >> 1) == 0x01)
+ customIF = TRUE;
+
+ // set custom LPFc flag
+ if (((pObj->Config.uPROTOCOLSTEP & 0x01) >> 0) == 0x01)
+ customLPFc = TRUE;
+
+ // set uIF & Std
+ switch (StandardMode)
+ {
+ case tmDigital_TV_ATSC_6MHz_C2:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 3250000;
+ // set Std bit
+ stdValue = 0x1C;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmDigital_TV_DVBT_7MHz_C2:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 3500000;
+ // set Std bit
+ stdValue = 0x1C;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmDigital_TV_DVBT_8MHz_C2:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 4000000;
+ // set Std bit
+ stdValue = 0x1D;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_TV_MN_C2:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 5400000;
+ // set Std bit
+ stdValue = 0x0C;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_TV_B_C2:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 6000000;
+ // set Std bit
+ stdValue = 0x0D;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_TV_GH_C2:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 7100000;
+ // set Std bit
+ stdValue = 0x0E;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_TV_I_C2:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 7250000;
+ // set Std bit
+ stdValue = 0x0E;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_TV_DK_C2:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 6900000;
+ // set Std bit
+ stdValue = 0x0E;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_TV_L_C2:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 6900000;
+ // set Std bit
+ stdValue = 0x0E;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_TV_LL_C2:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 1250000;
+ // set Std bit
+ stdValue = 0x0E;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_FM_Radio_C2:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 1250000;
+ // set Std bit
+ stdValue = 0x18;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x01;
+ break;
+
+ case tmDigital_CAL_C2:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 1250000;
+ // set Std bit
+ stdValue = 0x18;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x01;
+ break;
+
+ case tmDigital_TV_QAM_6MHz_C2:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 4000000;
+ // set Std bit
+ stdValue = 0x1D;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmDigital_TV_QAM_8MHz_C2:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 5000000;
+ // set Std bit
+ stdValue = 0x1F;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmDigital_TV_ISDBT_6MHz_C2:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 4063000;
+ // set Std bit
+ stdValue = 0x1D;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+ }
+
+ // set CAL_Mode to normal mode
+ pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
+
+ // set IF_Level & IF_notch & RFAGC_Top & IFAGC_Top
+ switch (StandardMode)
+ {
+ case tmDigital_TV_ATSC_6MHz_C2:
+ case tmDigital_TV_DVBT_7MHz_C2:
+ case tmDigital_TV_DVBT_8MHz_C2:
+ case tmDigital_TV_QAM_6MHz_C2:
+ case tmDigital_TV_QAM_8MHz_C2:
+ case tmDigital_TV_ISDBT_6MHz_C2:
+ // set IF_Level
+ pObj->I2CMap.uBx06.bF.IF_Level = 0x01;
+ // set IF_notch
+ pObj->I2CMap.uBx0C.bF.IF_notch = 0x01;
+ // set RFAGC_Top & IFAGC_Top
+ pObj->I2CMap.uBx25.EXTENDED_BYTE_22 = 0x37;
+ break;
+
+ case tmAnalog_TV_MN_C2:
+ case tmAnalog_TV_B_C2:
+ case tmAnalog_TV_GH_C2:
+ case tmAnalog_TV_I_C2:
+ case tmAnalog_TV_DK_C2:
+ case tmAnalog_TV_L_C2:
+ case tmAnalog_TV_LL_C2:
+ case tmAnalog_FM_Radio_C2:
+ case tmDigital_CAL_C2:
+ // set IF_Level
+ pObj->I2CMap.uBx06.bF.IF_Level = 0x00;
+ // set IF_notch
+ pObj->I2CMap.uBx0C.bF.IF_notch = 0x00;
+ // set RFAGC_Top & IFAGC_Top
+ pObj->I2CMap.uBx25.EXTENDED_BYTE_22 = 0x2C;
+ break;
+
+ default:
+ // standard mode not supported
+ return TM_ERR_NOT_SUPPORTED_C2;
+ }
+
+ // store standard mode
+ pObj->StandardMode = StandardMode;
+
+ return TM_OK;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271GetStandardMode_C2:
+//
+// DESCRIPTION: Get the standard mode of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271GetStandardMode_C2
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmTDA18271StandardMode_t_C2 *pStandardMode // O: Standard mode of this device
+ )
+{
+ ptmTDA18271Object_t_C2 pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS_C2)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2;
+
+ // pObj initialization
+ ret = getInstance_C2(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ // get standard mode
+ return TDA18271GetStandardMode_C2(pObj, pStandardMode);
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271GetStandardMode_C2:
+//
+// DESCRIPTION: Get the standard mode of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271GetStandardMode_C2
+(
+ ptmTDA18271Object_t_C2 pObj, // I: tuner Object
+ tmTDA18271StandardMode_t_C2 *pStandardMode // O: Standard mode of this device
+ )
+{
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_BAD_PARAMETER_C2;
+
+ //----------------------
+ // get the value
+ //----------------------
+ *pStandardMode = pObj->StandardMode;
+
+ return TM_OK;
+}
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271Write_C2:
+//
+// DESCRIPTION: Write in the Tuner.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES: uIndex: IN parameter containing the HW Sub Address as specified in
+// the datasheet (i.e. looks like 0xX0)
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271Write_C2
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32 uIndex, // I: Start index to write
+ UInt32 uNbBytes, // I: Number of bytes to write
+ UInt32* puBytes // I: Pointer on an array of bytes
+ )
+{
+
+ UInt32 uCounter;
+ UInt8* pI2CMap;
+
+ ptmTDA18271Object_t_C2 pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS_C2)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2;
+
+ // pObj initialization
+ ret = getInstance_C2(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ // test the parameters. uIndex is: 0x0X
+ if ((uIndex + uNbBytes) > TDA18271_NB_BYTES_C2)
+ return TMBSL_ERR_TUNER_BAD_PARAMETER_C2;
+
+ // pI2CMap initialization
+ pI2CMap = &(pObj->I2CMap.uBx00.ID_BYTE) + uIndex;
+
+ //--------------
+ // set the value
+ //--------------
+ // save the values written in the Tuner
+ for (uCounter = 0; uCounter < uNbBytes; uCounter++)
+ {
+ *pI2CMap = (UInt8)(puBytes[uCounter]);
+ pI2CMap ++;
+ }
+
+ // write in the Tuner
+ if (TDA18271Write_C2(pObj,(UInt8)(uIndex),(UInt8)(uNbBytes)) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ return TM_OK;
+}
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271WriteBit_C2:
+//
+// DESCRIPTION: Write in the Tuner.
+//
+// RETURN: TM_ERR_NOT_SUPPORTED
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271WriteBit_C2
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32 uIndex, // I: Start index to write
+ UInt32 uBitMask, // I: bit mask
+ UInt32 uBitValue // I: bit value
+ )
+{
+ return TM_ERR_NOT_SUPPORTED_C2;
+}
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271Read_C2:
+//
+// DESCRIPTION: Read in the Tuner.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TMBSL_ERR_TUNER_BAD_PARAMETER
+// TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271Read_C2
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32 uIndex, // I: Start index to read
+ UInt32 uNbBytes, // I: Number of bytes to read
+ UInt32* puBytes // I: Pointer on an array of bytes
+ )
+{
+ UInt32 uCounter;
+ UInt8* pI2CMap;
+
+ ptmTDA18271Object_t_C2 pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS_C2)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2;
+
+ // pObj initialization
+ ret = getInstance_C2(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ // test the parameters
+ if (uNbBytes > TDA18271_NB_BYTES_C2)
+ return TMBSL_ERR_TUNER_BAD_PARAMETER_C2;
+
+ // test uIndex
+ if (uIndex == -1)
+ uIndex = 0;
+
+ // pI2CMap initialization
+ pI2CMap = &(pObj->I2CMap.uBx00.ID_BYTE) + uIndex;
+
+ //--------------
+ // get the value
+ //--------------
+ // read from the Tuner
+ if (TDA18271Read_C2(pObj,(UInt8)(uIndex),(UInt8)(uNbBytes)) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // copy readen values to puBytes
+ for (uCounter = 0; uCounter < uNbBytes; uCounter++)
+ {
+ *puBytes = (UInt32)(*pI2CMap);
+ pI2CMap ++;
+ puBytes ++;
+ }
+ return TM_OK;
+}
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271SetConfig_C2:
+//
+// DESCRIPTION: Set the Config of the TDA18271_C2
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_ERR_NOT_SUPPORTED
+// TMBSL_ERR_TUNER_BAD_PARAMETER
+// TM_OK
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271SetConfig_C2
+(
+ tmUnitSelect_t TunerUnit, // I: TunerUnit number
+ UInt32 uItemId, // I: Identifier of the item to modify
+ UInt32 uValue // I: Value to set for the Config item
+ )
+{
+ ptmTDA18271Object_t_C2 pObj = Null;
+ UInt8* pI2CMap;
+ UInt32* pDataMap;
+ tmErrorCode_t ret = TM_OK;
+
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS_C2)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2;
+
+ // pObj initialization
+ ret = getInstance_C2(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ //--------------
+ // set the value
+ //--------------
+ switch((tmTDA18271cfgIndex_t_C2)uItemId)
+ {
+ case BOARD_C2:
+ switch (uValue & 0xffff0000)
+ {
+ case OM5776_BOARD_DEF:
+ case OM5780_BOARD_DEF:
+ case OM5782_BOARD_DEF:
+ case OM5764_BOARD_DEF:
+ /*pObj->Config.uXTOUT = 1;
+ pObj->I2CMap.XTout_ON = 1;*/
+ break;
+ case OM5770C2_BOARD_DEF & 0xffff0000:
+ case OM5775_BOARD_DEF:
+ case OM5777_BOARD_DEF:
+ case CUSTOM_BOARD_DEF:
+ // do nothing more than setting the default values
+ break;
+ default:
+ // board not supported
+ return TM_ERR_NOT_SUPPORTED_C2;
+ }
+ // store board
+ gTDA18271Instance_C2[TunerUnit].Config.uBoard = uValue;
+ break;
+
+ case FEINIT_C2:
+ if(TDA18271Init_C2(TunerUnit) == TMBSL_ERR_IIC_ERR_C2)
+ return TMBSL_ERR_IIC_ERR_C2;
+ break;
+
+ case RF_C2:
+ // set RF_C2 frequency
+ pObj->Config.uRF = uValue;
+ break;
+
+ case IF_C2:
+ // set IF_C2 frequency
+ pObj->Config.uIF = uValue;
+ break;
+
+ case PLMODE_C2:
+ // set uPLMODE_C2
+ pObj->Config.uPLMODE = uValue;
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+ break;
+
+ case PLRUN_C2:
+ // switch AGC2_C2 power detector on
+ pObj->I2CMap.uBx1B.bF.PD_AGC2_Det = 0x00;
+ // write byte EXTENDED_BYTE_12
+ if (TDA18271Write_C2(pObj,0x1B,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // switch power level indicator on
+ pObj->Config.uPLMODE = 0x00;
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 20 ms for charge pump source
+ if (TDA18271Wait_C2(pObj,20) == False)
+ return TM_FALSE;
+
+ // read bytes 0x00 to 0x0F
+ if (TDA18271Read_C2 (pObj, 0x00, 16) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // switch power level indicator off
+ pObj->Config.uPLMODE = 0x01;
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // switch AGC2 power detector off
+ pObj->I2CMap.uBx1B.bF.PD_AGC2_Det = 0x01;
+ // write byte EXTENDED_BYTE_12
+ if (TDA18271Write_C2(pObj,0x1B,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ break;
+
+ case POWERSTATE_C2:
+ // set POWERSTATE
+ TDA18271SetPowerState_C2 (pObj, (tmTDA18271PowerState_t_C2)uValue);
+ // set CAL_Mode to normal mode
+ pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
+ // write byte EASY_PROG_BYTE_3
+ if (TDA18271Write_C2(pObj,0x05,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+ break;
+
+ case STANDARDMODE_C2:
+ // set STANDARDMODE_C2
+ TDA18271SetStandardMode_C2 (pObj, (tmTDA18271StandardMode_t_C2)uValue);
+ // set CAL_Mode to normal mode
+ pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
+ // write bytes EASY_PROG_BYTE_3 & EASY_PROG_BYTE_4
+ if (TDA18271Write_C2(pObj,0x05,2) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+ // write MAIN_POST_DIV_BYTE
+ if (TDA18271Write_C2(pObj,0x0C,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+ // write byte EXTENDED_BYTE_22
+ if (TDA18271Write_C2(pObj,0x25,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+ break;
+
+ case LPFC_C2:
+ // set LP_Fc_C2
+ pObj->I2CMap.uBx05.bF.Std = (pObj->I2CMap.uBx05.bF.Std & 0xFC) | ((UInt8)uValue & 0x03);
+ // write byte EASY_PROG_BYTE_3
+ if (TDA18271Write_C2(pObj,0x05,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+ break;
+
+ case XTOUT_C2:
+ // set XTout_ON_C2
+ pObj->I2CMap.uBx06.bF.XTout_ON = (UInt8)(uValue) >> 1;
+ // set Xtout_400mV
+ pObj->I2CMap.uBx06.bF.Xtout_400mV = (UInt8)(uValue) & 0x01;
+ // write byte EASY_PROG_BYTE_4
+ if (TDA18271Write_C2(pObj,0x06,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+ break;
+
+ case IFLEVEL_C2:
+ // set IF_Level_C2
+ pObj->I2CMap.uBx06.bF.IF_Level = (UInt8)uValue;
+ // write byte EASY_PROG_BYTE_4
+ if (TDA18271Write_C2(pObj,0x06,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+ break;
+
+ case EXTENDEDREG_C2:
+ // set Extended_Reg_C2
+ pObj->I2CMap.uBx07.bF.Extended_Reg = (UInt8)uValue;
+ // write byte EASY_PROG_BYTE_5
+ if (TDA18271Write_C2(pObj,0x07,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+ break;
+
+ case MAPNAME_C2:
+ // set map name
+ pObj->Config.uMAPNAME = uValue;
+ break;
+
+ case MAPCOLUMN_C2:
+ // set map x
+ pObj->Config.uMAPCOLUMN = uValue;
+ break;
+
+ case MAPROW_C2:
+ // set map y
+ pObj->Config.uMAPROW = uValue;
+ break;
+
+ case MAPVALUE_C2:
+ // set pointer on wanted cell
+ switch (pObj->Config.uMAPNAME)
+ {
+ case tmTDA18271_IR_MEAS_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_IR_MEAS_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_IR_MEAS_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.IR_MEAS_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_IR_CAL_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_IR_CAL_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_IR_CAL_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.IR_CAL_Map[pObj->Config.uMAPROW].uRF);
+ break;
+
+ case tmTDA18271_BP_FILTER_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_BP_FILTER_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_BP_FILTER_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.BP_FILTER_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_BAND_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_BAND_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_RF_BAND_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_BAND_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_GAIN_TAPER_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_GAIN_TAPER_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_GAIN_TAPER_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.GAIN_TAPER_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_CAL_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_DC_OVER_DT_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_DC_OVER_DT_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_DC_OVER_DT_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_CAL_DC_OVER_DT_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_KMCO_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_KMCO_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_KMCO_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_CAL_KMCO_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_CID_TARGET_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_CID_TARGET_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_CID_TARGET_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_CAL_CID_TARGET_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_THERMOMETER_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_THERMOMETER_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_THERMOMETER_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.THERMOMETER_Map[pObj->Config.uMAPROW].uTM_D);
+ break;
+
+ case tmTDA18271_CAL_PLL_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_CAL_PLL_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_CAL_PLL_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.CAL_PLL_Map[pObj->Config.uMAPROW].uLO_Max);
+ break;
+
+ case tmTDA18271_MAIN_PLL_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_MAIN_PLL_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_MAIN_PLL_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.MAIN_PLL_Map[pObj->Config.uMAPROW].uLO_Max);
+ break;
+
+ case tmTDA18271_I2C_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > 0) || (pObj->Config.uMAPROW > TDA18271_NB_BYTES_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pI2CMap initialization
+ pI2CMap = &(pObj->I2CMap.uBx00.ID_BYTE) + pObj->Config.uMAPROW;
+ break;
+ }
+
+ // set cell value
+ if (pObj->Config.uMAPNAME == tmTDA18271_I2C_Map_C2)
+ *(pI2CMap + (UInt8)pObj->Config.uMAPCOLUMN) = (UInt8)uValue;
+ else
+ *(pDataMap + pObj->Config.uMAPCOLUMN) = uValue;
+ break;
+
+ case PROTOCOLSTEP_C2:
+ // set channel configuration protocol steps to execute
+ pObj->Config.uPROTOCOLSTEP = uValue;
+ break;
+
+ case READINIT_C2:
+ // read bytes 0x00 to 0x26
+ if (TDA18271Read_C2 (pObj,0x00,39) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ if (uValue == 1)
+ {
+ // initialize device
+ if(TDA18271Init_C2(TunerUnit) == TMBSL_ERR_IIC_ERR_C2)
+ return TMBSL_ERR_IIC_ERR_C2;
+ }
+ break;
+ }
+ return TM_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271GetConfig_C2:
+//
+// DESCRIPTION: Get the Config of the TDA18271_C2
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271GetConfig_C2
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32 uItemId, // I: Identifier of the item to get value
+ UInt32* puValue // I: Address of the variable to output the Config item value
+ )
+{
+ UInt32 uCounter = 0;
+
+ ptmTDA18271Object_t_C2 pObj = Null;
+ UInt8* pI2CMap;
+ UInt32* pDataMap;
+ UInt32 uByte=0;
+ tmErrorCode_t ret = TM_OK;
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // pObj initialization
+ ret = getInstance_C2(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ //--------------
+ // get the value
+ //--------------
+ switch((tmTDA18271cfgIndex_t_C2)uItemId)
+ {
+ case BOARD_C2:
+ // get board
+ *puValue = pObj->Config.uBoard;
+ break;
+
+ case RF_C2:
+ // get RF_C2 frequency
+ *puValue = pObj->Config.uRF;
+ break;
+
+ case IF_C2:
+ // get IF frequency
+ *puValue = pObj->Config.uIF;
+ break;
+
+ case STATUSBYTE_C2:
+ // read bytes 0x00 to 0x26
+ if (TDA18271Read_C2 (pObj,0x00,39) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+ break;
+
+ case GETNBOFUNIT_C2:
+ *puValue = TDA18271_MAX_UNITS_C2;
+ break;
+
+ case ID_C2:
+ // get ID_C2 value
+ *puValue = pObj->I2CMap.uBx00.bF.ID;
+ break;
+
+ case POR_C2:
+ // get POR_C2 value
+ *puValue = pObj->I2CMap.uBx01.bF.POR;
+ break;
+
+ case MAINLOCK_C2:
+ // get MAINLOCK value
+ *puValue = TunerUnit == 0 ? pObj->I2CMap.uBx01.bF.MAIN_Lock : pObj->I2CMap.uBx16.bF.CAL_Lock;
+ break;
+
+ case TMVALUE_C2:
+ // read byte THERMO_BYTE
+ if (TDA18271ThermometerRead_C2(pObj, puValue) != TM_OK || pObj->I2CMap.uBx05.bF.SM == 1)
+ return TMBSL_ERR_IIC_ERR_C2;
+ break;
+
+ case PLMODE_C2:
+ // get PLMODE value
+ *puValue = pObj->Config.uPLMODE;
+ break;
+
+ case PLAGC1_C2:
+ // get PLAGC1 value
+ *puValue = 3 * (2 + ((pObj->I2CMap.uBx02.bF.Power_Level_7_to_0 & 0x7F) >> 5));
+ break;
+
+ case PLAGC2_C2:
+ // get PLAGC2 value
+ *puValue = 3 * (2 + (3 - (pObj->I2CMap.uBx03.bF.Power_Level_8 << 1 | pObj->I2CMap.uBx02.bF.Power_Level_7_to_0 >> 7)));
+ break;
+
+ case PLRFAGC_C2:
+ // get PLRFAGC value (PLRFAGC = PLRFAGC - 11)
+ if (((pObj->I2CMap.uBx25.EXTENDED_BYTE_22 & 0x7F) >> 4) < 5)
+ *puValue = 11 + (92 + 2 * ((pObj->I2CMap.uBx25.EXTENDED_BYTE_22 & 0x7F) >> 4)) - (103 - (pObj->I2CMap.uBx02.bF.Power_Level_7_to_0 & 0x1F));
+ else
+ *puValue = 11 + 102 - (103 - (pObj->I2CMap.uBx02.bF.Power_Level_7_to_0 & 0x1F));
+ // limit PLRFAGC value
+ if (*puValue > 33)
+ *puValue = 33;
+ else if (*puValue < 1)
+ *puValue = 1;
+ break;
+
+ case RFCALOK_C2:
+ // get RFCALOK value
+ *puValue = pObj->I2CMap.uBx03.bF.RF_CAL_OK;
+ break;
+
+ case RFCAL_TCOMP_C2:
+ // get RFCAL_TCOMP value
+ *puValue = pObj->Config.uRFCAL_TCOMP;
+ break;
+
+ case IRCALOK_C2:
+ // get IRCALOK value
+ *puValue = pObj->I2CMap.uBx03.bF.IR_CAL_OK;
+ break;
+
+ case BPFILTER_C2:
+ // get BPFILTER value
+ *puValue = pObj->I2CMap.uBx03.bF.BP_Filter;
+ break;
+
+ case RFBAND_C2:
+ // get RFBAND_C2 value
+ *puValue = pObj->I2CMap.uBx04.bF.RF_Band;
+ break;
+
+ case GAINTAPER_C2:
+ // get GAINTAPER_C2 value
+ *puValue = pObj->I2CMap.uBx04.bF.Gain_Taper;
+ break;
+
+ case POWERSTATE_C2:
+ // get POWERSTATE_C2
+ TDA18271GetPowerState_C2(pObj,(ptmTDA18271PowerState_t_C2)puValue);
+ break;
+
+ case LPFC_C2:
+ // get LPFC_C2 value
+ *puValue = pObj->I2CMap.uBx05.bF.Std & 0x03;
+ break;
+
+ case FMRFN_C2:
+ // get FMRFN_C2 value
+ *puValue = pObj->I2CMap.uBx06.bF.FM_RFn;
+ break;
+
+ case STANDARDMODE_C2:
+ // get STANDARDMODE_C2
+ TDA18271GetStandardMode_C2(pObj, (ptmTDA18271StandardMode_t_C2)puValue);
+ break;
+
+ case XTOUT_C2:
+ // get XTout_ON & Xtout_400mV value
+ *puValue = (UInt32)(pObj->I2CMap.uBx06.bF.XTout_ON << 1 | pObj->I2CMap.uBx06.bF.Xtout_400mV);
+ break;
+
+ case IFLEVEL_C2:
+ // get IFLEVEL_C2 value
+ *puValue = pObj->I2CMap.uBx06.bF.IF_Level;
+ break;
+
+ case EXTENDEDREG_C2:
+ // get EXTENDEDREG_C2 value
+ *puValue = pObj->I2CMap.uBx07.bF.Extended_Reg;
+ break;
+
+ case CALPOSTDIV_C2:
+ // get CALPOSTDIV_C2 value
+ *puValue = pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE & 0x7F;
+ break;
+
+ case CALDIV_C2:
+ // get CALDIV_C2 value
+ *puValue = pObj->I2CMap.uBx09.bF.CAL_Div_22_to_16 << 16 | pObj->I2CMap.uBx0A.bF.CAL_Div_15_to_8 << 8 | pObj->I2CMap.uBx0B.bF.CAL_Div_7_to_0;
+ break;
+
+ case MAINPOSTDIV_C2:
+ // get MAINPOSTDIV_C2 value
+ *puValue = pObj->I2CMap.uBx0C.bF.MAIN_Post_Div;
+ break;
+
+ case MAINDIV_C2:
+ // get MAINDIV_C2 value
+ *puValue = pObj->I2CMap.uBx0D.bF.MAIN_Div_22_to_16 << 16 | pObj->I2CMap.uBx0E.bF.MAIN_Div_15_to_8 << 8 | pObj->I2CMap.uBx0F.bF.MAIN_Div_7_to_0;
+ break;
+
+ case MAPVALUE_C2:
+ // set pointer on wanted cell
+ switch (pObj->Config.uMAPNAME)
+ {
+ case tmTDA18271_IR_MEAS_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_IR_MEAS_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_IR_MEAS_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.IR_MEAS_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_IR_CAL_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_IR_CAL_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_IR_CAL_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.IR_CAL_Map[pObj->Config.uMAPROW].uRF);
+ break;
+
+ case tmTDA18271_BP_FILTER_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_BP_FILTER_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_BP_FILTER_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.BP_FILTER_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_BAND_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_BAND_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_RF_BAND_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_BAND_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_GAIN_TAPER_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_GAIN_TAPER_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_GAIN_TAPER_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.GAIN_TAPER_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_CAL_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_DC_OVER_DT_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_DC_OVER_DT_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_DC_OVER_DT_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_CAL_DC_OVER_DT_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_KMCO_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_KMCO_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_KMCO_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_CAL_KMCO_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_CID_TARGET_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_CID_TARGET_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_CID_TARGET_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_CAL_CID_TARGET_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_THERMOMETER_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_THERMOMETER_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_THERMOMETER_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.THERMOMETER_Map[pObj->Config.uMAPROW].uTM_D);
+ break;
+
+ case tmTDA18271_CAL_PLL_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_CAL_PLL_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_CAL_PLL_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.CAL_PLL_Map[pObj->Config.uMAPROW].uLO_Max);
+ break;
+
+ case tmTDA18271_MAIN_PLL_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_MAIN_PLL_NB_COLUMNS_C2 - 1) || (pObj->Config.uMAPROW > TDA18271_MAIN_PLL_NB_ROWS_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.MAIN_PLL_Map[pObj->Config.uMAPROW].uLO_Max);
+ break;
+
+ case tmTDA18271_I2C_Map_C2:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > 0) || (pObj->Config.uMAPROW > TDA18271_NB_BYTES_C2 - 1))
+ return TM_ERR_NOT_SUPPORTED_C2;
+ // pI2CMap initialization
+ pI2CMap = &(pObj->I2CMap.uBx00.ID_BYTE) + pObj->Config.uMAPROW;
+ break;
+ }
+ // get cell value
+ if (pObj->Config.uMAPNAME == tmTDA18271_I2C_Map_C2)
+ *puValue = *(pI2CMap + pObj->Config.uMAPCOLUMN);
+ else
+ *puValue = *(pDataMap + pObj->Config.uMAPCOLUMN);
+ break;
+
+ case PROTOCOLSTEP_C2:
+ // get channel configuration protocol steps
+ *puValue = pObj->Config.uPROTOCOLSTEP;
+ break;
+
+ // backdoor functions
+ case IDENTITY_C2:
+ _SYSTEMFUNC.SY_Read_C2( pObj->uHwAddress, TDA18271_IDENTITY_IND_C2, 1, &uByte);
+ /*if (uByte != 0x82)
+ *puValue = False;
+ else
+ *puValue = True;
+ */
+ switch (pObj->Config.uBoard & 0xffff0000)
+ {
+ case 0x57750000:
+ *puValue = True;
+ break;
+ default:
+ *puValue = False;
+ break;
+ }
+ break;
+
+ }
+ return TM_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271SetRf_C2:
+//
+// DESCRIPTION: Calculate i2c I2CMap & write in TDA18271_C2
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TMBSL_ERR_TUNER_BAD_PARAMETER
+// TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271SetRf_C2
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32 uRF // I: RF frequency in hertz
+ )
+{
+ ptmTDA18271Object_t_C2 pObj;
+ tmErrorCode_t ret = TM_OK;
+
+ UInt32 uCounter = 0;
+ UInt32 uTMVALUE_CURRENT = 0;
+ UInt8 utmpStd = 0;
+
+ UInt8 uCprog_table = 0;
+ Int32 uCapprox = 0;
+ Int32 uCprog_signed = 0;
+
+
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // pObj initialization
+ ret = getInstance_C2(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ // Config.uRF update
+ pObj->Config.uRF = uRF;
+
+ //----------------------
+ // configuration reset
+ //----------------------
+ // set power level indicator to off
+ pObj->Config.uPLMODE = 1;
+
+ //----------------------
+ // normal mode restore
+ //----------------------
+ // power up in calibration standard
+ pObj->I2CMap.uBx05.bF.SM = 0x00;
+ pObj->I2CMap.uBx05.bF.SM_LT = 0x00;
+ pObj->I2CMap.uBx05.bF.SM_XT = 0x00;
+ // write byte EASY_PROG_BYTE_3
+ if (TDA18271Write_C2(pObj,0x5,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ //----------------------
+ // RF tracking filter correction
+ //----------------------
+ // sense temperature
+ ret = TDA18271ThermometerRead_C2(pObj, &uTMVALUE_CURRENT);
+ if (ret != TM_OK)
+ return ret;
+
+ //----------------------
+ // frequency dependent parameters update
+ //----------------------
+ // search for uCprog_table corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.RF_CAL_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_NB_ROWS_C2);
+ uCprog_table = (UInt8)pObj->Config.RF_CAL_Map[uCounter - 1].uRFC_Cprog;
+
+ // search for sub-band corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.RF_BAND_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_BAND_NB_ROWS_C2);
+
+ // calculate Capprox
+ if (pObj->Config.RF_BAND_Map[uCounter - 1].uRF1 == 0)
+ {
+ // Capprox = uCprog_table
+ uCapprox = (Int32)uCprog_table;
+ }
+ else if ((pObj->Config.RF_BAND_Map[uCounter - 1].uRF3 != 0) && (uRF >= pObj->Config.RF_BAND_Map[uCounter - 1].uRF2))
+ {
+ // Capprox = A2 * (uRF - uRF2) + B2 + uCprog_table
+ uCapprox = (Int32)(((pObj->Config.RF_BAND_Map[uCounter - 1].uRF_A2 * ((Int32)(uRF - pObj->Config.RF_BAND_Map[uCounter - 1].uRF2) / 1000000)) / 1000000)
+ + pObj->Config.RF_BAND_Map[uCounter - 1].uRF_B2 + uCprog_table);
+ }
+ else
+ {
+ // Capprox = A1 * (uRF - uRF1) + B1 + uCprog_table
+ uCapprox = (Int32)(((pObj->Config.RF_BAND_Map[uCounter - 1].uRF_A1 * ((Int32)(uRF - pObj->Config.RF_BAND_Map[uCounter - 1].uRF1) / 1000000)) / 1000000)
+ + pObj->Config.RF_BAND_Map[uCounter - 1].uRF_B1 + uCprog_table);
+ }
+
+ // search for udC_Over_dT corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.RF_CAL_DC_OVER_DT_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_DC_OVER_DT_NB_ROWS_C2);
+
+ // calculate CTcomp
+ pObj->Config.uRFCAL_TCOMP = (Int32)(pObj->Config.RF_CAL_DC_OVER_DT_Map[uCounter - 1].udC_Over_dT * (uTMVALUE_CURRENT - pObj->Config.uTMVALUE_RFCAL)) / 1000;
+
+ // calculate Cprog
+ uCprog_signed = uCapprox + pObj->Config.uRFCAL_TCOMP;
+ if (uCprog_signed < 0) uCprog_signed = 0;
+ if (uCprog_signed > 255) uCprog_signed = 255;
+ pObj->I2CMap.uBx1D.RFC_Cprog = (UInt8)uCprog_signed;
+
+ // write byte RFC_Cprog
+ if (TDA18271Write_C2(pObj,0x1D,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ //----------------------
+ // standard mode update
+ //----------------------
+ // update TV broadcast parameters
+ ret = TDA18271SetStandardMode_C2(pObj, pObj->StandardMode);
+ if (ret != TM_OK)
+ return ret;
+
+ // switch RFAGC to high speed mode (store current value)
+ utmpStd = pObj->I2CMap.uBx05.bF.Std;
+ pObj->I2CMap.uBx05.bF.Std &= 0x1B;
+
+ // write byte EASY_PROG_BYTE_3
+ if (TDA18271Write_C2(pObj,0x5,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+#ifdef TMBSL_TDA18271_FREEZE_AGC_C2
+ /////////////////////////////////////////////
+ //----------------------
+ // unfreeze AGC 1&2 detectors for secam L only
+ //----------------------
+ switch (StandardMode)
+ {
+ case tmAnalog_TV_L:
+ case tmAnalog_TV_LL:
+ // switch to digital mode
+ pObj->I2CMap.uBx05.bF.Std |= 0x10;
+
+ // start AGC1
+ pObj->I2CMap.uBx1B.bF.PD_AGC1_Det = 0x00;
+ pObj->I2CMap.uBx21.bF.AGC1_loop_off = 0x00;
+
+ // start AGC2
+ pObj->I2CMap.uBx1B.bF.PD_AGC2_Det = 0x00;
+ pObj->I2CMap.uBx24.bF.AGC2_loop_off = 0x00;
+
+ // write byte EASY_PROG_BYTE_3
+ if (TDA18271Write_C2(pObj,0x05,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+ break;
+
+ default:
+ // start AGC1
+ pObj->I2CMap.uBx1B.bF.PD_AGC1_Det = 0x00;
+ pObj->I2CMap.uBx21.bF.AGC1_loop_off = 0x00;
+
+ // freeze AGC2 (set AGC2Gain = -6dB)
+ pObj->I2CMap.uBx1B.bF.PD_AGC2_Det = 0x01;
+ pObj->I2CMap.uBx24.bF.AGC2_loop_off = 0x01;
+ pObj->I2CMap.uBx24.bF.AGC2_Gain = 0x03;
+ break;
+ }
+
+ // write byte EXTENDED_BYTE_12
+ if (TDA18271Write_C2(pObj,0x1B,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // write byte EXTENDED_BYTE_18
+ if (TDA18271Write_C2(pObj,0x21,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+#endif // TMBSL_TDA18271_FREEZE_AGC_C2
+
+ // write bytes EXTENDED_BYTE_21 to EXTENDED_BYTE_23
+ if (TDA18271Write_C2(pObj,0x24,3) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+#ifdef TMBSL_TDA18271_FREEZE_AGC_C2
+ switch (StandardMode)
+ {
+ case tmAnalog_TV_L:
+ case tmAnalog_TV_LL:
+ // wait 1 s for AGC 1&2 startup
+ Wait(1000);
+ break;
+ }
+ /////////////////////////////////////////////
+#endif // TMBSL_TDA18271_FREEZE_AGC_C2
+
+ //----------------------
+ // update frequency dependent parameters
+ //----------------------
+ // search for IR_Meas corresponding to wanted frequency
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.IR_MEAS_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_IR_MEAS_NB_ROWS_C2);
+ pObj->I2CMap.uBx07.bF.IR_Meas = (UInt8)pObj->Config.IR_MEAS_Map[uCounter - 1].uIR_Meas;
+
+ // search for BP_Filter corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.BP_FILTER_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_BP_FILTER_NB_ROWS_C2);
+ pObj->I2CMap.uBx03.bF.BP_Filter = (UInt8)pObj->Config.BP_FILTER_Map[uCounter - 1].uBP_Filter;
+
+ // search for RF_BAND corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.RF_BAND_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_BAND_NB_ROWS_C2);
+ pObj->I2CMap.uBx04.bF.RF_Band = (UInt8)pObj->Config.RF_BAND_Map[uCounter - 1].uRF_Band;
+
+ // search for Gain_Taper corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.GAIN_TAPER_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_GAIN_TAPER_NB_ROWS_C2);
+ pObj->I2CMap.uBx04.bF.Gain_Taper = (UInt8)pObj->Config.GAIN_TAPER_Map[uCounter - 1].uGain_Taper;
+
+ //---------------------
+ // dual tuner and AGC1 extra configuration management
+ //---------------------
+ // use MAIN VCO when master, CAL VCO when slave
+ pObj->I2CMap.uBx10.bF.CALVCO_forLOn = (TunerUnit == 0) ? 1 : 0;
+
+ // AGC1 & AGC2 management
+ pObj->I2CMap.uBx10.bF.AGC1_always_mastern = 0x00;
+ pObj->I2CMap.uBx10.bF.AGC1_firstn = 0x00;
+
+ // write byte EXTENDED_BYTE_1
+ if (TDA18271Write_C2(pObj,0x10,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ //---------------------
+ // tune to wanted channel frequency
+ //---------------------
+ // use MAIN VCO when master, CAL VCO when slave
+ if (TunerUnit == 0) // master
+ {
+ // calculate MAIN PLL
+ if (TDA18271CalcMAINPLL_C2(pObj, uRF + pObj->Config.uIF) == False)
+ return TM_FALSE;
+
+ // write bytes 0x01 to 0x0F
+ if (TDA18271Write_C2(pObj,0x01,15) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // MAIN pll charge pump source
+ pObj->I2CMap.uBx13.bF.LO_ForceSrce = 0x01;
+ // write byte EXTENDED_BYTE_4
+ if (TDA18271Write_C2(pObj,0x13,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 1 ms for charge pump source
+ if (TDA18271Wait_C2(pObj,1) == False)
+ return TM_FALSE;
+
+ // MAIN pll normal operation
+ pObj->I2CMap.uBx13.bF.LO_ForceSrce = 0x00;
+ // write byte EXTENDED_BYTE_4
+ if (TDA18271Write_C2(pObj,0x13,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+ }
+ else // slave
+ {
+ // calculate CAL PLL
+ if (TDA18271CalcCALPLL_C2(pObj, uRF + pObj->Config.uIF) == False)
+ return TM_FALSE;
+
+ // copy CAL PLL PostDiv to MAIN PLL Post Div
+ pObj->I2CMap.uBx0C.bF.MAIN_Post_Div = pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE & 0x77;
+
+ // write bytes 0x01 to 0x0F
+ if (TDA18271Write_C2(pObj,0x01,15) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // CAL pll charge pump source
+ pObj->I2CMap.uBx16.bF.CAL_ForceSrce = 0x01;
+ // write byte EXTENDED_BYTE_7
+ if (TDA18271Write_C2(pObj,0x16,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 1 ms for charge pump source
+ if (TDA18271Wait_C2(pObj,1) == False)
+ return TM_FALSE;
+
+ // CAL pll normal operation
+ pObj->I2CMap.uBx16.bF.CAL_ForceSrce = 0x00;
+ // write byte EXTENDED_BYTE_7
+ if (TDA18271Write_C2(pObj,0x16,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+ }
+
+ // wait 20 ms for pll locking
+ if (TDA18271Wait_C2(pObj,20) == False)
+ return TM_FALSE;
+
+ // switch RFAGC to normal mode (restore previous value)
+ pObj->I2CMap.uBx05.bF.Std = utmpStd;
+
+ // write byte EASY_PROG_BYTE_3
+ if (TDA18271Write_C2(pObj,0x5,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+#ifdef TMBSL_TDA18271_FREEZE_AGC_C2
+ /////////////////////////////////////////////
+ //----------------------
+ // freeze AGC 1&2 detectors for secam L only
+ //----------------------
+ switch (StandardMode)
+ {
+ case tmAnalog_TV_L:
+ case tmAnalog_TV_LL:
+ // switch back to analog mode
+ pObj->I2CMap.uBx05.bF.Std &= 0xEF;
+
+ // freeze AGC1
+ pObj->I2CMap.uBx1B.bF.PD_AGC1_Det = 0x01;
+ pObj->I2CMap.uBx21.bF.AGC1_loop_off = 0x01;
+
+ // freeze AGC2
+ pObj->I2CMap.uBx1B.bF.PD_AGC2_Det = 0x01;
+ pObj->I2CMap.uBx24.bF.AGC2_loop_off = 0x01;
+ break;
+
+ // write byte EASY_PROG_BYTE_3
+ if (TDA18271Write_C2(pObj,0x05,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // write byte EXTENDED_BYTE_12
+ if (TDA18271Write_C2(pObj,0x1B,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // write byte EXTENDED_BYTE_18
+ if (TDA18271Write_C2(pObj,0x21,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+
+ // write bytes EXTENDED_BYTE_21
+ if (TDA18271Write_C2(pObj,0x24,1) != True)
+ return TMBSL_ERR_IIC_ERR;
+ break;
+ }
+ /////////////////////////////////////////////
+#endif // TMBSL_TDA18271_FREEZE_AGC_C2
+
+ // read bytes 0x00 to 0x26
+ if (TDA18271Read_C2 (pObj,0x00,39) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ return TM_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271GetRf_C2:
+//
+// DESCRIPTION: Get the frequency programmed in the tuner
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES: The value returned is the one stored in the Object
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271GetRf_C2
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32* pRF // O: RF frequency in hertz
+ )
+{
+ ptmTDA18271Object_t_C2 pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // pObj initialization
+ ret = getInstance_C2(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ //----------------------
+ // get the value
+ //----------------------
+ // the read function can't be used
+ *pRF = pObj->Config.uRF;
+
+ return TM_OK;
+}
+
+//-----------------------------------------------------------------------------
+// Internal functions:
+//-----------------------------------------------------------------------------
+//
+#ifndef NXPFE
+//-----------------------------------------------------------------------------
+// FUNCTION: allocInstance:
+//
+// DESCRIPTION: allocate new instance
+//
+// RETURN:
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+allocInstance_C2 (
+ UInt32 DeviceUnit, // I: Device unit number
+ pptmTDA18271Object_t_C2 ppDrvObject // I: Device Object
+ )
+{
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the max number
+ if (DeviceUnit > TDA18271_MAX_UNITS_C2)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2;
+
+ // return value
+ return getInstance_C2(DeviceUnit, ppDrvObject);
+}
+
+//-----------------------------------------------------------------------------
+// FUNCTION: deAllocInstance:
+//
+// DESCRIPTION: deallocate instance
+//
+// RETURN: always TM_OK
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+deAllocInstance_C2 (
+ UInt32 DeviceUnit // I: Device unit number
+ )
+{
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the max number
+ if (DeviceUnit > TDA18271_MAX_UNITS_C2)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2;
+
+ // return value
+ return TM_OK;
+}
+
+//-----------------------------------------------------------------------------
+// FUNCTION: getInstance:
+//
+// DESCRIPTION: get the instance
+//
+// RETURN: always True
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+getInstance_C2 (
+ tmUnitSelect_t DeviceUnit, // I: Device unit number
+ pptmTDA18271Object_t_C2 ppDrvObject // I: Device Object
+ )
+{
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the max number
+ if (DeviceUnit > TDA18271_MAX_UNITS_C2)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2;
+
+ // get instance
+ *ppDrvObject = &gTDA18271Instance_C2[DeviceUnit];
+
+ // return value
+ return TM_OK;
+}
+#endif // NXPFE
+
+//-----------------------------------------------------------------------------
+// FUNCTION: TDA18271Init_C2:
+//
+// DESCRIPTION: initialization of the Tuner
+//
+// RETURN: always True
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271Init_C2 (
+ tmUnitSelect_t TunerUnit // I: Tuner Object
+ )
+{
+ ptmTDA18271Object_t_C2 pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // pObj initialization
+ ret = getInstance_C2(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ //----------------------
+ // configuration reset
+ //----------------------
+ // set power level indicator to off
+ pObj->Config.uPLMODE = 1;
+
+ //----------------------
+ // I2C map initialization
+ //----------------------
+ // set & write all bytes
+ pObj->I2CMap.uBx01.THERMO_BYTE = 0x08;
+ pObj->I2CMap.uBx02.POWER_LEVEL_BYTE = 0x80;
+ pObj->I2CMap.uBx03.EASY_PROG_BYTE_1 = 0xC6;
+ pObj->I2CMap.uBx04.EASY_PROG_BYTE_2 = 0xDF;
+ pObj->I2CMap.uBx05.EASY_PROG_BYTE_3 = 0x16;
+ pObj->I2CMap.uBx06.EASY_PROG_BYTE_4 = 0x60;
+ pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x80;
+ pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0x80;
+ pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x00;
+ pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x00;
+ pObj->I2CMap.uBx0B.CAL_DIV_BYTE_3 = 0x00;
+ pObj->I2CMap.uBx0C.MAIN_POST_DIV_BYTE = 0x00;
+ pObj->I2CMap.uBx0D.MAIN_DIV_BYTE_1 = 0x00;
+ pObj->I2CMap.uBx0E.MAIN_DIV_BYTE_2 = 0x00;
+ pObj->I2CMap.uBx0F.MAIN_DIV_BYTE_3 = 0x00;
+ pObj->I2CMap.uBx10.EXTENDED_BYTE_1 = 0xFC;
+ pObj->I2CMap.uBx11.EXTENDED_BYTE_2 = 0x01;
+ pObj->I2CMap.uBx12.EXTENDED_BYTE_3 = 0x84;
+ pObj->I2CMap.uBx13.EXTENDED_BYTE_4 = 0x41;
+ pObj->I2CMap.uBx14.EXTENDED_BYTE_5 = 0x01;
+ pObj->I2CMap.uBx15.EXTENDED_BYTE_6 = 0x84;
+ pObj->I2CMap.uBx16.EXTENDED_BYTE_7 = 0x40;
+ pObj->I2CMap.uBx17.EXTENDED_BYTE_8 = 0x07;
+ pObj->I2CMap.uBx18.EXTENDED_BYTE_9 = 0x00;
+ pObj->I2CMap.uBx19.EXTENDED_BYTE_10 = 0x00;
+ pObj->I2CMap.uBx1A.EXTENDED_BYTE_11 = 0x96;
+ pObj->I2CMap.uBx1B.EXTENDED_BYTE_12 = 0x3F;
+ pObj->I2CMap.uBx1C.EXTENDED_BYTE_13 = 0xC1;
+ pObj->I2CMap.uBx1D.EXTENDED_BYTE_14 = 0x00;
+ pObj->I2CMap.uBx1E.EXTENDED_BYTE_15 = 0x8F;
+ pObj->I2CMap.uBx1F.EXTENDED_BYTE_16 = 0x00;
+ pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x00;
+ pObj->I2CMap.uBx21.EXTENDED_BYTE_18 = 0x8C;
+ pObj->I2CMap.uBx22.EXTENDED_BYTE_19 = 0x00;
+ pObj->I2CMap.uBx23.EXTENDED_BYTE_20 = 0x20;
+ pObj->I2CMap.uBx24.EXTENDED_BYTE_21 = 0xB3;
+ pObj->I2CMap.uBx25.EXTENDED_BYTE_22 = 0x48;
+ pObj->I2CMap.uBx26.EXTENDED_BYTE_23 = 0xB0;
+ if (TDA18271Write_C2(pObj,0x01,38) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ //----------------------
+ // AGC1 gain setup
+ //----------------------
+ // AGC1_Gain_do
+ // update & write EXTENDED_BYTE_17
+ pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x00; // set gain_do address
+ if (TDA18271Write_C2(pObj,0x20,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+ pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x03; // keep gain_do address, set gain_do
+ if (TDA18271Write_C2(pObj,0x20,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // AGC1_Gain_up
+ // update & write EXTENDED_BYTE_17
+ pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x43; // set gain_up address, keep gain_do
+ if (TDA18271Write_C2(pObj,0x20,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+ pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x4C; // keep gain_up address, set gain_up
+ if (TDA18271Write_C2(pObj,0x20,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ //----------------------
+ // image rejection calibration - low band
+ //----------------------
+ // initialisation
+ pObj->I2CMap.uBx05.EASY_PROG_BYTE_3 = 0x1F;
+ pObj->I2CMap.uBx06.EASY_PROG_BYTE_4 = 0x66;
+ pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x81;
+ pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0xCC;
+ pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x6C;
+ pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x00;
+ pObj->I2CMap.uBx0B.CAL_DIV_BYTE_3 = 0x00;
+ pObj->I2CMap.uBx0C.MAIN_POST_DIV_BYTE = 0xC5;
+ pObj->I2CMap.uBx0D.MAIN_DIV_BYTE_1 = 0x77;
+ pObj->I2CMap.uBx0E.MAIN_DIV_BYTE_2 = 0x08;
+ pObj->I2CMap.uBx0F.MAIN_DIV_BYTE_3 = 0x00;
+ // write bytes EASY_PROG_BYTE_2 to MAIN_DIV_BYTE_3
+ if (TDA18271Write_C2(pObj,0x04,12) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait_C2(pObj,5) == False)
+ return TM_FALSE;
+
+ // launch detector
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 5 ms for wanted measurement
+ if (TDA18271Wait_C2(pObj,5) == False)
+ return TM_FALSE;
+
+ // CAL pll update
+ pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x85;
+ pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0xCB;
+ pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x66;
+ pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x70;
+
+ // write bytes EASY_PROG_BYTE_3 to CAL_DIV_BYTE_3
+ if (TDA18271Write_C2(pObj,0x05,7) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait_C2(pObj,5) == False)
+ return TM_FALSE;
+
+ // launch optimisation algorithm
+ // write byte EASY_PROG_BYTE_2
+ if (TDA18271Write_C2(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 30 ms for image optimization completion
+ if (TDA18271Wait_C2(pObj,30) == False)
+ return TM_FALSE;
+
+ //----------------------
+ // image rejection calibration - mid band
+ //----------------------
+ // initialisation
+ pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x82;
+ pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0xA8;
+ pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x00;
+ pObj->I2CMap.uBx0C.MAIN_POST_DIV_BYTE = 0xA1;
+ pObj->I2CMap.uBx0D.MAIN_DIV_BYTE_1 = 0x73;
+ pObj->I2CMap.uBx0E.MAIN_DIV_BYTE_2 = 0x1A;
+ // write bytes EASY_PROG_BYTE_3 to MAIN_DIV_BYTE_3
+ if (TDA18271Write_C2(pObj,0x05,11) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait_C2(pObj,5) == False)
+ return TM_FALSE;
+
+ // launch detector
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 5 ms for wanted measurement
+ if (TDA18271Wait_C2(pObj,5) == False)
+ return TM_FALSE;
+
+ // CAL pll update
+ pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x86;
+ pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0xA8;
+ pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x66;
+ pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0xA0;
+
+ // write bytes EASY_PROG_BYTE_3 to CAL_DIV_BYTE_3
+ if (TDA18271Write_C2(pObj,0x05,7) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait_C2(pObj,5) == False)
+ return TM_FALSE;
+
+ // launch optimisation algorithm
+ // write byte EASY_PROG_BYTE_2
+ if (TDA18271Write_C2(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 30 ms for image optimization completion
+ if (TDA18271Wait_C2(pObj,30) == False)
+ return TM_FALSE;
+
+ //----------------------
+ // image rejection calibration - high band
+ //----------------------
+ // initialisation
+ pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x83;
+ pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0x98;
+ pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x65;
+ pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x00;
+ pObj->I2CMap.uBx0C.MAIN_POST_DIV_BYTE = 0x91;
+ pObj->I2CMap.uBx0D.MAIN_DIV_BYTE_1 = 0x71;
+ pObj->I2CMap.uBx0E.MAIN_DIV_BYTE_2 = 0xCD;
+ // write bytes EASY_PROG_BYTE_3 to CAL_DIV_BYTE_3
+ if (TDA18271Write_C2(pObj,0x05,11) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait_C2(pObj,5) == False)
+ return TM_FALSE;
+
+ // launch detector
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 5 ms for wanted measurement
+ if (TDA18271Wait_C2(pObj,5) == False)
+ return TM_FALSE;
+
+ // CAL pll update
+ pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x87;
+ pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x65;
+ pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x50;
+
+ // write bytes EASY_PROG_BYTE_3 to CAL_DIV_BYTE_3
+ if (TDA18271Write_C2(pObj,0x05,7) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait_C2(pObj,5) == False)
+ return TM_FALSE;
+
+ // launch optimisation algorithm
+ // write byte EASY_PROG_BYTE_2
+ if (TDA18271Write_C2(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 30 ms for image optimization completion
+ if (TDA18271Wait_C2(pObj,30) == False)
+ return TM_FALSE;
+
+ //----------------------
+ // back to normal mode
+ //----------------------
+ // update & write byte EASY_PROG_BYTE_4
+ pObj->I2CMap.uBx06.EASY_PROG_BYTE_4 = 0x64;
+ if (TDA18271Write_C2(pObj,0x06,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // synchronization
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ //----------------------
+ // RF tracking filters calibration
+ //----------------------
+ ret = TDA18271CalcRFFilterCurve_C2(pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ //----------------------
+ // back to POR mode
+ //----------------------
+ // power up detector 1
+ pObj->I2CMap.uBx1B.bF.PD_AGC1_Det = 0x00;
+ // write byte EXTENDED_BYTE_12
+ if (TDA18271Write_C2(pObj,0x1B,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // turn AGC1 loop on
+ pObj->I2CMap.uBx21.bF.AGC1_loop_off = 0x00;
+ // set AGC1Gain = 6dB
+ pObj->I2CMap.uBx21.bF.AGC1_Gain = 0x00;
+ // write byte EXTENDED_BYTE_18
+ if (TDA18271Write_C2(pObj,0x21,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // set AGC2Gain = -6dB
+ pObj->I2CMap.uBx24.bF.AGC2_Gain = 0x03;
+
+ // swicth to POR mode
+ pObj->I2CMap.uBx05.bF.SM = 0x01;
+ pObj->I2CMap.uBx05.bF.SM_LT = 0x00;
+ pObj->I2CMap.uBx05.bF.SM_XT = 0x00;
+ // write byte EASY_PROG_BYTE_3
+ if (TDA18271Write_C2(pObj,0x5,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // disable 1.5MHz low pass filter
+ pObj->I2CMap.uBx26.bF.ForceLP_Fc2_En = 0x00;
+ pObj->I2CMap.uBx26.bF.LP_Fc = 0x00;
+
+ // write bytes EXTENDED_BYTE_21 to EXTENDED_BYTE_23
+ if (TDA18271Write_C2(pObj,0x24,3) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ return TM_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// FUNCTION: TDA18271InitTick_C2
+//
+// DESCRIPTION: this function will delay for the number of millisecond
+//
+// RETURN: nothing
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+Bool_
+TDA18271InitTick_C2(
+ ptmTDA18271Object_t_C2 pObj, // I: Tuner unit number
+ UInt16 wTime // I: time to wait for
+ )
+{
+ UInt32 uCurrentTick;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return False;
+
+ // get current tick
+ uCurrentTick = _SYSTEMFUNC.SY_GetTickTime();
+
+ // Calculate end tick
+ pObj->uTickEnd = (UInt32)wTime;
+ pObj->uTickEnd += _SYSTEMFUNC.SY_GetTickPeriod()/2;
+ pObj->uTickEnd /= _SYSTEMFUNC.SY_GetTickPeriod();
+ pObj->uTickEnd += uCurrentTick;
+
+ // always add 1 because of rounding issue
+ if (wTime)
+ pObj->uTickEnd++;
+
+ // test overflow
+ if (pObj->uTickEnd < uCurrentTick)
+ return False;
+ else
+ return True;
+}
+
+//-----------------------------------------------------------------------------
+// FUNCTION: TDA18271WaitTick_C2
+//
+// DESCRIPTION: this function will block for the number of millisecond
+//
+// RETURN: True if time has elapsed else False
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+Bool_
+TDA18271WaitTick_C2(
+ ptmTDA18271Object_t_C2 pObj // I: Tuner unit number
+ )
+{
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return False;
+
+ // test if time has elapsed
+ if (_SYSTEMFUNC.SY_GetTickTime() >= pObj->uTickEnd)
+ return True;
+ else
+ return False;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271Write_C2
+//
+// DESCRIPTION: This function writes I2C data in the Tuner
+//
+// RETURN: True or False
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271Write_C2(
+ ptmTDA18271Object_t_C2 pObj, // I: Tuner unit number
+ UInt8 uSubAddress,// I: sub address
+ UInt8 uNbData // I: nb of data
+ )
+{
+ Bool_ I2CCommResult = TM_FALSE;
+
+ UInt8 uCounter;
+ UInt8* pI2CMap;
+ UInt32 WriteBuffer[TDA18271_NB_BYTES_C2] = {0};
+ UInt32* pWriteBuffer;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return False;
+
+ // force I2CMap
+ pObj->I2CMap.uBx03.bF.Dis_Power_level = (UInt8)pObj->Config.uPLMODE;
+
+ // pI2CMap & pWriteBuffer initialization
+ pI2CMap = &(pObj->I2CMap.uBx00.ID_BYTE);
+ pWriteBuffer = &(WriteBuffer[0]);
+
+ // copy I2CMap data in WriteBuffer
+ for (uCounter = 0; uCounter < TDA18271_NB_BYTES_C2; uCounter++)
+ {
+ *pWriteBuffer = (UInt32)(*pI2CMap);
+ pWriteBuffer ++;
+ pI2CMap ++;
+ }
+
+ // write data in the Tuner
+ I2CCommResult = _SYSTEMFUNC.SY_Write_C2( pObj->uHwAddress,
+ uSubAddress,
+ uNbData,
+ &(WriteBuffer[uSubAddress]) );
+
+ // shift I2CLog content
+ TDA18271ShiftLog_C2 (pObj,1);
+
+ // copy written data in I2CLog [0]
+ for (uCounter = uSubAddress; uCounter < uSubAddress + uNbData; uCounter++)
+ pObj->I2CLog [0][uCounter] = WriteBuffer [uCounter];
+
+ // set additional values
+ pObj->I2CLog [0][TDA18271_NB_BYTES_C2] = pObj->uHwAddress;
+ pObj->I2CLog [0][TDA18271_NB_BYTES_C2 + 1] = I2CCommResult;
+
+ // return value
+ return I2CCommResult;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271Read_C2
+//
+// DESCRIPTION: This function reads I2C data from the Tuner
+//
+// RETURN: True or False
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271Read_C2(
+ ptmTDA18271Object_t_C2 pObj, // I: Tuner unit number
+ UInt8 uSubAddress,// I: sub address
+ UInt8 uNbData // I: nb of data
+ )
+{
+ Bool_ I2CCommResult = TM_FALSE;
+
+ UInt8 uCounter;
+ UInt8* pI2CMap;
+ UInt32 ReadBuffer[TDA18271_NB_BYTES_C2] = {0};
+ UInt32* pReadBuffer;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return False;
+
+ // pI2CMap & pReadBuffer initialization
+ pI2CMap = &(pObj->I2CMap.uBx00.ID_BYTE) + uSubAddress;
+ pReadBuffer = &(ReadBuffer[uSubAddress]);
+
+ // read data from the Tuner
+ I2CCommResult = _SYSTEMFUNC.SY_Read_C2( pObj->uHwAddress,
+ 0,
+ uSubAddress + uNbData,
+ &(ReadBuffer[0]));
+
+ // copy readen data in I2CMap
+ for (uCounter = 0; uCounter < uNbData; uCounter++)
+ {
+ *pI2CMap = (UInt8)(*pReadBuffer);
+ pI2CMap ++;
+ pReadBuffer ++;
+ }
+
+ // shift I2CLog content
+ TDA18271ShiftLog_C2 (pObj,1);
+
+ // copy readen data in I2CLog [0]
+ for (uCounter = uSubAddress; uCounter < uSubAddress + uNbData; uCounter++)
+ pObj->I2CLog [0][uCounter] = ReadBuffer [uCounter];
+
+ // set additional values
+ pObj->I2CLog [0][TDA18271_NB_BYTES_C2] = pObj->uHwAddress + 1;
+ pObj->I2CLog [0][TDA18271_NB_BYTES_C2 + 1] = I2CCommResult;
+
+ // return value
+ return I2CCommResult;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271Wait_C2
+//
+// DESCRIPTION: This function waits for requested time
+//
+// RETURN: True or False
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271Wait_C2(
+ ptmTDA18271Object_t_C2 pObj, // I: Tuner unit number
+ UInt16 wTime // I: time to wait for
+ )
+{
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return False;
+
+ User_delay( pObj->AFAInfo_C2.demodulator, wTime);
+ // Return value
+ return True;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271ShiftLog_C2
+//
+// DESCRIPTION: Shift I2CLog content of wanted lines
+//
+// RETURN: True
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271ShiftLog_C2(
+ ptmTDA18271Object_t_C2 pObj, // I: Tuner unit number
+ UInt32 uNbRows // I: nb of lines
+ )
+{
+ UInt32 uRow;
+ UInt8 uColumn;
+ UInt32 uCounter;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return False;
+
+ // Shift I2CLog content of wanted lines
+ for (uCounter = 0; uCounter < uNbRows; uCounter++)
+ {
+ for (uRow = TDA18271_LOG_NB_ROWS_C2 - 1; uRow > 0; uRow--)
+ {
+ for (uColumn = 0; uColumn < TDA18271_NB_BYTES_C2 + 2; uColumn++)
+ pObj->I2CLog [uRow][uColumn] = pObj->I2CLog [uRow - 1][uColumn];
+ }
+
+ for (uColumn = 0; uColumn < TDA18271_NB_BYTES_C2 + 2; uColumn++)
+ pObj->I2CLog [0][uColumn] = TDA18271_LOG_BLANK_DATA_C2;
+ }
+
+ // Return value
+ return True;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271CalcMAINPLL_C2:
+//
+// DESCRIPTION: Calculate the MAIN fractionnal PLL settings
+//
+// RETURN: True or False
+//
+// NOTES: This function doesn't write in the tuner
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271CalcMAINPLL_C2 (
+ ptmTDA18271Object_t_C2 pObj, // I: tuner Object
+ UInt32 uLO // I: local oscillator frequency in hertz
+ )
+{
+ UInt8 uCounter = 0;
+ UInt32 uDiv;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return False;
+
+ // search for MAIN_Post_Div corresponding to uLO
+ do uCounter ++;
+ while (uLO > pObj->Config.MAIN_PLL_Map[uCounter - 1].uLO_Max && uCounter < TDA18271_MAIN_PLL_NB_ROWS_C2);
+ pObj->I2CMap.uBx0C.bF.MAIN_Post_Div = ((UInt8)pObj->Config.MAIN_PLL_Map[uCounter - 1].uPost_Div) & 0x77;
+
+ // calculate MAIN_Div
+ uDiv = (((UInt32)(pObj->Config.MAIN_PLL_Map[uCounter - 1].uDiv) * (uLO / 1000)) << 7) / 125;
+ pObj->I2CMap.uBx0D.bF.MAIN_Div_22_to_16 = (UInt8)(uDiv >> 16) & 0x7F;
+ pObj->I2CMap.uBx0E.bF.MAIN_Div_15_to_8 = (UInt8)(uDiv >> 8);
+ pObj->I2CMap.uBx0F.bF.MAIN_Div_7_to_0 = (UInt8)(uDiv);
+
+ return True;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271CalcCALPLL_C2:
+//
+// DESCRIPTION: Calculate the CAL fractionnal PLL settings
+//
+// RETURN: True or False
+//
+// NOTES: This function doesn't write in the tuner
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271CalcCALPLL_C2 (
+ ptmTDA18271Object_t_C2 pObj, // I: tuner Object
+ UInt32 uLO // I: local oscillator frequency in hertz
+ )
+{
+ UInt8 uCounter = 0;
+ UInt32 uDiv;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return False;
+
+ // search for CAL_Post_Div corresponding to uLO
+ do uCounter ++;
+ while (uLO > pObj->Config.CAL_PLL_Map[uCounter - 1].uLO_Max && uCounter < TDA18271_CAL_PLL_NB_ROWS_C2);
+ pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = (UInt8)pObj->Config.CAL_PLL_Map[uCounter - 1].uPost_Div;
+
+ // calculate CAL_Div
+ uDiv = (((UInt32)(pObj->Config.CAL_PLL_Map[uCounter - 1].uDiv) * (uLO / 1000)) << 7) / 125;
+ pObj->I2CMap.uBx09.bF.CAL_Div_22_to_16 = (UInt8)(uDiv >> 16) & 0x7F;
+ pObj->I2CMap.uBx0A.bF.CAL_Div_15_to_8 = (UInt8)(uDiv >> 8);
+ pObj->I2CMap.uBx0B.bF.CAL_Div_7_to_0 = (UInt8)(uDiv);
+
+ return True;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271CalibrateRF_C2:
+//
+// DESCRIPTION: RF tracking filter calibration
+//
+// RETURN: TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271CalibrateRF_C2 (
+ ptmTDA18271Object_t_C2 pObj, // I: tuner Object
+ UInt32 uRF, // I: RF frequency in hertz
+ UInt8* puCprog // I: Address of the variable to output the Cprog value
+ )
+{
+ UInt32 uCounter = 0;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ //------------------------------
+ // initialization
+ //------------------------------
+ // set CAL_Mode to normal mode
+ pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
+ // write byte EASY_PROG_BYTE_4
+ if (TDA18271Write_C2(pObj,0x06,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // set AGC1Gain = 15dB
+ pObj->I2CMap.uBx21.bF.AGC1_Gain = 0x03;
+ // write byte EXTENDED_BYTE_18
+ if (TDA18271Write_C2(pObj,0x21,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // switch off AGC1
+ pObj->I2CMap.uBx05.bF.SM_LT = 0x01;
+
+ //------------------------------
+ // frequency dependent parameters update
+ //------------------------------
+ // search for BP_Filter corresponding to uRF
+ uCounter=0;
+ do uCounter ++;
+ while (uRF > pObj->Config.BP_FILTER_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_BP_FILTER_NB_ROWS_C2);
+ pObj->I2CMap.uBx03.bF.BP_Filter = (UInt8)pObj->Config.BP_FILTER_Map[uCounter - 1].uBP_Filter;
+
+ // search for Gain_Taper corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.GAIN_TAPER_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_GAIN_TAPER_NB_ROWS_C2);
+ pObj->I2CMap.uBx04.bF.Gain_Taper = (UInt8)pObj->Config.GAIN_TAPER_Map[uCounter - 1].uGain_Taper;
+
+ // search for RF_BAND corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.RF_BAND_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_BAND_NB_ROWS_C2);
+ pObj->I2CMap.uBx04.bF.RF_Band = (UInt8)pObj->Config.RF_BAND_Map[uCounter - 1].uRF_Band;
+
+ // search for K,M corresponding to uRF
+ uCounter=0;
+ do uCounter ++;
+ while (uRF > pObj->Config.RF_CAL_KMCO_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_KMCO_NB_ROWS_C2);
+ pObj->I2CMap.uBx1C.bF.RFC_K = (UInt8)pObj->Config.RF_CAL_KMCO_Map[uCounter - 1].uK;
+ pObj->I2CMap.uBx1C.bF.RFC_M = (UInt8)pObj->Config.RF_CAL_KMCO_Map[uCounter - 1].uM;
+
+ // write bytes EASY_PROG_BYTE_1 to EASY_PROG_BYTE_3
+ if (TDA18271Write_C2(pObj,0x03,3) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // write byte EXTENDED_BYTE_13
+ if (TDA18271Write_C2(pObj,0x1C,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // MAIN pll charge pump source
+ pObj->I2CMap.uBx13.bF.LO_ForceSrce = 0x01;
+ // write byte EXTENDED_BYTE_4
+ if (TDA18271Write_C2(pObj,0x13,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // CAL pll charge pump source
+ pObj->I2CMap.uBx16.bF.CAL_ForceSrce = 0x01;
+ // write byte EXTENDED_BYTE_7
+ if (TDA18271Write_C2(pObj,0x16,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // force DCDC converter to 0V
+ pObj->I2CMap.uBx1D.RFC_Cprog = 0x00;
+ // write byte EXTENDED_BYTE_14
+ if (TDA18271Write_C2(pObj,0x1D,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // disable plls lock
+ pObj->I2CMap.uBx23.bF.Force_Lock = 0x00;
+ // write byte EXTENDED_BYTE_20
+ if (TDA18271Write_C2(pObj,0x23,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // RF tracking filters calibration mode
+ pObj->I2CMap.uBx06.bF.CAL_Mode = 0x03;
+
+ // write bytes EASY_PROG_BYTE_4 & EASY_PROG_BYTE_5
+ if (TDA18271Write_C2(pObj,0x06,2) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ //------------------------------
+ // set internal calibration signals
+ //------------------------------
+ // calculate CAL PLL
+ // CAL LO Frequency = channel center frequency
+ if (TDA18271CalcCALPLL_C2(pObj, uRF) == False)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // calculate MAIN PLL
+ // MAIN LO Frequency = channel center frequency + 1MHz
+ if (TDA18271CalcMAINPLL_C2(pObj, uRF + RF_CAL_IF_FREQ_C2) == False)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // write bytes 0x05 to 0x0F
+ if (TDA18271Write_C2(pObj,0x05,11) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 5 ms for RF tracking filter calibration initialization
+ if (TDA18271Wait_C2(pObj,5) == False)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ //------------------------------
+ // internal synchronization
+ //------------------------------
+ // write byte EASY_PROG_BYTE_2
+ if (TDA18271Write_C2(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // write byte EASY_PROG_BYTE_2
+ if (TDA18271Write_C2(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ //------------------------------
+ // RF calibration launch
+ //------------------------------
+ // MAIN pll charge pump source
+ pObj->I2CMap.uBx13.bF.LO_ForceSrce = 0x00;
+ // write byte EXTENDED_BYTE_4
+ if (TDA18271Write_C2(pObj,0x13,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // CAL pll charge pump source
+ pObj->I2CMap.uBx16.bF.CAL_ForceSrce = 0x00;
+ // write byte EXTENDED_BYTE_7
+ if (TDA18271Write_C2(pObj,0x16,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 10 ms for pll locking
+ if (TDA18271Wait_C2(pObj,10) == False)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // launch the RF tracking filters calibartion
+ pObj->I2CMap.uBx23.bF.Force_Lock = 0x01;
+ // write byte EXTENDED_BYTE_20
+ if (TDA18271Write_C2(pObj,0x23,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 60 ms for calibration
+ if (TDA18271Wait_C2(pObj,60) == False)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // normal mode
+ pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
+
+ // set AGC1Gain = 6dB
+ pObj->I2CMap.uBx21.bF.AGC1_Gain = 0x00;
+ // write byte EXTENDED_BYTE_18
+ if (TDA18271Write_C2(pObj,0x21,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // switch on AGC1
+ pObj->I2CMap.uBx05.bF.SM_LT = 0x00;
+
+ // write bytes EASY_PROG_BYTE_3 & EASY_PROG_BYTE_4
+ if (TDA18271Write_C2(pObj,0x05,2) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // read bytes 0x00 to 0x26
+ if (TDA18271Read_C2 (pObj,0x00,39) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // update puCprog
+ *puCprog = pObj->I2CMap.uBx1D.RFC_Cprog;
+
+ // return value
+ return TM_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271PowerScanInit_C2:
+//
+// DESCRIPTION: Initializes power scan
+//
+// RETURN: TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271PowerScanInit_C2 (
+ ptmTDA18271Object_t_C2 pObj // I: Tuner unit number
+ )
+{
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ // set standard mode to DVBT 1.5 MHz
+ pObj->I2CMap.uBx05.bF.Std = 0x12;
+ pObj->I2CMap.uBx06.bF.IF_Level = 0x00;
+ pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
+ // write bytes EASY_PROG_BYTE_3 & EASY_PROG_BYTE_4
+ if (TDA18271Write_C2(pObj,0x05,2) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // set AGC1Gain = 6dB
+ pObj->I2CMap.uBx21.bF.AGC1_Gain = 0x00;
+ // write byte EXTENDED_BYTE_18
+ if (TDA18271Write_C2(pObj,0x21,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // set AGC2Gain = -15dB
+ pObj->I2CMap.uBx24.bF.AGC2_Gain = 0x00;
+ // set low pass filter to 1.5MHz
+ pObj->I2CMap.uBx26.bF.ForceLP_Fc2_En = 0x01;
+ pObj->I2CMap.uBx26.bF.LP_Fc = 0x01;
+ // write byte EXTENDED_BYTE_21 to EXTENDED_BYTE_23
+ if (TDA18271Write_C2(pObj,0x24,3) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // return value
+ return TM_OK;
+}
+
+#define POWER_SCAN_FREQ_STEP 200000
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271PowerScan_C2:
+//
+// DESCRIPTION: Scan power and adjust RF Frequency
+//
+// RETURN: TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271PowerScan_C2 (
+ ptmTDA18271Object_t_C2 pObj, // I: Tuner unit number
+ UInt32* puRF, // I/O: RF frequency in hertz
+ Bool_* pCal // O: Calibration allowed if pCal = True
+ )
+{
+ UInt32 uCounter = 0;
+ UInt32 count_limit = 0;
+ UInt32 freq_input = 0;
+ UInt32 freq_MAINPLL = 0;
+ UInt32 step = 0;
+
+ UInt8 CID_Gain = 0;
+ UInt8 CID_Target = 0;
+
+ Int8 sgn = 0;
+
+ Bool_ wait = False;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ // set freq_input
+ freq_input = *puRF;
+
+ // search for count_limit corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (freq_input > pObj->Config.RF_CAL_CID_TARGET_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_CID_TARGET_NB_ROWS_C2);
+ count_limit = pObj->Config.RF_CAL_CID_TARGET_Map[uCounter - 1].uCount_Limit;
+
+ // check if powerscan is requested
+ if (count_limit == 0)
+ {
+ // enable calibration and exit
+ *pCal = True;
+ return TM_OK;
+ }
+
+ // search for CID_Target corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (freq_input > pObj->Config.RF_CAL_CID_TARGET_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_CID_TARGET_NB_ROWS_C2);
+ CID_Target = (UInt8)pObj->Config.RF_CAL_CID_TARGET_Map[uCounter - 1].uCID_Target;
+
+ // search for sub-band corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (freq_input > pObj->Config.RF_BAND_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_BAND_NB_ROWS_C2);
+ pObj->I2CMap.uBx04.bF.RF_Band = (UInt8)pObj->Config.RF_BAND_Map[uCounter - 1].uRF_Band;
+
+ // search for Cprog corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (freq_input > pObj->Config.RF_CAL_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_NB_ROWS_C2);
+ pObj->I2CMap.uBx1D.RFC_Cprog = (UInt8)pObj->Config.RF_CAL_Map[uCounter - 1].uRFC_Cprog;
+
+ // search for Gain_Taper corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (freq_input > pObj->Config.GAIN_TAPER_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_GAIN_TAPER_NB_ROWS_C2);
+ pObj->I2CMap.uBx04.bF.Gain_Taper = (UInt8)pObj->Config.GAIN_TAPER_Map[uCounter - 1].uGain_Taper;
+
+ // write byte EASY_PROG_BYTE_2
+ if (TDA18271Write_C2(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // write byte EXTENDED_BYTE_14
+ if (TDA18271Write_C2(pObj,0x1D,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // set freq_MAINPLL
+ freq_MAINPLL = freq_input + RF_CAL_IF_FREQ_C2;
+
+ // calculate MAIN PLL
+ if (TDA18271CalcMAINPLL_C2(pObj, freq_MAINPLL) == False)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // write bytes 0x0C to 0x0F
+ if (TDA18271Write_C2(pObj,0x0C,4) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait_C2(pObj,5) == False)
+ return TM_FALSE;
+
+ // launch power detection measurement
+ pObj->I2CMap.uBx06.bF.CAL_Mode = 0x01;
+
+ // write byte EASY_PROG_BYTE_4
+ if (TDA18271Write_C2(pObj,0x06,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // write byte EASY_PROG_BYTE_2
+ if (TDA18271Write_C2(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // read power detector informations
+ if (TDA18271Read_C2 (pObj,0x00,39) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ //update CID_Gain
+ CID_Gain = pObj->I2CMap.uBx19.bF.CID_Gain;
+
+ //----------------------
+ // power scan algorithm
+ //----------------------
+ // initialization
+ uCounter = 0;
+ sgn = 1;
+ *puRF = freq_input;
+ *pCal = False;
+ step = POWER_SCAN_FREQ_STEP;
+ wait = False;
+
+ // main loop
+ while (CID_Gain < CID_Target)
+ {
+ // update freq_MAINPLL
+ freq_MAINPLL = freq_input + sgn * uCounter + RF_CAL_IF_FREQ_C2;
+
+ // calculate MAIN PLL
+ if (TDA18271CalcMAINPLL_C2(pObj, freq_MAINPLL) == False)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // write bytes 0x0C to 0x0F
+ if (TDA18271Write_C2(pObj,0x0C,4) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ if (wait)
+ {
+ // wait 5 ms for pll locking
+ if (TDA18271Wait_C2(pObj,5) == False)
+ return TM_FALSE;
+
+ // reset wait flag
+ wait = False;
+ }
+ else
+ {
+ // wait 100 �s for pll locking
+ }
+
+ // write byte EASY_PROG_BYTE_2
+ if (TDA18271Write_C2(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // read power detector informations
+ if (TDA18271Read_C2 (pObj,0x00,39) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // update CID_Gain
+ CID_Gain = pObj->I2CMap.uBx19.bF.CID_Gain;
+
+ // increase count
+ uCounter += step;
+
+ // check uCounter
+ if (uCounter >= count_limit)
+ {
+ if (sgn > 0)
+ {
+ // update sgn
+ sgn = -sgn;
+
+ // update uCounter
+ uCounter = step;
+
+ // update wait flag
+ wait = True;
+ }
+ else
+ {
+ // exit loop
+ break;
+ }
+ }
+ }
+
+ // return results
+ if (CID_Gain >= CID_Target)
+ {
+ *pCal = True;
+ *puRF = freq_MAINPLL - RF_CAL_IF_FREQ_C2;
+ }
+ else
+ {
+ *pCal = False;
+ *puRF = freq_input;
+ }
+
+ return TM_OK;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271CalcRFFilterCurve_C2:
+//
+// DESCRIPTION: Calculate RF Filter curve coefficients
+//
+// RETURN: TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271CalcRFFilterCurve_C2 (
+ ptmTDA18271Object_t_C2 pObj // I: tuner Object
+ )
+{
+ tmErrorCode_t ret = TM_OK;
+ UInt32 uCounter = 0;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ // wait 200 ms for die temperature stabilization
+ if (TDA18271Wait_C2(pObj,200) == False)
+ return TM_FALSE;
+
+ // power scan initialization
+ TDA18271PowerScanInit_C2(pObj);
+
+ // calculate RF filter curve
+ for (uCounter = 0; uCounter < TDA18271_RF_BAND_NB_ROWS_C2; uCounter++)
+ {
+ if (pObj->Config.RF_BAND_Map[uCounter].uRF1_default != 0)
+ {
+ ret = TDA18271RFTrackingFiltersInit_C2(pObj, &(pObj->Config.RF_BAND_Map[uCounter]));
+ if (ret != TM_OK)
+ return ret;
+ }
+ }
+
+ // sense temperature
+ ret = TDA18271ThermometerRead_C2(pObj, &(pObj->Config.uTMVALUE_RFCAL));
+ if (ret != TM_OK)
+ return ret;
+
+ // return value
+ return TM_OK;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271RFTrackingFiltersInit_C2:
+//
+// DESCRIPTION: Initialize RF Filter calibration
+//
+// RETURN: TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271RFTrackingFiltersInit_C2 (
+ ptmTDA18271Object_t_C2 pObj, // I: tuner Object
+ ptmTDA18271_RF_BAND_Map_t_C2 pRF_BAND_Map // I: address of RF band map
+ )
+{
+ tmErrorCode_t ret = TM_OK;
+
+ UInt32 uCounter = 0;
+
+ UInt8 uCprog_cal_1 = 0;
+ UInt8 uCprog_table_1 = 0;
+ UInt8 uCprog_cal_2 = 0;
+ UInt8 uCprog_table_2 = 0;
+ UInt8 uCprog_cal_3 = 0;
+ UInt8 uCprog_table_3 = 0;
+
+ Bool_ bCal = False;
+
+ tmTDA18271StandardMode_t_C2 StandardMode = pObj->StandardMode;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ //----------------------
+ // RF tracking filter calibration at RF1 frequency
+ //----------------------
+ // test uRF1_default value
+ if (pRF_BAND_Map->uRF1_default == 0)
+ return ret;
+
+ // look for optimized calibration frequency
+ pRF_BAND_Map->uRF1 = pRF_BAND_Map->uRF1_default;
+ ret = TDA18271PowerScan_C2(pObj, &pRF_BAND_Map->uRF1, &bCal);
+ if (ret != TM_OK)
+ return ret;
+
+ // search for uCprog_table_1 corresponding to RF1
+ uCounter = 0;
+ do uCounter ++;
+ while (pRF_BAND_Map->uRF1 > pObj->Config.RF_CAL_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_NB_ROWS_C2);
+ uCprog_table_1 = (UInt8)pObj->Config.RF_CAL_Map[uCounter - 1].uRFC_Cprog;
+
+ if(bCal)
+ {
+ // launch tracking filter calibration
+ ret = TDA18271CalibrateRF_C2(pObj, pRF_BAND_Map->uRF1, &uCprog_cal_1);
+ if (ret != TM_OK)
+ return ret;
+ }
+ else
+ {
+ // use tracking filter table value
+ uCprog_cal_1 = uCprog_table_1;
+ }
+
+ // set A1 coefficient
+ pRF_BAND_Map->uRF_A1 = 0;
+
+ // calculate B1 coefficient
+ pRF_BAND_Map->uRF_B1 = uCprog_cal_1 - uCprog_table_1;
+
+ //----------------------
+ // RF tracking filter calibration at RF2 frequency
+ //----------------------
+ // test RF2 value
+ if (pRF_BAND_Map->uRF2_default == 0)
+ return ret;
+
+ // look for optimized calibration frequency
+ pRF_BAND_Map->uRF2 = pRF_BAND_Map->uRF2_default;
+ ret = TDA18271PowerScan_C2(pObj, &pRF_BAND_Map->uRF2, &bCal);
+ if (ret != TM_OK)
+ return ret;
+
+ // search for uCprog_table_2 corresponding to RF2
+ uCounter = 0;
+ do uCounter ++;
+ while (pRF_BAND_Map->uRF2 > pObj->Config.RF_CAL_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_NB_ROWS_C2);
+ uCprog_table_2 = (UInt8)pObj->Config.RF_CAL_Map[uCounter - 1].uRFC_Cprog;
+
+ if(bCal)
+ {
+ // launch tracking filter calibration
+ ret = TDA18271CalibrateRF_C2(pObj, pRF_BAND_Map->uRF2, &uCprog_cal_2);
+ if (ret != TM_OK)
+ return ret;
+ }
+ else
+ {
+ // use tracking filter table value
+ uCprog_cal_2 = uCprog_table_2;
+ }
+
+ // calculate A1 coefficient
+ pRF_BAND_Map->uRF_A1 = ((uCprog_cal_2 - uCprog_table_2 - (uCprog_cal_1 - uCprog_table_1)) * 1000000)
+ / (Int32)((pRF_BAND_Map->uRF2 - pRF_BAND_Map->uRF1) / 1000000);
+
+ //----------------------
+ // RF tracking filter calibration at RF3 frequency
+ //----------------------
+ // test RF3 value
+ if (pRF_BAND_Map->uRF3_default == 0)
+ return ret;
+
+ // look for optimized calibration frequency
+ pRF_BAND_Map->uRF3 = pRF_BAND_Map->uRF3_default;
+ ret = TDA18271PowerScan_C2(pObj, &pRF_BAND_Map->uRF3, &bCal);
+ if (ret != TM_OK)
+ return ret;
+
+ // search for uCprog_table_3 corresponding to RF3
+ uCounter = 0;
+ do uCounter ++;
+ while (pRF_BAND_Map->uRF3 > pObj->Config.RF_CAL_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_NB_ROWS_C2);
+ uCprog_table_3 = (UInt8)pObj->Config.RF_CAL_Map[uCounter - 1].uRFC_Cprog;
+
+ if(bCal)
+ {
+ // launch tracking filter calibration
+ ret = TDA18271CalibrateRF_C2(pObj, pRF_BAND_Map->uRF3, &uCprog_cal_3);
+ if (ret != TM_OK)
+ return ret;
+ }
+ else
+ {
+ // use tracking filter table value
+ uCprog_cal_3 = uCprog_table_3;
+ }
+
+ // calculate A2 coefficient
+ pRF_BAND_Map->uRF_A2 = ((uCprog_cal_3 - uCprog_table_3 - (uCprog_cal_2 - uCprog_table_2)) * 1000000)
+ / (Int32)((pRF_BAND_Map->uRF3 - pRF_BAND_Map->uRF2) / 1000000);
+
+ // calculate B2 coefficient
+ pRF_BAND_Map->uRF_B2 = uCprog_cal_2 - uCprog_table_2;
+
+ // return value
+ return TM_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271ThermometerRead_C2:
+//
+// DESCRIPTION: Read die temperature
+//
+// RETURN: TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271ThermometerRead_C2 (
+ ptmTDA18271Object_t_C2 pObj, // I: Tuner unit number
+ UInt32* puValue // O: Read thermometer value
+ )
+{
+ tmErrorCode_t ret = TMBSL_ERR_IIC_ERR_C2;
+
+ UInt32 uCounter = 0;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2;
+
+ // switch thermometer on
+ pObj->I2CMap.uBx01.bF.TM_ON = 0x01;
+
+ // write byte THERMO_BYTE
+ if (TDA18271Write_C2(pObj,0x01,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // read byte THERMO_BYTE
+ if (TDA18271Read_C2 (pObj, 0x00, 16) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // set & write TM_Range
+ if (((pObj->I2CMap.uBx01.bF.TM_D == 0x00) && (pObj->I2CMap.uBx01.bF.TM_Range == 0x01)) || ((pObj->I2CMap.uBx01.bF.TM_D == 0x08) && (pObj->I2CMap.uBx01.bF.TM_Range == 0x00)))
+ {
+ pObj->I2CMap.uBx01.bF.TM_Range = !(pObj->I2CMap.uBx01.bF.TM_Range);
+
+ // write byte THERMO_BYTE
+ if (TDA18271Write_C2(pObj,0x01,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ // wait 10ms
+ if (TDA18271Wait_C2(pObj,10) == False)
+ return TM_FALSE;
+
+ // read byte THERMO_BYTE
+ if (TDA18271Read_C2 (pObj, 0x00, 16) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+ }
+
+ // search for TMVALUE corresponding to TM_D
+ uCounter = 0;
+ do uCounter ++;
+ while (pObj->I2CMap.uBx01.bF.TM_D > pObj->Config.THERMOMETER_Map[uCounter - 1].uTM_D && uCounter < TDA18271_THERMOMETER_NB_ROWS_C2);
+
+ // get TMVALUE value
+ if (pObj->I2CMap.uBx01.bF.TM_Range == 0x00)
+ *puValue = (UInt8)pObj->Config.THERMOMETER_Map[uCounter - 1].uTM_60_92;
+ else
+ *puValue = (UInt8)pObj->Config.THERMOMETER_Map[uCounter - 1].uTM_92_122;
+
+ // switch thermometer off
+ pObj->I2CMap.uBx01.bF.TM_ON = 0x00;
+
+ // write byte THERMO_BYTE
+ if (TDA18271Write_C2(pObj,0x01,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2;
+
+ return TM_OK;
+} \ No newline at end of file
diff --git a/api/TDA18271_C2.h b/api/TDA18271_C2.h
new file mode 100644
index 0000000..1a532ab
--- /dev/null
+++ b/api/TDA18271_C2.h
@@ -0,0 +1,177 @@
+//-----------------------------------------------------------------------------
+// $Header:
+// (C) Copyright 2001 NXP Semiconductors, All rights reserved
+//
+// This source code and any compilation or derivative thereof is the sole
+// property of NXP Corporation and is provided pursuant to a Software
+// License Agreement. This code is the proprietary information of NXP
+// Corporation and is confidential in nature. Its use and dissemination by
+// any party other than NXP Corporation is strictly limited by the
+// confidential information provisions of the Agreement referenced above.
+//-----------------------------------------------------------------------------
+// FILE NAME: tmbslTDA18271_C2.h
+//
+// DESCRIPTION: define the object for the TDA18271_C2
+//
+// DOCUMENT REF: DVP Software Coding Guidelines v1.14
+// DVP Board Support Library Architecture Specification v0.5
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+#ifndef _TMBSL_TDA18271_C2_H //-----------------
+#define _TMBSL_TDA18271_C2_H
+
+//-----------------------------------------------------------------------------
+// Standard include files:
+//-----------------------------------------------------------------------------
+//
+
+//-----------------------------------------------------------------------------
+// Project include files:
+//-----------------------------------------------------------------------------
+//
+//#ifndef NXPFE
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+//#endif // NXPFE
+
+//-----------------------------------------------------------------------------
+// Types and defines:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271Init_C2 (
+ tmUnitSelect_t TunerUnit // I: Tuner Object
+ );
+Bool_
+TDA18271InitTick_C2(
+ ptmTDA18271Object_t_C2 pObj, // I: Tuner unit number
+ UInt16 wTime // I: time to wait forTDA18271Init
+ );
+Bool_
+TDA18271WaitTick_C2(
+ ptmTDA18271Object_t_C2 pObj // I: Tuner unit number
+ );
+Bool_
+TDA18271Write_C2(
+ ptmTDA18271Object_t_C2 pObj, // I: Tuner unit number
+ UInt8 uSubAddress,// I: sub address
+ UInt8 uNbData // I: nb of data
+ );
+Bool_
+TDA18271Read_C2(
+ ptmTDA18271Object_t_C2 pObj, // I: Tuner unit number
+ UInt8 uSubAddress,// I: sub address
+ UInt8 uNbData // I: nb of data
+ );
+Bool_
+TDA18271Wait_C2(
+ ptmTDA18271Object_t_C2 pObj, // I: Tuner unit number
+ UInt16 wTime // I: time to wait for
+ );
+Bool_
+TDA18271ShiftLog_C2(
+ ptmTDA18271Object_t_C2 pObj, // I: Tuner unit number
+ UInt32 uNbRows // I: nb of lines
+ );
+tmErrorCode_t
+TDA18271SetStandardMode_C2(
+ ptmTDA18271Object_t_C2 pObj, // I: tuner Object
+ tmTDA18271StandardMode_t_C2 StandardMode// I: Standard mode of this device
+ );
+tmErrorCode_t
+TDA18271GetStandardMode_C2(
+ ptmTDA18271Object_t_C2 pObj, // I: tuner Object
+ tmTDA18271StandardMode_t_C2 *pStandardMode // I: Standard mode of this device
+ );
+tmErrorCode_t
+TDA18271SetPowerState_C2(
+ ptmTDA18271Object_t_C2 pObj, // I: tuner Object
+ tmTDA18271PowerState_t_C2 powerState // I: Power state of this device
+ );
+tmErrorCode_t
+TDA18271GetPowerState_C2(
+ ptmTDA18271Object_t_C2 pObj, // I: tuner Object
+ tmTDA18271PowerState_t_C2 *pPowerState// I: Power state of this device
+ );
+Bool_
+TDA18271CalcMAINPLL_C2 (
+ ptmTDA18271Object_t_C2 pObj, // I: tuner Object
+ UInt32 uLO // I: local oscillator frequency in hertz
+ );
+Bool_
+TDA18271CalcCALPLL_C2 (
+ ptmTDA18271Object_t_C2 pObj, // I: tuner Object
+ UInt32 uLO // I: local oscillator frequency in hertz
+ );
+tmErrorCode_t
+TDA18271CalcRFFilterCurve_C2 (
+ ptmTDA18271Object_t_C2 pObj // I: tuner Object
+ );
+tmErrorCode_t
+TDA18271RFTrackingFiltersInit_C2 (
+ ptmTDA18271Object_t_C2 pObj, // I: tuner Object
+ ptmTDA18271_RF_BAND_Map_t_C2 pRF_BAND_Map // I: address of RF band map
+ );
+tmErrorCode_t
+TDA18271CalibrateRF_C2 (
+ ptmTDA18271Object_t_C2 pObj, // I: tuner Object
+ UInt32 uRF, // I: RF frequency in hertz
+ UInt8* puCprog // I: Address of the variable to output the Cprog value
+ );
+tmErrorCode_t
+TDA18271PowerScan_C2 (
+ ptmTDA18271Object_t_C2 pObj, // I: Tuner unit number
+ UInt32* puRF, // I/O: RF frequency in hertz
+ Bool_* pCal // O: Calibration allowed if pCal = True
+ );
+tmErrorCode_t
+TDA18271PowerScanInit_C2 (
+ ptmTDA18271Object_t_C2 pObj // I: Tuner unit number
+ );
+tmErrorCode_t
+TDA18271ThermometerRead_C2 (
+ ptmTDA18271Object_t_C2 pObj, // I: Tuner unit number
+ UInt32* puValue // O: Read thermometer value
+ );
+tmErrorCode_t
+allocInstance_C2 (
+ UInt32 DeviceUnit, // I: Tuner unit number
+ pptmTDA18271Object_t_C2 ppDrvObject // I: Tuner Object
+ );
+tmErrorCode_t
+deAllocInstance_C2 (
+ UInt32 DeviceUnit // I: Tuner unit number
+ );
+tmErrorCode_t
+getInstance_C2 (
+ tmUnitSelect_t DeviceUnit, // I: Tuner unit number
+ pptmTDA18271Object_t_C2 ppDrvObject // I: Tuner Object
+ );
+tmErrorCode_t
+ tmbslTDA18271Init_C2(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmbslTuParam_t_C2 Param // I: setup parameters
+ );
+tmErrorCode_t
+ tmbslTDA18271SetConfig_C2(
+ tmUnitSelect_t TunerUnit, // I: TunerUnit number
+ UInt32 uItemId, // I: Identifier of the item to modify
+ UInt32 uValue // I: Value to set for the config item
+ );
+tmErrorCode_t
+ tmbslTDA18271SetRf_C2(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32 uRF // I: RF frequency in hertz
+ );
+
+//#ifndef NXPFE
+#ifdef __cplusplus
+}
+#endif
+//#endif // NXPFE
+
+#endif // TM<MODULE>_H //---------------
diff --git a/api/TDA18271_C2_Askey.c b/api/TDA18271_C2_Askey.c
new file mode 100644
index 0000000..e299158
--- /dev/null
+++ b/api/TDA18271_C2_Askey.c
@@ -0,0 +1,3637 @@
+//-----------------------------------------------------------------------------
+// $Header:
+// (C) Copyright 2001 NXP Semiconductors, All rights reserved
+//
+// This source code and any compilation or derivative thereof is the sole
+// property of NXP Corporation and is provided pursuant to a Software
+// License Agreement. This code is the proprietary information of NXP
+// Corporation and is confidential in nature. Its use and dissemination by
+// any party other than NXP Corporation is strictly limited by the
+// confidential information provisions of the Agreement referenced above.
+//-----------------------------------------------------------------------------
+// FILE NAME: tmbslTDA18271_C2_Askey.c
+//
+// DESCRIPTION: Function for the Hybrid silicon tuner TDA18271
+//
+// DOCUMENT REF:
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+
+//-----------------------------------------------------------------------------
+// Standard include files:
+//-----------------------------------------------------------------------------
+//
+
+//-----------------------------------------------------------------------------
+// Project include files:
+//-----------------------------------------------------------------------------
+//
+#include "TDA18271local_C2_Askey.h"
+#include "TDA18271_C2_Askey.h"
+#include "TDA18271StaticInstance_C2_Askey.h"
+#include "standard.h"
+
+//-----------------------------------------------------------------------------
+// Types and defines:
+//-----------------------------------------------------------------------------
+//
+#define FEQ_OFFSET 0
+
+//-----------------------------------------------------------------------------
+// Global data:
+//-----------------------------------------------------------------------------
+//
+
+//-----------------------------------------------------------------------------
+// Internal Prototypes:
+//-----------------------------------------------------------------------------
+//
+Bool_ SY_Write_C2_Askey(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff)
+{
+ Bool_ RetStatus = False;
+ ptmTDA18271Object_t_C2_Askey pObj;
+ UInt32 dwError = 0;
+ UInt8 uBuffer[39];
+ UInt32 i;
+
+ for (i = 0; i < uNbData; i++)
+ {
+ uBuffer[i] = (UInt8)pDataBuff[i];
+ }
+
+ pObj = &gTDA18271Instance_C2_Askey[0];
+
+ dwError = Standard_writeTunerRegisters (pObj->AFAInfo_C2_Askey.demodulator, pObj->AFAInfo_C2_Askey.chip,
+ (unsigned short)uSubAddress, (UInt8)uNbData, uBuffer);
+
+ if (dwError == 0) RetStatus = True;
+
+ return (RetStatus);
+};
+
+Bool_ SY_Read_C2_Askey(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff)
+{
+ Bool_ RetStatus = False;
+ ptmTDA18271Object_t_C2_Askey pObj;
+ UInt32 dwError = 0;
+ UInt8 uBuffer[39];
+ UInt32 i;
+
+ pObj = &gTDA18271Instance_C2_Askey[0];
+
+ dwError = Standard_readTunerRegisters (pObj->AFAInfo_C2_Askey.demodulator, pObj->AFAInfo_C2_Askey.chip, (UInt16)uSubAddress, (UInt8)uNbData, uBuffer);
+
+ if (dwError == 0)
+ {
+ RetStatus = True;
+
+ for (i = 0; i < uNbData; i++)
+ {
+ pDataBuff[i] = (UInt32)uBuffer[i];
+ }
+ }
+
+ return (RetStatus);
+};
+
+
+Bool_ SY_Write_Slave_C2_Askey(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff)
+{
+ Bool_ RetStatus = False;
+ ptmTDA18271Object_t_C2_Askey pObj;
+ UInt32 dwError = 0;
+ UInt8 uBuffer[39];
+ UInt32 i;
+
+ for (i = 0; i < uNbData; i++)
+ {
+ uBuffer[i] = (UInt8)pDataBuff[i];
+ }
+
+ pObj = &gTDA18271Instance_C2_Askey[1];
+
+ dwError = Standard_writeTunerRegisters (pObj->AFAInfo_C2_Askey.demodulator, pObj->AFAInfo_C2_Askey.chip,
+ (unsigned short)uSubAddress, (UInt8)uNbData, uBuffer);
+
+ if (dwError == 0) RetStatus = True;
+
+ return (RetStatus);
+};
+
+Bool_ SY_Read_Slave_C2_Askey(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff)
+{
+ Bool_ RetStatus = False;
+ ptmTDA18271Object_t_C2_Askey pObj;
+ UInt32 dwError = 0;
+ UInt8 uBuffer[39];
+ UInt32 i;
+
+ pObj = &gTDA18271Instance_C2_Askey[1];
+
+ dwError = Standard_readTunerRegisters (pObj->AFAInfo_C2_Askey.demodulator, pObj->AFAInfo_C2_Askey.chip, (UInt16)uSubAddress, (UInt8)uNbData, uBuffer);
+
+ if (dwError == 0)
+ {
+ RetStatus = True;
+
+ for (i = 0; i < uNbData; i++)
+ {
+ pDataBuff[i] = (UInt32)uBuffer[i];
+ }
+ }
+
+ return (RetStatus);
+};
+//-----------------------------------------------------------------------------
+// Exported functions:
+//-----------------------------------------------------------------------------
+//
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271Init:
+//
+// DESCRIPTION: create an instance of a TDA18271_C2_Askey Tuner
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TM_OK
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271Init_C2_Askey
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmbslTuParam_t_C2_Askey Param // I: setup parameters
+ )
+{
+ ptmTDA18271Object_t_C2_Askey pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the max number
+ if (TunerUnit > TDA18271_MAX_UNITS_C2_Askey)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2_Askey;
+
+ //----------------------
+ // initialize the Object
+ //----------------------
+ // pObj initialization
+ getInstance_C2_Askey(TunerUnit, &pObj);
+
+ // return if already initialized
+ if (pObj != Null && pObj->init == True)
+ return TM_OK;
+
+ //----------------
+ // init the Object
+ //----------------
+ // initialize the Object
+// if (pObj == Null)
+// {
+ ret = allocInstance_C2_Askey(TunerUnit, &pObj);
+ if (ret != TM_OK || pObj == Null)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ // initialize the Object by default values
+ pObj->SystemFunc = Param.systemFunc;
+ pObj->uHwAddress = Param.uHwAddress;
+ pObj->init = True;
+// }
+
+ return TM_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271DeInit:
+//
+// DESCRIPTION: destroy an instance of a TDA18271 Tuner
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271DeInit_C2_Askey
+(
+ tmUnitSelect_t TunerUnit // I: Tuner unit number
+ )
+{
+ ptmTDA18271Object_t_C2_Askey pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS_C2_Askey)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2_Askey;
+
+ //----------------------
+ // De-initialize the Object
+ //----------------------
+ // pObj initialization
+ getInstance_C2_Askey(TunerUnit, &pObj);
+
+ // return if already initialized
+ if (pObj == Null || pObj->init == False)
+ return TM_OK;
+
+ //----------------
+ // Deinit the Object
+ //----------------
+ // initialize the Object
+ if (pObj != Null)
+ {
+ pObj->init = False;
+ ret = deAllocInstance_C2_Askey(TunerUnit);
+ }
+
+ return ret;
+}
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271GetSWVersion:
+//
+// DESCRIPTION: Return the version of this device
+//
+// RETURN: TM_OK
+//
+// NOTES: Values defined in the tmTDA18271Local.h file
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271GetSWVersion_C2_Askey
+(
+ ptmSWVersion_t_C2_Askey pSWVersion // I: Receives SW Version
+ )
+{
+ pSWVersion->compatibilityNr = TDA18271_BSL_COMP_NUM_C2_Askey;
+ pSWVersion->majorVersionNr = TDA18271_BSL_MAJOR_VER_C2_Askey;
+ pSWVersion->minorVersionNr = TDA18271_BSL_MINOR_VER_C2_Askey;
+
+ return TM_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271SetPowerState_C2_Askey:
+//
+// DESCRIPTION: Set the power state of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271SetPowerState_C2_Askey
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmTDA18271PowerState_t_C2_Askey powerState_C2_Askey // I: Power state of this device
+ )
+{
+ ptmTDA18271Object_t_C2_Askey pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the max number
+ if (TunerUnit > TDA18271_MAX_UNITS_C2_Askey)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2_Askey;
+
+ // pObj initialization
+ ret = getInstance_C2_Askey(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ // set power state
+ return TDA18271SetPowerState_C2_Askey(pObj, powerState_C2_Askey);
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271SetPowerState_C2_Askey:
+//
+// DESCRIPTION: Set the power state of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271SetPowerState_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj, // I: tuner Object
+ tmTDA18271PowerState_t_C2_Askey powerState // I: Power state of this device
+ )
+{
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ switch (powerState)
+ {
+ case tmPowerNormalMode_C2_Askey:
+ // set SM bits
+ pObj->I2CMap.uBx05.bF.SM = 0x00;
+ pObj->I2CMap.uBx05.bF.SM_LT = 0x00;
+ pObj->I2CMap.uBx05.bF.SM_XT = 0x00;
+ break;
+
+ case tmPowerSleepMode_C2_Askey:
+ // set SM bits
+ pObj->I2CMap.uBx05.bF.SM = 0x01;
+ pObj->I2CMap.uBx05.bF.SM_LT = 0x01;
+ pObj->I2CMap.uBx05.bF.SM_XT = 0x01;
+ break;
+
+ case tmPowerStandbyWith16MHz_C2_Askey:
+ // set SM bits
+ pObj->I2CMap.uBx05.bF.SM = 0x01;
+ pObj->I2CMap.uBx05.bF.SM_LT = 0x01;
+ pObj->I2CMap.uBx05.bF.SM_XT = 0x00;
+ break;
+
+ case tmPowerStandbyWith16MHzAndLoopThrough_C2_Askey:
+ // set SM bits
+ pObj->I2CMap.uBx05.bF.SM = 0x01;
+ pObj->I2CMap.uBx05.bF.SM_LT = 0x00;
+ pObj->I2CMap.uBx05.bF.SM_XT = 0x00;
+ break;
+
+ case tmPowerStandbyWithLoopThrough_C2_Askey:
+ // set SM bits
+ pObj->I2CMap.uBx05.bF.SM = 0x01;
+ pObj->I2CMap.uBx05.bF.SM_LT = 0x00;
+ pObj->I2CMap.uBx05.bF.SM_XT = 0x01;
+ break;
+
+ default:
+ // power state not supported
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ }
+
+ // store powerstate
+ pObj->curPowerState = powerState;
+
+ return TM_OK;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271GetPowerState_C2_Askey:
+//
+// DESCRIPTION: Get the power state of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271GetPowerState_C2_Askey
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmTDA18271PowerState_t_C2_Askey *pPowerState_C2_Askey // O: Power state of this device
+ )
+{
+ ptmTDA18271Object_t_C2_Askey pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS_C2_Askey)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2_Askey;
+
+ // pObj initialization
+ ret = getInstance_C2_Askey(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ // get power state
+ return TDA18271GetPowerState_C2_Askey(pObj, pPowerState_C2_Askey);
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271GetPowerState_C2_Askey:
+//
+// DESCRIPTION: Get the power state of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271GetPowerState_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj, // I: tuner Object
+ tmTDA18271PowerState_t_C2_Askey *pPowerState// I: Power state of this device
+ )
+{
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ //----------------------
+ // get the value
+ //----------------------
+ if ((pObj->I2CMap.uBx05.bF.SM == 0x00) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x00) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x00))
+ *pPowerState = tmPowerNormalMode_C2_Askey;
+ else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x01) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x01))
+ *pPowerState = tmPowerSleepMode_C2_Askey;
+ else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x01) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x00))
+ *pPowerState = tmPowerStandbyWith16MHz_C2_Askey;
+ else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x00) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x00))
+ *pPowerState = tmPowerStandbyWith16MHzAndLoopThrough_C2_Askey;
+ else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x00) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x01))
+ *pPowerState = tmPowerStandbyWithLoopThrough_C2_Askey;
+ else
+ *pPowerState = tmPowerNotSupported_C2_Askey;
+
+ return TM_OK;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271SetStandardMode_C2_Askey:
+//
+// DESCRIPTION: Set the standard mode of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271SetStandardMode_C2_Askey
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmTDA18271StandardMode_t_C2_Askey StandardMode // I: Standard mode of this device
+ )
+{
+ ptmTDA18271Object_t_C2_Askey pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the max number
+ if (TunerUnit > TDA18271_MAX_UNITS_C2_Askey)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2_Askey;
+
+ // pObj initialization
+ ret = getInstance_C2_Askey(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ // set standard mode
+ return TDA18271SetStandardMode_C2_Askey(pObj, StandardMode);
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271SetStandardMode_C2_Askey:
+//
+// DESCRIPTION: Set the standard mode of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271SetStandardMode_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj, // I: tuner Object
+ tmTDA18271StandardMode_t_C2_Askey StandardMode// I: Standard mode of this device
+ )
+{
+ Bool_ customIF = FALSE;
+ Bool_ customLPFc = FALSE;
+ UInt8 stdValue = 0;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ // set custom IF flag
+ if (((pObj->Config.uPROTOCOLSTEP & 0x02) >> 1) == 0x01)
+ customIF = TRUE;
+
+ // set custom LPFc flag
+ if (((pObj->Config.uPROTOCOLSTEP & 0x01) >> 0) == 0x01)
+ customLPFc = TRUE;
+
+ // set uIF & Std
+ switch (StandardMode)
+ {
+ case tmDigital_TV_ATSC_6MHz_C2_Askey:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 3250000;
+ // set Std bit
+ stdValue = 0x1C;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmDigital_TV_DVBT_7MHz_C2_Askey:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 3500000;
+ // set Std bit
+ stdValue = 0x1C;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmDigital_TV_DVBT_8MHz_C2_Askey:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 4000000;
+ // set Std bit
+ stdValue = 0x1D;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_TV_MN_C2_Askey:
+ // set IF frequency
+ if (!customIF)
+#if FEQ_OFFSET
+ pObj->Config.uIF = 5400000;
+#else
+ pObj->Config.uIF = 5750000;
+#endif
+ // set Std bit
+ stdValue = 0x0C;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_TV_B_C2_Askey:
+ // set IF frequency
+ if (!customIF)
+#if FEQ_OFFSET
+ pObj->Config.uIF = 6400000;
+#else
+ pObj->Config.uIF = 6750000;
+#endif
+ // set Std bit
+ stdValue = 0x0D;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_TV_GH_C2_Askey:
+ // set IF frequency
+ if (!customIF)
+#if FEQ_OFFSET
+ pObj->Config.uIF = 6750000;
+#else
+ pObj->Config.uIF = 7750000;
+#endif
+ // set Std bit
+ stdValue = 0x0E;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_TV_I_C2_Askey:
+ // set IF frequency
+ if (!customIF)
+#if FEQ_OFFSET
+ pObj->Config.uIF = 7250000;
+#else
+ pObj->Config.uIF = 7750000;
+#endif
+ // set Std bit
+ stdValue = 0x0E;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_TV_DK_C2_Askey:
+ // set IF frequency
+ if (!customIF)
+#if FEQ_OFFSET
+ pObj->Config.uIF = 6850000;
+#else
+ pObj->Config.uIF = 7750000;
+#endif
+ // set Std bit
+ stdValue = 0x0E;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_TV_L_C2_Askey:
+ // set IF frequency
+ if (!customIF)
+#if FEQ_OFFSET
+ pObj->Config.uIF = 6750000;
+#else
+ pObj->Config.uIF = 7750000;
+#endif
+ // set Std bit
+ stdValue = 0x0E;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_TV_LL_C2_Askey:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 1250000;
+ // set Std bit
+ stdValue = 0x0E;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmAnalog_FM_Radio_C2_Askey:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 1250000;
+ // set Std bit
+ stdValue = 0x18;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x01;
+ break;
+
+ case tmDigital_CAL_C2_Askey:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 1250000;
+ // set Std bit
+ stdValue = 0x18;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x01;
+ break;
+
+ case tmDigital_TV_QAM_6MHz_C2_Askey:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 4000000;
+ // set Std bit
+ stdValue = 0x1D;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmDigital_TV_QAM_8MHz_C2_Askey:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 5000000;
+ // set Std bit
+ stdValue = 0x1F;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+
+ case tmDigital_TV_ISDBT_6MHz_C2_Askey:
+ // set IF frequency
+ if (!customIF)
+ pObj->Config.uIF = 4063000;
+ // set Std bit
+ stdValue = 0x1D;
+ pObj->I2CMap.uBx05.bF.Std = (!customLPFc) ? stdValue : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (stdValue & 0x1C);
+ // set FM_RFn bit
+ pObj->I2CMap.uBx06.bF.FM_RFn = 0x00;
+ break;
+ }
+
+ // set CAL_Mode to normal mode
+ pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
+
+ // set IF_Level & IF_notch & RFAGC_Top & IFAGC_Top
+ switch (StandardMode)
+ {
+ case tmDigital_TV_ATSC_6MHz_C2_Askey:
+ case tmDigital_TV_DVBT_7MHz_C2_Askey:
+ case tmDigital_TV_DVBT_8MHz_C2_Askey:
+ case tmDigital_TV_QAM_6MHz_C2_Askey:
+ case tmDigital_TV_QAM_8MHz_C2_Askey:
+ case tmDigital_TV_ISDBT_6MHz_C2_Askey:
+ // set IF_Level
+ pObj->I2CMap.uBx06.bF.IF_Level = 0x01;
+ // set IF_notch
+ pObj->I2CMap.uBx0C.bF.IF_notch = 0x01;
+ // set RFAGC_Top & IFAGC_Top
+ pObj->I2CMap.uBx25.EXTENDED_BYTE_22 = 0x37;
+ break;
+
+ case tmAnalog_TV_MN_C2_Askey:
+ case tmAnalog_TV_B_C2_Askey:
+ case tmAnalog_TV_GH_C2_Askey:
+ case tmAnalog_TV_I_C2_Askey:
+ case tmAnalog_TV_DK_C2_Askey:
+ case tmAnalog_TV_L_C2_Askey:
+ case tmAnalog_TV_LL_C2_Askey:
+ case tmAnalog_FM_Radio_C2_Askey:
+ case tmDigital_CAL_C2_Askey:
+ // set IF_Level
+ pObj->I2CMap.uBx06.bF.IF_Level = 0x00;
+ // set IF_notch
+ pObj->I2CMap.uBx0C.bF.IF_notch = 0x00;
+ // set RFAGC_Top & IFAGC_Top
+ pObj->I2CMap.uBx25.EXTENDED_BYTE_22 = 0x2C;
+ break;
+
+ default:
+ // standard mode not supported
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ }
+
+ // store standard mode
+ pObj->StandardMode = StandardMode;
+
+ return TM_OK;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271GetStandardMode_C2_Askey:
+//
+// DESCRIPTION: Get the standard mode of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271GetStandardMode_C2_Askey
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmTDA18271StandardMode_t_C2_Askey *pStandardMode // O: Standard mode of this device
+ )
+{
+ ptmTDA18271Object_t_C2_Askey pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS_C2_Askey)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2_Askey;
+
+ // pObj initialization
+ ret = getInstance_C2_Askey(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ // get standard mode
+ return TDA18271GetStandardMode_C2_Askey(pObj, pStandardMode);
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271GetStandardMode_C2_Askey:
+//
+// DESCRIPTION: Get the standard mode of this device.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271GetStandardMode_C2_Askey
+(
+ ptmTDA18271Object_t_C2_Askey pObj, // I: tuner Object
+ tmTDA18271StandardMode_t_C2_Askey *pStandardMode // O: Standard mode of this device
+ )
+{
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_BAD_PARAMETER_C2_Askey;
+
+ //----------------------
+ // get the value
+ //----------------------
+ *pStandardMode = pObj->StandardMode;
+
+ return TM_OK;
+}
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271Write_C2_Askey:
+//
+// DESCRIPTION: Write in the Tuner.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES: uIndex: IN parameter containing the HW Sub Address as specified in
+// the datasheet (i.e. looks like 0xX0)
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271Write_C2_Askey
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32 uIndex, // I: Start index to write
+ UInt32 uNbBytes, // I: Number of bytes to write
+ UInt32* puBytes // I: Pointer on an array of bytes
+ )
+{
+
+ UInt32 uCounter;
+ UInt8* pI2CMap;
+
+ ptmTDA18271Object_t_C2_Askey pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS_C2_Askey)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2_Askey;
+
+ // pObj initialization
+ ret = getInstance_C2_Askey(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ // test the parameters. uIndex is: 0x0X
+ if ((uIndex + uNbBytes) > TDA18271_NB_BYTES_C2_Askey)
+ return TMBSL_ERR_TUNER_BAD_PARAMETER_C2_Askey;
+
+ // pI2CMap initialization
+ pI2CMap = &(pObj->I2CMap.uBx00.ID_BYTE) + uIndex;
+
+ //--------------
+ // set the value
+ //--------------
+ // save the values written in the Tuner
+ for (uCounter = 0; uCounter < uNbBytes; uCounter++)
+ {
+ *pI2CMap = (UInt8)(puBytes[uCounter]);
+ pI2CMap ++;
+ }
+
+ // write in the Tuner
+ if (TDA18271Write_C2_Askey(pObj,(UInt8)(uIndex),(UInt8)(uNbBytes)) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ return TM_OK;
+}
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271WriteBit_C2_Askey:
+//
+// DESCRIPTION: Write in the Tuner.
+//
+// RETURN: TM_ERR_NOT_SUPPORTED
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271WriteBit_C2_Askey
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32 uIndex, // I: Start index to write
+ UInt32 uBitMask, // I: bit mask
+ UInt32 uBitValue // I: bit value
+ )
+{
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+}
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271Read_C2_Askey:
+//
+// DESCRIPTION: Read in the Tuner.
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TMBSL_ERR_TUNER_BAD_PARAMETER
+// TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271Read_C2_Askey
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32 uIndex, // I: Start index to read
+ UInt32 uNbBytes, // I: Number of bytes to read
+ UInt32* puBytes // I: Pointer on an array of bytes
+ )
+{
+ UInt32 uCounter;
+ UInt8* pI2CMap;
+
+ ptmTDA18271Object_t_C2_Askey pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS_C2_Askey)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2_Askey;
+
+ // pObj initialization
+ ret = getInstance_C2_Askey(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ // test the parameters
+ if (uNbBytes > TDA18271_NB_BYTES_C2_Askey)
+ return TMBSL_ERR_TUNER_BAD_PARAMETER_C2_Askey;
+
+ // test uIndex
+ if (uIndex == -1)
+ uIndex = 0;
+
+ // pI2CMap initialization
+ pI2CMap = &(pObj->I2CMap.uBx00.ID_BYTE) + uIndex;
+
+ //--------------
+ // get the value
+ //--------------
+ // read from the Tuner
+ if (TDA18271Read_C2_Askey(pObj,(UInt8)(uIndex),(UInt8)(uNbBytes)) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // copy readen values to puBytes
+ for (uCounter = 0; uCounter < uNbBytes; uCounter++)
+ {
+ *puBytes = (UInt32)(*pI2CMap);
+ pI2CMap ++;
+ puBytes ++;
+ }
+ return TM_OK;
+}
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271SetConfig_C2_Askey:
+//
+// DESCRIPTION: Set the Config of the TDA18271_C2_Askey
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_ERR_NOT_SUPPORTED
+// TMBSL_ERR_TUNER_BAD_PARAMETER
+// TM_OK
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271SetConfig_C2_Askey
+(
+ tmUnitSelect_t TunerUnit, // I: TunerUnit number
+ UInt32 uItemId, // I: Identifier of the item to modify
+ UInt32 uValue // I: Value to set for the Config item
+ )
+{
+ ptmTDA18271Object_t_C2_Askey pObj = Null;
+ UInt8* pI2CMap;
+ UInt32* pDataMap;
+ tmErrorCode_t ret = TM_OK;
+
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the instance number
+ if (TunerUnit > TDA18271_MAX_UNITS_C2_Askey)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2_Askey;
+
+ // pObj initialization
+ ret = getInstance_C2_Askey(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ //--------------
+ // set the value
+ //--------------
+ switch((tmTDA18271cfgIndex_t_C2_Askey)uItemId)
+ {
+ case BOARD_C2_Askey:
+ switch (uValue & 0xffff0000)
+ {
+ case OM5776_BOARD_DEF:
+ case OM5780_BOARD_DEF:
+ case OM5782_BOARD_DEF:
+ case OM5764_BOARD_DEF:
+ /*pObj->Config.uXTOUT = 1;
+ pObj->I2CMap.XTout_ON = 1;*/
+ break;
+ case OM5770C2_BOARD_DEF & 0xffff0000:
+ case OM5775_BOARD_DEF:
+ case OM5777_BOARD_DEF:
+ case CUSTOM_BOARD_DEF:
+ // do nothing more than setting the default values
+ break;
+ default:
+ // board not supported
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ }
+ // store board
+ gTDA18271Instance_C2_Askey[TunerUnit].Config.uBoard = uValue;
+ break;
+
+ case FEINIT_C2_Askey:
+ if(TDA18271Init_C2_Askey(TunerUnit) == TMBSL_ERR_IIC_ERR_C2_Askey)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ break;
+
+ case RF_C2_Askey:
+ // set RF_C2_Askey frequency
+ pObj->Config.uRF = uValue;
+ break;
+
+ case IF_C2_Askey:
+ // set IF_C2_Askey frequency
+ pObj->Config.uIF = uValue;
+ break;
+
+ case PLMODE_C2_Askey:
+ // set uPLMODE_C2_Askey
+ pObj->Config.uPLMODE = uValue;
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2_Askey(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ break;
+
+ case PLRUN_C2_Askey:
+ // switch AGC2_C2_Askey power detector on
+ pObj->I2CMap.uBx1B.bF.PD_AGC2_Det = 0x00;
+ // write byte EXTENDED_BYTE_12
+ if (TDA18271Write_C2_Askey(pObj,0x1B,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // switch power level indicator on
+ pObj->Config.uPLMODE = 0x00;
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2_Askey(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 20 ms for charge pump source
+ if (TDA18271Wait_C2_Askey(pObj,20) == False)
+ return TM_FALSE;
+
+ // read bytes 0x00 to 0x0F
+ if (TDA18271Read_C2_Askey (pObj, 0x00, 16) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // switch power level indicator off
+ pObj->Config.uPLMODE = 0x01;
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2_Askey(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // switch AGC2 power detector off
+ pObj->I2CMap.uBx1B.bF.PD_AGC2_Det = 0x01;
+ // write byte EXTENDED_BYTE_12
+ if (TDA18271Write_C2_Askey(pObj,0x1B,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ break;
+
+ case POWERSTATE_C2_Askey:
+ // set POWERSTATE
+ TDA18271SetPowerState_C2_Askey (pObj, (tmTDA18271PowerState_t_C2_Askey)uValue);
+ // set CAL_Mode to normal mode
+ pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
+ // write byte EASY_PROG_BYTE_3
+ if (TDA18271Write_C2_Askey(pObj,0x05,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ break;
+
+ case STANDARDMODE_C2_Askey:
+ // set STANDARDMODE_C2_Askey
+ TDA18271SetStandardMode_C2_Askey (pObj, (tmTDA18271StandardMode_t_C2_Askey)uValue);
+ // set CAL_Mode to normal mode
+ pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
+ // write bytes EASY_PROG_BYTE_3 & EASY_PROG_BYTE_4
+ if (TDA18271Write_C2_Askey(pObj,0x05,2) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ // write MAIN_POST_DIV_BYTE
+ if (TDA18271Write_C2_Askey(pObj,0x0C,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ // write byte EXTENDED_BYTE_22
+ if (TDA18271Write_C2_Askey(pObj,0x25,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ break;
+
+ case LPFC_C2_Askey:
+ // set LP_Fc_C2_Askey
+ pObj->I2CMap.uBx05.bF.Std = (pObj->I2CMap.uBx05.bF.Std & 0xFC) | ((UInt8)uValue & 0x03);
+ // write byte EASY_PROG_BYTE_3
+ if (TDA18271Write_C2_Askey(pObj,0x05,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ break;
+
+ case XTOUT_C2_Askey:
+ // set XTout_ON_C2_Askey
+ pObj->I2CMap.uBx06.bF.XTout_ON = (UInt8)(uValue) >> 1;
+ // set Xtout_400mV
+ pObj->I2CMap.uBx06.bF.Xtout_400mV = (UInt8)(uValue) & 0x01;
+ // write byte EASY_PROG_BYTE_4
+ if (TDA18271Write_C2_Askey(pObj,0x06,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ break;
+
+ case IFLEVEL_C2_Askey:
+ // set IF_Level_C2_Askey
+ pObj->I2CMap.uBx06.bF.IF_Level = (UInt8)uValue;
+ // write byte EASY_PROG_BYTE_4
+ if (TDA18271Write_C2_Askey(pObj,0x06,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ break;
+
+ case EXTENDEDREG_C2_Askey:
+ // set Extended_Reg_C2_Askey
+ pObj->I2CMap.uBx07.bF.Extended_Reg = (UInt8)uValue;
+ // write byte EASY_PROG_BYTE_5
+ if (TDA18271Write_C2_Askey(pObj,0x07,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ break;
+
+ case MAPNAME_C2_Askey:
+ // set map name
+ pObj->Config.uMAPNAME = uValue;
+ break;
+
+ case MAPCOLUMN_C2_Askey:
+ // set map x
+ pObj->Config.uMAPCOLUMN = uValue;
+ break;
+
+ case MAPROW_C2_Askey:
+ // set map y
+ pObj->Config.uMAPROW = uValue;
+ break;
+
+ case MAPVALUE_C2_Askey:
+ // set pointer on wanted cell
+ switch (pObj->Config.uMAPNAME)
+ {
+ case tmTDA18271_IR_MEAS_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_IR_MEAS_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_IR_MEAS_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.IR_MEAS_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_IR_CAL_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_IR_CAL_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_IR_CAL_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.IR_CAL_Map[pObj->Config.uMAPROW].uRF);
+ break;
+
+ case tmTDA18271_BP_FILTER_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_BP_FILTER_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_BP_FILTER_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.BP_FILTER_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_BAND_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_BAND_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_RF_BAND_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_BAND_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_GAIN_TAPER_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_GAIN_TAPER_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_GAIN_TAPER_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.GAIN_TAPER_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_CAL_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_DC_OVER_DT_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_DC_OVER_DT_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_DC_OVER_DT_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_CAL_DC_OVER_DT_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_KMCO_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_KMCO_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_KMCO_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_CAL_KMCO_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_CID_TARGET_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_CID_TARGET_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_CID_TARGET_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_CAL_CID_TARGET_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_THERMOMETER_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_THERMOMETER_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_THERMOMETER_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.THERMOMETER_Map[pObj->Config.uMAPROW].uTM_D);
+ break;
+
+ case tmTDA18271_CAL_PLL_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_CAL_PLL_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_CAL_PLL_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.CAL_PLL_Map[pObj->Config.uMAPROW].uLO_Max);
+ break;
+
+ case tmTDA18271_MAIN_PLL_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_MAIN_PLL_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_MAIN_PLL_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.MAIN_PLL_Map[pObj->Config.uMAPROW].uLO_Max);
+ break;
+
+ case tmTDA18271_I2C_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > 0) || (pObj->Config.uMAPROW > TDA18271_NB_BYTES_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pI2CMap initialization
+ pI2CMap = &(pObj->I2CMap.uBx00.ID_BYTE) + pObj->Config.uMAPROW;
+ break;
+ }
+
+ // set cell value
+ if (pObj->Config.uMAPNAME == tmTDA18271_I2C_Map_C2_Askey)
+ *(pI2CMap + (UInt8)pObj->Config.uMAPCOLUMN) = (UInt8)uValue;
+ else
+ *(pDataMap + pObj->Config.uMAPCOLUMN) = uValue;
+ break;
+
+ case PROTOCOLSTEP_C2_Askey:
+ // set channel configuration protocol steps to execute
+ pObj->Config.uPROTOCOLSTEP = uValue;
+ break;
+
+ case READINIT_C2_Askey:
+ // read bytes 0x00 to 0x26
+ if (TDA18271Read_C2_Askey (pObj,0x00,39) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ if (uValue == 1)
+ {
+ // initialize device
+ if(TDA18271Init_C2_Askey(TunerUnit) == TMBSL_ERR_IIC_ERR_C2_Askey)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ }
+ break;
+ }
+ return TM_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271GetConfig_C2_Askey:
+//
+// DESCRIPTION: Get the Config of the TDA18271_C2_Askey
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271GetConfig_C2_Askey
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32 uItemId, // I: Identifier of the item to get value
+ UInt32* puValue // I: Address of the variable to output the Config item value
+ )
+{
+ UInt32 uCounter = 0;
+
+ ptmTDA18271Object_t_C2_Askey pObj = Null;
+ UInt8* pI2CMap;
+ UInt32* pDataMap;
+ UInt32 uByte=0;
+ tmErrorCode_t ret = TM_OK;
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // pObj initialization
+ ret = getInstance_C2_Askey(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ //--------------
+ // get the value
+ //--------------
+ switch((tmTDA18271cfgIndex_t_C2_Askey)uItemId)
+ {
+ case BOARD_C2_Askey:
+ // get board
+ *puValue = pObj->Config.uBoard;
+ break;
+
+ case RF_C2_Askey:
+ // get RF_C2_Askey frequency
+ *puValue = pObj->Config.uRF;
+ break;
+
+ case IF_C2_Askey:
+ // get IF frequency
+ *puValue = pObj->Config.uIF;
+ break;
+
+ case STATUSBYTE_C2_Askey:
+ // read bytes 0x00 to 0x26
+ if (TDA18271Read_C2_Askey (pObj,0x00,39) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ break;
+
+ case GETNBOFUNIT_C2_Askey:
+ *puValue = TDA18271_MAX_UNITS_C2_Askey;
+ break;
+
+ case ID_C2_Askey:
+ // get ID_C2_Askey value
+ *puValue = pObj->I2CMap.uBx00.bF.ID;
+ break;
+
+ case POR_C2_Askey:
+ // get POR_C2_Askey value
+ *puValue = pObj->I2CMap.uBx01.bF.POR;
+ break;
+
+ case MAINLOCK_C2_Askey:
+ // get MAINLOCK value
+ *puValue = TunerUnit == 0 ? pObj->I2CMap.uBx01.bF.MAIN_Lock : pObj->I2CMap.uBx16.bF.CAL_Lock;
+ break;
+
+ case TMVALUE_C2_Askey:
+ // read byte THERMO_BYTE
+ if (TDA18271ThermometerRead_C2_Askey(pObj, puValue) != TM_OK || pObj->I2CMap.uBx05.bF.SM == 1)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ break;
+
+ case PLMODE_C2_Askey:
+ // get PLMODE value
+ *puValue = pObj->Config.uPLMODE;
+ break;
+
+ case PLAGC1_C2_Askey:
+ // get PLAGC1 value
+ *puValue = 3 * (2 + ((pObj->I2CMap.uBx02.bF.Power_Level_7_to_0 & 0x7F) >> 5));
+ break;
+
+ case PLAGC2_C2_Askey:
+ // get PLAGC2 value
+ *puValue = 3 * (2 + (3 - (pObj->I2CMap.uBx03.bF.Power_Level_8 << 1 | pObj->I2CMap.uBx02.bF.Power_Level_7_to_0 >> 7)));
+ break;
+
+ case PLRFAGC_C2_Askey:
+ // get PLRFAGC value (PLRFAGC = PLRFAGC - 11)
+ if (((pObj->I2CMap.uBx25.EXTENDED_BYTE_22 & 0x7F) >> 4) < 5)
+ *puValue = 11 + (92 + 2 * ((pObj->I2CMap.uBx25.EXTENDED_BYTE_22 & 0x7F) >> 4)) - (103 - (pObj->I2CMap.uBx02.bF.Power_Level_7_to_0 & 0x1F));
+ else
+ *puValue = 11 + 102 - (103 - (pObj->I2CMap.uBx02.bF.Power_Level_7_to_0 & 0x1F));
+ // limit PLRFAGC value
+ if (*puValue > 33)
+ *puValue = 33;
+ else if (*puValue < 1)
+ *puValue = 1;
+ break;
+
+ case RFCALOK_C2_Askey:
+ // get RFCALOK value
+ *puValue = pObj->I2CMap.uBx03.bF.RF_CAL_OK;
+ break;
+
+ case RFCAL_TCOMP_C2_Askey:
+ // get RFCAL_TCOMP value
+ *puValue = pObj->Config.uRFCAL_TCOMP;
+ break;
+
+ case IRCALOK_C2_Askey:
+ // get IRCALOK value
+ *puValue = pObj->I2CMap.uBx03.bF.IR_CAL_OK;
+ break;
+
+ case BPFILTER_C2_Askey:
+ // get BPFILTER value
+ *puValue = pObj->I2CMap.uBx03.bF.BP_Filter;
+ break;
+
+ case RFBAND_C2_Askey:
+ // get RFBAND_C2_Askey value
+ *puValue = pObj->I2CMap.uBx04.bF.RF_Band;
+ break;
+
+ case GAINTAPER_C2_Askey:
+ // get GAINTAPER_C2_Askey value
+ *puValue = pObj->I2CMap.uBx04.bF.Gain_Taper;
+ break;
+
+ case POWERSTATE_C2_Askey:
+ // get POWERSTATE_C2_Askey
+ TDA18271GetPowerState_C2_Askey(pObj,(ptmTDA18271PowerState_t_C2_Askey)puValue);
+ break;
+
+ case LPFC_C2_Askey:
+ // get LPFC_C2_Askey value
+ *puValue = pObj->I2CMap.uBx05.bF.Std & 0x03;
+ break;
+
+ case FMRFN_C2_Askey:
+ // get FMRFN_C2_Askey value
+ *puValue = pObj->I2CMap.uBx06.bF.FM_RFn;
+ break;
+
+ case STANDARDMODE_C2_Askey:
+ // get STANDARDMODE_C2_Askey
+ TDA18271GetStandardMode_C2_Askey(pObj, (ptmTDA18271StandardMode_t_C2_Askey)puValue);
+ break;
+
+ case XTOUT_C2_Askey:
+ // get XTout_ON & Xtout_400mV value
+ *puValue = (UInt32)(pObj->I2CMap.uBx06.bF.XTout_ON << 1 | pObj->I2CMap.uBx06.bF.Xtout_400mV);
+ break;
+
+ case IFLEVEL_C2_Askey:
+ // get IFLEVEL_C2_Askey value
+ *puValue = pObj->I2CMap.uBx06.bF.IF_Level;
+ break;
+
+ case EXTENDEDREG_C2_Askey:
+ // get EXTENDEDREG_C2_Askey value
+ *puValue = pObj->I2CMap.uBx07.bF.Extended_Reg;
+ break;
+
+ case CALPOSTDIV_C2_Askey:
+ // get CALPOSTDIV_C2_Askey value
+ *puValue = pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE & 0x7F;
+ break;
+
+ case CALDIV_C2_Askey:
+ // get CALDIV_C2_Askey value
+ *puValue = pObj->I2CMap.uBx09.bF.CAL_Div_22_to_16 << 16 | pObj->I2CMap.uBx0A.bF.CAL_Div_15_to_8 << 8 | pObj->I2CMap.uBx0B.bF.CAL_Div_7_to_0;
+ break;
+
+ case MAINPOSTDIV_C2_Askey:
+ // get MAINPOSTDIV_C2_Askey value
+ *puValue = pObj->I2CMap.uBx0C.bF.MAIN_Post_Div;
+ break;
+
+ case MAINDIV_C2_Askey:
+ // get MAINDIV_C2_Askey value
+ *puValue = pObj->I2CMap.uBx0D.bF.MAIN_Div_22_to_16 << 16 | pObj->I2CMap.uBx0E.bF.MAIN_Div_15_to_8 << 8 | pObj->I2CMap.uBx0F.bF.MAIN_Div_7_to_0;
+ break;
+
+ case MAPVALUE_C2_Askey:
+ // set pointer on wanted cell
+ switch (pObj->Config.uMAPNAME)
+ {
+ case tmTDA18271_IR_MEAS_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_IR_MEAS_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_IR_MEAS_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.IR_MEAS_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_IR_CAL_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_IR_CAL_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_IR_CAL_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.IR_CAL_Map[pObj->Config.uMAPROW].uRF);
+ break;
+
+ case tmTDA18271_BP_FILTER_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_BP_FILTER_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_BP_FILTER_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.BP_FILTER_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_BAND_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_BAND_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_RF_BAND_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_BAND_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_GAIN_TAPER_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_GAIN_TAPER_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_GAIN_TAPER_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.GAIN_TAPER_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_CAL_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_DC_OVER_DT_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_DC_OVER_DT_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_DC_OVER_DT_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_CAL_DC_OVER_DT_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_KMCO_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_KMCO_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_KMCO_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_CAL_KMCO_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_RF_CAL_CID_TARGET_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_RF_CAL_CID_TARGET_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_RF_CAL_CID_TARGET_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.RF_CAL_CID_TARGET_Map[pObj->Config.uMAPROW].uRF_Max);
+ break;
+
+ case tmTDA18271_THERMOMETER_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_THERMOMETER_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_THERMOMETER_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.THERMOMETER_Map[pObj->Config.uMAPROW].uTM_D);
+ break;
+
+ case tmTDA18271_CAL_PLL_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_CAL_PLL_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_CAL_PLL_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.CAL_PLL_Map[pObj->Config.uMAPROW].uLO_Max);
+ break;
+
+ case tmTDA18271_MAIN_PLL_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > TDA18271_MAIN_PLL_NB_COLUMNS_C2_Askey - 1) || (pObj->Config.uMAPROW > TDA18271_MAIN_PLL_NB_ROWS_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pDataMap initialization
+ pDataMap = &(pObj->Config.MAIN_PLL_Map[pObj->Config.uMAPROW].uLO_Max);
+ break;
+
+ case tmTDA18271_I2C_Map_C2_Askey:
+ // test map column & row
+ if ((pObj->Config.uMAPCOLUMN > 0) || (pObj->Config.uMAPROW > TDA18271_NB_BYTES_C2_Askey - 1))
+ return TM_ERR_NOT_SUPPORTED_C2_Askey;
+ // pI2CMap initialization
+ pI2CMap = &(pObj->I2CMap.uBx00.ID_BYTE) + pObj->Config.uMAPROW;
+ break;
+ }
+ // get cell value
+ if (pObj->Config.uMAPNAME == tmTDA18271_I2C_Map_C2_Askey)
+ *puValue = *(pI2CMap + pObj->Config.uMAPCOLUMN);
+ else
+ *puValue = *(pDataMap + pObj->Config.uMAPCOLUMN);
+ break;
+
+ case PROTOCOLSTEP_C2_Askey:
+ // get channel configuration protocol steps
+ *puValue = pObj->Config.uPROTOCOLSTEP;
+ break;
+
+ // backdoor functions
+ case IDENTITY_C2_Askey:
+ _SYSTEMFUNC.SY_Read_C2_Askey( pObj->uHwAddress, TDA18271_IDENTITY_IND_C2_Askey, 1, &uByte);
+ /*if (uByte != 0x82)
+ *puValue = False;
+ else
+ *puValue = True;
+ */
+ switch (pObj->Config.uBoard & 0xffff0000)
+ {
+ case 0x57750000:
+ *puValue = True;
+ break;
+ default:
+ *puValue = False;
+ break;
+ }
+ break;
+
+ }
+ return TM_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271SetRf_C2_Askey:
+//
+// DESCRIPTION: Calculate i2c I2CMap & write in TDA18271_C2_Askey
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TMBSL_ERR_TUNER_BAD_PARAMETER
+// TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271SetRf_C2_Askey
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32 uRF // I: RF frequency in hertz
+ )
+{
+ ptmTDA18271Object_t_C2_Askey pObj;
+ tmErrorCode_t ret = TM_OK;
+
+ UInt32 uCounter = 0;
+ UInt32 uTMVALUE_CURRENT = 0;
+ UInt8 utmpStd = 0;
+
+ UInt8 uCprog_table = 0;
+ Int32 uCapprox = 0;
+ Int32 uCprog_signed = 0;
+
+
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // pObj initialization
+ ret = getInstance_C2_Askey(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ // Config.uRF update
+ pObj->Config.uRF = uRF;
+
+ //----------------------
+ // configuration reset
+ //----------------------
+ // set power level indicator to off
+ pObj->Config.uPLMODE = 1;
+
+ //----------------------
+ // normal mode restore
+ //----------------------
+ // power up in calibration standard
+ pObj->I2CMap.uBx05.bF.SM = 0x00;
+ pObj->I2CMap.uBx05.bF.SM_LT = 0x00;
+ pObj->I2CMap.uBx05.bF.SM_XT = 0x00;
+ // write byte EASY_PROG_BYTE_3
+ if (TDA18271Write_C2_Askey(pObj,0x5,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ //----------------------
+ // RF tracking filter correction
+ //----------------------
+ // sense temperature
+ ret = TDA18271ThermometerRead_C2_Askey(pObj, &uTMVALUE_CURRENT);
+ if (ret != TM_OK)
+ return ret;
+
+ //----------------------
+ // frequency dependent parameters update
+ //----------------------
+ // search for uCprog_table corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.RF_CAL_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_NB_ROWS_C2_Askey);
+ uCprog_table = (UInt8)pObj->Config.RF_CAL_Map[uCounter - 1].uRFC_Cprog;
+
+ // search for sub-band corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.RF_BAND_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_BAND_NB_ROWS_C2_Askey);
+
+ // calculate Capprox
+ if (pObj->Config.RF_BAND_Map[uCounter - 1].uRF1 == 0)
+ {
+ // Capprox = uCprog_table
+ uCapprox = (Int32)uCprog_table;
+ }
+ else if ((pObj->Config.RF_BAND_Map[uCounter - 1].uRF3 != 0) && (uRF >= pObj->Config.RF_BAND_Map[uCounter - 1].uRF2))
+ {
+ // Capprox = A2 * (uRF - uRF2) + B2 + uCprog_table
+ uCapprox = (Int32)(((pObj->Config.RF_BAND_Map[uCounter - 1].uRF_A2 * ((Int32)(uRF - pObj->Config.RF_BAND_Map[uCounter - 1].uRF2) / 1000000)) / 1000000)
+ + pObj->Config.RF_BAND_Map[uCounter - 1].uRF_B2 + uCprog_table);
+ }
+ else
+ {
+ // Capprox = A1 * (uRF - uRF1) + B1 + uCprog_table
+ uCapprox = (Int32)(((pObj->Config.RF_BAND_Map[uCounter - 1].uRF_A1 * ((Int32)(uRF - pObj->Config.RF_BAND_Map[uCounter - 1].uRF1) / 1000000)) / 1000000)
+ + pObj->Config.RF_BAND_Map[uCounter - 1].uRF_B1 + uCprog_table);
+ }
+
+ // search for udC_Over_dT corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.RF_CAL_DC_OVER_DT_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_DC_OVER_DT_NB_ROWS_C2_Askey);
+
+ // calculate CTcomp
+ pObj->Config.uRFCAL_TCOMP = (Int32)(pObj->Config.RF_CAL_DC_OVER_DT_Map[uCounter - 1].udC_Over_dT * (uTMVALUE_CURRENT - pObj->Config.uTMVALUE_RFCAL)) / 1000;
+
+ // calculate Cprog
+ uCprog_signed = uCapprox + pObj->Config.uRFCAL_TCOMP;
+ if (uCprog_signed < 0) uCprog_signed = 0;
+ if (uCprog_signed > 255) uCprog_signed = 255;
+ pObj->I2CMap.uBx1D.RFC_Cprog = (UInt8)uCprog_signed;
+
+ // write byte RFC_Cprog
+ if (TDA18271Write_C2_Askey(pObj,0x1D,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ //----------------------
+ // standard mode update
+ //----------------------
+ // update TV broadcast parameters
+ ret = TDA18271SetStandardMode_C2_Askey(pObj, pObj->StandardMode);
+ if (ret != TM_OK)
+ return ret;
+
+ // switch RFAGC to high speed mode (store current value)
+ utmpStd = pObj->I2CMap.uBx05.bF.Std;
+ pObj->I2CMap.uBx05.bF.Std &= 0x1B;
+
+ // write byte EASY_PROG_BYTE_3
+ if (TDA18271Write_C2_Askey(pObj,0x5,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+#ifdef TMBSL_TDA18271_FREEZE_AGC_C2_Askey
+ /////////////////////////////////////////////
+ //----------------------
+ // unfreeze AGC 1&2 detectors for secam L only
+ //----------------------
+ switch (pObj->StandardMode)
+ {
+ case tmAnalog_TV_L_C2_Askey:
+ case tmAnalog_TV_LL_C2_Askey:
+ // switch to digital mode
+ pObj->I2CMap.uBx05.bF.Std |= 0x10;
+
+ // start AGC1
+ pObj->I2CMap.uBx1B.bF.PD_AGC1_Det = 0x00;
+ pObj->I2CMap.uBx21.bF.AGC1_loop_off = 0x00;
+
+ // start AGC2
+ pObj->I2CMap.uBx1B.bF.PD_AGC2_Det = 0x00;
+ pObj->I2CMap.uBx24.bF.AGC2_loop_off = 0x00;
+
+ // write byte EASY_PROG_BYTE_3
+ if (TDA18271Write_C2_Askey(pObj,0x05,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ break;
+
+ default:
+ // start AGC1
+ pObj->I2CMap.uBx1B.bF.PD_AGC1_Det = 0x00;
+ pObj->I2CMap.uBx21.bF.AGC1_loop_off = 0x00;
+
+ // freeze AGC2 (set AGC2Gain = -6dB)
+ pObj->I2CMap.uBx1B.bF.PD_AGC2_Det = 0x01;
+ pObj->I2CMap.uBx24.bF.AGC2_loop_off = 0x01;
+ pObj->I2CMap.uBx24.bF.AGC2_Gain = 0x03;
+ break;
+ }
+
+ // write byte EXTENDED_BYTE_12
+ if (TDA18271Write_C2_Askey(pObj,0x1B,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // write byte EXTENDED_BYTE_18
+ if (TDA18271Write_C2_Askey(pObj,0x21,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+#endif // TMBSL_TDA18271_FREEZE_AGC_C2_Askey
+
+ // write bytes EXTENDED_BYTE_21 to EXTENDED_BYTE_23
+ if (TDA18271Write_C2_Askey(pObj,0x24,3) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+#ifdef TMBSL_TDA18271_FREEZE_AGC_C2_Askey
+ switch (pObj->StandardMode)
+ {
+ case tmAnalog_TV_L_C2_Askey:
+ case tmAnalog_TV_LL_C2_Askey:
+ // wait 1 s for AGC 1&2 startup
+ TDA18271Wait_C2_Askey(pObj,1000);
+ break;
+ }
+ /////////////////////////////////////////////
+#endif // TMBSL_TDA18271_FREEZE_AGC_C2_Askey
+
+ //----------------------
+ // update frequency dependent parameters
+ //----------------------
+ // search for IR_Meas corresponding to wanted frequency
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.IR_MEAS_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_IR_MEAS_NB_ROWS_C2_Askey);
+ pObj->I2CMap.uBx07.bF.IR_Meas = (UInt8)pObj->Config.IR_MEAS_Map[uCounter - 1].uIR_Meas;
+
+ // search for BP_Filter corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.BP_FILTER_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_BP_FILTER_NB_ROWS_C2_Askey);
+ pObj->I2CMap.uBx03.bF.BP_Filter = (UInt8)pObj->Config.BP_FILTER_Map[uCounter - 1].uBP_Filter;
+
+ // search for RF_BAND corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.RF_BAND_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_BAND_NB_ROWS_C2_Askey);
+ pObj->I2CMap.uBx04.bF.RF_Band = (UInt8)pObj->Config.RF_BAND_Map[uCounter - 1].uRF_Band;
+
+ // search for Gain_Taper corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.GAIN_TAPER_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_GAIN_TAPER_NB_ROWS_C2_Askey);
+ pObj->I2CMap.uBx04.bF.Gain_Taper = (UInt8)pObj->Config.GAIN_TAPER_Map[uCounter - 1].uGain_Taper;
+
+ //---------------------
+ // dual tuner and AGC1 extra configuration management
+ //---------------------
+ // use MAIN VCO when master, CAL VCO when slave
+ pObj->I2CMap.uBx10.bF.CALVCO_forLOn = (TunerUnit == 0) ? 1 : 0;
+
+ // AGC1 & AGC2 management
+ pObj->I2CMap.uBx10.bF.AGC1_always_mastern = 0x00;
+ pObj->I2CMap.uBx10.bF.AGC1_firstn = 0x00;
+
+ // write byte EXTENDED_BYTE_1
+ if (TDA18271Write_C2_Askey(pObj,0x10,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ //---------------------
+ // tune to wanted channel frequency
+ //---------------------
+ // use MAIN VCO when master, CAL VCO when slave
+ if (TunerUnit == 0) // master
+ {
+ // calculate MAIN PLL
+ if (TDA18271CalcMAINPLL_C2_Askey(pObj, uRF + pObj->Config.uIF) == False)
+ return TM_FALSE;
+
+ // write bytes 0x01 to 0x0F
+ if (TDA18271Write_C2_Askey(pObj,0x01,15) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // MAIN pll charge pump source
+ pObj->I2CMap.uBx13.bF.LO_ForceSrce = 0x01;
+ // write byte EXTENDED_BYTE_4
+ if (TDA18271Write_C2_Askey(pObj,0x13,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 1 ms for charge pump source
+ if (TDA18271Wait_C2_Askey(pObj,1) == False)
+ return TM_FALSE;
+
+ // MAIN pll normal operation
+ pObj->I2CMap.uBx13.bF.LO_ForceSrce = 0x00;
+ // write byte EXTENDED_BYTE_4
+ if (TDA18271Write_C2_Askey(pObj,0x13,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ }
+ else // slave
+ {
+ // calculate CAL PLL
+ if (TDA18271CalcCALPLL_C2_Askey(pObj, uRF + pObj->Config.uIF) == False)
+ return TM_FALSE;
+
+ // copy CAL PLL PostDiv to MAIN PLL Post Div
+ pObj->I2CMap.uBx0C.bF.MAIN_Post_Div = pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE & 0x77;
+
+ // write bytes 0x01 to 0x0F
+ if (TDA18271Write_C2_Askey(pObj,0x01,15) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // CAL pll charge pump source
+ pObj->I2CMap.uBx16.bF.CAL_ForceSrce = 0x01;
+ // write byte EXTENDED_BYTE_7
+ if (TDA18271Write_C2_Askey(pObj,0x16,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 1 ms for charge pump source
+ if (TDA18271Wait_C2_Askey(pObj,1) == False)
+ return TM_FALSE;
+
+ // CAL pll normal operation
+ pObj->I2CMap.uBx16.bF.CAL_ForceSrce = 0x00;
+ // write byte EXTENDED_BYTE_7
+ if (TDA18271Write_C2_Askey(pObj,0x16,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ }
+
+ // wait 20 ms for pll locking
+ if (TDA18271Wait_C2_Askey(pObj,20) == False)
+ return TM_FALSE;
+
+ // switch RFAGC to normal mode (restore previous value)
+ pObj->I2CMap.uBx05.bF.Std = utmpStd;
+
+ // write byte EASY_PROG_BYTE_3
+ if (TDA18271Write_C2_Askey(pObj,0x5,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+#ifdef TMBSL_TDA18271_FREEZE_AGC_C2_Askey
+ /////////////////////////////////////////////
+ //----------------------
+ // freeze AGC 1&2 detectors for secam L only
+ //----------------------
+ switch (pObj->StandardMode)
+ {
+ case tmAnalog_TV_L_C2_Askey:
+ case tmAnalog_TV_LL_C2_Askey:
+ // switch back to analog mode
+ pObj->I2CMap.uBx05.bF.Std &= 0xEF;
+
+ // freeze AGC1
+ pObj->I2CMap.uBx1B.bF.PD_AGC1_Det = 0x01;
+ pObj->I2CMap.uBx21.bF.AGC1_loop_off = 0x01;
+
+ // freeze AGC2
+ pObj->I2CMap.uBx1B.bF.PD_AGC2_Det = 0x01;
+ pObj->I2CMap.uBx24.bF.AGC2_loop_off = 0x01;
+// break;
+
+ // write byte EASY_PROG_BYTE_3
+ if (TDA18271Write_C2_Askey(pObj,0x05,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // write byte EXTENDED_BYTE_12
+ if (TDA18271Write_C2_Askey(pObj,0x1B,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // write byte EXTENDED_BYTE_18
+ if (TDA18271Write_C2_Askey(pObj,0x21,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // write bytes EXTENDED_BYTE_21
+ if (TDA18271Write_C2_Askey(pObj,0x24,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ break;
+
+ default:
+ pObj->I2CMap.uBx1B.bF.PD_AGC1_Det = 0x01;
+ pObj->I2CMap.uBx21.bF.AGC1_loop_off = 0x01;
+
+ // write byte EXTENDED_BYTE_12
+ if (TDA18271Write_C2_Askey(pObj,0x1B,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // write byte EXTENDED_BYTE_18
+ if (TDA18271Write_C2_Askey(pObj,0x21,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ break;
+ }
+ /////////////////////////////////////////////
+#endif // TMBSL_TDA18271_FREEZE_AGC_C2_Askey
+
+ // read bytes 0x00 to 0x26
+ if (TDA18271Read_C2_Askey (pObj,0x00,39) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ return TM_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: tmbslTDA18271GetRf_C2_Askey:
+//
+// DESCRIPTION: Get the frequency programmed in the tuner
+//
+// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+// TMBSL_ERR_TUNER_NOT_INITIALIZED
+// TM_OK
+//
+// NOTES: The value returned is the one stored in the Object
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+tmbslTDA18271GetRf_C2_Askey
+(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32* pRF // O: RF frequency in hertz
+ )
+{
+ ptmTDA18271Object_t_C2_Askey pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // pObj initialization
+ ret = getInstance_C2_Askey(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ //----------------------
+ // get the value
+ //----------------------
+ // the read function can't be used
+ *pRF = pObj->Config.uRF;
+
+ return TM_OK;
+}
+
+//-----------------------------------------------------------------------------
+// Internal functions:
+//-----------------------------------------------------------------------------
+//
+#ifndef NXPFE
+//-----------------------------------------------------------------------------
+// FUNCTION: allocInstance:
+//
+// DESCRIPTION: allocate new instance
+//
+// RETURN:
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+allocInstance_C2_Askey (
+ UInt32 DeviceUnit, // I: Device unit number
+ pptmTDA18271Object_t_C2_Askey ppDrvObject // I: Device Object
+ )
+{
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the max number
+ if (DeviceUnit > TDA18271_MAX_UNITS_C2_Askey)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2_Askey;
+
+ // return value
+ return getInstance_C2_Askey(DeviceUnit, ppDrvObject);
+}
+
+//-----------------------------------------------------------------------------
+// FUNCTION: deAllocInstance:
+//
+// DESCRIPTION: deallocate instance
+//
+// RETURN: always TM_OK
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+deAllocInstance_C2_Askey (
+ UInt32 DeviceUnit // I: Device unit number
+ )
+{
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the max number
+ if (DeviceUnit > TDA18271_MAX_UNITS_C2_Askey)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2_Askey;
+
+ // return value
+ return TM_OK;
+}
+
+//-----------------------------------------------------------------------------
+// FUNCTION: getInstance:
+//
+// DESCRIPTION: get the instance
+//
+// RETURN: always True
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+getInstance_C2_Askey (
+ tmUnitSelect_t DeviceUnit, // I: Device unit number
+ pptmTDA18271Object_t_C2_Askey ppDrvObject // I: Device Object
+ )
+{
+ //----------------------
+ // test input parameters
+ //----------------------
+ // test the max number
+ if (DeviceUnit > TDA18271_MAX_UNITS_C2_Askey)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2_Askey;
+
+ // get instance
+ *ppDrvObject = &gTDA18271Instance_C2_Askey[DeviceUnit];
+
+ // return value
+ return TM_OK;
+}
+#endif // NXPFE
+
+//-----------------------------------------------------------------------------
+// FUNCTION: TDA18271Init_C2_Askey:
+//
+// DESCRIPTION: initialization of the Tuner
+//
+// RETURN: always True
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271Init_C2_Askey (
+ tmUnitSelect_t TunerUnit // I: Tuner Object
+ )
+{
+ ptmTDA18271Object_t_C2_Askey pObj = Null;
+ tmErrorCode_t ret = TM_OK;
+
+ //------------------------------
+ // test input parameters
+ //------------------------------
+ // pObj initialization
+ ret = getInstance_C2_Askey(TunerUnit, &pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ //----------------------
+ // configuration reset
+ //----------------------
+ // set power level indicator to off
+ pObj->Config.uPLMODE = 1;
+
+ //----------------------
+ // I2C map initialization
+ //----------------------
+ // set & write all bytes
+ pObj->I2CMap.uBx01.THERMO_BYTE = 0x08;
+ pObj->I2CMap.uBx02.POWER_LEVEL_BYTE = 0x80;
+ pObj->I2CMap.uBx03.EASY_PROG_BYTE_1 = 0xC6;
+ pObj->I2CMap.uBx04.EASY_PROG_BYTE_2 = 0xDF;
+ pObj->I2CMap.uBx05.EASY_PROG_BYTE_3 = 0x16;
+ pObj->I2CMap.uBx06.EASY_PROG_BYTE_4 = 0x60;
+ pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x80;
+ pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0x80;
+ pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x00;
+ pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x00;
+ pObj->I2CMap.uBx0B.CAL_DIV_BYTE_3 = 0x00;
+ pObj->I2CMap.uBx0C.MAIN_POST_DIV_BYTE = 0x00;
+ pObj->I2CMap.uBx0D.MAIN_DIV_BYTE_1 = 0x00;
+ pObj->I2CMap.uBx0E.MAIN_DIV_BYTE_2 = 0x00;
+ pObj->I2CMap.uBx0F.MAIN_DIV_BYTE_3 = 0x00;
+ pObj->I2CMap.uBx10.EXTENDED_BYTE_1 = 0xFC;
+ pObj->I2CMap.uBx11.EXTENDED_BYTE_2 = 0x01;
+ pObj->I2CMap.uBx12.EXTENDED_BYTE_3 = 0x84;
+ pObj->I2CMap.uBx13.EXTENDED_BYTE_4 = 0x41;
+ pObj->I2CMap.uBx14.EXTENDED_BYTE_5 = 0x01;
+ pObj->I2CMap.uBx15.EXTENDED_BYTE_6 = 0x84;
+ pObj->I2CMap.uBx16.EXTENDED_BYTE_7 = 0x40;
+ pObj->I2CMap.uBx17.EXTENDED_BYTE_8 = 0x07;
+ pObj->I2CMap.uBx18.EXTENDED_BYTE_9 = 0x00;
+ pObj->I2CMap.uBx19.EXTENDED_BYTE_10 = 0x00;
+ pObj->I2CMap.uBx1A.EXTENDED_BYTE_11 = 0x96;
+ pObj->I2CMap.uBx1B.EXTENDED_BYTE_12 = 0x3F;
+ pObj->I2CMap.uBx1C.EXTENDED_BYTE_13 = 0xC1;
+ pObj->I2CMap.uBx1D.EXTENDED_BYTE_14 = 0x00;
+ pObj->I2CMap.uBx1E.EXTENDED_BYTE_15 = 0x8F;
+ pObj->I2CMap.uBx1F.EXTENDED_BYTE_16 = 0x00;
+ pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x00;
+ pObj->I2CMap.uBx21.EXTENDED_BYTE_18 = 0x8C;
+ pObj->I2CMap.uBx22.EXTENDED_BYTE_19 = 0x00;
+ pObj->I2CMap.uBx23.EXTENDED_BYTE_20 = 0x20;
+ pObj->I2CMap.uBx24.EXTENDED_BYTE_21 = 0xB3;
+ pObj->I2CMap.uBx25.EXTENDED_BYTE_22 = 0x48;
+ pObj->I2CMap.uBx26.EXTENDED_BYTE_23 = 0xB0;
+ if (TDA18271Write_C2_Askey(pObj,0x01,38) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ //----------------------
+ // AGC1 gain setup
+ //----------------------
+ // AGC1_Gain_do
+ // update & write EXTENDED_BYTE_17
+ pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x00; // set gain_do address
+ if (TDA18271Write_C2_Askey(pObj,0x20,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x03; // keep gain_do address, set gain_do
+ if (TDA18271Write_C2_Askey(pObj,0x20,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // AGC1_Gain_up
+ // update & write EXTENDED_BYTE_17
+ pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x43; // set gain_up address, keep gain_do
+ if (TDA18271Write_C2_Askey(pObj,0x20,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x4C; // keep gain_up address, set gain_up
+ if (TDA18271Write_C2_Askey(pObj,0x20,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ //----------------------
+ // image rejection calibration - low band
+ //----------------------
+ // initialisation
+ pObj->I2CMap.uBx05.EASY_PROG_BYTE_3 = 0x1F;
+ pObj->I2CMap.uBx06.EASY_PROG_BYTE_4 = 0x66;
+ pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x81;
+ pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0xCC;
+ pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x6C;
+ pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x00;
+ pObj->I2CMap.uBx0B.CAL_DIV_BYTE_3 = 0x00;
+ pObj->I2CMap.uBx0C.MAIN_POST_DIV_BYTE = 0xC5;
+ pObj->I2CMap.uBx0D.MAIN_DIV_BYTE_1 = 0x77;
+ pObj->I2CMap.uBx0E.MAIN_DIV_BYTE_2 = 0x08;
+ pObj->I2CMap.uBx0F.MAIN_DIV_BYTE_3 = 0x00;
+ // write bytes EASY_PROG_BYTE_2 to MAIN_DIV_BYTE_3
+ if (TDA18271Write_C2_Askey(pObj,0x04,12) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait_C2_Askey(pObj,5) == False)
+ return TM_FALSE;
+
+ // launch detector
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2_Askey(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 5 ms for wanted measurement
+ if (TDA18271Wait_C2_Askey(pObj,5) == False)
+ return TM_FALSE;
+
+ // CAL pll update
+ pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x85;
+ pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0xCB;
+ pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x66;
+ pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x70;
+
+ // write bytes EASY_PROG_BYTE_3 to CAL_DIV_BYTE_3
+ if (TDA18271Write_C2_Askey(pObj,0x05,7) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait_C2_Askey(pObj,5) == False)
+ return TM_FALSE;
+
+ // launch optimisation algorithm
+ // write byte EASY_PROG_BYTE_2
+ if (TDA18271Write_C2_Askey(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 30 ms for image optimization completion
+ if (TDA18271Wait_C2_Askey(pObj,30) == False)
+ return TM_FALSE;
+
+ //----------------------
+ // image rejection calibration - mid band
+ //----------------------
+ // initialisation
+ pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x82;
+ pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0xA8;
+ pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x00;
+ pObj->I2CMap.uBx0C.MAIN_POST_DIV_BYTE = 0xA1;
+ pObj->I2CMap.uBx0D.MAIN_DIV_BYTE_1 = 0x73;
+ pObj->I2CMap.uBx0E.MAIN_DIV_BYTE_2 = 0x1A;
+ // write bytes EASY_PROG_BYTE_3 to MAIN_DIV_BYTE_3
+ if (TDA18271Write_C2_Askey(pObj,0x05,11) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait_C2_Askey(pObj,5) == False)
+ return TM_FALSE;
+
+ // launch detector
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2_Askey(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 5 ms for wanted measurement
+ if (TDA18271Wait_C2_Askey(pObj,5) == False)
+ return TM_FALSE;
+
+ // CAL pll update
+ pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x86;
+ pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0xA8;
+ pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x66;
+ pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0xA0;
+
+ // write bytes EASY_PROG_BYTE_3 to CAL_DIV_BYTE_3
+ if (TDA18271Write_C2_Askey(pObj,0x05,7) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait_C2_Askey(pObj,5) == False)
+ return TM_FALSE;
+
+ // launch optimisation algorithm
+ // write byte EASY_PROG_BYTE_2
+ if (TDA18271Write_C2_Askey(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 30 ms for image optimization completion
+ if (TDA18271Wait_C2_Askey(pObj,30) == False)
+ return TM_FALSE;
+
+ //----------------------
+ // image rejection calibration - high band
+ //----------------------
+ // initialisation
+ pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x83;
+ pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0x98;
+ pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x65;
+ pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x00;
+ pObj->I2CMap.uBx0C.MAIN_POST_DIV_BYTE = 0x91;
+ pObj->I2CMap.uBx0D.MAIN_DIV_BYTE_1 = 0x71;
+ pObj->I2CMap.uBx0E.MAIN_DIV_BYTE_2 = 0xCD;
+ // write bytes EASY_PROG_BYTE_3 to CAL_DIV_BYTE_3
+ if (TDA18271Write_C2_Askey(pObj,0x05,11) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait_C2_Askey(pObj,5) == False)
+ return TM_FALSE;
+
+ // launch detector
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2_Askey(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 5 ms for wanted measurement
+ if (TDA18271Wait_C2_Askey(pObj,5) == False)
+ return TM_FALSE;
+
+ // CAL pll update
+ pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x87;
+ pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x65;
+ pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x50;
+
+ // write bytes EASY_PROG_BYTE_3 to CAL_DIV_BYTE_3
+ if (TDA18271Write_C2_Askey(pObj,0x05,7) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait_C2_Askey(pObj,5) == False)
+ return TM_FALSE;
+
+ // launch optimisation algorithm
+ // write byte EASY_PROG_BYTE_2
+ if (TDA18271Write_C2_Askey(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 30 ms for image optimization completion
+ if (TDA18271Wait_C2_Askey(pObj,30) == False)
+ return TM_FALSE;
+
+ //----------------------
+ // back to normal mode
+ //----------------------
+ // update & write byte EASY_PROG_BYTE_4
+ pObj->I2CMap.uBx06.EASY_PROG_BYTE_4 = 0x64;
+ if (TDA18271Write_C2_Askey(pObj,0x06,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // synchronization
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2_Askey(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ //----------------------
+ // RF tracking filters calibration
+ //----------------------
+ ret = TDA18271CalcRFFilterCurve_C2_Askey(pObj);
+ if (ret != TM_OK)
+ return ret;
+
+ //----------------------
+ // back to POR mode
+ //----------------------
+ // power up detector 1
+ pObj->I2CMap.uBx1B.bF.PD_AGC1_Det = 0x00;
+ // write byte EXTENDED_BYTE_12
+ if (TDA18271Write_C2_Askey(pObj,0x1B,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // turn AGC1 loop on
+ pObj->I2CMap.uBx21.bF.AGC1_loop_off = 0x00;
+ // set AGC1Gain = 6dB
+ pObj->I2CMap.uBx21.bF.AGC1_Gain = 0x00;
+ // write byte EXTENDED_BYTE_18
+ if (TDA18271Write_C2_Askey(pObj,0x21,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // set AGC2Gain = -6dB
+ pObj->I2CMap.uBx24.bF.AGC2_Gain = 0x03;
+
+ // swicth to POR mode
+ pObj->I2CMap.uBx05.bF.SM = 0x01;
+ pObj->I2CMap.uBx05.bF.SM_LT = 0x00;
+ pObj->I2CMap.uBx05.bF.SM_XT = 0x00;
+ // write byte EASY_PROG_BYTE_3
+ if (TDA18271Write_C2_Askey(pObj,0x5,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // disable 1.5MHz low pass filter
+ pObj->I2CMap.uBx26.bF.ForceLP_Fc2_En = 0x00;
+ pObj->I2CMap.uBx26.bF.LP_Fc = 0x00;
+
+ // write bytes EXTENDED_BYTE_21 to EXTENDED_BYTE_23
+ if (TDA18271Write_C2_Askey(pObj,0x24,3) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ return TM_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// FUNCTION: TDA18271InitTick_C2_Askey
+//
+// DESCRIPTION: this function will delay for the number of millisecond
+//
+// RETURN: nothing
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+Bool_
+TDA18271InitTick_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj, // I: Tuner unit number
+ UInt16 wTime // I: time to wait for
+ )
+{
+ UInt32 uCurrentTick;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return False;
+
+ // get current tick
+ uCurrentTick = _SYSTEMFUNC.SY_GetTickTime();
+
+ // Calculate end tick
+ pObj->uTickEnd = (UInt32)wTime;
+ pObj->uTickEnd += _SYSTEMFUNC.SY_GetTickPeriod()/2;
+ pObj->uTickEnd /= _SYSTEMFUNC.SY_GetTickPeriod();
+ pObj->uTickEnd += uCurrentTick;
+
+ // always add 1 because of rounding issue
+ if (wTime)
+ pObj->uTickEnd++;
+
+ // test overflow
+ if (pObj->uTickEnd < uCurrentTick)
+ return False;
+ else
+ return True;
+}
+
+//-----------------------------------------------------------------------------
+// FUNCTION: TDA18271WaitTick_C2_Askey
+//
+// DESCRIPTION: this function will block for the number of millisecond
+//
+// RETURN: True if time has elapsed else False
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+Bool_
+TDA18271WaitTick_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj // I: Tuner unit number
+ )
+{
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return False;
+
+ // test if time has elapsed
+ if (_SYSTEMFUNC.SY_GetTickTime() >= pObj->uTickEnd)
+ return True;
+ else
+ return False;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271Write_C2_Askey
+//
+// DESCRIPTION: This function writes I2C data in the Tuner
+//
+// RETURN: True or False
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271Write_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj, // I: Tuner unit number
+ UInt8 uSubAddress,// I: sub address
+ UInt8 uNbData // I: nb of data
+ )
+{
+ Bool_ I2CCommResult = TM_FALSE;
+
+ UInt8 uCounter;
+ UInt8* pI2CMap;
+ UInt32 WriteBuffer[TDA18271_NB_BYTES_C2_Askey] = {0};
+ UInt32* pWriteBuffer;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return False;
+
+ // force I2CMap
+ pObj->I2CMap.uBx03.bF.Dis_Power_level = (UInt8)pObj->Config.uPLMODE;
+
+ // pI2CMap & pWriteBuffer initialization
+ pI2CMap = &(pObj->I2CMap.uBx00.ID_BYTE);
+ pWriteBuffer = &(WriteBuffer[0]);
+
+ // copy I2CMap data in WriteBuffer
+ for (uCounter = 0; uCounter < TDA18271_NB_BYTES_C2_Askey; uCounter++)
+ {
+ *pWriteBuffer = (UInt32)(*pI2CMap);
+ pWriteBuffer ++;
+ pI2CMap ++;
+ }
+
+ // write data in the Tuner
+ I2CCommResult = _SYSTEMFUNC.SY_Write_C2_Askey( pObj->uHwAddress,
+ uSubAddress,
+ uNbData,
+ &(WriteBuffer[uSubAddress]) );
+
+ // shift I2CLog content
+ TDA18271ShiftLog_C2_Askey (pObj,1);
+
+ // copy written data in I2CLog [0]
+ for (uCounter = uSubAddress; uCounter < uSubAddress + uNbData; uCounter++)
+ pObj->I2CLog [0][uCounter] = WriteBuffer [uCounter];
+
+ // set additional values
+ pObj->I2CLog [0][TDA18271_NB_BYTES_C2_Askey] = pObj->uHwAddress;
+ pObj->I2CLog [0][TDA18271_NB_BYTES_C2_Askey + 1] = I2CCommResult;
+
+ // return value
+ return I2CCommResult;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271Read_C2_Askey
+//
+// DESCRIPTION: This function reads I2C data from the Tuner
+//
+// RETURN: True or False
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271Read_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj, // I: Tuner unit number
+ UInt8 uSubAddress,// I: sub address
+ UInt8 uNbData // I: nb of data
+ )
+{
+ Bool_ I2CCommResult = TM_FALSE;
+
+ UInt8 uCounter;
+ UInt8* pI2CMap;
+ UInt32 ReadBuffer[TDA18271_NB_BYTES_C2_Askey] = {0};
+ UInt32* pReadBuffer;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return False;
+
+ // pI2CMap & pReadBuffer initialization
+ pI2CMap = &(pObj->I2CMap.uBx00.ID_BYTE) + uSubAddress;
+ pReadBuffer = &(ReadBuffer[uSubAddress]);
+
+ // read data from the Tuner
+ I2CCommResult = _SYSTEMFUNC.SY_Read_C2_Askey( pObj->uHwAddress,
+ 0,
+ uSubAddress + uNbData,
+ &(ReadBuffer[0]));
+
+ // copy readen data in I2CMap
+ for (uCounter = 0; uCounter < uNbData; uCounter++)
+ {
+ *pI2CMap = (UInt8)(*pReadBuffer);
+ pI2CMap ++;
+ pReadBuffer ++;
+ }
+
+ // shift I2CLog content
+ TDA18271ShiftLog_C2_Askey (pObj,1);
+
+ // copy readen data in I2CLog [0]
+ for (uCounter = uSubAddress; uCounter < uSubAddress + uNbData; uCounter++)
+ pObj->I2CLog [0][uCounter] = ReadBuffer [uCounter];
+
+ // set additional values
+ pObj->I2CLog [0][TDA18271_NB_BYTES_C2_Askey] = pObj->uHwAddress + 1;
+ pObj->I2CLog [0][TDA18271_NB_BYTES_C2_Askey + 1] = I2CCommResult;
+
+ // return value
+ return I2CCommResult;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271Wait_C2_Askey
+//
+// DESCRIPTION: This function waits for requested time
+//
+// RETURN: True or False
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271Wait_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj, // I: Tuner unit number
+ UInt16 wTime // I: time to wait for
+ )
+{
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return False;
+
+ User_delay( pObj->AFAInfo_C2_Askey.demodulator, wTime);
+ // Return value
+ return True;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271ShiftLog_C2_Askey
+//
+// DESCRIPTION: Shift I2CLog content of wanted lines
+//
+// RETURN: True
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271ShiftLog_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj, // I: Tuner unit number
+ UInt32 uNbRows // I: nb of lines
+ )
+{
+ UInt32 uRow;
+ UInt8 uColumn;
+ UInt32 uCounter;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return False;
+
+ // Shift I2CLog content of wanted lines
+ for (uCounter = 0; uCounter < uNbRows; uCounter++)
+ {
+ for (uRow = TDA18271_LOG_NB_ROWS_C2_Askey - 1; uRow > 0; uRow--)
+ {
+ for (uColumn = 0; uColumn < TDA18271_NB_BYTES_C2_Askey + 2; uColumn++)
+ pObj->I2CLog [uRow][uColumn] = pObj->I2CLog [uRow - 1][uColumn];
+ }
+
+ for (uColumn = 0; uColumn < TDA18271_NB_BYTES_C2_Askey + 2; uColumn++)
+ pObj->I2CLog [0][uColumn] = TDA18271_LOG_BLANK_DATA_C2_Askey;
+ }
+
+ // Return value
+ return True;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271CalcMAINPLL_C2_Askey:
+//
+// DESCRIPTION: Calculate the MAIN fractionnal PLL settings
+//
+// RETURN: True or False
+//
+// NOTES: This function doesn't write in the tuner
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271CalcMAINPLL_C2_Askey (
+ ptmTDA18271Object_t_C2_Askey pObj, // I: tuner Object
+ UInt32 uLO // I: local oscillator frequency in hertz
+ )
+{
+ UInt8 uCounter = 0;
+ UInt32 uDiv;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return False;
+
+ // search for MAIN_Post_Div corresponding to uLO
+ do uCounter ++;
+ while (uLO > pObj->Config.MAIN_PLL_Map[uCounter - 1].uLO_Max && uCounter < TDA18271_MAIN_PLL_NB_ROWS_C2_Askey);
+ pObj->I2CMap.uBx0C.bF.MAIN_Post_Div = ((UInt8)pObj->Config.MAIN_PLL_Map[uCounter - 1].uPost_Div) & 0x77;
+
+ // calculate MAIN_Div
+ uDiv = (((UInt32)(pObj->Config.MAIN_PLL_Map[uCounter - 1].uDiv) * (uLO / 1000)) << 7) / 125;
+ pObj->I2CMap.uBx0D.bF.MAIN_Div_22_to_16 = (UInt8)(uDiv >> 16) & 0x7F;
+ pObj->I2CMap.uBx0E.bF.MAIN_Div_15_to_8 = (UInt8)(uDiv >> 8);
+ pObj->I2CMap.uBx0F.bF.MAIN_Div_7_to_0 = (UInt8)(uDiv);
+
+ return True;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271CalcCALPLL_C2_Askey:
+//
+// DESCRIPTION: Calculate the CAL fractionnal PLL settings
+//
+// RETURN: True or False
+//
+// NOTES: This function doesn't write in the tuner
+//-------------------------------------------------------------------------------------
+//
+Bool_
+TDA18271CalcCALPLL_C2_Askey (
+ ptmTDA18271Object_t_C2_Askey pObj, // I: tuner Object
+ UInt32 uLO // I: local oscillator frequency in hertz
+ )
+{
+ UInt8 uCounter = 0;
+ UInt32 uDiv;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return False;
+
+ // search for CAL_Post_Div corresponding to uLO
+ do uCounter ++;
+ while (uLO > pObj->Config.CAL_PLL_Map[uCounter - 1].uLO_Max && uCounter < TDA18271_CAL_PLL_NB_ROWS_C2_Askey);
+ pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = (UInt8)pObj->Config.CAL_PLL_Map[uCounter - 1].uPost_Div;
+
+ // calculate CAL_Div
+ uDiv = (((UInt32)(pObj->Config.CAL_PLL_Map[uCounter - 1].uDiv) * (uLO / 1000)) << 7) / 125;
+ pObj->I2CMap.uBx09.bF.CAL_Div_22_to_16 = (UInt8)(uDiv >> 16) & 0x7F;
+ pObj->I2CMap.uBx0A.bF.CAL_Div_15_to_8 = (UInt8)(uDiv >> 8);
+ pObj->I2CMap.uBx0B.bF.CAL_Div_7_to_0 = (UInt8)(uDiv);
+
+ return True;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271CalibrateRF_C2_Askey:
+//
+// DESCRIPTION: RF tracking filter calibration
+//
+// RETURN: TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271CalibrateRF_C2_Askey (
+ ptmTDA18271Object_t_C2_Askey pObj, // I: tuner Object
+ UInt32 uRF, // I: RF frequency in hertz
+ UInt8* puCprog // I: Address of the variable to output the Cprog value
+ )
+{
+ UInt32 uCounter = 0;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ //------------------------------
+ // initialization
+ //------------------------------
+ // set CAL_Mode to normal mode
+ pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
+ // write byte EASY_PROG_BYTE_4
+ if (TDA18271Write_C2_Askey(pObj,0x06,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // set AGC1Gain = 15dB
+ pObj->I2CMap.uBx21.bF.AGC1_Gain = 0x03;
+ // write byte EXTENDED_BYTE_18
+ if (TDA18271Write_C2_Askey(pObj,0x21,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // switch off AGC1
+ pObj->I2CMap.uBx05.bF.SM_LT = 0x01;
+
+ //------------------------------
+ // frequency dependent parameters update
+ //------------------------------
+ // search for BP_Filter corresponding to uRF
+ uCounter=0;
+ do uCounter ++;
+ while (uRF > pObj->Config.BP_FILTER_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_BP_FILTER_NB_ROWS_C2_Askey);
+ pObj->I2CMap.uBx03.bF.BP_Filter = (UInt8)pObj->Config.BP_FILTER_Map[uCounter - 1].uBP_Filter;
+
+ // search for Gain_Taper corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.GAIN_TAPER_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_GAIN_TAPER_NB_ROWS_C2_Askey);
+ pObj->I2CMap.uBx04.bF.Gain_Taper = (UInt8)pObj->Config.GAIN_TAPER_Map[uCounter - 1].uGain_Taper;
+
+ // search for RF_BAND corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (uRF > pObj->Config.RF_BAND_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_BAND_NB_ROWS_C2_Askey);
+ pObj->I2CMap.uBx04.bF.RF_Band = (UInt8)pObj->Config.RF_BAND_Map[uCounter - 1].uRF_Band;
+
+ // search for K,M corresponding to uRF
+ uCounter=0;
+ do uCounter ++;
+ while (uRF > pObj->Config.RF_CAL_KMCO_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_KMCO_NB_ROWS_C2_Askey);
+ pObj->I2CMap.uBx1C.bF.RFC_K = (UInt8)pObj->Config.RF_CAL_KMCO_Map[uCounter - 1].uK;
+ pObj->I2CMap.uBx1C.bF.RFC_M = (UInt8)pObj->Config.RF_CAL_KMCO_Map[uCounter - 1].uM;
+
+ // write bytes EASY_PROG_BYTE_1 to EASY_PROG_BYTE_3
+ if (TDA18271Write_C2_Askey(pObj,0x03,3) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // write byte EXTENDED_BYTE_13
+ if (TDA18271Write_C2_Askey(pObj,0x1C,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // MAIN pll charge pump source
+ pObj->I2CMap.uBx13.bF.LO_ForceSrce = 0x01;
+ // write byte EXTENDED_BYTE_4
+ if (TDA18271Write_C2_Askey(pObj,0x13,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // CAL pll charge pump source
+ pObj->I2CMap.uBx16.bF.CAL_ForceSrce = 0x01;
+ // write byte EXTENDED_BYTE_7
+ if (TDA18271Write_C2_Askey(pObj,0x16,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // force DCDC converter to 0V
+ pObj->I2CMap.uBx1D.RFC_Cprog = 0x00;
+ // write byte EXTENDED_BYTE_14
+ if (TDA18271Write_C2_Askey(pObj,0x1D,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // disable plls lock
+ pObj->I2CMap.uBx23.bF.Force_Lock = 0x00;
+ // write byte EXTENDED_BYTE_20
+ if (TDA18271Write_C2_Askey(pObj,0x23,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // RF tracking filters calibration mode
+ pObj->I2CMap.uBx06.bF.CAL_Mode = 0x03;
+
+ // write bytes EASY_PROG_BYTE_4 & EASY_PROG_BYTE_5
+ if (TDA18271Write_C2_Askey(pObj,0x06,2) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ //------------------------------
+ // set internal calibration signals
+ //------------------------------
+ // calculate CAL PLL
+ // CAL LO Frequency = channel center frequency
+ if (TDA18271CalcCALPLL_C2_Askey(pObj, uRF) == False)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // calculate MAIN PLL
+ // MAIN LO Frequency = channel center frequency + 1MHz
+ if (TDA18271CalcMAINPLL_C2_Askey(pObj, uRF + RF_CAL_IF_FREQ_C2_Askey) == False)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // write bytes 0x05 to 0x0F
+ if (TDA18271Write_C2_Askey(pObj,0x05,11) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 5 ms for RF tracking filter calibration initialization
+ if (TDA18271Wait_C2_Askey(pObj,5) == False)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ //------------------------------
+ // internal synchronization
+ //------------------------------
+ // write byte EASY_PROG_BYTE_2
+ if (TDA18271Write_C2_Askey(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2_Askey(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // write byte EASY_PROG_BYTE_2
+ if (TDA18271Write_C2_Askey(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2_Askey(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ //------------------------------
+ // RF calibration launch
+ //------------------------------
+ // MAIN pll charge pump source
+ pObj->I2CMap.uBx13.bF.LO_ForceSrce = 0x00;
+ // write byte EXTENDED_BYTE_4
+ if (TDA18271Write_C2_Askey(pObj,0x13,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // CAL pll charge pump source
+ pObj->I2CMap.uBx16.bF.CAL_ForceSrce = 0x00;
+ // write byte EXTENDED_BYTE_7
+ if (TDA18271Write_C2_Askey(pObj,0x16,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 10 ms for pll locking
+ if (TDA18271Wait_C2_Askey(pObj,10) == False)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // launch the RF tracking filters calibartion
+ pObj->I2CMap.uBx23.bF.Force_Lock = 0x01;
+ // write byte EXTENDED_BYTE_20
+ if (TDA18271Write_C2_Askey(pObj,0x23,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 60 ms for calibration
+ if (TDA18271Wait_C2_Askey(pObj,60) == False)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // normal mode
+ pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
+
+ // set AGC1Gain = 6dB
+ pObj->I2CMap.uBx21.bF.AGC1_Gain = 0x00;
+ // write byte EXTENDED_BYTE_18
+ if (TDA18271Write_C2_Askey(pObj,0x21,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // switch on AGC1
+ pObj->I2CMap.uBx05.bF.SM_LT = 0x00;
+
+ // write bytes EASY_PROG_BYTE_3 & EASY_PROG_BYTE_4
+ if (TDA18271Write_C2_Askey(pObj,0x05,2) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // write byte EASY_PROG_BYTE_1
+ if (TDA18271Write_C2_Askey(pObj,0x03,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // read bytes 0x00 to 0x26
+ if (TDA18271Read_C2_Askey (pObj,0x00,39) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // update puCprog
+ *puCprog = pObj->I2CMap.uBx1D.RFC_Cprog;
+
+ // return value
+ return TM_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271PowerScanInit_C2_Askey:
+//
+// DESCRIPTION: Initializes power scan
+//
+// RETURN: TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271PowerScanInit_C2_Askey (
+ ptmTDA18271Object_t_C2_Askey pObj // I: Tuner unit number
+ )
+{
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ // set standard mode to DVBT 1.5 MHz
+ pObj->I2CMap.uBx05.bF.Std = 0x12;
+ pObj->I2CMap.uBx06.bF.IF_Level = 0x00;
+ pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
+ // write bytes EASY_PROG_BYTE_3 & EASY_PROG_BYTE_4
+ if (TDA18271Write_C2_Askey(pObj,0x05,2) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // set AGC1Gain = 6dB
+ pObj->I2CMap.uBx21.bF.AGC1_Gain = 0x00;
+ // write byte EXTENDED_BYTE_18
+ if (TDA18271Write_C2_Askey(pObj,0x21,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // set AGC2Gain = -15dB
+ pObj->I2CMap.uBx24.bF.AGC2_Gain = 0x00;
+ // set low pass filter to 1.5MHz
+ pObj->I2CMap.uBx26.bF.ForceLP_Fc2_En = 0x01;
+ pObj->I2CMap.uBx26.bF.LP_Fc = 0x01;
+ // write byte EXTENDED_BYTE_21 to EXTENDED_BYTE_23
+ if (TDA18271Write_C2_Askey(pObj,0x24,3) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // return value
+ return TM_OK;
+}
+
+#define POWER_SCAN_FREQ_STEP 200000
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271PowerScan_C2_Askey:
+//
+// DESCRIPTION: Scan power and adjust RF Frequency
+//
+// RETURN: TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271PowerScan_C2_Askey (
+ ptmTDA18271Object_t_C2_Askey pObj, // I: Tuner unit number
+ UInt32* puRF, // I/O: RF frequency in hertz
+ Bool_* pCal // O: Calibration allowed if pCal = True
+ )
+{
+ UInt32 uCounter = 0;
+ UInt32 count_limit = 0;
+ UInt32 freq_input = 0;
+ UInt32 freq_MAINPLL = 0;
+ UInt32 step = 0;
+
+ UInt8 CID_Gain = 0;
+ UInt8 CID_Target = 0;
+
+ Int8 sgn = 0;
+
+ Bool_ wait = False;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ // set freq_input
+ freq_input = *puRF;
+
+ // search for count_limit corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (freq_input > pObj->Config.RF_CAL_CID_TARGET_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_CID_TARGET_NB_ROWS_C2_Askey);
+ count_limit = pObj->Config.RF_CAL_CID_TARGET_Map[uCounter - 1].uCount_Limit;
+
+ // check if powerscan is requested
+ if (count_limit == 0)
+ {
+ // enable calibration and exit
+ *pCal = True;
+ return TM_OK;
+ }
+
+ // search for CID_Target corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (freq_input > pObj->Config.RF_CAL_CID_TARGET_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_CID_TARGET_NB_ROWS_C2_Askey);
+ CID_Target = (UInt8)pObj->Config.RF_CAL_CID_TARGET_Map[uCounter - 1].uCID_Target;
+
+ // search for sub-band corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (freq_input > pObj->Config.RF_BAND_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_BAND_NB_ROWS_C2_Askey);
+ pObj->I2CMap.uBx04.bF.RF_Band = (UInt8)pObj->Config.RF_BAND_Map[uCounter - 1].uRF_Band;
+
+ // search for Cprog corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (freq_input > pObj->Config.RF_CAL_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_NB_ROWS_C2_Askey);
+ pObj->I2CMap.uBx1D.RFC_Cprog = (UInt8)pObj->Config.RF_CAL_Map[uCounter - 1].uRFC_Cprog;
+
+ // search for Gain_Taper corresponding to uRF
+ uCounter = 0;
+ do uCounter ++;
+ while (freq_input > pObj->Config.GAIN_TAPER_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_GAIN_TAPER_NB_ROWS_C2_Askey);
+ pObj->I2CMap.uBx04.bF.Gain_Taper = (UInt8)pObj->Config.GAIN_TAPER_Map[uCounter - 1].uGain_Taper;
+
+ // write byte EASY_PROG_BYTE_2
+ if (TDA18271Write_C2_Askey(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // write byte EXTENDED_BYTE_14
+ if (TDA18271Write_C2_Askey(pObj,0x1D,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // set freq_MAINPLL
+ freq_MAINPLL = freq_input + RF_CAL_IF_FREQ_C2_Askey;
+
+ // calculate MAIN PLL
+ if (TDA18271CalcMAINPLL_C2_Askey(pObj, freq_MAINPLL) == False)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // write bytes 0x0C to 0x0F
+ if (TDA18271Write_C2_Askey(pObj,0x0C,4) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 5 ms for pll locking
+ if (TDA18271Wait_C2_Askey(pObj,5) == False)
+ return TM_FALSE;
+
+ // launch power detection measurement
+ pObj->I2CMap.uBx06.bF.CAL_Mode = 0x01;
+
+ // write byte EASY_PROG_BYTE_4
+ if (TDA18271Write_C2_Askey(pObj,0x06,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // write byte EASY_PROG_BYTE_2
+ if (TDA18271Write_C2_Askey(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // read power detector informations
+ if (TDA18271Read_C2_Askey (pObj,0x00,39) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ //update CID_Gain
+ CID_Gain = pObj->I2CMap.uBx19.bF.CID_Gain;
+
+ //----------------------
+ // power scan algorithm
+ //----------------------
+ // initialization
+ uCounter = 0;
+ sgn = 1;
+ *puRF = freq_input;
+ *pCal = False;
+ step = POWER_SCAN_FREQ_STEP;
+ wait = False;
+
+ // main loop
+ while (CID_Gain < CID_Target)
+ {
+ // update freq_MAINPLL
+ freq_MAINPLL = freq_input + sgn * uCounter + RF_CAL_IF_FREQ_C2_Askey;
+
+ // calculate MAIN PLL
+ if (TDA18271CalcMAINPLL_C2_Askey(pObj, freq_MAINPLL) == False)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // write bytes 0x0C to 0x0F
+ if (TDA18271Write_C2_Askey(pObj,0x0C,4) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ if (wait)
+ {
+ // wait 5 ms for pll locking
+ if (TDA18271Wait_C2_Askey(pObj,5) == False)
+ return TM_FALSE;
+
+ // reset wait flag
+ wait = False;
+ }
+ else
+ {
+ // wait 100 s for pll locking
+ }
+
+ // write byte EASY_PROG_BYTE_2
+ if (TDA18271Write_C2_Askey(pObj,0x04,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // read power detector informations
+ if (TDA18271Read_C2_Askey (pObj,0x00,39) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // update CID_Gain
+ CID_Gain = pObj->I2CMap.uBx19.bF.CID_Gain;
+
+ // increase count
+ uCounter += step;
+
+ // check uCounter
+ if (uCounter >= count_limit)
+ {
+ if (sgn > 0)
+ {
+ // update sgn
+ sgn = -sgn;
+
+ // update uCounter
+ uCounter = step;
+
+ // update wait flag
+ wait = True;
+ }
+ else
+ {
+ // exit loop
+ break;
+ }
+ }
+ }
+
+ // return results
+ if (CID_Gain >= CID_Target)
+ {
+ *pCal = True;
+ *puRF = freq_MAINPLL - RF_CAL_IF_FREQ_C2_Askey;
+ }
+ else
+ {
+ *pCal = False;
+ *puRF = freq_input;
+ }
+
+ return TM_OK;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271CalcRFFilterCurve_C2_Askey:
+//
+// DESCRIPTION: Calculate RF Filter curve coefficients
+//
+// RETURN: TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271CalcRFFilterCurve_C2_Askey (
+ ptmTDA18271Object_t_C2_Askey pObj // I: tuner Object
+ )
+{
+ tmErrorCode_t ret = TM_OK;
+ UInt32 uCounter = 0;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ // wait 200 ms for die temperature stabilization
+ if (TDA18271Wait_C2_Askey(pObj,200) == False)
+ return TM_FALSE;
+
+ // power scan initialization
+ TDA18271PowerScanInit_C2_Askey(pObj);
+
+ // calculate RF filter curve
+ for (uCounter = 0; uCounter < TDA18271_RF_BAND_NB_ROWS_C2_Askey; uCounter++)
+ {
+ if (pObj->Config.RF_BAND_Map[uCounter].uRF1_default != 0)
+ {
+ ret = TDA18271RFTrackingFiltersInit_C2_Askey(pObj, &(pObj->Config.RF_BAND_Map[uCounter]));
+ if (ret != TM_OK)
+ return ret;
+ }
+ }
+
+ // sense temperature
+ ret = TDA18271ThermometerRead_C2_Askey(pObj, &(pObj->Config.uTMVALUE_RFCAL));
+ if (ret != TM_OK)
+ return ret;
+
+ // return value
+ return TM_OK;
+}
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271RFTrackingFiltersInit_C2_Askey:
+//
+// DESCRIPTION: Initialize RF Filter calibration
+//
+// RETURN: TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271RFTrackingFiltersInit_C2_Askey (
+ ptmTDA18271Object_t_C2_Askey pObj, // I: tuner Object
+ ptmTDA18271_RF_BAND_Map_t_C2_Askey pRF_BAND_Map // I: address of RF band map
+ )
+{
+ tmErrorCode_t ret = TM_OK;
+
+ UInt32 uCounter = 0;
+
+ UInt8 uCprog_cal_1 = 0;
+ UInt8 uCprog_table_1 = 0;
+ UInt8 uCprog_cal_2 = 0;
+ UInt8 uCprog_table_2 = 0;
+ UInt8 uCprog_cal_3 = 0;
+ UInt8 uCprog_table_3 = 0;
+
+ Bool_ bCal = False;
+
+ tmTDA18271StandardMode_t_C2_Askey StandardMode = pObj->StandardMode;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ //----------------------
+ // RF tracking filter calibration at RF1 frequency
+ //----------------------
+ // test uRF1_default value
+ if (pRF_BAND_Map->uRF1_default == 0)
+ return ret;
+
+ // look for optimized calibration frequency
+ pRF_BAND_Map->uRF1 = pRF_BAND_Map->uRF1_default;
+ ret = TDA18271PowerScan_C2_Askey(pObj, &pRF_BAND_Map->uRF1, &bCal);
+ if (ret != TM_OK)
+ return ret;
+
+ // search for uCprog_table_1 corresponding to RF1
+ uCounter = 0;
+ do uCounter ++;
+ while (pRF_BAND_Map->uRF1 > pObj->Config.RF_CAL_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_NB_ROWS_C2_Askey);
+ uCprog_table_1 = (UInt8)pObj->Config.RF_CAL_Map[uCounter - 1].uRFC_Cprog;
+
+ if(bCal)
+ {
+ // launch tracking filter calibration
+ ret = TDA18271CalibrateRF_C2_Askey(pObj, pRF_BAND_Map->uRF1, &uCprog_cal_1);
+ if (ret != TM_OK)
+ return ret;
+ }
+ else
+ {
+ // use tracking filter table value
+ uCprog_cal_1 = uCprog_table_1;
+ }
+
+ // set A1 coefficient
+ pRF_BAND_Map->uRF_A1 = 0;
+
+ // calculate B1 coefficient
+ pRF_BAND_Map->uRF_B1 = uCprog_cal_1 - uCprog_table_1;
+
+ //----------------------
+ // RF tracking filter calibration at RF2 frequency
+ //----------------------
+ // test RF2 value
+ if (pRF_BAND_Map->uRF2_default == 0)
+ return ret;
+
+ // look for optimized calibration frequency
+ pRF_BAND_Map->uRF2 = pRF_BAND_Map->uRF2_default;
+ ret = TDA18271PowerScan_C2_Askey(pObj, &pRF_BAND_Map->uRF2, &bCal);
+ if (ret != TM_OK)
+ return ret;
+
+ // search for uCprog_table_2 corresponding to RF2
+ uCounter = 0;
+ do uCounter ++;
+ while (pRF_BAND_Map->uRF2 > pObj->Config.RF_CAL_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_NB_ROWS_C2_Askey);
+ uCprog_table_2 = (UInt8)pObj->Config.RF_CAL_Map[uCounter - 1].uRFC_Cprog;
+
+ if(bCal)
+ {
+ // launch tracking filter calibration
+ ret = TDA18271CalibrateRF_C2_Askey(pObj, pRF_BAND_Map->uRF2, &uCprog_cal_2);
+ if (ret != TM_OK)
+ return ret;
+ }
+ else
+ {
+ // use tracking filter table value
+ uCprog_cal_2 = uCprog_table_2;
+ }
+
+ // calculate A1 coefficient
+ pRF_BAND_Map->uRF_A1 = ((uCprog_cal_2 - uCprog_table_2 - (uCprog_cal_1 - uCprog_table_1)) * 1000000)
+ / (Int32)((pRF_BAND_Map->uRF2 - pRF_BAND_Map->uRF1) / 1000000);
+
+ //----------------------
+ // RF tracking filter calibration at RF3 frequency
+ //----------------------
+ // test RF3 value
+ if (pRF_BAND_Map->uRF3_default == 0)
+ return ret;
+
+ // look for optimized calibration frequency
+ pRF_BAND_Map->uRF3 = pRF_BAND_Map->uRF3_default;
+ ret = TDA18271PowerScan_C2_Askey(pObj, &pRF_BAND_Map->uRF3, &bCal);
+ if (ret != TM_OK)
+ return ret;
+
+ // search for uCprog_table_3 corresponding to RF3
+ uCounter = 0;
+ do uCounter ++;
+ while (pRF_BAND_Map->uRF3 > pObj->Config.RF_CAL_Map[uCounter - 1].uRF_Max && uCounter < TDA18271_RF_CAL_NB_ROWS_C2_Askey);
+ uCprog_table_3 = (UInt8)pObj->Config.RF_CAL_Map[uCounter - 1].uRFC_Cprog;
+
+ if(bCal)
+ {
+ // launch tracking filter calibration
+ ret = TDA18271CalibrateRF_C2_Askey(pObj, pRF_BAND_Map->uRF3, &uCprog_cal_3);
+ if (ret != TM_OK)
+ return ret;
+ }
+ else
+ {
+ // use tracking filter table value
+ uCprog_cal_3 = uCprog_table_3;
+ }
+
+ // calculate A2 coefficient
+ pRF_BAND_Map->uRF_A2 = ((uCprog_cal_3 - uCprog_table_3 - (uCprog_cal_2 - uCprog_table_2)) * 1000000)
+ / (Int32)((pRF_BAND_Map->uRF3 - pRF_BAND_Map->uRF2) / 1000000);
+
+ // calculate B2 coefficient
+ pRF_BAND_Map->uRF_B2 = uCprog_cal_2 - uCprog_table_2;
+
+ // return value
+ return TM_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+// FUNCTION: TDA18271ThermometerRead_C2_Askey:
+//
+// DESCRIPTION: Read die temperature
+//
+// RETURN: TMBSL_ERR_IIC_ERR
+// TM_OK
+//
+// NOTES:
+//-------------------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271ThermometerRead_C2_Askey (
+ ptmTDA18271Object_t_C2_Askey pObj, // I: Tuner unit number
+ UInt32* puValue // O: Read thermometer value
+ )
+{
+ tmErrorCode_t ret = TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ UInt32 uCounter = 0;
+
+ // test the Object
+ if (pObj == Null || pObj->init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey;
+
+ // switch thermometer on
+ pObj->I2CMap.uBx01.bF.TM_ON = 0x01;
+
+ // write byte THERMO_BYTE
+ if (TDA18271Write_C2_Askey(pObj,0x01,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // read byte THERMO_BYTE
+ if (TDA18271Read_C2_Askey (pObj, 0x00, 16) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // set & write TM_Range
+ if (((pObj->I2CMap.uBx01.bF.TM_D == 0x00) && (pObj->I2CMap.uBx01.bF.TM_Range == 0x01)) || ((pObj->I2CMap.uBx01.bF.TM_D == 0x08) && (pObj->I2CMap.uBx01.bF.TM_Range == 0x00)))
+ {
+ pObj->I2CMap.uBx01.bF.TM_Range = !(pObj->I2CMap.uBx01.bF.TM_Range);
+
+ // write byte THERMO_BYTE
+ if (TDA18271Write_C2_Askey(pObj,0x01,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ // wait 10ms
+ if (TDA18271Wait_C2_Askey(pObj,10) == False)
+ return TM_FALSE;
+
+ // read byte THERMO_BYTE
+ if (TDA18271Read_C2_Askey (pObj, 0x00, 16) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+ }
+
+ // search for TMVALUE corresponding to TM_D
+ uCounter = 0;
+ do uCounter ++;
+ while (pObj->I2CMap.uBx01.bF.TM_D > pObj->Config.THERMOMETER_Map[uCounter - 1].uTM_D && uCounter < TDA18271_THERMOMETER_NB_ROWS_C2_Askey);
+
+ // get TMVALUE value
+ if (pObj->I2CMap.uBx01.bF.TM_Range == 0x00)
+ *puValue = (UInt8)pObj->Config.THERMOMETER_Map[uCounter - 1].uTM_60_92;
+ else
+ *puValue = (UInt8)pObj->Config.THERMOMETER_Map[uCounter - 1].uTM_92_122;
+
+ // switch thermometer off
+ pObj->I2CMap.uBx01.bF.TM_ON = 0x00;
+
+ // write byte THERMO_BYTE
+ if (TDA18271Write_C2_Askey(pObj,0x01,1) != True)
+ return TMBSL_ERR_IIC_ERR_C2_Askey;
+
+ return TM_OK;
+} \ No newline at end of file
diff --git a/api/TDA18271_C2_Askey.h b/api/TDA18271_C2_Askey.h
new file mode 100644
index 0000000..cc1fcd9
--- /dev/null
+++ b/api/TDA18271_C2_Askey.h
@@ -0,0 +1,177 @@
+//-----------------------------------------------------------------------------
+// $Header:
+// (C) Copyright 2001 NXP Semiconductors, All rights reserved
+//
+// This source code and any compilation or derivative thereof is the sole
+// property of NXP Corporation and is provided pursuant to a Software
+// License Agreement. This code is the proprietary information of NXP
+// Corporation and is confidential in nature. Its use and dissemination by
+// any party other than NXP Corporation is strictly limited by the
+// confidential information provisions of the Agreement referenced above.
+//-----------------------------------------------------------------------------
+// FILE NAME: tmbslTDA18271_C2_Askey.h
+//
+// DESCRIPTION: define the object for the TDA18271_C2_Askey
+//
+// DOCUMENT REF: DVP Software Coding Guidelines v1.14
+// DVP Board Support Library Architecture Specification v0.5
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+#ifndef _TMBSL_TDA18271_C2_Askey_H //-----------------
+#define _TMBSL_TDA18271_C2_Askey_H
+
+//-----------------------------------------------------------------------------
+// Standard include files:
+//-----------------------------------------------------------------------------
+//
+
+//-----------------------------------------------------------------------------
+// Project include files:
+//-----------------------------------------------------------------------------
+//
+//#ifndef NXPFE
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+//#endif // NXPFE
+
+//-----------------------------------------------------------------------------
+// Types and defines:
+//-----------------------------------------------------------------------------
+//
+tmErrorCode_t
+TDA18271Init_C2_Askey (
+ tmUnitSelect_t TunerUnit // I: Tuner Object
+ );
+Bool_
+TDA18271InitTick_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj, // I: Tuner unit number
+ UInt16 wTime // I: time to wait forTDA18271Init
+ );
+Bool_
+TDA18271WaitTick_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj // I: Tuner unit number
+ );
+Bool_
+TDA18271Write_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj, // I: Tuner unit number
+ UInt8 uSubAddress,// I: sub address
+ UInt8 uNbData // I: nb of data
+ );
+Bool_
+TDA18271Read_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj, // I: Tuner unit number
+ UInt8 uSubAddress,// I: sub address
+ UInt8 uNbData // I: nb of data
+ );
+Bool_
+TDA18271Wait_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj, // I: Tuner unit number
+ UInt16 wTime // I: time to wait for
+ );
+Bool_
+TDA18271ShiftLog_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj, // I: Tuner unit number
+ UInt32 uNbRows // I: nb of lines
+ );
+tmErrorCode_t
+TDA18271SetStandardMode_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj, // I: tuner Object
+ tmTDA18271StandardMode_t_C2_Askey StandardMode// I: Standard mode of this device
+ );
+tmErrorCode_t
+TDA18271GetStandardMode_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj, // I: tuner Object
+ tmTDA18271StandardMode_t_C2_Askey *pStandardMode // I: Standard mode of this device
+ );
+tmErrorCode_t
+TDA18271SetPowerState_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj, // I: tuner Object
+ tmTDA18271PowerState_t_C2_Askey powerState // I: Power state of this device
+ );
+tmErrorCode_t
+TDA18271GetPowerState_C2_Askey(
+ ptmTDA18271Object_t_C2_Askey pObj, // I: tuner Object
+ tmTDA18271PowerState_t_C2_Askey *pPowerState// I: Power state of this device
+ );
+Bool_
+TDA18271CalcMAINPLL_C2_Askey (
+ ptmTDA18271Object_t_C2_Askey pObj, // I: tuner Object
+ UInt32 uLO // I: local oscillator frequency in hertz
+ );
+Bool_
+TDA18271CalcCALPLL_C2_Askey (
+ ptmTDA18271Object_t_C2_Askey pObj, // I: tuner Object
+ UInt32 uLO // I: local oscillator frequency in hertz
+ );
+tmErrorCode_t
+TDA18271CalcRFFilterCurve_C2_Askey (
+ ptmTDA18271Object_t_C2_Askey pObj // I: tuner Object
+ );
+tmErrorCode_t
+TDA18271RFTrackingFiltersInit_C2_Askey (
+ ptmTDA18271Object_t_C2_Askey pObj, // I: tuner Object
+ ptmTDA18271_RF_BAND_Map_t_C2_Askey pRF_BAND_Map // I: address of RF band map
+ );
+tmErrorCode_t
+TDA18271CalibrateRF_C2_Askey (
+ ptmTDA18271Object_t_C2_Askey pObj, // I: tuner Object
+ UInt32 uRF, // I: RF frequency in hertz
+ UInt8* puCprog // I: Address of the variable to output the Cprog value
+ );
+tmErrorCode_t
+TDA18271PowerScan_C2_Askey (
+ ptmTDA18271Object_t_C2_Askey pObj, // I: Tuner unit number
+ UInt32* puRF, // I/O: RF frequency in hertz
+ Bool_* pCal // O: Calibration allowed if pCal = True
+ );
+tmErrorCode_t
+TDA18271PowerScanInit_C2_Askey (
+ ptmTDA18271Object_t_C2_Askey pObj // I: Tuner unit number
+ );
+tmErrorCode_t
+TDA18271ThermometerRead_C2_Askey (
+ ptmTDA18271Object_t_C2_Askey pObj, // I: Tuner unit number
+ UInt32* puValue // O: Read thermometer value
+ );
+tmErrorCode_t
+allocInstance_C2_Askey (
+ UInt32 DeviceUnit, // I: Tuner unit number
+ pptmTDA18271Object_t_C2_Askey ppDrvObject // I: Tuner Object
+ );
+tmErrorCode_t
+deAllocInstance_C2_Askey (
+ UInt32 DeviceUnit // I: Tuner unit number
+ );
+tmErrorCode_t
+getInstance_C2_Askey (
+ tmUnitSelect_t DeviceUnit, // I: Tuner unit number
+ pptmTDA18271Object_t_C2_Askey ppDrvObject // I: Tuner Object
+ );
+tmErrorCode_t
+ tmbslTDA18271Init_C2_Askey(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ tmbslTuParam_t_C2_Askey Param // I: setup parameters
+ );
+tmErrorCode_t
+ tmbslTDA18271SetConfig_C2_Askey(
+ tmUnitSelect_t TunerUnit, // I: TunerUnit number
+ UInt32 uItemId, // I: Identifier of the item to modify
+ UInt32 uValue // I: Value to set for the config item
+ );
+tmErrorCode_t
+ tmbslTDA18271SetRf_C2_Askey(
+ tmUnitSelect_t TunerUnit, // I: Tuner unit number
+ UInt32 uRF // I: RF frequency in hertz
+ );
+
+//#ifndef NXPFE
+#ifdef __cplusplus
+}
+#endif
+//#endif // NXPFE
+
+#endif // TM<MODULE>_H //---------------
diff --git a/api/TDA18271local_C2.h b/api/TDA18271local_C2.h
new file mode 100644
index 0000000..195843f
--- /dev/null
+++ b/api/TDA18271local_C2.h
@@ -0,0 +1,891 @@
+//-----------------------------------------------------------------------------
+// $Header:
+// (C) Copyright 2001 NXP Semiconductors, All rights reserved
+//
+// This source code and any compilation or derivative thereof is the sole
+// property of NXP Corporation and is provided pursuant to a Software
+// License Agreement. This code is the proprietary information of NXP
+// Corporation and is confidential in nature. Its use and dissemination by
+// any party other than NXP Corporation is strictly limited by the
+// confidential information provisions of the Agreement referenced above.
+//-----------------------------------------------------------------------------
+// FILE NAME: tmbslTDA18271local_C2.h
+//
+// DESCRIPTION: define the Object for the TDA18271_C2
+//
+// DOCUMENT REF: DVP Software Coding Guidelines v1.14
+// DVP Board Support Library Architecture Specification v0.5
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+#ifndef _TMBSL_TDA18271LOCAL_C2_H //-----------------
+#define _TMBSL_TDA18271LOCAL_C2_H
+
+#include "type.h"
+
+//-----------------------------------------------------------------------------
+// Standard include files:
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Project include files:
+//-----------------------------------------------------------------------------
+//
+//#ifndef NXPFE
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+//#endif // NXPFE
+
+//-----------------------------------------------------------------------------
+// Types and defines:
+//-----------------------------------------------------------------------------
+//
+#define TMBSL_TDA18271_COMPONENT_NAME_C2 TDA18271_C2
+#define TMBSL_TDA18271_COMPONENT_NAME_STR_C2 "TDA18271_C2"
+
+#define _SYSTEMFUNC (pObj->SystemFunc)
+
+#define TDA18271_BSL_COMP_NUM_C2 3 // Major protocol change - Specification change required
+#define TDA18271_BSL_MAJOR_VER_C2 4 // Minor protocol change - Specification change required
+#define TDA18271_BSL_MINOR_VER_C2 3 // Software update - No protocol change - No specification change required
+
+
+//-------------
+// ERROR CODES
+//-------------
+#define TMBSL_ERR_TUNER_BASE_C2 0x80000000U
+#define TM_ERR_BAD_UNIT_NUMBER_C2 0x00000001U
+#define TM_ERR_NOT_INITIALIZED_C2 0x00000002U
+#define TM_ERR_BAD_PARAMETER_C2 0x00000003U
+#define TM_ERR_NOT_SUPPORTED_C2 0x00000004U
+#define TM_ERR_IIC_ERR_C2 0x00000005U
+// Invalid unit id
+#define TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2 \
+ (TMBSL_ERR_TUNER_BASE_C2 + TM_ERR_BAD_UNIT_NUMBER_C2)
+
+// Component is not initialized
+#define TMBSL_ERR_TUNER_NOT_INITIALIZED_C2 \
+ (TMBSL_ERR_TUNER_BASE_C2+ TM_ERR_NOT_INITIALIZED_C2)
+
+// Invalid input parameter
+#define TMBSL_ERR_TUNER_BAD_PARAMETER_C2 \
+ (TMBSL_ERR_TUNER_BASE_C2 + TM_ERR_BAD_PARAMETER_C2)
+
+// Function is not supported
+#define TMBSL_ERR_TUNER_NOT_SUPPORTED_C2 \
+ (TMBSL_ERR_TUNER_BASE_C2 + TM_ERR_NOT_SUPPORTED_C2)
+
+// Function is not supported
+#define TMBSL_ERR_IIC_ERR_C2 \
+ (TMBSL_ERR_TUNER_BASE_C2 + TM_ERR_IIC_ERR_C2)
+
+#define TDA18271_MAX_UNITS_C2 10 //
+#define TDA18271_NB_BYTES_C2 39 //
+#define TDA18271_LOG_NB_ROWS_C2 300 //
+#define TDA18271_LOG_BLANK_DATA_C2 256 //
+
+#define TDA18271_IR_MEAS_NB_COLUMNS_C2 2 //
+#define TDA18271_IR_CAL_NB_COLUMNS_C2 2 //
+#define TDA18271_BP_FILTER_NB_COLUMNS_C2 2 //
+#define TDA18271_RF_BAND_NB_COLUMNS_C2 12 //
+#define TDA18271_GAIN_TAPER_NB_COLUMNS_C2 2 //
+#define TDA18271_RF_CAL_NB_COLUMNS_C2 2 //
+#define TDA18271_RF_CAL_DC_OVER_DT_NB_COLUMNS_C2 2 //
+#define TDA18271_RF_CAL_KMCO_NB_COLUMNS_C2 4 //
+#define TDA18271_RF_CAL_CID_TARGET_NB_COLUMNS_C2 3 //
+#define TDA18271_CAL_PLL_NB_COLUMNS_C2 3 //
+#define TDA18271_MAIN_PLL_NB_COLUMNS_C2 3 //
+
+
+#define TDA18271_IR_MEAS_NB_ROWS_C2 3 //
+#define TDA18271_IR_CAL_NB_ROWS_C2 3 //
+#define TDA18271_BP_FILTER_NB_ROWS_C2 7 //
+#define TDA18271_RF_BAND_NB_ROWS_C2 7 //
+#define TDA18271_GAIN_TAPER_NB_ROWS_C2 85 //
+#define TDA18271_RF_CAL_NB_ROWS_C2 437 //
+#define TDA18271_RF_CAL_DC_OVER_DT_NB_ROWS_C2 101 //
+#define TDA18271_RF_CAL_KMCO_NB_ROWS_C2 5 //
+#define TDA18271_RF_CAL_CID_TARGET_NB_ROWS_C2 12 //
+#define TDA18271_CAL_PLL_NB_ROWS_C2 35 //
+#define TDA18271_MAIN_PLL_NB_ROWS_C2 40 //
+
+
+
+#define TDA18271_THERMOMETER_NB_COLUMNS_C2 3 //
+#define TDA18271_THERMOMETER_NB_ROWS_C2 16 //
+
+#define TDA18271_IDENTITY_IND_C2 0 //
+
+#define OM5770C2_BOARD_DEF_C2 0x57700002 // TDA8295C1 + TDA10046 + TDA18271
+#define OM5775_BOARD_DEF_C2 0x57750000 // 2xTDA8290C1 + 2xTDA10048 + 2xTDA18271
+
+#define OM5776_BOARD_DEF_C2 0x57760000 //
+#define OM5777_BOARD_DEF_C2 0x57770000 //
+#define OM5780_BOARD_DEF_C2 0x57800000 //
+#define OM5782_BOARD_DEF_C2 0x57820000 //
+#define OM5764_BOARD_DEF_C2 0x57640199 //
+#define CUSTOM_BOARD_DEF_C2 0x00000000 // custom
+#define OM57XX_STANDARD_DEF_C2 2
+
+#define RF_CAL_IF_FREQ_C2 1000000
+
+// types
+typedef char Int8; /* 8 bit unsigned integer */
+typedef long Int32; /* 32 bit integer */
+typedef unsigned long UInt32; /* 32 bit unsigned integer */
+typedef unsigned short UInt16; /* 16 bit unsigned integer */
+typedef unsigned char UInt8; /* 8 bit unsigned integer */
+typedef UInt32 tmErrorCode_t;
+typedef unsigned int Bool_; /* Boolean (True/False) */
+typedef int tmUnitSelect_t, *ptmUnitSelect_t;
+#define NULL 0
+
+#define TM_OK 0U /* Global success return status */
+#define TM_FALSE 0
+#define TM_TRUE 1
+
+#define True TM_TRUE
+#define False TM_FALSE
+#define OM5770C2_BOARD_DEF 0x57700002 //
+#define OM5775_BOARD_DEF 0x57750000 //
+#define OM5776_BOARD_DEF 0x57760000 //
+#define OM5777_BOARD_DEF 0x57770000 //
+#define OM5780_BOARD_DEF 0x57800000 //
+#define OM5782_BOARD_DEF 0x57820000 //
+#define OM5764_BOARD_DEF 0x57640199 //
+#define CUSTOM_BOARD_DEF 0x00000000 // custom
+#define OM57XX_STANDARD_DEF 2
+
+
+ typedef enum _tmTDA18271cfgIndex_t_C2 {
+ BOARD_C2 = 0,
+ STANDARD_C2 = 1,
+ FEINIT_C2 = 100,
+ IDENTITY_C2 = 102,
+ GETNBOFUNIT_C2 = 200,
+ BANDWIDTH_C2 = 300,
+ RFBAND_C2 = 302,
+ RF_C2,
+ ID_C2,
+ POR_C2,
+ MAINLOCK_C2,
+ PLRFAGC_C2 = 310,
+ POWERSTATE_C2 = 312,
+ PLRUN_C2 = 350,
+ TMVALUE_C2,
+ PLMODE_C2,
+ PLAGC1_C2,
+ PLAGC2_C2,
+ RFCALOK_C2,
+ IRCALOK_C2,
+ BPFILTER_C2,
+ GAINTAPER_C2,
+ LPFC_C2,
+ FMRFN_C2,
+ XTOUT_C2,
+ IFLEVEL_C2,
+ EXTENDEDREG_C2,
+ CALPOSTDIV_C2,
+ CALDIV_C2,
+ MAINPOSTDIV_C2,
+ MAINDIV_C2,
+ MAPNAME_C2,
+ MAPCOLUMN_C2,
+ MAPROW_C2,
+ MAPVALUE_C2,
+ READINIT_C2,
+ RFCAL_TCOMP_C2,
+ STATUSBYTE_C2 = 380,
+ PROTOCOLWAIT_C2 = 382,
+ STANDARDMODE_C2 = 400,
+ IF_C2 = 517,
+ PROTOCOLSTEP_C2,
+ } tmTDA18271cfgIndex_t_C2;
+
+ typedef enum _tmTDA18271PowerState_t_C2 {
+ tmPowerNormalMode_C2, // Device normal mode
+ tmPowerSleepMode_C2, // Device sleep mode
+ tmPowerStandbyWith16MHz_C2, // Device standby with 16Mhz
+ tmPowerStandbyWith16MHzAndLoopThrough_C2, // Device standby with 16Mhz and loop through
+ tmPowerStandbyWithLoopThrough_C2, // Device standby with loop through
+ tmPowerNotSupported_C2, // Not supported power mode
+ } tmTDA18271PowerState_t_C2, *ptmTDA18271PowerState_t_C2;
+
+ typedef enum _tmTDA18271StandardMode_t_C2 {
+ tmDigital_TV_ATSC_6MHz_C2, // Digital TV ATSC 6MHz
+ tmDigital_TV_DVBT_7MHz_C2, // Digital TV DVB-T 7MHz
+ tmDigital_TV_DVBT_8MHz_C2, // Digital TV DVB-T 8MHz
+ tmAnalog_TV_MN_C2, // Analog TV M/N
+ tmAnalog_TV_B_C2, // Analog TV B
+ tmAnalog_TV_GH_C2, // Analog TV G/H
+ tmAnalog_TV_I_C2, // Analog TV I
+ tmAnalog_TV_DK_C2, // Analog TV D/K
+ tmAnalog_TV_L_C2, // Analog TV L
+ tmAnalog_TV_LL_C2, // Analog TV L'
+ tmAnalog_FM_Radio_C2, // Analog FM Radio
+ tmDigital_CAL_C2, // Digital CAL mode
+ tmDigital_TV_QAM_6MHz_C2, // Digital TV QAM 6MHz
+ tmDigital_TV_QAM_8MHz_C2, // Digital TV QAM 8MHz
+ tmDigital_TV_ISDBT_6MHz_C2, // Digital TV ISDBT 6MHz
+ tmStandardNotSupported_C2, // Not supported standard
+ }tmTDA18271StandardMode_t_C2, *ptmTDA18271StandardMode_t_C2;
+// added
+// system function
+Bool_ SY_Write_C2(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+
+Bool_ SY_Read_C2(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+
+Bool_ SY_Write_Slave_C2(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+
+Bool_ SY_Read_Slave_C2(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+
+typedef struct _tmhalFEBslSystemFunc_t_C2
+{
+ Bool_ (*SY_Write_C2) (UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+ Bool_ (*SY_Read_C2) (UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+ UInt32 (*SY_GetTickPeriod) (void);
+ UInt32 (*SY_GetTickTime) (void);
+
+} tmhalFEBslSystemFunc_t_C2, *ptmhalFEBslSystemFunc_t_C2;
+
+typedef struct _tmbslTuParam_t_C2
+{
+ unsigned long uHwAddress;
+ tmhalFEBslSystemFunc_t_C2 systemFunc;
+} tmbslTuParam_t_C2, *ptmbslTuParam_t_C2;
+
+typedef struct tmSWVersion_C2
+{
+ UInt32 compatibilityNr; /* Interface compatibility number */
+ UInt32 majorVersionNr; /* Interface major version number */
+ UInt32 minorVersionNr; /* Interface minor version number */
+
+} tmSWVersion_t_C2, *ptmSWVersion_t_C2;
+
+// added
+
+ typedef enum _tmTDA18271MapName_t_C2 {
+ tmTDA18271_IR_MEAS_Map_C2, // Image rejection measurement map
+ tmTDA18271_IR_CAL_Map_C2, // Image rejection calibration map
+ tmTDA18271_BP_FILTER_Map_C2, // Band pass filter map
+ tmTDA18271_RF_BAND_Map_C2, // RF band map
+ tmTDA18271_GAIN_TAPER_Map_C2, // Gain tapper map
+ tmTDA18271_RF_CAL_Map_C2, // RF calibration map
+ tmTDA18271_RF_CAL_DC_OVER_DT_Map_C2, // RF calibration temperature adjustment map
+ tmTDA18271_RF_CAL_KMCO_Map_C2, // RF calibration K,M,COAmpl map
+ tmTDA18271_RF_CAL_CID_TARGET_Map_C2, // RF calibration CID target map
+ tmTDA18271_THERMOMETER_Map_C2, // Thermometer map
+ tmTDA18271_CAL_PLL_Map_C2, // Calibration PLL map
+ tmTDA18271_MAIN_PLL_Map_C2, // Main PLL map
+ tmTDA18271_I2C_Map_C2, // I2C map
+ } tmTDA18271MapName_t_C2, *ptmTDA18271MapName_t_C2;
+
+ typedef struct _tmTDA18271_IR_MEAS_Map_t_C2 {
+ UInt32 uRF_Max;
+ UInt32 uIR_Meas;
+ } tmTDA18271_IR_MEAS_Map_t_C2, *ptmTDA18271_IR_MEAS_Map_t_C2;
+
+ typedef struct _tmTDA18271_IR_CAL_Map_t_C2 {
+ UInt32 uRF;
+ UInt32 uIR_GStep;
+ } tmTDA18271_IR_CAL_Map_t_C2, *ptmTDA18271_IR_CAL_Map_t_C2;
+
+ typedef struct _tmTDA18271_BP_FILTER_Map_t_C2 {
+ UInt32 uRF_Max;
+ UInt32 uBP_Filter;
+ } tmTDA18271_BP_FILTER_Map_t_C2, *ptmTDA18271_BP_FILTER_Map_t_C2;
+
+ typedef struct _tmTDA18271_RF_BAND_Map_t_C2 {
+ UInt32 uRF_Max;
+ UInt32 uRF_Band;
+ UInt32 uRF1;
+ UInt32 uRF2;
+ UInt32 uRF3;
+ Int32 uRF_A1;
+ Int32 uRF_B1;
+ Int32 uRF_A2;
+ Int32 uRF_B2;
+ UInt32 uRF1_default;
+ UInt32 uRF2_default;
+ UInt32 uRF3_default;
+ } tmTDA18271_RF_BAND_Map_t_C2, *ptmTDA18271_RF_BAND_Map_t_C2;
+
+ typedef struct _tmTDA18271_GAIN_TAPER_Map_t_C2 {
+ UInt32 uRF_Max;
+ UInt32 uGain_Taper;
+ } tmTDA18271_GAIN_TAPER_Map_t_C2, *ptmTDA18271_GAIN_TAPER_Map_t_C2;
+
+ typedef struct _tmTDA18271_RF_CAL_Map_t_C2 {
+ UInt32 uRF_Max;
+ UInt32 uRFC_Cprog;
+ } tmTDA18271_RF_CAL_Map_t_C2, *ptmTDA18271_RF_CAL_Map_t_C2;
+
+ typedef struct _tmTDA18271_RF_CAL_DC_OVER_DT_Map_t_C2 {
+ UInt32 uRF_Max;
+ UInt32 udC_Over_dT;
+ } tmTDA18271_RF_CAL_DC_OVER_DT_Map_t_C2, *ptmTDA18271_RF_CAL_DC_OVER_DT_Map_t_C2;
+
+ typedef struct _tmTDA18271_RF_CAL_KMCO_Map_t_C2 {
+ UInt32 uRF_Max;
+ UInt32 uK;
+ UInt32 uM;
+ UInt32 uCOAmpl;
+ } tmTDA18271_RF_CAL_KMCO_Map_t_C2, *ptmTDA18271_RF_CAL_KMCO_Map_t_C2;
+
+ typedef struct _tmTDA18271_RF_CAL_CID_TARGET_Map_t_C2 {
+ UInt32 uRF_Max;
+ UInt32 uCID_Target;
+ UInt32 uCount_Limit;
+ } tmTDA18271_RF_CAL_CID_TARGET_Map_t_C2, *ptmTDA18271_RF_CAL_CID_TARGET_Map_t_C2;
+
+ typedef struct _tmTDA18271_THERMOMETER_Map_t_C2 {
+ UInt32 uTM_D;
+ UInt32 uTM_60_92;
+ UInt32 uTM_92_122;
+ } tmTDA18271_THERMOMETER_Map_t_C2, *ptmTDA18271_THERMOMETER_Map_t_C2;
+
+ typedef struct _tmTDA18271_PLL_Map_t_C2 {
+ UInt32 uLO_Max;
+ UInt32 uPost_Div;
+ UInt32 uDiv;
+ } tmTDA18271_PLL_Map_t_C2, *ptmTDA18271_PLL_Map_t_C2;
+
+ typedef struct _tmTDA18271Config_t_C2 {
+ UInt32 uBoard;
+ UInt32 uStandard;
+ UInt32 uRF;
+ UInt32 uIF;
+ //UInt32 uBW;
+ UInt32 uTMVALUE_RFCAL;
+ UInt32 uPLMODE;
+ Int32 uRFCAL_TCOMP;
+ UInt32 uMAPNAME;
+ UInt32 uMAPCOLUMN;
+ UInt32 uMAPROW;
+ UInt32 uPROTOCOLSTEP;
+ tmTDA18271_IR_MEAS_Map_t_C2 IR_MEAS_Map[TDA18271_IR_MEAS_NB_ROWS_C2];
+ tmTDA18271_IR_CAL_Map_t_C2 IR_CAL_Map[TDA18271_IR_CAL_NB_ROWS_C2];
+ tmTDA18271_BP_FILTER_Map_t_C2 BP_FILTER_Map[TDA18271_BP_FILTER_NB_ROWS_C2];
+ tmTDA18271_RF_BAND_Map_t_C2 RF_BAND_Map[TDA18271_RF_BAND_NB_ROWS_C2];
+ tmTDA18271_GAIN_TAPER_Map_t_C2 GAIN_TAPER_Map[TDA18271_GAIN_TAPER_NB_ROWS_C2];
+ tmTDA18271_RF_CAL_Map_t_C2 RF_CAL_Map[TDA18271_RF_CAL_NB_ROWS_C2];
+ tmTDA18271_RF_CAL_DC_OVER_DT_Map_t_C2 RF_CAL_DC_OVER_DT_Map[TDA18271_RF_CAL_DC_OVER_DT_NB_ROWS_C2];
+ tmTDA18271_RF_CAL_KMCO_Map_t_C2 RF_CAL_KMCO_Map[TDA18271_RF_CAL_KMCO_NB_ROWS_C2];
+ tmTDA18271_RF_CAL_CID_TARGET_Map_t_C2 RF_CAL_CID_TARGET_Map[TDA18271_RF_CAL_CID_TARGET_NB_ROWS_C2];
+ tmTDA18271_THERMOMETER_Map_t_C2 THERMOMETER_Map[TDA18271_THERMOMETER_NB_ROWS_C2];
+ tmTDA18271_PLL_Map_t_C2 CAL_PLL_Map[TDA18271_CAL_PLL_NB_ROWS_C2];
+ tmTDA18271_PLL_Map_t_C2 MAIN_PLL_Map[TDA18271_MAIN_PLL_NB_ROWS_C2];
+ } tmTDA18271Config_t_C2, *ptmTDA18271Config_t_C2;
+
+ typedef struct _tmTDA18271I2CMap_t_C2
+ {
+ union
+ {
+ UInt8 ID_BYTE; // address 0x00
+ // Chip identification byte
+ struct
+ {
+ UInt8 ID :7; // Chip identification number
+ UInt8 UNUSED :1; // Reserved, must be written as 1
+ }bF;
+ }uBx00;
+
+ union
+ {
+ UInt8 THERMO_BYTE; // address 0x01
+ // Thermometer byte
+ struct
+ {
+ UInt8 TM_D :4; // Data from die temperature measurement
+ UInt8 TM_ON :1; // Enable Die temperature measurement
+ UInt8 TM_Range :1; // Range selection bit for the internal die sensor
+ // 0: 60 to 92°C
+ // 1: 92 to 122°C
+ UInt8 MAIN_Lock :1; // Indicate that the MAIN synthesizer is locked to the programmed frequency
+ // 0: Not Locked
+ // 1: Locked
+ UInt8 POR :1; // Power on reset bit
+ // This bit is set to 1 each time the power supply falls below a certain level (around 1.4V) and is reset after a read operation ending with a stop condition
+ }bF;
+ }uBx01;
+
+ union
+ {
+ UInt8 POWER_LEVEL_BYTE; // address 0x02
+ // Power level byte
+ struct
+ {
+ UInt8 Power_Level_7_to_0:8;// Power level indicator value
+ }bF;
+ }uBx02;
+
+ union
+ {
+ UInt8 EASY_PROG_BYTE_1; // address 0x03
+ // Easy programming byte 1
+ struct
+ {
+ UInt8 BP_Filter :3; // RF band-pass filter selection (H3/H5)
+ UInt8 IR_CAL_OK :1; // Indicate that the 3 Image rejection calibration procedure (Flow, Fmid, Fhigh) have been successful
+ UInt8 RF_CAL_OK :1; // Indicate that the RF tracking filter calibration procedure has been successful
+ UInt8 UNUSED :1; // Reserved
+ UInt8 Dis_Power_level:1;// Disable power level measurement
+ // 0: Power measurement valid
+ // 1: Power measurement not guaranted
+ UInt8 Power_Level_8 :1; // Power level indicator value
+ }bF;
+ }uBx03;
+
+ union
+ {
+ UInt8 EASY_PROG_BYTE_2; // address 0x04
+ // Easy programming byte 2
+ struct
+ {
+ UInt8 Gain_Taper :5; // Gain taper value
+ // 0 : max atten. (end of Band)
+ // 31: min atten. (start of Band)
+ UInt8 RF_Band :3; // RF tracking filter band and sub-band selection
+ }bF;
+ }uBx04;
+
+ union
+ {
+ UInt8 EASY_PROG_BYTE_3; // address 0x05
+ // Easy programming byte 3
+ struct
+ {
+ UInt8 Std :5; // Standard selection
+ UInt8 SM_XT :1; // XTAL output sleep mode
+ UInt8 SM_LT :1; // Loop through sleep mode
+ UInt8 SM :1; // General sleep mode
+ }bF;
+ }uBx05;
+
+ union
+ {
+ UInt8 EASY_PROG_BYTE_4; // address 0x06
+ // Easy programming byte 4
+ struct
+ {
+ UInt8 CAL_Mode :2; // calibration mode selection
+ UInt8 IF_Level :3; // IF output level selection
+ UInt8 Xtout_400mV :1; // XTAL output level optional selection
+ UInt8 XTout_ON :1; // Enable 16MHz on XTAL output
+ UInt8 FM_RFn :1; // FM or RF input selection
+ }bF;
+ }uBx06;
+
+ union
+ {
+ UInt8 EASY_PROG_BYTE_5; // address 0x07
+ // Easy programming byte 5
+ struct
+ {
+ UInt8 IR_Meas :3; // Image rejection measurement mode
+ UInt8 I2C_Xtout_Asym:1; // Reserved
+ UInt8 IR_Gstep :3; // Gain step for image rejection measurement. Depends on frequency
+ UInt8 Extended_Reg :1; // Enable the extended byte addressing
+ // 0: Limited byte (&h00:&h0F)
+ // 1: Extended byte (&h00:&h26)
+ }bF;
+ }uBx07;
+
+ union
+ {
+ UInt8 CAL_POST_DIV_BYTE; // address 0x08
+ // CAL post divider byte
+ struct
+ {
+ UInt8 CALPostDiv :7; // CAL post divider
+ UInt8 RUF_0 :1; // Reserved
+ }bF;
+ }uBx08;
+
+ union
+ {
+ UInt8 CAL_DIV_BYTE_1; // address 0x09
+ // CAL divider byte 1
+ struct
+ {
+ UInt8 CAL_Div_22_to_16:7;// CAL divider value 22 to 16
+ UInt8 RUF_1 :1; // Reserved
+ }bF;
+ }uBx09;
+
+ union
+ {
+ UInt8 CAL_DIV_BYTE_2; // address 0x0A
+ // CAL divider byte 2
+ struct
+ {
+ UInt8 CAL_Div_15_to_8:8;// CAL divider value 15 to 8
+ }bF;
+ }uBx0A;
+
+ union
+ {
+ UInt8 CAL_DIV_BYTE_3; // address 0x0B
+ // CAL divider byte 3
+ struct
+ {
+ UInt8 CAL_Div_7_to_0:8; // CAL divider value 7 to 0
+ }bF;
+ }uBx0B;
+
+ union
+ {
+ UInt8 MAIN_POST_DIV_BYTE; // address 0x0C
+ // MAIN post divider byte
+ struct
+ {
+ UInt8 MAIN_Post_Div :7; // MAIN post divider value
+ UInt8 IF_notch :1; // Reserved
+ }bF;
+ }uBx0C;
+
+ union
+ {
+ UInt8 MAIN_DIV_BYTE_1; // address 0x0D
+ // MAIN divider byte 1
+ struct
+ {
+ UInt8 MAIN_Div_22_to_16:7;// MAIN divider value 22 to 16
+ UInt8 RUF_2 :1; // Reserved
+ }bF;
+ }uBx0D;
+
+ union
+ {
+ UInt8 MAIN_DIV_BYTE_2; // address 0x0E
+ // MAIN divider byte 2
+ struct
+ {
+ UInt8 MAIN_Div_15_to_8:8;// MAIN divider value 15 to 8
+ }bF;
+ }uBx0E;
+
+ union
+ {
+ UInt8 MAIN_DIV_BYTE_3; // address 0x0F
+ // MAIN divider byte 3
+ struct
+ {
+ UInt8 MAIN_Div_7_to_0:8;// MAIN divider value 7 to 0
+ }bF;
+ }uBx0F;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_1; // address 0x10
+ // extended byte 1
+ struct
+ {
+ UInt8 AGC1_firstn :1; //
+ UInt8 AGC1_always_mastern:1;//
+ UInt8 CALVCO_forLOn :1; //
+ UInt8 UNUSED :1; // Reserved
+ }bF;
+ }uBx10;
+
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_2; // address 0x11
+ }uBx11; // extended byte 2
+
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_3; // address 0x12
+ }uBx12; // extended byte 3
+
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_4; // address 0x13
+ // extended byte 4
+ struct
+ {
+ UInt8 UNUSED_1 :5; // Reserved
+ UInt8 LO_ForceSrce :1; //
+ UInt8 UNUSED_2 :2; // Reserved
+ }bF;
+ }uBx13;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_5; // address 0x14
+ }uBx14; // extended byte 5
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_6; // address 0x15
+ }uBx15; // extended byte 6
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_7; // address 0x16
+ // extended byte 7
+ struct
+ {
+ UInt8 CAL_Lock :1;
+ UInt8 UNUSED_1 :4; // Reserved
+ UInt8 CAL_ForceSrce :1; //
+ UInt8 UNUSED_2 :2; // Reserved
+ }bF;
+ }uBx16;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_8; // address 0x17
+ // extended byte 8
+ struct
+ {
+ UInt8 UNUSED :7; // Reserved
+ UInt8 CID_Alarm :1; //
+ }bF;
+ }uBx17;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_9; // address 0x18
+ }uBx18; // extended byte 9
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_10; // address 0x19
+ // extended byte 10
+ struct
+ {
+ UInt8 CID_Gain :6; //
+ UInt8 UNUSED :2; // Reserved
+ }bF;
+ }uBx19;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_11; // address 0x1A
+ }uBx1A; // extended byte 11
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_12; // address 0x1B
+ // extended byte 12
+ struct
+ {
+ UInt8 UNUSED_1 :4; // Reserved
+ UInt8 PD_AGC2_Det :1; //
+ UInt8 PD_AGC1_Det :1; //
+ UInt8 UNUSED_2 :2; // Reserved
+ }bF;
+ }uBx1B;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_13; // address 0x1C
+ // extended byte 13
+ struct
+ {
+ UInt8 UNUSED_1 :2; // Reserved
+ UInt8 RFC_M :2; //
+ UInt8 RFC_K :3; //
+ UInt8 UNUSED_2 :1; // Reserved
+ }bF;
+ }uBx1C;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_14; // address 0x1D
+ // extended byte 14
+ UInt8 RFC_Cprog;
+ }uBx1D;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_15; // address 0x1E
+ }uBx1E; // extended byte 15
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_16; // address 0x1F
+ }uBx1F; // extended byte 16
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_17; // address 0x20
+ }uBx20; // extended byte 17
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_18; // address 0x21
+ // extended byte 18
+ struct
+ {
+ UInt8 AGC1_Gain :2; //
+ UInt8 UNUSED :5; // Reserved
+ UInt8 AGC1_loop_off :1; //
+ }bF;
+ }uBx21;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_19; // address 0x22
+ }uBx22; // extended byte 19
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_20; // address 0x23
+ // extended byte 20
+ struct
+ {
+ UInt8 UNUSED_1 :5; // Reserved
+ UInt8 Force_Lock :1; //
+ UInt8 UNUSED_2 :2; // Reserved
+ }bF;
+ }uBx23;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_21; // address 0x24
+ // extended byte 21
+ struct
+ {
+ UInt8 AGC2_Gain :2; //
+ UInt8 UNUSED :5; // Reserved
+ UInt8 AGC2_loop_off :1; //
+ }bF;
+ }uBx24;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_22; // address 0x25
+ }uBx25; // extended byte 22
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_23; // address 0x26
+ // extended byte 23
+ struct
+ {
+ UInt8 UNUSED_1 :1; // Reserved
+ UInt8 LP_Fc :1; //
+ UInt8 ForceLP_Fc2_En:1; //
+ UInt8 UNUSED_2 :3; // Reserved
+ UInt8 FM_LNAGain :2; //
+ }bF;
+ }uBx26;
+
+ } tmTDA18271I2CMap_t_C2, *ptmTDA18271I2CMap_t_C2;
+
+typedef struct _tmAFAInfo_t_C2 {
+ Demodulator* demodulator;
+ UInt8 chip;
+} tmAFAInfo_t_C2, *ptmAFAInfo_t_C2;
+
+typedef struct _tmTDA18271Object_t_C2 {
+ tmAFAInfo_t_C2 AFAInfo_C2;
+ tmUnitSelect_t TunerUnit;
+ Bool_ init;
+ UInt32 uHwAddress;
+/*#ifdef NXPFE
+ tmdlDefaultGCRoot<tmdlDefaultDeviceDriver::tmhalFEBslSystemFunc_c^> SystemFunc;
+#else*/
+ tmhalFEBslSystemFunc_t_C2 SystemFunc;
+//#endif
+ tmTDA18271PowerState_t_C2 curPowerState;
+ tmTDA18271StandardMode_t_C2 StandardMode;
+ tmTDA18271Config_t_C2 Config;
+ tmTDA18271I2CMap_t_C2 I2CMap;
+ UInt32 I2CLog[TDA18271_LOG_NB_ROWS_C2][TDA18271_NB_BYTES_C2 + 2];
+ UInt32 uTickEnd;
+} tmTDA18271Object_t_C2, *ptmTDA18271Object_t_C2, **pptmTDA18271Object_t_C2;
+
+ typedef struct _tmTDA18271VbI2CData_t_C2 {
+ UInt32 h00;
+ UInt32 h01;
+ UInt32 h02;
+ UInt32 h03;
+ UInt32 h04;
+ UInt32 h05;
+ UInt32 h06;
+ UInt32 h07;
+ UInt32 h08;
+ UInt32 h09;
+ UInt32 h0A;
+ UInt32 h0B;
+ UInt32 h0C;
+ UInt32 h0D;
+ UInt32 h0E;
+ UInt32 h0F;
+ UInt32 h10;
+ UInt32 h11;
+ UInt32 h12;
+ UInt32 h13;
+ UInt32 h14;
+ UInt32 h15;
+ UInt32 h16;
+ UInt32 h17;
+ UInt32 h18;
+ UInt32 h19;
+ UInt32 h1A;
+ UInt32 h1B;
+ UInt32 h1C;
+ UInt32 h1D;
+ UInt32 h1E;
+ UInt32 h1F;
+ UInt32 h20;
+ UInt32 h21;
+ UInt32 h22;
+ UInt32 h23;
+ UInt32 h24;
+ UInt32 h25;
+ UInt32 h26;
+ UInt32 I2CAddress;
+ UInt32 I2CCommResult;
+ } tmTDA18271VbI2CData_t_C2, *ptmTDA18271VbI2CData_t_C2;
+
+//-----------------------------------------------------------------------------
+// Function:
+//-----------------------------------------------------------------------------
+//
+ Bool_
+ TDA18271Wrapper_C2 (
+ ptmTDA18271Object_t_C2 pObj, // I: Tuner unit number
+ UInt32 uHwAddress, // I: Tuner unit I2C address
+ UInt32 uLptPort, // I: I2C interface LPT port
+ UInt32 uI2cSpeed, // I: I2C interface speed
+ char* uParamTunerNumber // I: Tuner unit number
+ );
+
+ Bool_
+ TDA18271WrapperClose_C2();
+
+//#ifndef NXPFE
+#ifdef __cplusplus
+}
+#endif
+//#endif //NXPFE
+
+#endif // _TMBSL_TDA18271LOCAL_H_C2 //---------------
diff --git a/api/TDA18271local_C2_Askey.h b/api/TDA18271local_C2_Askey.h
new file mode 100644
index 0000000..8560675
--- /dev/null
+++ b/api/TDA18271local_C2_Askey.h
@@ -0,0 +1,891 @@
+//-----------------------------------------------------------------------------
+// $Header:
+// (C) Copyright 2001 NXP Semiconductors, All rights reserved
+//
+// This source code and any compilation or derivative thereof is the sole
+// property of NXP Corporation and is provided pursuant to a Software
+// License Agreement. This code is the proprietary information of NXP
+// Corporation and is confidential in nature. Its use and dissemination by
+// any party other than NXP Corporation is strictly limited by the
+// confidential information provisions of the Agreement referenced above.
+//-----------------------------------------------------------------------------
+// FILE NAME: tmbslTDA18271local_C2_Askey.h
+//
+// DESCRIPTION: define the Object for the TDA18271_C2_Askey
+//
+// DOCUMENT REF: DVP Software Coding Guidelines v1.14
+// DVP Board Support Library Architecture Specification v0.5
+//
+// NOTES:
+//-----------------------------------------------------------------------------
+//
+#ifndef _TMBSL_TDA18271LOCAL_C2_Askey_H //-----------------
+#define _TMBSL_TDA18271LOCAL_C2_Askey_H
+
+#include "type.h"
+
+//-----------------------------------------------------------------------------
+// Standard include files:
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Project include files:
+//-----------------------------------------------------------------------------
+//
+//#ifndef NXPFE
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+//#endif // NXPFE
+
+//-----------------------------------------------------------------------------
+// Types and defines:
+//-----------------------------------------------------------------------------
+//
+#define TMBSL_TDA18271_COMPONENT_NAME_C2_Askey TDA18271_C2_Askey
+#define TMBSL_TDA18271_COMPONENT_NAME_STR_C2_Askey "TDA18271_C2_Askey"
+
+#define _SYSTEMFUNC (pObj->SystemFunc)
+
+#define TDA18271_BSL_COMP_NUM_C2_Askey 3 // Major protocol change - Specification change required
+#define TDA18271_BSL_MAJOR_VER_C2_Askey 4 // Minor protocol change - Specification change required
+#define TDA18271_BSL_MINOR_VER_C2_Askey 3 // Software update - No protocol change - No specification change required
+#define TDA18271_BSL_SUB_VER_C2_Askey 0 // Askey for through TTL3200 AV-In model authentication
+
+//-------------
+// ERROR CODES
+//-------------
+#define TMBSL_ERR_TUNER_BASE_C2_Askey 0x80000000U
+#define TM_ERR_BAD_UNIT_NUMBER_C2_Askey 0x00000001U
+#define TM_ERR_NOT_INITIALIZED_C2_Askey 0x00000002U
+#define TM_ERR_BAD_PARAMETER_C2_Askey 0x00000003U
+#define TM_ERR_NOT_SUPPORTED_C2_Askey 0x00000004U
+#define TM_ERR_IIC_ERR_C2_Askey 0x00000005U
+// Invalid unit id
+#define TMBSL_ERR_TUNER_BAD_UNIT_NUMBER_C2_Askey \
+ (TMBSL_ERR_TUNER_BASE_C2_Askey + TM_ERR_BAD_UNIT_NUMBER_C2_Askey)
+
+// Component is not initialized
+#define TMBSL_ERR_TUNER_NOT_INITIALIZED_C2_Askey \
+ (TMBSL_ERR_TUNER_BASE_C2_Askey+ TM_ERR_NOT_INITIALIZED_C2_Askey)
+
+// Invalid input parameter
+#define TMBSL_ERR_TUNER_BAD_PARAMETER_C2_Askey \
+ (TMBSL_ERR_TUNER_BASE_C2_Askey + TM_ERR_BAD_PARAMETER_C2_Askey)
+
+// Function is not supported
+#define TMBSL_ERR_TUNER_NOT_SUPPORTED_C2_Askey \
+ (TMBSL_ERR_TUNER_BASE_C2_Askey + TM_ERR_NOT_SUPPORTED_C2_Askey)
+
+// Function is not supported
+#define TMBSL_ERR_IIC_ERR_C2_Askey \
+ (TMBSL_ERR_TUNER_BASE_C2_Askey + TM_ERR_IIC_ERR_C2_Askey)
+
+#define TDA18271_MAX_UNITS_C2_Askey 10 //
+#define TDA18271_NB_BYTES_C2_Askey 39 //
+#define TDA18271_LOG_NB_ROWS_C2_Askey 300 //
+#define TDA18271_LOG_BLANK_DATA_C2_Askey 256 //
+
+#define TDA18271_IR_MEAS_NB_COLUMNS_C2_Askey 2 //
+#define TDA18271_IR_CAL_NB_COLUMNS_C2_Askey 2 //
+#define TDA18271_BP_FILTER_NB_COLUMNS_C2_Askey 2 //
+#define TDA18271_RF_BAND_NB_COLUMNS_C2_Askey 12 //
+#define TDA18271_GAIN_TAPER_NB_COLUMNS_C2_Askey 2 //
+#define TDA18271_RF_CAL_NB_COLUMNS_C2_Askey 2 //
+#define TDA18271_RF_CAL_DC_OVER_DT_NB_COLUMNS_C2_Askey 2 //
+#define TDA18271_RF_CAL_KMCO_NB_COLUMNS_C2_Askey 4 //
+#define TDA18271_RF_CAL_CID_TARGET_NB_COLUMNS_C2_Askey 3 //
+#define TDA18271_CAL_PLL_NB_COLUMNS_C2_Askey 3 //
+#define TDA18271_MAIN_PLL_NB_COLUMNS_C2_Askey 3 //
+
+
+#define TDA18271_IR_MEAS_NB_ROWS_C2_Askey 3 //
+#define TDA18271_IR_CAL_NB_ROWS_C2_Askey 3 //
+#define TDA18271_BP_FILTER_NB_ROWS_C2_Askey 7 //
+#define TDA18271_RF_BAND_NB_ROWS_C2_Askey 7 //
+#define TDA18271_GAIN_TAPER_NB_ROWS_C2_Askey 85 //
+#define TDA18271_RF_CAL_NB_ROWS_C2_Askey 437 //
+#define TDA18271_RF_CAL_DC_OVER_DT_NB_ROWS_C2_Askey 101 //
+#define TDA18271_RF_CAL_KMCO_NB_ROWS_C2_Askey 5 //
+#define TDA18271_RF_CAL_CID_TARGET_NB_ROWS_C2_Askey 12 //
+#define TDA18271_CAL_PLL_NB_ROWS_C2_Askey 35 //
+#define TDA18271_MAIN_PLL_NB_ROWS_C2_Askey 40 //
+
+
+
+#define TDA18271_THERMOMETER_NB_COLUMNS_C2_Askey 3 //
+#define TDA18271_THERMOMETER_NB_ROWS_C2_Askey 16 //
+
+#define TDA18271_IDENTITY_IND_C2_Askey 0 //
+
+#define OM5770C2_BOARD_DEF_C2_Askey 0x57700002 // TDA8295C1 + TDA10046 + TDA18271
+#define OM5775_BOARD_DEF_C2_Askey 0x57750000 // 2xTDA8290C1 + 2xTDA10048 + 2xTDA18271
+
+#define OM5776_BOARD_DEF_C2_Askey 0x57760000 //
+#define OM5777_BOARD_DEF_C2_Askey 0x57770000 //
+#define OM5780_BOARD_DEF_C2_Askey 0x57800000 //
+#define OM5782_BOARD_DEF_C2_Askey 0x57820000 //
+#define OM5764_BOARD_DEF_C2_Askey 0x57640199 //
+#define CUSTOM_BOARD_DEF_C2_Askey 0x00000000 // custom
+#define OM57XX_STANDARD_DEF_C2_Askey 2
+
+#define RF_CAL_IF_FREQ_C2_Askey 1000000
+
+// types
+typedef char Int8; /* 8 bit unsigned integer */
+typedef long Int32; /* 32 bit integer */
+typedef unsigned long UInt32; /* 32 bit unsigned integer */
+typedef unsigned short UInt16; /* 16 bit unsigned integer */
+typedef unsigned char UInt8; /* 8 bit unsigned integer */
+typedef UInt32 tmErrorCode_t;
+typedef unsigned int Bool_; /* Boolean (True/False) */
+typedef int tmUnitSelect_t, *ptmUnitSelect_t;
+#define NULL 0
+
+#define TM_OK 0U /* Global success return status */
+#define TM_FALSE 0
+#define TM_TRUE 1
+
+#define True TM_TRUE
+#define False TM_FALSE
+#define OM5770C2_BOARD_DEF 0x57700002 //
+#define OM5775_BOARD_DEF 0x57750000 //
+#define OM5776_BOARD_DEF 0x57760000 //
+#define OM5777_BOARD_DEF 0x57770000 //
+#define OM5780_BOARD_DEF 0x57800000 //
+#define OM5782_BOARD_DEF 0x57820000 //
+#define OM5764_BOARD_DEF 0x57640199 //
+#define CUSTOM_BOARD_DEF 0x00000000 // custom
+#define OM57XX_STANDARD_DEF 2
+
+
+ typedef enum _tmTDA18271cfgIndex_t_C2_Askey {
+ BOARD_C2_Askey = 0,
+ STANDARD_C2_Askey = 1,
+ FEINIT_C2_Askey = 100,
+ IDENTITY_C2_Askey = 102,
+ GETNBOFUNIT_C2_Askey = 200,
+ BANDWIDTH_C2_Askey = 300,
+ RFBAND_C2_Askey = 302,
+ RF_C2_Askey,
+ ID_C2_Askey,
+ POR_C2_Askey,
+ MAINLOCK_C2_Askey,
+ PLRFAGC_C2_Askey = 310,
+ POWERSTATE_C2_Askey = 312,
+ PLRUN_C2_Askey = 350,
+ TMVALUE_C2_Askey,
+ PLMODE_C2_Askey,
+ PLAGC1_C2_Askey,
+ PLAGC2_C2_Askey,
+ RFCALOK_C2_Askey,
+ IRCALOK_C2_Askey,
+ BPFILTER_C2_Askey,
+ GAINTAPER_C2_Askey,
+ LPFC_C2_Askey,
+ FMRFN_C2_Askey,
+ XTOUT_C2_Askey,
+ IFLEVEL_C2_Askey,
+ EXTENDEDREG_C2_Askey,
+ CALPOSTDIV_C2_Askey,
+ CALDIV_C2_Askey,
+ MAINPOSTDIV_C2_Askey,
+ MAINDIV_C2_Askey,
+ MAPNAME_C2_Askey,
+ MAPCOLUMN_C2_Askey,
+ MAPROW_C2_Askey,
+ MAPVALUE_C2_Askey,
+ READINIT_C2_Askey,
+ RFCAL_TCOMP_C2_Askey,
+ STATUSBYTE_C2_Askey = 380,
+ PROTOCOLWAIT_C2_Askey = 382,
+ STANDARDMODE_C2_Askey = 400,
+ IF_C2_Askey = 517,
+ PROTOCOLSTEP_C2_Askey,
+ } tmTDA18271cfgIndex_t_C2_Askey;
+
+ typedef enum _tmTDA18271PowerState_t_C2_Askey {
+ tmPowerNormalMode_C2_Askey, // Device normal mode
+ tmPowerSleepMode_C2_Askey, // Device sleep mode
+ tmPowerStandbyWith16MHz_C2_Askey, // Device standby with 16Mhz
+ tmPowerStandbyWith16MHzAndLoopThrough_C2_Askey, // Device standby with 16Mhz and loop through
+ tmPowerStandbyWithLoopThrough_C2_Askey, // Device standby with loop through
+ tmPowerNotSupported_C2_Askey, // Not supported power mode
+ } tmTDA18271PowerState_t_C2_Askey, *ptmTDA18271PowerState_t_C2_Askey;
+
+ typedef enum _tmTDA18271StandardMode_t_C2_Askey {
+ tmDigital_TV_ATSC_6MHz_C2_Askey, // Digital TV ATSC 6MHz
+ tmDigital_TV_DVBT_7MHz_C2_Askey, // Digital TV DVB-T 7MHz
+ tmDigital_TV_DVBT_8MHz_C2_Askey, // Digital TV DVB-T 8MHz
+ tmAnalog_TV_MN_C2_Askey, // Analog TV M/N
+ tmAnalog_TV_B_C2_Askey, // Analog TV B
+ tmAnalog_TV_GH_C2_Askey, // Analog TV G/H
+ tmAnalog_TV_I_C2_Askey, // Analog TV I
+ tmAnalog_TV_DK_C2_Askey, // Analog TV D/K
+ tmAnalog_TV_L_C2_Askey, // Analog TV L
+ tmAnalog_TV_LL_C2_Askey, // Analog TV L'
+ tmAnalog_FM_Radio_C2_Askey, // Analog FM Radio
+ tmDigital_CAL_C2_Askey, // Digital CAL mode
+ tmDigital_TV_QAM_6MHz_C2_Askey, // Digital TV QAM 6MHz
+ tmDigital_TV_QAM_8MHz_C2_Askey, // Digital TV QAM 8MHz
+ tmDigital_TV_ISDBT_6MHz_C2_Askey, // Digital TV ISDBT 6MHz
+ tmStandardNotSupported_C2_Askey, // Not supported standard
+ }tmTDA18271StandardMode_t_C2_Askey, *ptmTDA18271StandardMode_t_C2_Askey;
+// added
+// system function
+Bool_ SY_Write_C2_Askey(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+
+Bool_ SY_Read_C2_Askey(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+
+Bool_ SY_Write_Slave_C2_Askey(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+
+Bool_ SY_Read_Slave_C2_Askey(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+
+typedef struct _tmhalFEBslSystemFunc_t_C2_Askey
+{
+ Bool_ (*SY_Write_C2_Askey) (UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+ Bool_ (*SY_Read_C2_Askey) (UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+ UInt32 (*SY_GetTickPeriod) (void);
+ UInt32 (*SY_GetTickTime) (void);
+
+} tmhalFEBslSystemFunc_t_C2_Askey, *ptmhalFEBslSystemFunc_t_C2_Askey;
+
+typedef struct _tmbslTuParam_t_C2_Askey
+{
+ unsigned long uHwAddress;
+ tmhalFEBslSystemFunc_t_C2_Askey systemFunc;
+} tmbslTuParam_t_C2_Askey, *ptmbslTuParam_t_C2_Askey;
+
+typedef struct tmSWVersion_C2_Askey
+{
+ UInt32 compatibilityNr; /* Interface compatibility number */
+ UInt32 majorVersionNr; /* Interface major version number */
+ UInt32 minorVersionNr; /* Interface minor version number */
+
+} tmSWVersion_t_C2_Askey, *ptmSWVersion_t_C2_Askey;
+
+// added
+
+ typedef enum _tmTDA18271MapName_t_C2_Askey {
+ tmTDA18271_IR_MEAS_Map_C2_Askey, // Image rejection measurement map
+ tmTDA18271_IR_CAL_Map_C2_Askey, // Image rejection calibration map
+ tmTDA18271_BP_FILTER_Map_C2_Askey, // Band pass filter map
+ tmTDA18271_RF_BAND_Map_C2_Askey, // RF band map
+ tmTDA18271_GAIN_TAPER_Map_C2_Askey, // Gain tapper map
+ tmTDA18271_RF_CAL_Map_C2_Askey, // RF calibration map
+ tmTDA18271_RF_CAL_DC_OVER_DT_Map_C2_Askey, // RF calibration temperature adjustment map
+ tmTDA18271_RF_CAL_KMCO_Map_C2_Askey, // RF calibration K,M,COAmpl map
+ tmTDA18271_RF_CAL_CID_TARGET_Map_C2_Askey, // RF calibration CID target map
+ tmTDA18271_THERMOMETER_Map_C2_Askey, // Thermometer map
+ tmTDA18271_CAL_PLL_Map_C2_Askey, // Calibration PLL map
+ tmTDA18271_MAIN_PLL_Map_C2_Askey, // Main PLL map
+ tmTDA18271_I2C_Map_C2_Askey, // I2C map
+ } tmTDA18271MapName_t_C2_Askey, *ptmTDA18271MapName_t_C2_Askey;
+
+ typedef struct _tmTDA18271_IR_MEAS_Map_t_C2_Askey {
+ UInt32 uRF_Max;
+ UInt32 uIR_Meas;
+ } tmTDA18271_IR_MEAS_Map_t_C2_Askey, *ptmTDA18271_IR_MEAS_Map_t_C2_Askey;
+
+ typedef struct _tmTDA18271_IR_CAL_Map_t_C2_Askey {
+ UInt32 uRF;
+ UInt32 uIR_GStep;
+ } tmTDA18271_IR_CAL_Map_t_C2_Askey, *ptmTDA18271_IR_CAL_Map_t_C2_Askey;
+
+ typedef struct _tmTDA18271_BP_FILTER_Map_t_C2_Askey {
+ UInt32 uRF_Max;
+ UInt32 uBP_Filter;
+ } tmTDA18271_BP_FILTER_Map_t_C2_Askey, *ptmTDA18271_BP_FILTER_Map_t_C2_Askey;
+
+ typedef struct _tmTDA18271_RF_BAND_Map_t_C2_Askey {
+ UInt32 uRF_Max;
+ UInt32 uRF_Band;
+ UInt32 uRF1;
+ UInt32 uRF2;
+ UInt32 uRF3;
+ Int32 uRF_A1;
+ Int32 uRF_B1;
+ Int32 uRF_A2;
+ Int32 uRF_B2;
+ UInt32 uRF1_default;
+ UInt32 uRF2_default;
+ UInt32 uRF3_default;
+ } tmTDA18271_RF_BAND_Map_t_C2_Askey, *ptmTDA18271_RF_BAND_Map_t_C2_Askey;
+
+ typedef struct _tmTDA18271_GAIN_TAPER_Map_t_C2_Askey {
+ UInt32 uRF_Max;
+ UInt32 uGain_Taper;
+ } tmTDA18271_GAIN_TAPER_Map_t_C2_Askey, *ptmTDA18271_GAIN_TAPER_Map_t_C2_Askey;
+
+ typedef struct _tmTDA18271_RF_CAL_Map_t_C2_Askey {
+ UInt32 uRF_Max;
+ UInt32 uRFC_Cprog;
+ } tmTDA18271_RF_CAL_Map_t_C2_Askey, *ptmTDA18271_RF_CAL_Map_t_C2_Askey;
+
+ typedef struct _tmTDA18271_RF_CAL_DC_OVER_DT_Map_t_C2_Askey {
+ UInt32 uRF_Max;
+ UInt32 udC_Over_dT;
+ } tmTDA18271_RF_CAL_DC_OVER_DT_Map_t_C2_Askey, *ptmTDA18271_RF_CAL_DC_OVER_DT_Map_t_C2_Askey;
+
+ typedef struct _tmTDA18271_RF_CAL_KMCO_Map_t_C2_Askey {
+ UInt32 uRF_Max;
+ UInt32 uK;
+ UInt32 uM;
+ UInt32 uCOAmpl;
+ } tmTDA18271_RF_CAL_KMCO_Map_t_C2_Askey, *ptmTDA18271_RF_CAL_KMCO_Map_t_C2_Askey;
+
+ typedef struct _tmTDA18271_RF_CAL_CID_TARGET_Map_t_C2_Askey {
+ UInt32 uRF_Max;
+ UInt32 uCID_Target;
+ UInt32 uCount_Limit;
+ } tmTDA18271_RF_CAL_CID_TARGET_Map_t_C2_Askey, *ptmTDA18271_RF_CAL_CID_TARGET_Map_t_C2_Askey;
+
+ typedef struct _tmTDA18271_THERMOMETER_Map_t_C2_Askey {
+ UInt32 uTM_D;
+ UInt32 uTM_60_92;
+ UInt32 uTM_92_122;
+ } tmTDA18271_THERMOMETER_Map_t_C2_Askey, *ptmTDA18271_THERMOMETER_Map_t_C2_Askey;
+
+ typedef struct _tmTDA18271_PLL_Map_t_C2_Askey {
+ UInt32 uLO_Max;
+ UInt32 uPost_Div;
+ UInt32 uDiv;
+ } tmTDA18271_PLL_Map_t_C2_Askey, *ptmTDA18271_PLL_Map_t_C2_Askey;
+
+ typedef struct _tmTDA18271Config_t_C2_Askey {
+ UInt32 uBoard;
+ UInt32 uStandard;
+ UInt32 uRF;
+ UInt32 uIF;
+ //UInt32 uBW;
+ UInt32 uTMVALUE_RFCAL;
+ UInt32 uPLMODE;
+ Int32 uRFCAL_TCOMP;
+ UInt32 uMAPNAME;
+ UInt32 uMAPCOLUMN;
+ UInt32 uMAPROW;
+ UInt32 uPROTOCOLSTEP;
+ tmTDA18271_IR_MEAS_Map_t_C2_Askey IR_MEAS_Map[TDA18271_IR_MEAS_NB_ROWS_C2_Askey];
+ tmTDA18271_IR_CAL_Map_t_C2_Askey IR_CAL_Map[TDA18271_IR_CAL_NB_ROWS_C2_Askey];
+ tmTDA18271_BP_FILTER_Map_t_C2_Askey BP_FILTER_Map[TDA18271_BP_FILTER_NB_ROWS_C2_Askey];
+ tmTDA18271_RF_BAND_Map_t_C2_Askey RF_BAND_Map[TDA18271_RF_BAND_NB_ROWS_C2_Askey];
+ tmTDA18271_GAIN_TAPER_Map_t_C2_Askey GAIN_TAPER_Map[TDA18271_GAIN_TAPER_NB_ROWS_C2_Askey];
+ tmTDA18271_RF_CAL_Map_t_C2_Askey RF_CAL_Map[TDA18271_RF_CAL_NB_ROWS_C2_Askey];
+ tmTDA18271_RF_CAL_DC_OVER_DT_Map_t_C2_Askey RF_CAL_DC_OVER_DT_Map[TDA18271_RF_CAL_DC_OVER_DT_NB_ROWS_C2_Askey];
+ tmTDA18271_RF_CAL_KMCO_Map_t_C2_Askey RF_CAL_KMCO_Map[TDA18271_RF_CAL_KMCO_NB_ROWS_C2_Askey];
+ tmTDA18271_RF_CAL_CID_TARGET_Map_t_C2_Askey RF_CAL_CID_TARGET_Map[TDA18271_RF_CAL_CID_TARGET_NB_ROWS_C2_Askey];
+ tmTDA18271_THERMOMETER_Map_t_C2_Askey THERMOMETER_Map[TDA18271_THERMOMETER_NB_ROWS_C2_Askey];
+ tmTDA18271_PLL_Map_t_C2_Askey CAL_PLL_Map[TDA18271_CAL_PLL_NB_ROWS_C2_Askey];
+ tmTDA18271_PLL_Map_t_C2_Askey MAIN_PLL_Map[TDA18271_MAIN_PLL_NB_ROWS_C2_Askey];
+ } tmTDA18271Config_t_C2_Askey, *ptmTDA18271Config_t_C2_Askey;
+
+ typedef struct _tmTDA18271I2CMap_t_C2_Askey
+ {
+ union
+ {
+ UInt8 ID_BYTE; // address 0x00
+ // Chip identification byte
+ struct
+ {
+ UInt8 ID :7; // Chip identification number
+ UInt8 UNUSED :1; // Reserved, must be written as 1
+ }bF;
+ }uBx00;
+
+ union
+ {
+ UInt8 THERMO_BYTE; // address 0x01
+ // Thermometer byte
+ struct
+ {
+ UInt8 TM_D :4; // Data from die temperature measurement
+ UInt8 TM_ON :1; // Enable Die temperature measurement
+ UInt8 TM_Range :1; // Range selection bit for the internal die sensor
+ // 0: 60 to 92°C
+ // 1: 92 to 122°C
+ UInt8 MAIN_Lock :1; // Indicate that the MAIN synthesizer is locked to the programmed frequency
+ // 0: Not Locked
+ // 1: Locked
+ UInt8 POR :1; // Power on reset bit
+ // This bit is set to 1 each time the power supply falls below a certain level (around 1.4V) and is reset after a read operation ending with a stop condition
+ }bF;
+ }uBx01;
+
+ union
+ {
+ UInt8 POWER_LEVEL_BYTE; // address 0x02
+ // Power level byte
+ struct
+ {
+ UInt8 Power_Level_7_to_0:8;// Power level indicator value
+ }bF;
+ }uBx02;
+
+ union
+ {
+ UInt8 EASY_PROG_BYTE_1; // address 0x03
+ // Easy programming byte 1
+ struct
+ {
+ UInt8 BP_Filter :3; // RF band-pass filter selection (H3/H5)
+ UInt8 IR_CAL_OK :1; // Indicate that the 3 Image rejection calibration procedure (Flow, Fmid, Fhigh) have been successful
+ UInt8 RF_CAL_OK :1; // Indicate that the RF tracking filter calibration procedure has been successful
+ UInt8 UNUSED :1; // Reserved
+ UInt8 Dis_Power_level:1;// Disable power level measurement
+ // 0: Power measurement valid
+ // 1: Power measurement not guaranted
+ UInt8 Power_Level_8 :1; // Power level indicator value
+ }bF;
+ }uBx03;
+
+ union
+ {
+ UInt8 EASY_PROG_BYTE_2; // address 0x04
+ // Easy programming byte 2
+ struct
+ {
+ UInt8 Gain_Taper :5; // Gain taper value
+ // 0 : max atten. (end of Band)
+ // 31: min atten. (start of Band)
+ UInt8 RF_Band :3; // RF tracking filter band and sub-band selection
+ }bF;
+ }uBx04;
+
+ union
+ {
+ UInt8 EASY_PROG_BYTE_3; // address 0x05
+ // Easy programming byte 3
+ struct
+ {
+ UInt8 Std :5; // Standard selection
+ UInt8 SM_XT :1; // XTAL output sleep mode
+ UInt8 SM_LT :1; // Loop through sleep mode
+ UInt8 SM :1; // General sleep mode
+ }bF;
+ }uBx05;
+
+ union
+ {
+ UInt8 EASY_PROG_BYTE_4; // address 0x06
+ // Easy programming byte 4
+ struct
+ {
+ UInt8 CAL_Mode :2; // calibration mode selection
+ UInt8 IF_Level :3; // IF output level selection
+ UInt8 Xtout_400mV :1; // XTAL output level optional selection
+ UInt8 XTout_ON :1; // Enable 16MHz on XTAL output
+ UInt8 FM_RFn :1; // FM or RF input selection
+ }bF;
+ }uBx06;
+
+ union
+ {
+ UInt8 EASY_PROG_BYTE_5; // address 0x07
+ // Easy programming byte 5
+ struct
+ {
+ UInt8 IR_Meas :3; // Image rejection measurement mode
+ UInt8 I2C_Xtout_Asym:1; // Reserved
+ UInt8 IR_Gstep :3; // Gain step for image rejection measurement. Depends on frequency
+ UInt8 Extended_Reg :1; // Enable the extended byte addressing
+ // 0: Limited byte (&h00:&h0F)
+ // 1: Extended byte (&h00:&h26)
+ }bF;
+ }uBx07;
+
+ union
+ {
+ UInt8 CAL_POST_DIV_BYTE; // address 0x08
+ // CAL post divider byte
+ struct
+ {
+ UInt8 CALPostDiv :7; // CAL post divider
+ UInt8 RUF_0 :1; // Reserved
+ }bF;
+ }uBx08;
+
+ union
+ {
+ UInt8 CAL_DIV_BYTE_1; // address 0x09
+ // CAL divider byte 1
+ struct
+ {
+ UInt8 CAL_Div_22_to_16:7;// CAL divider value 22 to 16
+ UInt8 RUF_1 :1; // Reserved
+ }bF;
+ }uBx09;
+
+ union
+ {
+ UInt8 CAL_DIV_BYTE_2; // address 0x0A
+ // CAL divider byte 2
+ struct
+ {
+ UInt8 CAL_Div_15_to_8:8;// CAL divider value 15 to 8
+ }bF;
+ }uBx0A;
+
+ union
+ {
+ UInt8 CAL_DIV_BYTE_3; // address 0x0B
+ // CAL divider byte 3
+ struct
+ {
+ UInt8 CAL_Div_7_to_0:8; // CAL divider value 7 to 0
+ }bF;
+ }uBx0B;
+
+ union
+ {
+ UInt8 MAIN_POST_DIV_BYTE; // address 0x0C
+ // MAIN post divider byte
+ struct
+ {
+ UInt8 MAIN_Post_Div :7; // MAIN post divider value
+ UInt8 IF_notch :1; // Reserved
+ }bF;
+ }uBx0C;
+
+ union
+ {
+ UInt8 MAIN_DIV_BYTE_1; // address 0x0D
+ // MAIN divider byte 1
+ struct
+ {
+ UInt8 MAIN_Div_22_to_16:7;// MAIN divider value 22 to 16
+ UInt8 RUF_2 :1; // Reserved
+ }bF;
+ }uBx0D;
+
+ union
+ {
+ UInt8 MAIN_DIV_BYTE_2; // address 0x0E
+ // MAIN divider byte 2
+ struct
+ {
+ UInt8 MAIN_Div_15_to_8:8;// MAIN divider value 15 to 8
+ }bF;
+ }uBx0E;
+
+ union
+ {
+ UInt8 MAIN_DIV_BYTE_3; // address 0x0F
+ // MAIN divider byte 3
+ struct
+ {
+ UInt8 MAIN_Div_7_to_0:8;// MAIN divider value 7 to 0
+ }bF;
+ }uBx0F;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_1; // address 0x10
+ // extended byte 1
+ struct
+ {
+ UInt8 AGC1_firstn :1; //
+ UInt8 AGC1_always_mastern:1;//
+ UInt8 CALVCO_forLOn :1; //
+ UInt8 UNUSED :1; // Reserved
+ }bF;
+ }uBx10;
+
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_2; // address 0x11
+ }uBx11; // extended byte 2
+
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_3; // address 0x12
+ }uBx12; // extended byte 3
+
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_4; // address 0x13
+ // extended byte 4
+ struct
+ {
+ UInt8 UNUSED_1 :5; // Reserved
+ UInt8 LO_ForceSrce :1; //
+ UInt8 UNUSED_2 :2; // Reserved
+ }bF;
+ }uBx13;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_5; // address 0x14
+ }uBx14; // extended byte 5
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_6; // address 0x15
+ }uBx15; // extended byte 6
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_7; // address 0x16
+ // extended byte 7
+ struct
+ {
+ UInt8 CAL_Lock :1;
+ UInt8 UNUSED_1 :4; // Reserved
+ UInt8 CAL_ForceSrce :1; //
+ UInt8 UNUSED_2 :2; // Reserved
+ }bF;
+ }uBx16;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_8; // address 0x17
+ // extended byte 8
+ struct
+ {
+ UInt8 UNUSED :7; // Reserved
+ UInt8 CID_Alarm :1; //
+ }bF;
+ }uBx17;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_9; // address 0x18
+ }uBx18; // extended byte 9
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_10; // address 0x19
+ // extended byte 10
+ struct
+ {
+ UInt8 CID_Gain :6; //
+ UInt8 UNUSED :2; // Reserved
+ }bF;
+ }uBx19;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_11; // address 0x1A
+ }uBx1A; // extended byte 11
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_12; // address 0x1B
+ // extended byte 12
+ struct
+ {
+ UInt8 UNUSED_1 :4; // Reserved
+ UInt8 PD_AGC2_Det :1; //
+ UInt8 PD_AGC1_Det :1; //
+ UInt8 UNUSED_2 :2; // Reserved
+ }bF;
+ }uBx1B;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_13; // address 0x1C
+ // extended byte 13
+ struct
+ {
+ UInt8 UNUSED_1 :2; // Reserved
+ UInt8 RFC_M :2; //
+ UInt8 RFC_K :3; //
+ UInt8 UNUSED_2 :1; // Reserved
+ }bF;
+ }uBx1C;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_14; // address 0x1D
+ // extended byte 14
+ UInt8 RFC_Cprog;
+ }uBx1D;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_15; // address 0x1E
+ }uBx1E; // extended byte 15
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_16; // address 0x1F
+ }uBx1F; // extended byte 16
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_17; // address 0x20
+ }uBx20; // extended byte 17
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_18; // address 0x21
+ // extended byte 18
+ struct
+ {
+ UInt8 AGC1_Gain :2; //
+ UInt8 UNUSED :5; // Reserved
+ UInt8 AGC1_loop_off :1; //
+ }bF;
+ }uBx21;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_19; // address 0x22
+ }uBx22; // extended byte 19
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_20; // address 0x23
+ // extended byte 20
+ struct
+ {
+ UInt8 UNUSED_1 :5; // Reserved
+ UInt8 Force_Lock :1; //
+ UInt8 UNUSED_2 :2; // Reserved
+ }bF;
+ }uBx23;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_21; // address 0x24
+ // extended byte 21
+ struct
+ {
+ UInt8 AGC2_Gain :2; //
+ UInt8 UNUSED :5; // Reserved
+ UInt8 AGC2_loop_off :1; //
+ }bF;
+ }uBx24;
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_22; // address 0x25
+ }uBx25; // extended byte 22
+
+ union
+ {
+ UInt8 EXTENDED_BYTE_23; // address 0x26
+ // extended byte 23
+ struct
+ {
+ UInt8 UNUSED_1 :1; // Reserved
+ UInt8 LP_Fc :1; //
+ UInt8 ForceLP_Fc2_En:1; //
+ UInt8 UNUSED_2 :3; // Reserved
+ UInt8 FM_LNAGain :2; //
+ }bF;
+ }uBx26;
+
+ } tmTDA18271I2CMap_t_C2_Askey, *ptmTDA18271I2CMap_t_C2_Askey;
+
+typedef struct _tmAFAInfo_t_C2_Askey {
+ Demodulator* demodulator;
+ UInt8 chip;
+} tmAFAInfo_t_C2_Askey, *ptmAFAInfo_t_C2_Askey;
+
+typedef struct _tmTDA18271Object_t_C2_Askey {
+ tmAFAInfo_t_C2_Askey AFAInfo_C2_Askey;
+ tmUnitSelect_t TunerUnit;
+ Bool_ init;
+ UInt32 uHwAddress;
+/*#ifdef NXPFE
+ tmdlDefaultGCRoot<tmdlDefaultDeviceDriver::tmhalFEBslSystemFunc_c^> SystemFunc;
+#else*/
+ tmhalFEBslSystemFunc_t_C2_Askey SystemFunc;
+//#endif
+ tmTDA18271PowerState_t_C2_Askey curPowerState;
+ tmTDA18271StandardMode_t_C2_Askey StandardMode;
+ tmTDA18271Config_t_C2_Askey Config;
+ tmTDA18271I2CMap_t_C2_Askey I2CMap;
+ UInt32 I2CLog[TDA18271_LOG_NB_ROWS_C2_Askey][TDA18271_NB_BYTES_C2_Askey + 2];
+ UInt32 uTickEnd;
+} tmTDA18271Object_t_C2_Askey, *ptmTDA18271Object_t_C2_Askey, **pptmTDA18271Object_t_C2_Askey;
+
+ typedef struct _tmTDA18271VbI2CData_t_C2_Askey {
+ UInt32 h00;
+ UInt32 h01;
+ UInt32 h02;
+ UInt32 h03;
+ UInt32 h04;
+ UInt32 h05;
+ UInt32 h06;
+ UInt32 h07;
+ UInt32 h08;
+ UInt32 h09;
+ UInt32 h0A;
+ UInt32 h0B;
+ UInt32 h0C;
+ UInt32 h0D;
+ UInt32 h0E;
+ UInt32 h0F;
+ UInt32 h10;
+ UInt32 h11;
+ UInt32 h12;
+ UInt32 h13;
+ UInt32 h14;
+ UInt32 h15;
+ UInt32 h16;
+ UInt32 h17;
+ UInt32 h18;
+ UInt32 h19;
+ UInt32 h1A;
+ UInt32 h1B;
+ UInt32 h1C;
+ UInt32 h1D;
+ UInt32 h1E;
+ UInt32 h1F;
+ UInt32 h20;
+ UInt32 h21;
+ UInt32 h22;
+ UInt32 h23;
+ UInt32 h24;
+ UInt32 h25;
+ UInt32 h26;
+ UInt32 I2CAddress;
+ UInt32 I2CCommResult;
+ } tmTDA18271VbI2CData_t_C2_Askey, *ptmTDA18271VbI2CData_t_C2_Askey;
+
+//-----------------------------------------------------------------------------
+// Function:
+//-----------------------------------------------------------------------------
+//
+ Bool_
+ TDA18271Wrapper_C2_Askey (
+ ptmTDA18271Object_t_C2_Askey pObj, // I: Tuner unit number
+ UInt32 uHwAddress, // I: Tuner unit I2C address
+ UInt32 uLptPort, // I: I2C interface LPT port
+ UInt32 uI2cSpeed, // I: I2C interface speed
+ char* uParamTunerNumber // I: Tuner unit number
+ );
+
+ Bool_
+ TDA18271WrapperClose_C2_Askey();
+
+//#ifndef NXPFE
+#ifdef __cplusplus
+}
+#endif
+//#endif //NXPFE
+
+#endif // _TMBSL_TDA18271LOCAL_H_C2_Askey //---------------
diff --git a/api/TDA18291.c b/api/TDA18291.c
new file mode 100644
index 0000000..4736b49
--- /dev/null
+++ b/api/TDA18291.c
@@ -0,0 +1,1315 @@
+/**
+ * $Header:
+ * (C) Copyright 2001 Philips Semiconductors, All rights reserved
+ *
+ * This source code and any compilation or derivative thereof is the sole
+ * property of Philips Corporation and is provided pursuant to a Software
+ * License Agreement. This code is the proprietary information of Philips
+ * Corporation and is confidential in nature. Its use and dissemination by
+ * any party other than Philips Corporation is strictly limited by the
+ * confidential information provisions of the Agreement referenced above.
+ *-----------------------------------------------------------------------------
+ * FILE NAME: tmbslTDA18291.c
+ *
+ * DESCRIPTION: Function for the digimob tuner TDATDA18291
+ *
+ * DOCUMENT REF: DigiMob - ObjectiveSpecification_V4.2.doc - 21 April 2005
+ *
+ * NOTES:
+ *-----------------------------------------------------------------------------
+ */
+
+/*-----------------------------------------------------------------------------
+ * Standard include files:
+ *-----------------------------------------------------------------------------
+ */
+
+/*-----------------------------------------------------------------------------
+ * Project include files:
+ *-----------------------------------------------------------------------------
+ */
+#include "TDA18291local.h"
+#include "standard.h"
+
+/*-----------------------------------------------------------------------------
+ * Types and defines:
+ *-----------------------------------------------------------------------------
+ */
+
+/*-----------------------------------------------------------------------------
+ * Global data:
+ *-----------------------------------------------------------------------------
+ */
+
+
+/* default instance */
+tm18291object_t g18291Instance[] =
+{
+ {
+ {
+ Null, /* Demodulator */
+ 0x01 /* chip */
+ },
+
+ False, /* init [False : instance is not initialized] */
+ 0, /* uHwAddress [HwId not set] */
+ { Null, Null/*, Null,*/ /* systemFunc [system function not initialized] */
+ /*Null, Null, Null*/
+ },
+ tmPowerOff, /* default power state */
+ {
+ CUSTOM_BOARD_DEF, /* uBoard [default configuration structure] */
+ TDA18291_NB_AGC_RANGES, /* Nb [number of lines] */
+ 0, /* Index [start index] */
+ {
+ {0,0},
+ {5,1},
+ {10,2},
+ {15,3},
+ {20,4},
+ {25,5},
+ {30,6},
+ {35,7},
+ {40,8},
+ {45,9},
+ {50,10},
+ {55,11},
+ {60,12},
+ {65,13},
+ {70,14},
+ {75,15},
+ {80,64},
+ {85,65},
+ {90,66},
+ {95,67},
+ {100,68},
+ {105,69},
+ {110,70},
+ {115,71},
+ {120,72},
+ {125,73},
+ {130,74},
+ {135,75},
+ {140,76},
+ {145,77},
+ {150,78},
+ {155,79},
+ {160,192},
+ {165,193},
+ {170,194},
+ {175,195},
+ {180,196},
+ {185,197},
+ {190,198},
+ {195,199},
+ {200,200},
+ {205,201},
+ {210,202},
+ {215,203},
+ {220,204},
+ {225,205},
+ {230,206},
+ {235,207},
+ {240,320},
+ {245,321},
+ {250,322},
+ {255,323},
+ {260,324},
+ {265,325},
+ {270,326},
+ {275,327},
+ {280,328},
+ {285,329},
+ {290,330},
+ {295,331},
+ {300,332},
+ {305,333},
+ {310,334},
+ {315,335},
+ {320,448},
+ {325,449},
+ {330,450},
+ {335,451},
+ {340,452},
+ {345,453},
+ {350,454},
+ {355,455},
+ {360,456},
+ {365,457},
+ {370,458},
+ {375,459},
+ {380,460},
+ {385,461},
+ {390,462},
+ {395,463},
+ {400,464},
+ {405,465},
+ {410,466},
+ {415,467},
+ {420,468},
+ {425,469},
+ {430,470},
+ {435,471},
+ {440,472},
+ {445,473},
+ {450,474},
+ {455,475},
+ {460,476},
+ {465,477},
+ {470,478},
+ {475,479},
+ {480,480},
+ {485,481},
+ {490,482},
+ {495,483},
+ {500,484},
+ {505,485},
+ {510,486},
+ {515,487},
+ {520,488},
+ {525,489},
+ {530,490},
+ {535,491},
+ {540,492},
+ {545,493},
+ {550,494},
+ {555,495},
+ {560,496},
+ {565,497},
+ {570,498},
+ {575,499},
+ {580,500},
+ {585,501},
+ {590,502},
+ {595,503},
+ {600,504},
+ {605,505},
+ {610,506},
+ {615,507},
+ {620,508},
+ {625,509},
+ {630,510},
+ {635,511},
+ },
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* pTunerReg[register default values]; */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00
+ },
+ 0, /* LO_FreqProg [RF programmed] */
+ 0, /* uTickEnd [end tick value] */
+ {
+ 1,1,0,0,1,365,3, /* UserData [tm18291UserData_t] */
+ 0,0,0,0,0,0,0,0,
+ 0x01,0x0C,0x00,0x02,0x01,0x00,0x80,0x00,0x90,0x86,
+ 0,0,0,0,0,26000,
+ 0,0,0,0,0,0,0,
+ 2,1,0
+ }
+ }
+};
+
+/*-----------------------------------------------------------------------------
+ * Internal Prototypes:
+ *-----------------------------------------------------------------------------
+ */
+Bool_
+TDA18291Init (
+ tmUnitSelect_t TunerUnit /* I: Tuner unit number */
+ );
+
+Bool_
+TDA18291CalcPLL (
+ tmUnitSelect_t TunerUnit, /* I: Tuner unit number */
+ UInt32 LO_Freq /* I: Frequency in hertz */
+ );
+
+Bool_
+TDA18291GetGainIndex(
+ ptm18291object_t pObject, /* I: Tuner object */
+ UInt32 *uIndex /* O: Gain */
+ );
+
+Bool_
+TDA18291WaitTick(
+ ptm18291object_t pObj /* I: Tuner unit number */
+ );
+
+Bool_
+TDA18291InitTick(
+ ptm18291object_t pObj, /* I: Tuner unit number */
+ UInt16 wTime /* I: time to wait for */
+ );
+
+/*-----------------------------------------------------------------------------
+ * Exported functions:
+ *-----------------------------------------------------------------------------
+ */
+Bool_ SY_Write2(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff)
+{
+ Bool_ RetStatus = False;
+ ptm18291object_t pObj;
+ UInt32 dwError = 0;
+ UInt8 uBuffer[39];
+ UInt32 i;
+
+ for (i = 0; i < uNbData; i++)
+ {
+ uBuffer[i] = (UInt8)pDataBuff[i];
+ }
+
+ pObj = &g18291Instance[0];
+ dwError = Standard_writeTunerRegisters (pObj->AFAInfo.demodulator, pObj->AFAInfo.chip,
+ (unsigned short)uSubAddress, (UInt8)uNbData, uBuffer);
+ if (dwError == 0) RetStatus = True;
+
+ return (RetStatus);
+};
+
+Bool_ SY_Read2(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff)
+{
+ Bool_ RetStatus = False;
+ ptm18291object_t pObj;
+ UInt32 dwError = 0;
+ UInt8 uBuffer[39];
+ UInt32 i;
+
+ pObj = &g18291Instance[0];
+ dwError = Standard_readTunerRegisters (pObj->AFAInfo.demodulator, pObj->AFAInfo.chip, (UInt16)uSubAddress, (UInt8)uNbData, uBuffer);
+ if (dwError == 0)
+ {
+ RetStatus = True;
+
+ for (i = 0; i < uNbData; i++)
+ {
+ pDataBuff[i] = (UInt32)uBuffer[i];
+ }
+ }
+
+ return (RetStatus);
+};
+
+/*-----------------------------------------------------------------------------
+ * FUNCTION: tmbslTDA18291Init:
+ *
+ * DESCRIPTION: create an instance of a TDA18291 tuner
+ *
+ * RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+ * TM_OK
+ *
+ * NOTES:
+ *-----------------------------------------------------------------------------
+ */
+tmErrorCode_t
+tmbslTDA18291Init(
+ tmUnitSelect_t TunerUnit, /* I: Tuner unit number */
+ tmbslTuParam_t Param /* I: setup parameters */
+ )
+{
+ /*----------------------
+ * test input parameters
+ *----------------------
+ * test the max number
+ */
+ if (TunerUnit > TDA18291_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ /*----------------------
+ * initialize the object
+ *----------------------
+ * return if already initialized
+ */
+ if(g18291Instance[TunerUnit].init == True)
+ return TM_OK;
+
+ /*----------------
+ * init the object
+ *----------------
+ * initialize the object by default values
+ */
+ g18291Instance[TunerUnit].uHwAddress = Param.uHwAddress;
+ g18291Instance[TunerUnit].systemFunc = Param.systemFunc;
+ g18291Instance[TunerUnit].init = True;
+
+ return TM_OK;
+}
+
+
+/*-----------------------------------------------------------------------------
+ * FUNCTION: tmbslTDA18291DeInit:
+ *
+ * DESCRIPTION: destroy an instance of a TDA18291 tuner
+ *
+ * RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+ * TMBSL_ERR_TUNER_NOT_INITIALIZED
+ * TM_OK
+ *
+ * NOTES:
+ *-----------------------------------------------------------------------------
+ */
+tmErrorCode_t
+tmbslTDA18291DeInit (
+ tmUnitSelect_t TunerUnit /* I: Tuner unit number */
+ )
+{
+ /*----------------------
+ * test input parameters
+ *----------------------
+ * test the instance number
+ */
+ if (TunerUnit > TDA18291_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ /* test the object */
+ if (g18291Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ /*-------------------------
+ * De-initialize the object
+ *-------------------------
+ */
+ g18291Instance[TunerUnit].init = False;
+
+ return TM_OK;
+}
+
+
+/*-----------------------------------------------------------------------------
+ * FUNCTION: tmbslTDA18291GetSWVersion:
+ *
+ * DESCRIPTION: Return the version of this device
+ *
+ * RETURN: TM_OK
+ *
+ * NOTES: Values defined in the tmTDA18291local.h file
+ *-----------------------------------------------------------------------------
+ */
+tmErrorCode_t
+tmbslTDA18291GetSWVersion (
+ ptmSWVersion_t pSWVersion /* I: Receives SW Version */
+ )
+{
+ pSWVersion->compatibilityNr = TDA18291_BSL_COMP_NUM;
+ pSWVersion->majorVersionNr = TDA18291_BSL_MAJOR_VER;
+ pSWVersion->minorVersionNr = TDA18291_BSL_MINOR_VER;
+
+ return TM_OK;
+}
+
+
+/*-----------------------------------------------------------------------------
+ * FUNCTION: tmbslTDA18291SetPowerState:
+ *
+ * DESCRIPTION: Set the power state of this device.
+ *
+ * RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+ * TMBSL_ERR_TUNER_NOT_INITIALIZED
+ * TM_OK
+ *
+ * NOTES: NOT implemented - inputs from stephane needed
+ *-----------------------------------------------------------------------------
+ */
+tmErrorCode_t
+tmbslTDA18291SetPowerState (
+ tmUnitSelect_t TunerUnit, /* I: Tuner unit number */
+ tmPowerState_t powerState /* I: Power state of this device */
+)
+{
+ ptm18291UserData_t pUserData;
+ ptm18291object_t pObj;
+
+ /*----------------------
+ * test input parameters
+ *----------------------
+ * test the instance number
+ */
+ if (TunerUnit > TDA18291_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ /* test the object */
+ if (g18291Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+
+ /* pObj & pUserData initialisation */
+ pObj = &g18291Instance[TunerUnit];
+ pUserData = &(pObj->UserData);
+
+ /*--------------------------------------------------------------------------
+ * set the value
+ * 4 possble values: tmPowerOn tmPowerOff tmPowerStandy tmPowerSuspend
+ *--------------------------------------------------------------------------
+ */
+
+ switch (powerState)
+ {
+ case tmPowerOn:
+ pUserData->PDIC = 0; /* IC is active */
+ pUserData->PDIF = 0; /* IF output is active */
+ pUserData->h03b5 = 1; /* default value */
+ pUserData->PDRF = 0; /* RF is active */
+ pUserData->PDRefBuff = 0; /* REFBUFF is active */
+ pUserData->PDSYNTH = 0; /* SYNTH is active */
+ pUserData->PDVCO = 0; /* VCO is active */
+ pUserData->PD_Xtout = 0; /* default value */
+ break;
+
+ case tmPowerOff:
+ pUserData->PDIC = 1; /* IC is off */
+ pUserData->PDIF = 1; /* IF output is off */
+ pUserData->h03b5 = 1; /* default value */
+ pUserData->PDRF = 1; /* RF is off */
+ pUserData->PDRefBuff = 1; /* REFBUFF is off */
+ pUserData->PDSYNTH = 1; /* SYNTH is off */
+ pUserData->PDVCO = 1; /* VCO is off */
+ pUserData->PD_Xtout = 0; /* default value */
+ break;
+ case tmPowerStandby:
+ case tmPowerSuspend:
+ break;
+ }
+ pObj->curPowerState = powerState;
+
+ return TM_OK;
+}
+
+
+/*-----------------------------------------------------------------------------
+ * FUNCTION: tmbslTDA18291GetPowerState:
+ *
+ * DESCRIPTION: Get the power state of this device.
+ *
+ * RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+ * TMBSL_ERR_TUNER_NOT_INITIALIZED
+ * TM_OK
+ *
+ * NOTES:
+ *-----------------------------------------------------------------------------
+ */
+tmErrorCode_t
+tmbslTDA18291GetPowerState (
+ tmUnitSelect_t TunerUnit, /* I: Tuner unit number */
+ tmPowerState_t *pPowerState /* O: Power state of this device */
+)
+{
+ /*----------------------
+ * test input parameters
+ *----/------------------
+ * test the instance number
+ */
+ if (TunerUnit > TDA18291_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ /* test the object */
+ if (g18291Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ /*--------------
+ * get the value
+ *--------------
+ */
+ *pPowerState = g18291Instance[TunerUnit].curPowerState;
+
+ return TM_OK;
+}
+
+
+/*-----------------------------------------------------------------------------
+ * FUNCTION: tmbslTDA18291Write:
+ *
+ * DESCRIPTION: Write in the tuner.
+ *
+ * RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+ * TMBSL_ERR_TUNER_NOT_INITIALIZED
+ * TMBSL_ERR_IIC_ERR
+ * TM_OK
+ *
+ * NOTES: uIndex: IN parameter containing the HW Sub Address as specified in
+ * the datasheet (i.e. looks like 0xX0)
+ *-----------------------------------------------------------------------------
+ */
+tmErrorCode_t
+tmbslTDA18291Write (
+ tmUnitSelect_t TunerUnit, /* I: Tuner unit number */
+ UInt32 uIndex, /* I: Start index to write */
+ UInt32 uNbBytes, /* I: Number of bytes to write */
+ UInt32* puBytes /* I: Pointer on an array of bytes */
+)
+{
+
+ UInt32 uCounter;
+
+ /*----------------------
+ * test input parameters
+ *----------------------
+ * test the instance number
+ */
+ if (TunerUnit > TDA18291_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ /* test the object */
+ if (g18291Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ /* test the parameters. uIndex is: 0x0X */
+ if ((uIndex + uNbBytes) > TDA18291_NB_REGISTERS)
+ return TMBSL_ERR_TUNER_BAD_PARAMETER;
+
+ /*--------------
+ * set the value
+ *--------------
+ * save the values written in the tuner
+ */
+ for (uCounter = 0; uCounter < uNbBytes; uCounter++)
+ g18291Instance[TunerUnit].pTunerReg[uCounter+uIndex] = puBytes[uCounter];
+
+ /* write in the tuner */
+ if (g18291Instance[TunerUnit].systemFunc.SY_Write(
+ g18291Instance[TunerUnit].uHwAddress,
+ uIndex, uNbBytes, &(g18291Instance[TunerUnit].pTunerReg[uIndex])) != 1)
+ return TMBSL_ERR_IIC_ERR;
+
+
+ return TM_OK;
+}
+
+
+/*-----------------------------------------------------------------------------
+ * FUNCTION: tmbslTDA18291WriteBit:
+ *
+ * DESCRIPTION: Write in the tuner.
+ *
+ * RETURN: TM_ERR_NOT_SUPPORTED
+ *
+ * NOTES:
+ *-----------------------------------------------------------------------------
+ */
+tmErrorCode_t
+tmbslTDA18291WriteBit (
+ tmUnitSelect_t TunerUnit, /* I: Tuner unit number */
+ UInt32 uIndex, /* I: Start index to write */
+ UInt32 uBitMask, /* I: bit mask */
+ UInt32 uBitValue /* I: bit value */
+)
+{
+ return TM_ERR_NOT_SUPPORTED;
+}
+
+
+/*-----------------------------------------------------------------------------
+ * FUNCTION: tmbslTDA18291Read:
+ *
+ * DESCRIPTION: Read in the tuner.
+ *
+ * RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+ * TMBSL_ERR_TUNER_NOT_INITIALIZED
+ * TMBSL_ERR_TUNER_BAD_PARAMETER
+ * TMBSL_ERR_IIC_ERR
+ * TM_OK
+ *
+ * NOTES:
+ *-----------------------------------------------------------------------------
+ */
+tmErrorCode_t
+tmbslTDA18291Read (
+ tmUnitSelect_t TunerUnit, /* I: Tuner unit number */
+ UInt32 uIndex, /* I: Start index to read */
+ UInt32 uNbBytes, /* I: Number of bytes to read */
+ UInt32* puBytes /* I: Pointer on an array of bytes */
+)
+{
+
+ /*----------------------
+ * test input parameters
+ *----------------------
+ * test the instance number
+ */
+ if (TunerUnit > TDA18291_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ /* test the object */
+ if (g18291Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ /* test the object */
+ if (uNbBytes > TDA18291_NB_REGISTERS)
+ return TMBSL_ERR_TUNER_BAD_PARAMETER;
+
+ /*--------------
+ * get the value
+ *--------------
+ */
+ if (uIndex == -1)
+ {
+
+ /* read the status byte if index is -1 */
+ /* Return the complete register. Mask is applied in higher layer */
+ if (g18291Instance[TunerUnit].systemFunc.SY_Read(
+ g18291Instance[TunerUnit].uHwAddress,
+ 0, uNbBytes, puBytes) != 1) return TMBSL_ERR_IIC_ERR;
+ }
+ else
+ {
+ UInt32 uCounter;
+
+ /* return value previously written */
+ for (uCounter = uIndex; (uCounter < uIndex + uNbBytes) && (uCounter < TDA18291_NB_REGISTERS); uCounter++)
+ puBytes[uCounter-uIndex] = g18291Instance[TunerUnit].pTunerReg[uCounter];
+
+ }
+
+ return TM_OK;
+}
+
+
+/*-----------------------------------------------------------------------------
+ * FUNCTION: tmbslTDA18291SetRf:
+ *
+ * DESCRIPTION: Calculate i2c register & write in TDA18291
+ *
+ * RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+ * TMBSL_ERR_TUNER_NOT_INITIALIZED
+ * TMBSL_ERR_TUNER_BAD_PARAMETER
+ * TMBSL_ERR_IIC_ERR
+ * TM_OK
+ *
+ * NOTES:
+ *-----------------------------------------------------------------------------
+ */
+tmErrorCode_t
+tmbslTDA18291SetRf(
+ tmUnitSelect_t TunerUnit, /* I: Tuner unit number */
+ UInt32 LO_Freq /* I: Frequency in hertz */
+)
+{
+ UInt8 uCounter = 0;
+
+ ptm18291object_t pObj;
+ ptm18291UserData_t pUserData;
+
+ /* pObj & pUserData initialisation */
+ pObj = &g18291Instance[TunerUnit];
+ pUserData = &(pObj->UserData);
+
+ /*----------------------
+ * test input parameters
+ *----------------------
+ * test the instance number
+ */
+ if (TunerUnit > TDA18291_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ /* test the object */
+ if (g18291Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ /*--------------
+ * set the value
+ *--------------
+ * Bytes h05 h06 h07 h08 h09
+ * initialised in TDA18291CalcPLL
+ * calculate the tuner reg h5X h6X h7X h8X h9X
+ */
+ pUserData->Flo_max08 = 987000;
+ pUserData->Flo_max09 = 877000;
+ pUserData->Flo_max10 = 790000;
+ pUserData->Flo_max11 = 718000;
+ pUserData->Flo_max12 = 658000;
+ pUserData->Flo_max13 = 607000;
+ pUserData->Flo_max14 = 564000;
+ pUserData->Flo_max15 = 526000;
+ TDA18291CalcPLL(TunerUnit, LO_Freq);
+
+ /* Byte h03 */
+ pUserData->PDIC = 0; /* IC is active */
+ pUserData->PDIF = 0; /* IF output is active */
+ pUserData->h03b5 = 1; /* default value */
+ pUserData->PDRF = 0; /* RF is active */
+ pUserData->PDRefBuff = 0; /* REFBUFF is active */
+ pUserData->PDSYNTH = 0; /* SYNTH is active */
+ pUserData->PDVCO = 0; /* VCO is active */
+ pUserData->PD_Xtout = 0; /* Xtout is active */
+ pObj->pTunerReg[TDA18291_REG_H03] = pUserData->PDIC << 7 | pUserData->PDIF << 6 | pUserData->h03b5 << 5 | pUserData->PDRF << 4 | pUserData->PDRefBuff << 3 | pUserData->PDSYNTH << 2 | pUserData->PDVCO << 1 | pUserData->PD_Xtout << 0;
+
+ /* Byte h04 */
+ pUserData->h04b3tob0 = 0x0C; /* enable xtal out (bit3)*/
+ pObj->pTunerReg[TDA18291_REG_H04] = pUserData->Ref_Freq << 6 | pUserData->AGCBusEn << 5 | pUserData->AGCext << 4 | pUserData->h04b3tob0 << 0;
+
+ /* Bytes h05 h06 h07 h08 h09 */
+ /* calculated in TDA18291CalcPLL function */
+ pUserData->h09b7tob6 = 0; /* default value */
+ pObj->pTunerReg[TDA18291_REG_H09] = pUserData->h09b7tob6 << 6 | pObj->pTunerReg[TDA18291_REG_H09] << 0;
+
+ /* Bytes h0A h0B */
+ /* Search for the agc range corresponding to wanted gain */
+ while (pUserData->AGCGain > pObj->config.Map[uCounter].uGain)
+ uCounter++;
+ pUserData->AGCBB = pObj->config.Map[uCounter].uAGC_BB;
+ pUserData->h0Ab7 = pUserData->Enable_LNA; /* enable or disable the LNA */
+ pUserData->h0Ab1tob0 = 0x02; /* default value */
+ pUserData->h0Bb7tob6 = 0; /* default value */
+ pObj->pTunerReg[TDA18291_REG_H0A] = pUserData->h0Ab7 << 7 | (UInt8)(pUserData->AGCBB >> 6) << 4 | pUserData->FC << 2 | pUserData->h0Ab1tob0 << 0 ;
+ pObj->pTunerReg[TDA18291_REG_H0B] = pUserData->h0Bb7tob6 << 6 | (UInt8)(pUserData->AGCBB << 2) >> 2;
+
+ /* Byte h0C */
+ pUserData->h0C = 0x80; /* default value */
+ pObj->pTunerReg[TDA18291_REG_H0C] = pUserData->h0C << 0;
+
+ /* Byte h0D */
+ pUserData->h0D = 0x00; /* default value */
+ pObj->pTunerReg[TDA18291_REG_H0D] = pUserData->h0D << 0;
+
+ /* Byte h0E */
+ pUserData->h0E = 0x90; /* default value */
+ pObj->pTunerReg[TDA18291_REG_H0E] = pUserData->h0E << 0;
+
+ /* Byte h0F */
+ pUserData->h0F = 0x86; /* default value */
+ pObj->pTunerReg[TDA18291_REG_H0F] = pUserData->h0F << 0;
+
+
+ if (pUserData->FlagI2CWrite){
+ /* Write h03 to h0F */
+ if (pObj->systemFunc.SY_Write(
+ pObj->uHwAddress,
+ 3, 0x0d, &(pObj->pTunerReg[TDA18291_REG_H03])) != 1)
+
+ return TMBSL_ERR_IIC_ERR;
+ }
+
+
+ /* return value */
+ return TM_OK;
+}
+
+
+/*-----------------------------------------------------------------------------
+ * FUNCTION: tmbslTDA18291GetRf:
+ *
+ * DESCRIPTION: Get the frequency programmed in the tuner
+ *
+ * RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+ * TMBSL_ERR_TUNER_NOT_INITIALIZED
+ * TM_OK
+ *
+ * NOTES: The value returned is the one stored in the object
+ *-----------------------------------------------------------------------------
+ */
+tmErrorCode_t
+tmbslTDA18291GetRf(
+ tmUnitSelect_t TunerUnit, /* I: Tuner unit number */
+ UInt32* pLO_Freq /* O: Frequency in hertz */
+ )
+{
+ /*----------------------
+ * test input parameters
+ *----------------------
+ * test the instance number
+ */
+ if (TunerUnit > TDA18291_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ /* test the object */
+ if (g18291Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ /*--------------
+ * get the value
+ *--------------
+ * the read function can't be used
+ */
+ *pLO_Freq = g18291Instance[TunerUnit].LO_FreqProg*1000;
+
+ return TM_OK;
+}
+
+
+/*-----------------------------------------------------------------------------
+ * FUNCTION: tmbslTDA18291SetConfig:
+ *
+ * DESCRIPTION: Set the config of the TDA18291
+ *
+ * RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+ * TMBSL_ERR_TUNER_NOT_INITIALIZED
+ * TM_ERR_NOT_SUPPORTED
+ * TMBSL_ERR_TUNER_BAD_PARAMETER
+ * TM_OK
+ *
+ * NOTES:
+ *-----------------------------------------------------------------------------
+ */
+tmErrorCode_t
+tmbslTDA18291SetConfig(
+ tmUnitSelect_t TunerUnit, /* I: TunerUnit number */
+ UInt32 uItemId, /* I: Identifier of the item to modify */
+ UInt32 uValue /* I: Value to set for the config item */
+ )
+{
+
+ /*----------------------
+ * test input parameters
+ *----------------------
+ * test the instance number
+ */
+ if (TunerUnit > TDA18291_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ /* test the object*/
+ if (g18291Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ /*--------------
+ * set the value
+ *--------------
+ */
+ switch((tm18291cfgIndex_t)uItemId)
+ {
+ case BOARD:
+ switch (uValue & 0xffff0000)
+ {
+ case OM5768_BOARD_DEF:
+ /* Default Xtal Freq is 26 MHz */
+ g18291Instance[TunerUnit].UserData.Ref_Freq = 2;
+ g18291Instance[TunerUnit].UserData.LO_XTALFreq = gTableXtalFreq[2];
+ /* Default Xtal Out Mode is OFF */
+ /*g18291Instance[TunerUnit].UserData.h04b3tob0 = 4; */
+ g18291Instance[TunerUnit].UserData.PDRefBuff = 0;
+ g18291Instance[TunerUnit].UserData.PD_Xtout = 0;
+ /* Default AGC control is from external pin */
+ g18291Instance[TunerUnit].UserData.AGCBusEn = 0;
+ g18291Instance[TunerUnit].UserData.AGCext = 1;
+
+ break;
+ case CUSTOM_BOARD_DEF:
+ /* do nothing more than setting the default values */
+ break;
+ default:
+ /* board not supported */
+ return TM_ERR_NOT_SUPPORTED;
+ }
+ /* store board */
+ g18291Instance[TunerUnit].config.uBoard = uValue;
+ break;
+
+ case SET_CUTOFF_FREQ:
+ /* Cut-off Frequency, added by max */
+ g18291Instance[TunerUnit].UserData.FC = (UInt8)uValue;
+ break;
+
+ /* backdoor functions */
+ case FEINIT:
+ TDA18291Init( TunerUnit );
+ break;
+
+ case AGC_BUS_ENABLE:
+ g18291Instance[TunerUnit].UserData.AGCBusEn = (UInt8)uValue;
+ break;
+
+ case AGC_EXT:
+ g18291Instance[TunerUnit].UserData.AGCext = (UInt8)uValue;
+ break;
+
+ case AGC_GAIN_VALUE:
+ g18291Instance[TunerUnit].UserData.AGCGain = (UInt32)uValue;
+ break;
+
+ case LO_XTAL_FREQ_INDEX:
+ if ((UInt8)uValue==3)
+ {
+ uValue=1;
+ }
+ g18291Instance[TunerUnit].UserData.Ref_Freq = (UInt8)uValue;
+ g18291Instance[TunerUnit].UserData.LO_XTALFreq = gTableXtalFreq[uValue];
+ break;
+
+ case XTAL_MODE:
+ if (uValue)
+ {
+ /* Activate XTout */
+ g18291Instance[TunerUnit].UserData.PDRefBuff = 0;
+ g18291Instance[TunerUnit].UserData.PD_Xtout = 0;
+ }
+ else
+ {
+ /* Disable XTout */
+ g18291Instance[TunerUnit].UserData.PDRefBuff = 1;
+ g18291Instance[TunerUnit].UserData.PD_Xtout = 1;
+ }
+ break;
+ case CUT_OFF_IND:
+ g18291Instance[TunerUnit].UserData.CutOffIndex = (UInt8)uValue;
+ g18291Instance[TunerUnit].UserData.FC = gTableCutOffVal[uValue];
+ break;
+
+ case ENABLE_LNA:
+ g18291Instance[TunerUnit].UserData.Enable_LNA = (UInt8)uValue;
+ break;
+ }
+ return TM_OK;
+}
+
+
+/*-----------------------------------------------------------------------------
+ * FUNCTION: tmbslTDA18291GetConfig:
+ *
+ * DESCRIPTION: Get the config of the TDA18291
+ *
+ * RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
+ * TMBSL_ERR_TUNER_NOT_INITIALIZED
+ * TM_OK
+ *
+ * NOTES:
+ *-----------------------------------------------------------------------------
+ */
+tmErrorCode_t
+tmbslTDA18291GetConfig(
+ tmUnitSelect_t TunerUnit, /* I: Tuner unit number */
+ UInt32 uItemId, /* I: Identifier of the item to modify */
+ UInt32* puValue /* I: Value to set for the config item */
+ )
+{
+ UInt32 uCounter = 0;
+
+ /*----------------------
+ * test input parameters
+ *----------------------
+ * test the instance number
+ */
+ if (TunerUnit > TDA18291_MAX_UNITS)
+ return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
+
+ /* test the object */
+ if (g18291Instance[TunerUnit].init == False)
+ return TMBSL_ERR_TUNER_NOT_INITIALIZED;
+
+ /*--------------
+ * set the value
+ *--------------
+ */
+ switch((tm18291cfgIndex_t)uItemId)
+ {
+ case BOARD:
+ *puValue = g18291Instance[TunerUnit].config.uBoard;
+ break;
+
+ case AGC_BUS_ENABLE:
+ *puValue = g18291Instance[TunerUnit].UserData.AGCBusEn;
+ break;
+
+ case AGC_EXT:
+ *puValue = g18291Instance[TunerUnit].UserData.AGCext;
+ break;
+
+ case AGC_GAIN_INDEX:
+ if ( g18291Instance[TunerUnit].UserData.AGCBusEn )
+ {
+ /* Return the index of the field of type tm18291agcMap_t */
+ /* that corresponds to the current setting of gain */
+ uCounter = 0;
+ while ( g18291Instance[TunerUnit].config.Map[uCounter].uGain < g18291Instance[TunerUnit].UserData.AGCGain)
+ uCounter ++;
+
+ *puValue = uCounter;
+ }
+ else
+ /* Return the index of the field of type tm18291agcMap_t */
+ /* that corresponds to the gain read in the tuner */
+ TDA18291GetGainIndex(&g18291Instance[TunerUnit], puValue);
+ break;
+
+ case AGC_GAIN_VALUE:
+ if ( g18291Instance[TunerUnit].UserData.AGCBusEn )
+ *puValue = g18291Instance[TunerUnit].UserData.AGCGain;
+ else
+ {
+
+ TDA18291GetGainIndex(&g18291Instance[TunerUnit], &uCounter);
+ *puValue = g18291Instance[TunerUnit].config.Map[uCounter].uGain;/*g18291Instance[TunerUnit].config.Map[uCounter].uGain; */
+
+ }
+ break;
+
+ case LO_XTAL_FREQ_INDEX:
+
+ *puValue = g18291Instance[TunerUnit].UserData.Ref_Freq;
+ break;
+
+ case LO_XTAL_FREQ_VALUE:
+ *puValue = g18291Instance[TunerUnit].UserData.LO_XTALFreq;
+ break;
+
+ case XTAL_MODE:
+ *puValue = g18291Instance[TunerUnit].UserData.PD_Xtout;
+ break;
+
+ case ENABLE_LNA:
+ *puValue = g18291Instance[TunerUnit].UserData.Enable_LNA;
+ break;
+ }
+
+ return TM_OK;
+}
+
+
+/*-----------------------------------------------------------------------------
+ * Internal functions:
+ *-----------------------------------------------------------------------------
+ */
+
+/*-----------------------------------------------------------------------------
+ * FUNCTION: TDA18291Init:
+ *
+ * DESCRIPTION: Initialisation of the tuner
+ * The protocol used to initialise the tuner is the same as for the
+ * programming of the tuner to a new RF
+ *
+ * RETURN: always True
+ *
+ * NOTES:
+ *-----------------------------------------------------------------------------
+ */
+Bool_
+TDA18291Init (
+ tmUnitSelect_t TunerUnit /* I: tuner object */
+ )
+{
+ UInt32 uDefaultFreq = 600000000; /* Default LO frequency; */
+
+ tmbslTDA18291SetRf( TunerUnit ,uDefaultFreq);
+
+ return TM_TRUE;
+}
+
+/*-----------------------------------------------------------------------------
+ * FUNCTION: TDA18291CalcPLL:
+ *
+ * DESCRIPTION: Calculate the LO fractionnal PLL settings
+ *
+ * RETURN: Always True
+ *
+ * NOTES: This function doesn't write in the tuner
+ *-----------------------------------------------------------------------------
+ */
+Bool_
+TDA18291CalcPLL (
+ tmUnitSelect_t TunerUnit, /* Tuner unit number */
+ UInt32 LO_Freq /* Local oscillator frequency in hertz */
+ )
+{
+ UInt8 LO_PostdivTmp;
+ UInt32 LO_IntTmp;
+ UInt32 LO_FracTmp;
+ UInt32 LO_FreqTmp;
+
+ ptm18291object_t pObj;
+ ptm18291UserData_t pUserData;
+
+ /* pObj & pUserData initialisation */
+ pObj = &g18291Instance[TunerUnit];
+ pUserData = &(pObj->UserData);
+
+ /* LO Postdiv calculation */
+ if (LO_Freq > 493500000)
+ pUserData->LO_Postdiv = 1;
+ else if (LO_Freq > 246750000)
+ pUserData->LO_Postdiv = 2;
+ else if (LO_Freq > 123374000)
+ pUserData->LO_Postdiv = 4;
+ else if (LO_Freq > 61687000)
+ pUserData->LO_Postdiv = 8;
+ else
+ pUserData->LO_Postdiv = 16;
+
+ /* LO Prescaler calculation */
+ LO_FreqTmp = (LO_Freq / 1000) * pUserData->LO_Postdiv;
+ if (pUserData->LO_Postdiv >= 1)
+ {
+ if (LO_FreqTmp > pUserData->Flo_max09)
+ pUserData->LO_Presc = 8;
+ else if (LO_FreqTmp > pUserData->Flo_max10)
+ pUserData->LO_Presc = 9;
+ else if (LO_FreqTmp > pUserData->Flo_max11)
+ pUserData->LO_Presc = 10;
+ else if (LO_FreqTmp > pUserData->Flo_max12)
+ pUserData->LO_Presc = 11;
+ else if (LO_FreqTmp > pUserData->Flo_max13)
+ pUserData->LO_Presc = 12;
+ else if (LO_FreqTmp > pUserData->Flo_max14)
+ pUserData->LO_Presc = 13;
+ else if (LO_FreqTmp >= pUserData->Flo_max15)
+ pUserData->LO_Presc = 14;
+ else if (LO_FreqTmp < pUserData->Flo_max15)
+ pUserData->LO_Presc = 15;
+ }
+ else
+ {
+ pUserData->LO_Postdiv = 1;
+ pUserData->LO_Presc = 8;
+ }
+
+ /* VCO Frequency calculation */
+ pUserData->LO_VCOFreq = (LO_FreqTmp * pUserData->LO_Presc);
+
+ /* LO_IntTmp calculation */
+ LO_IntTmp = pUserData->LO_VCOFreq / (4 * pUserData->LO_XTALFreq);
+
+ /* LO_FracTmp calculation */
+ LO_FracTmp = (pUserData->LO_VCOFreq * 100) / 4;
+ LO_FracTmp -= (LO_IntTmp * pUserData->LO_XTALFreq * 100);
+ LO_FracTmp /= (pUserData->LO_XTALFreq / 100);
+
+ /* LO_Int & LO_Frac correction */
+ if (LO_FracTmp > 7500) {
+ pUserData->LO_Int = 2 * (LO_IntTmp) + 1 - 128;
+ pUserData->LO_Frac = ((LO_FracTmp - 5000) * 83886) / 100;
+ }
+ else if (LO_FracTmp >= 2500){
+ pUserData->LO_Int = 2 * (LO_IntTmp) - 128;
+ pUserData->LO_Frac = (LO_FracTmp * 83886) / 100;
+ }
+ else if (LO_FracTmp < 2500){
+ pUserData->LO_Int = 2 * (LO_IntTmp - 1 ) + 1 - 128;
+ pUserData->LO_Frac = ((LO_FracTmp + 5000) * 83886) / 100;
+ }
+
+ /* LO_Postdiv bits inversion correction */
+ switch (pUserData->LO_Postdiv){
+ case 1:
+ LO_PostdivTmp = 1;
+ break;
+ case 2: LO_PostdivTmp = 2;
+ break;
+ case 4: LO_PostdivTmp = 3;
+ break;
+ case 8: LO_PostdivTmp = 4;
+ break;
+ case 16:LO_PostdivTmp = 5;
+ break;
+ default:LO_PostdivTmp = 0;
+ break;
+ }
+
+ /* Bytes h5X h6X h7X h8X h9X */
+ pObj->pTunerReg[TDA18291_REG_H05] = (UInt8)(pUserData->LO_Int >> 1);
+ pObj->pTunerReg[TDA18291_REG_H06] = (UInt8)(pUserData->LO_Int << 7) | (UInt8)(pUserData->LO_Frac >> 16);
+ pObj->pTunerReg[TDA18291_REG_H07] = (UInt8)(pUserData->LO_Frac >> 8);
+ pObj->pTunerReg[TDA18291_REG_H08] = (UInt8)(pUserData->LO_Frac);
+ pObj->pTunerReg[TDA18291_REG_H09] = (UInt8)(pUserData->LO_Presc << 5) >> 2 | LO_PostdivTmp;
+
+ /* return value */
+ return True;
+}
+
+/*-----------------------------------------------------------------------------
+ * FUNCTION: TDA18291GetGainIndex
+ *
+ * DESCRIPTION: this function will read the gain AGCBB of the TDA18291
+ * ( i.e. combination of AGC1 and AGC2)
+ * and will determine the associated element of the Map table
+ * of the object config and return its index
+ *
+ * RETURN: nothing
+ *
+ * NOTES:
+ *-----------------------------------------------------------------------------
+ */
+Bool_
+TDA18291GetGainIndex(
+ ptm18291object_t pObject, /* I: Tuner object */
+ UInt32 *uIndex /* O: Gain */
+ )
+{
+ UInt32 puBytes[16];
+ UInt8 uGainReg[2];
+ UInt8 uGainMsb;
+ UInt32 uCounter, uGainTemp;
+
+ if (pObject->systemFunc.SY_Read(
+ pObject->uHwAddress,
+ 0, 16, puBytes) != 1) return False;
+
+ uGainReg[0] = (UInt8) (puBytes[1] & 0x1F);
+ uGainReg[1] = (UInt8) (puBytes[2] >> 4);
+
+ /* Get bit AGC1[2] */
+ uGainMsb = (uGainReg[0] & 0x10) >> 4;
+ /* keep bits AGC1[1], AGC1[0] and AGC2[5] AGC1[4] */
+ uGainReg[0] = (uGainReg[0] & 0x0F);
+
+ uGainTemp = (uGainMsb << 8) | (uGainReg[0] << 4) | uGainReg[1];
+
+ uCounter = 0;
+ while ( pObject->config.Map[uCounter].uAGC_BB < uGainTemp)
+ uCounter ++;
+
+ *uIndex = uCounter;
+
+ return True;
+}
+
+/*-----------------------------------------------------------------------------
+ * FUNCTION: TDA18291InitTick
+ *
+ * DESCRIPTION: this function will delay for the number of millisecond
+ *
+ * RETURN: nothing
+ *
+ * NOTES:
+ *-----------------------------------------------------------------------------
+ */
+#if 0
+Bool_
+TDA18291InitTick(
+ ptm18291object_t pObj, /* I: Tuner unit number */
+ UInt16 wTime /* I: time to wait for */
+)
+{
+ /* get current tick */
+ UInt32 uCurrentTick = pObj->systemFunc.SY_GetTickTime();
+
+ /* calculate end tick */
+ pObj->uTickEnd = (UInt32)wTime;
+ pObj->uTickEnd += pObj->systemFunc.SY_GetTickPeriod()/2;
+ pObj->uTickEnd /= pObj->systemFunc.SY_GetTickPeriod();
+ pObj->uTickEnd += uCurrentTick;
+
+ /* always add 1 because of rounding issue */
+ if (wTime)
+ pObj->uTickEnd++;
+
+ /* test overflow */
+ if (pObj->uTickEnd < uCurrentTick)
+ return False;
+ else
+ return True;
+}
+
+/*-----------------------------------------------------------------------------
+ * FUNCTION: TDA18291WaitTick
+ *
+ * DESCRIPTION: this function will block for the number of millisecond
+ *
+ * RETURN: True if time has elapsed else False
+ *
+ * NOTES:
+ *-----------------------------------------------------------------------------
+ */
+
+Bool_
+TDA18291WaitTick(
+ ptm18291object_t pObj /* I: Tuner unit number */
+)
+{
+ /* test if time has elapsed */
+ if (pObj->systemFunc.SY_GetTickTime() >= pObj->uTickEnd)
+ return True;
+ else
+ return False;
+}
+#endif
diff --git a/api/TDA18291.h b/api/TDA18291.h
new file mode 100644
index 0000000..10c9a7e
--- /dev/null
+++ b/api/TDA18291.h
@@ -0,0 +1,74 @@
+/**
+ * $Header:
+ * (C) Copyright 2001 Philips Semiconductors, All rights reserved
+ *
+ * This source code and any compilation or derivative thereof is the sole
+ * property of Philips Corporation and is provided pursuant to a Software
+ * License Agreement. This code is the proprietary information of Philips
+ * Corporation and is confidential in nature. Its use and dissemination by
+ * any party other than Philips Corporation is strictly limited by the
+ * confidential information provisions of the Agreement referenced above.
+ *
+ * FILE NAME: tmbslTDA18291.h
+ *
+ * DESCRIPTION: define the object for the 18281HNC1
+ *
+ * DOCUMENT REF: DVP Software Coding Guidelines v1.14
+ * DVP Board Support Library Architecture Specification v0.5
+ *
+ * NOTES:
+ */
+
+#ifndef _TMBSL_18281HNC1_H
+#define _TMBSL_18281HNC1_H
+
+/**
+ * Standard include files:
+ */
+
+
+/**
+ * Project include files:
+ */
+
+
+/**
+ * Types and defines:
+ */
+
+tmErrorCode_t
+tmbslTDA18291Init(
+ tmUnitSelect_t TunerUnit, /* I: Tuner unit number */
+ tmbslTuParam_t sParam /* I: setup parameters */
+);
+tmErrorCode_t
+tmbslTDA18291DeInit (
+ tmUnitSelect_t TunerUnit /* I: Tuner unit number */
+);
+tmErrorCode_t
+tmbslTDA18291GetSWVersion (
+ ptmSWVersion_t pSWVersion /* I: Receives SW Version */
+);
+tmErrorCode_t
+tmbslTDA18291SetConfig(
+ tmUnitSelect_t TunerUnit, /* I: TunerUnit number */
+ UInt32 uItemId, /* I: Identifier of the item to modify */
+ UInt32 uValue /* I: Value to set for the config item */
+);
+tmErrorCode_t
+tmbslTDA18291GetConfig(
+ tmUnitSelect_t TunerUnit, /* I: Tuner unit number */
+ UInt32 uItemId, /* I: Identifier of the item to modify */
+ UInt32* puValue /* I: Value to set for the config item */
+);
+tmErrorCode_t
+tmbslTDA18291SetRf(
+ tmUnitSelect_t TunerUnit, /* I: Tuner unit number */
+ UInt32 LO_Freq /* I: Frequency in hertz */
+);
+tmErrorCode_t
+tmbslTDA18291GetRf(
+ tmUnitSelect_t TunerUnit, /* I: Tuner unit number */
+ UInt32* pLO_Freq /* O: Frequency in hertz */
+);
+#endif
diff --git a/api/TDA18291local.h b/api/TDA18291local.h
new file mode 100644
index 0000000..3c4f69d
--- /dev/null
+++ b/api/TDA18291local.h
@@ -0,0 +1,347 @@
+/**
+ * $Header:
+ * (C) Copyright 2001 Philips Semiconductors, All rights reserved
+ *
+ * This source code and any compilation or derivative thereof is the sole
+ * property of Philips Corporation and is provided pursuant to a Software
+ * License Agreement. This code is the proprietary information of Philips
+ * Corporation and is confidential in nature. Its use and dissemination by
+ * any party other than Philips Corporation is strictly limited by the
+ * confidential information provisions of the Agreement referenced above.
+ *
+ * FILE NAME: tmbsl18291local.h
+ *
+ * DESCRIPTION: define the object for the TDA18291
+ *
+ * DOCUMENT REF: DVP Software Coding Guidelines v1.14
+ * DVP Board Support Library Architecture Specification v0.5
+ *
+ * NOTES:
+ */
+
+#ifndef _TMBSL_TDA18291LOCAL_H
+#define _TMBSL_TDA18291LOCAL_H
+
+#include "type.h"
+
+
+/**
+ * Standard include files:
+ */
+/* #include "hpi_basictypes.h"
+ #include "tmdlFe.h"
+ #include "tmhalFEtypes.h"
+ #include "dvp.h"
+ #include "tmbslTuner.h" */
+
+/**
+ * Project include files:
+ */
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/**
+ * Types and defines:
+ */
+
+#define TDA18291_BSL_COMP_NUM 1
+#define TDA18291_BSL_MAJOR_VER 1
+#define TDA18291_BSL_MINOR_VER 0
+
+/* #define AF901X_CAN_TUNER 0x1
+ #define AF901X_SILICON_TUNER 0x2 */
+
+
+/**
+ * ERROR CODES
+ *
+ * ++from Max
+ */
+#define TMBSL_ERR_TUNER_BASE 0x80000000U
+#define TM_ERR_BAD_UNIT_NUMBER 0x00000001U
+#define TM_ERR_NOT_INITIALIZED 0x00000002U
+#define TM_ERR_BAD_PARAMETER 0x00000003U
+#define TM_ERR_NOT_SUPPORTED 0x00000004U
+#define TM_ERR_IIC_ERR 0x00000005U
+
+typedef enum _tmPowerState_t
+{
+ tmPowerOn = 1,
+ tmPowerStandby,
+ tmPowerSuspend,
+ tmPowerOff
+} tmPowerState_t;
+
+
+
+
+/* Invalid unit id */
+#define TMBSL_ERR_TUNER_BAD_UNIT_NUMBER \
+(TMBSL_ERR_TUNER_BASE + TM_ERR_BAD_UNIT_NUMBER)
+
+/* Component is not initialized */
+#define TMBSL_ERR_TUNER_NOT_INITIALIZED \
+(TMBSL_ERR_TUNER_BASE+ TM_ERR_NOT_INITIALIZED)
+
+/* Invalid input parameter */
+#define TMBSL_ERR_TUNER_BAD_PARAMETER \
+(TMBSL_ERR_TUNER_BASE + TM_ERR_BAD_PARAMETER)
+
+/* Function is not supported */
+#define TMBSL_ERR_TUNER_NOT_SUPPORTED \
+(TMBSL_ERR_TUNER_BASE + TM_ERR_NOT_SUPPORTED)
+
+/* Function is not supported */
+#define TMBSL_ERR_IIC_ERR \
+(TMBSL_ERR_TUNER_BASE + TM_ERR_IIC_ERR)
+
+#define TDA18291_MAX_UNITS 2
+#define TDA18291_NB_REGISTERS 16
+#define TDA18291_NB_AGC_RANGES 128
+
+/* Indexes of TDA18291 registers */
+#define TDA18291_REG_H00 0x00
+#define TDA18291_REG_H01 0x01
+#define TDA18291_REG_H02 0x02
+#define TDA18291_REG_H03 0x03
+#define TDA18291_REG_H04 0x04
+#define TDA18291_REG_H05 0x05
+#define TDA18291_REG_H06 0x06
+#define TDA18291_REG_H07 0x07
+#define TDA18291_REG_H08 0x08
+#define TDA18291_REG_H09 0x09
+#define TDA18291_REG_H0A 0x0A
+#define TDA18291_REG_H0B 0x0B
+#define TDA18291_REG_H0C 0x0C
+#define TDA18291_REG_H0D 0x0D
+#define TDA18291_REG_H0E 0x0E
+#define TDA18291_REG_H0F 0x0F
+
+#define OM5768_BOARD_DEF 0x57680000 /* 10047 + TDA18281 */
+#define CUSTOM_BOARD_DEF 0x00000000 /* custom */
+
+#define CUTOFF_FREQ_FOR_5MHZ 0
+#define CUTOFF_FREQ_FOR_6MHZ 1
+#define CUTOFF_FREQ_FOR_7MHZ 2
+#define CUTOFF_FREQ_FOR_8MHZ 3
+
+typedef float Float;
+
+typedef unsigned long UInt32; /* 32 bit unsigned integer */
+typedef unsigned short UInt16; /* 16 bit unsigned integer */
+typedef unsigned char UInt8; /* 8 bit unsigned integer */
+typedef UInt32 tmErrorCode_t;
+typedef unsigned int Bool_; /* Boolean (True/False) */
+typedef int tmUnitSelect_t, *ptmUnitSelect_t;
+#define Null 0
+
+#define TM_OK 0U /* Global success return status */
+#define TM_FALSE 0
+#define TM_TRUE 1
+
+#define True TM_TRUE
+#define False TM_FALSE
+
+/* +++ from Max */
+Bool_ SY_Read2(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff
+);
+
+Bool_ SY_Write2(UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff
+);
+
+
+typedef struct _tmhalFEBslSystemFunc_t
+{
+ Bool_ (*SY_Write) (UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+ Bool_ (*SY_Read) (UInt32 uAddress,
+ UInt32 uSubAddress,
+ UInt32 uNbData,
+ UInt32* pDataBuff);
+} tmhalFEBslSystemFunc_t, *ptmhalFEBslSystemFunc_t;
+
+typedef struct _tmbslTuParam_t
+{
+ unsigned long uHwAddress;
+ tmhalFEBslSystemFunc_t systemFunc;
+} tmbslTuParam_t, *ptmbslTuParam_t;
+
+typedef struct tmSWVersion
+{
+ UInt32 compatibilityNr; /* Interface compatibility number */
+ UInt32 majorVersionNr; /* Interface major version number */
+ UInt32 minorVersionNr; /* Interface minor version number */
+
+} tmSWVersion_t, *ptmSWVersion_t;
+
+
+#if 0
+
+typedef enum _tmTDA18281StandardMode_t {
+ tmDigital_TV_ATSC_6MHz, /* Digital TV ATSC 6MHz */
+ tmDigital_TV_DVBT_7MHz, /* Digital TV DVB-T 7MHz */
+ tmDigital_TV_DVBT_8MHz, /* Digital TV DVB-T 8MHz */
+ tmAnalog_TV_MN, /* Analog TV M/N */
+ tmAnalog_TV_B, /* Analog TV B */
+ tmAnalog_TV_GH, /* Analog TV G/H */
+ tmAnalog_TV_I, /* Analog TV I */
+ tmAnalog_TV_DK, /* Analog TV D/K */
+ tmAnalog_TV_L, /* Analog TV L */
+ tmAnalog_TV_LL, /* Analog TV L' */
+ tmAnalog_FM_Radio, /* Analog FM Radio */
+ tmDigital_TV_QAM_6MHz, /* Digital TV QAM 6MHz */
+ tmDigital_TV_QAM_8MHz, /* Digital TV QAM 8MHz */
+ tmStandardNotSupported, /* Not supported standard */
+} tmTDA18281StandardMode_t, *ptmTDA18281StandardMode_t;
+
+#endif
+
+typedef enum _tm18291cfgIndex_t {
+ BOARD = 0,
+ FEINIT = 100,
+ GETNBOFUNIT = 200,
+ AGC_BUS_ENABLE = 208,
+ AGC_EXT,
+ AGC_GAIN_INDEX,
+ AGC_GAIN_VALUE,
+ LO_XTAL_FREQ_INDEX,
+ LO_XTAL_FREQ_VALUE,
+ XTAL_MODE,
+ ENABLE_LNA,
+ CUT_OFF_IND,
+ BANDWIDTH = 300,
+ GETLEVEL = 301,
+ SET_CUTOFF_FREQ = 302
+} tm18291cfgIndex_t;
+
+
+typedef struct _tm18291agcMap_t {
+ UInt32 uGain; /* Actual value of Gain (equals (AGC1 + AGC2 + 6.5) * 10 ) */
+ UInt32 uAGC_BB; /* Digit of 9 bits to write in reg and */
+ /* corresponding to AGC1[2] to AGC1[0] AGC2[5] to AGC2[0] */
+} tm18291agcMap_t, *ptm18291agcMap_t;
+
+typedef struct _tm18291config_t {
+ UInt32 uBoard;
+ UInt32 Nb;
+ UInt32 Index;
+ tm18291agcMap_t Map[TDA18291_NB_AGC_RANGES];
+} tm18291config_t, *ptm18291config_t;
+
+typedef struct _tm18291I2CData_t {
+ UInt32 h00;
+ UInt32 h01;
+ UInt32 h02;
+ UInt32 h03;
+ UInt32 h04;
+ UInt32 h05;
+ UInt32 h06;
+ UInt32 h07;
+ UInt32 h08;
+ UInt32 h09;
+ UInt32 h0A;
+ UInt32 h0B;
+ UInt32 h0C;
+ UInt32 h0D;
+ UInt32 h0E;
+ UInt32 h0F;
+} tm18291I2CData_t, *ptm18291I2CData_t;
+
+typedef struct _tm18291UserData_t {
+ UInt8 FlagI2CWrite; /* FlagI2CWrite = 1; */
+ UInt8 FlagPLLCalculateNandK; /* FlagPLLCalculateNandK = 1; */
+ UInt32 AGCBB;
+ UInt8 AGCBusEn; /* AGCBusEn [*] AGC control via I2C bus */
+ UInt8 AGCext; /* AGCext [*] AGC control via dedicated pin */
+ UInt32 AGCGain; /* AGCGain [*] AGC gain [AGCGain = (AGCgain + 6.5) * 10] */
+ UInt8 FC; /* FC [*] Cutt off frequency */
+ UInt32 Flo_max08;
+ UInt32 Flo_max09;
+ UInt32 Flo_max10;
+ UInt32 Flo_max11;
+ UInt32 Flo_max12;
+ UInt32 Flo_max13;
+ UInt32 Flo_max14;
+ UInt32 Flo_max15;
+ UInt8 h03b5;
+ UInt8 h04b3tob0;
+ UInt8 h09b7tob6;
+ UInt8 h0Ab1tob0;
+ UInt8 h0Ab7;
+ UInt8 h0Bb7tob6;
+ UInt8 h0C;
+ UInt8 h0D;
+ UInt8 h0E;
+ UInt8 h0F;
+ UInt32 LO_Frac;
+ UInt32 LO_Int;
+ UInt8 LO_Postdiv;
+ UInt8 LO_Presc;
+ UInt32 LO_VCOFreq;
+ UInt32 LO_XTALFreq; /* 52MHz or 26 MHz or other values. See gTableXtalFreq */
+ UInt8 PDIC;
+ UInt8 PDIF;
+ UInt8 PDRefBuff;
+ UInt8 PDRF;
+ UInt8 PDSYNTH;
+ UInt8 PDVCO;
+ UInt8 PD_Xtout;
+ UInt8 Ref_Freq;
+ UInt8 Enable_LNA;
+ UInt8 CutOffIndex;
+} tm18291UserData_t, *ptm18291UserData_t;
+
+
+typedef struct _tmAFAInfo_t {
+ Demodulator* demodulator;
+ UInt8 chip;
+} tmAFAInfo_t, *ptmAFAInfo_t;
+
+typedef struct _tm18291object_t {
+ tmAFAInfo_t AFAInfo;
+ Bool_ init;
+ UInt32 uHwAddress;
+ tmhalFEBslSystemFunc_t systemFunc;
+ tmPowerState_t curPowerState;
+ tm18291config_t config;
+ UInt32 pTunerReg[TDA18291_NB_REGISTERS];
+ UInt32 LO_FreqProg;
+ UInt32 uTickEnd;
+ tm18291UserData_t UserData;
+} tm18291object_t, *ptm18291object_t;
+
+/**
+ * Global data:
+ */
+
+static UInt32 gTableXtalFreq[] =
+{
+ 52000,
+ 19200,
+ 26000,
+ 38400
+};
+static UInt8 gTableCutOffVal[] =
+{
+ 3,
+ 2,
+ 1
+
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/api/Xceive_XC3028L.c b/api/Xceive_XC3028L.c
new file mode 100644
index 0000000..aed688f
--- /dev/null
+++ b/api/Xceive_XC3028L.c
@@ -0,0 +1,180 @@
+/*
+ * @(#)Xceive_XC3028L.cpp
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2006 Afatech, Inc. All rights reserved.
+ *
+ */
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "xc3028_control.h"
+#include "Xceive_XC3028L_Script.h"
+
+
+static Demodulator* XC3028LHandle = NULL;
+static Byte XC3028LChip = 0;
+
+
+extern XC3028_TV_MODE XC3028_tv_mode_dtv6_afatech_qam_4_56mhz;
+extern XC3028_TV_MODE XC3028_tv_mode_dtv7_afatech_4_56mhz;
+extern XC3028_TV_MODE XC3028_tv_mode_dtv8_afatech_4_56mhz;
+extern XC3028_CHANNEL_MAP XC3028_channel_map_digital_air;
+
+
+int xc3028_send_i2c_data (
+ unsigned char *bytes_to_send,
+ int nb_bytes_to_send
+) {
+ Dword error = Error_NO_ERROR;
+
+ error = Standard_writeTunerRegisters (XC3028LHandle, XC3028LChip, 0x0000, nb_bytes_to_send, bytes_to_send);
+ if (error) goto exit;
+
+exit:
+ return (error);
+}
+
+
+int xc3028_read_i2c_data (
+ unsigned char *bytes_received,
+ int nb_bytes_to_receive
+) {
+ Dword error = Error_NO_ERROR;
+
+ error = Standard_readTunerRegisters (XC3028LHandle, XC3028LChip, 0x0000, nb_bytes_to_receive, bytes_received);
+ if (error) goto exit;
+
+exit:
+ return (error);
+}
+
+
+int xc3028_reset (
+) {
+ Dword error = Error_NO_ERROR;
+
+ error = Standard_writeRegisterBits (XC3028LHandle, XC3028LChip, Processor_LINK, p_reg_top_gpiot2_o, reg_top_gpiot2_o_pos, reg_top_gpiot2_o_len, 0);
+ if (error) goto exit;
+
+ error = Standard_writeRegisterBits (XC3028LHandle, XC3028LChip, Processor_LINK, p_reg_top_gpiot2_en, reg_top_gpiot2_en_pos, reg_top_gpiot2_en_len, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegisterBits (XC3028LHandle, XC3028LChip, Processor_LINK, p_reg_top_gpiot2_on, reg_top_gpiot2_on_pos, reg_top_gpiot2_on_len, 1);
+ if (error) goto exit;
+
+ User_delay (XC3028LHandle, 250);
+
+ error = Standard_writeRegisterBits (XC3028LHandle, XC3028LChip, Processor_LINK, p_reg_top_gpiot2_o, reg_top_gpiot2_o_pos, reg_top_gpiot2_o_len, 1);
+ if (error) goto exit;
+
+exit:
+ return (error);
+}
+
+
+int xc3028_wait (
+ int wait_ms
+) {
+ User_delay (XC3028LHandle, (Dword)wait_ms);
+ return (Error_NO_ERROR);
+}
+
+
+Dword XC3028L_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword XC3028L_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ Dword error = Error_NO_ERROR;
+
+ XC3028LHandle = demodulator;
+ XC3028LChip = chip;
+
+ /** Set I2C master clock speed. */
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, p_reg_one_cycle_counter_tuner, 85);
+ if (error) goto exit;
+
+ if (bandwidth == 6000)
+ {
+ frequency -= 1750;
+ error = xc3028_initialize (&XC3028_tv_mode_dtv6_afatech_qam_4_56mhz,
+ (XC3028_CHANNEL_MAP*) &XC3028_channel_map_digital_air);
+ if (error) goto exit;
+ }
+
+ if (bandwidth == 7000)
+ {
+ frequency -= 2250;
+ error = xc3028_initialize (&XC3028_tv_mode_dtv7_afatech_4_56mhz,
+ (XC3028_CHANNEL_MAP*) &XC3028_channel_map_digital_air);
+ if (error) goto exit;
+ }
+
+ if (bandwidth == 8000)
+ {
+ frequency -= 2750;
+ error = xc3028_initialize (&XC3028_tv_mode_dtv8_afatech_4_56mhz,
+ (XC3028_CHANNEL_MAP*) &XC3028_channel_map_digital_air);
+ if (error) goto exit;
+ }
+
+ frequency *= 1000;
+ error = xc3028_set_frequency (frequency);
+ if (error) goto exit;
+
+ /** Set I2C master clock speed. */
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, p_reg_one_cycle_counter_tuner, User_I2C_SPEED);
+ if (error) goto exit;
+
+exit:
+ return (error);
+}
+
+
+Dword XC3028L_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+TunerDescription tuner_XC3028L = {
+ XC3028L_open,
+ XC3028L_close,
+ XC3028L_set,
+ XC3028L_scripts,
+ XC3028L_scriptSets,
+ XC3028L_ADDRESS, /** tuner i2c address */
+ 0, /** length of tuner register address */
+ 4560000, /** tuner if */
+ True, /** spectrum inverse */
+ 0x26, /** tuner id */
+};
diff --git a/api/Xceive_XC3028L.h b/api/Xceive_XC3028L.h
new file mode 100644
index 0000000..aacba59
--- /dev/null
+++ b/api/Xceive_XC3028L.h
@@ -0,0 +1,60 @@
+/**
+ * @(#)Xceive_XC3028L.h
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2006 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __XCEIVE_XC3028L_H__
+#define __XCEIVE_XC3028L_H__
+
+
+#define XC3028L_VER_MAJOR 2
+#define XC3028L_VER_MINOR 0
+
+extern TunerDescription tuner_XC3028L;
+
+
+/**
+ *
+ */
+Dword XC3028L_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword XC3028L_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword XC3028L_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Xceive_XC3028L_Script.h b/api/Xceive_XC3028L_Script.h
new file mode 100644
index 0000000..f50ca4f
--- /dev/null
+++ b/api/Xceive_XC3028L_Script.h
@@ -0,0 +1,58 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)Xceive_EXT_EVB.cpp
+*
+* Copyright 2005 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 5
+#define VERSION2 66
+#define VERSION3 12
+#define VERSION4 0
+
+
+
+#define XC3028L_ADDRESS 0xC2
+#define XC3028L_SCRIPTSETLENGTH 0x00000001
+
+Word XC3028L_scriptSets[] = {
+0x1E
+};
+
+ValueSet XC3028L_scripts[] = {
+ {0x0046, 0x26},
+ {0x0057, 0x01},
+ {0x0058, 0x01},
+ {0x0059, 0x01},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x0071, 0x05},
+ {0x0072, 0x02},
+ {0x0074, 0x01},
+ {0x0079, 0x01},
+ {0x0093, 0x00},
+ {0x0094, 0x00},
+ {0x0095, 0x00},
+ {0x0096, 0x00},
+ {0x00b3, 0x01},
+ {0x00c3, 0x00},
+ {0x00c4, 0x00},
+ {0xF007, 0x00},
+ {0xF00C, 0x19},
+ {0xF00D, 0x1A},
+ {0xF012, 0x6d},
+ {0xF013, 0x00},
+ {0xF014, 0x78},
+ {0xF015, 0x02},
+ {0xF01F, 0x96},
+ {0xF020, 0x00},
+ {0xF029, 0x96},
+ {0xF02A, 0x00},
+ {0xF077, 0x02},
+ {0xF1E6, 0x00},
+
+};
diff --git a/api/Xceive_XC4000.c b/api/Xceive_XC4000.c
new file mode 100644
index 0000000..db77f25
--- /dev/null
+++ b/api/Xceive_XC4000.c
@@ -0,0 +1,213 @@
+/*
+ * @(#)Xceive_XC4000.cpp
+ *
+ * ==========================================================
+ * Version: 2.1
+ * Date: 2009.01.20
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin created
+ * 2008.09.18 Tom Lin improve performance
+ * 2009.01.20 Tom Lin fix clock stretch issue
+ * ==========================================================
+ *
+ * Copyright 2008 Afatech, Inc. All rights reserved.
+ *
+ */
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+#include "xc4000_control.h"
+#include "i2c_driver.h"
+#include "xc4000_firmwares.h"
+#include "xc4000_channelmaps.h"
+#include "xc4000_standards.h"
+#include "xc4000_scodes.h"
+#include "Xceive_XC4000_Script.h"
+
+
+extern Demodulator* XC4000Handle;
+extern Byte XC4000Chip;
+
+
+Dword XC4000_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+
+ XC4000Handle = demodulator;
+ XC4000Chip = chip;
+
+ /** Enable I2C clock dynamic speed */
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, 0x83ED, 1);
+ if (error) goto exit;
+
+ /** xc4000 links TV standard to its configuration file */
+ XC4000_Loading_TVStandards ();
+
+ /** xc4000 hardware resets */
+ error = xc_reset();
+ if (error) goto exit;
+
+ User_delay (demodulator, 100);
+
+ /** xc4000 downloads firmware */
+ error = xc_load_i2c_sequence (XC4000_firmware_SEQUENCE);
+ if (error) goto exit;
+
+ /** xc4000 initiates */
+ error = xc_load_i2c_sequence (XC4000_INIT_SEQUENCE);
+ if (error) goto exit;
+
+ /** Disable I2C clock dynamic speed */
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, 0x83ED, 0);
+ if (error) goto exit;
+
+exit:
+ return (error);
+}
+
+
+Dword XC4000_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ Dword error = Error_NO_ERROR;
+ Byte amplitude[4];
+
+ amplitude[0] = 0, amplitude[1] = 0x10, amplitude[2] = 0, amplitude[3] = 0x87;
+
+ XC4000Handle = demodulator;
+ XC4000Chip = chip;
+
+ /** Enable I2C clock dynamic speed */
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, 0x83ED, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, 0x83E6, 0x28);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, 0x83E7, 0x07);
+ if (error) goto exit;
+
+ if (bandwidth == 6000)
+ {
+ /** Tell f/w the stretched packet */
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, 0x83E3, 23);
+ if (error) goto exit;
+
+ /** xc4000 sets TV standard to DVBT-6 */
+ error = xc_load_i2c_sequence (XC4000_Standard[23].ConfFile);
+ if (error) goto exit;
+ }
+ else if (bandwidth == 7000)
+ {
+ /** Tell f/w the stretched packet */
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, 0x83E3, 22);
+ if (error) goto exit;
+
+ /** xc4000 sets TV standard to DVBT-7 */
+ error = xc_load_i2c_sequence(XC4000_Standard[26].ConfFile);
+ if (error) goto exit;
+ }
+ else if (bandwidth == 8000)
+ {
+ /** Tell f/w the stretched packet */
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, 0x83E3, 22);
+ if (error) goto exit;
+
+ /** xc4000 sets TV standard to DVBT-8 */
+ error = xc_load_i2c_sequence(XC4000_Standard[24].ConfFile);
+ if (error) goto exit;
+ }
+ else
+ {
+ error = Error_INVALID_BW;
+ goto exit;
+ }
+
+ /** xc4000 enters direct-setting-mode */
+ error = xc_enter_directsitting_mode ();
+ if (error) goto exit;
+
+ /** xc4000 downloads scode */
+ error = xc_send_i2c_data (&XC4000_scode_table_4560000[0][0], 13);
+ if (error) goto exit;
+
+ /** xc4000 exits direct-setting-mode */
+ error = xc_exit_directsitting_mode ();
+ if (error) goto exit;
+
+ /** xc4000 sets RF mode to Air(0) */
+ error = xc_rf_mode(0);
+ if (error) goto exit;
+
+ /** xc4000 sets dcode */
+ error = xc_set_dcode (0);
+ if (error) goto exit;
+
+ /** xc4000 sets RF frequency of Hz */
+ if (bandwidth == 6000)
+ frequency -= 1750;
+ else if (bandwidth == 7000)
+ frequency -= 2250;
+ else if (bandwidth == 8000)
+ frequency -= 2750;
+ else
+ {
+ error = Error_INVALID_BW;
+ goto exit;
+ }
+
+ error = xc_set_RF_frequency (frequency * 1000);
+ if (error) goto exit;
+
+ /** Tell f/w the stretched packet 0x83E3, 0x83E6, 0x83E7 */
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, 0x83E3, 1);
+ if (error) goto exit;
+
+ /** Improve Performance by set reg 0x0010 to the value of 0x0087 */
+ error = Standard_writeTunerRegisters (demodulator, chip, 0x0000, 4, amplitude);
+ if (error) goto exit;
+
+exit:
+ /** Disable I2C clock dynamic speed */
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, 0x83ED, 0);
+
+ return (error);
+}
+
+
+Dword XC4000_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Error_NO_ERROR);
+}
+
+
+TunerDescription tuner_XC4000 = {
+ XC4000_open,
+ XC4000_close,
+ XC4000_set,
+ XC4000_scripts,
+ XC4000_scriptSets,
+ XC4000_ADDRESS, /** tuner i2c address */
+ 0, /** length of tuner register address */
+ 4560000, /** tuner if */
+ True, /** spectrum inverse */
+ 0x2A, /** tuner id */
+};
diff --git a/api/Xceive_XC4000.h b/api/Xceive_XC4000.h
new file mode 100644
index 0000000..7783f88
--- /dev/null
+++ b/api/Xceive_XC4000.h
@@ -0,0 +1,60 @@
+/**
+ * @(#)Xceive_XC4000.h
+ *
+ * ==========================================================
+ * Version: 2.1
+ * Date: 2009.01.20
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin created
+ * ==========================================================
+ *
+ * Copyright 2008 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+#ifndef __XCEIVE_XC4000_H__
+#define __XCEIVE_XC4000_H__
+
+
+#define XC4000_VER_MAJOR 2
+#define XC4000_VER_MINOR 1
+
+extern TunerDescription tuner_XC4000;
+
+
+/**
+ *
+ */
+Dword XC4000_open (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword XC4000_close (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword XC4000_set (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+#endif \ No newline at end of file
diff --git a/api/Xceive_XC4000_Script.h b/api/Xceive_XC4000_Script.h
new file mode 100644
index 0000000..3428a99
--- /dev/null
+++ b/api/Xceive_XC4000_Script.h
@@ -0,0 +1,58 @@
+//
+// This file is automatically generated. Do NOT edit.
+//
+
+/*
+*@(#)Xceive_EXT_EVB.cpp
+*
+* Copyright 2005 Afatech, Inc. All rights reserved.
+*/
+
+
+#define VERSION1 5
+#define VERSION2 66
+#define VERSION3 12
+#define VERSION4 0
+
+
+
+#define XC4000_ADDRESS 0xC2
+#define XC4000_SCRIPTSETLENGTH 0x00000001
+
+Word XC4000_scriptSets[] = {
+0x1E
+};
+
+ValueSet XC4000_scripts[] = {
+ {0x0046, 0x2A},
+ {0x0057, 0x01},
+ {0x0058, 0x01},
+ {0x0059, 0x01},
+ {0x005f, 0x00},
+ {0x0060, 0x00},
+ {0x0071, 0x05},
+ {0x0072, 0x02},
+ {0x0074, 0x01},
+ {0x0079, 0x01},
+ {0x0093, 0x00},
+ {0x0094, 0x00},
+ {0x0095, 0x00},
+ {0x0096, 0x00},
+ {0x00b3, 0x01},
+ {0x00c3, 0x00},
+ {0x00c4, 0x00},
+ {0xF007, 0x00},
+ {0xF00C, 0x19},
+ {0xF00D, 0x1A},
+ {0xF012, 0xD7},
+ {0xF013, 0x03},
+ {0xF014, 0x78},
+ {0xF015, 0x02},
+ {0xF01F, 0x96},
+ {0xF020, 0x00},
+ {0xF029, 0x96},
+ {0xF02A, 0x00},
+ {0xF077, 0x02},
+ {0xF1E6, 0x00},
+
+};
diff --git a/api/cmd.c b/api/cmd.c
new file mode 100644
index 0000000..a1eb3e0
--- /dev/null
+++ b/api/cmd.c
@@ -0,0 +1,990 @@
+#include "cmd.h"
+
+
+Byte Cmd_sequence = 0;
+
+
+Dword Cmd_addChecksum (
+ IN Demodulator* demodulator,
+ OUT Dword* bufferLength,
+ OUT Byte* buffer
+) {
+ Dword error = Error_NO_ERROR;
+ Dword loop = (*bufferLength - 1) / 2;
+ Dword remain = (*bufferLength - 1) % 2;
+ Dword i;
+ Word checksum = 0;
+
+ for (i = 0; i < loop; i++)
+ checksum += (Word) (buffer[2 * i + 1] << 8) + (Word) (buffer[2 * i + 2]);
+ if (remain)
+ checksum += (Word) (buffer[*bufferLength - 1] << 8);
+
+ checksum = ~checksum;
+ buffer[*bufferLength] = (Byte) ((checksum & 0xFF00) >> 8);
+ buffer[*bufferLength + 1] = (Byte) (checksum & 0x00FF);
+ buffer[0] = (Byte) (*bufferLength + 1);
+ *bufferLength += 2;
+
+ return (error);
+}
+
+
+Dword Cmd_removeChecksum (
+ IN Demodulator* demodulator,
+ OUT Dword* bufferLength,
+ OUT Byte* buffer
+) {
+ Dword error = Error_NO_ERROR;
+ Dword loop = (*bufferLength - 3) / 2;
+ Dword remain = (*bufferLength - 3) % 2;
+ Dword i;
+ Word checksum = 0;
+
+ for (i = 0; i < loop; i++)
+ checksum += (Word) (buffer[2 * i + 1] << 8) + (Word) (buffer[2 * i + 2]);
+ if (remain)
+ checksum += (Word) (buffer[*bufferLength - 3] << 8);
+
+ checksum = ~checksum;
+ if (((Word)(buffer[*bufferLength - 2] << 8) + (Word)(buffer[*bufferLength - 1])) != checksum) {
+ error = Error_WRONG_CHECKSUM;
+ goto exit;
+ }
+ if (buffer[2])
+ error = Error_FIRMWARE_STATUS | buffer[2];
+
+ buffer[0] = (Byte) (*bufferLength - 3);
+ *bufferLength -= 2;
+
+exit :
+ return (error);
+}
+
+
+Dword Cmd_busTx (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ OUT Byte* buffer
+) {
+ Dword error = Error_NO_ERROR;
+ Byte i;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ for (i = 0; i < User_RETRY_MAX_LIMIT; i++) {
+ error = ganymede->cmdDescription->busDescription->busTx (demodulator, bufferLength, buffer);
+ if (error == 0) goto exit;
+
+ User_delay (demodulator, 1);
+ }
+
+exit:
+ return (error);
+}
+
+
+Dword Cmd_busRx (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ OUT Byte* buffer
+) {
+ Dword error = Error_NO_ERROR;
+ Byte i;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ for (i = 0; i < User_RETRY_MAX_LIMIT; i++) {
+ error = ganymede->cmdDescription->busDescription->busRx (demodulator, bufferLength, buffer);
+ if (error == 0) goto exit;
+
+ User_delay (demodulator, 1);
+ }
+
+exit:
+ return (error);
+}
+
+
+Dword Cmd_busRxData (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ OUT Byte* buffer
+) {
+ Dword error = Error_NO_ERROR;
+ Byte i;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ for (i = 0; i < User_RETRY_MAX_LIMIT; i++) {
+ error = ganymede->cmdDescription->busDescription->busRxData (demodulator, bufferLength, buffer);
+ if (error == 0) goto exit;
+
+ User_delay (demodulator, 1);
+ }
+
+exit:
+ return (error);
+}
+
+
+Dword Cmd_writeRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte registerAddressLength,
+ IN Dword writeBufferLength,
+ IN Byte* writeBuffer
+) {
+ Dword error = Error_NO_ERROR;
+ Word command;
+ Byte buffer[255];
+ Dword bufferLength;
+ Dword remainLength;
+ Dword sendLength;
+ Dword i;
+ Ganymede* ganymede;
+ Dword maxFrameSize;
+
+ User_enterCriticalSection (demodulator);
+
+ if (writeBufferLength == 0) goto exit;
+ if (registerAddressLength > 4) {
+ error = Error_PROTOCOL_FORMAT_INVALID;
+ goto exit;
+ }
+
+ ganymede = (Ganymede*) demodulator;
+ maxFrameSize = ganymede->cmdDescription->mailBoxSize; /** releaseExternalRemove */
+
+ if ((writeBufferLength + 12) > maxFrameSize) {
+ error = Error_INVALID_DATA_LENGTH;
+ goto exit;
+ }
+
+
+ /** short command */
+ if (User_USE_SHORT_CMD && ganymede->booted) {
+ for (i = 0; i < writeBufferLength; i++) {
+ command = Command_SHORT_REG_DEMOD_WRITE + (Byte) (chip << 4) + (Byte) (processor << 4);
+ buffer[0] = (Byte) 4;
+ buffer[1] = (Byte) command;
+ buffer[2] = (Byte) ((registerAddress + i) >> 8);
+ buffer[3] = (Byte) (registerAddress + i);
+ buffer[4] = writeBuffer[i];
+
+ bufferLength = 5;
+ error = Cmd_busTx (demodulator, bufferLength, buffer);
+ if (error) goto exit;
+ }
+ goto exit;
+ }
+
+ /** add frame header */
+ command = Cmd_buildCommand (Command_REG_DEMOD_WRITE, processor, chip);
+ buffer[1] = (Byte) (command >> 8);
+ buffer[2] = (Byte) command;
+ buffer[3] = (Byte) Cmd_sequence++;
+ buffer[4] = (Byte) writeBufferLength;
+ buffer[5] = (Byte) registerAddressLength;
+ buffer[6] = (Byte) ((registerAddress) >> 24); /** Get first byte of reg. address */
+ buffer[7] = (Byte) ((registerAddress) >> 16); /** Get second byte of reg. address */
+ buffer[8] = (Byte) ((registerAddress) >> 8); /** Get third byte of reg. address */
+ buffer[9] = (Byte) (registerAddress ); /** Get fourth byte of reg. address */
+
+ /** add frame data */
+ for (i = 0; i < writeBufferLength; i++) {
+ buffer[10 + i] = writeBuffer[i];
+ }
+
+ /** add frame check-sum */
+ bufferLength = 10 + writeBufferLength;
+ error = Cmd_addChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+ /** send frame */
+ i = 0;
+ sendLength = 0;
+ remainLength = bufferLength;
+ while (remainLength > 0) {
+ i = (remainLength > User_MAX_PKT_SIZE) ? (User_MAX_PKT_SIZE) : (remainLength);
+ error = Cmd_busTx (demodulator, i, &buffer[sendLength]);
+ if (error) goto exit;
+
+ sendLength += i;
+ remainLength -= i;
+ }
+
+ /** get reply frame */
+ bufferLength = 5;
+ error = Cmd_busRx (demodulator, bufferLength, buffer);
+ if (error) goto exit;
+
+ /** remove check-sum from reply frame */
+ error = Cmd_removeChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+exit :
+ User_leaveCriticalSection (demodulator);
+ return (error);
+}
+
+
+Dword Cmd_writeTunerRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte tunerAddress,
+ IN Word registerAddress,
+ IN Byte registerAddressLength,
+ IN Byte writeBufferLength,
+ IN Byte* writeBuffer
+) {
+ Dword error = Error_NO_ERROR;
+ Word command;
+ Byte buffer[255];
+ Dword bufferLength;
+ Dword remainLength;
+ Dword sendLength;
+ Dword i;
+ Ganymede* ganymede;
+ Dword maxFrameSize;
+
+ User_enterCriticalSection (demodulator);
+
+ if (writeBufferLength == 0) goto exit;
+
+ ganymede = (Ganymede*) demodulator;
+ maxFrameSize = ganymede->cmdDescription->mailBoxSize; /** releaseExternalRemove */
+
+ if ((Dword)(writeBufferLength + 11) > maxFrameSize) {
+ error = Error_INVALID_DATA_LENGTH;
+ goto exit;
+ }
+
+ /** short command */
+ if (User_USE_SHORT_CMD && ganymede->booted) {
+ for (i = 0; i < writeBufferLength; i++) {
+ command = Command_SHORT_REG_TUNER_WRITE + (Byte) (chip << 4) + (Byte) (Processor_LINK << 4);
+ buffer[0] = (Byte) 5;
+ buffer[1] = (Byte) command;
+ buffer[2] = (Byte) tunerAddress;
+ buffer[3] = (Byte) registerAddressLength;
+ buffer[4] = (Byte) ((registerAddress + i) >> 8);
+ buffer[5] = (Byte) (registerAddress + i);
+ buffer[6] = writeBuffer[i];
+
+ bufferLength = 7;
+ error = Cmd_busTx (demodulator, bufferLength, buffer);
+ if (error) goto exit;
+ }
+ goto exit;
+ }
+
+ /** add frame header */
+ command = Cmd_buildCommand (Command_REG_TUNER_WRITE, Processor_LINK, chip);
+ buffer[1] = (Byte) (command >> 8);
+ buffer[2] = (Byte) command;
+ buffer[3] = (Byte) Cmd_sequence++;
+ buffer[4] = (Byte) writeBufferLength;
+ buffer[5] = (Byte) tunerAddress;
+ buffer[6] = (Byte) registerAddressLength;
+ buffer[7] = (Byte) (registerAddress >> 8); /** Get high byte of reg. address */
+ buffer[8] = (Byte) (registerAddress); /** Get low byte of reg. address */
+
+ /** add frame data */
+ for (i = 0; i < writeBufferLength; i++) {
+ buffer[9 + i] = writeBuffer[i];
+ }
+
+ /** add frame check-sum */
+ bufferLength = 9 + writeBufferLength;
+ error = Cmd_addChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+ /** send frame */
+ i = 0;
+ sendLength = 0;
+ remainLength = bufferLength;
+ while (remainLength > 0) {
+ i = (remainLength > User_MAX_PKT_SIZE) ? (User_MAX_PKT_SIZE) : (remainLength);
+ error = Cmd_busTx (demodulator, i , &buffer[sendLength]);
+ if (error) goto exit;
+
+ sendLength += i;
+ remainLength -= i;
+ }
+
+ /** get reply frame */
+ bufferLength = 5;
+ error = Cmd_busRx (demodulator, bufferLength, buffer);
+ if (error) goto exit;
+
+ /** remove check-sum from reply frame */
+ error = Cmd_removeChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+exit :
+ User_leaveCriticalSection (demodulator);
+ return (error);
+}
+
+
+Dword Cmd_writeEepromValues (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte eepromAddress,
+ IN Word registerAddress,
+ IN Byte registerAddressLength,
+ IN Byte writeBufferLength,
+ IN Byte* writeBuffer
+) {
+ Dword error = Error_NO_ERROR;
+ Word command;
+ Byte buffer[255];
+ Dword bufferLength;
+ Dword remainLength;
+ Dword sendLength;
+ Dword i;
+ Ganymede* ganymede;
+ Dword maxFrameSize;
+
+ User_enterCriticalSection (demodulator);
+
+ if (writeBufferLength == 0) goto exit;
+
+ ganymede = (Ganymede*) demodulator;
+ maxFrameSize = ganymede->cmdDescription->mailBoxSize; /** releaseExternalRemove */
+
+ if ((Dword)(writeBufferLength + 11) > maxFrameSize) {
+ error = Error_INVALID_DATA_LENGTH;
+ goto exit;
+ }
+
+ /** add frame header */
+ command = Cmd_buildCommand (Command_REG_EEPROM_WRITE, Processor_LINK, chip);
+ buffer[1] = (Byte) (command >> 8);
+ buffer[2] = (Byte) command;
+ buffer[3] = (Byte) Cmd_sequence++;
+ buffer[4] = (Byte) writeBufferLength;
+ buffer[5] = (Byte) eepromAddress;
+ buffer[6] = (Byte) registerAddressLength;
+ buffer[7] = (Byte) (registerAddress >> 8); /** Get high byte of reg. address */
+ buffer[8] = (Byte) registerAddress; /** Get low byte of reg. address */
+
+ /** add frame data */
+ for (i = 0; i < writeBufferLength; i++) {
+ buffer[9 + i] = writeBuffer[i];
+ }
+
+ /** add frame check-sum */
+ bufferLength = 9 + writeBufferLength;
+ error = Cmd_addChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+ /** send frame */
+ i = 0;
+ sendLength = 0;
+ remainLength = bufferLength;
+ while (remainLength > 0) {
+ i = (remainLength > User_MAX_PKT_SIZE) ? (User_MAX_PKT_SIZE) : (remainLength);
+ error = Cmd_busTx (demodulator, i, &buffer[sendLength]);
+ if (error) goto exit;
+
+ sendLength += i;
+ remainLength -= i;
+ }
+
+ /** get reply frame */
+ bufferLength = 5;
+ error = Cmd_busRx (demodulator, bufferLength, buffer);
+ if (error) goto exit;
+
+ /** remove check-sum from reply frame */
+ error = Cmd_removeChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+exit :
+ User_leaveCriticalSection (demodulator);
+ return (error);
+}
+
+
+Dword Cmd_readRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte registerAddressLength,
+ IN Dword readBufferLength,
+ OUT Byte* readBuffer
+) {
+ Dword error = Error_NO_ERROR;
+ Word command;
+ Byte buffer[255];
+ Dword bufferLength;
+ Dword sendLength;
+ Dword remainLength;
+ Dword i, k;
+ Ganymede* ganymede;
+ Dword maxFrameSize;
+
+ User_enterCriticalSection (demodulator);
+
+ if (readBufferLength == 0) goto exit;
+ if (registerAddressLength > 4) {
+ error = Error_PROTOCOL_FORMAT_INVALID;
+ goto exit;
+ }
+
+ ganymede = (Ganymede*) demodulator;
+ maxFrameSize = ganymede->cmdDescription->mailBoxSize; /** releaseExternalRemove */
+
+ if ((readBufferLength + 5) > User_MAX_PKT_SIZE) {
+ error = Error_INVALID_DATA_LENGTH;
+ goto exit;
+ }
+
+ if ((readBufferLength + 5) > maxFrameSize) {
+ error = Error_INVALID_DATA_LENGTH;
+ goto exit;
+ }
+
+
+ /** short command */
+ if (User_USE_SHORT_CMD && ganymede->booted) {
+ for (i = 0; i < readBufferLength; i++) {
+ command = Command_SHORT_REG_DEMOD_READ + (Byte) (chip << 4) + (Byte) (processor << 4);
+ buffer[0] = (Byte) 3;
+ buffer[1] = (Byte) command;
+ buffer[2] = (Byte) ((registerAddress + i) >> 8);
+ buffer[3] = (Byte) (registerAddress + i);
+
+ bufferLength = 4;
+ error = Cmd_busTx (demodulator, bufferLength, buffer);
+ if (error) goto exit;
+
+ bufferLength = 2;
+ error = Cmd_busRx (demodulator, bufferLength, buffer);
+ if (error) goto exit;
+
+ readBuffer[i] = buffer[1];
+ }
+ goto exit;
+ }
+
+ /** add frame header */
+ command = Cmd_buildCommand (Command_REG_DEMOD_READ, processor, chip);
+ buffer[1] = (Byte) (command >> 8);
+ buffer[2] = (Byte) command;
+ buffer[3] = (Byte) Cmd_sequence++;
+ buffer[4] = (Byte) readBufferLength;
+ buffer[5] = (Byte) registerAddressLength;
+ buffer[6] = (Byte) (registerAddress >> 24); /** Get first byte of reg. address */
+ buffer[7] = (Byte) (registerAddress >> 16); /** Get second byte of reg. address */
+ buffer[8] = (Byte) (registerAddress >> 8); /** Get third byte of reg. address */
+ buffer[9] = (Byte) (registerAddress); /** Get fourth byte of reg. address */
+
+ /** add frame check-sum */
+ bufferLength = 10;
+ error = Cmd_addChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+
+ /** send frame */
+ i = 0;
+ sendLength = 0;
+ remainLength = bufferLength;
+ while (remainLength > 0) {
+ i = (remainLength > User_MAX_PKT_SIZE) ? (User_MAX_PKT_SIZE) : (remainLength);
+ error = Cmd_busTx (demodulator, i, &buffer[sendLength]);
+ if (error) goto exit;
+
+ sendLength += i;
+ remainLength -= i;
+ }
+
+ /** get reply frame */
+ bufferLength = 5 + readBufferLength;
+ error = Cmd_busRx (demodulator, bufferLength, buffer);
+ if (error) goto exit;
+
+ /** remove check-sum from reply frame */
+ error = Cmd_removeChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+ for (k = 0; k < readBufferLength; k++) {
+ readBuffer[k] = buffer[k + 3];
+ }
+
+exit :
+ User_leaveCriticalSection (demodulator);
+ return (error);
+}
+
+
+Dword Cmd_readTunerRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte tunerAddress,
+ IN Word registerAddress,
+ IN Byte registerAddressLength,
+ IN Byte readBufferLength,
+ IN Byte* readBuffer
+) {
+ Dword error = Error_NO_ERROR;
+ Word command;
+ Byte buffer[255];
+ Dword bufferLength;
+ Dword remainLength;
+ Dword sendLength;
+ Dword i, k;
+ Ganymede* ganymede;
+ Dword maxFrameSize;
+
+ User_enterCriticalSection (demodulator);
+
+ if (readBufferLength == 0) goto exit;
+
+ ganymede = (Ganymede*) demodulator;
+ maxFrameSize = ganymede->cmdDescription->mailBoxSize; /** releaseExternalRemove */
+
+ if ((Dword)(readBufferLength + 5) > User_MAX_PKT_SIZE) {
+ error = Error_INVALID_DATA_LENGTH;
+ goto exit;
+ }
+
+ if ((Dword)(readBufferLength + 5) > maxFrameSize) {
+ error = Error_INVALID_DATA_LENGTH;
+ goto exit;
+ }
+
+ /** short command */
+ if (User_USE_SHORT_CMD && ganymede->booted) {
+ for (i = 0; i < readBufferLength; i++) {
+ command = Command_SHORT_REG_TUNER_READ + (Byte) (chip << 4) + (Byte) (Processor_LINK << 4);
+ buffer[0] = (Byte) 5;
+ buffer[1] = (Byte) command;
+ buffer[2] = (Byte) tunerAddress;
+ buffer[3] = (Byte) registerAddressLength;
+ buffer[4] = (Byte) ((registerAddress + i) >> 8);
+ buffer[5] = (Byte) (registerAddress + i);
+
+ bufferLength = 6;
+ error = Cmd_busTx (demodulator, bufferLength, buffer);
+ if (error) goto exit;
+
+ bufferLength = 2;
+ error = Cmd_busRx (demodulator, bufferLength, buffer);
+ if (error) goto exit;
+
+ readBuffer[i] = buffer[1];
+ }
+ goto exit;
+ }
+
+ /** add command header */
+ command = Cmd_buildCommand (Command_REG_TUNER_READ, Processor_LINK, chip);
+ buffer[1] = (Byte) (command >> 8);
+ buffer[2] = (Byte) command;
+ buffer[3] = (Byte) Cmd_sequence++;
+ buffer[4] = (Byte) readBufferLength;
+ buffer[5] = (Byte) tunerAddress;
+ buffer[6] = (Byte) registerAddressLength;
+ buffer[7] = (Byte) (registerAddress >> 8); /** Get high byte of reg. address */
+ buffer[8] = (Byte) (registerAddress); /** Get low byte of reg. address */
+
+ /** add frame check-sum */
+ bufferLength = 9;
+ error = Cmd_addChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+ /** send frame */
+ i = 0;
+ sendLength = 0;
+ remainLength = bufferLength;
+ while (remainLength > 0) {
+ i = (remainLength > User_MAX_PKT_SIZE) ? (User_MAX_PKT_SIZE) : (remainLength);
+ error = Cmd_busTx (demodulator, i, &buffer[sendLength]);
+ if (error) goto exit;
+
+ sendLength += i;
+ remainLength -= i;
+ }
+
+ /** get reply frame */
+ bufferLength = 5 + readBufferLength;
+ error = Cmd_busRx (demodulator, bufferLength, buffer);
+ if (error) goto exit;
+
+ /** remove frame check-sum */
+ error = Cmd_removeChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+ for (k = 0; k < readBufferLength; k++) {
+ readBuffer[k] = buffer[k + 3];
+ }
+
+exit :
+ User_leaveCriticalSection (demodulator);
+ return (error);
+}
+
+
+Dword Cmd_readEepromValues (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte eepromAddress,
+ IN Word registerAddress,
+ IN Byte registerAddressLength,
+ IN Byte readBufferLength,
+ OUT Byte* readBuffer
+) {
+ Dword error = Error_NO_ERROR;
+ Word command;
+ Byte buffer[255];
+ Dword bufferLength;
+ Dword remainLength;
+ Dword sendLength;
+ Dword i, k;
+ Ganymede* ganymede;
+ Dword maxFrameSize;
+
+ User_enterCriticalSection (demodulator);
+
+ if (readBufferLength == 0) goto exit;
+
+ ganymede = (Ganymede*) demodulator;
+ maxFrameSize = ganymede->cmdDescription->mailBoxSize; /** releaseExternalRemove */
+
+ if ((Dword)(readBufferLength + 5) > User_MAX_PKT_SIZE) {
+ error = Error_INVALID_DATA_LENGTH;
+ goto exit;
+ }
+
+ if ((Dword)(readBufferLength + 5) > maxFrameSize) {
+ error = Error_INVALID_DATA_LENGTH;
+ goto exit;
+ }
+
+ /** add command header */
+ command = Cmd_buildCommand (Command_REG_EEPROM_READ, Processor_LINK, chip);
+ buffer[1] = (Byte) (command >> 8);
+ buffer[2] = (Byte) command;
+ buffer[3] = (Byte) Cmd_sequence++;
+ buffer[4] = (Byte) readBufferLength;
+ buffer[5] = (Byte) eepromAddress;
+ buffer[6] = (Byte) registerAddressLength;
+ buffer[7] = (Byte) (registerAddress >> 8); /** Get high byte of reg. address */
+ buffer[8] = (Byte) registerAddress; /** Get low byte of reg. address */
+
+ /** add frame check-sum */
+ bufferLength = 9;
+ error = Cmd_addChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+ /** send frame */
+ i = 0;
+ sendLength = 0;
+ remainLength = bufferLength;
+ while (remainLength > 0) {
+ i = (remainLength > User_MAX_PKT_SIZE) ? (User_MAX_PKT_SIZE) : (remainLength);
+ error = Cmd_busTx (demodulator, i, &buffer[sendLength]);
+ if (error) goto exit;
+
+ sendLength += i;
+ remainLength -= i;
+ }
+
+ /** get reply frame */
+ bufferLength = 5 + readBufferLength;
+ error = Cmd_busRx (demodulator, bufferLength, buffer);
+ if (error) goto exit;
+
+ /** remove frame check-sum */
+ error = Cmd_removeChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+ for (k = 0; k < readBufferLength; k++) {
+ readBuffer[k] = buffer[k + 3];
+ }
+
+exit :
+ User_leaveCriticalSection (demodulator);
+ return (error);
+}
+
+
+Dword Cmd_loadFirmware (
+ IN Demodulator* demodulator,
+ IN Dword length,
+ IN Byte* firmware
+) {
+ Dword error = Error_NO_ERROR;
+ Word command;
+ Dword loop;
+ Dword remain;
+ Dword i, j, k;
+ Byte buffer[255];
+ Dword payloadLength;
+ Dword bufferLength;
+ Dword remainLength;
+ Dword sendLength;
+ Ganymede* ganymede;
+ Dword maxFrameSize;
+
+ User_enterCriticalSection (demodulator);
+
+ ganymede = (Ganymede*) demodulator;
+ maxFrameSize = ganymede->cmdDescription->mailBoxSize; /** releaseExternalRemove */
+
+ payloadLength = (maxFrameSize - 6);
+ loop = length / payloadLength;
+ remain = length % payloadLength;
+
+ k = 0;
+ command = Cmd_buildCommand (Command_FW_DOWNLOAD, Processor_LINK, 0);
+ for (i = 0; i < loop; i++) {
+ buffer[1] = (Byte) (command >> 8);
+ buffer[2] = (Byte) command;
+ buffer[3] = (Byte) Cmd_sequence++;
+
+ for (j = 0; j < payloadLength; j++)
+ buffer[4 + j] = firmware[j + i*payloadLength];
+
+ bufferLength = 4 + payloadLength;
+ error = Cmd_addChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+ sendLength = 0;
+ remainLength = maxFrameSize;
+ while (remainLength > 0) {
+ k = (remainLength > User_MAX_PKT_SIZE) ? (User_MAX_PKT_SIZE) : (remainLength);
+ error = Cmd_busTx (demodulator, k, &buffer[sendLength]);
+ if (error) goto exit;
+
+ sendLength += k;
+ remainLength -= k;
+ }
+ }
+
+ if (remain) {
+ buffer[1] = (Byte) (command >> 8);
+ buffer[2] = (Byte) command;
+ buffer[3] = (Byte) Cmd_sequence++;
+
+ for (j = 0; j < remain; j++)
+ buffer[4 + j] = firmware[j + i*payloadLength];
+
+ bufferLength = 4 + remain;
+ error = Cmd_addChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+ sendLength = 0;
+ remainLength = bufferLength;
+ while (remainLength > 0)
+ {
+ k = (remainLength > User_MAX_PKT_SIZE) ? (User_MAX_PKT_SIZE) : (remainLength);
+ error = Cmd_busTx (demodulator, k, &buffer[sendLength]);
+ if (error) goto exit;
+
+ sendLength += k;
+ remainLength -= k;
+ }
+ }
+
+exit :
+ User_leaveCriticalSection (demodulator);
+ return (error);
+}
+
+
+Dword Cmd_reboot (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+ Word command;
+ Byte buffer[255];
+ Dword bufferLength;
+ Ganymede* ganymede;
+ Dword maxFrameSize;
+
+ User_enterCriticalSection (demodulator);
+
+ ganymede = (Ganymede*) demodulator;
+ maxFrameSize = ganymede->cmdDescription->mailBoxSize; /** releaseExternalRemove */
+
+ command = Cmd_buildCommand (Command_REBOOT, Processor_LINK, chip);
+ buffer[1] = (Byte) (command >> 8);
+ buffer[2] = (Byte) command;
+ buffer[3] = (Byte) Cmd_sequence++;
+ bufferLength = 4;
+ error = Cmd_addChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+ error = Cmd_busTx (demodulator, bufferLength, buffer);
+ if (error) goto exit;
+
+exit :
+ User_leaveCriticalSection (demodulator);
+ return (error);
+}
+
+
+Dword Cmd_sendCommand (
+ IN Demodulator* demodulator,
+ IN Word command,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword writeBufferLength,
+ IN Byte* writeBuffer,
+ IN Dword readBufferLength,
+ OUT Byte* readBuffer
+) {
+ Dword error = Error_NO_ERROR;
+ Byte buffer[255];
+ Dword bufferLength;
+ Dword remainLength;
+ Dword sendLength;
+ Dword i, k;
+ Ganymede* ganymede;
+ Dword maxFrameSize;
+
+ User_enterCriticalSection (demodulator);
+
+ ganymede = (Ganymede*) demodulator;
+ maxFrameSize = ganymede->cmdDescription->mailBoxSize; /** releaseExternalRemove */
+
+ if ((writeBufferLength + 6) > maxFrameSize) {
+ error = Error_INVALID_DATA_LENGTH;
+ goto exit;
+ }
+
+ if ((readBufferLength + 5) > User_MAX_PKT_SIZE) {
+ error = Error_INVALID_DATA_LENGTH;
+ goto exit;
+ }
+
+ if ((readBufferLength + 5) > maxFrameSize) {
+ error = Error_INVALID_DATA_LENGTH;
+ goto exit;
+ }
+
+
+ if (writeBufferLength == 0) {
+ command = Cmd_buildCommand (command, processor, chip);
+ buffer[1] = (Byte) (command >> 8);
+ buffer[2] = (Byte) command;
+ buffer[3] = (Byte) Cmd_sequence++;
+ bufferLength = 4;
+ error = Cmd_addChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+ // send command packet
+ i = 0;
+ sendLength = 0;
+ remainLength = bufferLength;
+ while (remainLength > 0) {
+ i = (remainLength > User_MAX_PKT_SIZE) ? (User_MAX_PKT_SIZE) : (remainLength);
+ error = Cmd_busTx (demodulator, i, &buffer[sendLength]);
+ if (error) goto exit;
+
+ sendLength += i;
+ remainLength -= i;
+ }
+ } else {
+ command = Cmd_buildCommand (command, processor, chip);
+ buffer[1] = (Byte) (command >> 8);
+ buffer[2] = (Byte) command;
+ buffer[3] = (Byte) Cmd_sequence++;
+ for (k = 0; k < writeBufferLength; k++)
+ buffer[k + 4] = writeBuffer[k];
+
+
+ bufferLength = 4 + writeBufferLength;
+ error = Cmd_addChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+
+ /** send command */
+ i = 0;
+ sendLength = 0;
+ remainLength = bufferLength;
+ while (remainLength > 0) {
+ i = (remainLength > User_MAX_PKT_SIZE) ? (User_MAX_PKT_SIZE) : (remainLength);
+ error = Cmd_busTx (demodulator, i, &buffer[sendLength]);
+ if (error) goto exit;
+
+ sendLength += i;
+ remainLength -= i;
+ }
+ }
+
+ bufferLength = 5 + readBufferLength;
+
+ error = Cmd_busRx (demodulator, bufferLength, buffer);
+ if (error) goto exit;
+
+ error = Cmd_removeChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+ if (readBufferLength) {
+ for (k = 0; k < readBufferLength; k++) {
+ readBuffer[k] = buffer[k + 3];
+ }
+ }
+
+exit :
+ User_leaveCriticalSection (demodulator);
+ return (error);
+}
+
+
+Dword Cmd_receiveData (
+ IN Demodulator* demodulator,
+ IN Dword registerAddress,
+ IN Dword readBufferLength,
+ OUT Byte* readBuffer
+) {
+ Dword error = Error_NO_ERROR;
+ Word command;
+ Byte buffer[255];
+ Dword bufferLength;
+ Ganymede* ganymede;
+ Dword maxFrameSize;
+
+ if (readBufferLength == 0) goto exit;
+
+ ganymede = (Ganymede*) demodulator;
+ maxFrameSize = ganymede->cmdDescription->mailBoxSize; /** releaseExternalRemove */
+
+ User_enterCriticalSection (demodulator);
+
+ command = Cmd_buildCommand (Command_DATA_READ, Processor_LINK, 0);
+ buffer[1] = (Byte) (command >> 8);
+ buffer[2] = (Byte) command;
+ buffer[3] = (Byte) Cmd_sequence++;
+ buffer[4] = (Byte) ((readBufferLength >> 16) & 0xFF);
+ buffer[5] = (Byte) ((readBufferLength >> 8) & 0xFF);
+ buffer[6] = (Byte) (readBufferLength & 0xFF);
+ buffer[7] = (Byte) ((registerAddress >> 16) & 0xFF);
+ buffer[8] = (Byte) ((registerAddress >> 8) & 0xFF);
+ buffer[9] = (Byte) (registerAddress & 0xFF);
+
+ bufferLength = 10;
+ error = Cmd_addChecksum (demodulator, &bufferLength, buffer);
+ if (error) goto exit;
+
+ error = Cmd_busTx (demodulator, bufferLength, buffer);
+ if (error) goto exit;
+
+ error = Cmd_busRxData (demodulator, readBufferLength, readBuffer);
+
+exit :
+ User_leaveCriticalSection (demodulator);
+ return (error);
+}
diff --git a/api/cmd.h b/api/cmd.h
new file mode 100644
index 0000000..4fb6bc7
--- /dev/null
+++ b/api/cmd.h
@@ -0,0 +1,209 @@
+#ifndef __CMD_H__
+#define __CMD_H__
+
+
+#include "type.h"
+#include "user.h"
+#include "error.h"
+
+/**
+ * Bus types
+ */
+#define Bus_I2C 1
+#define Bus_USB 2
+#define Bus_SPI 3
+#define Bus_SDIO 4
+#define Bus_USB11 5
+#define Bus_I2M 6 /** I2C bus for Mercury */
+#define Bus_I2U 7 /** I2C bus for Mercury USB */
+#define Bus_I2U2 8 /** I2C bus for Mercury USB (new, buffer size is 55) */
+#define Bus_9035U2I 9 /** I2C bus for Ganymede USB */
+
+
+/**
+ * Define commands
+ */
+#define Command_REG_DEMOD_READ 0x0000
+#define Command_REG_DEMOD_WRITE 0x0001
+#define Command_REG_TUNER_READ 0x0002
+#define Command_REG_TUNER_WRITE 0x0003
+#define Command_REG_EEPROM_READ 0x0004
+#define Command_REG_EEPROM_WRITE 0x0005
+#define Command_VAR_READ 0x0008
+#define Command_VAR_WRITE 0x0009
+
+#define Command_DATA_READ 0x0006
+
+#define Command_PLATFORM_GET 0x000A
+#define Command_PLATFORM_SET 0x000B
+#define Command_IP_CACHE 0x000D
+#define Command_IP_ADD 0x000E
+#define Command_IP_REMOVE 0x000F
+#define Command_PID_ADD 0x0010
+#define Command_PID_REMOVE 0x0011
+#define Command_SIPSI_GET 0x0012 /** Get SI/PSI table for specific PID "once". */
+#define Command_SIPSI_MPE_RESET 0x0013
+#define Command_H_PID_ADD 0x0015
+#define Command_H_PID_REMOVE 0x0016
+#define Command_ABORT 0x0017
+#define Command_IR_GET 0x0018
+#define Command_IR_SET 0x0019
+#define Command_FW_DOWNLOAD_BEGIN 0x0024
+#define Command_FW_DOWNLOAD 0x0021
+#define Command_FW_DOWNLOAD_END 0x0025
+#define Command_QUERYINFO 0x0022
+#define Command_BOOT 0x0023
+#define Command_REBOOT 0x0023
+#define Command_RUN_CODE 0x0026
+#define Command_SCATTER_READ 0x0028
+#define Command_SCATTER_WRITE 0x0029
+#define Command_GENERIC_READ 0x002A
+#define Command_GENERIC_WRITE 0x002B
+#define Command_SHORT_REG_DEMOD_READ 0x02
+#define Command_SHORT_REG_DEMOD_WRITE 0X03
+#define Command_SHORT_REG_TUNER_READ 0x04
+#define Command_SHORT_REG_TUNER_WRITE 0X05
+
+#define Command_SERVICES_GET 0x0083
+#define Command_COMPONENT_ADD 0x0086
+#define Command_COMPONENT_REMOVE 0x0087
+#define Command_FIG_ADD 0x0088
+#define Command_FIG_REMOVE 0x0089
+
+
+#define Bus_MAX_WRITE_SIZE 254
+#define Bus_MAX_READ_SIZE 254
+
+
+#define Cmd_buildCommand(command, processor, chip) (command + (Word) (processor << 12) + (Word) (chip << 12))
+
+
+/**
+ *
+ */
+Dword Cmd_writeRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte registerAddressLength,
+ IN Dword writeBufferLength,
+ IN Byte* writeBuffer
+);
+
+
+/**
+ *
+ */
+Dword Cmd_writeTunerRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte tunerAddress,
+ IN Word registerAddress,
+ IN Byte registerAddressLength,
+ IN Byte writeBufferLength,
+ IN Byte* writeBuffer
+);
+
+
+/**
+ *
+ */
+Dword Cmd_writeEepromValues (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte eepromAddress,
+ IN Word registerAddress,
+ IN Byte registerAddressLength,
+ IN Byte writeBufferLength,
+ IN Byte* writeBuffer
+);
+
+
+/**
+ *
+ */
+Dword Cmd_readRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte registerAddressLength,
+ IN Dword readBufferLength,
+ OUT Byte* readBuffer
+);
+
+
+/**
+ *
+ */
+Dword Cmd_readTunerRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte tunerAddress,
+ IN Word registerAddress,
+ IN Byte registerAddressLength,
+ IN Byte readBufferLength,
+ IN Byte* readBuffer
+);
+
+
+/**
+ *
+ */
+Dword Cmd_readEepromValues (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte eepromAddress,
+ IN Word registerAddress,
+ IN Byte registerAddressLength,
+ IN Byte readBufferLength,
+ OUT Byte* readBuffer
+);
+
+
+/**
+ *
+ */
+Dword Cmd_loadFirmware (
+ IN Demodulator* demodulator,
+ IN Dword length,
+ IN Byte* firmware
+);
+
+
+/**
+ *
+ */
+Dword Cmd_reboot (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ *
+ */
+Dword Cmd_sendCommand (
+ IN Demodulator* demodulator,
+ IN Word command,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword writeBufferLength,
+ IN Byte* writeBuffer,
+ IN Dword readBufferLength,
+ OUT Byte* readBuffer
+);
+
+
+Dword Cmd_receiveData (
+ IN Demodulator* demodulator,
+ IN Dword registerAddress,
+ IN Dword readBufferLength,
+ OUT Byte* readBuffer
+);
+
+extern CmdDescription Cmd_busDescription;
+
+
+#endif \ No newline at end of file
diff --git a/api/demodulator.c b/api/demodulator.c
new file mode 100644
index 0000000..49c28f7
--- /dev/null
+++ b/api/demodulator.c
@@ -0,0 +1,462 @@
+#include "demodulator.h"
+
+
+Dword Demodulator_writeRegister (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte value
+) {
+ return (Standard_writeRegister (demodulator, chip, processor, registerAddress, value));
+}
+
+
+Dword Demodulator_writeRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+) {
+ return (Standard_writeRegisters (demodulator, chip, processor, registerAddress, bufferLength, buffer));
+}
+
+
+Dword Demodulator_writeTunerRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word registerAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+) {
+ return (Standard_writeTunerRegisters (demodulator, chip, registerAddress, bufferLength, buffer));
+}
+
+
+Dword Demodulator_writeGenericRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte interfaceIndex,
+ IN Byte slaveAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+) {
+ return (Standard_writeGenericRegisters (demodulator, chip, interfaceIndex, slaveAddress, bufferLength, buffer));
+}
+
+
+Dword Demodulator_writeEepromValues (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word registerAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+) {
+ return (Standard_writeEepromValues (demodulator, chip, registerAddress, bufferLength, buffer));
+}
+
+
+Dword Demodulator_writeRegisterBits (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte position,
+ IN Byte length,
+ IN Byte value
+)
+{
+ return (Standard_writeRegisterBits (demodulator, chip, processor, registerAddress, position, length, value));
+}
+
+
+Dword Demodulator_readRegister (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ OUT Byte* value
+) {
+ return (Standard_readRegister (demodulator, chip, processor, registerAddress, value));
+}
+
+
+Dword Demodulator_readRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte bufferLength,
+ OUT Byte* buffer
+) {
+ return (Standard_readRegisters (demodulator, chip, processor, registerAddress, bufferLength, buffer));
+}
+
+
+Dword Demodulator_readTunerRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word registerAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+) {
+ return (Standard_readTunerRegisters (demodulator, chip, registerAddress, bufferLength, buffer));
+}
+
+
+Dword Demodulator_readGenericRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte interfaceIndex,
+ IN Byte slaveAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+) {
+ return (Standard_readGenericRegisters (demodulator, chip, interfaceIndex, slaveAddress, bufferLength, buffer));
+}
+
+
+Dword Demodulator_readEepromValues (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word registerAddress,
+ IN Byte bufferLength,
+ OUT Byte* buffer
+) {
+ return (Standard_readEepromValues (demodulator, chip, registerAddress, bufferLength, buffer));
+}
+
+
+Dword Demodulator_readRegisterBits (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte position,
+ IN Byte length,
+ OUT Byte* value
+) {
+ return (Standard_readRegisterBits (demodulator, chip, processor, registerAddress, position, length, value));
+}
+
+
+Dword Demodulator_getHardwareVersion (
+ IN Demodulator* demodulator,
+ OUT Dword* version
+) {
+ return (Standard_getHardwareVersion (demodulator, version));
+}
+
+
+Dword Demodulator_getFirmwareVersion (
+ IN Demodulator* demodulator,
+ IN Processor processor,
+ OUT Dword* version
+) {
+ return (Standard_getFirmwareVersion (demodulator, processor, version));
+}
+
+
+Dword Demodulator_getPostVitBer (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Dword* postErrorCount, /** 24 bits */
+ OUT Dword* postBitCount, /** 16 bits */
+ OUT Word* abortCount
+){
+ return (Standard_getPostVitBer(demodulator, chip, postErrorCount, postBitCount, abortCount));
+}
+
+
+Dword Demodulator_getRfAgcGain (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Byte* rfAgc
+) {
+ return (Standard_getRfAgcGain (demodulator, chip, rfAgc));
+}
+
+
+Dword Demodulator_getIfAgcGain (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Byte* ifAgc
+) {
+ return (Standard_getIfAgcGain (demodulator, chip, ifAgc));
+}
+
+
+Dword Demodulator_getSignalQuality (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Byte* quality
+) {
+ return (Standard_getSignalQuality (demodulator, chip, quality));
+}
+
+
+Dword Demodulator_getSignalStrength (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Byte* strength
+) {
+ return (Standard_getSignalStrength (demodulator, chip, strength));
+}
+
+
+Dword Demodulator_getSignalStrengthDbm (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Long rfpullUpVolt_X10, /** RF pull up voltage multiplied by 10 */
+ IN Long ifpullUpVolt_X10, /** IF pull up voltage multiplied by 10 */
+ OUT Long* strengthDbm /** DBm */
+) {
+ return (Standard_getSignalStrengthDbm (demodulator, chip, rfpullUpVolt_X10, ifpullUpVolt_X10, strengthDbm));
+}
+
+
+
+Dword Demodulator_loadIrTable (
+ IN Demodulator* demodulator,
+ IN Word tableLength,
+ IN Byte* table
+) {
+ return (Standard_loadIrTable (demodulator, tableLength, table));
+}
+
+
+Dword Demodulator_initialize (
+ IN Demodulator* demodulator,
+ IN Byte chipNumber,
+ IN Word sawBandwidth,
+ IN StreamType streamType,
+ IN Architecture architecture
+) {
+ return (Standard_initialize (demodulator, chipNumber, sawBandwidth, streamType, architecture));
+}
+
+
+Dword Demodulator_finalize (
+ IN Demodulator* demodulator
+) {
+ return (Standard_finalize (demodulator));
+}
+
+
+Dword Demodulator_isTpsLocked (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Bool* locked
+) {
+ return (Standard_isTpsLocked (demodulator, chip, locked));
+}
+
+
+Dword Demodulator_isMpeg2Locked (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Bool* locked
+) {
+ return (Standard_isMpeg2Locked (demodulator, chip, locked));
+}
+
+
+Dword Demodulator_isLocked (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Bool* locked
+)
+{
+ return (Standard_isLocked (demodulator, chip, locked));
+}
+
+
+Dword Demodulator_reset (
+ IN Demodulator* demodulator
+) {
+ return (Standard_reset (demodulator));
+}
+
+
+Dword Demodulator_getChannelModulation (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT ChannelModulation* channelModulation
+) {
+ return (Standard_getChannelModulation (demodulator, chip, channelModulation));
+}
+
+
+Dword Demodulator_acquireChannel (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ return (Standard_acquireChannel (demodulator, chip, bandwidth, frequency));
+}
+
+
+Dword Demodulator_setStreamType (
+ IN Demodulator* demodulator,
+ IN StreamType streamType
+) {
+ return (Standard_setStreamType (demodulator, streamType));
+}
+
+
+Dword Demodulator_setArchitecture (
+ IN Demodulator* demodulator,
+ IN Architecture architecture
+) {
+ return (Standard_setArchitecture (demodulator, architecture));
+}
+
+
+Dword Demodulator_setViterbiRange (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte superFrameCount,
+ IN Word packetUnit
+) {
+ return (Standard_setViterbiRange (demodulator, chip, superFrameCount, packetUnit));
+}
+
+
+Dword Demodulator_getViterbiRange (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte* superFrameCount,
+ IN Word* packetUnit
+) {
+ return (Standard_getViterbiRange (demodulator, chip, superFrameCount, packetUnit));
+}
+
+
+Dword Demodulator_getStatistic (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Statistic* statistic
+) {
+ return (Standard_getStatistic (demodulator, chip, statistic));
+}
+
+
+Dword Demodulator_getInterrupts (
+ IN Demodulator* demodulator,
+ OUT Interrupts* interrupts
+) {
+ return (Standard_getInterrupts (demodulator, interrupts));
+}
+
+
+Dword Demodulator_clearInterrupt (
+ IN Demodulator* demodulator,
+ IN Interrupt interrupt
+) {
+ return (Standard_clearInterrupt (demodulator, interrupt));
+}
+
+
+Dword Demodulator_getDataLength (
+ IN Demodulator* demodulator,
+ OUT Dword* dataLength,
+ OUT Bool* valid
+) {
+ return (Standard_getDataLength (demodulator, dataLength, valid));
+}
+
+
+Dword Demodulator_getData (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ OUT Byte* buffer
+) {
+ return (Standard_getData (demodulator, bufferLength, buffer));
+}
+
+
+Dword Demodulator_getDatagram (
+ IN Demodulator* demodulator,
+ OUT Dword* bufferLength,
+ OUT Byte* buffer
+) {
+ return (Standard_getDatagram (demodulator, bufferLength, buffer));
+}
+
+
+Dword Demodulator_getIrCode (
+ IN Demodulator* demodulator,
+ OUT Dword* code
+) {
+ return (Standard_getIrCode (demodulator, code));
+}
+
+
+Dword Demodulator_reboot (
+ IN Demodulator* demodulator
+) {
+ return (Standard_reboot (demodulator));
+}
+
+
+Dword Demodulator_controlPowerSaving (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte control
+) {
+ return (Standard_controlPowerSaving (demodulator, chip, control));
+}
+
+
+Dword Demodulator_controlTunerPowerSaving (
+ IN Demodulator* demodulator,
+ IN Byte control
+) {
+ return (Standard_controlTunerPowerSaving (demodulator, control));
+}
+
+
+Dword Demodulator_controlPidFilter (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte control
+) {
+ return (Standard_controlPidFilter (demodulator, chip, control));
+}
+
+
+Dword Demodulator_resetPidFilter (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ return (Standard_resetPidFilter (demodulator, chip));
+}
+
+
+Dword Demodulator_addPidToFilter (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte index,
+ IN Pid pid
+) {
+ return (Standard_addPidToFilter (demodulator, chip, index, pid));
+}
+
+
+Dword Demodulator_setBurstSize (
+ IN Demodulator* demodulator,
+ IN BurstSize burstSize
+) {
+ return (Standard_setBurstSize (demodulator, burstSize));
+}
+
+
+Dword Demodulator_getBurstSize (
+ IN Demodulator* demodulator,
+ IN BurstSize* burstSize
+) {
+ return (Standard_getBurstSize (demodulator, burstSize));
+}
diff --git a/api/demodulator.h b/api/demodulator.h
new file mode 100644
index 0000000..bfd6830
--- /dev/null
+++ b/api/demodulator.h
@@ -0,0 +1,1305 @@
+#ifndef __GANYMEDE_H__
+#define __GANYMEDE_H__
+
+
+#include "type.h"
+#include "user.h"
+#include "error.h"
+#include "register.h"
+#include "variable.h"
+#include "cmd.h"
+#include "standard.h"
+#include "demodulatorextend.h" /** releaseExternalRemove */
+#include "version.h"
+
+/**
+ * Write one byte (8 bits) to a specific register in demodulator.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param processor The processor of specified register. Because each chip
+ * has two processor so user have to specify the processor. The
+ * possible values are Processor_LINK and Processor_OFDM.
+ * @param registerAddress the address of the register to be written.
+ * @param value the value to be written.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Ganymede ganymede;
+ *
+ * // Set the value of register 0xA000 in demodulator to 0.
+ * error = Demodulator_writeRegister ((Demodulator*) &ganymede, 0, Processor_LINK, 0xA000, 0);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_writeRegister (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte value
+);
+
+
+/**
+ * Write a sequence of bytes to the contiguous registers in demodulator.
+ * The maximum burst size is restricted by the capacity of bus. If bus
+ * could transfer N bytes in one cycle, then the maximum value of
+ * bufferLength would be N - 5.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param processor The processor of specified register. Because each chip
+ * has two processor so user have to specify the processor. The
+ * possible values are Processor_LINK and Processor_OFDM.
+ * @param registerAddress the start address of the registers to be written.
+ * @param bufferLength the number of registers to be written.
+ * @param buffer a byte array which is used to store values to be written.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Byte buffer[3] = { 0x00, 0x01, 0x02 };
+ * Ganymede ganymede;
+ *
+ * // Set the value of register 0xA000 in demodulator to 0.
+ * // Set the value of register 0xA001 in demodulator to 1.
+ * // Set the value of register 0xA002 in demodulator to 2.
+ * error = Demodulator_writeRegisters ((Demodulator*) &ganymede, 0, Processor_LINK, 0xA000, 3, buffer);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_writeRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+);
+
+
+/**
+ * Write a sequence of bytes to the contiguous registers in slave device.
+ * The maximum burst size is restricted by the capacity of bus. If bus
+ * could transfer N bytes in one cycle, then the maximum value of
+ * bufferLength would be N - 6 (one more byte to specify tuner address).
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param registerAddress the start address of the registers to be read.
+ * @param bufferLength the number of registers to be read.
+ * @param buffer a byte array which is used to store values to be read.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Byte buffer[3] = { 0x00, 0x01, 0x02 };
+ * Ganymede ganymede;
+ *
+ * // Set the value of register 0x0000 in tuner to 0.
+ * // Set the value of register 0x0001 in tuner to 1.
+ * // Set the value of register 0x0002 in tuner to 2.
+ * error = Demodulator_writeTunerRegistersWithAddress ((Demodulator*) &ganymede, 0, 0x38, 0x00, 1, 3, buffer);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_writeTunerRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word registerAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+);
+
+
+/**
+ * Write a sequence of bytes to the contiguous registers in slave device
+ * through specified interface (1, 2, 3).
+ * The maximum burst size is restricted by the capacity of bus. If bus
+ * could transfer N bytes in one cycle, then the maximum value of
+ * bufferLength would be N - 6 (one more byte to specify tuner address).
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param interfaceIndex the index of interface. The possible values are
+ * 1~3.
+ * @param slaveAddress the I2c address of slave device.
+ * @param bufferLength the number of registers to be read.
+ * @param buffer a byte array which is used to store values to be read.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Demodulator_writeGenericRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte interfaceIndex,
+ IN Byte slaveAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+);
+
+
+/**
+ * Write a sequence of bytes to the contiguous cells in the EEPROM.
+ * The maximum burst size is restricted by the capacity of bus. If bus
+ * could transfer N bytes in one cycle, then the maximum value of
+ * bufferLength would be N - 5 (firmware will detect EEPROM address).
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param registerAddress the start address of the cells to be written.
+ * @param registerAddressLength the valid bytes of registerAddress.
+ * @param bufferLength the number of cells to be written.
+ * @param buffer a byte array which is used to store values to be written.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Byte buffer[3] = { 0x00, 0x01, 0x02 };
+ * Ganymede ganymede;
+ *
+ * // Set the value of cell 0x0000 in EEPROM to 0.
+ * // Set the value of cell 0x0001 in EEPROM to 1.
+ * // Set the value of cell 0x0002 in EEPROM to 2.
+ * error = Demodulator_writeEepromValues ((Demodulator*) &ganymede, 0, 0x0000, 3, buffer);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_writeEepromValues (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word registerAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+);
+
+
+/**
+ * Modify bits in the specific register.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param processor The processor of specified register. Because each chip
+ * has two processor so user have to specify the processor. The
+ * possible values are Processor_LINK and Processor_OFDM.
+ * @param registerAddress the address of the register to be written.
+ * @param position the start position of bits to be modified (0 means the
+ * LSB of the specifyed register).
+ * @param length the length of bits.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Ganymede ganymede;
+ *
+ * // Modify the LSB of register 0xA000 in demodulator to 0.
+ * error = Demodulator_writeRegisterBits ((Demodulator*) &ganymede, 0, Processor_LINK, 0xA000, 0, 1, 0);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_writeRegisterBits (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte position,
+ IN Byte length,
+ IN Byte value
+);
+
+
+/**
+ * Read one byte (8 bits) from a specific register in demodulator.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param processor The processor of specified register. Because each chip
+ * has two processor so user have to specify the processor. The
+ * possible values are Processor_LINK and Processor_OFDM.
+ * @param registerAddress the address of the register to be read.
+ * @param value the pointer used to store the value read from demodulator
+ * register.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Byte value;
+ * Ganymede ganymede;
+ *
+ * // Get the value of register 0xA000 in demodulator.
+ * error = Demodulator_readRegister ((Demodulator*) &ganymede, 0, Processor_LINK, 0xA000, &value);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * printf ("The value of 0xA000 is %2x", value);
+ * </pre>
+ */
+Dword Demodulator_readRegister (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ OUT Byte* value
+);
+
+
+/**
+ * Read a sequence of bytes from the contiguous registers in demodulator.
+ * The maximum burst size is restricted by the capacity of bus. If bus
+ * could transfer N bytes in one cycle, then the maximum value of
+ * bufferLength would be N - 5.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param processor The processor of specified register. Because each chip
+ * has two processor so user have to specify the processor. The
+ * possible values are Processor_LINK and Processor_OFDM.
+ * @param registerAddress the address of the register to be read.
+ * @param bufferLength the number of registers to be read.
+ * @param buffer a byte array which is used to store values to be read.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Byte buffer[3];
+ * Ganymede ganymede;
+ *
+ * // Get the value of register 0xA000, 0xA001, 0xA002 in demodulator.
+ * error = Demodulator_readRegisters ((Demodulator*) &ganymede, 0, Processor_LINK, 0xA000, 3, buffer);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * printf ("The value of 0xA000 is %2x", buffer[0]);
+ * printf ("The value of 0xA001 is %2x", buffer[1]);
+ * printf ("The value of 0xA002 is %2x", buffer[2]);
+ * </pre>
+ */
+Dword Demodulator_readRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte bufferLength,
+ OUT Byte* buffer
+);
+
+
+/**
+ * Read a sequence of bytes from the contiguous registers in tuner.
+ * The maximum burst size is restricted by the capacity of bus. If bus
+ * could transfer N bytes in one cycle, then the maximum value of
+ * bufferLength would be N - 6 (one more byte to specify tuner address).
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param registerAddress the start address of the registers to be read.
+ * @param registerAddressLength the valid bytes of registerAddress.
+ * @param bufferLength the number of registers to be read.
+ * @param buffer a byte array which is used to store values to be read.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Byte buffer[3];
+ * Ganymede ganymede;
+ *
+ * // Get the value of register 0x0000, 0x0001, 0x0002 in tuner.
+ * error = Demodulator_readTunerRegisters ((Demodulator*) &ganymede, 0, 0x0000, 3, buffer);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * printf ("The value of 0x0000 is %2x", buffer[0]);
+ * printf ("The value of 0x0001 is %2x", buffer[1]);
+ * printf ("The value of 0x0002 is %2x", buffer[2]);
+ * </pre>
+ */
+Dword Demodulator_readTunerRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word registerAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+);
+
+
+/**
+ * Read a sequence of bytes from the contiguous registers in slave device
+ * through specified interface (1, 2, 3).
+ * The maximum burst size is restricted by the capacity of bus. If bus
+ * could transfer N bytes in one cycle, then the maximum value of
+ * bufferLength would be N - 6 (one more byte to specify tuner address).
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param interfaceIndex the index of interface. The possible values are
+ * 1~3.
+ * @param slaveAddress the I2c address of slave device.
+ * @param bufferLength the number of registers to be read.
+ * @param buffer a byte array which is used to store values to be read.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Demodulator_readGenericRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte interfaceIndex,
+ IN Byte slaveAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+);
+
+
+/**
+ * Read a sequence of bytes from the contiguous cells in the EEPROM.
+ * The maximum burst size is restricted by the capacity of bus. If bus
+ * could transfer N bytes in one cycle, then the maximum value of
+ * bufferLength would be N - 5 (firmware will detect EEPROM address).
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param registerAddress the start address of the cells to be read.
+ * @param registerAddressLength the valid bytes of registerAddress.
+ * @param bufferLength the number of cells to be read.
+ * @param buffer a byte array which is used to store values to be read.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Byte buffer[3];
+ * Ganymede ganymede;
+ *
+ * // Get the value of cell 0x0000, 0x0001, 0x0002 in EEPROM.
+ * error = Demodulator_readEepromValues ((Demodulator*) &ganymede, 0, 0x0000, 3, buffer);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * printf ("The value of 0x0000 is %2x", buffer[0]);
+ * printf ("The value of 0x0001 is %2x", buffer[1]);
+ * printf ("The value of 0x0002 is %2x", buffer[2]);
+ * </pre>
+ */
+Dword Demodulator_readEepromValues (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word registerAddress,
+ IN Byte bufferLength,
+ OUT Byte* buffer
+);
+
+
+/**
+ * Read bits of the specified register.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param processor The processor of specified register. Because each chip
+ * has two processor so user have to specify the processor. The
+ * possible values are Processor_LINK and Processor_OFDM.
+ * @param registerAddress the address of the register to be read.
+ * @param position the start position of bits to be read (0 means the
+ * LSB of the specifyed register).
+ * @param length the length of bits.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Byte value;
+ * Ganymede ganymede;
+ *
+ * // Read the LSB of register 0xA000 in demodulator.
+ * error = Demodulator_readRegisterBits ((Demodulator*) &ganymede, 0, Processor_LINK, 0xA000, 0, 1, &value);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * printf ("The value of LSB of 0xA000 is %2x", value);
+ * </pre>
+ */
+Dword Demodulator_readRegisterBits (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte position,
+ IN Byte length,
+ OUT Byte* value
+);
+
+
+/**
+ * Get the version of hardware.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param version the version of hardware.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Dword version;
+ * Ganymede ganymede;
+ *
+ * // Add PID to PID filter.
+ * error = Demodulator_getHardwareVersion ((Demodulator*) &ganymede, &version);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("The version of hardware is : %X", version);
+ * </pre>
+ */
+Dword Demodulator_getHardwareVersion (
+ IN Demodulator* demodulator,
+ OUT Dword* version
+);
+
+
+/**
+ * Get the version of firmware.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param version the version of firmware.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Dword version;
+ * Ganymede ganymede;
+ *
+ * // Get the version of Link layer firmware.
+ * error = Demodulator_getFirmwareVersion ((Demodulator*) &ganymede, Processor_LINK, &version);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("The version of firmware is : %X", version);
+ * </pre>
+ */
+Dword Demodulator_getFirmwareVersion (
+ IN Demodulator* demodulator,
+ IN Processor processor,
+ OUT Dword* version
+);
+
+
+/**
+ * Get post VitBer
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param postErrorCount error count after viterbi
+ * @param postBitCount total count after viterbi
+ * @param abortCount error count after reed-soloman
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getPostVitBer (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Dword* postErrorCount, /** 24 bits */
+ OUT Dword* postBitCount, /** 16 bits */
+ OUT Word* abortCount
+);
+
+
+/**
+ * Get RF AGC gain.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param rfAgc the value of RF AGC.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Byte rfAgc;
+ * Ganymede ganymede;
+ *
+ * // Set I2C as the control bus.
+ * error = Demodulator_getRfAgcGain ((Demodulator*) &ganymede, 0, rfAgc);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_getRfAgcGain (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Byte* rfAgc
+);
+
+
+/**
+ * Get IF AGC.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param ifAgc the value of IF AGC.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Byte ifAgc;
+ * Ganymede ganymede;
+ *
+ * // Set I2C as the control bus.
+ * error = Demodulator_getIfAgcGain ((Demodulator*) &ganymede, 0, ifAgc);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_getIfAgcGain (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Byte* ifAgc
+);
+
+
+/**
+ * Get siganl quality.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7. NOTE: When the architecture is set to Architecture_DCA
+ * this parameter is regard as don't care.
+ * @param quality The value of signal quality.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getSignalQuality (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Byte* quality
+);
+
+
+/**
+ * Get signal strength
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param strength The value of signal strength.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getSignalStrength (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Byte* strength
+);
+
+
+/**
+ * Get signal strength in dbm
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param rfpullUpVolt_X10 the pullup voltag of RF multiply 10.
+ * @param ifpullUpVolt_X10 the pullup voltag of IF multiply 10.
+ * @param strengthDbm The value of signal strength in DBm.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getSignalStrengthDbm (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Long rfpullUpVolt_X10, /** RF pull up voltage multiplied by 10 */
+ IN Long ifpullUpVolt_X10, /** IF pull up voltage multiplied by 10 */
+ OUT Long* strengthDbm /** DBm */
+);
+
+
+/**
+ * Load the IR table for USB device.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param tableLength The length of IR table.
+ * @param table The content of IR table.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_loadIrTable (
+ IN Demodulator* demodulator,
+ IN Word tableLength,
+ IN Byte* table
+);
+
+
+
+/**
+ * First, download firmware from host to demodulator. Actually, firmware is
+ * put in firmware.h as a part of source code. Therefore, in order to
+ * update firmware the host have to re-compile the source code.
+ * Second, setting all parameters which will be need at the beginning.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chipNumber The total number of demodulators.
+ * @param sawBandwidth SAW filter bandwidth in KHz. The possible values
+ * are 6000, 7000, and 8000 (KHz).
+ * @param streamType The format of output stream.
+ * @param architecture the architecture of demodulator.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Ganymede ganymede;
+ *
+ * // Initialize demodulators.
+ * // SAW Filter : 8MHz
+ * // Stream Type : IP Datagram.
+ * error = Demodulator_initialize ((Demodulator*) &ganymede, 1, 8, StreamType_IP_DATAGRAM, Architecture_DCA);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_initialize (
+ IN Demodulator* demodulator,
+ IN Byte chipNumber,
+ IN Word sawBandwidth,
+ IN StreamType streamType,
+ IN Architecture architecture
+);
+
+
+/**
+ * Power off the demodulators.
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Ganymede ganymede;
+ *
+ * // Finalize demodulators.
+ * error = Demodulator_finalize ((Demodulator*) &ganymede);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_finalize (
+ IN Demodulator* demodulator
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_isTpsLocked (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Bool* locked
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_isMpeg2Locked (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Bool* locked
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7. NOTE: When the architecture is set to Architecture_DCA
+ * this parameter is regard as don't care.
+ * @param locked the result of frequency tuning. True if there is
+ * demodulator can lock signal, False otherwise.
+ * @see Demodulator_acquireChannel
+ */
+Dword Demodulator_isLocked (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Bool* locked
+);
+
+
+/**
+ * Reset demodulator.
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Ganymede ganymede;
+ *
+ * // Reset demodulator.
+ * error = Demodulator_reset ((Demodulator*) &ganymede);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_reset (
+ IN Demodulator* demodulator
+);
+
+
+/**
+ * Get channel modulation related information.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param channelModulation The modulation of channel.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getChannelModulation (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT ChannelModulation* channelModulation
+);
+
+
+/**
+ * Specify the bandwidth of channel and tune the channel to the specific
+ * frequency. Afterwards, host could use output parameter dvbH to determine
+ * if there is a DVB-H signal.
+ * In DVB-T mode, after calling this function the output parameter dvbH
+ * should return False and host could use output parameter "locked" to check
+ * if the channel has correct TS output.
+ * In DVB-H mode, after calling this function the output parameter dvbH should
+ * return True and host could start get platform thereafter.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7. NOTE: When the architecture is set to Architecture_DCA
+ * this parameter is regard as don't care.
+ * @param bandwidth The channel bandwidth.
+ * DVB-T: 5000, 6000, 7000, and 8000 (KHz).
+ * DVB-H: 5000, 6000, 7000, and 8000 (KHz).
+ * T-DMB: 5000, 6000, 7000, and 8000 (KHz).
+ * FM: 100, and 200 (KHz).
+ * @param frequency the channel frequency in KHz.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Bool locked;
+ * Ganymede ganymede;
+ *
+ * error = Demodulator_acquireChannel ((Demodulator*) &ganymede, 0, 8000, 666000);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ *
+ * error = Demodulator_isLocked ((Demodulator*) &ganymede, 0, &locked);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ *
+ * if (locked == True) {
+ * // In DVB-T mode.
+ * // Start to process TS
+ * // Because DVB-T could be multiplex with DVB-H
+ * }
+ * </pre>
+ */
+Dword Demodulator_acquireChannel (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+
+
+
+/**
+ * Set the output stream type of chip. Because the device could output in
+ * many stream type, therefore host have to choose one type before receive
+ * data.
+ *
+ * Note: After host know all the available channels, and want to change to
+ * specific channel, host have to choose output mode before receive
+ * data. Please refer the example of Demodulator_setStreamType.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param streamType the possible values are
+ * DVB-H: StreamType_DVBH_DATAGRAM
+ * StreamType_DVBH_DATABURST
+ * DVB-T: StreamType_DVBT_DATAGRAM
+ * StreamType_DVBT_PARALLEL
+ * StreamType_DVBT_SERIAL
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Ganymede ganymede;
+ *
+ * error = Demodulator_setStreamType ((Demodulator*) &ganymede, StreamType_DVBT_PARALLEL)
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_setStreamType (
+ IN Demodulator* demodulator,
+ IN StreamType streamType
+);
+
+
+/**
+ * Set the architecture of chip. When two of our device are using, they could
+ * be operated in Diversity Combine Architecture (DCA) or (PIP). Therefore,
+ * host could decide which mode to be operated.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param architecture the possible values are
+ * Architecture_DCA
+ * Architecture_PIP
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Ganymede ganymede;
+ *
+ * // Set architecture.
+ * error = Demodulator_setArchitecture ((Demodulator*) &ganymede, Architecture_DCA)
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_setArchitecture (
+ IN Demodulator* demodulator,
+ IN Architecture architecture
+);
+
+
+/**
+ * Set the counting range for Pre-Viterbi and Post-Viterbi.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param frameCount the number of super frame for Pre-Viterbi.
+ * @param packetUnit the number of packet unit for Post-Viterbi.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Ganymede ganymede;
+ *
+ * // Set Viterbi range.
+ * error = Demodulator_setViterbiRange ((Demodulator*) &ganymede, 0, 1, 10000);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_setViterbiRange (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte superFrameCount,
+ IN Word packetUnit
+);
+
+
+/**
+ * Get the counting range for Pre-Viterbi and Post-Viterbi.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param frameCount the number of super frame for Pre-Viterbi.
+ * @param packetUnit the number of packet unit for Post-Viterbi.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Byte superFrameCount;
+ * Word packetUnit;
+ * Ganymede ganymede;
+ *
+ * // Set Viterbi range.
+ * error = Demodulator_getViterbiRange ((Demodulator*) &ganymede, 0, &superFrameCount, &packetUnit);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_getViterbiRange (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte* superFrameCount,
+ IN Word* packetUnit
+);
+
+
+/**
+ * Get the statistic values of demodulator, it includes Pre-Viterbi BER,
+ * Post-Viterbi BER, Abort Count, Signal Presented Flag, Signal Locked Flag,
+ * Signal Quality, Signal Strength, Delta-T for DVB-H time slicing.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param statistic the structure that store all statistic values.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Statistic statistic;
+ * double preBer;
+ * double postBer;
+ * Ganymede ganymede;
+ *
+ * // Set statistic range.
+ * error = Demodulator_getStatistic ((Demodulator*) &ganymede, 0, &statistic);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * preBer = (double) statistic.preVitErrorCount / (double) statistic.preVitBitCount;
+ * printf ("Pre-Viterbi BER = %f\n", preBer);
+ * postBer = (double) statistic.postVitErrorCount / (double) statistic.postVitBitCount;
+ * printf ("Post-Viterbi BER = %f\n", postBer);
+ * printf ("Abort Count = %d\n", statistic.abortCount);
+ * if (statistic.signalPresented == True)
+ * printf ("Signal Presented = True\n");
+ * else
+ * printf ("Signal Presented = False\n");
+ * if (statistic.signalLocked == True)
+ * printf ("Signal Locked = True\n");
+ * else
+ * printf ("Signal Locked = False\n");
+ * printf ("Signal Quality = %d\n", statistic.signalQuality);
+ * printf ("Signal Strength = %d\n", statistic.signalStrength);
+ * </pre>
+ */
+Dword Demodulator_getStatistic (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Statistic* statistic
+);
+
+
+/**
+ * Get the type of interrupts.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param interrupts the type of interrupts.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Interrupt interrupts;
+ * Ganymede ganymede;
+ *
+ * // Get the type of interrupts.
+ * error = Demodulator_getInterrupts ((Demodulator*) &ganymede, &interrupts);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * if (interrupts & Interrupt_VERSION) {
+ * // Get IP version
+ * }
+ * if (interrupts & Interrupt_DVBH) {
+ * // Get DVB-H Data
+ * }
+ * if (interrupts & Interrupt_DVBT) {
+ * // Get DVB-T Data
+ * }
+ * if (interrupts & Interrupt_SIPSI) {
+ * // Get SI/PSI
+ * }
+ * </pre>
+ */
+Dword Demodulator_getInterrupts (
+ IN Demodulator* demodulator,
+ OUT Interrupts* interrupts
+);
+
+
+/**
+ * Clear interrupts flag.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param interrupts interrupts flag.
+ * @param packetUnit the number of packet unit for Post-Viterbi.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Ganymede ganymede;
+ *
+ * // Set statistic range.
+ * error = Demodulator_clearInterrupt ((Demodulator*) &ganymede, Interrupt_SIPSI);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_clearInterrupt (
+ IN Demodulator* demodulator,
+ IN Interrupt interrupt
+);
+
+
+/**
+ * Get the length of Data
+ * In DVB-T mode, data length should always equals 2K,
+ * In DVB-H mode, data length would be the length of IP datagram.
+ * NOTE: data can't be transfer via I2C bus, in order to transfer data
+ * host must provide SPI bus.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param dataLength the length of data.
+ * @param valid True if the data length is valid.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @see Demodulator_addIp
+ */
+Dword Demodulator_getDataLength (
+ IN Demodulator* demodulator,
+ OUT Dword* dataLength,
+ OUT Bool* valid
+);
+
+
+/**
+ * Get the IP datagram of Data.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param bufferLength the length of buffer.
+ * @param buffer buffer used to get Data.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @see Demodulator_addIp
+ */
+Dword Demodulator_getData (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ OUT Byte* buffer
+);
+
+
+/**
+ * Get datagram from device.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param bufferLength the number of registers to be read.
+ * @param buffer a byte array which is used to store values to be read.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @return Error_BUFFER_INSUFFICIENT: if buffer is too small.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Word bufferLength;
+ * Byte buffer[4096];
+ * Ganymede ganymede;
+ *
+ * bufferLength = 4096;
+ * error = Demodulator_getDatagram ((Demodulator*) &ganymede, &bufferLength, buffer);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_getDatagram (
+ IN Demodulator* demodulator,
+ OUT Dword* bufferLength,
+ OUT Byte* buffer
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @param code the value of IR raw code, the size should be 4 or 6,
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getIrCode (
+ IN Demodulator* demodulator,
+ OUT Dword* code
+);
+
+
+/**
+ * Return to boot code
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_reboot (
+ IN Demodulator* demodulator
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param contorl 1: Power up, 0: Power down;
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_controlPowerSaving (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte control
+);
+
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @param contorl 1: Power up, 0: Power down;
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_controlTunerPowerSaving (
+ IN Demodulator* demodulator,
+ IN Byte control
+);
+
+
+/**
+ * Control PID fileter
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param contorl 0: Disable, 1: Enable.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_controlPidFilter (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte control
+);
+
+
+/**
+ * Reset PID filter.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Ganymede ganymede;
+ *
+ * error = Demodulator_resetPidFilter ((Demodulator*) &ganymede, 0);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_resetPidFilter (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ * Add PID to PID filter.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param index the index of PID filter.
+ * @param pid the PID that will be add to PID filter.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Pid pid;
+ * Ganymede ganymede;
+ *
+ * pid.value = 0x0000;
+ *
+ * // Add PID to PID filter.
+ * error = Demodulator_addPidToFilter ((Demodulator*) &ganymede, 0, 1, pid);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_addPidToFilter (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte index,
+ IN Pid pid
+);
+
+
+/**
+ * Set datagram burst size.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param burstSize the burst size.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @return Error_NOT_SUPPORT: if the burst size is not support.
+ */
+Dword Demodulator_setBurstSize (
+ IN Demodulator* demodulator,
+ IN BurstSize burstSize
+);
+
+
+/**
+ * Get datagram burst size.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param burstSize the burst size.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @return Error_NOT_SUPPORT: if the burst size is not support.
+ */
+Dword Demodulator_getBurstSize (
+ IN Demodulator* demodulator,
+ IN BurstSize* burstSize
+);
+#endif \ No newline at end of file
diff --git a/api/demodulatorextend.c b/api/demodulatorextend.c
new file mode 100644
index 0000000..980949f
--- /dev/null
+++ b/api/demodulatorextend.c
@@ -0,0 +1,750 @@
+#include "demodulatorextend.h"
+//#include "i2cimpl.h" //for Linux
+#include "usb2impl.h"
+//#include "spiimpl.h"
+//#include "sdioimpl.h"
+//#include "i2uimpl.h"
+#include "cmd.h"
+//#include "i2u.h"
+//#include "af9035u2iimpl.h"
+
+#include "Afa_AF9007.h"
+#include "Afa_PEACOCK.h"
+#include "Freescale_MC44CD02.h"
+#include "Integrant_ITD3020.h"
+#include "Maxlinear_MXL5005.h"
+#include "Microtune_MT2260B0.h"
+#include "Microtune_MT2266.h"
+#include "Panasonic_ENV77H11D5.h"
+#include "Philips_TD1316AFIHP.h"
+#include "Philips_TDA18291HN.h"
+#include "Xceive_XC3028L.h"
+#include "Infineon_TUA9001.h"
+#include "Fitipower_FC0011.h"
+#include "Infineon_TUA6039.h"
+#include "Philips_TDA18271.h"
+#include "Philips_FQD1218ME_MK5.h"
+#include "Xceive_XC4000.h"
+#include "Philips_TDA18271_C2.h"
+#include "Infineon_TUA8010.h"
+#include "FCI_FC2580.h"
+#include "Fitipower_FC0012.h"
+#include "Philips_TDA18271_C2_Askey.h"
+#include "Elonics_E4000.h"
+
+static PidInfo pidInfo;
+BusDescription busDesc[] =
+{
+ /** 0: NULL bus */
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ },
+ /** 1: I2C bus */
+ {
+/* I2c_getDriver,
+ I2c_writeControlBus,
+ I2c_readControlBus,
+ NULL,
+*/ },
+ /** 2: USB bus */
+ {
+ Usb2_getDriver,
+ Usb2_writeControlBus,
+ Usb2_readControlBus,
+ Usb2_readDataBus,
+ },
+ /** 3: SPI bus */
+ {
+/* Spi_getDriver,
+ Spi_writeControlBus,
+ Spi_readControlBus,
+ Spi_readDataBus,
+*/ },
+ /** 4: SDIO bus */
+ {
+/* Sdio_getDriver,
+ Sdio_writeControlBus,
+ Sdio_readControlBus,
+ Sdio_readDataBus,
+*/ },
+ /** 5: USB11 bus */
+ {
+ Usb2_getDriver,
+ Usb2_writeControlBus,
+ Usb2_readControlBus,
+ Usb2_readDataBus,
+ },
+ /** 6: I2M bus - I2C for old mail box */
+ {
+/* I2u_getDriver,
+ I2u_writeControlBus,
+ I2u_readControlBus,
+ NULL,
+*/ },
+ /** 7: I2U bus - 9015 USB for old mail box */
+ {
+/* I2u_getDriver,
+ I2u_writeControlBus,
+ I2u_readControlBus,
+ NULL,
+*/ },
+ /** 8: I2U2 bus - 9015 USB for new mail box */
+ {
+/* I2u_getDriver,
+ I2u_writeControlBus,
+ I2u_readControlBus,
+ NULL,
+*/ },
+ /** 9: 9035U2I bus - 9035 USB to I2C */
+ {
+/* Af9035u2i_getDriver,
+ Af9035u2i_writeControlBus,
+ Af9035u2i_readControlBus,
+ NULL,
+*/ },
+};
+
+CmdDescription cmdDesc[] =
+{
+ /** NULL Bus */
+ {
+ 0,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ /** 1:I2C Bus */
+ {
+ 255,
+ &busDesc[1],
+ Cmd_writeRegisters,
+ Cmd_writeTunerRegisters,
+ Cmd_writeEepromValues,
+ Cmd_readRegisters,
+ Cmd_readTunerRegisters,
+ Cmd_readEepromValues,
+ NULL,
+ Cmd_loadFirmware,
+ Cmd_reboot,
+ Cmd_sendCommand,
+ Cmd_receiveData
+ },
+ /** 2:USB Bus */
+ {
+ 63,
+ &busDesc[2],
+ Cmd_writeRegisters,
+ Cmd_writeTunerRegisters,
+ Cmd_writeEepromValues,
+ Cmd_readRegisters,
+ Cmd_readTunerRegisters,
+ Cmd_readEepromValues,
+ NULL,
+ Cmd_loadFirmware,
+ Cmd_reboot,
+ Cmd_sendCommand,
+ Cmd_receiveData
+ },
+ /** 3:SPI Bus */
+ {
+ 255,
+ &busDesc[3],
+ Cmd_writeRegisters,
+ Cmd_writeTunerRegisters,
+ Cmd_writeEepromValues,
+ Cmd_readRegisters,
+ Cmd_readTunerRegisters,
+ Cmd_readEepromValues,
+ NULL,
+ Cmd_loadFirmware,
+ Cmd_reboot,
+ Cmd_sendCommand,
+ Cmd_receiveData
+ },
+ /** 4:SDIO Bus */
+ {
+ 255,
+ &busDesc[4],
+ Cmd_writeRegisters,
+ Cmd_writeTunerRegisters,
+ Cmd_writeEepromValues,
+ Cmd_readRegisters,
+ Cmd_readTunerRegisters,
+ Cmd_readEepromValues,
+ NULL,
+ Cmd_loadFirmware,
+ Cmd_reboot,
+ Cmd_sendCommand,
+ Cmd_receiveData
+ },
+ /** 5:USB11 Bus */
+ {
+ 63,
+ &busDesc[5],
+ Cmd_writeRegisters,
+ Cmd_writeTunerRegisters,
+ Cmd_writeEepromValues,
+ Cmd_readRegisters,
+ Cmd_readTunerRegisters,
+ Cmd_readEepromValues,
+ NULL,
+ Cmd_loadFirmware,
+ Cmd_reboot,
+ Cmd_sendCommand,
+ Cmd_receiveData
+ },
+ /** 6:I2C for old mailbox */
+ {
+/* 16,
+ &busDesc[6],
+ I2u_writeRegisters,
+ I2u_writeTunerRegisters,
+ NULL,
+ I2u_readRegisters,
+ I2u_readTunerRegisters,
+ NULL,
+ I2u_modifyRegister,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+*/ },
+ /** 7:USB for old mailbox */
+ {
+/* 16,
+ &busDesc[7],
+ I2u_writeRegisters,
+ I2u_writeTunerRegisters,
+ NULL,
+ I2u_readRegisters,
+ I2u_readTunerRegisters,
+ NULL,
+ I2u_modifyRegister,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+*/ },
+ /** 8:USB for new mailbox */
+ {
+/* 55,
+ &busDesc[8],
+ Cmd_writeRegisters,
+ Cmd_writeTunerRegisters,
+ Cmd_writeEepromValues,
+ Cmd_readRegisters,
+ Cmd_readTunerRegisters,
+ Cmd_readEepromValues,
+ NULL,
+ Cmd_loadFirmware,
+ Cmd_reboot,
+ Cmd_sendCommand,
+ Cmd_receiveData
+*/ },
+ /** 9:9035 USB to I2C Bus */
+ {
+/* 54,
+ &busDesc[9],
+ Cmd_writeRegisters,
+ Cmd_writeTunerRegisters,
+ Cmd_writeEepromValues,
+ Cmd_readRegisters,
+ Cmd_readTunerRegisters,
+ Cmd_readEepromValues,
+ NULL,
+ Cmd_loadFirmware,
+ Cmd_reboot,
+ Cmd_sendCommand,
+ Cmd_receiveData
+*/ },
+};
+
+Dword Demodulator_setBusTuner (
+ IN Demodulator* demodulator,
+ IN Word busId,
+ IN Word tunerId
+) {
+ Dword error = Error_NO_ERROR;
+
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ ganymede->cmdDescription = &cmdDesc[busId];
+ ganymede->busId = busId;
+
+/* if (busId == Bus_I2U2) {
+ I2u_setChipAddress (demodulator, 0x38);
+ }
+*/
+ switch (tunerId)
+ {
+ case Tuner_Afatech_AF9007:
+ ganymede->tunerDescription = &tuner_AF9007;
+ break;
+ case Tuner_Panasonic_ENV77H11D5:
+ ganymede->tunerDescription = &tuner_ENV77H11D5;
+ break;
+ case Tuner_Philip_TD1316AFIHP:
+ ganymede->tunerDescription = &tuner_TD1316AFIHP;
+ break;
+ case Tuner_Maxlinear_MXL5005:
+ ganymede->tunerDescription = &tuner_MXL5005;
+ break;
+ case Tuner_Freescale_MC44CD02:
+ ganymede->tunerDescription = &tuner_MC44CD02;
+ break;
+ case Tuner_Microtune_MT2260B0:
+ ganymede->tunerDescription = &tuner_MT2260B0;
+ break;
+ case Tuner_Philips_TDA18291HN:
+ ganymede->tunerDescription = &tuner_TDA18291HN;
+ break;
+ case Tuner_Microtune_MT2266:
+ ganymede->tunerDescription = &tuner_MT2266;
+ MT2266_supportTA4029CTC ((Demodulator*) &ganymede, 0);
+ break;
+ case Tuner_Integrant_ITD3020:
+ ganymede->tunerDescription = &tuner_ITD3020;
+ break;
+ case Tuner_Afatech_PEACOCK:
+ ganymede->tunerDescription = &tuner_PEACOCK;
+ break;
+ case Tuner_Xceive_XC3028L:
+ ganymede->tunerDescription = &tuner_XC3028L;
+ break;
+ case Tuner_Infineon_TUA9001:
+ ganymede->tunerDescription = &tuner_TUA9001;
+ break;
+ case Tuner_Fitipower_FC0011:
+ ganymede->tunerDescription = &tuner_FC0011;
+ break;
+ case Tuner_Infineon_TUA6039:
+ ganymede->tunerDescription = &tuner_TUA6039;
+ break;
+ case Tuner_Philips_TDA18271:
+ ganymede->tunerDescription = &tuner_TDA18271;
+ break;
+ case Tuner_Philips_FQD1218ME_MK5:
+ ganymede->tunerDescription = &tuner_FQD1218ME_MK5;
+ break;
+ case Tuner_Xceive_XC4000:
+ ganymede->tunerDescription = &tuner_XC4000;
+ break;
+ case Tuner_Philips_TDA18271_C2:
+ ganymede->tunerDescription = &tuner_TDA18271_C2;
+ break;
+ case Tuner_Infineon_TUA8010:
+ ganymede->tunerDescription = &tuner_TUA8010;
+ break;
+ case Tuner_FCI_FC2580:
+ ganymede->tunerDescription = &tuner_FC2580;
+ break;
+ case Tuner_Microtune_MT2266_TA4029CTC:
+ ganymede->tunerDescription = &tuner_MT2266;
+ MT2266_supportTA4029CTC ((Demodulator*) &ganymede, 1);
+ break;
+ case Tuner_Fitipower_FC0012:
+ ganymede->tunerDescription = &tuner_FC0012;
+ break;
+ case Tuner_Philips_TDA18271_C2_Askey:
+ ganymede->tunerDescription = &tuner_TDA18271_C2_Askey;
+ break;
+ case Tuner_Elonics_E4000:
+ ganymede->tunerDescription = &tuner_E4000;
+ break;
+ default:
+ error = Error_INVALID_TUNER_TYPE;
+ goto exit;
+ break;
+ }
+
+ if (ganymede->tunerDescription->tunerScript == NULL) {
+ ganymede->tunerDescription->tunerScript = NULL;
+ ganymede->tunerDescription->tunerScriptSets = NULL;
+ }
+
+
+exit:
+ return(error);
+}
+Dword Demodulator_getChannelStatistic (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT ChannelStatistic* channelStatistic
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ GetChannelStatisticRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.channelStatistic = channelStatistic;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_GETCHANNELSTATISTIC,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Dword postErrCnt;
+ Dword postBitCnt;
+ Word rsdAbortCnt;
+ Ganymede* ganymede;
+
+
+ ganymede = (Ganymede*) demodulator;
+
+
+ /** Get BER if couter is ready, error = Error_RSD_COUNTER_NOT_READY if counter is not ready */
+ if (ganymede->architecture == Architecture_PIP) {
+ error = Standard_getPostVitBer (demodulator, chip, &postErrCnt, &postBitCnt, &rsdAbortCnt);
+ if (error == Error_NO_ERROR) {
+ ganymede->channelStatistic[chip].postVitErrorCount = postErrCnt;
+ ganymede->channelStatistic[chip].postVitBitCount = postBitCnt;
+ ganymede->channelStatistic[chip].abortCount = rsdAbortCnt;
+ }
+ } else {
+ error = Standard_getPostVitBer (demodulator, 0, &postErrCnt, &postBitCnt, &rsdAbortCnt);
+ if (error == Error_NO_ERROR) {
+ ganymede->channelStatistic[chip].postVitErrorCount = postErrCnt;
+ ganymede->channelStatistic[chip].postVitBitCount = postBitCnt;
+ ganymede->channelStatistic[chip].abortCount = rsdAbortCnt;
+ }
+ }
+
+ *channelStatistic = ganymede->channelStatistic[chip];
+
+#endif
+
+ return (error);
+}
+Dword Demodulator_addPid (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Pid pid
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ AddPidRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.pid = pid;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_ADDPID,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Byte writeBuffer[2];
+ Byte i, j;
+ Bool found;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (pidInfo.pidinit == False) {
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ for (j = 0; j < 32; j++) {
+ pidInfo.pidtable[i].pid[j] = 0xFFFF;
+ }
+ }
+ pidInfo.pidinit = True;
+ }
+
+ /** Enable pid filter */
+ if (pidInfo.pidcount == 0) {
+ error = Standard_writeRegisterBits (demodulator, chip, Processor_OFDM, p_mp2if_pid_en, mp2if_pid_en_pos, mp2if_pid_en_len, 1);
+ if (error) goto exit;
+ } else {
+ found = False;
+ for (i = 0; i < 32; i++) {
+ if (pidInfo.pidtable[chip].pid[i] == pid.value) {
+ found = True;
+ break;
+ }
+ }
+ if (found == True)
+ goto exit;
+ }
+
+ for (i = 0; i < 32; i++) {
+ if (pidInfo.pidtable[chip].pid[i] == 0xFFFF)
+ break;
+ }
+ if (i == 32) {
+ error = Error_PID_FILTER_FULL;
+ goto exit;
+ }
+
+ writeBuffer[0] = (Byte) pid.value;
+ writeBuffer[1] = (Byte) (pid.value >> 8);
+
+ error = Standard_writeRegisters (demodulator, chip, Processor_OFDM, p_mp2if_pid_dat_l, 2, writeBuffer);
+ if (error) goto exit;
+
+ error = Standard_writeRegisterBits (demodulator, chip, Processor_OFDM, p_mp2if_pid_index_en, mp2if_pid_index_en_pos, mp2if_pid_index_en_len, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, chip, Processor_OFDM, p_mp2if_pid_index, i);
+ if (error) goto exit;
+
+ pidInfo.pidtable[chip].pid[i] = pid.value;
+ pidInfo.pidcount++;
+
+exit :
+#endif
+
+ return (error);
+}
+
+
+Dword Demodulator_addPidAt (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte index,
+ IN Pid pid
+) {
+ return (Demodulator_addPidToFilter (demodulator, chip, index, pid));
+}
+
+
+Dword Demodulator_removePid (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Pid pid
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ RemovePidRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.pid = pid;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_REMOVEPID,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Byte i;
+ Bool found;
+ Interrupts interrupts;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ found = False;
+ for (i = 0; i < 32; i++) {
+ if (pidInfo.pidtable[chip].pid[i] == pid.value) {
+ found = True;
+ break;
+ }
+ }
+ if (found == False)
+ goto exit;
+
+ error = Standard_writeRegisterBits (demodulator, chip, Processor_OFDM, p_mp2if_pid_index_en, mp2if_pid_index_en_pos, mp2if_pid_index_en_len, 0);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, chip, Processor_OFDM, p_mp2if_pid_index, i);
+ if (error) goto exit;
+
+ pidInfo.pidtable[chip].pid[i] = 0xFFFF;
+
+ /** Disable pid filter */
+ if (pidInfo.pidcount == 1) {
+ error = Standard_writeRegisterBits (demodulator, chip, Processor_OFDM, p_mp2if_pid_en, mp2if_pid_en_pos, mp2if_pid_en_len, 0);
+
+ error = Standard_getInterrupts (demodulator, &interrupts);
+ if (error) goto exit;
+ if (interrupts & Interrupt_DVBT) {
+ error = Standard_clearInterrupt (demodulator, Interrupt_DVBT);
+ if (error) goto exit;
+ }
+ }
+
+ pidInfo.pidcount--;
+
+exit :
+#endif
+
+ return (error);
+}
+
+
+Dword Demodulator_removePidAt (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte index,
+ IN Pid pid
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ RemovePidAtRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.index = index;
+ request.pid = pid;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_REMOVEPIDAT,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ error = Standard_writeRegisterBits (demodulator, chip, Processor_OFDM, p_mp2if_pid_index_en, mp2if_pid_index_en_pos, mp2if_pid_index_en_len, 0);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, chip, Processor_OFDM, p_mp2if_pid_index, index);
+ if (error) goto exit;
+exit :
+#endif
+
+ return (error);
+}
+
+
+Dword Demodulator_resetPid (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+#else
+ Byte i;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ for (i = 0; i < 32; i++) {
+ pidInfo.pidtable[chip].pid[i] = 0xFFFF;
+ }
+ error = Standard_writeRegisterBits (demodulator, chip, Processor_OFDM, p_mp2if_pid_rst, mp2if_pid_rst_pos, mp2if_pid_rst_len, 1);
+ if (error) goto exit;
+
+ pidInfo.pidcount = 0;
+
+exit :
+#endif
+
+ return (error);
+}
+
+
+#if UNDER_CE
+#else
+extern long ActiveSync;
+#endif
+
+Dword Demodulator_controlActiveSync (
+ IN Demodulator* demodulator,
+ IN Byte control
+) {
+#if UNDER_CE
+//#else //for Linux
+ if (control == 0)
+ ActiveSync = 0;
+ else
+ ActiveSync = 1;
+#endif
+
+ return (Error_NO_ERROR);
+}
+
+
+Dword Demodulator_setStatisticRange (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte superFrameCount,
+ IN Word packetUnit
+) {
+ return (Demodulator_setViterbiRange (demodulator, chip, superFrameCount, packetUnit));
+}
+
+
+Dword Demodulator_getStatisticRange (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte* superFrameCount,
+ IN Word* packetUnit
+) {
+ return (Demodulator_getViterbiRange (demodulator, chip, superFrameCount, packetUnit));
+}
diff --git a/api/demodulatorextend.h b/api/demodulatorextend.h
new file mode 100644
index 0000000..411cf4c
--- /dev/null
+++ b/api/demodulatorextend.h
@@ -0,0 +1,1406 @@
+#ifndef __DEMODULATOREXTEND_H__
+#define __DEMODULATOREXTEND_H__
+
+
+//#include <stdio.h> // for Linux
+//#include <math.h>
+#include "type.h"
+#include "user.h"
+#include "register.h"
+#include "error.h"
+#include "cmd.h"
+//#include "i2cimpl.h"
+//#include "sdioimpl.h"
+//#include "spiimpl.h"
+#include "usb2impl.h"
+#include "demodulator.h"
+
+
+#define Tuner_Panasonic_ENV77H11D5 0x01
+#define Tuner_Microtune_MT2060 0x02
+#define Tuner_Maxlinear_MXL5003 0x03
+#define Tuner_Philip_TD1316AFIHP 0x04
+#define Tuner_Freescale_FS803A 0x05
+#define Tuner_Quantek_QT1010 0x06
+#define Tuner_Panasonic_ENV75H10D8 0x07
+#define Tuner_Lg_TDTMG252D 0x08
+#define Tuner_Himax_HTXR03A 0x09
+#define Tuner_Alps_TDQ44M 0x0A
+#define Tuner_Infineon_TUA6045 0x0B
+#define Tuner_Infineon_TUA6034 0x0C
+#define Tuner_Maxlinear_MXL5005 0x0D
+#define Tuner_Thomson_664X 0x0E
+#define Tuner_Thomson_6630 0x0F
+#define Tuner_Samsung_DTOS403 0x10
+#define Tuner_Samsung_DTOS446 0x11
+#define Tuner_Freescale_FS803A_DLNA 0x12
+#define Tuner_Microtune_MT2060_7SAW 0x13
+#define Tuner_Alps_TDQ03 0x14
+#define Tuner_Thomson_759X 0x15
+#define Tuner_Empire_DTN317 0x16
+#define Tuner_Partsnic_PDHTF05D 0x17
+#define Tuner_Panasonic_ENG37A30GF 0x18
+#define Tuner_Philips_FQD1216ME_MK5 0x19
+#define Tuner_Infineon_TUA6041 0x1A
+#define Tuner_Philips_TDA18271 0x1B
+#define Tuner_Alps_TDQD1X001A 0x1C
+#define Tuner_Maxlinear_MXL5005_RSSI 0x1D
+#define Tuner_Thomson_75101 0x1E
+#define Tuner_Sharp_5056 0x1F
+#define Tuner_Freescale_MC44CD02 0x20
+#define Tuner_Microtune_MT2260B0 0x21
+#define Tuner_Philips_TDA18291HN 0x22
+#define Tuner_Microtune_MT2266 0x23
+#define Tuner_Integrant_ITD3020 0x24
+#define Tuner_Afatech_PEACOCK 0x25
+#define Tuner_Xceive_XC3028L 0x26
+#define Tuner_Infineon_TUA9001 0x27
+#define Tuner_Fitipower_FC0011 0x28
+#define Tuner_Infineon_TUA6039 0x29
+#define Tuner_Xceive_XC4000 0x2A
+#define Tuner_Philips_TDA18271_C2 0x2B
+#define Tuner_Infineon_TUA8010 0x2C
+#define Tuner_Microtune_MT2266_TA4029CTC 0x2D
+#define Tuner_Fitipower_FC0012 0x2E
+#define Tuner_Philips_TDA18271_C2_Askey 0x2F
+#define Tuner_Philips_FQD1218ME_MK5 0x30
+#define Tuner_ADI_ADMTV102 0x31
+#define Tuner_FCI_FC2580 0x32
+#define Tuner_Maxim_MAX2169 0x33
+#define Tuner_Philips_TDA18292 0x34
+#define Tuner_Afatech_PICTOR 0x35
+#define Tuner_Elonics_E4000 0x36
+#define Tuner_Afatech_AF9007 0xFF
+
+
+/**
+ * Define commands for AGC general set function
+ */
+#define APO_AGC_SET_RF_ACQUIRE 1
+#define APO_AGC_SET_RF_TRACK 2
+#define APO_AGC_SET_IF_ACQUIRE 3
+#define APO_AGC_SET_IF_TRACK 4
+#define APO_AGC_SET_ADC_OUT_DESIRED_S 5
+#define APO_AGC_SET_RF_TOP_S 6
+#define APO_AGC_SET_IF_TOP_S 7
+#define APO_AGC_SET_RF_LOCK_TH_ACQUIRE 8
+#define APO_AGC_SET_RF_LOCK_TH_TRACK 9
+#define APO_AGC_SET_IF_LOCK_TH_ACQUIRE 10
+#define APO_AGC_SET_IF_LOCK_TH_TRACK 11
+#define APO_AGC_SET_ADC_OUT_DESIRED_M 12
+#define APO_AGC_SET_RF_TOP_M 13
+#define APO_AGC_SET_IF_TOP_M 14
+#define APO_AGC_SET_RF_TOP 15
+#define APO_AGC_SET_IF_TOP 16
+
+
+/**
+ * Define commands for AGC general set function
+ */
+#define APO_AGC_GET_RF_ACQUIRE 1
+#define APO_AGC_GET_RF_TRACK 2
+#define APO_AGC_GET_IF_ACQUIRE 3
+#define APO_AGC_GET_IF_TRACK 4
+#define APO_AGC_GET_RF_LOCK_TH_ACQUIRE 5
+#define APO_AGC_GET_RF_LOCK_TH_TRACK 6
+#define APO_AGC_GET_IF_LOCK_TH_ACQUIRE 7
+#define APO_AGC_GET_IF_LOCK_TH_TRACK 8
+#define APO_AGC_GET_RF_MAX 9
+#define APO_AGC_GET_RF_MIN 10
+#define APO_AGC_GET_RF_TOP_S 11
+#define APO_AGC_GET_RF_TOP_M 17
+#define APO_AGC_GET_IF_MAX 12
+#define APO_AGC_GET_IF_MIN 13
+#define APO_AGC_GET_IF_TOP_S 14
+#define APO_AGC_GET_IF_TOP_M 18
+#define APO_AGC_GET_RF_TOP 19
+#define APO_AGC_GET_IF_TOP 20
+#define APO_AGC_GET_ADC_OUT_DESIRED_S 15
+#define APO_AGC_GET_ADC_OUT_DESIRED_M 16
+
+
+/**
+ * Define Options
+ */
+#define APO_OPTION_FREQSHIFT 0x00000001
+#define APO_OPTION_DYNATOP 0x00000002
+#define APO_OPTION_RET_NOW 0x00000004
+#define APO_OPTION_REPEAT_RETRAIN 0x00000008
+
+
+/**
+ * Define Demodulator_getDouble index
+ */
+#define APO_GET_FREQ_SHIFT 1
+#define APO_GET_ORIG_RF_TOP 2
+#define APO_GET_ORIG_IF_TOP 3
+#define APO_GET_FINAL_RF_TOP 4
+#define APO_GET_FINAL_IF_TOP 5
+#define APO_GET_BEST_RF_TOP 6
+#define APO_GET_BEST_IF_TOP 7
+
+
+/**
+ * Define commands for general CE information function
+ */
+#define APO_AGC_CLEAR_REGS 1
+#define APO_AGC_STALL_OFSM_ACCESS 2
+#define APO_AGC_RESTORE_OFSM_ACCESS 3
+
+
+#define APO_DCA_EN_UPPER 0x01
+#define APO_DCA_EN_LOWER 0x02
+#define APO_DCA_BOTH 0x00
+
+
+/** keep for internal api release */
+/**
+ * The type defination of PidTable.
+ */
+typedef struct {
+ Word pid[32];
+} PidTable;
+
+typedef struct {
+ PidTable pidtable[2];
+ Byte pidcount;
+ Bool pidinit;
+} PidInfo;
+/** end keep for internal api release */
+
+
+extern Word DemodulatorExtend_diversityMode;
+extern double DemodulatorExtend_crystalFrequency;
+extern Word Tdmb_bitRateTable[64];
+
+
+/**
+ * Set control bus and tuner.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param busId The ID of bus.
+ * @param tunerId The ID of tuner.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Ganymede ganymede;
+ *
+ * // Set I2C as the control bus.
+ * error = Demodulator_setBusTuner ((Demodulator*) &ganymede, Bus_I2C, Tuner_MICROTUNE_MT2060);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_setBusTuner (
+ IN Demodulator* demodulator,
+ IN Word busId,
+ IN Word tunerId
+);
+
+
+/**
+ * Set firmware and script.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param crystalFrequency The value of crystal frequency on board (KHz).
+ * @param adcFrequency The value of desire internal ADC frequency (Hz).
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Ganymede ganymede;
+ *
+ * // Set frequencies.
+ * error = Demodulator_setCrystalAdcFrequency ((Demodulator*) &ganymede, 30000, 20156250);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_setCrystalAdcFrequency (
+ IN Demodulator* demodulator,
+ IN Dword crystalFrequency,
+ IN Dword adcFrequency
+);
+
+
+/**
+ * Set firmware and script.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param firmwareCodes The byte array of firmware code.
+ * @param firmwareSegments The segments of firmwares.
+ * @param firmwarePartitions The partitions of firmwares.
+ * @param scriptSets The sets of script.
+ * @param scripts The byte array of script.
+ * @param tunerScriptSets The sets of tunerScript.
+ * @param tunerScripts The byte array of tunerScript.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * Byte firmware[65535];
+ * ValueSet script[256];
+ * ValueSet tunerScript[256];
+ * Ganymede ganymede;
+ *
+ * // Set I2C as the control bus.
+ * error = Demodulator_setFirmwareScript ((Demodulator*) &ganymede, firmware, 65535, script, 256, tunerScript, 256);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * </pre>
+ */
+Dword Demodulator_setFirmwareScript (
+ IN Demodulator* demodulator,
+ IN Byte* firmwareCodes,
+ IN Segment* firmwareSegments,
+ IN Byte* firmwarePartitions,
+ IN Word* scriptSets,
+ IN ValueSet* scripts,
+ IN Word* tunerScriptSets,
+ IN ValueSet* tunerScripts
+);
+
+
+/**
+ * Get the statistic values of demodulator, it includes Pre-Viterbi BER,
+ * Post-Viterbi BER, Abort Count, Signal Presented Flag, Signal Locked Flag,
+ * Signal Quality, Signal Strength, Delta-T for DVB-H time slicing.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param statistic the structure that store all statistic values.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * Dword error = Error_NO_ERROR;
+ * ChannelStatistic channelStatistic;
+ * double preBer;
+ * double postBer;
+ * Ganymede ganymede;
+ *
+ * // Set statistic range.
+ * error = Demodulator_getChannelStatistic ((Demodulator*) &ganymede, 0, &channelStatistic);
+ * if (error)
+ * printf ("Error Code = %X", error);
+ * else
+ * printf ("Success");
+ * preBer = (double) channelStatistic.preVitErrorCount / (double) channelStatistic.preVitBitCount;
+ * printf ("Pre-Viterbi BER = %f\n", preBer);
+ * postBer = (double) channelStatistic.postVitErrorCount / (double) channelStatistic.postVitBitCount;
+ * printf ("Post-Viterbi BER = %f\n", postBer);
+ * printf ("Abort Count = %d\n", channelStatistic.abortCount);
+ * </pre>
+ */
+Dword Demodulator_getChannelStatistic (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT ChannelStatistic* channelStatistic
+);
+
+
+/**
+ * Set the counting range for Pre-Viterbi and Post-Viterbi.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7. NOTE: When the architecture is set to Architecture_DCA
+ * this parameter is regard as don't care.
+ * @param preErrorCount the number of super frame for Pre-Viterbi.
+ * @param preBitCount the number of packet unit for Post-Viterbi.
+ * @param snr the signal to noise ratio.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Demodulator_getPreVitBer (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Dword* preErrorCount,
+ OUT Dword* preBitCount,
+ OUT double* snr
+);
+
+
+/**
+ * Set the counting range for Pre-Viterbi and Post-Viterbi.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7. NOTE: When the architecture is set to Architecture_DCA
+ * this parameter is regard as don't care.
+ * @param preErrorCount the number of super frame for Pre-Viterbi.
+ * @param preBitCount the number of packet unit for Post-Viterbi.
+ * @param snr the signal to noise ratio.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Demodulator_getSoftBer (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Dword* preErrorCount,
+ OUT Dword* preBitCount,
+ OUT double* snr
+);
+
+
+/**
+ * This function is used to get signal quality indicator.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param sqi signal quality indicator.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * Byte sqi;
+ *
+ * Demodulator_getSqi (0x38, 0, &sqi);
+ * </pre>
+ */
+Dword Demodulator_getSqi (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Byte* sqi
+);
+
+
+/**
+ * Get IF agc voltage.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param doPullUpVolt The pull up voltage of tunre.
+ * @param dopVolt IF AGC voltage to be returned.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getIfAgcVoltage (
+ IN Demodulator* demodulator,
+ IN double doPullUpVolt,
+ OUT double* dopVolt
+);
+
+
+/**
+ * Set maximum RF agc.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param doMaxRfAgc The maximum value of RF AGC.
+ * @param doVolt RF AGC voltage to be set.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_setMaxRfAgc (
+ IN Demodulator* demodulator,
+ IN double doMaxRfAgc,
+ IN double doVolt
+);
+
+
+/**
+ * Set minimum rf agc.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param doMinRfAgc The minimum value of RF AGC.
+ * @param doVolt RF AGC voltage to be set.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_setMinRfAgc (
+ IN Demodulator* demodulator,
+ IN double doMinRfAgc,
+ IN double doVolt
+);
+
+
+/**
+ * Set max if agc.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param doMaxIfAgc The maximum value of IF AGC.
+ * @param doVolt IF AGC voltage to be set.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_setMaxIfAgc (
+ IN Demodulator* demodulator,
+ IN double doMaxIfAgc,
+ IN double doVolt
+);
+
+
+/**
+ * Set min if agc.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param doMinIfAgc The minimum value of IF AGC.
+ * @param doVolt IF AGC voltage to be set.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_setMinIfAgc (
+ IN Demodulator* demodulator,
+ IN double doMinIfAgc,
+ IN double doVolt
+);
+
+
+/**
+ * General agc set function.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param ucCmd .
+ * @param vpParams .
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_setAgc (
+ IN Demodulator* demodulator,
+ IN Byte ucCmd,
+ IN Word* vpParams
+);
+
+
+/**
+ * General agc get function.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param ucCmd .
+ * @param vpParams .
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getAgc (
+ IN Demodulator* demodulator,
+ IN Byte ucCmd,
+ IN void* vpParams
+);
+
+
+/**
+ * Check if INR detected.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param count INR count.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getInrCount (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Word* count
+);
+
+
+/**
+ * Check if CCI happens.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param cci0 1: CCI happen, 0: CCI doesn't happen.
+ * @param cci1 1: CCI happen, 0: CCI doesn't happen.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_isCci (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Bool* cci0,
+ OUT Bool* cci1
+);
+
+
+/**
+ * Check if ACI happens
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param aci0 1: ACI happen, 0: ACI doesn't happen.
+ * @param aci1 1: ACI happen, 0: ACI doesn't happen.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_isAci (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Bool* aci0,
+ OUT Bool* aci1
+);
+
+
+/**
+ * Get frequency offset.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param doTs Sampling period.
+ * @param lpNormOffset Normalized frequency offset (carrier spacing).
+ * @param lpOffset Frequency offset (22 bits) (Hz).
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getFrequencyOffset (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN double elementaryPeriod,
+ OUT Long* normalizedOffset,
+ OUT Long* offset
+);
+
+
+/**
+ * Get sampling clock offset in second
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param adcFrequency ADC frequency.
+ * @param elementaryPeriod Sampling period.
+ * @param offset ADC sampling clock offset in sec.
+ * @param offsetPpm ADC sampling clock offset in PPM.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getTimeOffset (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN double adcFrequency,
+ IN double elementaryPeriod,
+ OUT double* offset,
+ OUT double* offsetPpm
+);
+
+
+/**
+ * Set IF1 frequency of MT2060.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param dwIf1 The IF1 frequency (KHz).
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_setMT2060If1 (
+ IN Demodulator* demodulator,
+ IN Dword dwIf1
+);
+
+
+/**
+ * Clear FFT window position valid bit.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_resetFftWinPos (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ * Clear FFT window position valid bit.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param delta Delta value for FFT window position.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getFftWinPos (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Long* delta
+);
+
+
+/**
+ * Get crystal frequency (KHz).
+ *
+ * @param demodulator the handle of demodulator.
+ * @param fpFreq Crystal frequency.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getXtalFreq (
+ IN Demodulator* demodulator,
+ IN float* fpFreq
+);
+
+
+/**
+ * Test register.
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_testRegister (
+ IN Demodulator* demodulator
+);
+
+
+/**
+ * Dump register.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param cpFileName The name of file to be write.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_dumpRegister (
+ IN Demodulator* demodulator,
+ IN char* cpFileName
+);
+
+
+/**
+ * Get frequency response from hardware.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param tone Sub-Carrier Index ( Real Index = 200*wIndex).
+ * @param realPart Real part of Constellation value.
+ * @param imaginaryPart Imaginary part of Constellation value.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getFrequencyResponse (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Word* tone,
+ OUT Long* realPart,
+ OUT Long* imaginaryPart
+);
+
+
+/**
+ * Get constellation value.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param tone Sub-Carrier Index ( Real Index = 200*wIndex).
+ * @param realPart Real part of Constellation value.
+ * @param imaginaryPart Imaginary part of Constellation value.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getConstellation (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word tone,
+ OUT float* realPart,
+ OUT float* imaginaryPart
+);
+
+
+/**
+ * Capture constellation value (2).
+ *
+ * @param demodulator the handle of demodulator.
+ * @param wIndex Sub-Carrier Index ( Real Index = 200*wIndex).
+ * @param wpReal real part of constellation value.
+ * @param wpImag imaginary part of constellation value.
+ * @param wpH2 H2 value.
+ * @param wpRealH real part of H.
+ * @param wpImagH imaginary part of H.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_capConstellation2 (
+ IN Demodulator* demodulator,
+ IN Word wIndex,
+ OUT Byte* ucpSymCnt,
+ OUT Byte* ucpReal,
+ OUT Byte* ucpImag,
+ OUT Word* wpRealH,
+ OUT Word* wpImagH
+);
+
+
+/**
+ * Get status.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param dwpStatus Pointer to system information.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getStatus (
+ IN Demodulator* demodulator,
+ OUT Dword* dwpStatus
+);
+
+
+/**
+ * Get frequency shift.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param index .
+ * @param dopShift .
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getDouble (
+ IN Demodulator* demodulator,
+ IN Byte index,
+ IN double* dopValue
+);
+
+
+/**
+ * Get IR byte.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param ucpIRByte IR packet buffer.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getIr (
+ IN Demodulator* demodulator,
+ OUT Byte* ucpIRByte
+);
+
+
+/**
+ * Dump EEPROM.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param dwDelay .
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_dumpEeprom (
+ IN Demodulator* demodulator,
+ IN Dword dwDelay
+);
+
+
+/**
+ * Load file to EEPROM.
+ *
+ * @param fileName File name to load to EEPROM.
+ * @param dwDelay .
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_loadEeprom (
+ IN Demodulator* demodulator,
+ IN char* fileName,
+ IN Dword dwDelay
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_isFecMonEnabled (
+ IN Demodulator* demodulator,
+ OUT Bool* enabled
+);
+
+
+/**
+ * Generate ce information.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param command .
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_genCeInfoFunc (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte command
+);
+
+
+/**
+ * Get ce information.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param spCentroid .
+ * @param spBias .
+ * @param dwpRh0 .
+ * @param wpM2 .
+ * @param dwpEh2 .
+ * @param ucpM2q .
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getCeInfo (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Short* spCentroid,
+ OUT Short* spBias,
+ OUT Dword* dwpRh0,
+ OUT Word* wpM2,
+ OUT Dword* dwpEh2,
+ OUT Byte* ucpM2q
+);
+
+
+/**
+ * Enable/disable retrain.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param enable .
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_setRetrain (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte enable
+);
+
+
+/**
+ * Enable/disable CCIR.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param ucEnable .
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_setCcir (
+ IN Demodulator* demodulator,
+ IN Byte ucEnable
+);
+
+
+/**
+ * Handle CCIF
+ *
+ * @param demodulator the handle of demodulator.
+ * @param ccifId .
+ * @param ctrl .
+ * @param ucBw .
+ * @param wFreq .
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_handleCcif (
+ IN Demodulator* demodulator,
+ IN Byte ccifId,
+ IN Byte ctrl,
+ IN Byte ucBw,
+ IN Word wFreq
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param level .
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getAdcDesiredLevel (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Word* level
+);
+
+
+/**
+ * Set tuner type
+ *
+ * @param demodulator the handle of demodulator.
+ * @param ucTuner .
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_setTunerType (
+ IN Demodulator* demodulator,
+ IN Byte ucTuner
+);
+
+
+/**
+ * Set board id
+ *
+ * @param demodulator the handle of demodulator.
+ * @param ucBoard .
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_setBoardId (
+ IN Demodulator* demodulator,
+ IN Byte ucBoard
+);
+
+
+/**
+ * Get signal strength in Dbm
+ *
+ * @param demodulator the handle of demodulator.
+ * @param ucTunerType tuner type.
+ * @param ucBoardId Board ids.
+ * @param dopStrength signal strength.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getSignalStrengthDBm (
+ IN Demodulator* demodulator,
+ IN Byte ucTunerType,
+ IN Byte ucBoardId,
+ OUT double* dopStrength
+);
+
+
+/**
+ * Program CFOE 2.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param ucBw Current channel bandwidth in MHz.
+ * @param dFs ADC sampling frequency.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_programCFOE2 (
+ IN Demodulator* demodulator,
+ IN Byte ucBw,
+ IN double dFs
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_setCalibratAgc (
+ IN Demodulator* demodulator
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_setCrystalFrequency (
+ IN Demodulator* demodulator,
+ IN double crystalFrequency
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_writeMt2060If1 (
+ IN Demodulator* demodulator,
+ IN Dword dwIF1
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getSnr (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT double* snr
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @param speed the I2C speed in KHz.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_setI2cSpeed (
+ IN Demodulator* demodulator,
+ IN Dword speed
+);
+
+
+/**
+ * Ask fw to go back to boot code
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_backToBootCode (
+ IN Demodulator* demodulator
+);
+
+
+/**
+ * Control gpio3 (AF9015 use this pin to turn on/off tuner)
+ * ucOn = 1 => turn on tuner
+ * ucOn = 0 => turn off tuner
+ *
+ * @param demodulator the handle of demodulator.
+ * @param contorl True: Enable, False: Disable;
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_controlTunerPower (
+ IN Demodulator* demodulator,
+ IN Byte control
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @param multiplier ADC frequency multiplier;
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_setMultiplier (
+ IN Demodulator* demodulator,
+ IN Multiplier multiplier
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @param multiplier ADC frequency multiplier;
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getMultiplier (
+ IN Demodulator* demodulator,
+ IN Multiplier* multiplier
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @param ifFrequency the IF frequency of tuner;
+ * @param inversion True if tuner's pectrum is inversed;
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_modifyTunerDescription (
+ IN Demodulator* demodulator,
+ IN Byte tunerAddress,
+ IN Byte registerAddressLength,
+ IN Dword ifFrequency,
+ IN Bool inversion
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_writeRawData (
+ IN Demodulator* demodulator,
+ IN Byte writeBufferLength,
+ IN Byte* writeBuffer
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_readRawData (
+ IN Demodulator* demodulator,
+ IN Byte readBufferLength,
+ OUT Byte* readBuffer
+);
+
+
+/**
+ * Open tuner.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ */
+Dword Demodulator_openTuner (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+/**
+ * Set tuner.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param bandwidth The desired bandwidth.
+ * @param frequency The desired frequency.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ */
+Dword Demodulator_setTuner (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param block How many block (logical frame) to be check.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_setPostVitAllZeroBlock (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word block
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @param code the address of function pointer in firmware.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_runCode (
+ IN Demodulator* demodulator,
+ IN Word code
+);
+
+
+/**
+ * Add PID to PID filter.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param pid the PID that will be add to PID filter.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Demodulator_addPid (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Pid pid
+);
+
+
+/**
+ * Add PID to PID filter by index.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param index the index of PID filter.
+ * @param pid the PID that will be add to PID filter.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Demodulator_addPidAt (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte index,
+ IN Pid pid
+);
+
+
+/**
+ * Remove PID from PID filter.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param pid the PID that will be remove from PID filter.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Demodulator_removePid (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Pid pid
+);
+
+/**
+ * Remove PID from PID filter by index.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param index the index of PID filter.
+ * @param pid the PID that will be remove from PID filter.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Demodulator_removePidAt (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte index,
+ IN Pid pid
+);
+
+
+/**
+ * Reset PID filter.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Demodulator_resetPid (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ * Control Active Sync.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param contorl 0: Disable(BDA Extend), 1: Enable (Active Sync)
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_controlActiveSync (
+ IN Demodulator* demodulator,
+ IN Byte control
+);
+
+/**
+ * Set the counting range for Pre-Viterbi and Post-Viterbi.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param frameCount the number of super frame for Pre-Viterbi.
+ * @param packetUnit the number of packet unit for Post-Viterbi.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_setStatisticRange (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte superFrameCount,
+ IN Word packetUnit
+);
+
+
+/**
+ * Get the counting range for Pre-Viterbi and Post-Viterbi.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param frameCount the number of super frame for Pre-Viterbi.
+ * @param packetUnit the number of packet unit for Post-Viterbi.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getStatisticRange (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte* superFrameCount,
+ IN Word* packetUnit
+);
+
+
+/**
+ * Get the using tuner code version.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param majorVersion the number of tuner major version.
+ * @param minorVersion the number of tuner minor version.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Demodulator_getTunerVersion (
+ IN Demodulator* demodulator,
+ OUT Byte* majorVersion,
+ OUT Byte* minorVersion
+);
+
+
+#endif \ No newline at end of file
diff --git a/api/driver_tua8010.c b/api/driver_tua8010.c
new file mode 100644
index 0000000..7c9b0ec
--- /dev/null
+++ b/api/driver_tua8010.c
@@ -0,0 +1,366 @@
+/* ============================================================================
+** Copyright (C) 1997-2008 Infineon AP All rights reserved.
+** ============================================================================
+**
+** ============================================================================
+** Revision Information :
+** File name: driver_tua8010.c
+** Version: V0.1
+** Date: 2008.08.17
+**
+** ============================================================================
+** History:
+**
+** Date Author Comment
+** ----------------------------------------------------------------------------
+**
+** 2007.11.06 Walter Pichler created.
+** 2008.08.15 Xie Yonggang adaption to TUA8010
+** ============================================================================
+*/
+
+/*============================================================================
+Includes
+============================================================================*/
+
+#include "driver_tua8010.h"
+#include "driver_tua8010_NeededFunctions.h" /* Note: This function have to be provided by the user */
+
+/*============================================================================
+Local compiler keeys ( usage depends on the application )
+============================================================================*/
+
+#define CRYSTAL_26_MHZ
+//#define CRYSTAL_19.2_MHZ
+//#define CRYSTAL_20.48_MHZ
+
+//#define AGC_BY_IIC
+//#define AGC_BY_AGC_BUS
+//#define AGC_BY_EXT_PIN
+
+
+/*============================================================================
+Named Constants Definitions ( usage depends on the application )
+============================================================================*/
+
+#define TUNERs_TUA8010_DEVADDR 0xC2
+
+/* Note: The correct device address depends hardware settings. See Datasheet
+ and User Manual for details. */
+
+/*============================================================================
+Local Named Constants Definitions
+============================================================================*/
+#define OPERATIONAL_MODE 0x03
+#define CHANNEL_BANDWITH 0x04
+#define SW_CONTR_TIME_SLICING 0x05
+#define BASEBAND_GAIN_CONTROL 0x06
+#define MANUAL_BASEBAND_GAIN 0x0b
+#define REFERENCE_FREQUENCY 0x1d
+#define CHANNEL_WORD 0x1f
+#define CHANNEL_OFFSET 0x20
+#define CHANNEL_FILTER_TRIMMING 0x2f
+#define OUTPUT_BUFFER 0x32
+#define RF_AGC_CONFIG_A 0x36
+#define RF_AGC_CONFIG_B 0x37
+#define UHF_LNA_SELECT 0x39
+#define LEVEL_DETECTOR 0x3a
+#define MIXER_CURRENT 0x3b
+#define PORT_CONTROL 0x3e
+#define CRYSTAL_TRIMMING 0x41
+#define CHANNEL_FILTER_STATUS 0x60
+#define SIG_STRENGHT_INDICATION 0x62
+#define PLL_LOCK 0x69
+#define RECEIVER_STATE 0x70
+#define RF_INPUT 0x71
+#define BASEBAND_GAIN 0x72
+#define CHIP_IDENT_CODE 0x7e
+#define CHIP_REVISION 0x7f
+
+#define TUNERs_TUA8010_BW_8 0xcf
+#define TUNERs_TUA8010_BW_7 0x10
+#define TUNERs_TUA8010_BW_6 0x20
+#define TUNERs_TUA8010_BW_5 0x30
+
+
+
+
+/*============================================================================
+ Types definition
+============================================================================*/
+
+
+
+
+/*============================================================================
+ Public Functions
+============================================================================*/
+
+
+/**
+ * tuner initialisation
+ * @retval TUNER_OK No error
+ * @retval TUNER_ERROR Error
+*/
+
+int initializeTUA8010(void)
+{
+ unsigned int counter;
+ char i2cseq[2];
+ tunerReceiverState_t tunerState;
+
+ setRXEN8010 (L_LEVEL); /* de-asserting RXEN */
+
+ setRESETN8010 (L_LEVEL); /* de-asserting RESET */
+
+ /* Note: CEN may also be hard wired in the application*/
+ setCEN8010 (L_LEVEL); /* de-asserting Chip enable */
+
+ /* Note: 20µs assumes that all external power supplies are settled. If not, add more time here */
+ waitloop8010 (20); /* wait for 20 uS */
+
+ /* Note: CEN may also be hard wired in the application*/
+ setCEN8010 (H_LEVEL); /* asserting Chip enable */
+
+ /* Note: 20µs assumes that all external power supplies are settled. If not, add more time here */
+ waitloop8010 (20); /* wait for 20 uS */
+
+ setRESETN8010 (H_LEVEL); /* asserting RESET */
+
+ counter = 7;
+ do
+ {
+ counter --;
+ waitloop8010 (1000); /* wait for 1 mS */
+
+ }while ((counter));
+
+ /* PGF */
+ i2cseq[0] = 0x00;
+ i2cseq[1] = 0x00;
+ i2cBusWrite8010 (TUNERs_TUA8010_DEVADDR, 0x0D, i2cseq, 2);
+
+ /* Xtal */
+ i2cseq[0] = 0x00;
+ i2cseq[1] = 0x30;
+ i2cBusWrite8010 (TUNERs_TUA8010_DEVADDR, 0x1D, i2cseq, 2);
+
+ /* VCO */
+ i2cseq[0] = 0x88;
+ i2cseq[1] = 0x7A;
+ i2cBusWrite8010 (TUNERs_TUA8010_DEVADDR, 0x25, i2cseq, 2);
+
+ /* LNA */
+ i2cseq[0] = 0x1c;
+ i2cseq[1] = 0x00;
+ i2cBusWrite8010 (TUNERs_TUA8010_DEVADDR, 0x2C, i2cseq, 2);
+
+ /* Channel Filter */
+ i2cseq[0] = 0x00;
+ i2cseq[1] = 0x70;
+ i2cBusWrite8010 (TUNERs_TUA8010_DEVADDR, 0x32, i2cseq, 2);
+
+ /* Channel Filter */
+ i2cseq[0] = 0x02;
+ i2cseq[1] = 0x40;
+ i2cBusWrite8010 (TUNERs_TUA8010_DEVADDR, 0x34, i2cseq, 2);
+
+ /* Low Pwr LNA*/
+ i2cseq[0] = 0xC0;
+ i2cseq[1] = 0x13;
+ i2cBusWrite8010 (TUNERs_TUA8010_DEVADDR, 0x36, i2cseq, 2);
+
+ /* RF AGC Release */
+ i2cseq[0] = 0x0F;
+ i2cseq[1] = 0x98;
+ i2cBusWrite8010 (TUNERs_TUA8010_DEVADDR, 0x37, i2cseq, 2);
+
+ setRXEN8010 (H_LEVEL); /* RXEN to low >> IDLE STATE */
+
+
+ return TUNER_OK;
+}
+
+
+
+/**
+ * tuner tune
+ * @param IN i_freq tuning frequency
+ * @param IN i_bandwidth channel bandwidth
+ * @retval TUNER_OK No error
+ * @retval TUNER_ERROR Error
+*/
+
+int tuneTUA8010(long i_freq, tunerDriverBW_t i_bandwidth)
+{
+ char i2cseq[2];
+ unsigned int divider_factor;
+ unsigned int ch_offset;
+ unsigned int counter;
+ unsigned int lo_path_settings;
+ tunerReceiverState_t tunerState;
+
+
+ /* de-assert RXEN >> IDLE STATE */
+ setRXEN8010 (L_LEVEL);
+
+
+ /* calculate divider factor */
+ if (i_freq < 1000000) /* divider factor and channel offset for UHF/VHF III */
+ {
+ ch_offset = 0x1C20; /* channel offset 150 MHz */
+ divider_factor = (unsigned int) (((i_freq - 150000) * 48) / 1000);
+ lo_path_settings = 0xb6de;
+ }
+
+ else /* calculate divider factor for L-Band Frequencies */
+ {
+ ch_offset = 0x5460; /* channel offset 450 MHz */
+ divider_factor = (unsigned int) (((i_freq - 450000) * 48) / 1000);
+ lo_path_settings = 0xbede;
+ }
+
+
+ // Set for GPIO_0 control
+ if (i_freq >= 170000 && i_freq <= 250000)
+ {
+ i2cseq[0] = 0x51;
+ i2cseq[1] = 0x42;
+ i2cBusWrite8010 (TUNERs_TUA8010_DEVADDR, 0x3E, i2cseq, 2);
+ }
+ else if (i_freq >= 470000 && i_freq <= 860000)
+ {
+ i2cseq[0] = 0x5D;
+ i2cseq[1] = 0x72;
+ i2cBusWrite8010 (TUNERs_TUA8010_DEVADDR, 0x3E, i2cseq, 2);
+ }
+
+ // Set LO Path
+ i2cseq[0] = lo_path_settings >> 8;
+ i2cseq[1] = lo_path_settings & 0xff;
+ i2cBusWrite8010 (TUNERs_TUA8010_DEVADDR, 0x2b, i2cseq, 2);
+
+ // Set channel offset
+ i2cseq [0] = ch_offset >> 8;
+ i2cseq [1] = ch_offset & 0xff;
+ i2cBusWrite8010 (TUNERs_TUA8010_DEVADDR, 0x20, i2cseq, 2);
+
+ // Set Frequency
+ i2cseq [0] = divider_factor >> 8;
+ i2cseq [1] = divider_factor & 0xff;
+ i2cBusWrite8010 (TUNERs_TUA8010_DEVADDR, 0x1f, i2cseq, 2);
+
+ // Set bandwidth
+ i2cBusRead8010 (TUNERs_TUA8010_DEVADDR, 0x04, i2cseq, 2); /* get current register value */
+ i2cseq [0] &= TUNERs_TUA8010_BW_8;
+
+ switch (i_bandwidth)
+ {
+ case TUNER_BANDWIDTH_7MHZ: i2cseq [0] |= TUNERs_TUA8010_BW_7;
+ break;
+ case TUNER_BANDWIDTH_6MHZ: i2cseq [0] |= TUNERs_TUA8010_BW_6;
+ break;
+ case TUNER_BANDWIDTH_5MHZ: i2cseq [0] |= TUNERs_TUA8010_BW_5;
+ break;
+ }
+
+ i2cBusWrite8010 (TUNERs_TUA8010_DEVADDR, 0x04, i2cseq, 2);
+
+ /* assert RXEN >> RX STATE */
+ setRXEN8010 (H_LEVEL);
+
+ counter = 5;
+ do
+ {
+ counter --;
+ waitloop8010 (1000); /* wait for 1 mS */
+ }while ((counter));
+
+ return TUNER_OK;
+}
+
+
+/**
+ * Get pll locked state
+ * @param OUT o_pll pll locked state
+ * @retval TUNER_OK No error
+ * @retval TUNER_ERROR Error
+*/
+
+int getPllLockedStateTUA8010(tunerPllLocked_t *o_pll)
+{
+ char i2cseq[2];
+
+ i2cBusRead8010 (TUNERs_TUA8010_DEVADDR, 0x69, i2cseq, 2); /* get current register value */
+
+ o_pll[0] = (i2cseq[1] & 0x08) ? PLL_LOCKED : PLL_NOT_LOCKED;
+
+ return TUNER_OK;
+}
+
+
+/**
+ * Get tuner state
+ * @param OUT o_tunerState tuner state
+ * @retval TUNER_OK No error
+ * @retval TUNER_ERROR Error
+*/
+
+int getReceiverStateTUA8010(tunerReceiverState_t *o_tunerState)
+{
+ char i2cseq[2];
+
+ i2cBusRead8010 (TUNERs_TUA8010_DEVADDR, 0x70, i2cseq, 2); /* get current register value */
+
+ switch (i2cseq[1] & ~0x1f)
+ {
+ case 0x80: o_tunerState [0] = IDLE; break;
+ case 0x40: o_tunerState [0] = RX; break;
+ case 0x20: o_tunerState [0] = STANDBY;
+ }
+
+ return TUNER_OK;
+}
+
+
+/**
+ * Get active input
+ * @param OUT o_activeInput active input info
+ * @retval TUNER_OK No error
+ * @retval TUNER_ERROR Error
+*/
+
+int getActiveInputTUA8010(tunerActiveInput_t *o_activeInput)
+{
+ char i2cseq[2];
+
+ i2cBusRead8010 (TUNERs_TUA8010_DEVADDR, 0x71, i2cseq, 2); /* get current register value */
+
+ switch (i2cseq[1] & ~0x0f)
+ {
+ case 0x80: o_activeInput [0] = Internal_UHF_LNA; break;
+ case 0x40: o_activeInput [0] = External_UHF_LNA; break;
+ case 0x20: o_activeInput [0] = Internal_VHF_LNA; break;
+ case 0x10: o_activeInput [0] = External_VHF_LNA;
+ }
+
+ return TUNER_OK;
+}
+
+
+/**
+ * Get baseband gain value
+ * @param OUT o_basebandGain baseband gain value
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int getBasebandGainTUA8010(char *o_basebandGain)
+{
+ char i2cseq[2];
+
+ i2cBusRead8010 (TUNERs_TUA8010_DEVADDR, 0x72, i2cseq, 2); /* get current register value */
+ o_basebandGain [0] = i2cseq [1];
+
+ return TUNER_OK;
+}
diff --git a/api/driver_tua8010.h b/api/driver_tua8010.h
new file mode 100644
index 0000000..175fe14
--- /dev/null
+++ b/api/driver_tua8010.h
@@ -0,0 +1,114 @@
+/* ============================================================================
+** Copyright (C) 1997-2008 Infineon AP All rights reserved.
+** ============================================================================
+**
+** ============================================================================
+** Revision Information :
+** File name: driver_tua8010.h
+** Version: 2008.08.17
+** Date: V0.1
+**
+** ============================================================================
+** History:
+**
+** Date Author Comment
+** ----------------------------------------------------------------------------
+**
+** 2007.11.06 Walter Pichler created.
+** 2008.08.15 Xie Yonggang adaption to TUA8010
+** ============================================================================
+*/
+
+
+/*============================================================================
+ Named Constants Definitions
+============================================================================*/
+
+#define TUNER_OK 0
+#define TUNER_ERR 0xff
+
+#define H_LEVEL 1
+#define L_LEVEL 0
+
+
+/*============================================================================
+ Types definition
+============================================================================*/
+
+
+typedef enum {
+ TUNER_BANDWIDTH_8MHZ,
+ TUNER_BANDWIDTH_7MHZ,
+ TUNER_BANDWIDTH_6MHZ,
+ TUNER_BANDWIDTH_5MHZ,
+ } tunerDriverBW_t;
+
+
+typedef enum {
+ PLL_LOCKED,
+ PLL_NOT_LOCKED
+ }tunerPllLocked_t;
+
+
+typedef enum {
+ STANDBY,
+ IDLE,
+ RX
+ } tunerReceiverState_t;
+
+
+typedef enum {
+ Internal_UHF_LNA,
+ External_UHF_LNA,
+ Internal_VHF_LNA,
+ External_VHF_LNA
+ } tunerActiveInput_t;
+
+
+
+/*============================================================================
+ Public functions
+============================================================================*/
+
+/**
+ * tuner initialisation
+ * @retval TUNER_OK No error
+ * @retval TUNER_ERROR Error
+*/
+extern int initializeTUA8010(void);
+
+
+/**
+ * tuner tune
+ * @param IN i_freq tuning frequency
+ * @param IN i_bandwidth channel bandwidth
+ * @retval TUNER_OK No error
+ * @retval TUNER_ERROR Error
+*/
+extern int tuneTUA8010(long i_freq, tunerDriverBW_t i_bandwidth);
+
+
+/**
+ * Get tuner state
+ * @param OUT o_tunerState tuner state
+ * @retval TUNER_OK No error
+ * @retval TUNER_ERROR Error
+*/
+extern int getReceiverStateTUA8010(tunerReceiverState_t *o_tunerState);
+
+/**
+ * Get active input
+ * @param OUT o_activeInput active input info
+ * @retval TUNER_OK No error
+ * @retval TUNER_ERROR Error
+*/
+extern int getActiveInputTUA8010(tunerActiveInput_t *o_activeInput);
+
+
+/**
+ * Get baseband gain value
+ * @param OUT o_basebandGain baseband gain value
+ * @retval TUNER_OK No error
+ * @retval TUNER_ERROR Error
+*/
+extern int getBasebandGainTUA8010(char *o_basebandGain);
diff --git a/api/driver_tua8010_NeededFunctions.h b/api/driver_tua8010_NeededFunctions.h
new file mode 100644
index 0000000..5b13df0
--- /dev/null
+++ b/api/driver_tua8010_NeededFunctions.h
@@ -0,0 +1,98 @@
+/* ============================================================================
+** Copyright (C) 1997-2008 Infineon AP All rights reserved.
+** ============================================================================
+**
+** ============================================================================
+** Revision Information :
+** File name: driver_tua8010_NeededFunctions.h
+** Version: v0.1
+** Date: 2008.08.17
+**
+** ============================================================================
+** History:
+**
+** Date Author Comment
+** ----------------------------------------------------------------------------
+** 2007.11.06 Walter Pichler created.
+** 2008.08.15 Xie Yonggang adaption to TUA8010
+**
+** ============================================================================
+*/
+
+/*========================================================================================================================
+ additional needed external funtions ( have to be provided by the user! )
+========================================================================================================================*/
+
+/**
+ * set / reset tuner reset input
+ * @param IN i_state level
+ * @retval TUNER_OK No error
+ * @retval TUNER_ERROR Error
+*/
+
+int setRESETN8010 (unsigned int i_state);
+
+
+
+/**
+ * set / reset tuner receive enable input
+ * @param IN i_state level
+ * @retval TUNER_OK No error
+ * @retval TUNER_ERROR Error
+*/
+
+int setRXEN8010 (unsigned int i_state);
+
+
+/**
+ * set / reset tuner chiop enable input
+ * @param IN i_state level
+ * @retval TUNER_OK No error
+ * @retval TUNER_ERROR Error
+*/
+
+int setCEN8010 (unsigned int i_state);
+
+
+
+/**
+ * waitloop
+ * @param IN i_looptime * 1uS
+ * @retval TUNER_OK No error
+ * @retval TUNER_ERROR Error
+*/
+
+int waitloop8010 (unsigned int i_looptime);
+
+
+
+/**
+ * i2cBusWrite
+ * @param IN deviceAdress chip address
+ * @param IN registerAdress register address
+ * @param IN *data pointer to data source
+ * @param IN length number of bytes to transmit
+ * @retval TUNER_OK No error
+ * @retval TUNER_ERROR Error
+*/
+
+ int i2cBusWrite8010 (unsigned char deviceAddress, unsigned char registerAddress, char *data, unsigned int length);
+
+
+
+/**
+ * i2cBusRead
+ * @param IN deviceAdress chip address
+ * @param IN registerAdress register address
+ * @param OUT *data pointer to data destination
+ * @param IN length number of bytes to read
+ * @retval TUNER_OK No error
+ * @retval TUNER_ERROR Error
+*/
+
+ int i2cBusRead8010 (unsigned char deviceAddress, unsigned char registerAddress, char *data, unsigned int length);
+
+
+/*========================================================================================================================
+ end of additional needed external funtions
+========================================================================================================================*/
diff --git a/api/driver_tua9001.c b/api/driver_tua9001.c
new file mode 100644
index 0000000..cf61fe9
--- /dev/null
+++ b/api/driver_tua9001.c
@@ -0,0 +1,409 @@
+/* ============================================================================
+** Copyright (C) 1997-2007 Infineon AG All rights reserved.
+** ============================================================================
+**
+** ============================================================================
+** Revision Information :
+** File name: driver_tua9001.c
+** Version: V 1.01
+** Date:
+**
+** ============================================================================
+** History:
+**
+** Date Author Comment
+** ----------------------------------------------------------------------------
+**
+** 2007.11.06 Walter Pichler created.
+** 2008.04.08 Walter Pichler adaption to TUA 9001E
+**
+** ============================================================================
+*/
+
+/*============================================================================
+Includes
+============================================================================*/
+
+#include "driver_tua9001.h"
+#include "driver_tua9001_NeededFunctions.h" /* Note: This function have to be provided by the user */
+
+/*============================================================================
+Local compiler keeys ( usage depends on the application )
+============================================================================*/
+
+#define CRYSTAL_26_MHZ
+//#define CRYSTAL_19.2_MHZ
+//#define CRYSTAL_20.48_MHZ
+
+//#define AGC_BY_IIC
+#define AGC_BY_AGC_BUS
+//#define AGC_BY_EXT_PIN
+
+
+/*============================================================================
+Named Constants Definitions ( usage depends on the application )
+============================================================================*/
+
+#define TUNERs_TUA9001_DEVADDR 0xC0
+
+/* Note: The correct device address depends hardware settings. See Datasheet
+ and User Manual for details. */
+
+/*============================================================================
+Local Named Constants Definitions
+============================================================================*/
+#define OPERATIONAL_MODE 0x03
+#define CHANNEL_BANDWITH 0x04
+#define SW_CONTR_TIME_SLICING 0x05
+#define BASEBAND_GAIN_CONTROL 0x06
+#define MANUAL_BASEBAND_GAIN 0x0b
+#define REFERENCE_FREQUENCY 0x1d
+#define CHANNEL_WORD 0x1f
+#define CHANNEL_OFFSET 0x20
+#define CHANNEL_FILTER_TRIMMING 0x2f
+#define OUTPUT_BUFFER 0x32
+#define RF_AGC_CONFIG_A 0x36
+#define RF_AGC_CONFIG_B 0x37
+#define UHF_LNA_SELECT 0x39
+#define LEVEL_DETECTOR 0x3a
+#define MIXER_CURRENT 0x3b
+#define PORT_CONTROL 0x3e
+#define CRYSTAL_TRIMMING 0x41
+#define CHANNEL_FILTER_STATUS 0x60
+#define SIG_STRENGHT_INDICATION 0x62
+#define PLL_LOCK 0x69
+#define RECEIVER_STATE 0x70
+#define RF_INPUT 0x71
+#define BASEBAND_GAIN 0x72
+#define CHIP_IDENT_CODE 0x7e
+#define CHIP_REVISION 0x7f
+
+#define TUNERs_TUA9001_BW_8 0xcf
+#define TUNERs_TUA9001_BW_7 0x10
+#define TUNERs_TUA9001_BW_6 0x20
+#define TUNERs_TUA9001_BW_5 0x30
+
+
+
+
+/*============================================================================
+ Types definition
+============================================================================*/
+
+
+
+
+/*============================================================================
+ Public Functions
+============================================================================*/
+
+
+/**
+ * tuner initialisation
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int initializeTua9001 (void)
+{
+ unsigned int counter;
+ char i2cseq[2];
+ tunerReceiverState_t tunerState;
+
+ /* Note: CEN may also be hard wired in the application*/
+ setCEN (H_LEVEL); /* asserting Chip enable */
+
+ setRESETN (L_LEVEL); /* asserting RESET */
+
+ setRXEN (L_LEVEL); /* RXEN to low >> IDLE STATE */
+
+ /* Note: 20µs assumes that all external power supplies are settled. If not, add more time here */
+ waitloop (20); /* wait for 20 uS */
+
+ setRESETN (H_LEVEL); /* de-asserting RESET */
+
+ /* This is to wait for the Crystal Oscillator to settle .. wait until IDLE mode is reached */
+ counter = 7;
+ do
+ {
+ counter --;
+ waitloop (1000); /* wait for 1 mS */
+
+ }while ((counter));
+
+
+ /**** Overwrite default register value ****/
+ i2cseq[0] = 0x65; /* Waiting time before PLL cal. start */
+ i2cseq[1] = 0x12;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x1e, i2cseq, 2);
+
+ i2cseq[0] = 0xB8; /* VCO Varactor bias fine tuning */
+ i2cseq[1] = 0x88;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x25, i2cseq, 2);
+
+ i2cseq[0] = 0x54; /* LNA switching Threshold for UHF1/2 */
+ i2cseq[1] = 0x60;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x39, i2cseq, 2);
+
+ i2cseq[0] = 0x00;
+ i2cseq[1] = 0xC0;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x3b, i2cseq, 2);
+
+ i2cseq[0] = 0xF0; /* LO- Path Set LDO output voltage */
+ i2cseq[1] = 0x00;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x3a, i2cseq, 2);
+
+ i2cseq[0] = 0x00; /* Set EXTAGC interval */
+ i2cseq[1] = 0x00;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x08, i2cseq, 2);
+
+ i2cseq[0] = 0x00; /* Set max. capacitive load */
+ i2cseq[1] = 0x30;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x32, i2cseq, 2);
+
+
+ /**** Set Crystal Reference Frequency an Trim value ****/
+#if defined(CRYSTAL_26_MHZ) /* Frequency 26 MHz */
+ i2cseq[0] = 0x01;
+ i2cseq[1] = 0xB0;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x1d, i2cseq, 2);
+
+ i2cseq[0] = 0x70; /* NDK 3225 series 26 MHz XTAL */
+ i2cseq[1] = 0x3a;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x41, i2cseq, 2);
+ i2cseq[0] = 0x1C;
+ i2cseq[1] = 0x78;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x40, i2cseq, 2);
+
+#elif defined(CRYSTAL_19.2_MHZ) /* Frequency 19.2 MHz */
+ i2cseq[0] = 0x01;
+ i2cseq[1] = 0xA0;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x1d, i2cseq, 2);
+ /* Note: Insert optimised register values for 0x40 / 0x41 for used crystal */
+ /* contact application support for further information */
+#elif defined(CRYSTAL_20.48_MHZ) /* Frequency 20,48 MHz */
+ i2cseq[0] = 0x01;
+ i2cseq[1] = 0xA8;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x1d, i2cseq, 2);
+ /* Note: Insert optimised register values for 0x40 / 0x41 for used crystal */
+ /* contact application support for further information */
+#endif
+
+
+
+ /**** Set desired Analog Baseband AGC mode ****/
+#if defined (AGC_BY_IIC)
+ i2cseq[0] = 0x00; /* Bypass AGC controller >> IIC based AGC */
+ i2cseq[1] = 0x40;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x06, i2cseq, 2);
+#elif defined(AGC_BY_AGC_BUS)
+ i2cseq[0] = 0x00; /* Digital AGC bus */
+ i2cseq[1] = 0x00; /* 0,5 dB steps */
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x06, i2cseq, 2);
+#elif defined(AGC_BY_EXT_PIN)
+ i2cseq[0] = 0x40; /* Ext. AGC pin */
+ i2cseq[1] = 0x00;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x06, i2cseq, 2);
+#endif
+
+
+ /**** set desired RF AGC parameter *****/
+ i2cseq[0] = 0x1c; /* Set Wideband Detector Current (100 uA) */
+ i2cseq[1] = 0x00;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x2c, i2cseq, 2);
+
+ i2cseq[0] = 0xC0; /* Set RF AGC Threshold (-32.5dBm) */
+ i2cseq[1] = 0x13;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x36, i2cseq, 2);
+
+ i2cseq[0] = 0x6f; /* RF AGC Parameter */
+ i2cseq[1] = 0x18;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x37, i2cseq, 2);
+
+ i2cseq[0] = 0x00; /* aditional VCO settings */
+ i2cseq[1] = 0x08;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x27, i2cseq, 2);
+
+ i2cseq[0] = 0x00; /* aditional PLL settings */
+ i2cseq[1] = 0x01;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x2a, i2cseq, 2);
+
+ i2cseq[0] = 0x0a; /* VCM correction */
+ i2cseq[1] = 0x40;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x34, i2cseq, 2);
+
+ return TUNER_OK;
+}
+
+
+
+/**
+ * tuner tune
+ * @param i_freq tuning frequency
+ * @param i_bandwidth channel bandwidth
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int tuneTua9001 (long i_freq, tunerDriverBW_t i_bandwidth)
+{
+ char i2cseq[2];
+ unsigned int divider_factor;
+ unsigned int ch_offset;
+ unsigned int counter;
+ unsigned int lo_path_settings;
+ tunerReceiverState_t tunerState;
+
+
+
+ /* de-assert RXEN >> IDLE STATE */
+ setRXEN (L_LEVEL);
+
+
+ /* calculate divider factor */
+ if (i_freq < 1000000) /* divider factor and channel offset for UHF/VHF III */
+ {
+ ch_offset = 0x1C20; /* channel offset 150 MHz */
+ divider_factor = (unsigned int) (((i_freq - 150000) * 48) / 1000);
+ lo_path_settings = 0xb6de;
+ }
+
+ else /* calculate divider factor for L-Band Frequencies */
+ {
+ ch_offset = 0x5460; /* channel offset 450 MHz */
+ divider_factor = (unsigned int) (((i_freq - 450000) * 48) / 1000);
+ lo_path_settings = 0xbede;
+ }
+
+
+ // Set LO Path
+ i2cseq[0] = lo_path_settings >> 8;
+ i2cseq[1] = lo_path_settings & 0xff;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x2b, i2cseq, 2);
+
+ // Set channel offset
+ i2cseq [0] = ch_offset >> 8;
+ i2cseq [1] = ch_offset & 0xff;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x20, i2cseq, 2);
+
+ // Set Frequency
+ i2cseq [0] = divider_factor >> 8;
+ i2cseq [1] = divider_factor & 0xff;
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x1f, i2cseq, 2);
+
+ // Set bandwidth
+
+ i2cseq [0] = 0;
+ switch (i_bandwidth)
+ {
+ case TUNER_BANDWIDTH_8MHZ: i2cseq [0] |= TUNERs_TUA9001_BW_8;
+ break;
+ case TUNER_BANDWIDTH_7MHZ: i2cseq [0] |= TUNERs_TUA9001_BW_7;
+ break;
+ case TUNER_BANDWIDTH_6MHZ: i2cseq [0] |= TUNERs_TUA9001_BW_6;
+ break;
+ case TUNER_BANDWIDTH_5MHZ: i2cseq [0] |= TUNERs_TUA9001_BW_5;
+ break;
+ }
+
+ i2cBusWrite (TUNERs_TUA9001_DEVADDR, 0x04, i2cseq, 2);
+
+ /* assert RXEN >> RX STATE */
+ setRXEN (H_LEVEL);
+
+ /* This is to wait for the RX state to settle .. wait until RX mode is reached */
+ counter = 5;
+ do
+ {
+ counter --;
+ waitloop (1000); /* wait for 1 mS */
+ }while ((counter));
+
+
+ return TUNER_OK;
+}
+
+
+/**
+ * Get pll locked state
+ * @param o_pll pll locked state
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int getPllLockedStateTua9001 (tunerPllLocked_t *o_pll)
+{
+ char i2cseq[2];
+
+ i2cBusRead (TUNERs_TUA9001_DEVADDR, 0x69, i2cseq, 2); /* get current register value */
+
+ o_pll[0] = (i2cseq[1] & 0x08) ? PLL_LOCKED : PLL_NOT_LOCKED;
+
+ return TUNER_OK;
+}
+
+
+/**
+ * Get tuner state
+ * @param o_tunerState tuner state
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int getReceiverStateTua9001 (tunerReceiverState_t *o_tunerState)
+{
+ char i2cseq[2];
+
+ i2cBusRead (TUNERs_TUA9001_DEVADDR, 0x70, i2cseq, 2); /* get current register value */
+
+ switch (i2cseq[1] & ~0x1f)
+ {
+ case 0x80: o_tunerState [0] = IDLE; break;
+ case 0x40: o_tunerState [0] = RX; break;
+ case 0x20: o_tunerState [0] = STANDBY;
+ }
+
+ return TUNER_OK;
+}
+
+
+/**
+ * Get active input
+ * @param o_activeInput active input info
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int getActiveInputTua9001 (tunerActiveInput_t *o_activeInput)
+{
+ char i2cseq[2];
+
+ i2cBusRead (TUNERs_TUA9001_DEVADDR, 0x71, i2cseq, 2); /* get current register value */
+
+ switch (i2cseq[1] & ~0x0f)
+ {
+ case 0x80: o_activeInput [0] = L_INPUT_ACTIVE; break;
+ case 0x20: o_activeInput [0] = UHF_INPUT_ACTIVE; break;
+ case 0x10: o_activeInput [0] = VHF_INPUT_ACTIVE;
+ }
+
+ return TUNER_OK;
+}
+
+
+/**
+ * Get baseband gain value
+ * @param o_basebandGain baseband gain value
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int getBasebandGainTua9001 (char *o_basebandGain)
+{
+ char i2cseq[2];
+
+ i2cBusRead (TUNERs_TUA9001_DEVADDR, 0x72, i2cseq, 2); /* get current register value */
+ o_basebandGain [0] = i2cseq [1];
+
+ return TUNER_OK;
+}
diff --git a/api/driver_tua9001.h b/api/driver_tua9001.h
new file mode 100644
index 0000000..75e8c8a
--- /dev/null
+++ b/api/driver_tua9001.h
@@ -0,0 +1,112 @@
+/* ============================================================================
+** Copyright (C) 1997-2007 Infineon AG All rights reserved.
+** ============================================================================
+**
+** ============================================================================
+** Revision Information :
+** File name: driver_tua9001.h
+** Version:
+** Date:
+**
+** ============================================================================
+** History:
+**
+** Date Author Comment
+** ----------------------------------------------------------------------------
+**
+** 2007.11.06 Walter Pichler created.
+** ============================================================================
+*/
+
+
+/*============================================================================
+ Named Constants Definitions
+============================================================================*/
+
+#define TUNER_OK 0
+#define TUNER_ERR 0xff
+
+#define H_LEVEL 1
+#define L_LEVEL 0
+
+
+/*============================================================================
+ Types definition
+============================================================================*/
+
+
+typedef enum {
+ TUNER_BANDWIDTH_8MHZ,
+ TUNER_BANDWIDTH_7MHZ,
+ TUNER_BANDWIDTH_6MHZ,
+ TUNER_BANDWIDTH_5MHZ,
+ } tunerDriverBW_t;
+
+
+typedef enum {
+ PLL_LOCKED,
+ PLL_NOT_LOCKED
+ }tunerPllLocked_t;
+
+
+typedef enum {
+ STANDBY,
+ IDLE,
+ RX
+ } tunerReceiverState_t;
+
+
+typedef enum {
+ L_INPUT_ACTIVE,
+ UHF_INPUT_ACTIVE,
+ VHF_INPUT_ACTIVE
+ } tunerActiveInput_t;
+
+
+
+/*============================================================================
+ Public functions
+============================================================================*/
+
+/**
+ * tuner initialisation
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+extern int initializeTua9001 (void);
+
+
+/**
+ * tuner tune
+ * @param i_freq tuning frequency
+ * @param i_bandwidth channel bandwidth
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+extern int tuneTua9001 (long i_freq, tunerDriverBW_t i_bandwidth);
+
+
+/**
+ * Get tuner state
+ * @param o_tunerState tuner state
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+extern int getReceiverStateTua9001 (tunerReceiverState_t *o_tunerState);
+
+/**
+ * Get active input
+ * @param o_activeInput active input info
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+extern int getActiveInputTua9001 (tunerActiveInput_t *o_activeInput);
+
+
+/**
+ * Get baseband gain value
+ * @param o_basebandGain baseband gain value
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+extern int getBasebandGainTua9001 (char *o_basebandGain);
diff --git a/api/driver_tua9001_NeededFunctions.h b/api/driver_tua9001_NeededFunctions.h
new file mode 100644
index 0000000..ad9e555
--- /dev/null
+++ b/api/driver_tua9001_NeededFunctions.h
@@ -0,0 +1,77 @@
+/*========================================================================================================================
+ additional needed external funtions ( have to be provided by the user! )
+========================================================================================================================*/
+
+/**
+ * set / reset tuner reset input
+ * @param i_state level
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int setRESETN (unsigned int i_state);
+
+
+
+/**
+ * set / reset tuner receive enable input
+ * @param i_state level
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int setRXEN (unsigned int i_state);
+
+
+
+/**
+ * set / reset tuner chiop enable input
+ * @param i_state level
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int setCEN (unsigned int i_state);
+
+
+
+/**
+ * waitloop
+ * @param i_looptime * 1uS
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int waitloop (unsigned int i_looptime);
+
+
+/**
+ * i2cBusWrite
+ * @param deviceAdress chip address
+ * @param registerAdress register address
+ * @param *date pointer to data source
+ * @param length number of bytes to transmit
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int i2cBusWrite (unsigned char deviceAddress, unsigned char registerAddress, char *date, unsigned int length);
+
+
+
+/**
+ * i2cBusRead
+ * @param deviceAdress chip address
+ * @param registerAdress register address
+ * @param *date pointer to data destination
+ * @param length number of bytes to read
+ * @retval TUNER_OK No error
+ * @retval TUNER__ERROR Error
+*/
+
+int i2cBusRead (unsigned char deviceAddress, unsigned char registerAddress, char *date, unsigned int length);
+
+
+/*========================================================================================================================
+ end of additional needed external funtions
+========================================================================================================================*/
diff --git a/api/e4000.c b/api/e4000.c
new file mode 100644
index 0000000..0b41e43
--- /dev/null
+++ b/api/e4000.c
@@ -0,0 +1,859 @@
+/**
+ * @(#)Afa_E4000.cpp
+ *
+ * ==========================================================
+ * Version: 2.0
+ * Date: 2008.07.02
+ * ==========================================================
+ *
+ * ==========================================================
+ * History:
+ *
+ * Date Author Description
+ * ----------------------------------------------------------
+ *
+ * 2008.07.02 Tom Lin added tuner version
+ * ==========================================================
+ *
+ * Copyright 2005 Afatech, Inc. All rights reserved.
+ *
+ */
+
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "standard.h"
+
+
+extern Demodulator* E4000_demodulator;
+extern Byte E4000_chip;
+extern Dword Ref_clk;
+extern Dword E4000_frequency;
+extern Word E4000_bandwidth;
+
+/****************************************************************************\
+* Function: tunerreset
+*
+* Detailed Description:
+* The function resets the E4000 tuner. (Register 0x00).
+*
+\****************************************************************************/
+
+Dword E4000_tunerreset (
+
+ )
+{
+ Dword error = 0;
+ Byte buffer[1];
+ buffer[0] = 0x01;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x00, 1, buffer);
+ return (Error_NO_ERROR);
+}
+
+/****************************************************************************\
+* Function: Tunerclock
+*
+* Detailed Description:
+* The function configures the E4000 clock. (Register 0x06, 0x7a).
+* Function enablesa CMOS clock - values can be modified to disable if required.
+\****************************************************************************/
+
+Dword E4000_Tunerclock()
+{
+ Dword error = 0;
+ Byte buffer[1];
+ buffer[0] = 0x06;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x06, 1, buffer);
+ //buffer[0] = 0x96;
+ // error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x7a, 1, buffer);
+ //**Modify commands above with value required if output clock is not required,
+ return (Error_NO_ERROR);
+}
+
+/****************************************************************************\
+* Function: filtercal
+*
+* Detailed Description:
+* Instructs RC filter calibration. (Register 0x7b).
+*
+\****************************************************************************/
+
+//Dword filtercal()
+//{
+// Dword error = 0;
+// Byte buffer[1];
+// buffer[0] = 0x01;
+// error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x7b, 1, buffer);
+// return (Error_NO_ERROR);
+//}
+/****************************************************************************\
+* Function: Qpeak()
+*
+* Detailed Description:
+* The function configures the E4000 gains.
+* Also sigma delta controller. (Register 0x82).
+*
+\****************************************************************************/
+Dword E4000_Qpeak()
+{
+ Dword error = 0;
+ Byte buffer[2];
+ buffer[0] = 0x01;
+ buffer[1]=0xfe;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x7e, 2, buffer);
+ buffer[0] = 0x00;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x82, 1, buffer);
+ buffer[0] = 0x05;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x24, 1, buffer);
+ buffer[0] = 0x20;
+ buffer[1]=0x01;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x87, 2, buffer);
+ buffer[0] = 0x7f;
+ buffer[1]=0x07;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x9f, 2, buffer);
+ return (Error_NO_ERROR);
+}
+/****************************************************************************\
+* Function: PLL
+*
+* Detailed Description:
+* Configures E4000 PLL divider & sigma delta. 0x0d,0x09, 0x0a, 0x0b).
+*
+\****************************************************************************/
+
+Dword E4000_PLL()
+{
+ //printf("freq=%d", E4000_frequency);
+ //printf("ref clock=%d", Ref_clk);
+ Dword VCO_freq;
+ Dword error = 0;
+ Byte buffer[5];
+ if (E4000_frequency<=72400)
+ {
+ buffer[4] = 15;
+ VCO_freq=E4000_frequency*48;
+ }
+ else if (E4000_frequency<=81200)
+ {
+ buffer[4] = 14;
+ VCO_freq=E4000_frequency*40;
+ }
+ else if (E4000_frequency<=108300)
+ {
+ buffer[4]=13;
+ VCO_freq=E4000_frequency*32;
+ }
+ else if (E4000_frequency<=162500)
+ {
+ buffer[4]=12;
+ VCO_freq=E4000_frequency*24;
+ }
+ else if (E4000_frequency<=216600)
+ {
+ buffer[4]=11;
+ VCO_freq=E4000_frequency*16;
+ }
+ else if (E4000_frequency<=325000)
+ {
+ buffer[4]=10;
+ VCO_freq=E4000_frequency*12;
+ }
+ else if (E4000_frequency<=350000)
+ {
+ buffer[4]=9;
+ VCO_freq=E4000_frequency*8;
+ }
+ else if (E4000_frequency<=432000)
+ {
+ buffer[4]=3;
+ VCO_freq=E4000_frequency*8;
+ }
+ else if (E4000_frequency<=700000)
+ {
+ buffer[4]=2;
+ VCO_freq=E4000_frequency*6;
+ }
+ else if (E4000_frequency<=1200000)
+ {
+ buffer[4]=1;
+ VCO_freq=E4000_frequency*4;
+ }
+ else
+ {
+ buffer[4]=0;
+ VCO_freq=E4000_frequency*2;
+ }
+
+ Dword divider;
+ Dword intVCOfreq;
+ Dword SigDel;
+ Dword SigDel2;
+ Dword SigDel3;
+ divider = VCO_freq / Ref_clk;
+
+ buffer[0]= divider;
+ intVCOfreq = divider * Ref_clk;
+
+ SigDel=65536 * (VCO_freq - intVCOfreq) / Ref_clk;
+
+if (SigDel<=512)
+{
+ SigDel = 512;
+}
+else if (SigDel>=65024)
+{
+ SigDel=65024;
+}
+SigDel2 = SigDel / 256;
+
+buffer[2] = SigDel2;
+SigDel3 = SigDel - (256 * SigDel2);
+
+buffer[1]= SigDel3;
+buffer[3]=0;
+error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x09, 5, buffer);
+ return (Error_NO_ERROR);
+}
+/****************************************************************************\
+* Function: LNAfilter
+*
+* Detailed Description:
+* The function configures the E4000 LNA filter. (Register 0x10).
+*
+\****************************************************************************/
+
+Dword E4000_LNAfilter()
+{
+ Dword error = 0;
+ Byte buffer[1];
+ if(E4000_frequency<=370000)
+ {
+ buffer[0]=0;
+ }
+else if(E4000_frequency<=392500)
+ {
+ buffer[0]=1;
+ }
+ else if(E4000_frequency<=415000)
+ {
+ buffer[0] =2;
+ }
+ else if(E4000_frequency<=437500)
+ {
+ buffer[0]=3;
+ }
+ else if(E4000_frequency<=462500)
+ {
+ buffer[0]=4;
+ }
+ else if(E4000_frequency<=490000)
+ {
+ buffer[0]=5;
+ }
+ else if(E4000_frequency<=522500)
+ {
+ buffer[0]=6;
+ }
+ else if(E4000_frequency<=557500)
+ {
+ buffer[0]=7;
+ }
+ else if(E4000_frequency<=595000)
+ {
+ buffer[0]=8;
+ }
+ else if(E4000_frequency<=642500)
+ {
+ buffer[0]=9;
+ }
+else if(E4000_frequency<=695000)
+ {
+ buffer[0]=10;
+ }
+else if(E4000_frequency<=740000)
+ {
+ buffer[0]=11;
+ }
+else if(E4000_frequency<=800000)
+ {
+ buffer[0]=12;
+ }
+else if(E4000_frequency<=865000)
+ {
+ buffer[0] =13;
+ }
+else if(E4000_frequency<=930000)
+ {
+ buffer[0]=14;
+ }
+else if(E4000_frequency<=1000000)
+ {
+ buffer[0]=15;
+ }
+else if(E4000_frequency<=1310000)
+ {
+ buffer[0]=0;
+ }
+else if(E4000_frequency<=1340000)
+ {
+ buffer[0]=1;
+ }
+else if(E4000_frequency<=1385000)
+ {
+ buffer[0]=2;
+ }
+else if(E4000_frequency<=1427500)
+ {
+ buffer[0]=3;
+ }
+else if(E4000_frequency<=1452500)
+ {
+ buffer[0]=4;
+ }
+else if(E4000_frequency<=1475000)
+ {
+ buffer[0]=5;
+ }
+else if(E4000_frequency<=1510000)
+ {
+ buffer[0]=6;
+ }
+else if(E4000_frequency<=1545000)
+ {
+ buffer[0]=7;
+ }
+else if(E4000_frequency<=1575000)
+ {
+ buffer[0] =8;
+ }
+else if(E4000_frequency<=1615000)
+ {
+ buffer[0]=9;
+ }
+else if(E4000_frequency<=1650000)
+ {
+ buffer[0] =10;
+ }
+else if(E4000_frequency<=1670000)
+ {
+ buffer[0]=11;
+ }
+else if(E4000_frequency<=1690000)
+ {
+ buffer[0]=12;
+ }
+else if(E4000_frequency<=1710000)
+ {
+ buffer[0]=13;
+ }
+else if(E4000_frequency<=1735000)
+ {
+ buffer[0]=14;
+ }
+else
+ {
+ buffer[0]=15;
+ }
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x10, 1, buffer);
+ return (Error_NO_ERROR);
+}
+/****************************************************************************\
+* Function: IFfilter
+*
+* Detailed Description:
+* The function configures the E4000 IF filter. (Register 0x11,0x12).
+*
+\****************************************************************************/
+Dword E4000_IFfilter()
+{
+ Dword error = 0;
+ Byte buffer[2];
+ Word IF_BW;
+ IF_BW = E4000_bandwidth / 2;
+ if(IF_BW<=2150)
+ {
+ buffer[0]=0xfd;
+ buffer[1]=0x1f;
+ }
+ else if(IF_BW<=2200)
+ {
+ buffer[0]=0xfd;
+ buffer[1]=0x1e;
+ }
+ else if(IF_BW<=2240)
+ {
+ buffer[0]=0xfc;
+ buffer[1]=0x1d;
+ }
+ else if(IF_BW<=2280)
+ {
+ buffer[0]=0xfc;
+ buffer[1]=0x1c;
+ }
+ else if(IF_BW<=2300)
+ {
+ buffer[0]=0xfc;
+ buffer[1]=0x1b;
+ }
+ else if(IF_BW<=2400)
+ {
+ buffer[0]=0xfc;
+ buffer[1]=0x1a;
+ }
+ else if(IF_BW<=2450)
+ {
+ buffer[0]=0xfc;
+ buffer[1]=0x19;
+ }
+ else if(IF_BW<=2500)
+ {
+ buffer[0]=0xfc;
+ buffer[1]=0x18;
+ }
+ else if(IF_BW<=2550)
+ {
+ buffer[0]=0xfc;
+ buffer[1]=0x17;
+ }
+ else if(IF_BW<=2600)
+ {
+ buffer[0]=0xfc;
+ buffer[1]=0x16;
+ }
+ else if(IF_BW<=2700)
+ {
+ buffer[0]=0xfc;
+ buffer[1]=0x15;
+ }
+ else if(IF_BW<=2750)
+ {
+ buffer[0]=0xfc;
+ buffer[1]=0x14;
+ }
+ else if(IF_BW<=2800)
+ {
+ buffer[0]=0xfc;
+ buffer[1]=0x13;
+ }
+ else if(IF_BW<=2900)
+ {
+ buffer[0]==0xfb;
+ buffer[1]=0x12;
+ }
+ else if(IF_BW<=2950)
+ {
+ buffer[0]=0xfb;
+ buffer[1]=0x11;
+ }
+ else if(IF_BW<=3000)
+ {
+ buffer[0]=0xfb;
+ buffer[1]=0x10;
+ }
+ else if(IF_BW<=3100)
+ {
+ buffer[0]=0xfb;
+ buffer[1]=0x0f;
+ }
+ else if(IF_BW<=3200)
+ {
+ buffer[0]=0xfa;
+ buffer[1]=0x0e;
+ }
+ else if(IF_BW<=3300)
+ {
+ buffer[0]=0xfa;
+ buffer[1]=0x0d;
+ }
+ else if(IF_BW<=3400)
+ {
+ buffer[0]=0xf9;
+ buffer[1]=0x0c;
+ }
+ else if(IF_BW<=3600)
+ {
+ buffer[0]=0xf9;
+ buffer[1]=0x0b;
+ }
+ else if(IF_BW<=3700)
+ {
+ buffer[0]=0xf9;
+ buffer[1]=0x0a;
+ }
+ else if(IF_BW<=3800)
+ {
+ buffer[0]=0xf8;
+ buffer[1]=0x09;
+ }
+ else if(IF_BW<=3900)
+ {
+ buffer[0]=0xf8;
+ buffer[1]=0x08;
+ }
+ else if(IF_BW<=4100)
+ {
+ buffer[0]=0xf8;
+ buffer[1]=0x07;
+ }
+ else if(IF_BW<=4300)
+ {
+ buffer[0]=0xf7;
+ buffer[1]=0x06;
+ }
+ else if(IF_BW<=4400)
+ {
+ buffer[0]=0xf7;
+ buffer[1]=0x05;
+ }
+ else if(IF_BW<=4600)
+ {
+ buffer[0]=0xf7;
+ buffer[1]=0x04;
+ }
+ else if(IF_BW<=4800)
+ {
+ buffer[0]=0xf6;
+ buffer[1]=0x03;
+ }
+ else if(IF_BW<=5000)
+ {
+ buffer[0]=0xf6;
+ buffer[1]=0x02;
+ }
+ else if(IF_BW<=5300)
+ {
+ buffer[0]=0xf5;
+ buffer[1]=0x01;
+ }
+ else if(IF_BW<=5500)
+ {
+ buffer[0]=0xf5;
+ buffer[1]=0x00;
+ }
+ else
+ {
+ buffer[0]=0x00;
+ buffer[1]=0x20;
+ }
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x11, 2, buffer);
+ return (Error_NO_ERROR);
+}
+/****************************************************************************\
+* Function: freqband
+*
+* Detailed Description:
+* Configures the E4000 frequency band. (Registers 0x07, 0x78).
+*
+\****************************************************************************/
+Dword E4000_freqband()
+{
+ Dword error = 0;
+ Byte buffer[1];
+ if (E4000_frequency<=140000)
+ {
+ buffer[0] = 1;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x07, 1, buffer);
+ buffer[0] = 3;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x78, 1, buffer);
+ }
+ else if (E4000_frequency<=350000)
+ {
+ buffer[0] = 3;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x07, 1, buffer);
+ buffer[0] = 3;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x78, 1, buffer);
+ }
+ else if (E4000_frequency<=1000000)
+ {
+ buffer[0] = 5;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x07, 1, buffer);
+ buffer[0] = 3;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x78, 1, buffer);
+ }
+ else
+ {
+ buffer[0] = 7;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x07, 1, buffer);
+ buffer[0] = 0;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x78, 1, buffer);
+ }
+ return (Error_NO_ERROR);
+}
+/****************************************************************************\
+* Function: DCoffLUT
+*
+* Detailed Description:
+* Populates DC offset LUT. (Registers 0x50 - 0x53, 0x60 - 0x63).
+*
+\****************************************************************************/
+Dword E4000_DCoffLUT()
+{
+ Word IOFF;
+ Word QOFF;
+ Word RANGE1;
+ Word RANGE2;
+ Word QRANGE;
+ Word IRANGE;
+ Dword error = 0;
+ Byte buffer[3];
+ buffer[0] = 0x00;
+ buffer[1] = 0x7e;
+ buffer[2] = 0x24;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x15, 3, buffer);
+ // Sets mixer & IF stage 1 gain = 00 and IF stg 2+ to max gain.
+ buffer[0] = 0x01;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x29, 1, buffer);
+ // Instructs a DC offset calibration.
+ error = Standard_readTunerRegisters (E4000_demodulator, 0, 0x2a, 3, buffer);
+ //printf("\n2a=%d",buffer[0]);
+ //printf("\n2b=%d",buffer[1]);
+ //printf("\n2c=%d",buffer[2]);
+ IOFF=buffer[0];
+ QOFF=buffer[1];
+ RANGE1=buffer[2];
+ //reads DC offset values back
+ if(RANGE1>=32)
+ {
+ RANGE1 = RANGE1 -32;
+ }
+ if(RANGE1>=16)
+ {
+ RANGE1 = RANGE1 - 16;
+ }
+ IRANGE=RANGE1;
+ QRANGE = (buffer[2] - RANGE1) / 16;
+ buffer[0] = (IRANGE * 64) + IOFF;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x60, 1, buffer);
+ buffer[0] = (QRANGE * 64) + QOFF;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x50, 1, buffer);
+ // Populate DC offset LUT
+ buffer[0] = 0;
+ buffer[1] = 127;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x15, 2, buffer);
+ // Sets mixer & IF stage 1 gain = 01 leaving IF stg 2+ at max gain.
+ buffer[0]= 1;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x29, 1, buffer);
+ // Instructs a DC offset calibration.
+ error = Standard_readTunerRegisters (E4000_demodulator, 0, 0x2a, 3, buffer);
+ //printf("\n2a=%d",buffer[0]);
+ //printf("\n2b=%d",buffer[1]);
+ //printf("\n2c=%d",buffer[2]);
+ IOFF=buffer[0];
+ QOFF=buffer[1];
+ RANGE1=buffer[2];
+ // Read DC offset values
+ if(RANGE1>=32)
+ {
+ RANGE1 = RANGE1 -32;
+ }
+ if(RANGE1>=16)
+ {
+ RANGE1 = RANGE1 - 16;
+ }
+ IRANGE = RANGE1;
+ QRANGE = (buffer[2] - RANGE1) / 16;
+ buffer[0] = (IRANGE * 64) + IOFF;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x61, 1, buffer);
+ buffer[0] = (QRANGE * 64) + QOFF;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x51, 1, buffer);
+ // Populate DC offset LUT
+ buffer[0] = 0x01;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x15, 1, buffer);
+ // Sets mixer & IF stage 1 gain = 11 leaving IF stg 2+ at max gain.
+ buffer[0] = 1;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x29, 1, buffer);
+ // Instructs a DC offset calibration.
+ error = Standard_readTunerRegisters (E4000_demodulator, 0, 0x2a, 3, buffer);
+ //printf("\n2a=%d",buffer[0]);
+ //printf("\n2b=%d",buffer[1]);
+ //printf("\n2c=%d",buffer[2]);
+ IOFF=buffer[0];
+ QOFF=buffer[1];
+ RANGE1 = buffer[2];
+ // Read DC offset values
+ if(RANGE1>=32)
+ {
+ RANGE1 = RANGE1 -32;
+ }
+ if(RANGE1>=16)
+ {
+ RANGE1 = RANGE1 - 16;
+ }
+ IRANGE = RANGE1;
+ QRANGE = (buffer[2] - RANGE1) / 16;
+ buffer[0] = (IRANGE * 64) + IOFF;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x63, 1, buffer);
+ buffer[0] = (QRANGE * 64) + QOFF;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x53, 1, buffer);
+ // Populate DC offset LUT
+ buffer[0] = 0x7e;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x16, 1, buffer);
+ // Sets mixer & IF stage 1 gain = 11 leaving IF stg 2+ at max gain.
+ buffer[0] = 0x01;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x29, 1, buffer);
+ // Instructs a DC offset calibration.
+ error = Standard_readTunerRegisters (E4000_demodulator, E4000_chip, 0x2a, 3, buffer);
+ //printf("\n2a=%d",buffer[0]);
+ //printf("\n2b=%d",buffer[1]);
+ //printf("\n2c=%d",buffer[2]);
+ IOFF=buffer[0];
+ QOFF=buffer[1];
+ RANGE1=buffer[2];
+ // Read DC offset values
+ if(RANGE1>=32)
+ {
+ RANGE1 = RANGE1 -32;
+ }
+ if(RANGE1>=16)
+ {
+ RANGE1 = RANGE1 - 16;
+ }
+ IRANGE = RANGE1;
+ QRANGE = (buffer[2] - RANGE1) / 16;
+ buffer[0]=(IRANGE * 64) + IOFF;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x62, 1, buffer);
+ buffer[0] = (QRANGE * 64) + QOFF;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x52, 1, buffer);
+ // Populate DC offset LUT
+ return (Error_NO_ERROR);
+}
+/****************************************************************************\
+* Function: DCoffloop
+*
+* Detailed Description:
+* Populates DC offset LUT. (Registers 0x2d, 0x70, 0x71).
+* Turns on DC offset LUT and time varying DC offset.
+\****************************************************************************/
+Dword E4000_DCoffloop()
+{
+ Dword error = 0;
+ Byte buffer[2];
+ buffer[0] = 0x1f;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x2d, 1, buffer);
+ buffer[0] = 0x01;
+ buffer[1] = 0x01;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x70, 2, buffer);
+ return (Error_NO_ERROR);
+}
+/****************************************************************************\
+* Function: commonmode
+*
+* Detailed Description:
+* Configures common mode voltage. (Registers 0x2f).
+*
+\****************************************************************************/
+//Dword E4000_commonmode()
+//{
+// //Dword error = 0;
+// //Byte buffer[1];
+// //buffer[0] = 0;
+// //error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x2f, 1, buffer);
+// // Sets 550mV. Modify if alternative is desired.
+// return (Error_NO_ERROR);
+//}
+/****************************************************************************\
+* Function: GainControlinit
+*
+* Detailed Description:
+* Configures gain control mode. (Registers 0x1d, 0x1e, 0x1f, 0x20, 0x21,
+* 0x1a, 0x74h, 0x75h).
+* User may wish to modify values depending on usage scenario.
+* Routine configures LNA: autonomous gain control
+* IF PWM gain control.
+* PWM thresholds = default
+* Mixer: switches when LNA gain =7.5dB
+* Sensitivity / Linearity mode: manual switch
+*
+\****************************************************************************/
+Dword E4000_GainControlinit()
+{
+ Dword sum=255;
+ Dword error = 0;
+ Byte buffer[5];
+ buffer[0] = 0x17;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x1a, 1, buffer);
+ buffer[0] = 0x24;
+ buffer[1] = 0x06;
+ buffer[2] = 0x1a;
+ buffer[3] = 0x0f;
+ buffer[4] = 0x00;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x1d, 5, buffer);
+ error = Standard_readTunerRegisters (E4000_demodulator, 0, 0x1b, 1, buffer);
+ if (buffer[0]<=sum)
+ {
+ sum=buffer[0];
+ }
+ //printf("sum1=%d",sum);
+ buffer[0]=0x1a;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x1f, 1, buffer);
+ error = Standard_readTunerRegisters (E4000_demodulator, 0, 0x1b, 1, buffer);
+ if (buffer[0]<=sum)
+ {
+ sum=buffer[0];
+ }
+ // printf("sum2=%d",sum);
+ buffer[0]=0x1a;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x1f, 1, buffer);
+ error = Standard_readTunerRegisters (E4000_demodulator, 0, 0x1b, 1, buffer);
+ if (buffer[0]<=sum)
+ {
+ sum=buffer[0];
+ }
+ // printf("sum3=%d",sum);
+ buffer[0]=0x1a;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x1f, 1, buffer);
+ error = Standard_readTunerRegisters (E4000_demodulator, 0, 0x1b, 1, buffer);
+ if (buffer[0]<=sum)
+ {
+ sum=buffer[0];
+ }
+ //printf("sum4=%d",sum);
+ buffer[0]=0x1a;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x1f, 1, buffer);
+ error = Standard_readTunerRegisters (E4000_demodulator, 0, 0x1b, 1, buffer);
+ if (buffer[0]<=sum)
+ {
+ sum=buffer[0];
+ }
+ //printf("sum5=%d",sum);
+ buffer[0]=sum;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x1b, 1, buffer);
+ //buffer[0] = 0x03;
+ //buffer[1] = 0xfc;
+ //buffer[2] = 0x03;
+ //buffer[3] = 0xfc;
+ //error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x74, 4, buffer);
+ return (Error_NO_ERROR);
+}
+/****************************************************************************\
+* Function: E4000_Gainmanual
+*
+* Detailed Description:
+* Sets gain to manualcontrol. (Register 0x1a).
+*
+\****************************************************************************/
+Dword E4000_Gainmanual()
+{
+ Dword error = 0;
+ Byte buffer[1];
+ buffer[0] = 0x00;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x1a, 1, buffer);
+ return (Error_NO_ERROR);
+}
+/****************************************************************************\
+* Function: E4000_Gainauto
+*
+* Detailed Description:
+* Sets gain to manualcontrol. (Register 0x1a).
+*
+\****************************************************************************/
+Dword E4000_Gainauto()
+{
+ Dword error = 0;
+ Byte buffer[1];
+ buffer[0] = 0x17;
+ error = Standard_writeTunerRegisters (E4000_demodulator, E4000_chip, 0x1a, 1, buffer);
+ return (Error_NO_ERROR);
+}
diff --git a/api/e4000.h b/api/e4000.h
new file mode 100644
index 0000000..8da7579
--- /dev/null
+++ b/api/e4000.h
@@ -0,0 +1,15 @@
+Dword E4000_tunerreset ();
+Dword E4000_Tunerclock();
+//Dword E4000_filtercal();
+Dword E4000_Qpeak();
+Dword E4000_PLL();
+Dword E4000_LNAfilter();
+Dword E4000_IFfilter();
+Dword E4000_freqband();
+Dword E4000_DCoffLUT();
+Dword E4000_DCoffloop();
+//Dword E4000_commonmode();
+Dword E4000_GainControlinit();
+Dword E4000_Gainmanual();
+Dword E4000_Gainauto();
+
diff --git a/api/error.h b/api/error.h
new file mode 100644
index 0000000..c3343ca
--- /dev/null
+++ b/api/error.h
@@ -0,0 +1,147 @@
+#ifndef __ERROR_H__
+#define __ERROR_H__
+
+#define Error_NO_ERROR 0x00000000ul
+#define Error_RESET_TIMEOUT 0x00000001ul
+#define Error_WRITE_REG_TIMEOUT 0x00000002ul
+#define Error_WRITE_TUNER_TIMEOUT 0x00000003ul
+#define Error_WRITE_TUNER_FAIL 0x00000004ul
+#define Error_RSD_COUNTER_NOT_READY 0x00000005ul
+#define Error_VTB_COUNTER_NOT_READY 0x00000006ul
+#define Error_FEC_MON_NOT_ENABLED 0x00000007ul
+#define Error_INVALID_DEV_TYPE 0x00000008ul
+#define Error_INVALID_TUNER_TYPE 0x00000009ul
+#define Error_OPEN_FILE_FAIL 0x0000000Aul
+#define Error_WRITEFILE_FAIL 0x0000000Bul
+#define Error_READFILE_FAIL 0x0000000Cul
+#define Error_CREATEFILE_FAIL 0x0000000Dul
+#define Error_MALLOC_FAIL 0x0000000Eul
+#define Error_INVALID_FILE_SIZE 0x0000000Ful
+#define Error_INVALID_READ_SIZE 0x00000010ul
+#define Error_LOAD_FW_DONE_BUT_FAIL 0x00000011ul
+#define Error_NOT_IMPLEMENTED 0x00000012ul
+#define Error_NOT_SUPPORT 0x00000013ul
+#define Error_WRITE_MBX_TUNER_TIMEOUT 0x00000014ul
+#define Error_DIV_MORE_THAN_8_CHIPS 0x00000015ul
+#define Error_DIV_NO_CHIPS 0x00000016ul
+#define Error_SUPER_FRAME_CNT_0 0x00000017ul
+#define Error_INVALID_FFT_MODE 0x00000018ul
+#define Error_INVALID_CONSTELLATION_MODE 0x00000019ul
+#define Error_RSD_PKT_CNT_0 0x0000001Aul
+#define Error_FFT_SHIFT_TIMEOUT 0x0000001Bul
+#define Error_WAIT_TPS_TIMEOUT 0x0000001Cul
+#define Error_INVALID_BW 0x0000001Dul
+#define Error_INVALID_BUF_LEN 0x0000001Eul
+#define Error_NULL_PTR 0x0000001Ful
+#define Error_INVALID_AGC_VOLT 0x00000020ul
+#define Error_MT_OPEN_FAIL 0x00000021ul
+#define Error_MT_TUNE_FAIL 0x00000022ul
+#define Error_CMD_NOT_SUPPORTED 0x00000023ul
+#define Error_CE_NOT_READY 0x00000024ul
+#define Error_EMBX_INT_NOT_CLEARED 0x00000025ul
+#define Error_INV_PULLUP_VOLT 0x00000026ul
+#define Error_FREQ_OUT_OF_RANGE 0x00000027ul
+#define Error_INDEX_OUT_OF_RANGE 0x00000028ul
+#define Error_NULL_SETTUNER_PTR 0x00000029ul
+#define Error_NULL_INITSCRIPT_PTR 0x0000002Aul
+#define Error_INVALID_INITSCRIPT_LEN 0x0000002Bul
+#define Error_INVALID_POS 0x0000002Cul
+#define Error_BACK_TO_BOOTCODE_FAIL 0x0000002Dul
+#define Error_GET_BUFFER_VALUE_FAIL 0x0000002Eul
+#define Error_INVALID_REG_VALUE 0x0000002Ful
+#define Error_INVALID_INDEX 0x00000030ul
+#define Error_READ_TUNER_TIMEOUT 0x00000031ul
+#define Error_READ_TUNER_FAIL 0x00000032ul
+#define Error_UNDEFINED_SAW_BW 0x00000033ul
+#define Error_MT_NOT_AVAILABLE 0x00000034ul
+#define Error_NO_SUCH_TABLE 0x00000035ul
+#define Error_WRONG_CHECKSUM 0x00000036ul
+#define Error_INVALID_XTAL_FREQ 0x00000037ul
+#define Error_COUNTER_NOT_AVAILABLE 0x00000038ul
+#define Error_INVALID_DATA_LENGTH 0x00000039ul
+#define Error_BOOT_FAIL 0x0000003Aul
+#define Error_BUFFER_INSUFFICIENT 0x0000003Bul
+#define Error_NOT_READY 0x0000003Cul
+#define Error_DRIVER_INVALID 0x0000003Dul
+#define Error_INTERFACE_FAIL 0x0000003Eul
+#define Error_PID_FILTER_FULL 0x0000003Ful
+#define Error_OPERATION_TIMEOUT 0x00000040ul
+#define Error_LOADFIRMWARE_SKIPPED 0x00000041ul
+#define Error_REBOOT_FAIL 0x00000042ul
+#define Error_PROTOCOL_FORMAT_INVALID 0x00000043ul
+#define Error_ACTIVESYNC_ERROR 0x00000044ul
+#define Error_CE_READWRITEBUS_ERROR 0x00000045ul
+#define Error_CE_NODATA_ERROR 0x00000046ul
+#define Error_NULL_FW_SCRIPT 0x00000047ul
+#define Error_NULL_TUNER_SCRIPT 0x00000048ul
+
+/** Error Code of Gemini System */
+#define Error_INVALID_INDICATOR_TYPE 0x00000101ul
+#define Error_INVALID_SC_NUMBER 0x00000102ul
+#define Error_INVALID_SC_INFO 0x00000103ul
+#define Error_FIGBYPASS_FAIL 0x00000104ul
+
+/** Error Code of Firmware */
+#define Error_FIRMWARE_STATUS 0x01000000ul
+
+/** Error Code of I2C Module */
+#define Error_I2C_DATA_HIGH_FAIL 0x02001000ul
+#define Error_I2C_CLK_HIGH_FAIL 0x02002000ul
+#define Error_I2C_WRITE_NO_ACK 0x02003000ul
+#define Error_I2C_DATA_LOW_FAIL 0x02004000ul
+
+/** Error Code of USB Module */
+#define Error_USB_NULL_HANDLE 0x03010001ul
+#define Error_USB_WRITEFILE_FAIL 0x03000002ul
+#define Error_USB_READFILE_FAIL 0x03000003ul
+#define Error_USB_INVALID_READ_SIZE 0x03000004ul
+#define Error_USB_INVALID_STATUS 0x03000005ul
+#define Error_USB_INVALID_SN 0x03000006ul
+#define Error_USB_INVALID_PKT_SIZE 0x03000007ul
+#define Error_USB_INVALID_HEADER 0x03000008ul
+#define Error_USB_NO_IR_PKT 0x03000009ul
+#define Error_USB_INVALID_IR_PKT 0x0300000Aul
+#define Error_USB_INVALID_DATA_LEN 0x0300000Bul
+#define Error_USB_EP4_READFILE_FAIL 0x0300000Cul
+#define Error_USB_EP$_INVALID_READ_SIZE 0x0300000Dul
+#define Error_USB_BOOT_INVALID_PKT_TYPE 0x0300000Eul
+#define Error_USB_BOOT_BAD_CONFIG_HEADER 0x0300000Ful
+#define Error_USB_BOOT_BAD_CONFIG_SIZE 0x03000010ul
+#define Error_USB_BOOT_BAD_CONFIG_SN 0x03000011ul
+#define Error_USB_BOOT_BAD_CONFIG_SUBTYPE 0x03000012ul
+#define Error_USB_BOOT_BAD_CONFIG_VALUE 0x03000013ul
+#define Error_USB_BOOT_BAD_CONFIG_CHKSUM 0x03000014ul
+#define Error_USB_BOOT_BAD_CONFIRM_HEADER 0x03000015ul
+#define Error_USB_BOOT_BAD_CONFIRM_SIZE 0x03000016ul
+#define Error_USB_BOOT_BAD_CONFIRM_SN 0x03000017ul
+#define Error_USB_BOOT_BAD_CONFIRM_SUBTYPE 0x03000018ul
+#define Error_USB_BOOT_BAD_CONFIRM_VALUE 0x03000019ul
+#define Error_USB_BOOT_BAD_CONFIRM_CHKSUM 0x03000020ul
+#define Error_USB_BOOT_BAD_BOOT_HEADER 0x03000021ul
+#define Error_USB_BOOT_BAD_BOOT_SIZE 0x03000022ul
+#define Error_USB_BOOT_BAD_BOOT_SN 0x03000023ul
+#define Error_USB_BOOT_BAD_BOOT_PATTERN_01 0x03000024ul
+#define Error_USB_BOOT_BAD_BOOT_PATTERN_10 0x03000025ul
+#define Error_USB_BOOT_BAD_BOOT_CHKSUM 0x03000026ul
+#define Error_USB_INVALID_BOOT_PKT_TYPE 0x03000027ul
+#define Error_USB_BOOT_BAD_CONFIG_VAlUE 0x03000028ul
+#define Error_USB_COINITIALIZEEX_FAIL 0x03000029ul
+#define Error_USB_COCREATEINSTANCE_FAIL 0x0300003Aul
+#define Error_USB_COCREATCLSEENUMERATOR_FAIL 0x0300002Bul
+#define Error_USB_QUERY_INTERFACE_FAIL 0x0300002Cul
+#define Error_USB_PKSCTRL_NULL 0x0300002Dul
+#define Error_USB_INVALID_REGMODE 0x0300002Eul
+#define Error_USB_INVALID_REG_COUNT 0x0300002Ful
+#define Error_USB_INVALID_HANDLE 0x03000100ul
+#define Error_USB_WRITE_FAIL 0x03000200ul
+#define Error_USB_UNEXPECTED_WRITE_LEN 0x03000300ul
+#define Error_USB_READ_FAIL 0x03000400ul
+
+/** Error code of 9035U2I bridge*/
+#define Error_AF9035U2I 0x04000000ul
+
+/** Error code of Castor*/
+#define Error_CASTOR 0x70000000ul
+#define Error_CASTOR_BUS_NO_SUPPORT 0x00001000ul
+
+#endif \ No newline at end of file
diff --git a/api/fc2580.c b/api/fc2580.c
new file mode 100644
index 0000000..414ba27
--- /dev/null
+++ b/api/fc2580.c
@@ -0,0 +1,451 @@
+#include "fc2580.h"
+
+/*==============================================================================
+ FILE NAME : FC2580_driver_v1400.c
+
+ VERSION : 1.400
+
+ UPDATE : September 22. 2008
+
+==============================================================================*/
+
+/*==============================================================================
+ milisecond delay function EXTERNAL FUNCTION
+
+ This function is a generic function which write a byte into fc2580's
+ specific address.
+
+ <input parameter>
+
+ a
+ length of wanted delay in milisecond unit
+
+==============================================================================*/
+void wait_msec (unsigned long msec)
+{
+ User_delay (FCI_FC2580_demodulator, msec);
+}
+
+static fc2580_band_type curr_band = NO_BAND;
+static unsigned char data_0x02 = (USE_EXT_CLK<<5)|0x0E;
+
+/*==============================================================================
+
+ fc2580 i2c write
+
+ This function is a generic function which write a byte into fc2580's
+ specific address.
+
+ <input parameter>
+
+ addr
+ fc2580's memory address
+ type : byte
+
+ data
+ target data
+ type : byte
+
+==============================================================================*/
+void fc2580_i2c_write( unsigned char addr, unsigned char data )
+{
+ Standard_writeTunerRegisters (FCI_FC2580_demodulator, FCI_FC2580_chip, addr, 1, &data);
+}
+
+/*==============================================================================
+
+ fc2580 i2c read
+
+ This function is a generic function which gets called to read data from
+ fc2580's target memory address.
+
+ <input parameter>
+
+ addr
+ fc2580's memory address
+ type : byte
+
+
+ <return value>
+ data
+ a byte of data read out of target address 'addr'
+ type : byte
+
+==============================================================================*/
+unsigned char fc2580_i2c_read( unsigned char addr )
+{
+ Byte value;
+
+ Standard_readTunerRegisters (FCI_FC2580_demodulator, FCI_FC2580_chip, addr, 1, &value);
+ return (value);
+}
+
+/*==============================================================================
+ fc2580 I2C Test
+
+ This function is a generic function which tests I2C interface's availability
+
+ by reading out it's I2C id data from reg. address '0x01'.
+
+ <input parameter>
+
+ None
+
+ <return value>
+ int
+ 1 : success - communication is avilable
+ 0 : fail - communication is unavailable
+
+
+==============================================================================*/
+int fc2580_i2c_test( void )
+{
+ return ( fc2580_i2c_read( 0x01 ) == 0x56 )? 0x01 : 0x00;
+}
+
+
+/*==============================================================================
+ fc2580 initial setting
+
+ This function is a generic function which gets called to initialize
+
+ fc2580 in DVB-H mode or L-Band TDMB mode
+
+ <input parameter>
+
+ ifagc_mode
+ type : integer
+ 1 : Internal AGC
+ 2 : Voltage Control Mode
+
+==============================================================================*/
+void fc2580_set_init( int ifagc_mode )
+{
+ fc2580_i2c_write(0x00, 0x00); /*** Confidential ***/
+ fc2580_i2c_write(0x12, 0x86);
+ fc2580_i2c_write(0x14, 0x5C);
+ fc2580_i2c_write(0x16, 0x3C);
+ fc2580_i2c_write(0x1F, 0xD2);
+ fc2580_i2c_write(0x09, 0xD7);
+ fc2580_i2c_write(0x0B, 0xD5);
+ fc2580_i2c_write(0x0C, 0x32);
+ fc2580_i2c_write(0x0E, 0x43);
+ fc2580_i2c_write(0x21, 0x0A);
+ fc2580_i2c_write(0x22, 0x82);
+ if( ifagc_mode == 1 )
+ {
+ fc2580_i2c_write(0x45, 0x10); /** internal AGC */
+ fc2580_i2c_write(0x4C, 0x00); /** HOLD_AGC polarity */
+ }
+ else if( ifagc_mode == 2 )
+ {
+ fc2580_i2c_write(0x45, 0x20); /** Voltage Control Mode */
+ fc2580_i2c_write(0x4C, 0x02); /** HOLD_AGC polarity */
+ }
+ else if( ifagc_mode == 3 )
+ {
+ fc2580_i2c_write(0x45, 0x30); //Up/Down Control ( Digital AGC )
+ fc2580_i2c_write(0x4C, 0x02); //HOLD_AGC polarity
+ }
+ fc2580_i2c_write(0x3F, 0x88);
+ fc2580_i2c_write(0x02, 0x0E);
+ fc2580_i2c_write(0x58, 0x14);
+ fc2580_set_filter(8); /** BW = 7.8MHz */
+
+}
+
+/*==============================================================================
+ fc2580 frequency setting
+
+ This function is a generic function which gets called to change LO Frequency
+
+ of fc2580 in DVB-H mode or L-Band TDMB mode
+
+ <input parameter>
+
+ f_lo
+ Value of target LO Frequency in 'kHz' unit
+ ex) 2.6GHz = 2600000
+
+==============================================================================*/
+void fc2580_set_freq( unsigned int f_lo )
+{
+ unsigned int f_diff, f_diff_shifted, n_val, k_val;
+ unsigned int f_vco, r_val, f_comp;
+ unsigned char pre_shift_bits = 4; /** number of preshift to prevent overflow in shifting f_diff to f_diff_shifted */
+ unsigned char data_0x18;
+
+ fc2580_band_type band = ( f_lo > 1000000 )? L_BAND : ( f_lo > 400000 )? UHF_BAND : VHF_BAND;
+
+ f_vco = ( band == UHF_BAND )? f_lo * 4 : (( band == L_BAND )? f_lo * 2 : f_lo * 12);
+ r_val = ( f_vco >= 2*76*FREQ_XTAL )? 1 : ( f_vco >= 76*FREQ_XTAL )? 2 : 4;
+ f_comp = FREQ_XTAL/r_val;
+ n_val = ( f_vco / 2 ) / f_comp;
+
+ f_diff = f_vco - 2* f_comp * n_val;
+ f_diff_shifted = f_diff << ( 20 - pre_shift_bits );
+ k_val = f_diff_shifted / ( ( 2* f_comp ) >> pre_shift_bits );
+
+ if( f_diff_shifted - k_val * ( ( 2* f_comp ) >> pre_shift_bits ) >= ( f_comp >> pre_shift_bits ) )
+ k_val = k_val + 1;
+
+ if( f_vco >= BORDER_FREQ ) /** Select VCO Band */
+ data_0x02 = data_0x02 | 0x08; /** 0x02[3] = 1; */
+ else
+ data_0x02 = data_0x02 & 0xF7; /** 0x02[3] = 0; */
+
+ //if( band != curr_band ) {
+ switch(band)
+ {
+ case UHF_BAND:
+ data_0x02 = (data_0x02 & 0x3F);
+
+ fc2580_i2c_write(0x25, 0xF0);
+ fc2580_i2c_write(0x27, 0x77);
+ fc2580_i2c_write(0x28, 0x53);
+ fc2580_i2c_write(0x29, 0x60);
+ fc2580_i2c_write(0x30, 0x09);
+ fc2580_i2c_write(0x50, 0x8C);
+ fc2580_i2c_write(0x53, 0x50);
+
+ if( f_lo < 538000 )
+ fc2580_i2c_write(0x5F, 0x13);
+ else
+ fc2580_i2c_write(0x5F, 0x15);
+
+ if( f_lo < 538000 )
+ {
+ fc2580_i2c_write(0x61, 0x07);
+ fc2580_i2c_write(0x62, 0x06);
+ fc2580_i2c_write(0x67, 0x06);
+ fc2580_i2c_write(0x68, 0x08);
+ fc2580_i2c_write(0x69, 0x10);
+ fc2580_i2c_write(0x6A, 0x12);
+ }
+ else if( f_lo < 794000 )
+ {
+ fc2580_i2c_write(0x61, 0x03);
+ fc2580_i2c_write(0x62, 0x03);
+ fc2580_i2c_write(0x67, 0x07);
+ fc2580_i2c_write(0x68, 0x08);
+ fc2580_i2c_write(0x69, 0x0C);
+ fc2580_i2c_write(0x6A, 0x0E);
+ }
+ else
+ {
+ fc2580_i2c_write(0x61, 0x07);
+ fc2580_i2c_write(0x62, 0x06);
+ fc2580_i2c_write(0x67, 0x07);
+ fc2580_i2c_write(0x68, 0x09);
+ fc2580_i2c_write(0x69, 0x10);
+ fc2580_i2c_write(0x6A, 0x12);
+ }
+
+ fc2580_i2c_write(0x63, 0x15);
+
+ fc2580_i2c_write(0x6B, 0x0F);
+ fc2580_i2c_write(0x6C, 0x11);
+ fc2580_i2c_write(0x6D, 0x78);
+ fc2580_i2c_write(0x6E, 0x32);
+ fc2580_i2c_write(0x6F, 0x14);
+ /*fc2580_set_filter(8);*/ /** BW = 7.8MHz */
+ break;
+ case VHF_BAND:
+ data_0x02 = (data_0x02 & 0x3F) | 0x80;
+ fc2580_i2c_write(0x27, 0x77);
+ fc2580_i2c_write(0x28, 0x33);
+ fc2580_i2c_write(0x29, 0x40);
+ fc2580_i2c_write(0x50, 0x40);
+ fc2580_i2c_write(0x53, 0x18);
+ fc2580_i2c_write(0x5F, 0x0F);
+ fc2580_i2c_write(0x61, 0x07);
+ fc2580_i2c_write(0x62, 0x00);
+ fc2580_i2c_write(0x63, 0x15);
+ fc2580_i2c_write(0x67, 0x03);
+ fc2580_i2c_write(0x68, 0x05);
+ fc2580_i2c_write(0x69, 0x10);
+ fc2580_i2c_write(0x6A, 0x12);
+ fc2580_i2c_write(0x6B, 0x0F);
+ fc2580_i2c_write(0x6C, 0x11);
+ fc2580_i2c_write(0x6D, 0x78);
+ fc2580_i2c_write(0x6E, 0x32);
+ fc2580_i2c_write(0x6F, 0x54);
+ /*fc2580_set_filter(7);*/ /** BW = 6.8MHz */
+ break;
+ case L_BAND:
+ data_0x02 = (data_0x02 & 0x3F) | 0x40;
+ fc2580_i2c_write(0x2B, 0x70);
+ fc2580_i2c_write(0x2C, 0x37);
+ fc2580_i2c_write(0x2D, 0xE7);
+ fc2580_i2c_write(0x44, 0x20);
+ fc2580_i2c_write(0x50, 0x40);
+ fc2580_i2c_write(0x53, 0x18);
+ fc2580_i2c_write(0x5F, 0x0F);
+ fc2580_i2c_write(0x61, 0x0F);
+ fc2580_i2c_write(0x62, 0x00);
+ fc2580_i2c_write(0x63, 0x13);
+ fc2580_i2c_write(0x67, 0x00);
+ fc2580_i2c_write(0x68, 0x02);
+ fc2580_i2c_write(0x69, 0x0F);
+ fc2580_i2c_write(0x6A, 0x11);
+ fc2580_i2c_write(0x6B, 0x0F);
+ fc2580_i2c_write(0x6C, 0x11);
+ fc2580_i2c_write(0x6D, 0xA0);
+ fc2580_i2c_write(0x6E, 0x50);
+ fc2580_i2c_write(0x6F, 0x14);
+ /*fc2580_set_filter(1);*/ /** BW = 1.53MHz */
+ break;
+ default:
+ break;
+ }
+ curr_band = band;
+ //}
+
+ /** A command about AGC clock's pre-divide ratio */
+ if( FREQ_XTAL >= 28000 )
+ fc2580_i2c_write( 0x4B, 0x22 );
+
+ /** Commands about VCO Band and PLL setting. */
+ fc2580_i2c_write(0x02, data_0x02);
+ data_0x18 = ( ( r_val == 1 )? 0x00 : ( ( r_val == 2 )? 0x10 : 0x20 ) ) + (unsigned char)(k_val >> 16);
+ fc2580_i2c_write(0x18, data_0x18); /** Load 'R' value and high part of 'K' values */
+ fc2580_i2c_write(0x1A, (unsigned char)( k_val >> 8 ) ); /** Load middle part of 'K' value */
+ fc2580_i2c_write(0x1B, (unsigned char)( k_val ) ); /** Load lower part of 'K' value */
+ fc2580_i2c_write(0x1C, (unsigned char)( n_val ) ); /** Load 'N' value */
+
+ /** A command about UHF LNA Load Cap */
+ if( band == UHF_BAND )
+ fc2580_i2c_write(0x2D, ( f_lo <= (unsigned int)794000 )? 0x9F : 0x8F ); /** LNA_OUT_CAP */
+
+
+}
+
+
+/*==============================================================================
+ fc2580 filter BW setting
+
+ This function is a generic function which gets called to change Bandwidth
+
+ frequency of fc2580's channel selection filter
+
+ <input parameter>
+
+ filter_bw
+ 1 : 1.53MHz(TDMB)
+ 5 : 5MHz
+ 6 : 6MHz
+ 7 : 6.8MHz
+ 8 : 7.8MHz
+ 9 : 8.0MHz
+
+==============================================================================*/
+void fc2580_set_filter(unsigned char filter_bw)
+{
+ unsigned char cal_mon, i;
+
+ if(filter_bw == 1)
+ {
+ fc2580_i2c_write(0x36, 0x1C);
+ fc2580_i2c_write(0x37, (unsigned char) (((unsigned long) (4151 * FREQ_XTAL)) / 1000000));
+ fc2580_i2c_write(0x39, 0x00);
+ fc2580_i2c_write(0x2E, 0x09);
+ }
+ if(filter_bw == 5)
+ {
+ fc2580_i2c_write(0x36, 0x18);
+ fc2580_i2c_write(0x37, (unsigned char) (((unsigned long) (5320 * FREQ_XTAL)) / 1000000));
+ fc2580_i2c_write(0x39, 0x00);
+ fc2580_i2c_write(0x2E, 0x09);
+ }
+ else if(filter_bw == 6)
+ {
+ fc2580_i2c_write(0x36, 0x18);
+ fc2580_i2c_write(0x37, (unsigned char) (((unsigned long) (4400 * FREQ_XTAL)) / 1000000));
+ fc2580_i2c_write(0x39, 0x00);
+ fc2580_i2c_write(0x2E, 0x09);
+ }
+ else if(filter_bw == 7)
+ {
+ fc2580_i2c_write(0x36, 0x18);
+ fc2580_i2c_write(0x37, (unsigned char) (((unsigned long) (3910 * FREQ_XTAL)) / 1000000));
+ fc2580_i2c_write(0x39, 0x80);
+ fc2580_i2c_write(0x2E, 0x09);
+ }
+ else if(filter_bw == 8)
+ {
+ fc2580_i2c_write(0x36, 0x18);
+ fc2580_i2c_write(0x37, (unsigned char) (((unsigned long) (3300 * FREQ_XTAL)) / 1000000));
+ fc2580_i2c_write(0x39, 0x80);
+ fc2580_i2c_write(0x2E, 0x09);
+ }
+ else if(filter_bw == 9)
+ {
+ fc2580_i2c_write(0x36, 0x18);
+ fc2580_i2c_write(0x37, (unsigned char) (((unsigned long) (2450 * FREQ_XTAL)) / 1000000));
+ fc2580_i2c_write(0x39, 0x80);
+ fc2580_i2c_write(0x2E, 0x09);
+ }
+
+ for(i=0; i<5; i++)
+ {
+ wait_msec(5); /** wait 5ms */
+ cal_mon = fc2580_i2c_read(0x2F);
+ if( (cal_mon & 0xC0) != 0xC0)
+ {
+ fc2580_i2c_write(0x2E, 0x01);
+ fc2580_i2c_write(0x2E, 0x09);
+ }
+ else
+ break;
+ }
+
+ fc2580_i2c_write(0x2E, 0x01);
+}
+
+/*==============================================================================
+ fc2580 RSSI function
+
+ This function is a generic function which returns fc2580's
+
+ current RSSI value.
+
+ <input parameter>
+ none
+
+ <return value>
+ int
+ rssi : estimated input power.
+
+==============================================================================*/
+int fc2580_get_rssi(void) {
+
+ int s_lna = fc2580_i2c_read( 0x71 );
+ int s_rfvga = fc2580_i2c_read( 0x72 );
+ int s_cfs = fc2580_i2c_read( 0x73 );
+ int s_ifvga = fc2580_i2c_read( 0x74 );
+ int ofs_lna, ofs_rfvga, ofs_csf, ofs_ifvga, rssi;
+
+ ofs_lna =
+ (curr_band==UHF_BAND)?
+ (s_lna==0)? 0 :
+ (s_lna==1)? -6 :
+ (s_lna==2)? -17 :
+ (s_lna==3)? -22 : -30 :
+ (curr_band==VHF_BAND)?
+ (s_lna==0)? 0 :
+ (s_lna==1)? -6 :
+ (s_lna==2)? -19 :
+ (s_lna==3)? -24 : -32 :
+ (curr_band==L_BAND)?
+ (s_lna==0)? 0 :
+ (s_lna==1)? -6 :
+ (s_lna==2)? -11 :
+ (s_lna==3)? -16 : -34 :
+ 0; /** NO_BAND */
+ ofs_rfvga = -s_rfvga+((s_rfvga>=11)? 1 : 0) + ((s_rfvga>=18)? 1 : 0);
+ ofs_csf = -6*s_cfs;
+ ofs_ifvga = s_ifvga/4;
+
+ return rssi = ofs_lna+ofs_rfvga+ofs_csf+ofs_ifvga+OFS_RSSI;
+
+} \ No newline at end of file
diff --git a/api/fc2580.h b/api/fc2580.h
new file mode 100644
index 0000000..fc3d687
--- /dev/null
+++ b/api/fc2580.h
@@ -0,0 +1,191 @@
+#include "standard.h"
+
+#define FREQ_XTAL 16384 //16.384MHz
+#define BORDER_FREQ 2600000 //2.6GHz : The border frequency which determines whether Low VCO or High VCO is used
+#define USE_EXT_CLK 0 //0 : Use internal XTAL Oscillator / 1 : Use External Clock input
+#define OFS_RSSI 57
+
+extern Demodulator* FCI_FC2580_demodulator;
+extern Byte FCI_FC2580_chip;
+
+typedef enum {
+ UHF_BAND,
+ L_BAND,
+ VHF_BAND,
+ NO_BAND
+} fc2580_band_type;
+
+/*==============================================================================
+ i2c command write EXTERNAL FUNCTION
+
+ This function is a generic function which write a byte into fc2580's
+ specific address.
+
+ <input parameter>
+
+ slave_id
+ i2c id of slave chip
+ type : byte
+
+ addr
+ memory address of slave chip
+ type : byte
+
+ data
+ target data
+ type : byte
+
+==============================================================================*/
+extern void i2c_write( unsigned char slave_id, unsigned char addr, unsigned char data );
+
+/*==============================================================================
+ i2c command write EXTERNAL FUNCTION
+
+ This function is a generic function which gets called to read data from
+ slave chip's target memory address.
+
+ <input parameter>
+
+ slave_id
+ i2c id of slave chip
+ type : byte
+
+ addr
+ memory address of slave chip
+ type : byte
+
+ <return value>
+ data
+ a byte of data read out of target address 'addr' of slave chip
+ type : byte
+
+==============================================================================*/
+extern unsigned char i2c_read( unsigned char slave_id, unsigned char addr );
+
+/*==============================================================================
+ milisecond delay function EXTERNAL FUNCTION
+
+ This function is a generic function which write a byte into fc2580's
+ specific address.
+
+ <input parameter>
+
+ a
+ length of wanted delay in milisecond unit
+
+==============================================================================*/
+extern void wait_msec (unsigned long msec);
+
+
+
+/*==============================================================================
+ fc2580 i2c command write
+
+ This function is a generic function which write a byte into fc2580's
+ specific address.
+
+ <input parameter>
+
+ addr
+ fc2580's memory address
+ type : byte
+
+ data
+ target data
+ type : byte
+
+==============================================================================*/
+void fc2580_i2c_write( unsigned char addr, unsigned char data );
+
+/*==============================================================================
+ fc2580 i2c data read
+
+ This function is a generic function which gets called to read data from
+ fc2580's target memory address.
+
+ <input parameter>
+
+ addr
+ fc2580's memory address
+ type : byte
+
+
+ <return value>
+ data
+ a byte of data read out of target address 'addr'
+ type : byte
+
+==============================================================================*/
+unsigned char fc2580_i2c_read( unsigned char addr );
+
+/*==============================================================================
+ fc2580 initial setting
+
+ This function is a generic function which gets called to initialize
+
+ fc2580 in DVB-H mode or L-Band TDMB mode
+
+ <input parameter>
+
+ ifagc_mode
+ type : integer
+ 1 : Internal AGC
+ 2 : Voltage Control Mode
+
+==============================================================================*/
+void fc2580_set_init( int ifagc_mode );
+
+/*==============================================================================
+ fc2580 frequency setting
+
+ This function is a generic function which gets called to change LO Frequency
+
+ of fc2580 in DVB-H mode or L-Band TDMB mode
+
+ <input parameter>
+
+ f_lo
+ Value of target LO Frequency in 'kHz' unit
+ ex) 2.6GHz = 2600000
+
+==============================================================================*/
+void fc2580_set_freq( unsigned int f_lo );
+
+
+/*==============================================================================
+ fc2580 filter BW setting
+
+ This function is a generic function which gets called to change Bandwidth
+
+ frequency of fc2580's channel selection filter
+
+ <input parameter>
+
+ filter_bw
+ 1 : 1.53MHz(TDMB)
+ 5 : 5MHz
+ 6 : 6MHz
+ 7 : 7MHz
+ 8 : 7.8MHz
+ 9 : 8MHz
+
+==============================================================================*/
+void fc2580_set_filter(unsigned char filter_bw);
+
+/*==============================================================================
+ fc2580 RSSI function
+
+ This function is a generic function which returns fc2580's
+
+ current RSSI value.
+
+ <input parameter>
+ none
+
+ <return value>
+ int
+ rssi : estimated input power.
+
+==============================================================================*/
+int fc2580_get_rssi(void);
+
diff --git a/api/firmware.h b/api/firmware.h
new file mode 100644
index 0000000..a4201d3
--- /dev/null
+++ b/api/firmware.h
@@ -0,0 +1,10713 @@
+// This file is automatically generated. Do not edit.
+#ifndef __FIRMWARE_H__
+#define __FIRMWARE_H__
+
+#define FW_RELEASE_VERSION "v8_8_63_0"
+
+#define DVB_LL_VERSION1 11
+#define DVB_LL_VERSION2 22
+#define DVB_LL_VERSION3 12
+#define DVB_LL_VERSION4 0
+
+#define DVB_OFDM_VERSION1 5
+#define DVB_OFDM_VERSION2 66
+#define DVB_OFDM_VERSION3 12
+#define DVB_OFDM_VERSION4 0
+
+#include "type.h"
+
+#define Firmware_FORMAT_VER1 2
+#define Firmware_FORMAT_VER2 0
+
+
+#define Firmware_CODELENGTH 0x000148D1
+#define Firmware_SEGMENTLENGTH 0x0000000C
+#define Firmware_PARTITIONLENGTH 0x00000002
+
+
+static Byte Firmware_codes[] = {
+ 0x01,0x41,0x00,0x00,0x03,0xFB,0xBE,0x02,
+ 0x48,0x00,
+
+ 0x01,0x48,0x00,0x3B,0x1D,0xE1,0x7C,0x75,
+ 0x81,0x16,0x02,0x48,0x41,0x02,0x59,0x93,
+ 0xE4,0x93,0xA3,0xF8,0xE4,0x93,0xA3,0x40,
+ 0x03,0xF6,0x80,0x01,0xF2,0x08,0xDF,0xF4,
+ 0x80,0x29,0xE4,0x93,0xA3,0xF8,0x54,0x07,
+ 0x24,0x0C,0xC8,0xC3,0x33,0xC4,0x54,0x0F,
+ 0x44,0x20,0xC8,0x83,0x40,0x04,0xF4,0x56,
+ 0x80,0x01,0x46,0xF6,0xDF,0xE4,0x80,0x0B,
+ 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
+ 0x90,0x79,0xF2,0xE4,0x7E,0x01,0x93,0x60,
+ 0xBC,0xA3,0xFF,0x54,0x3F,0x30,0xE5,0x09,
+ 0x54,0x1F,0xFE,0xE4,0x93,0xA3,0x60,0x01,
+ 0x0E,0xCF,0x54,0xC0,0x25,0xE0,0x60,0xA8,
+ 0x40,0xB8,0xE4,0x93,0xA3,0xFA,0xE4,0x93,
+ 0xA3,0xF8,0xE4,0x93,0xA3,0xC8,0xC5,0x82,
+ 0xC8,0xCA,0xC5,0x83,0xCA,0xF0,0xA3,0xC8,
+ 0xC5,0x82,0xC8,0xCA,0xC5,0x83,0xCA,0xDF,
+ 0xE9,0xDE,0xE7,0x80,0xBE,0xAA,0x86,0x53,
+ 0x86,0xFE,0x8E,0x85,0x8F,0x84,0x8C,0x83,
+ 0x8D,0x82,0x0B,0x80,0x0A,0xE0,0xA3,0x63,
+ 0x86,0x01,0xF0,0xA3,0x63,0x86,0x01,0xDB,
+ 0xF4,0x8A,0x86,0x22,0xC2,0xAF,0x90,0x41,
+ 0x03,0x74,0x02,0xF0,0xA3,0x74,0x49,0xF0,
+ 0xA3,0x74,0x61,0xF0,0x90,0x41,0x0B,0x74,
+ 0x02,0xF0,0xA3,0x74,0x49,0xF0,0xA3,0x74,
+ 0x69,0xF0,0x90,0x41,0x13,0x74,0x02,0xF0,
+ 0xA3,0x74,0x49,0xF0,0xA3,0x74,0x71,0xF0,
+ 0x90,0x41,0x1B,0x74,0x02,0xF0,0xA3,0x74,
+ 0x49,0xF0,0xA3,0x74,0x79,0xF0,0x90,0x41,
+ 0x23,0x74,0x02,0xF0,0xA3,0x74,0x49,0xF0,
+ 0xA3,0x74,0x81,0xF0,0x90,0x41,0x2B,0x74,
+ 0x02,0xF0,0xA3,0x74,0x49,0xF0,0xA3,0x74,
+ 0x89,0xF0,0x90,0x41,0x33,0x74,0x02,0xF0,
+ 0xA3,0x74,0x49,0xF0,0xA3,0x74,0x91,0xF0,
+ 0x90,0x41,0x3B,0x74,0x02,0xF0,0xA3,0x74,
+ 0x49,0xF0,0xA3,0x74,0x99,0xF0,0x90,0x41,
+ 0x43,0x74,0x02,0xF0,0xA3,0x74,0x49,0xF0,
+ 0xA3,0x74,0xA1,0xF0,0x90,0x41,0x4B,0x74,
+ 0x02,0xF0,0xA3,0x74,0x49,0xF0,0xA3,0x74,
+ 0xA9,0xF0,0x90,0x41,0x53,0x74,0x02,0xF0,
+ 0xA3,0x74,0x49,0xF0,0xA3,0x74,0xB1,0xF0,
+ 0x90,0x41,0x5B,0x74,0x02,0xF0,0xA3,0x74,
+ 0x49,0xF0,0xA3,0x74,0xB9,0xF0,0x90,0x41,
+ 0x63,0x74,0x02,0xF0,0xA3,0x74,0x49,0xF0,
+ 0xA3,0x74,0xC1,0xF0,0xD2,0xAF,0x22,0x22,
+ 0xC0,0xE0,0x75,0xE0,0x00,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x02,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x04,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x06,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x08,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x0A,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x0C,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x0E,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x10,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x12,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x14,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x16,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x18,0x02,0x49,0xC9,
+ 0xC0,0xD0,0x75,0xD0,0x00,0xC0,0x86,0x75,
+ 0x86,0x00,0xC0,0x83,0xC0,0x82,0xC0,0x85,
+ 0xC0,0x84,0xC0,0xF0,0xC0,0x00,0xC0,0x01,
+ 0xC0,0x02,0xC0,0x03,0xC0,0x04,0xC0,0x05,
+ 0xC0,0x06,0xC0,0x07,0x90,0x81,0xBF,0xF9,
+ 0x93,0xFA,0xE9,0x04,0x93,0xF9,0x12,0x80,
+ 0xD7,0xD0,0x07,0xD0,0x06,0xD0,0x05,0xD0,
+ 0x04,0xD0,0x03,0xD0,0x02,0xD0,0x01,0xD0,
+ 0x00,0xD0,0xF0,0xD0,0x84,0xD0,0x85,0xD0,
+ 0x82,0xD0,0x83,0xD0,0x86,0xD0,0xD0,0xD0,
+ 0xE0,0x32,0xC0,0x07,0x85,0x06,0x07,0x12,
+ 0x4A,0x37,0xD0,0xE0,0xC0,0xE0,0xC4,0x54,
+ 0x0F,0xFF,0x12,0x4A,0x57,0xD0,0xE0,0x54,
+ 0x0F,0xFF,0x12,0x4A,0x68,0x22,0xEF,0x70,
+ 0x02,0x80,0x0B,0x80,0x00,0xC0,0x07,0x12,
+ 0x4A,0x48,0xD0,0x07,0xDF,0xF7,0x22,0x7F,
+ 0x0C,0x12,0x4A,0x57,0x7F,0x04,0x90,0x4A,
+ 0x48,0xE0,0xDF,0xFD,0xE0,0x22,0xEF,0x70,
+ 0x02,0x80,0x0B,0x80,0x00,0x90,0x4A,0x5E,
+ 0xE0,0xE0,0xE0,0x04,0xDF,0xF7,0x22,0x90,
+ 0x4A,0x70,0xEF,0xF4,0x54,0x0F,0x73,0x04,
+ 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,
+ 0x04,0x04,0x04,0x04,0x04,0x04,0x22,0x43,
+ 0x8E,0x08,0x53,0x89,0xF0,0x43,0x89,0x01,
+ 0x22,0xAD,0x07,0xAC,0x06,0xC2,0x8C,0xC2,
+ 0x8D,0xEC,0xF4,0xF5,0x8C,0xED,0xF4,0xF5,
+ 0x8A,0xD2,0x8C,0x22,0x90,0x41,0x82,0x74,
+ 0xAF,0xF0,0xA3,0xEF,0xF0,0xA3,0x74,0x22,
+ 0xF0,0x7A,0x41,0x79,0x82,0x12,0x80,0xD7,
+ 0x22,0x90,0x41,0x82,0x74,0x8F,0xF0,0xA3,
+ 0xEF,0xF0,0xA3,0x74,0x22,0xF0,0xAF,0x05,
+ 0x7C,0x41,0x7D,0x82,0x90,0x41,0x82,0x12,
+ 0x80,0xDB,0x22,0x8F,0x82,0x8E,0x83,0xE4,
+ 0xFF,0xFE,0xED,0x4C,0x60,0x0F,0xED,0x60,
+ 0x01,0x0C,0xE0,0xA3,0x2F,0xFF,0xE4,0x3E,
+ 0xFE,0xDD,0xF7,0xDC,0xF5,0x22,0xE4,0x90,
+ 0x42,0x9A,0xF0,0x12,0x64,0x94,0x90,0x42,
+ 0xEB,0xEF,0xF0,0x60,0x25,0xE0,0xB4,0x05,
+ 0x03,0x7F,0x05,0x22,0x12,0x66,0x07,0x90,
+ 0x42,0xEB,0xEF,0xF0,0x60,0x14,0xE0,0xB4,
+ 0x05,0x03,0x7F,0x05,0x22,0x12,0x67,0x65,
+ 0x90,0x42,0xEB,0xEF,0xF0,0x60,0x03,0xE0,
+ 0xFF,0x22,0x7F,0x00,0x22,0x90,0x41,0x8C,
+ 0xE0,0xD3,0x94,0x00,0x40,0x06,0x90,0x42,
+ 0x99,0xEF,0xF0,0x22,0x90,0x41,0x8B,0xE0,
+ 0xFE,0xEF,0xC3,0x9E,0x50,0x06,0x90,0x42,
+ 0x99,0xEF,0xF0,0x22,0x90,0x42,0x99,0xEE,
+ 0xF0,0x22,0x90,0x42,0xEC,0xEB,0xF0,0xA3,
+ 0xEA,0xF0,0xA3,0xE9,0xF0,0xE4,0xFF,0x90,
+ 0x42,0x99,0xE0,0xD3,0x94,0x00,0x40,0x04,
+ 0x7E,0x01,0x80,0x02,0x7E,0x00,0xEF,0xC3,
+ 0x94,0x40,0x50,0x04,0x7D,0x01,0x80,0x02,
+ 0x7D,0x00,0xED,0x5E,0x60,0x33,0x90,0x42,
+ 0xEC,0xE0,0xFB,0xA3,0xE0,0xFA,0xA3,0xE0,
+ 0xF9,0x90,0x42,0x9A,0xE0,0xF5,0x82,0x75,
+ 0x83,0x00,0x12,0x80,0x30,0xFE,0x74,0x00,
+ 0x2F,0xF5,0x82,0xE4,0x34,0xDE,0xF5,0x83,
+ 0xEE,0xF0,0x0F,0x90,0x42,0x99,0xE0,0x14,
+ 0xF0,0x90,0x42,0x9A,0xE0,0x04,0xF0,0x80,
+ 0xAE,0x90,0xDD,0x85,0xEF,0xF0,0x22,0x90,
+ 0xDD,0x13,0xE0,0x44,0x01,0xF0,0x90,0xDD,
+ 0x1B,0x74,0x04,0xF0,0xE4,0xFF,0x74,0x00,
+ 0x2F,0xF5,0x82,0xE4,0x34,0xDF,0xF5,0x83,
+ 0xE0,0xFE,0x74,0x85,0x2F,0xF5,0x82,0xE4,
+ 0x34,0x41,0xF5,0x83,0xEE,0xF0,0x0F,0xEF,
+ 0xB4,0x08,0xE3,0x90,0xDD,0x1B,0xE0,0x20,
+ 0xE2,0xD4,0x22,0x90,0xDD,0x13,0x74,0x7B,
+ 0xF0,0x90,0xDD,0x80,0x74,0xC0,0xF0,0xA3,
+ 0x74,0x00,0xF0,0xA3,0x74,0x40,0xF0,0xA3,
+ 0x74,0x80,0xF0,0x12,0x6A,0x2D,0xE4,0x90,
+ 0x41,0x93,0xF0,0x90,0x41,0x94,0xF0,0x90,
+ 0xDD,0x14,0x74,0x0B,0xF0,0x90,0xDD,0x17,
+ 0x74,0x06,0xF0,0x90,0x43,0x28,0xE0,0xB4,
+ 0x01,0x07,0x90,0xDD,0x17,0xE0,0x44,0x01,
+ 0xF0,0x90,0xDD,0x15,0x74,0x0B,0xF0,0x90,
+ 0xDD,0x0C,0x74,0x80,0xF0,0x90,0xDD,0x8E,
+ 0xE4,0xF0,0xA3,0x74,0x03,0xF0,0x90,0xDD,
+ 0x0E,0xE4,0xF0,0xA3,0x04,0xF0,0x90,0xDD,
+ 0x13,0xE0,0x54,0x7F,0xF0,0x90,0xDD,0x20,
+ 0xE0,0x54,0xFC,0x44,0x03,0xF0,0x90,0xDD,
+ 0x11,0x74,0x8F,0xF0,0x90,0x43,0x0D,0xE0,
+ 0x64,0x01,0x70,0x27,0xC3,0x74,0x34,0x94,
+ 0xBA,0x90,0x41,0xB3,0xF0,0x90,0x42,0x9D,
+ 0xF0,0x90,0x41,0xB5,0x74,0x02,0xF0,0x90,
+ 0x42,0x9F,0xF0,0x90,0xDD,0x15,0xE0,0x44,
+ 0x10,0xF0,0x90,0xDD,0x11,0xE0,0x44,0x10,
+ 0xF0,0x80,0x17,0xC3,0x74,0x1B,0x94,0xBA,
+ 0x90,0x41,0xB3,0xF0,0x90,0x42,0x9D,0xF0,
+ 0x90,0x41,0xB5,0x74,0x01,0xF0,0x90,0x42,
+ 0x9F,0xF0,0x90,0x45,0x61,0xE0,0x60,0x03,
+ 0x12,0x50,0xE8,0x90,0xDD,0x0C,0x74,0x80,
+ 0xF0,0x90,0xDD,0x89,0x74,0x03,0xF0,0x90,
+ 0xDD,0x88,0x74,0xDB,0xF0,0x90,0xDD,0x13,
+ 0xE0,0x54,0xDF,0xF0,0x90,0xF4,0x1A,0xE0,
+ 0x54,0xFE,0x44,0x01,0xF0,0x22,0x90,0x42,
+ 0x11,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x42,
+ 0x0A,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x42,
+ 0x03,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x41,
+ 0xFC,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x41,
+ 0xE5,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x41,
+ 0xDE,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x41,
+ 0xD7,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x41,
+ 0xD0,0xEE,0xF0,0xA3,0xEF,0xF0,0x22,0x90,
+ 0x42,0x18,0xEE,0xF0,0xA3,0xEF,0xF0,0x22,
+ 0xE4,0x90,0x42,0xF2,0xF0,0x90,0x42,0xE9,
+ 0xE0,0x60,0x0D,0x90,0xDD,0xA8,0xE0,0x30,
+ 0xE0,0x06,0x12,0x4F,0xEB,0x02,0x4F,0x38,
+ 0x90,0xDF,0x82,0xE0,0x20,0xE1,0x06,0x12,
+ 0x4F,0x45,0x02,0x4F,0x38,0x90,0x42,0xE9,
+ 0xE0,0x70,0x09,0x90,0x42,0xF3,0xE0,0x04,
+ 0xF0,0x02,0x4F,0x38,0x90,0xDD,0xA8,0xE0,
+ 0x30,0xE0,0x06,0x12,0x4F,0xEB,0x02,0x4F,
+ 0x38,0x90,0xDD,0x1B,0xE0,0x30,0xE1,0x12,
+ 0x90,0xDD,0x1D,0x74,0xFF,0xF0,0x90,0xDD,
+ 0x1B,0x74,0x02,0xF0,0x12,0x4F,0x94,0x02,
+ 0x4F,0x38,0x90,0x43,0x28,0xE0,0x64,0x01,
+ 0x70,0x29,0x90,0xDD,0x1B,0xE0,0x30,0xE0,
+ 0x22,0x74,0x01,0xF0,0xE4,0x90,0x42,0xF1,
+ 0xF0,0x90,0xDD,0x1B,0xE0,0x30,0xE0,0x0D,
+ 0x74,0x01,0xF0,0x90,0x42,0xF1,0xE0,0x04,
+ 0xF0,0xE0,0xB4,0x02,0xEC,0x12,0x4F,0xB3,
+ 0x02,0x4F,0x38,0x90,0xDD,0x1B,0xE0,0x30,
+ 0xE2,0x28,0x90,0xDD,0x14,0xE0,0x44,0x01,
+ 0xF0,0x12,0x4B,0xA8,0x12,0x56,0x20,0x90,
+ 0x42,0xF0,0xEF,0xF0,0x70,0x03,0x02,0x4F,
+ 0x38,0x90,0xDD,0x14,0xE0,0x54,0xFE,0xF0,
+ 0x90,0xDD,0x12,0xE0,0x44,0x01,0xF0,0x02,
+ 0x4F,0x38,0x90,0xDD,0x19,0xE0,0x30,0xE0,
+ 0x42,0x90,0xDD,0x14,0xE0,0x44,0x01,0xF0,
+ 0x90,0xDD,0x19,0x74,0x01,0xF0,0x90,0xDD,
+ 0x13,0xE0,0x44,0x01,0xF0,0x90,0x42,0xE7,
+ 0xE0,0x64,0x01,0x60,0x03,0x02,0x4F,0x38,
+ 0x90,0xDD,0x00,0xC0,0x83,0xC0,0x82,0xE0,
+ 0xFF,0x90,0x41,0x8A,0xE0,0xFE,0x33,0x33,
+ 0x33,0x54,0xF8,0xFE,0xEF,0x4E,0xD0,0x82,
+ 0xD0,0x83,0xF0,0xE4,0x90,0x42,0xE7,0xF0,
+ 0x02,0x4F,0x38,0x90,0xDD,0x18,0xE0,0x30,
+ 0xE0,0x31,0x90,0xDD,0x14,0xE0,0x30,0xE0,
+ 0x2A,0x90,0xDD,0x14,0xE0,0x54,0xFE,0xF0,
+ 0x12,0x56,0x3B,0x90,0x42,0xF0,0xEF,0xF0,
+ 0x60,0x09,0x90,0xDD,0x12,0xE0,0x44,0x01,
+ 0xF0,0x80,0x07,0x90,0xDD,0x13,0xE0,0x54,
+ 0xFE,0xF0,0x90,0xDD,0x18,0x74,0x01,0xF0,
+ 0x02,0x4F,0x38,0x90,0xDD,0x19,0xE0,0x30,
+ 0xE1,0x10,0x90,0xDD,0x19,0x74,0x02,0xF0,
+ 0x90,0xDD,0x13,0xE0,0x44,0x02,0xF0,0x02,
+ 0x4F,0x38,0x90,0xDD,0x18,0xE0,0x30,0xE1,
+ 0x16,0x90,0xDD,0x84,0x74,0x40,0xF0,0x90,
+ 0xDD,0x13,0xE0,0x54,0xFD,0xF0,0x90,0xDD,
+ 0x18,0x74,0x02,0xF0,0x02,0x4F,0x38,0x90,
+ 0xDD,0x19,0xE0,0x30,0xE4,0x6A,0x90,0xDD,
+ 0x19,0x74,0x10,0xF0,0x90,0x45,0xA6,0xE0,
+ 0x64,0x01,0x60,0x03,0x02,0x4F,0x38,0x90,
+ 0x45,0xB9,0xE0,0xFF,0xB4,0x01,0x31,0xE4,
+ 0x90,0x42,0xF1,0xF0,0x90,0x42,0xF1,0xE0,
+ 0xFE,0xC3,0x94,0x08,0x50,0x14,0x74,0x80,
+ 0x2E,0xF5,0x82,0xE4,0x34,0xDE,0xF5,0x83,
+ 0xE4,0xF0,0x90,0x42,0xF1,0xE0,0x04,0xF0,
+ 0x80,0xE2,0x90,0xDD,0x87,0x74,0x08,0xF0,
+ 0x90,0x45,0xB9,0x74,0x02,0xF0,0x80,0x6F,
+ 0xEF,0x64,0x02,0x70,0x6A,0x90,0x45,0xB9,
+ 0xF0,0x90,0xDD,0x13,0xE0,0x44,0x10,0xF0,
+ 0x90,0x41,0x81,0xE0,0xFF,0x64,0x01,0x60,
+ 0x56,0x90,0x45,0xA6,0xEF,0xF0,0x80,0x4F,
+ 0x90,0xDD,0x19,0xE0,0x30,0xE3,0x18,0x90,
+ 0xDD,0x13,0xE0,0x44,0x08,0xF0,0x90,0xDD,
+ 0x19,0x74,0x08,0xF0,0x12,0x74,0xD3,0x90,
+ 0x42,0xE8,0x74,0x01,0xF0,0x80,0x30,0x90,
+ 0xDD,0x14,0xE0,0x54,0x08,0xFF,0x13,0x13,
+ 0x13,0x54,0x1F,0x60,0x1C,0x90,0xDD,0x18,
+ 0xE0,0x30,0xE3,0x15,0x90,0xDD,0x84,0x74,
+ 0x40,0xF0,0x90,0xDD,0x13,0xE0,0x54,0xF7,
+ 0xF0,0x90,0xDD,0x18,0x74,0x08,0xF0,0x80,
+ 0x06,0x90,0x42,0xF4,0xE0,0x04,0xF0,0xC2,
+ 0xDC,0x22,0x12,0x4D,0x09,0x22,0xC2,0xDB,
+ 0x12,0x4D,0x09,0x22,0x90,0x43,0x0D,0xE0,
+ 0x64,0x01,0x60,0x05,0xE0,0x64,0x05,0x70,
+ 0x41,0x90,0x43,0x29,0xE0,0x70,0x05,0x12,
+ 0x6E,0x5D,0x80,0x1B,0x90,0x43,0x29,0xE0,
+ 0xB4,0x01,0x05,0x12,0x6F,0xFC,0x80,0x0F,
+ 0x90,0x43,0x29,0xE0,0x64,0x02,0x60,0x04,
+ 0xE0,0xB4,0xFF,0x03,0x12,0x6B,0x19,0x90,
+ 0x45,0xA6,0xE0,0xB4,0x01,0x14,0x90,0x45,
+ 0xB9,0xE0,0xB4,0x01,0x0D,0x90,0xDD,0x13,
+ 0xE0,0x54,0xEF,0xF0,0x90,0xDD,0x87,0x74,
+ 0x08,0xF0,0x22,0x12,0x4B,0xDC,0x90,0xDD,
+ 0x01,0xE0,0x54,0x04,0x90,0x42,0xEF,0xF0,
+ 0x90,0x45,0x61,0xE0,0x60,0x03,0x12,0x50,
+ 0xE8,0x12,0x50,0xE7,0xE4,0x90,0x45,0xB9,
+ 0xF0,0x22,0x90,0xD8,0x06,0xE0,0x54,0xFE,
+ 0x44,0x01,0xF0,0x22,0x12,0x4B,0xDC,0x90,
+ 0x43,0x06,0xE0,0x30,0xE6,0x09,0x90,0xDD,
+ 0xA7,0xE0,0x44,0x01,0xF0,0x80,0x07,0x90,
+ 0xDD,0x00,0xE0,0x44,0x80,0xF0,0xD2,0xAF,
+ 0xD2,0xDD,0x22,0x90,0x43,0x07,0xE0,0x30,
+ 0xE0,0x07,0x90,0xDD,0xA8,0xE0,0x30,0xE2,
+ 0xF9,0x22,0x90,0xDD,0xA7,0xE0,0x30,0xE1,
+ 0x06,0xE0,0x54,0xFD,0xF0,0x80,0x07,0x90,
+ 0xDD,0xA7,0xE0,0x44,0x02,0xF0,0x90,0xDD,
+ 0xA8,0xE0,0x30,0xE1,0x08,0x90,0xDD,0x00,
+ 0xE0,0x44,0x80,0xF0,0x22,0x90,0xDD,0x00,
+ 0xE0,0x54,0x7F,0xF0,0x22,0xAE,0x07,0x90,
+ 0x42,0xEA,0xE0,0xFD,0xB4,0x01,0x03,0x7F,
+ 0x03,0x22,0xAF,0x06,0xE4,0x90,0x45,0x66,
+ 0xF0,0x7A,0x42,0x7B,0xF5,0xA3,0x74,0x42,
+ 0xF0,0xA3,0x74,0xF5,0xF0,0xA3,0x74,0x01,
+ 0xF0,0xA3,0xE4,0xF0,0x7B,0x01,0x12,0x54,
+ 0x23,0xEF,0x60,0x03,0x7F,0x04,0x22,0x7E,
+ 0x42,0x7F,0xF7,0x90,0x42,0xF7,0xE0,0xFD,
+ 0x7C,0x00,0x12,0x4A,0xCC,0x90,0x42,0xF5,
+ 0xE0,0x6E,0x70,0x03,0xA3,0xE0,0x6F,0x60,
+ 0x03,0x7F,0x05,0x22,0x7F,0x00,0x22,0x90,
+ 0x42,0xFD,0xE0,0xFF,0xA3,0xE0,0x90,0x41,
+ 0x9D,0xCF,0xF0,0xA3,0xEF,0xF0,0x90,0x42,
+ 0xFF,0xE0,0xFF,0xA3,0xE0,0x90,0x41,0x9F,
+ 0xCF,0xF0,0xA3,0xEF,0xF0,0x90,0x43,0x01,
+ 0xE0,0xFF,0xA3,0xE0,0x90,0x41,0xA1,0xCF,
+ 0xF0,0xA3,0xEF,0xF0,0x90,0x43,0x03,0xE0,
+ 0x90,0x41,0xA3,0xF0,0x90,0x43,0x04,0xE0,
+ 0x90,0x41,0xA4,0xF0,0x90,0x43,0x05,0xE0,
+ 0x90,0x41,0xA5,0xF0,0x90,0x43,0x0A,0xE0,
+ 0x90,0x42,0x33,0xF0,0x90,0x43,0x08,0xE0,
+ 0x90,0x41,0xB9,0xF0,0x90,0x43,0x06,0xE0,
+ 0xFF,0x90,0x42,0xA2,0xF0,0x90,0x41,0xB8,
+ 0xF0,0x90,0x43,0x09,0xE0,0x90,0x42,0xA3,
+ 0xF0,0x90,0x43,0x0B,0xE0,0x90,0xF1,0x03,
+ 0xF0,0x90,0x43,0x4B,0xE0,0xF4,0x60,0x05,
+ 0xE0,0x90,0xDD,0x93,0xF0,0x22,0x22,0x90,
+ 0x42,0xF9,0xE0,0x70,0x03,0x02,0x53,0x64,
+ 0x90,0x42,0xF9,0xE0,0x75,0xF0,0x08,0xA4,
+ 0x90,0x45,0x5A,0xF0,0xE0,0x24,0xF6,0xF5,
+ 0x82,0xE4,0x34,0x42,0xF5,0x83,0xE0,0x90,
+ 0x45,0x5D,0xF0,0x90,0x45,0x5D,0xE0,0x70,
+ 0x03,0x02,0x53,0x64,0x90,0x45,0x5A,0xE0,
+ 0xFE,0x24,0x02,0xA3,0xF0,0x74,0xF5,0x2E,
+ 0xF5,0x82,0xE4,0x34,0x42,0xF5,0x83,0xE0,
+ 0x90,0x45,0x5C,0xF0,0xE0,0x54,0xC0,0xFF,
+ 0x70,0x06,0x90,0x42,0xEF,0xE0,0x70,0x16,
+ 0xBF,0x40,0x06,0x90,0x42,0xEF,0xE0,0x60,
+ 0x0D,0x90,0x45,0x5C,0xE0,0x54,0xC0,0x64,
+ 0xC0,0x60,0x03,0x02,0x52,0xEC,0x90,0x45,
+ 0x5C,0xE0,0x54,0x03,0x14,0x60,0x54,0x14,
+ 0x70,0x03,0x02,0x52,0x01,0x14,0x70,0x03,
+ 0x02,0x52,0x7F,0x24,0x03,0x60,0x03,0x02,
+ 0x52,0xE9,0xE4,0x90,0x45,0x5E,0xF0,0x90,
+ 0x45,0x5D,0xE0,0xFF,0xA3,0xE0,0xC3,0x9F,
+ 0x40,0x03,0x02,0x52,0xEC,0x90,0x45,0x5B,
+ 0xE0,0xFE,0x24,0xF5,0xF5,0x82,0xE4,0x34,
+ 0x42,0xF5,0x83,0xE0,0xFF,0x74,0xF6,0x2E,
+ 0xF5,0x82,0xE4,0x34,0x42,0xF5,0x83,0xE0,
+ 0xFD,0x12,0x4A,0xB2,0x90,0x45,0x5B,0xE0,
+ 0x24,0x02,0xF0,0x90,0x45,0x5E,0xE0,0x04,
+ 0xF0,0x80,0xC4,0xE4,0x90,0x45,0x5E,0xF0,
+ 0x90,0x45,0x5D,0xE0,0xFF,0xA3,0xE0,0xC3,
+ 0x9F,0x40,0x03,0x02,0x52,0xEC,0x90,0x45,
+ 0x5B,0xE0,0xFF,0x24,0xF7,0xF5,0x82,0xE4,
+ 0x34,0x42,0xF5,0x83,0xE0,0xFD,0x74,0xF5,
+ 0x2F,0xF5,0x82,0xE4,0x34,0x42,0xF5,0x83,
+ 0xE0,0xFE,0x90,0x45,0x5B,0xE0,0x24,0xF6,
+ 0xF5,0x82,0xE4,0x34,0x42,0xF5,0x83,0xE0,
+ 0xFB,0xEE,0xEB,0xF5,0x82,0x8E,0x83,0xED,
+ 0xF0,0x90,0x45,0x5B,0xE0,0x24,0x03,0xF0,
+ 0x90,0x45,0x5E,0xE0,0x04,0xF0,0x80,0xB0,
+ 0x90,0x45,0x5B,0xE0,0xFD,0x24,0xF5,0xF5,
+ 0x82,0xE4,0x34,0x42,0xF5,0x83,0xE0,0xFE,
+ 0x74,0xF6,0x2D,0xF5,0x82,0xE4,0x34,0x42,
+ 0xF5,0x83,0xE0,0xFD,0xEE,0xED,0xFF,0x90,
+ 0x45,0x5F,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,
+ 0x45,0x5B,0xE0,0x24,0x02,0xF0,0xE4,0x90,
+ 0x45,0x5E,0xF0,0x90,0x45,0x5D,0xE0,0xFF,
+ 0xA3,0xE0,0xC3,0x9F,0x40,0x03,0x02,0x52,
+ 0xEC,0x90,0x45,0x5B,0xE0,0xFF,0x24,0xF6,
+ 0xF5,0x82,0xE4,0x34,0x42,0xF5,0x83,0xE0,
+ 0xFE,0x74,0xF5,0x2F,0xF5,0x82,0xE4,0x34,
+ 0x42,0xF5,0x83,0xE0,0xFD,0x90,0x45,0x60,
+ 0xE0,0x2D,0xFD,0x90,0x45,0x5F,0xE0,0x34,
+ 0x00,0x8D,0x82,0xF5,0x83,0xEE,0xF0,0x90,
+ 0x45,0x5B,0xE0,0x24,0x02,0xF0,0x90,0x45,
+ 0x5E,0xE0,0x04,0xF0,0x80,0xB5,0x90,0x45,
+ 0x5B,0xE0,0xFD,0x24,0xF5,0xF5,0x82,0xE4,
+ 0x34,0x42,0xF5,0x83,0xE0,0xFE,0x74,0xF6,
+ 0x2D,0xF5,0x82,0xE4,0x34,0x42,0xF5,0x83,
+ 0xE0,0xFD,0xEE,0xED,0xFF,0x90,0x45,0x5F,
+ 0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x45,0x5B,
+ 0xE0,0x24,0x02,0xF0,0xE4,0x90,0x45,0x5E,
+ 0xF0,0x90,0x45,0x5D,0xE0,0xFF,0xA3,0xE0,
+ 0xC3,0x9F,0x50,0x2F,0x90,0x45,0x5B,0xE0,
+ 0xFF,0x04,0xF0,0x74,0xF5,0x2F,0xF5,0x82,
+ 0xE4,0x34,0x42,0xF5,0x83,0xE0,0xFF,0x90,
+ 0x45,0x5F,0xE4,0x75,0xF0,0x01,0x12,0x80,
+ 0x85,0x85,0xF0,0x82,0xF5,0x83,0xEF,0xF0,
+ 0x90,0x45,0x5E,0xE0,0x04,0xF0,0x80,0xC9,
+ 0x12,0x7B,0x63,0x90,0x45,0x5A,0xE0,0x24,
+ 0x02,0xF0,0x90,0x45,0x5C,0xE0,0x54,0x03,
+ 0x14,0x60,0x19,0x14,0x60,0x27,0x14,0x60,
+ 0x38,0x24,0x03,0x70,0x46,0x90,0x45,0x5D,
+ 0xE0,0x25,0xE0,0xFF,0x90,0x45,0x5A,0xE0,
+ 0x2F,0xF0,0x80,0x3A,0x90,0x45,0x5D,0xE0,
+ 0x75,0xF0,0x03,0xA4,0xFF,0x90,0x45,0x5A,
+ 0xE0,0x2F,0xF0,0x80,0x29,0x90,0x45,0x5A,
+ 0xE0,0x24,0x02,0xFF,0x90,0x45,0x5D,0xE0,
+ 0x25,0xE0,0x2F,0x90,0x45,0x5A,0xF0,0x80,
+ 0x15,0x90,0x45,0x5A,0xE0,0x24,0x02,0xFF,
+ 0x90,0x45,0x5D,0xE0,0x2F,0x90,0x45,0x5A,
+ 0xF0,0x80,0x03,0x12,0x7B,0x63,0x90,0x45,
+ 0x5A,0xE0,0x24,0xF6,0xF5,0x82,0xE4,0x34,
+ 0x42,0xF5,0x83,0xE0,0x90,0x45,0x5D,0xF0,
+ 0x02,0x51,0x0C,0x22,0x90,0x42,0xE9,0xE0,
+ 0x60,0x08,0x90,0x45,0x62,0x74,0x01,0xF0,
+ 0x80,0x06,0x90,0x45,0x62,0x74,0x03,0xF0,
+ 0x12,0x4A,0x80,0x12,0x54,0x18,0x90,0xF1,
+ 0x03,0xE0,0x90,0x45,0x88,0xF0,0x90,0xF6,
+ 0xB5,0xE0,0x54,0xF7,0x44,0x08,0xF0,0xE0,
+ 0x54,0xF7,0xF0,0x90,0x45,0x88,0xE0,0x90,
+ 0xF1,0x03,0xF0,0x90,0x45,0x62,0xE0,0xFF,
+ 0x12,0x80,0x23,0x90,0x42,0xEA,0xEF,0xF0,
+ 0x90,0x42,0xE9,0xE0,0x60,0x03,0x12,0x6A,
+ 0x3A,0x90,0x45,0x62,0xE0,0xFF,0x12,0x50,
+ 0x16,0xEF,0x70,0x04,0x7F,0x01,0x80,0x02,
+ 0x7F,0x00,0x90,0x45,0x61,0xEF,0xF0,0x60,
+ 0x1C,0x90,0x43,0x4C,0xE0,0x60,0x16,0xE0,
+ 0x90,0xF6,0x32,0xF0,0x90,0x43,0x4C,0xE0,
+ 0x90,0xF6,0x33,0xF0,0x90,0xF6,0x31,0xE0,
+ 0x54,0xFE,0x44,0x01,0xF0,0x90,0x45,0x61,
+ 0xE0,0x60,0x07,0x12,0x50,0x68,0x12,0x50,
+ 0xE8,0x22,0x90,0x42,0xE9,0xE0,0x60,0x1E,
+ 0xE4,0x90,0x43,0x26,0xF0,0x90,0x43,0x28,
+ 0xF0,0x90,0x43,0x07,0xF0,0x90,0x43,0x0D,
+ 0x74,0x05,0xF0,0xE4,0x90,0x43,0x29,0xF0,
+ 0x90,0x43,0x06,0x74,0x80,0xF0,0x22,0x80,
+ 0x02,0x80,0xFE,0x90,0xF1,0x03,0x74,0x25,
+ 0xF0,0x22,0x90,0x45,0x63,0xEF,0xF0,0xA3,
+ 0xED,0xF0,0xA3,0xEB,0xF0,0xA3,0xE0,0xFE,
+ 0xFD,0x7C,0x00,0x90,0x45,0x69,0xE0,0xFA,
+ 0xA3,0xE0,0xFB,0x2D,0xFD,0xEC,0x3A,0xFC,
+ 0xD3,0xED,0x94,0x00,0xEC,0x94,0x01,0x40,
+ 0x03,0x7F,0x01,0x22,0xE4,0xB5,0x03,0x08,
+ 0xEA,0xB4,0x01,0x04,0x7F,0x08,0x80,0x0B,
+ 0xEE,0x54,0x07,0xFF,0xC3,0x74,0x08,0x9F,
+ 0x54,0x07,0xFF,0x90,0x45,0x6B,0xEF,0xF0,
+ 0xC3,0xEB,0x9F,0xEA,0x94,0x00,0x50,0x06,
+ 0x90,0x45,0x6A,0xE0,0xA3,0xF0,0x90,0x45,
+ 0x6A,0xE0,0xFF,0xA3,0xE0,0xFE,0xC3,0xEF,
+ 0x9E,0x54,0x07,0xFE,0x90,0x45,0x6D,0xF0,
+ 0x90,0x45,0x6B,0xE0,0xFD,0xC3,0xEF,0x9D,
+ 0xC3,0x9E,0xA3,0xF0,0x90,0x45,0x6B,0xE0,
+ 0x90,0x45,0x6E,0xF0,0xA3,0x74,0x08,0xF0,
+ 0x90,0x45,0x6D,0xE0,0x90,0x45,0x70,0xF0,
+ 0xE4,0xA3,0xF0,0x90,0x45,0x71,0xE0,0xFB,
+ 0x24,0x6B,0xF5,0x82,0xE4,0x34,0x45,0xF5,
+ 0x83,0xE0,0x70,0x03,0x02,0x55,0xC9,0x90,
+ 0x45,0x66,0xE0,0x90,0xF0,0x01,0xF0,0x90,
+ 0x45,0x65,0xE0,0x70,0x4E,0x7E,0xF0,0x7F,
+ 0x02,0x90,0x45,0x67,0xE0,0xFC,0xA3,0xE0,
+ 0xFD,0x74,0x6E,0x2B,0xF5,0x82,0xE4,0x34,
+ 0x45,0xF5,0x83,0xE0,0xFB,0x12,0x48,0x86,
+ 0x90,0x45,0x63,0xE0,0xFF,0xA3,0xE0,0xFD,
+ 0x90,0x45,0x71,0xE0,0x24,0x6E,0xF5,0x82,
+ 0xE4,0x34,0x45,0xF5,0x83,0xE0,0x04,0xFB,
+ 0x90,0x46,0x04,0x74,0x01,0xF0,0x12,0x7E,
+ 0xD9,0xEF,0x60,0x03,0x7F,0x02,0x22,0x7F,
+ 0x35,0x7E,0x82,0x12,0x4A,0x8A,0x20,0x8D,
+ 0x60,0x80,0xFB,0x90,0x45,0x63,0xE0,0xFF,
+ 0xA3,0xE0,0xFD,0x90,0x46,0x04,0x74,0x01,
+ 0xF0,0xFB,0x12,0x7E,0xD9,0xEF,0x60,0x03,
+ 0x7F,0x02,0x22,0x90,0x45,0x63,0xE0,0xFF,
+ 0xA3,0xE0,0x44,0x01,0xFD,0x90,0x45,0x71,
+ 0xE0,0x24,0x6E,0xF5,0x82,0xE4,0x34,0x45,
+ 0xF5,0x83,0xE0,0xFB,0x90,0x46,0x04,0x74,
+ 0x01,0xF0,0x12,0x7E,0xD9,0xEF,0x60,0x03,
+ 0x7F,0x02,0x22,0x90,0x45,0x67,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x7C,0xF0,0x7D,0x00,0x90,
+ 0x45,0x71,0xE0,0x24,0x6E,0xF5,0x82,0xE4,
+ 0x34,0x45,0xF5,0x83,0xE0,0xFB,0x12,0x48,
+ 0x86,0x90,0x45,0x71,0xE0,0xFF,0x24,0x6E,
+ 0xF5,0x82,0xE4,0x34,0x45,0xF5,0x83,0xE0,
+ 0xFE,0x90,0x45,0x66,0xE0,0x2E,0xF0,0xEE,
+ 0xFD,0x90,0x45,0x68,0xE0,0x2D,0xF0,0x90,
+ 0x45,0x67,0xE0,0x34,0x00,0xF0,0x74,0x6B,
+ 0x2F,0xF5,0x82,0xE4,0x34,0x45,0xF5,0x83,
+ 0xC0,0x83,0xC0,0x82,0xE0,0xFF,0x90,0x45,
+ 0x71,0xE0,0x24,0x6E,0xF5,0x82,0xE4,0x34,
+ 0x45,0xF5,0x83,0xE0,0xFE,0xC3,0xEF,0x9E,
+ 0xD0,0x82,0xD0,0x83,0xF0,0x02,0x54,0xAC,
+ 0x90,0x45,0x71,0xE0,0x04,0xF0,0xE0,0xC3,
+ 0x94,0x03,0x50,0x03,0x02,0x54,0xAC,0x7F,
+ 0x00,0x22,0x90,0x45,0x72,0xEF,0xF0,0xE4,
+ 0x90,0x45,0x73,0xF0,0x90,0x45,0x73,0xE0,
+ 0xFE,0xC3,0x94,0x10,0x50,0x1F,0x90,0x45,
+ 0x72,0xE0,0xFF,0xEE,0x44,0xA0,0xFD,0x90,
+ 0x46,0x04,0x74,0x01,0xF0,0xFB,0x12,0x7E,
+ 0xD9,0xEF,0x60,0x09,0x90,0x45,0x73,0xE0,
+ 0x24,0x02,0xF0,0x80,0xD7,0x90,0x45,0x73,
+ 0xE0,0xFF,0xC3,0x94,0x10,0x50,0x05,0xEF,
+ 0x44,0xA0,0xFF,0x22,0x7F,0x01,0x22,0x12,
+ 0x68,0x70,0x90,0x42,0x98,0xEF,0xF0,0x90,
+ 0x42,0x98,0xE0,0x70,0x03,0x7F,0x06,0x22,
+ 0x12,0x4A,0xE7,0xEF,0x60,0x01,0x22,0x7F,
+ 0x00,0x22,0x12,0x67,0xB7,0xEF,0x60,0x01,
+ 0x22,0x7F,0x00,0x22,0x90,0x45,0x74,0xEF,
+ 0xF0,0xA3,0xED,0xF0,0xEB,0x70,0x61,0x90,
+ 0x45,0x77,0xE0,0xFF,0xB4,0x01,0x0A,0x90,
+ 0x45,0x79,0xE0,0x90,0xF0,0x01,0xF0,0x80,
+ 0x14,0xEF,0xB4,0x02,0x10,0x90,0x45,0x78,
+ 0xE0,0x90,0xF0,0x01,0xF0,0x90,0x45,0x79,
+ 0xE0,0x90,0xF0,0x02,0xF0,0x90,0x45,0x77,
+ 0xE0,0x24,0x01,0xF5,0x82,0xE4,0x34,0xF0,
+ 0xAF,0x82,0xFE,0x90,0x45,0x7A,0xE0,0xFC,
+ 0xA3,0xE0,0xFD,0x90,0x45,0x7D,0xE0,0xFB,
+ 0x12,0x48,0x86,0x90,0x45,0x74,0xE0,0xFF,
+ 0xA3,0xE0,0xFD,0x90,0x45,0x7D,0xE0,0xFE,
+ 0x90,0x45,0x77,0xE0,0x2E,0xFB,0x90,0x46,
+ 0x04,0x74,0x01,0xF0,0x12,0x7E,0xD9,0x22,
+ 0x90,0x45,0x77,0xE0,0x70,0x22,0x90,0x45,
+ 0x74,0xE0,0xFF,0xA3,0xE0,0x44,0x01,0xFD,
+ 0x90,0x45,0x7D,0xE0,0xFB,0x90,0x46,0x04,
+ 0x74,0x01,0xF0,0x12,0x7E,0xD9,0x90,0x45,
+ 0x7E,0xEF,0xF0,0x60,0x5F,0xE0,0xFF,0x22,
+ 0x7E,0xF0,0x7F,0x01,0x90,0x45,0x77,0xE0,
+ 0xFD,0xC3,0x74,0x7A,0x9D,0xF9,0x74,0x45,
+ 0x94,0x00,0xFC,0xAD,0x01,0xE0,0xFB,0x12,
+ 0x48,0x86,0x90,0x45,0x74,0xE0,0xFF,0xA3,
+ 0xE0,0xFD,0x90,0x45,0x77,0xE0,0xFB,0x90,
+ 0x46,0x04,0x74,0x01,0xF0,0x12,0x7E,0xD9,
+ 0x90,0x45,0x7E,0xEF,0xF0,0x60,0x03,0xE0,
+ 0xFF,0x22,0x90,0x45,0x74,0xE0,0xFF,0xA3,
+ 0xE0,0x44,0x01,0xFD,0x90,0x45,0x7D,0xE0,
+ 0xFB,0x90,0x46,0x04,0x74,0x01,0xF0,0x12,
+ 0x7E,0xD9,0x90,0x45,0x7E,0xEF,0xF0,0x60,
+ 0x03,0xE0,0xFF,0x22,0x90,0x45,0x7A,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0x7C,0xF0,0x7D,0x00,
+ 0x90,0x45,0x7D,0xE0,0xFB,0x12,0x48,0x86,
+ 0x7F,0x00,0x22,0x90,0x45,0x7F,0xEE,0xF0,
+ 0xA3,0xEF,0xF0,0xA3,0xEC,0xF0,0xA3,0xED,
+ 0xF0,0x90,0x45,0x77,0x74,0x01,0xF0,0x90,
+ 0x45,0x7F,0xE0,0xFF,0xA3,0xE0,0x90,0x45,
+ 0x78,0xCF,0xF0,0xA3,0xEF,0xF0,0x90,0x45,
+ 0x81,0xE0,0xFF,0xA3,0xE0,0x90,0x45,0x7A,
+ 0xCF,0xF0,0xA3,0xEF,0xF0,0xA3,0xE4,0xF0,
+ 0xA3,0x04,0xF0,0x7D,0xC0,0x7F,0x02,0x12,
+ 0x56,0x45,0x22,0x90,0x45,0x83,0xEF,0xF0,
+ 0xA3,0xED,0xF0,0xA3,0xEB,0xF0,0x90,0x45,
+ 0x89,0x74,0x9C,0xF0,0xA3,0x74,0x40,0xF0,
+ 0xE5,0x16,0x60,0x03,0xE4,0xF5,0x16,0xE5,
+ 0x16,0x60,0x67,0x05,0x16,0x85,0x16,0x16,
+ 0x05,0x16,0x85,0x16,0x16,0x05,0x16,0x85,
+ 0x16,0x16,0x05,0x16,0x85,0x16,0x16,0x05,
+ 0x16,0x85,0x16,0x16,0x05,0x16,0x85,0x16,
+ 0x16,0x05,0x16,0x85,0x16,0x16,0x05,0x16,
+ 0x85,0x16,0x16,0x05,0x16,0x85,0x16,0x16,
+ 0x05,0x16,0x85,0x16,0x16,0x05,0x16,0x85,
+ 0x16,0x16,0x05,0x16,0x85,0x16,0x16,0x05,
+ 0x16,0x85,0x16,0x16,0x05,0x16,0x85,0x16,
+ 0x16,0x05,0x16,0x85,0x16,0x16,0x05,0x16,
+ 0x85,0x16,0x16,0x05,0x16,0x85,0x16,0x16,
+ 0x05,0x16,0x85,0x16,0x16,0x05,0x16,0x85,
+ 0x16,0x16,0x05,0x16,0x85,0x16,0x16,0x85,
+ 0x16,0x16,0x90,0x45,0x84,0xE0,0x90,0xF0,
+ 0x00,0xF0,0x90,0x83,0xED,0xE0,0xB4,0x01,
+ 0x27,0x90,0x83,0xF3,0xE0,0xFF,0x90,0x83,
+ 0xF2,0xE0,0x2F,0xFF,0xE4,0x33,0xFE,0xC3,
+ 0xEF,0x94,0x05,0xEE,0x64,0x80,0x94,0x80,
+ 0x50,0x05,0x12,0x7D,0xA1,0x80,0x09,0x90,
+ 0x45,0x87,0x74,0x05,0xF0,0x02,0x59,0x64,
+ 0x05,0x16,0x05,0x16,0x05,0x16,0x05,0x16,
+ 0x90,0xF1,0x03,0xE0,0x90,0x45,0x88,0xF0,
+ 0x90,0xF6,0xB5,0xE0,0x54,0xF7,0x44,0x08,
+ 0xF0,0xE0,0x54,0xF7,0xF0,0x90,0x45,0x83,
+ 0xE0,0xFF,0xB4,0x01,0x09,0x90,0xF1,0x04,
+ 0xE0,0x54,0xF3,0xF0,0x80,0x18,0xEF,0xB4,
+ 0x02,0x0B,0x90,0xF1,0x04,0xE0,0x54,0xF3,
+ 0x44,0x08,0xF0,0x80,0x09,0x90,0xF1,0x04,
+ 0xE0,0x54,0xF3,0x44,0x04,0xF0,0x90,0x45,
+ 0x84,0xE0,0x54,0x01,0xFF,0x90,0xF1,0x00,
+ 0xE0,0x54,0xFE,0x4F,0xF0,0x90,0x45,0x85,
+ 0xE0,0x90,0xF1,0x01,0xF0,0x12,0x7E,0x84,
+ 0x90,0x45,0x86,0xE0,0x64,0x01,0x60,0x03,
+ 0x02,0x59,0x42,0x90,0xF1,0x02,0xE0,0x20,
+ 0xE2,0x16,0xE0,0x20,0xE1,0x12,0xE0,0x20,
+ 0xE3,0x0E,0x90,0x45,0x89,0x74,0xFF,0xF5,
+ 0xF0,0x12,0x80,0x6F,0x45,0xF0,0x70,0xE3,
+ 0x90,0x45,0x89,0xE0,0x70,0x02,0xA3,0xE0,
+ 0x70,0x25,0x05,0x16,0x85,0x16,0x16,0x05,
+ 0x16,0x85,0x16,0x16,0x85,0x16,0x16,0x85,
+ 0x16,0x16,0x90,0xF6,0xB5,0xE0,0x54,0xF7,
+ 0x44,0x08,0xF0,0xE0,0x54,0xF7,0xF0,0x90,
+ 0x45,0x87,0x74,0x04,0xF0,0x80,0x49,0x90,
+ 0xF1,0x02,0xE0,0x30,0xE2,0x08,0x90,0x45,
+ 0x87,0x74,0x02,0xF0,0x80,0x3A,0x90,0x45,
+ 0x84,0xE0,0x30,0xE0,0x16,0x90,0xF1,0x02,
+ 0xE0,0x30,0xE1,0x08,0x90,0x45,0x87,0x74,
+ 0x01,0xF0,0x80,0x24,0xE4,0x90,0x45,0x87,
+ 0xF0,0x80,0x1D,0x90,0xF1,0x02,0xE0,0x30,
+ 0xE3,0x08,0x90,0x45,0x87,0x74,0x01,0xF0,
+ 0x80,0x0E,0xE4,0x90,0x45,0x87,0xF0,0x80,
+ 0x07,0xE4,0x90,0x45,0x87,0xF0,0x80,0x1B,
+ 0x90,0x45,0x84,0xE0,0x30,0xE0,0x0B,0x90,
+ 0xF1,0x02,0xE0,0x54,0xF7,0x44,0x08,0xF0,
+ 0x80,0x09,0x90,0xF1,0x02,0xE0,0x54,0xFD,
+ 0x44,0x02,0xF0,0x90,0x45,0x88,0xE0,0x90,
+ 0xF1,0x03,0xF0,0x90,0x45,0x87,0xE0,0xFF,
+ 0x22,0x90,0xF6,0x13,0xE0,0x30,0xE0,0x03,
+ 0x7F,0x03,0x22,0x90,0xF6,0xB4,0xE0,0x30,
+ 0xE0,0x03,0x7F,0x00,0x22,0x90,0xF6,0x6F,
+ 0xE0,0x30,0xE0,0x03,0x7F,0x02,0x22,0x7F,
+ 0x01,0x22,0x90,0x41,0x7F,0xE0,0x90,0x45,
+ 0x8B,0xF0,0xE0,0x54,0xF9,0xFF,0xBF,0x38,
+ 0x04,0x7F,0x01,0x80,0x02,0x7F,0x00,0xEF,
+ 0x54,0x01,0xFF,0x90,0xD8,0x1A,0xE0,0x54,
+ 0xFE,0x4F,0xF0,0x05,0x16,0x85,0x16,0x16,
+ 0x05,0x16,0x85,0x16,0x16,0x05,0x16,0x85,
+ 0x16,0x16,0x05,0x16,0x85,0x16,0x16,0x05,
+ 0x16,0x85,0x16,0x16,0x90,0xD8,0x30,0xE0,
+ 0x54,0xFE,0x44,0x01,0xF0,0xA3,0xE0,0x54,
+ 0xFE,0xF0,0xA3,0xE0,0x54,0xFE,0xF0,0x90,
+ 0xD8,0x29,0xE0,0x54,0xFE,0xF0,0x90,0xF6,
+ 0xB3,0xE0,0x54,0xFE,0x44,0x01,0xF0,0x90,
+ 0xF6,0x32,0x74,0xFF,0xF0,0xA3,0xF0,0x90,
+ 0xF6,0x31,0xE0,0x54,0xFE,0x44,0x01,0xF0,
+ 0x90,0xF6,0x13,0xE0,0x54,0x01,0x90,0x42,
+ 0xE9,0xF0,0x12,0x7E,0x06,0x12,0x59,0x72,
+ 0x90,0x45,0x8D,0xEF,0xF0,0x90,0xF6,0xA0,
+ 0x74,0x04,0xF0,0x90,0x45,0x8D,0xE0,0x90,
+ 0xF6,0xA1,0xF0,0x90,0xF6,0xDE,0xE0,0x54,
+ 0xFE,0x44,0x01,0xF0,0x90,0xF6,0xDE,0xE0,
+ 0x20,0xE0,0xF9,0x90,0xDF,0x82,0xE0,0x44,
+ 0x20,0xF0,0x90,0xDD,0x17,0xE0,0x54,0xFE,
+ 0xF0,0xC2,0xDC,0xD2,0xBC,0x12,0x48,0xA5,
+ 0xD2,0xE9,0x12,0x53,0x65,0x12,0x6A,0x52,
+ 0x90,0xF4,0x18,0xE4,0xF0,0xA3,0xE0,0x54,
+ 0xF0,0x44,0x08,0xF0,0x90,0xF4,0x1E,0xE0,
+ 0x54,0xEF,0x44,0x10,0xF0,0xD2,0xB8,0xC2,
+ 0xBA,0xD2,0xAF,0xD2,0xA8,0xD2,0xAA,0x90,
+ 0xDF,0x82,0xE0,0x30,0xE0,0x1A,0xA2,0xDD,
+ 0xE4,0x33,0x90,0x43,0xF5,0xF0,0xC2,0xDD,
+ 0x90,0xDF,0x82,0x74,0x20,0xF0,0xE4,0xF0,
+ 0x90,0x43,0xF5,0xE0,0x24,0xFF,0x92,0xDD,
+ 0x90,0x41,0x81,0xE0,0xFF,0x90,0x45,0xA6,
+ 0xE0,0x6F,0x60,0x1C,0xA2,0xDD,0xE4,0x33,
+ 0x90,0x43,0xF5,0xF0,0xC2,0xDD,0xE4,0x90,
+ 0x45,0xB9,0xF0,0x90,0x45,0xA6,0xEF,0xF0,
+ 0x90,0x43,0xF5,0xE0,0x24,0xFF,0x92,0xDD,
+ 0x12,0x79,0xFA,0x90,0x45,0x8C,0xE0,0xB4,
+ 0x07,0x05,0x12,0x7A,0x92,0x80,0xA8,0x12,
+ 0x7A,0x92,0x80,0xA3,0x22,0x22,0x22,0x90,
+ 0x45,0x8E,0xEE,0xF0,0xA3,0xEF,0xF0,0xE4,
+ 0xA3,0xF0,0xA3,0xF0,0xFC,0xEC,0xC3,0x9D,
+ 0x50,0x43,0xEC,0x30,0xE0,0x1F,0x90,0x45,
+ 0x8E,0xE0,0xFE,0xA3,0xE0,0x2C,0xF5,0x82,
+ 0xE4,0x3E,0xF5,0x83,0xE0,0xFF,0x90,0x45,
+ 0x91,0xE0,0x2F,0xF0,0x90,0x45,0x90,0xE0,
+ 0x34,0x00,0xF0,0x80,0x1D,0x90,0x45,0x8E,
+ 0xE0,0xFE,0xA3,0xE0,0x2C,0xF5,0x82,0xE4,
+ 0x3E,0xF5,0x83,0xE0,0xFE,0x90,0x45,0x91,
+ 0xE0,0x24,0x00,0xF0,0x90,0x45,0x90,0xE0,
+ 0x3E,0xF0,0x0C,0x80,0xB8,0x90,0x45,0x90,
+ 0xE0,0xFE,0xA3,0xE0,0xF4,0xFF,0xEE,0xF4,
+ 0xFE,0x22,0x90,0xF7,0x00,0xE0,0x24,0xFE,
+ 0xFD,0x7F,0x01,0x7E,0xF7,0x12,0x5A,0xD0,
+ 0x90,0xF7,0x00,0xE0,0x24,0xFF,0xF5,0x82,
+ 0xE4,0x34,0xF6,0xF5,0x83,0xEE,0xF0,0xA3,
+ 0xEF,0xF0,0x22,0x8F,0x0A,0xE5,0x0A,0x24,
+ 0x04,0x90,0xF7,0x00,0xF0,0x90,0xF7,0x03,
+ 0xE0,0x90,0xF7,0x01,0xF0,0xA3,0xE4,0xF0,
+ 0xE5,0x0A,0x24,0x05,0x90,0xF4,0x12,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0xE0,0x54,0xFC,0xF0,
+ 0x75,0x08,0xF7,0x75,0x09,0x03,0xE5,0x0A,
+ 0x60,0x3C,0xB4,0x01,0x0E,0x8D,0x82,0x8C,
+ 0x83,0xE0,0x85,0x09,0x82,0x85,0x08,0x83,
+ 0xF0,0x80,0x2B,0x8D,0x82,0x8C,0x83,0xE0,
+ 0xFF,0xA3,0xE0,0x85,0x09,0x82,0x85,0x08,
+ 0x83,0xCF,0xF0,0xA3,0xEF,0xF0,0x74,0x02,
+ 0x2D,0xFD,0xE4,0x3C,0xFC,0x74,0x02,0x25,
+ 0x09,0xF5,0x09,0xE4,0x35,0x08,0xF5,0x08,
+ 0x15,0x0A,0x15,0x0A,0x80,0xC0,0x12,0x5B,
+ 0x33,0x22,0x90,0x45,0x92,0x74,0xFE,0xF0,
+ 0x90,0xF4,0x05,0xE0,0x20,0xE5,0x03,0x02,
+ 0x64,0x8E,0xE4,0xF5,0x0C,0x90,0xF6,0xB4,
+ 0xE0,0x30,0xE0,0x1D,0x90,0xF4,0x09,0xE0,
+ 0xF4,0x60,0x16,0x90,0xF7,0x00,0xE0,0x04,
+ 0xFF,0x90,0xF4,0x09,0xE0,0xC3,0x9F,0x50,
+ 0x08,0x90,0xF4,0x05,0xE0,0x44,0x20,0xF0,
+ 0x22,0x90,0xF6,0xB4,0xE0,0x30,0xE0,0x05,
+ 0x90,0xF4,0x09,0xE4,0xF0,0x90,0xF6,0xB4,
+ 0xE0,0x20,0xE0,0x44,0x90,0xF6,0x6F,0xE0,
+ 0x20,0xE0,0x3D,0x90,0xF6,0x04,0xE0,0x54,
+ 0xF0,0x60,0x35,0x90,0xF6,0x03,0xE0,0x04,
+ 0xF0,0x90,0xF4,0x05,0x74,0x20,0xF0,0x90,
+ 0x45,0xA5,0xE0,0x04,0xF0,0x70,0x06,0x90,
+ 0x45,0xA4,0xE0,0x04,0xF0,0x90,0xF6,0x04,
+ 0xE0,0x30,0xE1,0xF9,0x90,0xF6,0x04,0xE4,
+ 0xF0,0xE0,0x44,0x01,0xF0,0xE0,0x54,0xFE,
+ 0xF0,0x90,0xF6,0x03,0xE0,0x14,0xF0,0x22,
+ 0x90,0xF7,0x01,0xE0,0x54,0x70,0x60,0x04,
+ 0x12,0x7B,0x67,0x22,0x90,0xF7,0x03,0xE0,
+ 0x90,0x45,0x97,0xF0,0x90,0xF7,0x00,0xE0,
+ 0x64,0x03,0x70,0x2C,0xA3,0xE0,0x64,0x02,
+ 0x70,0x26,0x90,0xF7,0x00,0x04,0xF0,0x90,
+ 0xF7,0x02,0xE0,0xFE,0xA3,0xE0,0xF5,0x82,
+ 0x8E,0x83,0xE0,0x90,0xF7,0x01,0xF0,0x90,
+ 0xF4,0x12,0x74,0x02,0xF0,0xA3,0xE4,0xF0,
+ 0xA3,0xE0,0x54,0xFC,0xF0,0x02,0x63,0xEF,
+ 0x90,0xF7,0x00,0xE0,0xB4,0x04,0x1E,0xA3,
+ 0xE0,0xB4,0x03,0x19,0x90,0xF7,0x04,0xE0,
+ 0xFF,0x90,0xF7,0x02,0xE0,0xFC,0xA3,0xE0,
+ 0xF5,0x82,0x8C,0x83,0xEF,0xF0,0x90,0xF4,
+ 0x05,0x74,0x20,0xF0,0x22,0x90,0xF7,0x00,
+ 0xE0,0xB4,0x04,0x0D,0xA3,0xE0,0xB4,0x04,
+ 0x08,0x90,0x45,0x93,0x74,0x01,0xF0,0x80,
+ 0x12,0x90,0xF7,0x00,0xE0,0x64,0x05,0x70,
+ 0x75,0xA3,0xE0,0x64,0x05,0x70,0x6F,0x90,
+ 0x45,0x93,0xF0,0x90,0xF7,0x02,0xE0,0xFD,
+ 0x90,0x45,0x93,0xE0,0xFB,0x90,0xF7,0x03,
+ 0xE0,0x90,0x45,0x77,0xF0,0x90,0xF7,0x04,
+ 0xE0,0xFF,0xA3,0xE0,0x90,0x45,0x78,0xCF,
+ 0xF0,0xA3,0xEF,0xF0,0xEB,0x60,0x06,0x7E,
+ 0xF7,0x7F,0x01,0x80,0x04,0x7E,0xF7,0x7F,
+ 0x06,0x90,0x45,0x7A,0xEE,0xF0,0xA3,0xEF,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x04,0xF0,0x7F,
+ 0x02,0x12,0x56,0x45,0x90,0x45,0x95,0xEF,
+ 0xF0,0x90,0x45,0x93,0xE0,0x70,0x07,0x90,
+ 0xF4,0x05,0x74,0x20,0xF0,0x22,0x90,0xF7,
+ 0x00,0x74,0x01,0xF0,0x90,0x45,0x95,0xE0,
+ 0x70,0x03,0x02,0x5C,0x88,0x90,0xF7,0x01,
+ 0x74,0xFF,0xF0,0x02,0x5C,0x88,0x90,0x45,
+ 0x92,0x74,0xFF,0xF0,0x85,0x16,0x16,0x85,
+ 0x16,0x16,0x90,0xF7,0x00,0xE0,0xF5,0x0B,
+ 0x24,0xFE,0xFD,0x7F,0x01,0x7E,0xF7,0x12,
+ 0x5A,0xD0,0x74,0xFF,0x25,0x0B,0xF5,0x82,
+ 0xE4,0x34,0xF6,0xF5,0x83,0xE0,0xFC,0xA3,
+ 0xE0,0x6F,0x70,0x02,0xEC,0x6E,0x60,0x03,
+ 0x02,0x63,0xEC,0x90,0x45,0x9D,0x74,0x01,
+ 0xF0,0x90,0xF7,0x01,0xE0,0xFE,0xA3,0xE0,
+ 0xFF,0xEE,0x60,0x03,0x02,0x63,0xE6,0xEF,
+ 0x12,0x80,0xB1,0x60,0x4F,0x00,0x5D,0xD0,
+ 0x01,0x5E,0xF5,0x02,0x5E,0xEE,0x03,0x5F,
+ 0xA8,0x04,0x5F,0xA1,0x05,0x60,0x67,0x06,
+ 0x5E,0x77,0x18,0x5E,0x30,0x22,0x61,0xE5,
+ 0x23,0x63,0xDB,0x25,0x62,0xA5,0x29,0x62,
+ 0x1A,0x2A,0x62,0x31,0x2B,0x60,0x67,0x30,
+ 0x60,0xEA,0x32,0x00,0x00,0x63,0xE6,0x90,
+ 0xF6,0xB4,0xE0,0x54,0x08,0xF5,0x0C,0x60,
+ 0x04,0xE0,0x54,0xF7,0xF0,0x90,0xF7,0x04,
+ 0xE0,0xF5,0x0B,0x90,0xF7,0x08,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x80,0x00,0x12,0x7B,0x64,
+ 0xEF,0x70,0x2B,0xE5,0x0B,0x60,0x27,0x15,
+ 0x0B,0x74,0x0A,0x25,0x0B,0xF5,0x82,0xE4,
+ 0x34,0xF7,0xF5,0x83,0xE0,0xFF,0xE5,0x0B,
+ 0xFD,0x7C,0x00,0x90,0xF7,0x08,0xE0,0xFA,
+ 0xA3,0xE0,0x2D,0xFD,0xEC,0x3A,0x8D,0x82,
+ 0xF5,0x83,0xEF,0xF0,0x80,0xD5,0xE5,0x0C,
+ 0x60,0x07,0x90,0xF6,0xB4,0xE0,0x44,0x08,
+ 0xF0,0xE4,0xF5,0x0C,0x02,0x63,0xEF,0x90,
+ 0xF4,0x12,0x74,0x09,0xF0,0xA3,0xE4,0xF0,
+ 0xA3,0xE0,0x54,0xFC,0xF0,0x90,0xF7,0x00,
+ 0x74,0x08,0xF0,0x90,0xF7,0x03,0xE0,0x90,
+ 0xF7,0x01,0xF0,0xA3,0xE4,0xF0,0x90,0x83,
+ 0xE9,0xE0,0x90,0xF7,0x03,0xF0,0x90,0x83,
+ 0xEA,0xE0,0x90,0xF7,0x04,0xF0,0x90,0x83,
+ 0xEB,0xE0,0x90,0xF7,0x05,0xF0,0x90,0x83,
+ 0xEC,0xE0,0x90,0xF7,0x06,0xF0,0xE4,0x90,
+ 0x45,0x92,0xF0,0x02,0x63,0xEF,0x90,0xF7,
+ 0x00,0x74,0x08,0xF0,0x90,0xF7,0x03,0xE0,
+ 0x90,0xF7,0x01,0xF0,0x90,0x45,0xB9,0xE0,
+ 0x60,0x40,0xE4,0x90,0x45,0xB9,0xF0,0x90,
+ 0xF7,0x02,0xF0,0x90,0x45,0xB8,0x04,0xF0,
+ 0x90,0x45,0xBA,0xE0,0xFF,0x90,0x45,0x9F,
+ 0xF0,0x90,0xDE,0x80,0xE0,0x90,0xF7,0x03,
+ 0xF0,0x90,0xDE,0x81,0xE0,0x90,0xF7,0x04,
+ 0xF0,0x90,0xDE,0x82,0xE0,0x90,0xF7,0x05,
+ 0xF0,0x90,0xDE,0x83,0xE0,0x90,0xF7,0x06,
+ 0xF0,0x90,0x45,0x9F,0xE0,0xB5,0x07,0xC2,
+ 0x80,0x06,0x90,0xF7,0x02,0x74,0x01,0xF0,
+ 0x90,0xF7,0x00,0xE0,0x04,0x90,0xF4,0x12,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0xE0,0x54,0xFC,
+ 0xF0,0xE4,0x90,0x45,0xB8,0xF0,0x90,0x45,
+ 0x92,0xF0,0x02,0x63,0xEF,0xE4,0x90,0x45,
+ 0x93,0xF0,0x80,0x06,0x90,0x45,0x93,0x74,
+ 0x01,0xF0,0x90,0x45,0x94,0x74,0x02,0xF0,
+ 0x90,0x45,0x93,0xE0,0x60,0x07,0x90,0xF7,
+ 0x04,0xE0,0xFF,0x80,0x02,0x7F,0x00,0xEF,
+ 0x24,0x04,0x90,0x45,0x96,0xF0,0x90,0xF7,
+ 0x05,0xE0,0xB4,0x01,0x08,0x90,0x42,0xEA,
+ 0xE0,0xFF,0xFD,0x80,0x06,0x90,0xF7,0x05,
+ 0xE0,0xFF,0xFD,0x90,0x45,0x93,0xE0,0xFB,
+ 0x90,0xF7,0x06,0xE0,0x90,0x45,0x77,0xF0,
+ 0x90,0xF7,0x07,0xE0,0xFF,0xA3,0xE0,0x90,
+ 0x45,0x78,0xCF,0xF0,0xA3,0xEF,0xF0,0xEB,
+ 0x60,0x06,0x7E,0xF7,0x7F,0x03,0x80,0x04,
+ 0x7E,0xF7,0x7F,0x09,0x90,0x45,0x7A,0xEE,
+ 0xF0,0xA3,0xEF,0xF0,0x90,0xF7,0x04,0xE0,
+ 0xFF,0x90,0x45,0x7C,0xE4,0xF0,0xA3,0xEF,
+ 0xF0,0x7F,0x02,0x12,0x56,0x45,0x90,0x45,
+ 0x95,0xEF,0xF0,0xA3,0xE0,0xFF,0x90,0xF7,
+ 0x00,0xF0,0x90,0x45,0x97,0xE0,0x90,0xF7,
+ 0x01,0xF0,0x90,0x45,0x95,0xE0,0x90,0xF7,
+ 0x02,0xF0,0xEF,0x04,0x90,0xF4,0x12,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0xE0,0x54,0xFC,0xF0,
+ 0xE4,0x90,0x45,0x92,0xF0,0x02,0x63,0xEF,
+ 0xE4,0x90,0x45,0x93,0xF0,0x80,0x06,0x90,
+ 0x45,0x93,0x74,0x01,0xF0,0x90,0x42,0xE9,
+ 0xE0,0x60,0x04,0x7F,0x01,0x80,0x02,0x7F,
+ 0x03,0x90,0x45,0x94,0xEF,0xF0,0x90,0x45,
+ 0x93,0xE0,0xFB,0x60,0x07,0x90,0xF7,0x04,
+ 0xE0,0xFF,0x80,0x02,0x7F,0x00,0xEF,0x24,
+ 0x04,0x90,0x45,0x96,0xF0,0x90,0xF7,0x05,
+ 0xE0,0xB4,0x01,0x08,0x90,0x42,0xEA,0xE0,
+ 0xFF,0xFD,0x80,0x06,0x90,0xF7,0x05,0xE0,
+ 0xFF,0xFD,0x90,0xF7,0x08,0xE0,0x90,0x45,
+ 0x66,0xF0,0xEB,0x60,0x06,0x7E,0xF7,0x7F,
+ 0x03,0x80,0x04,0x7E,0xF7,0x7F,0x09,0x90,
+ 0x45,0x67,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,
+ 0xF7,0x04,0xE0,0xFF,0x90,0x45,0x69,0xE4,
+ 0xF0,0xA3,0xEF,0xF0,0x90,0x45,0x94,0xE0,
+ 0xFF,0x12,0x54,0x23,0x90,0x45,0x95,0xEF,
+ 0xF0,0xA3,0xE0,0xFF,0x90,0xF7,0x00,0xF0,
+ 0x90,0x45,0x97,0xE0,0x90,0xF7,0x01,0xF0,
+ 0x90,0x45,0x95,0xE0,0x90,0xF7,0x02,0xF0,
+ 0xEF,0x04,0x90,0xF4,0x12,0xF0,0xA3,0xE4,
+ 0xF0,0xA3,0xE0,0x54,0xFC,0xF0,0xE4,0x90,
+ 0x45,0x92,0xF0,0x02,0x63,0xEF,0x90,0xF7,
+ 0x04,0xE0,0xFF,0x90,0xF7,0x08,0xE0,0xFC,
+ 0xA3,0xE0,0xFD,0x12,0x5B,0x54,0xE4,0x90,
+ 0x45,0x92,0xF0,0x02,0x63,0xEF,0xC2,0x8C,
+ 0xC2,0x8D,0xE4,0xF5,0x8A,0xF5,0x8C,0xE5,
+ 0x89,0x54,0xF0,0x44,0x01,0xF5,0x89,0xD2,
+ 0x8C,0xE4,0x90,0x45,0xA0,0xF0,0x90,0xF4,
+ 0x04,0xE0,0x54,0x04,0xFF,0x13,0x13,0x54,
+ 0x3F,0x60,0x1F,0xE0,0x54,0xFB,0x44,0x04,
+ 0xF0,0xA3,0x74,0x20,0xF0,0x90,0xF4,0x14,
+ 0xE0,0x54,0x7F,0xF0,0x90,0xF4,0x11,0xE0,
+ 0x54,0xFC,0x44,0x02,0xF0,0xC2,0x8C,0xC2,
+ 0x8D,0x22,0x30,0x8D,0xD1,0xC2,0x8C,0xC2,
+ 0x8D,0x90,0x45,0xA0,0xE0,0x04,0xF0,0xE0,
+ 0xD3,0x94,0x01,0x40,0x28,0x90,0xF4,0x14,
+ 0xE0,0x54,0x7F,0x44,0x80,0xF0,0xE0,0x54,
+ 0xFC,0xF0,0x90,0xF4,0x13,0x74,0x08,0xF0,
+ 0x90,0xF4,0x12,0xE4,0xF0,0x90,0xF4,0x05,
+ 0x74,0x20,0xF0,0x90,0xF4,0x11,0xE0,0x54,
+ 0xFC,0x44,0x01,0xF0,0x22,0xD2,0x8C,0x80,
+ 0x95,0x90,0xF7,0x0A,0xE0,0xFF,0x90,0x45,
+ 0x9D,0xF0,0x90,0x45,0xA1,0xF0,0x90,0xF4,
+ 0x14,0xE0,0x30,0xE7,0x1F,0x90,0xF7,0x04,
+ 0xE0,0x54,0x03,0xFF,0x90,0xF4,0x14,0xE0,
+ 0x54,0xFC,0x4F,0xF0,0x90,0xF7,0x05,0xE0,
+ 0x90,0xF4,0x13,0xF0,0x90,0xF7,0x06,0xE0,
+ 0x90,0xF4,0x12,0xF0,0x90,0xF4,0x05,0x74,
+ 0x20,0xF0,0x90,0xF4,0x11,0xE0,0x54,0x03,
+ 0x60,0x08,0x90,0x45,0xA2,0xE0,0x64,0x01,
+ 0x60,0x1B,0x90,0xF7,0x07,0xE0,0xB4,0xF0,
+ 0x0B,0x90,0xF4,0x11,0xE0,0x54,0xFC,0x44,
+ 0x02,0xF0,0x80,0x09,0x90,0xF4,0x11,0xE0,
+ 0x54,0xFC,0x44,0x01,0xF0,0xE4,0x90,0x45,
+ 0xA2,0xF0,0x90,0x45,0xA1,0xE0,0xB4,0x01,
+ 0x0A,0x90,0xF4,0x04,0xE0,0x54,0xFB,0x44,
+ 0x04,0xF0,0x22,0x90,0xF4,0x05,0xE0,0x20,
+ 0xE5,0x09,0x90,0xF4,0x15,0xE0,0xC3,0x94,
+ 0x05,0x40,0xF0,0x90,0xF4,0x04,0xE0,0x54,
+ 0xFB,0x44,0x04,0xF0,0xA3,0xE0,0x30,0xE5,
+ 0x07,0x90,0x45,0xA2,0x74,0x01,0xF0,0x22,
+ 0x90,0x45,0x9D,0xE0,0x14,0xF0,0x70,0x03,
+ 0x02,0x64,0x8E,0x90,0xF4,0x15,0xE0,0x70,
+ 0xFA,0xA3,0xE0,0x70,0xF6,0xA3,0xE0,0x54,
+ 0x03,0x70,0xF0,0x90,0xF4,0x04,0xE0,0x54,
+ 0x04,0xFF,0x13,0x13,0x54,0x3F,0x60,0x0C,
+ 0x90,0x45,0xA3,0xE0,0xC3,0x94,0xFF,0x50,
+ 0x03,0xE0,0x04,0xF0,0x90,0xF4,0x05,0xE0,
+ 0x20,0xE5,0x0D,0x90,0xF4,0x04,0xE0,0x54,
+ 0x04,0xFF,0x13,0x13,0x54,0x3F,0x60,0xEC,
+ 0x90,0xF4,0x05,0xE0,0x20,0xE5,0x03,0x02,
+ 0x61,0x23,0x90,0xF4,0x04,0xE0,0x54,0xFB,
+ 0x44,0x04,0xF0,0x22,0xD2,0x89,0x90,0xF6,
+ 0xB3,0xE0,0x54,0xFE,0xF0,0x90,0xF6,0xDE,
+ 0xE0,0x54,0xFE,0x44,0x01,0xF0,0x90,0xF6,
+ 0xDE,0xE0,0x20,0xE0,0xF9,0x90,0x42,0xE9,
+ 0xE0,0x60,0x07,0x90,0xDD,0x00,0xE0,0x54,
+ 0x7F,0xF0,0x90,0xF4,0x05,0x74,0x20,0xF0,
+ 0x90,0xF6,0x2F,0xE0,0x54,0xFE,0x44,0x01,
+ 0xF0,0x90,0x45,0x93,0x74,0x01,0xF0,0x90,
+ 0xF7,0x06,0xE0,0x44,0x01,0xF0,0x90,0xF7,
+ 0x03,0xE0,0x90,0xF7,0x01,0xF0,0x80,0x1D,
+ 0xE4,0x90,0x45,0x93,0xF0,0x90,0xF7,0x03,
+ 0xE0,0x90,0xF7,0x01,0xF0,0x7E,0xF0,0x7F,
+ 0x01,0x90,0xF7,0x04,0xE0,0xFB,0x7D,0x07,
+ 0x7C,0xF7,0x12,0x48,0x86,0x90,0xF7,0x04,
+ 0xE0,0xF5,0x0B,0xA3,0xE0,0xFF,0xA3,0xE0,
+ 0xFD,0x90,0x46,0x04,0x74,0x01,0xF0,0xAB,
+ 0x0B,0x12,0x7E,0xD9,0x8F,0x0C,0x90,0xF7,
+ 0x02,0xEF,0xF0,0x90,0x45,0x93,0xE0,0x64,
+ 0x01,0x60,0x03,0x02,0x63,0xEF,0x7C,0xF0,
+ 0x7D,0x00,0x90,0xF7,0x04,0xE0,0xFB,0x7F,
+ 0x03,0x7E,0xF7,0x12,0x48,0x86,0xE4,0x90,
+ 0x45,0x92,0xF0,0xE5,0x0B,0x24,0x04,0x90,
+ 0xF7,0x00,0xF0,0xE0,0x04,0x90,0xF4,0x12,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0xE0,0x54,0xFC,
+ 0xF0,0x02,0x63,0xEF,0x90,0x45,0x9B,0x74,
+ 0xF7,0xF0,0xA3,0x74,0x08,0xF0,0x90,0xF7,
+ 0x04,0xE0,0x24,0xFE,0x60,0x10,0x14,0x60,
+ 0x7F,0x24,0x02,0x60,0x03,0x02,0x63,0xCD,
+ 0x75,0x0C,0x01,0x02,0x63,0xD0,0x90,0xF7,
+ 0x07,0xE0,0x75,0xF0,0x02,0xA4,0x24,0x08,
+ 0xFE,0xE5,0xF0,0x34,0xF7,0x90,0x45,0x99,
+ 0xF0,0xA3,0xCE,0xF0,0xE4,0x90,0x45,0x98,
+ 0xF0,0x90,0xF7,0x07,0xE0,0xFF,0x90,0x45,
+ 0x98,0xE0,0xC3,0x9F,0x50,0x44,0xA3,0xE0,
+ 0xFE,0xA3,0xE0,0xF5,0x82,0x8E,0x83,0xE0,
+ 0xFF,0x90,0x45,0x9B,0xE0,0xFC,0xA3,0xE0,
+ 0xF5,0x82,0x8C,0x83,0xE0,0xFC,0xA3,0xE0,
+ 0xF5,0x82,0x8C,0x83,0xEF,0xF0,0x90,0x45,
+ 0x98,0xE0,0x04,0xF0,0x90,0x45,0x9A,0xE0,
+ 0x04,0xF0,0x70,0x06,0x90,0x45,0x99,0xE0,
+ 0x04,0xF0,0x90,0x45,0x9C,0xE0,0x24,0x02,
+ 0xF0,0x90,0x45,0x9B,0xE0,0x34,0x00,0xF0,
+ 0x80,0xAF,0xE4,0xF5,0x0C,0x02,0x63,0xD0,
+ 0x90,0xF7,0x07,0xE0,0x75,0xF0,0x03,0xA4,
+ 0x24,0x08,0xFE,0xE5,0xF0,0x34,0xF7,0x90,
+ 0x45,0x99,0xF0,0xA3,0xCE,0xF0,0x90,0xF7,
+ 0x07,0xE0,0x75,0xF0,0x03,0xA4,0x24,0x08,
+ 0x90,0xF6,0x20,0xF0,0xE4,0x90,0x45,0x98,
+ 0xF0,0x90,0xF7,0x07,0xE0,0xFF,0x90,0x45,
+ 0x98,0xE0,0xC3,0x9F,0x50,0x59,0x90,0x45,
+ 0x9B,0xE0,0xFE,0xA3,0xE0,0xFF,0x24,0x02,
+ 0xFD,0xE4,0x3E,0x8D,0x82,0xF5,0x83,0xE0,
+ 0xFD,0x90,0x45,0x9E,0xF0,0xFB,0x8F,0x82,
+ 0x8E,0x83,0xE0,0xFE,0xA3,0xE0,0xFF,0x90,
+ 0x45,0x99,0xE0,0xFC,0xA3,0xE0,0xFD,0x12,
+ 0x48,0x86,0x90,0x45,0x9E,0xE0,0xFF,0x90,
+ 0x45,0x9A,0xE0,0x2F,0xF0,0x90,0x45,0x99,
+ 0xE0,0x34,0x00,0xF0,0x90,0x45,0x98,0xE0,
+ 0x04,0xF0,0x90,0x45,0x9B,0xE0,0xFE,0xA3,
+ 0xE0,0x24,0x03,0xFF,0xE4,0x3E,0x90,0x45,
+ 0x9B,0xF0,0xA3,0xEF,0xF0,0x80,0x9A,0xE4,
+ 0xF5,0x0C,0x80,0x03,0x12,0x7B,0x63,0x90,
+ 0x45,0x92,0x74,0xFF,0xF0,0xE4,0xF5,0x0C,
+ 0x80,0x14,0x90,0x45,0x92,0x74,0xFF,0xF0,
+ 0x75,0x0C,0xFA,0x80,0x09,0x12,0x7B,0x64,
+ 0xEF,0x70,0x03,0x75,0x0C,0x02,0x90,0x45,
+ 0x92,0xE0,0xFF,0xF4,0x60,0x3F,0xEF,0x64,
+ 0xFE,0x60,0x3A,0x12,0x5B,0x33,0x90,0xF4,
+ 0x05,0x74,0x20,0xF0,0x90,0x42,0xE9,0xE0,
+ 0x60,0x1B,0x7E,0xDE,0x7F,0x40,0x90,0xF7,
+ 0x00,0xE0,0x04,0xFB,0x7D,0x00,0x7C,0xF7,
+ 0x12,0x48,0x86,0x90,0xF7,0x00,0xE0,0x04,
+ 0x90,0xDD,0x86,0xF0,0x22,0x90,0x45,0x92,
+ 0xE0,0x54,0x03,0xFF,0x90,0xF4,0x11,0xE0,
+ 0x54,0xFC,0x4F,0xF0,0x22,0x90,0x45,0x92,
+ 0xE0,0xF4,0x70,0x23,0x90,0xF4,0x12,0x74,
+ 0x05,0xF0,0xA3,0xE4,0xF0,0xA3,0xE0,0x54,
+ 0xFC,0xF0,0x90,0xF7,0x00,0x74,0x04,0xF0,
+ 0x90,0xF7,0x03,0xE0,0x90,0xF7,0x01,0xF0,
+ 0xA3,0xE5,0x0C,0xF0,0x12,0x5B,0x33,0x90,
+ 0xF4,0x05,0x74,0x20,0xF0,0x90,0x42,0xE9,
+ 0xE0,0x60,0x1B,0x7E,0xDE,0x7F,0x40,0x90,
+ 0xF7,0x00,0xE0,0x04,0xFB,0x7D,0x00,0x7C,
+ 0xF7,0x12,0x48,0x86,0x90,0xF7,0x00,0xE0,
+ 0x04,0x90,0xDD,0x86,0xF0,0x22,0x90,0xF4,
+ 0x11,0xE0,0x54,0xFC,0xF0,0x22,0x22,0x22,
+ 0x22,0x22,0x22,0x90,0x42,0x98,0xE0,0x24,
+ 0xA0,0x60,0x2D,0x14,0x60,0x35,0x14,0x70,
+ 0x03,0x02,0x65,0x2F,0x24,0xFD,0x70,0x03,
+ 0x02,0x65,0x8F,0x14,0x70,0x03,0x02,0x65,
+ 0x99,0x24,0x16,0x60,0x03,0x02,0x65,0xFB,
+ 0x90,0x41,0x87,0xE0,0x90,0xDD,0x10,0xF0,
+ 0xE4,0x90,0x42,0x99,0xF0,0x02,0x66,0x04,
+ 0x90,0x41,0x95,0xE0,0xFF,0x12,0x4B,0x1E,
+ 0x02,0x66,0x04,0x90,0x42,0xEF,0xE0,0x60,
+ 0x29,0x78,0xBA,0x7C,0x41,0x7D,0x01,0x7B,
+ 0x01,0x7A,0x41,0x79,0xB1,0x7E,0x00,0x7F,
+ 0x09,0x12,0x81,0x99,0x90,0x41,0xBB,0x74,
+ 0x02,0xF0,0x7F,0x00,0x7E,0x40,0x12,0x4C,
+ 0xBF,0x7F,0x02,0x7E,0x00,0x12,0x4D,0x00,
+ 0x80,0x21,0x78,0xBA,0x7C,0x41,0x7D,0x01,
+ 0x7B,0x01,0x7A,0x42,0x79,0x9B,0x7E,0x00,
+ 0x7F,0x09,0x12,0x81,0x99,0x7F,0x02,0x7E,
+ 0x00,0x12,0x4C,0xBF,0x7F,0x14,0x7E,0x00,
+ 0x12,0x4D,0x00,0x90,0x41,0xBC,0xE0,0xFF,
+ 0x12,0x4B,0x1E,0x02,0x66,0x04,0xE4,0xFF,
+ 0x90,0x41,0x87,0xE0,0xFE,0xEF,0xC3,0x9E,
+ 0x50,0x2C,0x90,0x42,0x9A,0xE0,0xFE,0x90,
+ 0x42,0xF8,0xE0,0x75,0xF0,0x08,0xA4,0x2E,
+ 0xF5,0x82,0xE4,0x35,0xF0,0xF5,0x83,0xE5,
+ 0x82,0x24,0xF5,0xF5,0x82,0xE5,0x83,0x34,
+ 0x42,0xF5,0x83,0xE0,0xFE,0x90,0x42,0x9A,
+ 0xE0,0x2E,0xF0,0x0F,0x80,0xCA,0x90,0x42,
+ 0x9A,0xE0,0xFF,0x90,0x42,0xF8,0xE0,0x75,
+ 0xF0,0x08,0xA4,0x2F,0xF5,0x82,0xE4,0x35,
+ 0xF0,0xF5,0x83,0xE5,0x82,0x24,0xF5,0xF5,
+ 0x82,0xE5,0x83,0x34,0x42,0xF5,0x83,0xE0,
+ 0xFF,0x12,0x4B,0x1E,0x80,0x75,0x90,0x41,
+ 0xA7,0xE0,0xFF,0x12,0x4B,0x1E,0x80,0x6B,
+ 0x90,0x42,0xEF,0xE0,0x60,0x31,0x78,0xBA,
+ 0x7C,0x41,0x7D,0x01,0x7B,0x01,0x7A,0x42,
+ 0x79,0x9B,0x7E,0x00,0x7F,0x09,0x12,0x81,
+ 0x99,0x90,0x41,0xBB,0x74,0x07,0xF0,0x7F,
+ 0x02,0x7E,0x00,0x12,0x4C,0xBF,0x7F,0x14,
+ 0x7E,0x00,0x12,0x4D,0x00,0x90,0x41,0xBC,
+ 0xE0,0xFF,0x12,0x4B,0x1E,0x80,0x34,0x78,
+ 0xBA,0x7C,0x41,0x7D,0x01,0x7B,0x01,0x7A,
+ 0x41,0x79,0xB1,0x7E,0x00,0x7F,0x09,0x12,
+ 0x81,0x99,0x90,0x41,0xBC,0xE0,0xFF,0x12,
+ 0x4B,0x1E,0x7F,0x00,0x7E,0x40,0x12,0x4C,
+ 0xBF,0x7F,0x02,0x7E,0x00,0x12,0x4D,0x00,
+ 0x80,0x09,0x12,0x7B,0x64,0xEF,0x70,0x03,
+ 0x7F,0x07,0x22,0x7F,0x00,0x22,0x90,0x42,
+ 0x98,0xE0,0xFF,0x14,0x24,0xFD,0x50,0x3A,
+ 0x24,0xF4,0x70,0x03,0x02,0x66,0xA5,0x24,
+ 0xFD,0x70,0x03,0x02,0x66,0xAD,0x24,0xE2,
+ 0x70,0x03,0x02,0x66,0xDF,0x14,0x70,0x03,
+ 0x02,0x66,0xC5,0x24,0xB2,0x70,0x03,0x02,
+ 0x67,0x15,0x24,0xF0,0x70,0x03,0x02,0x67,
+ 0x25,0x24,0xF0,0x70,0x03,0x02,0x67,0x37,
+ 0x24,0xF0,0x70,0x03,0x02,0x67,0x47,0x02,
+ 0x67,0x59,0xEF,0xB4,0x01,0x26,0x90,0x42,
+ 0xEF,0xE0,0x60,0x10,0x90,0x41,0xB8,0xE0,
+ 0xFF,0xC4,0x13,0x13,0x54,0x01,0x90,0xDE,
+ 0x00,0xF0,0x80,0x32,0x90,0x42,0xA2,0xE0,
+ 0xFF,0xC4,0x13,0x13,0x54,0x01,0x90,0xDE,
+ 0x00,0xF0,0x80,0x22,0x90,0x42,0x98,0xE0,
+ 0xB4,0x02,0x07,0xE4,0x90,0xDE,0x00,0xF0,
+ 0x80,0x14,0x90,0x41,0x89,0xE0,0x54,0x0F,
+ 0x24,0x8D,0xF5,0x82,0xE4,0x34,0x41,0xF5,
+ 0x83,0xE0,0x90,0xDE,0x00,0xF0,0xE4,0x90,
+ 0xDE,0x01,0xF0,0x90,0x42,0x99,0x74,0x02,
+ 0xF0,0x02,0x67,0x62,0xE4,0x90,0x42,0x99,
+ 0xF0,0x02,0x67,0x62,0x90,0x41,0x89,0xE0,
+ 0x54,0x0F,0x24,0x8D,0xF5,0x82,0xE4,0x34,
+ 0x41,0xF5,0x83,0xE4,0xF0,0x90,0x42,0x99,
+ 0xF0,0x02,0x67,0x62,0x90,0x41,0x89,0xE0,
+ 0x54,0x0F,0x24,0x8D,0xF5,0x82,0xE4,0x34,
+ 0x41,0xF5,0x83,0x74,0x01,0xF0,0xE4,0x90,
+ 0x42,0x99,0xF0,0x02,0x67,0x62,0x90,0x42,
+ 0xEF,0xE0,0x60,0x08,0xE4,0x90,0x42,0xE7,
+ 0xF0,0x7F,0x07,0x22,0x90,0x41,0x8A,0xE0,
+ 0x14,0x24,0xFC,0x50,0x02,0x80,0x08,0x90,
+ 0x42,0xE7,0x74,0x01,0xF0,0x80,0x0E,0x12,
+ 0x7B,0x64,0xEF,0x70,0x08,0xE4,0x90,0x42,
+ 0xE7,0xF0,0x7F,0x07,0x22,0xE4,0x90,0x42,
+ 0x99,0xF0,0x80,0x4D,0x90,0x41,0x93,0xE0,
+ 0x90,0xDE,0x00,0xF0,0x90,0x42,0x99,0x74,
+ 0x01,0xF0,0x80,0x3D,0x12,0x6A,0x2D,0x90,
+ 0x41,0x87,0xE0,0x90,0x41,0x93,0xF0,0xE4,
+ 0x90,0x42,0x99,0xF0,0x80,0x2B,0x90,0x41,
+ 0x94,0xE0,0x90,0xDE,0x00,0xF0,0x90,0x42,
+ 0x99,0x74,0x01,0xF0,0x80,0x1B,0x12,0x6A,
+ 0x2D,0x90,0x41,0x87,0xE0,0x90,0x41,0x94,
+ 0xF0,0xE4,0x90,0x42,0x99,0xF0,0x80,0x09,
+ 0x12,0x7B,0x64,0xEF,0x70,0x03,0x7F,0x07,
+ 0x22,0x7F,0x00,0x22,0x90,0x42,0x98,0xE0,
+ 0x24,0xDE,0x60,0x1F,0x24,0xF7,0x60,0x2B,
+ 0x24,0xBF,0x60,0x0D,0x04,0x70,0x33,0x90,
+ 0x42,0x24,0xE0,0xFF,0x12,0x4B,0x1E,0x80,
+ 0x32,0x90,0x42,0x2B,0xE0,0xFF,0x12,0x4B,
+ 0x1E,0x80,0x28,0x90,0x42,0xE5,0xE0,0x90,
+ 0xDE,0x00,0xF0,0x90,0x42,0x99,0x74,0x01,
+ 0xF0,0x80,0x18,0x90,0x41,0x88,0xE0,0x90,
+ 0x42,0xE5,0xF0,0xE4,0x90,0x42,0x99,0xF0,
+ 0x80,0x09,0x12,0x7B,0x64,0xEF,0x70,0x03,
+ 0x7F,0x07,0x22,0x7F,0x00,0x22,0x90,0x42,
+ 0x98,0xE0,0x12,0x80,0xB1,0x68,0x01,0x01,
+ 0x68,0x01,0x02,0x68,0x01,0x03,0x68,0x01,
+ 0x10,0x68,0x01,0x13,0x68,0x01,0x22,0x68,
+ 0x01,0x2B,0x68,0x01,0x31,0x68,0x01,0x32,
+ 0x68,0x01,0x50,0x68,0x0B,0x60,0x68,0x21,
+ 0x61,0x68,0x37,0x62,0x68,0x16,0x65,0x68,
+ 0x2C,0x66,0x68,0x4E,0x6B,0x68,0x59,0x6C,
+ 0x68,0x01,0x80,0x68,0x01,0x90,0x68,0x01,
+ 0xA0,0x68,0x01,0xB0,0x00,0x00,0x68,0x64,
+ 0x90,0x42,0x99,0xE0,0x90,0xDD,0x85,0xF0,
+ 0x80,0x62,0x7A,0x41,0x79,0x95,0x7B,0x01,
+ 0x12,0x4B,0x43,0x80,0x57,0x7A,0x41,0x79,
+ 0xA7,0x7B,0x01,0x12,0x4B,0x43,0x80,0x4C,
+ 0x7A,0x41,0x79,0xBA,0x7B,0x01,0x12,0x4B,
+ 0x43,0x80,0x41,0x7A,0x41,0x79,0xBA,0x7B,
+ 0x01,0x12,0x4B,0x43,0x80,0x36,0x90,0x42,
+ 0xF8,0xE0,0x75,0xF0,0x08,0xA4,0x24,0xF5,
+ 0xF9,0x74,0x42,0x35,0xF0,0xFA,0x7B,0x01,
+ 0x12,0x4B,0x43,0x80,0x1F,0x7A,0x42,0x79,
+ 0x24,0x7B,0x01,0x12,0x4B,0x43,0x80,0x14,
+ 0x7B,0x01,0x7A,0x42,0x79,0xA4,0x12,0x4B,
+ 0x43,0x80,0x09,0x12,0x7B,0x64,0xEF,0x70,
+ 0x03,0x7F,0x03,0x22,0x7F,0x00,0x22,0x90,
+ 0x41,0x85,0xE0,0xFF,0x20,0xE7,0x03,0x02,
+ 0x69,0x5D,0xB4,0xA1,0x1C,0xA3,0xE0,0x24,
+ 0xFE,0x60,0x0A,0x14,0x60,0x0A,0x24,0x02,
+ 0x70,0x09,0x7F,0x21,0x22,0x7F,0x22,0x22,
+ 0x7F,0x23,0x22,0x12,0x7B,0x63,0x02,0x6A,
+ 0x2A,0x90,0x41,0x85,0xE0,0xFF,0x54,0x60,
+ 0x60,0x03,0x02,0x6A,0x2A,0x90,0x41,0x86,
+ 0xE0,0x24,0xFA,0x60,0x30,0x24,0xFE,0x70,
+ 0x03,0x02,0x69,0x51,0x24,0xFE,0x70,0x03,
+ 0x02,0x69,0x54,0x24,0x0A,0x60,0x03,0x02,
+ 0x69,0x57,0xEF,0x24,0x7F,0x60,0x0A,0x14,
+ 0x60,0x0A,0x24,0x02,0x70,0x09,0x7F,0x01,
+ 0x22,0x7F,0x02,0x22,0x7F,0x03,0x22,0x12,
+ 0x7B,0x63,0x02,0x6A,0x2A,0x90,0x41,0x85,
+ 0xE0,0xB4,0x81,0x1E,0x90,0x41,0x88,0xE0,
+ 0x24,0xDE,0x60,0x0A,0x14,0x60,0x0A,0x24,
+ 0x02,0x70,0x09,0x7F,0x6B,0x22,0x7F,0x6C,
+ 0x22,0x7F,0x6D,0x22,0x12,0x7B,0x63,0x02,
+ 0x6A,0x2A,0x90,0x41,0x88,0xE0,0x14,0xB4,
+ 0x08,0x00,0x50,0x3E,0x90,0x69,0x1B,0x75,
+ 0xF0,0x03,0xA4,0xC5,0x83,0x25,0xF0,0xC5,
+ 0x83,0x73,0x02,0x69,0x33,0x02,0x69,0x36,
+ 0x02,0x69,0x39,0x02,0x69,0x3C,0x02,0x69,
+ 0x3F,0x02,0x69,0x42,0x02,0x69,0x45,0x02,
+ 0x69,0x48,0x7F,0x60,0x22,0x7F,0x61,0x22,
+ 0x7F,0x62,0x22,0x7F,0x63,0x22,0x7F,0x64,
+ 0x22,0x7F,0x65,0x22,0x7F,0x66,0x22,0x7F,
+ 0x67,0x22,0x12,0x7B,0x63,0x02,0x6A,0x2A,
+ 0x7F,0x80,0x22,0x7F,0xA0,0x22,0x12,0x7B,
+ 0x63,0x02,0x6A,0x2A,0x90,0x41,0x85,0xE0,
+ 0xB4,0x21,0x1C,0xA3,0xE0,0x24,0xF6,0x60,
+ 0x0A,0x14,0x60,0x0A,0x24,0x02,0x70,0x09,
+ 0x7F,0x29,0x22,0x7F,0x2B,0x22,0x7F,0x2B,
+ 0x22,0x12,0x7B,0x63,0x02,0x6A,0x2A,0x90,
+ 0x41,0x85,0xE0,0xFF,0x54,0x60,0x60,0x03,
+ 0x02,0x6A,0x2A,0x90,0x41,0x86,0xE0,0x24,
+ 0xFD,0x60,0x41,0x24,0xFE,0x60,0x70,0x24,
+ 0xFE,0x60,0x78,0x24,0xFE,0x70,0x03,0x02,
+ 0x6A,0x21,0x24,0xFE,0x60,0x7D,0x24,0x0A,
+ 0x70,0x7C,0xEF,0x24,0xFE,0x60,0x17,0x24,
+ 0x02,0x70,0x1C,0x90,0x41,0x87,0xE0,0xFE,
+ 0xB4,0x01,0x03,0x7F,0x10,0x22,0xEE,0x64,
+ 0x02,0x70,0x66,0x7F,0x12,0x22,0x90,0x41,
+ 0x87,0xE0,0x70,0x5D,0x7F,0x13,0x22,0x12,
+ 0x7B,0x63,0x80,0x55,0x90,0x41,0x85,0xE0,
+ 0x24,0xFE,0x60,0x1D,0x24,0x02,0x70,0x22,
+ 0x90,0x41,0x87,0xE0,0xFE,0xB4,0x01,0x03,
+ 0x7F,0x30,0x22,0xEE,0x64,0x02,0x70,0x39,
+ 0x90,0x41,0x89,0xE0,0x70,0x33,0x7F,0x31,
+ 0x22,0x90,0x41,0x87,0xE0,0x70,0x2A,0x7F,
+ 0x32,0x22,0x12,0x7B,0x63,0x80,0x22,0x90,
+ 0x41,0x87,0xE0,0xC3,0x94,0x80,0x50,0x19,
+ 0x7F,0x50,0x22,0x90,0x41,0x85,0xE0,0xB4,
+ 0x01,0x03,0x7F,0x71,0x22,0x7F,0x70,0x22,
+ 0x7F,0x90,0x22,0x7F,0xB0,0x22,0x12,0x7B,
+ 0x63,0x7F,0x00,0x22,0xE4,0xFF,0x7F,0x06,
+ 0x90,0x41,0x8D,0xE4,0xF0,0xA3,0xDF,0xFC,
+ 0x22,0xE4,0x90,0x42,0xE6,0xF0,0x90,0x42,
+ 0xE7,0xF0,0x90,0x42,0xE8,0xF0,0x90,0x42,
+ 0xEF,0xF0,0x12,0x54,0x18,0x12,0x6A,0x9D,
+ 0x22,0x90,0x43,0x0D,0xE0,0x60,0x38,0x74,
+ 0x43,0x90,0x41,0x7F,0xF0,0x74,0xF6,0xA3,
+ 0xF0,0x90,0x43,0x29,0xE0,0x70,0x05,0x12,
+ 0x6D,0x91,0x80,0x1B,0x90,0x43,0x29,0xE0,
+ 0xB4,0x01,0x05,0x12,0x6D,0x9B,0x80,0x0F,
+ 0x90,0x43,0x29,0xE0,0x64,0x02,0x60,0x04,
+ 0xE0,0xB4,0xFF,0x03,0x12,0x6A,0xD7,0x90,
+ 0x42,0xE9,0xE0,0x70,0x02,0xD2,0xDD,0x90,
+ 0x42,0xE9,0xE0,0x60,0x06,0x12,0x4F,0xDC,
+ 0x12,0x4F,0xBD,0x22,0x78,0x95,0x7C,0x41,
+ 0x7D,0x01,0x7B,0xFF,0x7A,0x81,0x79,0xD9,
+ 0x7E,0x01,0x7F,0x03,0x12,0x81,0x99,0x78,
+ 0x9B,0x7C,0x42,0x7D,0x01,0x7B,0x01,0x7A,
+ 0x41,0x79,0xBA,0x7E,0x00,0x7F,0x09,0x12,
+ 0x81,0x99,0x78,0xA4,0x7C,0x42,0x7D,0x01,
+ 0x7B,0xFF,0x7A,0x82,0x79,0xDC,0x7E,0x00,
+ 0x7F,0x41,0x12,0x81,0x99,0x22,0xE4,0x90,
+ 0x45,0xAB,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,
+ 0xF0,0xA3,0xF0,0x90,0xDF,0x84,0x74,0x64,
+ 0xF0,0xE4,0x90,0xDF,0x85,0xF0,0x90,0xDF,
+ 0x86,0x74,0x2C,0xF0,0x90,0xDF,0x87,0x74,
+ 0x01,0xF0,0xE4,0x90,0xDF,0x88,0xF0,0x90,
+ 0xDF,0x89,0x74,0x02,0xF0,0x12,0x6D,0x2C,
+ 0x90,0xDF,0x82,0xE0,0x20,0xE1,0x08,0x90,
+ 0x45,0xAA,0xE5,0xE4,0xF0,0x80,0xF1,0x22,
+ 0x90,0xDF,0x82,0xE0,0x30,0xE0,0x0E,0x74,
+ 0x20,0xF0,0xE0,0x90,0x45,0xA7,0xF0,0xE4,
+ 0x90,0xDF,0x82,0xF0,0x22,0x90,0xDF,0x82,
+ 0xE0,0x30,0xE1,0x03,0x02,0x6D,0x2B,0x90,
+ 0x45,0xA7,0xE5,0xE4,0xF0,0xE0,0x54,0x0F,
+ 0xA3,0xF0,0x90,0x45,0xA7,0xE0,0xFF,0xC4,
+ 0x54,0x0F,0x90,0x45,0xA9,0xF0,0x90,0x45,
+ 0xBB,0xE0,0x14,0x70,0x03,0x02,0x6C,0x08,
+ 0x04,0x60,0x03,0x02,0x6C,0x7D,0x90,0x45,
+ 0xAC,0xE0,0x25,0xE0,0xF0,0x90,0x45,0xAB,
+ 0xE0,0x33,0xF0,0xA3,0xE0,0x44,0x01,0xF0,
+ 0xA3,0xE0,0x04,0xF0,0x90,0x45,0xA7,0xE0,
+ 0x24,0xEF,0x70,0x03,0x02,0x6C,0x80,0x24,
+ 0xEF,0x60,0x20,0x24,0x10,0x70,0x37,0x90,
+ 0x45,0xAC,0xE0,0x25,0xE0,0xF0,0x90,0x45,
+ 0xAB,0xE0,0x33,0xF0,0x90,0x45,0xAD,0xE0,
+ 0x04,0xF0,0x90,0x45,0xBB,0x74,0x01,0xF0,
+ 0x02,0x6C,0x80,0x90,0x45,0xAC,0xE0,0x25,
+ 0xE0,0xF0,0x90,0x45,0xAB,0xE0,0x33,0xF0,
+ 0x90,0x45,0xAD,0xE0,0x04,0xF0,0xE4,0x90,
+ 0x45,0xBB,0xF0,0x02,0x6C,0x80,0x12,0x7B,
+ 0x64,0xEF,0x60,0x03,0x02,0x6C,0x80,0x90,
+ 0x45,0xA8,0xE0,0xB4,0x02,0x13,0x90,0x45,
+ 0xAC,0xE0,0x25,0xE0,0xF0,0x90,0x45,0xAB,
+ 0xE0,0x33,0xF0,0x90,0x45,0xAD,0xE0,0x04,
+ 0xF0,0x90,0x45,0xA9,0xE0,0xD3,0x94,0x02,
+ 0x40,0x15,0x90,0x45,0xA8,0xE0,0x64,0x01,
+ 0x60,0x04,0xE0,0xB4,0x02,0x09,0x90,0x45,
+ 0xA9,0x74,0xFF,0xF0,0x02,0x6C,0x80,0x90,
+ 0x45,0xA9,0x74,0xFE,0xF0,0x80,0x78,0x90,
+ 0x45,0xA7,0xE0,0x24,0xDF,0x60,0x1F,0x24,
+ 0x10,0x70,0x35,0x90,0x45,0xAC,0xE0,0x25,
+ 0xE0,0xF0,0x90,0x45,0xAB,0xE0,0x33,0xF0,
+ 0x90,0x45,0xAD,0xE0,0x04,0xF0,0x90,0x45,
+ 0xBB,0x74,0x01,0xF0,0x80,0x51,0x90,0x45,
+ 0xAC,0xE0,0x25,0xE0,0xF0,0x90,0x45,0xAB,
+ 0xE0,0x33,0xF0,0x90,0x45,0xAD,0xE0,0x04,
+ 0xF0,0xE4,0x90,0x45,0xBB,0xF0,0x80,0x37,
+ 0x12,0x7B,0x64,0xEF,0x70,0x31,0x90,0x45,
+ 0xAC,0xE0,0x25,0xE0,0xF0,0x90,0x45,0xAB,
+ 0xE0,0x33,0xF0,0x90,0x45,0xAD,0xE0,0x04,
+ 0xF0,0x90,0x45,0xA8,0xE0,0xB4,0x01,0x0C,
+ 0xA3,0xE0,0xD3,0x94,0x02,0x40,0x05,0x74,
+ 0xFF,0xF0,0x80,0x0B,0x90,0x45,0xA9,0x74,
+ 0xFE,0xF0,0x80,0x03,0x12,0x7B,0x63,0x90,
+ 0x45,0xA9,0xE0,0xD3,0x94,0x0F,0x50,0x03,
+ 0x02,0x6B,0x2E,0x90,0x45,0xAD,0xE0,0xFF,
+ 0xD3,0x94,0x10,0x50,0x7E,0xEF,0x94,0x0A,
+ 0x40,0x79,0x90,0x45,0xA9,0xE0,0xF4,0x70,
+ 0x72,0xFF,0x7F,0x08,0x90,0x45,0xBE,0xE4,
+ 0xF0,0xA3,0xDF,0xFC,0x7F,0x08,0x90,0x43,
+ 0x29,0xE0,0xB4,0xFF,0x1A,0x90,0x45,0xAB,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x45,0xAE,
+ 0xE0,0x6E,0x70,0x03,0xA3,0xE0,0x6F,0x60,
+ 0x06,0x90,0x45,0xBE,0x74,0x01,0xF0,0x90,
+ 0x45,0xAB,0xE0,0xFF,0xA3,0xE0,0x90,0x45,
+ 0xAE,0xCF,0xF0,0xA3,0xEF,0xF0,0x90,0x45,
+ 0xAB,0xE0,0x54,0xF7,0xF0,0x90,0x43,0x29,
+ 0xE0,0xB4,0xFF,0x12,0x90,0x45,0xAE,0xE0,
+ 0x90,0x45,0xC0,0xF0,0x90,0x45,0xAF,0xE0,
+ 0x90,0x45,0xC1,0xF0,0x80,0x10,0x90,0x45,
+ 0xAB,0xE0,0x90,0x45,0xC0,0xF0,0x90,0x45,
+ 0xAC,0xE0,0x90,0x45,0xC1,0xF0,0x12,0x72,
+ 0xA1,0x80,0x07,0xE4,0x90,0x45,0xAE,0xF0,
+ 0xA3,0xF0,0xE4,0x90,0x45,0xAB,0xF0,0xA3,
+ 0xF0,0xA3,0xF0,0x90,0x45,0xBB,0xF0,0x02,
+ 0x6B,0x2E,0x22,0x90,0xDF,0x82,0xE0,0x54,
+ 0xDF,0xF0,0xE4,0x90,0x45,0xB9,0xF0,0x90,
+ 0x45,0xB8,0xF0,0x90,0x45,0xA6,0x04,0xF0,
+ 0x90,0x41,0x81,0xF0,0x90,0x45,0x56,0x74,
+ 0x32,0xF0,0x90,0x45,0x58,0x74,0x14,0xF0,
+ 0x90,0x45,0x57,0x74,0x3E,0xF0,0xE4,0x90,
+ 0x45,0xBB,0xF0,0x90,0x45,0xC6,0xF0,0x90,
+ 0x45,0xCA,0xF0,0x90,0x45,0xCC,0xF0,0xA3,
+ 0xF0,0x90,0x45,0xBC,0xF0,0xA3,0xF0,0x90,
+ 0x45,0xC7,0xF0,0xA3,0xF0,0x90,0x45,0xD2,
+ 0xF0,0x90,0xDF,0x80,0x74,0x28,0xF0,0xA3,
+ 0x74,0x04,0xF0,0x75,0xCA,0x01,0xE4,0xF5,
+ 0xCB,0xF5,0xC8,0xD2,0xAD,0xD2,0xCA,0x22,
+ 0x90,0xDF,0x92,0x74,0x50,0xF0,0x12,0x6D,
+ 0x2C,0x22,0x90,0x45,0x54,0x74,0x7F,0xF0,
+ 0xA3,0x74,0xFF,0xF0,0x90,0xDF,0x90,0x74,
+ 0x50,0xF0,0xE4,0xA3,0xF0,0xA3,0x74,0x96,
+ 0xF0,0xE4,0xA3,0xF0,0xA3,0x74,0x2C,0xF0,
+ 0xA3,0x74,0x01,0xF0,0xA3,0x74,0x90,0xF0,
+ 0xA3,0x74,0x01,0xF0,0xA3,0x74,0xC2,0xF0,
+ 0xA3,0x74,0x01,0xF0,0xA3,0x74,0x26,0xF0,
+ 0xA3,0x74,0x02,0xF0,0xE4,0xA3,0xF0,0xA3,
+ 0x74,0x10,0xF0,0xE4,0xA3,0xF0,0xA3,0x74,
+ 0x20,0xF0,0xE4,0xA3,0xF0,0xA3,0x74,0x40,
+ 0xF0,0x12,0x6D,0x2C,0x22,0xC2,0xCF,0x90,
+ 0x45,0xBC,0xE0,0x60,0x1A,0xA3,0xE0,0x04,
+ 0xF0,0x90,0x45,0x58,0xE0,0xFF,0x90,0x45,
+ 0xBD,0xE0,0xD3,0x9F,0x40,0x10,0xE4,0x90,
+ 0x45,0xBC,0xF0,0xA3,0xF0,0x80,0x07,0xE4,
+ 0x90,0x45,0xBC,0xF0,0xA3,0xF0,0x90,0x45,
+ 0xCC,0xE0,0x60,0x18,0xA3,0xE0,0x04,0xF0,
+ 0x90,0x45,0x57,0xE0,0xFF,0x90,0x45,0xCD,
+ 0xE0,0xD3,0x9F,0x40,0x10,0xE4,0xF0,0x90,
+ 0x45,0xCC,0xF0,0x22,0xE4,0x90,0x45,0xCD,
+ 0xF0,0x90,0x45,0xCC,0xF0,0x22,0x90,0xDF,
+ 0x82,0xE0,0x30,0xE0,0x14,0x74,0x20,0xF0,
+ 0xE0,0x90,0x45,0xB0,0xF0,0xE4,0x90,0xDF,
+ 0x82,0xF0,0x90,0x45,0xBB,0xF0,0x7F,0x01,
+ 0x22,0x7F,0x00,0x22,0x12,0x6E,0x3F,0xEF,
+ 0x60,0x03,0x02,0x6F,0xFB,0x90,0xDF,0x82,
+ 0xE0,0x30,0xE1,0x03,0x02,0x6F,0xFB,0x90,
+ 0x45,0xB2,0xE5,0xE4,0xF0,0x90,0x45,0xBB,
+ 0xE0,0x14,0x60,0x68,0x14,0x70,0x03,0x02,
+ 0x6F,0x70,0x24,0x02,0x60,0x03,0x02,0x6F,
+ 0xEE,0x90,0x45,0xB2,0xE0,0x64,0xBC,0x70,
+ 0x3B,0x90,0x45,0xC6,0xF0,0x90,0x45,0xC8,
+ 0xF0,0x90,0x45,0xC7,0xF0,0x90,0x45,0xCA,
+ 0xF0,0x90,0x45,0xB1,0xF0,0x90,0x45,0xB1,
+ 0xE0,0xFF,0xC3,0x94,0x08,0x50,0x14,0x74,
+ 0xBE,0x2F,0xF5,0x82,0xE4,0x34,0x45,0xF5,
+ 0x83,0xE4,0xF0,0x90,0x45,0xB1,0xE0,0x04,
+ 0xF0,0x80,0xE2,0x90,0x45,0xBB,0x74,0x01,
+ 0xF0,0x02,0x6F,0xF1,0x90,0x45,0xB2,0xE0,
+ 0xB4,0xAC,0x09,0x90,0x45,0xBB,0x74,0x02,
+ 0xF0,0x02,0x6F,0xF1,0xE4,0x90,0x45,0xBB,
+ 0xF0,0x02,0x6F,0xF1,0x90,0x45,0xB2,0xE0,
+ 0xC3,0x94,0xE8,0x40,0x17,0x12,0x72,0xA1,
+ 0xE4,0x90,0x45,0xBB,0xF0,0x90,0x45,0xC8,
+ 0xF0,0x90,0x45,0xC7,0xF0,0x90,0x45,0xC6,
+ 0xF0,0x02,0x6F,0xF1,0x90,0x45,0xB2,0xE0,
+ 0xB4,0x98,0x1F,0x90,0x45,0xC7,0xE0,0xFF,
+ 0x74,0x01,0xA8,0x07,0x08,0x80,0x02,0xC3,
+ 0x33,0xD8,0xFC,0xFF,0x90,0x45,0xC8,0xE0,
+ 0x2F,0xF0,0x90,0x45,0xC7,0xE0,0x04,0xF0,
+ 0x80,0x1A,0x90,0x45,0xB2,0xE0,0xB4,0x88,
+ 0x08,0x90,0x45,0xC7,0xE0,0x04,0xF0,0x80,
+ 0x0B,0xE4,0x90,0x45,0xBB,0xF0,0x90,0x45,
+ 0xC7,0xE0,0x04,0xF0,0x90,0x45,0xC7,0xE0,
+ 0x64,0x08,0x60,0x03,0x02,0x6F,0xF1,0xA3,
+ 0xE0,0xFF,0x90,0x45,0xC6,0xE0,0xFE,0x04,
+ 0xF0,0x74,0xBE,0x2E,0xF5,0x82,0xE4,0x34,
+ 0x45,0xF5,0x83,0xEF,0xF0,0xE4,0x90,0x45,
+ 0xC7,0xF0,0xA3,0xF0,0x02,0x6F,0xF1,0x90,
+ 0x45,0xB2,0xE0,0xC3,0x94,0xF8,0x40,0x78,
+ 0x90,0x45,0xCA,0xE0,0x04,0xF0,0x90,0x45,
+ 0xB9,0xE0,0x70,0x4C,0x90,0x45,0x58,0xE0,
+ 0x75,0xF0,0x05,0x84,0xFF,0x90,0x45,0xCA,
+ 0xE0,0x6F,0x70,0x3C,0x90,0x45,0xB1,0xF0,
+ 0x90,0x45,0xB1,0xE0,0xFF,0x24,0xBE,0xF5,
+ 0x82,0xE4,0x34,0x45,0xF5,0x83,0xE0,0xFE,
+ 0x74,0x80,0x2F,0xF5,0x82,0xE4,0x34,0xDE,
+ 0xF5,0x83,0xEE,0xF0,0x90,0x45,0xB1,0xE0,
+ 0x04,0xF0,0xE0,0xB4,0x08,0xDA,0x90,0x45,
+ 0xCC,0xE0,0x60,0x06,0x74,0x01,0xF0,0xE4,
+ 0xA3,0xF0,0x90,0x45,0xB9,0x74,0x01,0xF0,
+ 0x90,0x45,0x58,0xE0,0x75,0xF0,0x05,0x84,
+ 0xFF,0x90,0x45,0xCA,0xE0,0xB5,0x07,0x02,
+ 0xE4,0xF0,0xE4,0x90,0x45,0xBB,0xF0,0x90,
+ 0x45,0xC6,0xF0,0x80,0x03,0x12,0x7B,0x63,
+ 0x90,0xDF,0x82,0xE0,0x20,0xE1,0x03,0x02,
+ 0x6E,0x70,0x22,0x12,0x6E,0x3F,0xEF,0x60,
+ 0x03,0x02,0x72,0xA0,0x90,0xDF,0x82,0xE0,
+ 0x30,0xE1,0x03,0x02,0x72,0xA0,0x90,0x45,
+ 0xB3,0xE5,0xE4,0xF0,0x90,0x45,0xBB,0xE0,
+ 0x14,0x60,0x3F,0x14,0x70,0x03,0x02,0x71,
+ 0x68,0x24,0x02,0x60,0x03,0x02,0x72,0x93,
+ 0x90,0x45,0xB3,0xE0,0xB4,0x8C,0x23,0xE4,
+ 0x90,0x45,0xC6,0xF0,0xA3,0xF0,0xA3,0xF0,
+ 0xFF,0x7F,0x03,0x90,0x45,0xCE,0xE4,0xF0,
+ 0xA3,0xDF,0xFC,0x7F,0x03,0x90,0x45,0xBB,
+ 0x74,0x01,0xF0,0x90,0x45,0xD3,0xF0,0x02,
+ 0x72,0x96,0xE4,0x90,0x45,0xBB,0xF0,0x02,
+ 0x72,0x96,0x90,0x45,0xB3,0xE0,0x54,0x0F,
+ 0xA3,0xF0,0x90,0x45,0xB3,0xE0,0xFF,0xC4,
+ 0x54,0x0F,0x90,0x45,0xB5,0xF0,0x90,0x45,
+ 0xD3,0xE0,0x24,0xFE,0x60,0x34,0x14,0x60,
+ 0x52,0x14,0x60,0x70,0x14,0x70,0x03,0x02,
+ 0x71,0x0E,0x24,0x04,0x60,0x03,0x02,0x71,
+ 0x62,0x90,0x45,0xB4,0xE0,0xB4,0x07,0x0E,
+ 0xA3,0xE0,0xB4,0x07,0x09,0x90,0x45,0xD3,
+ 0x74,0x02,0xF0,0x02,0x72,0x96,0xE4,0x90,
+ 0x45,0xBB,0xF0,0x90,0x45,0xD3,0xF0,0x02,
+ 0x72,0x96,0x90,0x45,0xB4,0xE0,0xB4,0x07,
+ 0x0E,0xA3,0xE0,0xB4,0x07,0x09,0x90,0x45,
+ 0xD3,0x74,0x03,0xF0,0x02,0x72,0x96,0xE4,
+ 0x90,0x45,0xBB,0xF0,0x90,0x45,0xD3,0xF0,
+ 0x02,0x72,0x96,0x90,0x45,0xB4,0xE0,0xB4,
+ 0x07,0x0E,0xA3,0xE0,0xB4,0x08,0x09,0x90,
+ 0x45,0xD3,0x74,0x04,0xF0,0x02,0x72,0x96,
+ 0xE4,0x90,0x45,0xBB,0xF0,0x90,0x45,0xD3,
+ 0xF0,0x02,0x72,0x96,0x90,0x45,0xB4,0xE0,
+ 0xB4,0x07,0x0E,0xA3,0xE0,0xB4,0x08,0x09,
+ 0x90,0x45,0xD3,0x74,0x05,0xF0,0x02,0x72,
+ 0x96,0xE4,0x90,0x45,0xBB,0xF0,0x90,0x45,
+ 0xD3,0xF0,0x02,0x72,0x96,0x90,0x45,0xB4,
+ 0xE0,0x64,0x09,0x70,0x40,0x90,0x45,0xCE,
+ 0x74,0x08,0xF0,0x90,0x45,0xB5,0xE0,0xB4,
+ 0x08,0x0F,0x90,0x45,0xCF,0x74,0x88,0xF0,
+ 0xA3,0xF0,0xE4,0xA3,0xF0,0xA3,0x74,0x03,
+ 0xF0,0x90,0x45,0xB5,0xE0,0xB4,0x07,0x0F,
+ 0x90,0x45,0xCF,0x74,0x88,0xF0,0xE4,0xA3,
+ 0xF0,0xA3,0xF0,0xA3,0x74,0x02,0xF0,0x90,
+ 0x45,0xBB,0x74,0x02,0xF0,0xE4,0x90,0x45,
+ 0xD3,0xF0,0x02,0x72,0x96,0xE4,0x90,0x45,
+ 0xBB,0xF0,0x90,0x45,0xD3,0xF0,0x02,0x72,
+ 0x96,0x12,0x7B,0x63,0x02,0x72,0x96,0x90,
+ 0x45,0xB3,0xE0,0x54,0x0F,0xA3,0xF0,0x90,
+ 0x45,0xB3,0xE0,0xFF,0xC4,0x54,0x0F,0x90,
+ 0x45,0xB5,0xF0,0x90,0x45,0xB4,0xE0,0xB4,
+ 0x07,0x21,0x90,0x45,0xD2,0xE0,0xFF,0x04,
+ 0xF0,0x74,0xCE,0x2F,0xF5,0x82,0xE4,0x34,
+ 0x45,0xF5,0x83,0x74,0x08,0xF0,0x90,0x45,
+ 0xD2,0xE0,0x64,0x04,0x70,0x50,0x12,0x72,
+ 0xE4,0x80,0x4B,0x90,0x45,0xB4,0xE0,0x64,
+ 0x08,0x70,0x3E,0x90,0x45,0xD2,0xE0,0xFF,
+ 0x04,0xF0,0x74,0xCE,0x2F,0xF5,0x82,0xE4,
+ 0x34,0x45,0xF5,0x83,0x74,0x08,0xF0,0x90,
+ 0x45,0xD2,0xE0,0xB4,0x04,0x03,0x12,0x72,
+ 0xE4,0x90,0x45,0xD2,0xE0,0xFF,0x04,0xF0,
+ 0x74,0xCE,0x2F,0xF5,0x82,0xE4,0x34,0x45,
+ 0xF5,0x83,0x74,0x08,0xF0,0x90,0x45,0xD2,
+ 0xE0,0xB4,0x04,0x0A,0x12,0x72,0xE4,0x80,
+ 0x05,0xE4,0x90,0x45,0xBB,0xF0,0x90,0x45,
+ 0xB5,0xE0,0xC3,0x94,0x0C,0x40,0x26,0x90,
+ 0x45,0xD2,0xE0,0x94,0x04,0x50,0x14,0xE0,
+ 0xFF,0x04,0xF0,0x74,0xCE,0x2F,0xF5,0x82,
+ 0xE4,0x34,0x45,0xF5,0x83,0x74,0x88,0xF0,
+ 0x12,0x72,0xE4,0x12,0x72,0xA1,0xE4,0x90,
+ 0x45,0xBB,0xF0,0x80,0x78,0x90,0x45,0xB5,
+ 0xE0,0xB4,0x07,0x21,0x90,0x45,0xD2,0xE0,
+ 0xFF,0x04,0xF0,0x74,0xCE,0x2F,0xF5,0x82,
+ 0xE4,0x34,0x45,0xF5,0x83,0x74,0x88,0xF0,
+ 0x90,0x45,0xD2,0xE0,0x64,0x04,0x70,0x55,
+ 0x12,0x72,0xE4,0x80,0x50,0x90,0x45,0xB5,
+ 0xE0,0x64,0x08,0x70,0x3E,0x90,0x45,0xD2,
+ 0xE0,0xFF,0x04,0xF0,0x74,0xCE,0x2F,0xF5,
+ 0x82,0xE4,0x34,0x45,0xF5,0x83,0x74,0x88,
+ 0xF0,0x90,0x45,0xD2,0xE0,0xB4,0x04,0x03,
+ 0x12,0x72,0xE4,0x90,0x45,0xD2,0xE0,0xFF,
+ 0x04,0xF0,0x74,0xCE,0x2F,0xF5,0x82,0xE4,
+ 0x34,0x45,0xF5,0x83,0x74,0x88,0xF0,0x90,
+ 0x45,0xD2,0xE0,0xB4,0x04,0x0F,0x12,0x72,
+ 0xE4,0x80,0x0A,0xE4,0x90,0x45,0xBB,0xF0,
+ 0x80,0x03,0x12,0x7B,0x63,0x90,0xDF,0x82,
+ 0xE0,0x20,0xE1,0x03,0x02,0x70,0x0F,0x22,
+ 0x90,0x43,0x0D,0xE0,0xB4,0x01,0x0D,0x90,
+ 0x45,0xA6,0xE0,0xB4,0x01,0x06,0x12,0x73,
+ 0x9E,0xEF,0x60,0x2E,0x90,0x45,0xBC,0xE0,
+ 0x70,0x28,0x7E,0xDE,0x7F,0x80,0x7C,0x45,
+ 0x7D,0xBE,0x7B,0x08,0x12,0x48,0x86,0x90,
+ 0x45,0xBC,0x74,0x01,0xF0,0xE4,0xA3,0xF0,
+ 0x90,0x45,0xB8,0xE0,0x60,0x06,0x90,0x45,
+ 0xBA,0xE0,0x04,0xF0,0x90,0x45,0xB9,0x74,
+ 0x01,0xF0,0x22,0xE4,0xFF,0xEF,0xC3,0x94,
+ 0x04,0x50,0x65,0x74,0xCE,0x2F,0xF5,0x82,
+ 0xE4,0x34,0x45,0xF5,0x83,0xE0,0xFE,0xB4,
+ 0x08,0x32,0x74,0xCF,0x2F,0xF5,0x82,0xE4,
+ 0x34,0x45,0xF5,0x83,0xE0,0xB4,0x88,0x24,
+ 0x90,0x45,0xC7,0xE0,0xFD,0xC3,0x74,0x07,
+ 0x9D,0xFD,0x74,0x01,0xA8,0x05,0x08,0x80,
+ 0x02,0xC3,0x33,0xD8,0xFC,0xFD,0x90,0x45,
+ 0xC8,0xE0,0x2D,0xF0,0x90,0x45,0xC7,0xE0,
+ 0x04,0xF0,0x80,0x20,0xEE,0xB4,0x88,0x16,
+ 0x74,0xCF,0x2F,0xF5,0x82,0xE4,0x34,0x45,
+ 0xF5,0x83,0xE0,0xB4,0x08,0x08,0x90,0x45,
+ 0xC7,0xE0,0x04,0xF0,0x80,0x06,0x90,0x45,
+ 0xC7,0xE0,0x04,0xF0,0x0F,0x0F,0x80,0x95,
+ 0xE4,0x90,0x45,0xD2,0xF0,0x90,0x45,0xC7,
+ 0xE0,0x64,0x08,0x70,0x3F,0xA3,0xE0,0xFF,
+ 0x90,0x45,0xC6,0xE0,0xFE,0x04,0xF0,0x74,
+ 0xBE,0x2E,0xF5,0x82,0xE4,0x34,0x45,0xF5,
+ 0x83,0xEF,0xF0,0xE4,0x90,0x45,0xC7,0xF0,
+ 0xA3,0xF0,0x90,0x45,0xC6,0xE0,0xB4,0x04,
+ 0x1B,0x90,0x45,0x54,0xE0,0xFF,0x90,0x45,
+ 0xC0,0xE0,0x5F,0xF0,0x90,0x45,0x55,0xE0,
+ 0xFF,0x90,0x45,0xC1,0xE0,0x5F,0xF0,0xE4,
+ 0x90,0x45,0xC6,0xF0,0x22,0xE4,0x90,0x45,
+ 0xB6,0xF0,0xA3,0xF0,0x90,0x45,0x56,0xE0,
+ 0x75,0xF0,0x07,0xA4,0xFF,0x90,0x45,0xB6,
+ 0xE0,0xFC,0xA3,0xE0,0xFD,0xC3,0x9F,0xEC,
+ 0x95,0xF0,0x40,0x03,0x02,0x74,0x9B,0x74,
+ 0xF6,0x2D,0xF5,0x82,0x74,0x43,0x3C,0xF5,
+ 0x83,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0x90,0x45,0xBE,0xE0,
+ 0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,
+ 0xE0,0xFB,0xC3,0x12,0x80,0x9B,0x60,0x03,
+ 0x02,0x74,0x8A,0x90,0x45,0xB6,0xE0,0xFE,
+ 0xA3,0xE0,0x24,0xFC,0xF5,0x82,0x74,0x43,
+ 0x3E,0xF5,0x83,0xE0,0xFE,0x30,0xE7,0x0B,
+ 0x90,0x45,0xCC,0x74,0x01,0xF0,0xE4,0xA3,
+ 0xF0,0xFF,0x22,0x90,0x45,0xCC,0xE0,0x60,
+ 0x1A,0xE4,0xA3,0xF0,0x90,0x45,0xCC,0x04,
+ 0xF0,0xEE,0xB4,0x40,0x0E,0x90,0x45,0xB7,
+ 0xE0,0x24,0x07,0xF0,0x90,0x45,0xB6,0xE0,
+ 0x34,0x00,0xF0,0xE4,0x90,0x45,0xBE,0xF0,
+ 0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,
+ 0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0x90,0x45,
+ 0xB6,0xE0,0xFE,0xA3,0xE0,0xFF,0x24,0xFA,
+ 0xF5,0x82,0x74,0x43,0x3E,0xF5,0x83,0xE0,
+ 0xFD,0x90,0x45,0xC0,0xF0,0x74,0xFB,0x2F,
+ 0xF5,0x82,0x74,0x43,0x3E,0xF5,0x83,0xE0,
+ 0xFF,0x60,0x06,0x90,0x45,0xBE,0xF0,0x80,
+ 0x1D,0x90,0x45,0xB6,0xE0,0xFE,0xA3,0xE0,
+ 0x24,0xFC,0xF5,0x82,0x74,0x43,0x3E,0xF5,
+ 0x83,0xE0,0x30,0xE0,0x09,0x90,0x45,0xC0,
+ 0x74,0x9A,0xF0,0xA3,0xED,0xF0,0x7F,0x01,
+ 0x22,0x90,0x45,0xB7,0xE0,0x24,0x07,0xF0,
+ 0x90,0x45,0xB6,0xE0,0x34,0x00,0xF0,0x02,
+ 0x73,0xA5,0x7F,0x00,0x22,0x90,0x45,0xD4,
+ 0xEC,0xF0,0xA3,0xED,0xF0,0x90,0x45,0x77,
+ 0x74,0x01,0xF0,0x7E,0x00,0xA3,0x14,0xF0,
+ 0xA3,0xEF,0xF0,0x90,0x45,0xD4,0xE0,0xFF,
+ 0xA3,0xE0,0x90,0x45,0x7A,0xCF,0xF0,0xA3,
+ 0xEF,0xF0,0xA3,0xE4,0xF0,0xA3,0x04,0xF0,
+ 0xE4,0xFB,0x7D,0xAC,0x7F,0x02,0x12,0x56,
+ 0x45,0x22,0x90,0xDE,0xC3,0xE0,0x90,0xDE,
+ 0x41,0xF0,0xE4,0xA3,0xF0,0x7C,0xDE,0x7D,
+ 0xC0,0x90,0xDE,0xC0,0xE0,0x04,0xFB,0x7F,
+ 0x00,0x7E,0xF7,0x12,0x48,0x86,0x90,0xF4,
+ 0x10,0xE0,0x54,0xFE,0x44,0x01,0xF0,0x22,
+ 0x90,0xF6,0xA8,0xE0,0x12,0x80,0xB1,0x75,
+ 0x46,0x00,0x75,0x63,0x04,0x75,0x86,0x05,
+ 0x75,0xF5,0x0D,0x76,0x4E,0x10,0x75,0xBF,
+ 0x11,0x79,0x5B,0x18,0x79,0x89,0x19,0x78,
+ 0xAD,0x1A,0x78,0xBE,0x1B,0x75,0xF5,0x20,
+ 0x79,0x20,0x25,0x77,0x73,0x80,0x77,0x73,
+ 0x81,0x76,0xC1,0x82,0x76,0xC1,0x83,0x77,
+ 0x56,0x84,0x77,0x56,0x85,0x78,0xDD,0x86,
+ 0x77,0xFB,0x87,0x77,0xFB,0x88,0x79,0xB6,
+ 0x89,0x00,0x00,0x79,0xE4,0x7E,0xDE,0x7F,
+ 0x40,0x90,0xF7,0x00,0xE0,0x04,0xFB,0x7D,
+ 0x00,0x7C,0xF7,0x12,0x48,0x86,0x90,0xF7,
+ 0x00,0xE0,0x04,0x90,0xDD,0x86,0xF0,0x02,
+ 0x79,0xE7,0x90,0xF6,0xA9,0xE0,0x90,0x45,
+ 0xEE,0xF0,0x90,0xF6,0xAA,0xE0,0x90,0x45,
+ 0xEF,0xF0,0x90,0xF6,0xAB,0xE0,0x90,0x45,
+ 0xF0,0xF0,0x90,0xF6,0xAC,0xE0,0x90,0x45,
+ 0xF1,0xF0,0x02,0x79,0xE7,0x90,0x45,0x8C,
+ 0x74,0x05,0xF0,0x90,0xF6,0xA9,0xE0,0x90,
+ 0x45,0xF2,0xF0,0x90,0xF6,0xAB,0xE0,0x90,
+ 0x45,0xF3,0xF0,0x90,0xF6,0xAC,0xE0,0x90,
+ 0x45,0xF4,0xF0,0x90,0xF6,0xAD,0xE0,0x90,
+ 0x45,0xF5,0xF0,0x90,0xF6,0xAE,0xE0,0x90,
+ 0x45,0xF6,0xF0,0x90,0xF6,0xAA,0xE0,0x90,
+ 0x45,0xF7,0xF0,0x02,0x79,0xE7,0x7C,0x45,
+ 0x7D,0xDA,0x7B,0x01,0x7F,0x1C,0x7E,0x00,
+ 0x12,0x57,0x4C,0x90,0x45,0xDA,0xE0,0x54,
+ 0xF7,0xF0,0xE0,0xFF,0x90,0xF6,0xA9,0xE0,
+ 0xFE,0x33,0x33,0x33,0x54,0xF8,0xFE,0xEF,
+ 0x4E,0x90,0x45,0xDA,0xF0,0x7C,0x45,0x7D,
+ 0xDA,0xE4,0xFB,0x7F,0x1C,0xFE,0x12,0x57,
+ 0x4C,0x02,0x79,0xE7,0x90,0x42,0xE9,0xE0,
+ 0x60,0x08,0x90,0x45,0xD8,0x74,0x01,0xF0,
+ 0x80,0x06,0x90,0x45,0xD8,0x74,0x03,0xF0,
+ 0x90,0xF0,0x01,0x74,0x08,0xF0,0xA3,0x74,
+ 0x80,0xF0,0x90,0xF6,0xA8,0xE0,0x90,0xF0,
+ 0x03,0xF0,0xE4,0xA3,0xF0,0xA3,0xF0,0xA3,
+ 0xF0,0xA3,0xF0,0xA3,0x74,0x7F,0xF0,0x90,
+ 0xF6,0xA8,0xE0,0xF4,0x90,0xF0,0x09,0xF0,
+ 0x90,0x45,0xD8,0xE0,0xFF,0x90,0x45,0x8B,
+ 0xE0,0xFD,0x90,0x46,0x04,0x74,0x01,0xF0,
+ 0x7B,0x09,0x12,0x7E,0xD9,0x90,0x45,0xD7,
+ 0xEF,0xF0,0x02,0x79,0xE7,0x90,0x45,0x77,
+ 0x74,0x01,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,
+ 0x07,0xF0,0xA3,0x74,0x45,0xF0,0xA3,0x74,
+ 0xD6,0xF0,0xA3,0xE4,0xF0,0xA3,0x04,0xF0,
+ 0xFB,0x7D,0xC0,0x7F,0x02,0x12,0x56,0x45,
+ 0x90,0xF6,0xA9,0xE0,0x90,0x45,0xE2,0xF0,
+ 0x90,0x45,0xD6,0xE0,0x54,0xC3,0xF0,0xE0,
+ 0xFF,0x90,0x45,0xE2,0xE0,0xFE,0x25,0xE0,
+ 0x25,0xE0,0xFE,0xEF,0x4E,0x90,0x45,0xD6,
+ 0xF0,0x90,0x45,0x77,0x74,0x01,0xF0,0xA3,
+ 0xE4,0xF0,0xA3,0x74,0x07,0xF0,0xA3,0x74,
+ 0x45,0xF0,0xA3,0x74,0xD6,0xF0,0xA3,0xE4,
+ 0xF0,0xA3,0x04,0xF0,0xE4,0xFB,0x7D,0xC0,
+ 0x7F,0x02,0x12,0x56,0x45,0x90,0x45,0xE2,
+ 0xE0,0x90,0xF6,0xA1,0xF0,0x02,0x79,0xE7,
+ 0x90,0xF0,0x02,0x74,0x52,0xF0,0x90,0x45,
+ 0x77,0x74,0x01,0xF0,0xA3,0xE4,0xF0,0xA3,
+ 0x74,0x05,0xF0,0xA3,0x74,0x45,0xF0,0xA3,
+ 0x74,0xD6,0xF0,0xA3,0xE4,0xF0,0xA3,0x04,
+ 0xF0,0xFB,0x7D,0xC0,0x7F,0x02,0x12,0x56,
+ 0x45,0x90,0xF6,0xA8,0xE0,0xB4,0x82,0x0C,
+ 0x90,0x45,0xD9,0x74,0x01,0xF0,0x90,0x45,
+ 0xE3,0xF0,0x80,0x12,0x90,0xF6,0xA8,0xE0,
+ 0xB4,0x83,0x0B,0x90,0x45,0xD9,0x74,0x02,
+ 0xF0,0xE4,0x90,0x45,0xE3,0xF0,0x90,0x45,
+ 0xD6,0xE0,0x54,0xCF,0xF0,0xE0,0xFF,0x90,
+ 0x45,0xD9,0xE0,0xFE,0xC4,0x54,0xF0,0xFE,
+ 0xEF,0x4E,0x90,0x45,0xD6,0xF0,0x90,0x45,
+ 0x77,0x74,0x01,0xF0,0xA3,0xE4,0xF0,0xA3,
+ 0x74,0x05,0xF0,0xA3,0x74,0x45,0xF0,0xA3,
+ 0x74,0xD6,0xF0,0xA3,0xE4,0xF0,0xA3,0x04,
+ 0xF0,0xE4,0xFB,0x7D,0xC0,0x7F,0x02,0x12,
+ 0x56,0x45,0x90,0x45,0xD9,0xE0,0x90,0xF6,
+ 0xA1,0xF0,0x02,0x79,0xE7,0x90,0xF6,0xA8,
+ 0xE0,0xB4,0x84,0x0C,0x90,0xD8,0xCF,0xE0,
+ 0x54,0xFE,0x44,0x01,0xF0,0x02,0x79,0xE7,
+ 0x90,0xD8,0xCF,0xE0,0x54,0xFE,0xF0,0x02,
+ 0x79,0xE7,0x90,0x45,0x77,0x74,0x01,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0x74,0x20,0xF0,0xA3,
+ 0x74,0x45,0xF0,0xA3,0x74,0xD6,0xF0,0xA3,
+ 0xE4,0xF0,0xA3,0x04,0xF0,0xFB,0x7D,0xC0,
+ 0x7F,0x02,0x12,0x56,0x45,0x90,0xF6,0xA8,
+ 0xE0,0xB4,0x80,0x07,0xE4,0x90,0x45,0xE4,
+ 0xF0,0x80,0x0D,0x90,0xF6,0xA8,0xE0,0xB4,
+ 0x81,0x06,0x90,0x45,0xE4,0x74,0x01,0xF0,
+ 0x90,0x45,0xD6,0xE0,0x54,0x7F,0xF0,0xE0,
+ 0xFF,0x90,0x45,0xE4,0xE0,0xFE,0xC4,0x33,
+ 0x33,0x33,0x54,0x80,0xFE,0xEF,0x4E,0x90,
+ 0x45,0xD6,0xF0,0x90,0x45,0x77,0x74,0x01,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x20,0xF0,
+ 0xA3,0x74,0x45,0xF0,0xA3,0x74,0xD6,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0x04,0xF0,0xE4,0xFB,
+ 0x7D,0xC0,0x7F,0x02,0x12,0x56,0x45,0x90,
+ 0x45,0xE4,0xE0,0x90,0xF6,0xA1,0xF0,0x02,
+ 0x79,0xE7,0x90,0xF6,0x41,0xE0,0x24,0xCE,
+ 0x60,0x03,0x02,0x79,0xE7,0x90,0xF6,0xA8,
+ 0xE0,0x64,0x87,0x70,0x3D,0x90,0x45,0xD6,
+ 0xF0,0x7C,0x45,0x7D,0xD6,0x7F,0x44,0x12,
+ 0x74,0x9E,0x90,0x45,0xD6,0x74,0x28,0xF0,
+ 0x7C,0x45,0x7D,0xD6,0x7F,0x37,0x12,0x74,
+ 0x9E,0x90,0x45,0xD6,0x74,0x09,0xF0,0x7C,
+ 0x45,0x7D,0xD6,0x7F,0x2E,0x12,0x74,0x9E,
+ 0x90,0x45,0xD6,0x74,0x01,0xF0,0x7C,0x45,
+ 0x7D,0xD6,0x7F,0x2E,0x12,0x74,0x9E,0x02,
+ 0x79,0xE7,0x90,0xF6,0xA8,0xE0,0x64,0x88,
+ 0x60,0x03,0x02,0x79,0xE7,0x90,0x45,0xD6,
+ 0x74,0x02,0xF0,0x7C,0x45,0x7D,0xD6,0x7F,
+ 0x44,0x12,0x74,0x9E,0x90,0x45,0xD6,0x74,
+ 0x01,0xF0,0x7C,0x45,0x7D,0xD6,0x7F,0x47,
+ 0x12,0x74,0x9E,0x7C,0x45,0x7D,0xD6,0x7F,
+ 0x48,0x12,0x74,0x9E,0x90,0x45,0xD6,0x74,
+ 0x34,0xF0,0x7C,0x45,0x7D,0xD6,0x7F,0x37,
+ 0x12,0x74,0x9E,0x90,0x45,0xD6,0x74,0x09,
+ 0xF0,0x7C,0x45,0x7D,0xD6,0x7F,0x2E,0x12,
+ 0x74,0x9E,0x90,0x45,0xD6,0x74,0x01,0xF0,
+ 0x7C,0x45,0x7D,0xD6,0x7F,0x2E,0x12,0x74,
+ 0x9E,0x02,0x79,0xE7,0x90,0x45,0xFA,0x74,
+ 0x01,0xF0,0x12,0x7B,0x67,0xE4,0x90,0x45,
+ 0xFA,0xF0,0x02,0x79,0xE7,0x90,0x83,0xD0,
+ 0xE0,0xD3,0x94,0x01,0x40,0x04,0x7F,0x01,
+ 0x80,0x02,0x7F,0x00,0x90,0xF6,0xA1,0xEF,
+ 0xF0,0x90,0x45,0x8B,0xE0,0x90,0xF6,0xA2,
+ 0xF0,0x02,0x79,0xE7,0x90,0xF6,0xA9,0xE0,
+ 0xFF,0x90,0x45,0xDB,0x74,0x55,0xF0,0xEF,
+ 0xB4,0x01,0x06,0xA3,0x74,0x32,0xF0,0x80,
+ 0x06,0x90,0x45,0xDC,0x74,0xD2,0xF0,0x90,
+ 0x45,0x77,0x74,0x01,0xF0,0xA3,0xE4,0xF0,
+ 0xA3,0x74,0x3E,0xF0,0xA3,0x74,0x45,0xF0,
+ 0xA3,0x74,0xDB,0xF0,0xA3,0xE4,0xF0,0xA3,
+ 0x74,0x02,0xF0,0xE4,0xFB,0x7D,0xC0,0x7F,
+ 0x02,0x12,0x56,0x45,0x02,0x79,0xE7,0x90,
+ 0x83,0xE8,0x74,0x01,0xF0,0x90,0x45,0x77,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x62,0xF0,
+ 0xA3,0x74,0x45,0xF0,0xA3,0x74,0xDD,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0x74,0x02,0xF0,0x7B,
+ 0x01,0x7D,0xC0,0xFF,0x12,0x56,0x45,0x90,
+ 0x45,0xDD,0xE0,0x90,0xF6,0xA1,0xF0,0x90,
+ 0x45,0xDE,0xE0,0x90,0xF6,0xA2,0xF0,0x02,
+ 0x79,0xE7,0x90,0xF6,0xA9,0xE0,0x90,0x45,
+ 0xDF,0xF0,0x90,0x45,0x77,0x74,0x01,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0x74,0x13,0xF0,0xA3,
+ 0x74,0x45,0xF0,0xA3,0x74,0xDF,0xF0,0xA3,
+ 0xE4,0xF0,0xA3,0x04,0xF0,0xE4,0xFB,0x7D,
+ 0xC0,0x7F,0x02,0x12,0x56,0x45,0x80,0x5E,
+ 0x90,0x45,0x77,0x74,0x01,0xF0,0xA3,0xE4,
+ 0xF0,0xA3,0x74,0x13,0xF0,0xA3,0x74,0x45,
+ 0xF0,0xA3,0x74,0xE0,0xF0,0xA3,0xE4,0xF0,
+ 0xA3,0x04,0xF0,0xFB,0x7D,0xC0,0x7F,0x02,
+ 0x12,0x56,0x45,0x90,0x45,0xE0,0xE0,0x90,
+ 0xF6,0xA1,0xF0,0x80,0x31,0x90,0xF6,0xA9,
+ 0xE0,0x90,0x45,0xE1,0xF0,0x90,0x45,0x77,
+ 0x74,0x01,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,
+ 0x13,0xF0,0xA3,0x74,0x45,0xF0,0xA3,0x74,
+ 0xE1,0xF0,0xA3,0xE4,0xF0,0xA3,0x04,0xF0,
+ 0xE4,0xFB,0x7D,0xC0,0x7F,0x02,0x12,0x56,
+ 0x45,0x80,0x03,0x12,0x7B,0x63,0x53,0x91,
+ 0xDF,0x90,0xF6,0xDF,0xE0,0x54,0xFE,0xF0,
+ 0x22,0x44,0x45,0xE5,0x9E,0xBE,0xDE,0xFE,
+ 0x00,0xC2,0xE9,0x90,0x45,0xEE,0xE0,0xFF,
+ 0xA3,0xE0,0xFE,0xA3,0xE0,0xFD,0xA3,0xE0,
+ 0xFC,0xD2,0xE9,0x60,0x06,0xED,0xD3,0x94,
+ 0x02,0x40,0x06,0x90,0xF6,0xA5,0xE4,0xF0,
+ 0x22,0xED,0xD3,0x94,0x00,0x40,0x16,0xED,
+ 0xC4,0x54,0xF0,0xFC,0x74,0x37,0x9C,0xFC,
+ 0xEE,0xC4,0x54,0x0F,0xFB,0xC3,0xEC,0x9B,
+ 0x90,0xF6,0xA5,0xF0,0x22,0xEE,0xD3,0x94,
+ 0x0C,0x40,0x10,0xEE,0x13,0x13,0x13,0x54,
+ 0x1F,0xFC,0xC3,0x74,0x49,0x9C,0x90,0xF6,
+ 0xA5,0xF0,0x22,0xEE,0xD3,0x94,0x02,0x40,
+ 0x19,0xEE,0x25,0xE0,0xFC,0xC3,0x74,0x5F,
+ 0x9C,0xFC,0xEF,0xC4,0x13,0x13,0x13,0x54,
+ 0x01,0xFB,0xC3,0xEC,0x9B,0x90,0xF6,0xA5,
+ 0xF0,0x22,0xED,0xD3,0x94,0x10,0x40,0x1A,
+ 0xEE,0x25,0xE0,0x25,0xE0,0xFE,0xC3,0x74,
+ 0x64,0x9E,0xFE,0xEF,0xC4,0x13,0x13,0x54,
+ 0x03,0xFF,0xC3,0xEE,0x9F,0x90,0xF6,0xA5,
+ 0xF0,0x22,0x90,0xF6,0xA5,0x74,0x64,0xF0,
+ 0x22,0xC2,0xE9,0x90,0x45,0xF2,0xE0,0xFF,
+ 0x90,0x45,0xE9,0xF0,0x90,0x45,0xF3,0xE0,
+ 0x90,0x45,0xEA,0xF0,0x90,0x45,0xF4,0xE0,
+ 0xF9,0xA3,0xE0,0x90,0x45,0xEB,0xF0,0x90,
+ 0x45,0xF6,0xE0,0x90,0x45,0xEC,0xF0,0x90,
+ 0x45,0xF7,0xE0,0x90,0x45,0xED,0xF0,0xD2,
+ 0xE9,0xEF,0xD3,0x94,0x64,0x50,0x03,0x02,
+ 0x7B,0x4B,0x90,0x45,0xEB,0xE0,0xFF,0xE9,
+ 0x9F,0x50,0x1C,0xE9,0xFD,0xC3,0xEF,0x9D,
+ 0xFF,0xE4,0x94,0x00,0xFE,0xA3,0xE0,0xFD,
+ 0x7C,0x00,0x12,0x80,0x5D,0xC3,0xE4,0x9F,
+ 0xFB,0x74,0x1E,0x9E,0xFA,0x80,0x1C,0x90,
+ 0x45,0xEB,0xE0,0xFF,0xE9,0xC3,0x9F,0xFF,
+ 0xE4,0x94,0x00,0xFE,0xA3,0xE0,0xFD,0x7C,
+ 0x00,0x12,0x80,0x5D,0xE4,0x2F,0xFB,0xEE,
+ 0x34,0x1E,0xFA,0x90,0xF6,0x41,0xE0,0x64,
+ 0x23,0x70,0x31,0x90,0x45,0xE3,0xE0,0xB4,
+ 0x01,0x1C,0xAF,0x01,0x90,0x45,0xEA,0xE0,
+ 0x29,0xFF,0xE4,0x33,0xCF,0x24,0x71,0xCF,
+ 0x34,0xFF,0xFE,0x7C,0x00,0x7D,0x28,0x12,
+ 0x80,0x5D,0xAA,0x06,0xAB,0x07,0xEA,0xFF,
+ 0x90,0x45,0xE2,0xE0,0x2F,0x24,0x05,0x90,
+ 0xF6,0xA6,0xF0,0x22,0xEA,0x90,0xF6,0xA6,
+ 0xF0,0x22,0x90,0x45,0xE9,0xE0,0xFF,0xC3,
+ 0x74,0x64,0x9F,0x75,0xF0,0x06,0x84,0xFF,
+ 0x90,0x45,0xED,0xE0,0x2F,0x90,0xF6,0xA6,
+ 0xF0,0x22,0x22,0x7F,0x00,0x22,0x90,0xF1,
+ 0x03,0xE0,0x90,0x45,0x88,0xF0,0x90,0xF6,
+ 0xB5,0xE0,0x54,0xF7,0x44,0x08,0xF0,0xE0,
+ 0x54,0xF7,0xF0,0x90,0x45,0x88,0xE0,0x90,
+ 0xF1,0x03,0xF0,0x90,0xF7,0x00,0xE0,0x04,
+ 0xF5,0x0D,0xA3,0xE0,0x54,0x70,0xFF,0x74,
+ 0xFE,0x25,0x0D,0xF5,0x82,0xE4,0x34,0xF6,
+ 0xF5,0x83,0xE0,0x2F,0xF0,0x90,0xF7,0x01,
+ 0xE0,0x54,0x8F,0xF0,0x7E,0xF0,0x7F,0x01,
+ 0xAB,0x0D,0x7D,0x00,0x7C,0xF7,0x12,0x48,
+ 0x86,0x90,0x42,0xE9,0xE0,0x60,0x04,0x7F,
+ 0x01,0x80,0x02,0x7F,0x03,0x90,0x45,0xF8,
+ 0xEF,0xF0,0x90,0x45,0x8B,0xE0,0xFD,0x90,
+ 0x46,0x04,0x74,0x01,0xF0,0xAB,0x0D,0x12,
+ 0x7E,0xD9,0xEF,0x70,0x76,0x90,0xF7,0x00,
+ 0xE0,0xB4,0x03,0x0A,0xA3,0xE0,0xB4,0x02,
+ 0x05,0x75,0x0D,0x02,0x80,0x6C,0x90,0xF7,
+ 0x00,0xE0,0xB4,0x04,0x06,0xA3,0xE0,0x64,
+ 0x03,0x60,0x58,0x90,0xF7,0x00,0xE0,0xB4,
+ 0x04,0x0A,0xA3,0xE0,0xB4,0x04,0x05,0x75,
+ 0x0D,0x02,0x80,0x4E,0x90,0xF7,0x00,0xE0,
+ 0xB4,0x05,0x06,0xA3,0xE0,0x64,0x05,0x60,
+ 0x3A,0x90,0xF7,0x02,0xE0,0x60,0x1F,0x24,
+ 0xFE,0x60,0x1B,0x14,0x60,0x13,0x24,0xE1,
+ 0x60,0x1E,0x24,0xFD,0x60,0x0B,0x24,0xFB,
+ 0x60,0x0C,0x14,0x60,0x04,0x24,0x2A,0x70,
+ 0x14,0x75,0x0D,0x05,0x80,0x1C,0x90,0xF7,
+ 0x04,0xE0,0x24,0x05,0xF5,0x0D,0x80,0x12,
+ 0x75,0x0D,0x09,0x80,0x0D,0x12,0x7B,0x64,
+ 0xEF,0x70,0x07,0x90,0xF4,0x05,0x74,0x20,
+ 0xF0,0x22,0x90,0xF4,0x12,0xE5,0x0D,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0xE0,0x54,0xFC,0xF0,
+ 0xE4,0xF5,0x0E,0xF5,0x0F,0x90,0x45,0xF8,
+ 0xE0,0xFF,0x90,0x45,0x8B,0xE0,0x44,0x01,
+ 0xFD,0x90,0x46,0x04,0x74,0x01,0xF0,0xAB,
+ 0x0D,0x12,0x7E,0xD9,0x90,0x45,0xF9,0xEF,
+ 0xF0,0x60,0x14,0xE5,0x0F,0xF4,0x70,0x03,
+ 0xE5,0x0E,0xF4,0x60,0xBE,0x05,0x0F,0xE5,
+ 0x0F,0x70,0x02,0x05,0x0E,0x80,0xCE,0x7C,
+ 0xF0,0x7D,0x00,0xAB,0x0D,0x7F,0x00,0x7E,
+ 0xF7,0x12,0x48,0x86,0x90,0xF4,0x05,0x74,
+ 0x20,0xF0,0x90,0x45,0xFA,0xE0,0x70,0x28,
+ 0x90,0x42,0xE9,0xE0,0x60,0x1B,0x7E,0xDE,
+ 0x7F,0x40,0x90,0xF7,0x00,0xE0,0x04,0xFB,
+ 0x7D,0x00,0x7C,0xF7,0x12,0x48,0x86,0x90,
+ 0xF7,0x00,0xE0,0x04,0x90,0xDD,0x86,0xF0,
+ 0x22,0x90,0xF4,0x11,0xE0,0x54,0xFC,0xF0,
+ 0x22,0x05,0x16,0x85,0x16,0x16,0x05,0x16,
+ 0x85,0x16,0x16,0x05,0x16,0x85,0x16,0x16,
+ 0x05,0x16,0x85,0x16,0x16,0x05,0x16,0x05,
+ 0x16,0x90,0x83,0xF1,0xE0,0x90,0xF1,0x03,
+ 0xF0,0x12,0x4A,0x80,0x90,0x83,0xEE,0xE0,
+ 0xFF,0x90,0xF1,0x01,0xE0,0x8F,0xF0,0xA4,
+ 0xFF,0xAE,0xF0,0x90,0x83,0xEF,0xE0,0x7C,
+ 0x00,0x2F,0xF5,0x13,0xEC,0x3E,0xF5,0x12,
+ 0xE4,0xF5,0x14,0xF5,0x10,0xF5,0x11,0xC3,
+ 0xE5,0x11,0x95,0x13,0xE5,0x10,0x95,0x12,
+ 0x50,0x74,0xE5,0x11,0x45,0x10,0x70,0x20,
+ 0x90,0xF1,0x02,0xE0,0x54,0xFE,0x44,0x01,
+ 0xF0,0x90,0x83,0xFE,0xE0,0x54,0xFE,0x44,
+ 0x01,0xF0,0xE0,0x54,0xFE,0xF0,0xE0,0x54,
+ 0xFE,0x44,0x01,0xF0,0xE0,0x54,0xFE,0xF0,
+ 0xE5,0x14,0x25,0xE0,0x24,0xF4,0xF5,0x82,
+ 0xE4,0x34,0x83,0xF5,0x83,0xE0,0xFE,0xA3,
+ 0xE0,0xFF,0x12,0x4A,0x1B,0x7E,0x00,0xE5,
+ 0x11,0x54,0x01,0x24,0xF0,0xF5,0x82,0xEE,
+ 0x34,0x83,0xF5,0x83,0xE0,0x90,0xF1,0x03,
+ 0xF0,0x90,0x83,0xFE,0xE0,0x54,0xFE,0x44,
+ 0x01,0xF0,0xE0,0x54,0xFE,0xF0,0x05,0x11,
+ 0xE5,0x11,0x70,0x02,0x05,0x10,0x74,0xFB,
+ 0x25,0x14,0xF5,0x82,0xE4,0x34,0x45,0xF5,
+ 0x83,0xE0,0xF5,0x14,0x80,0x81,0xE4,0x22,
+ 0xE4,0xFF,0x90,0x83,0xF3,0xE0,0xFE,0x90,
+ 0x83,0xF2,0xE0,0xFD,0x2E,0x14,0xFE,0xEF,
+ 0xC3,0x9E,0x50,0x12,0xEF,0x04,0xFE,0x74,
+ 0xFB,0x2F,0xF5,0x82,0xE4,0x34,0x45,0xF5,
+ 0x83,0xEE,0xF0,0x0F,0x80,0xDC,0x74,0xFB,
+ 0x2F,0xF5,0x82,0xE4,0x34,0x45,0xF5,0x83,
+ 0xED,0xF0,0x22,0xE4,0x90,0x83,0xED,0xF0,
+ 0xA3,0x74,0x02,0xF0,0xA3,0x14,0xF0,0xA3,
+ 0x74,0xFF,0xF0,0xA3,0x74,0x07,0xF0,0xA3,
+ 0x74,0x01,0xF0,0xA3,0x04,0xF0,0xA3,0x14,
+ 0xF0,0xA3,0x74,0x63,0xF0,0xA3,0x74,0x03,
+ 0xF0,0xA3,0x74,0x40,0xF0,0xA3,0xE4,0xF0,
+ 0xA3,0x74,0x24,0xF0,0x22,0x12,0x7D,0xD4,
+ 0xE4,0x90,0x83,0xE8,0xF0,0x90,0x46,0x07,
+ 0x74,0xAE,0xF0,0x12,0x7F,0xD8,0xD2,0x88,
+ 0xE4,0x90,0x45,0xFA,0xF0,0x12,0x7F,0xF3,
+ 0x22,0x90,0xF1,0x01,0xE0,0x04,0xFF,0xF0,
+ 0x24,0x00,0xF5,0x82,0xE4,0x34,0xF0,0xF5,
+ 0x83,0x74,0xFF,0xF0,0x90,0xF1,0x03,0x74,
+ 0x1A,0xF0,0x90,0x83,0xFE,0x74,0x01,0xF0,
+ 0xE4,0xF0,0x90,0xF1,0x02,0xE0,0x54,0xFE,
+ 0x44,0x01,0xF0,0x90,0x46,0x05,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x12,0x4A,0x1B,0x90,0xF6,
+ 0xB5,0xE0,0x54,0xF7,0x44,0x08,0xF0,0xE0,
+ 0x54,0xF7,0xF0,0x90,0x45,0x89,0xE4,0xF0,
+ 0xA3,0x04,0xF0,0x22,0x7E,0x00,0x7C,0x03,
+ 0x7D,0xA8,0x12,0x80,0x5D,0xE4,0x2F,0xFF,
+ 0xEE,0x34,0x04,0x90,0x46,0x05,0xF0,0xA3,
+ 0xEF,0xF0,0x22,0x90,0x83,0xE8,0xE0,0x60,
+ 0x06,0x14,0xF0,0x12,0x7E,0x22,0x22,0x90,
+ 0x83,0xE3,0xE0,0xB4,0x01,0x04,0x12,0x7F,
+ 0x43,0x22,0x90,0x83,0xED,0xE0,0x70,0x34,
+ 0x90,0xF1,0x04,0xE0,0x54,0x0C,0xFF,0xBF,
+ 0x08,0x18,0x90,0xF6,0xA7,0xE0,0x70,0x08,
+ 0x90,0xF1,0x03,0x74,0x1A,0xF0,0x80,0x12,
+ 0x90,0xF6,0xA7,0xE0,0x90,0xF1,0x03,0xF0,
+ 0x80,0x08,0x90,0x45,0x88,0xE0,0x90,0xF1,
+ 0x03,0xF0,0x90,0xF1,0x02,0xE0,0x54,0xFE,
+ 0x44,0x01,0xF0,0x22,0x12,0x7C,0xDA,0x22,
+ 0x90,0x46,0x01,0xEF,0xF0,0xAA,0x05,0xE4,
+ 0xF5,0x15,0x90,0x83,0xE8,0xE0,0x60,0x0E,
+ 0x75,0x15,0x01,0xAF,0x03,0x12,0x7E,0x6D,
+ 0xC2,0xAF,0xC2,0xDD,0x80,0x13,0x90,0x83,
+ 0xED,0xE0,0x64,0x01,0x60,0x07,0x90,0x83,
+ 0xE3,0xE0,0xB4,0x01,0x04,0xC2,0xAF,0xC2,
+ 0xDD,0x90,0x46,0x01,0xE0,0xFF,0xAE,0x02,
+ 0xAD,0x06,0x90,0x46,0x04,0xE0,0x90,0x45,
+ 0x86,0xF0,0x12,0x57,0x8C,0xD2,0xDD,0xD2,
+ 0xAF,0xE5,0x15,0x70,0x07,0x90,0x83,0xE3,
+ 0xE0,0xB4,0x01,0x02,0xE4,0xFF,0x90,0x83,
+ 0xE3,0xE0,0x60,0x0D,0x90,0x46,0x01,0xE0,
+ 0xB4,0x02,0x06,0x90,0x83,0xE3,0xE0,0x14,
+ 0xF0,0x22,0x90,0xF6,0xFF,0xE0,0x54,0xEF,
+ 0xF0,0xE0,0x54,0xFB,0xF0,0x90,0xF1,0x03,
+ 0x74,0x07,0xF0,0x90,0xF1,0x02,0xE0,0x54,
+ 0xFE,0x44,0x01,0xF0,0x90,0x83,0xE4,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0x12,0x4A,0x1B,0x90,
+ 0x83,0xFE,0xE0,0x54,0xFE,0x44,0x01,0xF0,
+ 0xE0,0x54,0xFE,0xF0,0x90,0xF6,0xB5,0xE0,
+ 0x54,0xF7,0x44,0x08,0xF0,0xE0,0x54,0xF7,
+ 0xF0,0x90,0xF6,0xFF,0xE0,0x54,0xFD,0x44,
+ 0x02,0xF0,0x90,0x83,0xE6,0xE0,0xFE,0xA3,
+ 0xE0,0xFF,0x12,0x4A,0x1B,0x90,0xF6,0xFF,
+ 0xE0,0x54,0xFB,0x44,0x04,0xF0,0x7F,0x01,
+ 0x7E,0x00,0x12,0x4A,0x1B,0x90,0xF6,0xFF,
+ 0xE0,0x54,0xFB,0xF0,0xE0,0x54,0xF7,0x44,
+ 0x08,0xF0,0x7F,0x01,0x7E,0x00,0x12,0x4A,
+ 0x1B,0x90,0xF6,0xFF,0xE0,0x54,0xFD,0xF0,
+ 0x7F,0x01,0x7E,0x00,0x12,0x4A,0x1B,0x90,
+ 0xF6,0xFF,0xE0,0x54,0xF7,0xF0,0x90,0x45,
+ 0x89,0xE4,0xF0,0xA3,0x04,0xF0,0x22,0xE4,
+ 0x90,0x83,0xE3,0xF0,0xA3,0x74,0x08,0xF0,
+ 0xA3,0x74,0x60,0xF0,0xA3,0x74,0x28,0xF0,
+ 0xA3,0x74,0x07,0xF0,0x22,0xC2,0xAF,0xC2,
+ 0xDD,0x22,0x90,0x12,0x22,0xE0,0x90,0x83,
+ 0xD0,0xF0,0xC3,0x94,0x7F,0x40,0x22,0x90,
+ 0x38,0x4F,0xE0,0xB4,0xFF,0x07,0x90,0x83,
+ 0xD0,0x74,0x02,0xF0,0x22,0x90,0x83,0xD1,
+ 0xE0,0xB4,0xC3,0x07,0x90,0x83,0xD0,0x74,
+ 0x11,0xF0,0x22,0x90,0x83,0xD0,0x74,0x01,
+ 0xF0,0x22,0x90,0x42,0xE9,0xE0,0x60,0x04,
+ 0x12,0x55,0xDB,0x22,0x7F,0x01,0x22,0xBB,
+ 0x01,0x0C,0xE5,0x82,0x29,0xF5,0x82,0xE5,
+ 0x83,0x3A,0xF5,0x83,0xE0,0x22,0x50,0x06,
+ 0xE9,0x25,0x82,0xF8,0xE6,0x22,0xBB,0xFE,
+ 0x06,0xE9,0x25,0x82,0xF8,0xE2,0x22,0xE5,
+ 0x82,0x29,0xF5,0x82,0xE5,0x83,0x3A,0xF5,
+ 0x83,0xE4,0x93,0x22,0xEF,0x8D,0xF0,0xA4,
+ 0xA8,0xF0,0xCF,0x8C,0xF0,0xA4,0x28,0xCE,
+ 0x8D,0xF0,0xA4,0x2E,0xFE,0x22,0xC5,0xF0,
+ 0xF8,0xA3,0xE0,0x28,0xF0,0xC5,0xF0,0xF8,
+ 0xE5,0x82,0x15,0x82,0x70,0x02,0x15,0x83,
+ 0xE0,0x38,0xF0,0x22,0xA3,0xF8,0xE0,0xC5,
+ 0xF0,0x25,0xF0,0xF0,0xE5,0x82,0x15,0x82,
+ 0x70,0x02,0x15,0x83,0xE0,0xC8,0x38,0xF0,
+ 0xE8,0x22,0xEB,0x9F,0xF5,0xF0,0xEA,0x9E,
+ 0x42,0xF0,0xE9,0x9D,0x42,0xF0,0xEC,0x64,
+ 0x80,0xC8,0x64,0x80,0x98,0x45,0xF0,0x22,
+ 0xD0,0x83,0xD0,0x82,0xF8,0xE4,0x93,0x70,
+ 0x12,0x74,0x01,0x93,0x70,0x0D,0xA3,0xA3,
+ 0x93,0xF8,0x74,0x01,0x93,0xF5,0x82,0x88,
+ 0x83,0xE4,0x73,0x74,0x02,0x93,0x68,0x60,
+ 0xEF,0xA3,0xA3,0xA3,0x80,0xDF,0x8A,0x83,
+ 0x89,0x82,0xE4,0x73,0xE7,0x09,0xF6,0x08,
+ 0xDF,0xFA,0x80,0x46,0xE7,0x09,0xF2,0x08,
+ 0xDF,0xFA,0x80,0x3E,0x88,0x82,0x8C,0x83,
+ 0xE7,0x09,0xF0,0xA3,0xDF,0xFA,0x80,0x32,
+ 0xE3,0x09,0xF6,0x08,0xDF,0xFA,0x80,0x6E,
+ 0xE3,0x09,0xF2,0x08,0xDF,0xFA,0x80,0x66,
+ 0x88,0x82,0x8C,0x83,0xE3,0x09,0xF0,0xA3,
+ 0xDF,0xFA,0x80,0x5A,0x89,0x82,0x8A,0x83,
+ 0xE0,0xA3,0xF6,0x08,0xDF,0xFA,0x80,0x4E,
+ 0x89,0x82,0x8A,0x83,0xE0,0xA3,0xF2,0x08,
+ 0xDF,0xFA,0x80,0x42,0x80,0xD2,0x80,0xFA,
+ 0x80,0xC6,0x80,0xD4,0x80,0x55,0x80,0xF2,
+ 0x80,0x29,0x80,0x10,0x80,0xA6,0x80,0xEA,
+ 0x80,0x9A,0x80,0xA8,0x80,0xDA,0x80,0xE2,
+ 0x80,0xCA,0x80,0x29,0x88,0x84,0x8C,0x85,
+ 0x89,0x82,0x8A,0x83,0xE4,0x93,0xA3,0x05,
+ 0x86,0xF0,0xA3,0x05,0x86,0xDF,0xF5,0xDE,
+ 0xF3,0x80,0x0B,0x89,0x82,0x8A,0x83,0xE4,
+ 0x93,0xA3,0xF6,0x08,0xDF,0xF9,0xEC,0xFA,
+ 0xA9,0xF0,0xED,0xFB,0x22,0x88,0x84,0x8C,
+ 0x85,0x89,0x82,0x8A,0x83,0xE0,0xA3,0x05,
+ 0x86,0xF0,0xA3,0x05,0x86,0xDF,0xF6,0xDE,
+ 0xF4,0x80,0xE3,0x89,0x82,0x8A,0x83,0xE4,
+ 0x93,0xA3,0xF2,0x08,0xDF,0xF9,0x80,0xD6,
+ 0x88,0xF0,0xEF,0x60,0x01,0x0E,0x4E,0x60,
+ 0xCD,0x88,0xF0,0xED,0x24,0x02,0xB4,0x04,
+ 0x00,0x50,0xC3,0xF5,0x82,0xEB,0x24,0x02,
+ 0xB4,0x04,0x00,0x50,0xB9,0x23,0x23,0x45,
+ 0x82,0x23,0x90,0x81,0x2D,0x73,0x7F,0xEE,
+ 0x5A,0xCF,0x5B,0xC3,0x64,0x8F,0x49,0x60,
+ 0x6D,0xEE,0x4F,0x3B,0x64,0x90,0x64,0x91,
+ 0x74,0xF9,0x64,0x92,0x64,0x93,0x4F,0x3F,
+ 0x12,0x01,0x00,0x02,0x00,0x00,0x00,0x40,
+ 0xA4,0x15,0x35,0x90,0x00,0x02,0x00,0x00,
+ 0x00,0x01,0x0A,0x06,0x00,0x02,0x00,0x00,
+ 0x00,0x40,0x01,0x00,0x09,0x07,0x35,0x00,
+ 0x01,0x01,0x00,0x80,0xFA,0x09,0x02,0x35,
+ 0x00,0x01,0x01,0x00,0x80,0xFA,0x09,0x04,
+ 0x00,0x00,0x05,0xFF,0x00,0x00,0x00,0x07,
+ 0x05,0x81,0x02,0x40,0x00,0x00,0x07,0x05,
+ 0x02,0x02,0x40,0x00,0x00,0x07,0x05,0x84,
+ 0x02,0x40,0x00,0x00,0x07,0x05,0x85,0x02,
+ 0x40,0x00,0x00,0x07,0x05,0x86,0x01,0x00,
+ 0x00,0x01,0x09,0x04,0x00,0x01,0x05,0xFF,
+ 0x00,0x00,0x00,0x07,0x05,0x81,0x02,0x40,
+ 0x00,0x00,0x07,0x05,0x02,0x02,0x40,0x00,
+ 0x00,0x07,0x05,0x84,0x02,0x40,0x00,0x00,
+ 0x07,0x05,0x85,0x02,0x40,0x00,0x00,0x07,
+ 0x05,0x86,0x01,0x00,0x14,0x01,0x09,0x04,
+ 0x01,0x00,0x01,0x03,0x00,0x01,0x00,0x09,
+ 0x21,0x01,0x01,0x00,0x01,0x22,0x41,0x00,
+ 0x07,0x05,0x83,0x03,0x40,0x00,0x10,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x05,0x01,0x09,0x06,0xA1,
+ 0x01,0x05,0x07,0x19,0xE0,0x29,0xE7,0x15,
+ 0x00,0x25,0x01,0x95,0x08,0x75,0x01,0x81,
+ 0x02,0x95,0x08,0x75,0x01,0x81,0x01,0x05,
+ 0x08,0x19,0x01,0x29,0x03,0x95,0x03,0x75,
+ 0x01,0x91,0x02,0x95,0x01,0x75,0x05,0x91,
+ 0x01,0x05,0x07,0x19,0x00,0x2A,0xFF,0x00,
+ 0x15,0x00,0x26,0xFF,0x00,0x95,0x06,0x75,
+ 0x08,0x81,0x00,0xC0,
+
+ 0x01,0x83,0xE9,0x00,0x04,0x11,0x7C,0x0B,
+ 0x16,0x0C,0x00,
+
+ 0x02,0x41,0x00,0x00,0x03,0xFA,0xBE,0x02,
+ 0x46,0x0C,
+
+ 0x02,0x45,0x50,0x63,0xC7,0xE6,0x57,0x44,
+ 0x41,0x91,0x05,0x42,0x0C,0x00,0x4E,0x42,
+ 0xB8,0x99,0x46,0x01,0xE9,0x50,0x06,0xC6,
+ 0xB3,0xB0,0xB0,0xAE,0xA8,0x9E,0x74,0x4E,
+ 0x42,0xC6,0x02,0x02,0x02,0x01,0x01,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x4E,0x42,0xD4,0x00,0x00,0x00,0x03,0x05,
+ 0x08,0x0C,0x0F,0x10,0x10,0x10,0x0D,0x0B,
+ 0x05,0x5C,0x42,0xE2,0x00,0x00,0x00,0x99,
+ 0x00,0x00,0x00,0xE8,0x00,0x4B,0x00,0xFC,
+ 0x00,0xAE,0x00,0x8B,0x00,0x79,0x00,0x70,
+ 0x00,0x6C,0x00,0x6B,0x00,0x6B,0x00,0x14,
+ 0x5C,0x42,0xFE,0x00,0x03,0x00,0x02,0x00,
+ 0x02,0x00,0x01,0x00,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,
+ 0x43,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x01,0x00,0x01,0x00,0x02,0x00,0x03,
+ 0x00,0x03,0x00,0x04,0x00,0x05,0x00,0x05,
+ 0x00,0x06,0x00,0x06,0x00,0x03,0x48,0x44,
+ 0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x50,0x44,0x7F,0x02,0x39,0x04,0xEE,
+ 0x08,0xFB,0x0E,0xAA,0x10,0xD5,0x13,0x0D,
+ 0x14,0xC9,0x18,0xFE,0x43,0x44,0xAB,0x40,
+ 0x5B,0x00,0x00,0x78,0x7F,0xE4,0xF6,0xD8,
+ 0xFD,0x75,0x81,0x32,0x02,0x46,0x53,0x02,
+ 0x6F,0x69,0xE4,0x93,0xA3,0xF8,0xE4,0x93,
+ 0xA3,0x40,0x03,0xF6,0x80,0x01,0xF2,0x08,
+ 0xDF,0xF4,0x80,0x29,0xE4,0x93,0xA3,0xF8,
+ 0x54,0x07,0x24,0x0C,0xC8,0xC3,0x33,0xC4,
+ 0x54,0x0F,0x44,0x20,0xC8,0x83,0x40,0x04,
+ 0xF4,0x56,0x80,0x01,0x46,0xF6,0xDF,0xE4,
+ 0x80,0x0B,0x01,0x02,0x04,0x08,0x10,0x20,
+ 0x40,0x80,0x90,0x45,0x50,0xE4,0x7E,0x01,
+ 0x93,0x60,0xBC,0xA3,0xFF,0x54,0x3F,0x30,
+ 0xE5,0x09,0x54,0x1F,0xFE,0xE4,0x93,0xA3,
+ 0x60,0x01,0x0E,0xCF,0x54,0xC0,0x25,0xE0,
+ 0x60,0xA8,0x40,0xB8,0xE4,0x93,0xA3,0xFA,
+ 0xE4,0x93,0xA3,0xF8,0xE4,0x93,0xA3,0xC8,
+ 0xC5,0x82,0xC8,0xCA,0xC5,0x83,0xCA,0xF0,
+ 0xA3,0xC8,0xC5,0x82,0xC8,0xCA,0xC5,0x83,
+ 0xCA,0xDF,0xE9,0xDE,0xE7,0x80,0xBE,0xC0,
+ 0xE0,0x75,0xE0,0x00,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x02,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x04,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x06,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x08,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x0A,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x0C,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x0E,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x10,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x12,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x14,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x16,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x18,0x02,0x47,0x00,0xC0,
+ 0xD0,0x75,0xD0,0x00,0xC0,0x86,0x75,0x86,
+ 0x00,0xC0,0x83,0xC0,0x82,0xC0,0x85,0xC0,
+ 0x84,0xC0,0xF0,0xC0,0x00,0xC0,0x01,0xC0,
+ 0x02,0xC0,0x03,0xC0,0x04,0xC0,0x05,0xC0,
+ 0x06,0xC0,0x07,0x90,0xAD,0x41,0xF9,0x93,
+ 0xFA,0xE9,0x04,0x93,0xF9,0x12,0xAA,0xCC,
+ 0xD0,0x07,0xD0,0x06,0xD0,0x05,0xD0,0x04,
+ 0xD0,0x03,0xD0,0x02,0xD0,0x01,0xD0,0x00,
+ 0xD0,0xF0,0xD0,0x84,0xD0,0x85,0xD0,0x82,
+ 0xD0,0x83,0xD0,0x86,0xD0,0xD0,0xD0,0xE0,
+ 0x32,0xC2,0x8C,0xC2,0x8D,0xEF,0x42,0x89,
+ 0xEA,0xF4,0xF5,0x8C,0xEB,0xF4,0xF5,0x8A,
+ 0x53,0x8E,0xF7,0xAF,0x05,0xEF,0x33,0x33,
+ 0x33,0x54,0xF8,0x42,0x8E,0xD2,0x8C,0x30,
+ 0x8D,0xFD,0xC2,0x8D,0x22,0xAB,0x07,0xAA,
+ 0x06,0xE4,0xFD,0x7F,0x01,0x12,0x47,0x52,
+ 0x22,0xC2,0xCA,0x43,0x8E,0x08,0xE4,0x90,
+ 0x42,0x5E,0xF0,0xA3,0xF0,0x90,0x42,0x60,
+ 0xF0,0xA3,0xF0,0xD2,0xAD,0xF5,0xC9,0xC2,
+ 0xC9,0xC2,0xCD,0xC2,0xCC,0xC2,0xC8,0xC2,
+ 0xCE,0xC2,0xCB,0x75,0xCA,0xAA,0x75,0xCB,
+ 0xF2,0xD2,0xCA,0x22,0xAB,0x07,0x90,0xF1,
+ 0x1D,0x74,0x01,0xF0,0xE4,0xF0,0xED,0x90,
+ 0xF1,0x18,0xF0,0xEC,0xA3,0xF0,0x90,0xF1,
+ 0x1B,0xEB,0xF0,0x90,0xF1,0x1A,0x74,0x01,
+ 0xF0,0x22,0x22,0xC2,0xAF,0x90,0x41,0x03,
+ 0x74,0x02,0xF0,0xA3,0x74,0x46,0xF0,0xA3,
+ 0x74,0x98,0xF0,0x90,0x41,0x0B,0x74,0x02,
+ 0xF0,0xA3,0x74,0x46,0xF0,0xA3,0x74,0xA0,
+ 0xF0,0x90,0x41,0x13,0x74,0x02,0xF0,0xA3,
+ 0x74,0x46,0xF0,0xA3,0x74,0xA8,0xF0,0x90,
+ 0x41,0x1B,0x74,0x02,0xF0,0xA3,0x74,0x46,
+ 0xF0,0xA3,0x74,0xB0,0xF0,0x90,0x41,0x23,
+ 0x74,0x02,0xF0,0xA3,0x74,0x46,0xF0,0xA3,
+ 0x74,0xB8,0xF0,0x90,0x41,0x2B,0x74,0x02,
+ 0xF0,0xA3,0x74,0x46,0xF0,0xA3,0x74,0xC0,
+ 0xF0,0x90,0x41,0x33,0x74,0x02,0xF0,0xA3,
+ 0x74,0x46,0xF0,0xA3,0x74,0xC8,0xF0,0x90,
+ 0x41,0x3B,0x74,0x02,0xF0,0xA3,0x74,0x46,
+ 0xF0,0xA3,0x74,0xD0,0xF0,0x90,0x41,0x43,
+ 0x74,0x02,0xF0,0xA3,0x74,0x46,0xF0,0xA3,
+ 0x74,0xD8,0xF0,0x90,0x41,0x4B,0x74,0x02,
+ 0xF0,0xA3,0x74,0x46,0xF0,0xA3,0x74,0xE0,
+ 0xF0,0x90,0x41,0x53,0x74,0x02,0xF0,0xA3,
+ 0x74,0x46,0xF0,0xA3,0x74,0xE8,0xF0,0x90,
+ 0x41,0x5B,0x74,0x02,0xF0,0xA3,0x74,0x46,
+ 0xF0,0xA3,0x74,0xF0,0xF0,0x90,0x41,0x63,
+ 0x74,0x02,0xF0,0xA3,0x74,0x46,0xF0,0xA3,
+ 0x74,0xF8,0xF0,0x90,0x47,0xCB,0x74,0x32,
+ 0xF0,0xD2,0xAF,0x22,0xE4,0x90,0x42,0x46,
+ 0xF0,0x12,0x6E,0x75,0x90,0xF7,0x3C,0xE0,
+ 0x70,0x03,0x12,0x9C,0x73,0xE4,0x90,0x41,
+ 0xD2,0xF0,0x90,0x41,0xD1,0xF0,0x04,0x12,
+ 0x72,0x28,0x22,0xC2,0xAF,0x90,0xF7,0x3D,
+ 0xE4,0xF0,0xFF,0x7E,0x28,0x12,0x47,0x76,
+ 0xD2,0xAF,0x22,0xE4,0x90,0x42,0x47,0xF0,
+ 0x90,0x42,0x46,0xF0,0x90,0x44,0x97,0xF0,
+ 0x22,0x05,0x2C,0x12,0x48,0xBC,0x12,0x48,
+ 0x8D,0x90,0x41,0xEB,0xE0,0x90,0xF0,0x76,
+ 0xF0,0x90,0x43,0x38,0x74,0x01,0xF0,0x90,
+ 0x43,0x3D,0xF0,0x90,0x43,0x39,0xF0,0xE4,
+ 0x90,0x43,0x3C,0xF0,0x90,0x41,0xE1,0xE0,
+ 0xB4,0x01,0x14,0x90,0x43,0x50,0x74,0x01,
+ 0xF0,0x12,0x68,0xE0,0x12,0x67,0x79,0x90,
+ 0xFB,0xA8,0x74,0x01,0xF0,0x80,0x16,0x90,
+ 0xFB,0xA8,0xE4,0xF0,0x12,0x67,0x6B,0xE4,
+ 0x90,0x43,0x50,0xF0,0x90,0x42,0x4B,0xE0,
+ 0x60,0x03,0x12,0x88,0x8B,0xE4,0x90,0x41,
+ 0xE1,0xF0,0x12,0xA8,0x8B,0x22,0xEF,0x24,
+ 0x04,0x90,0xFE,0x00,0xF0,0x90,0xFE,0x03,
+ 0xE0,0x90,0xFE,0x01,0xF0,0xA3,0xED,0xF0,
+ 0xEF,0x24,0x05,0x90,0xFB,0x90,0xF0,0xA3,
+ 0xE4,0xF0,0xA3,0xF0,0x22,0xAD,0x07,0x75,
+ 0x0A,0x01,0x75,0x0B,0xFE,0x75,0x0C,0x01,
+ 0xE4,0xF5,0x08,0xF5,0x09,0xED,0x60,0x3B,
+ 0xB4,0x01,0x16,0xAB,0x0A,0xAA,0x0B,0xA9,
+ 0x0C,0x12,0xA9,0x1B,0xFE,0xE4,0x25,0x09,
+ 0xF5,0x09,0xEE,0x35,0x08,0xF5,0x08,0x80,
+ 0x22,0x85,0x0C,0x82,0x85,0x0B,0x83,0xE0,
+ 0xFE,0xA3,0xE0,0x25,0x09,0xF5,0x09,0xEE,
+ 0x35,0x08,0xF5,0x08,0x74,0x02,0x25,0x0C,
+ 0xF5,0x0C,0xE4,0x35,0x0B,0xF5,0x0B,0x1D,
+ 0x1D,0x80,0xC2,0xAE,0x08,0xAF,0x09,0x22,
+ 0x90,0x42,0x63,0xEE,0xF0,0xA3,0xEF,0xF0,
+ 0x75,0x0D,0xFE,0x75,0x0E,0x03,0xED,0x60,
+ 0x2C,0x90,0x42,0x63,0xE0,0xFE,0xA3,0xE0,
+ 0xF5,0x82,0x8E,0x83,0xE0,0x85,0x0E,0x82,
+ 0x85,0x0D,0x83,0xF0,0x90,0x42,0x64,0xE0,
+ 0x04,0xF0,0x70,0x06,0x90,0x42,0x63,0xE0,
+ 0x04,0xF0,0x05,0x0E,0xE5,0x0E,0x70,0x02,
+ 0x05,0x0D,0x1D,0x80,0xD1,0x22,0xE4,0x90,
+ 0x42,0x6C,0xF0,0x90,0xFE,0x01,0xE0,0x54,
+ 0x7F,0x90,0x44,0x96,0xF0,0x90,0xFE,0x08,
+ 0xE0,0xFF,0xA3,0xE0,0x90,0x42,0x69,0xCF,
+ 0xF0,0xA3,0xEF,0xF0,0x12,0x88,0x8B,0x90,
+ 0x44,0x96,0xE0,0xFB,0x60,0x0F,0x90,0xFE,
+ 0x02,0xE0,0xFD,0xA3,0xE0,0x90,0x42,0x69,
+ 0xCD,0xF0,0xA3,0xED,0xF0,0x90,0x42,0x69,
+ 0xE0,0xFC,0xA3,0xE0,0xFD,0xC3,0xEC,0x94,
+ 0x40,0x50,0x12,0x90,0x41,0x8C,0xE0,0x2D,
+ 0xFE,0x90,0x41,0x8B,0xE0,0x3C,0x90,0x42,
+ 0x69,0xF0,0xA3,0xCE,0xF0,0x90,0xFE,0x00,
+ 0xE0,0x64,0x03,0x70,0x29,0xEB,0x64,0x02,
+ 0x70,0x24,0x04,0xF0,0x90,0x42,0x69,0xE0,
+ 0xFE,0xA3,0xE0,0xF5,0x82,0x8E,0x83,0xE0,
+ 0x90,0xFE,0x01,0xF0,0x90,0xFB,0x90,0x74,
+ 0x02,0xF0,0xA3,0xE4,0xF0,0xA3,0xF0,0x90,
+ 0x42,0x6C,0xF0,0x02,0x4C,0x28,0x90,0xFE,
+ 0x00,0xE0,0x64,0x04,0x70,0x43,0x90,0x44,
+ 0x96,0xE0,0x64,0x03,0x70,0x3B,0x90,0x41,
+ 0x8B,0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x42,
+ 0x69,0xE0,0xB5,0x06,0x11,0xA3,0xE0,0xB5,
+ 0x07,0x0C,0x12,0x48,0xCA,0x90,0x42,0x6C,
+ 0x74,0x03,0xF0,0x02,0x4C,0x28,0x90,0xFE,
+ 0x04,0xE0,0xFF,0x90,0x42,0x69,0xE0,0xFC,
+ 0xA3,0xE0,0xF5,0x82,0x8C,0x83,0xEF,0xF0,
+ 0x90,0x42,0x6C,0x74,0x02,0xF0,0x02,0x4C,
+ 0x28,0x90,0x42,0x67,0x74,0xFE,0xF0,0xA3,
+ 0x74,0x0A,0xF0,0x90,0xFE,0x00,0xE0,0xFF,
+ 0x24,0xFF,0xF5,0x82,0xE4,0x34,0xFD,0xF5,
+ 0x83,0xE0,0xFC,0xA3,0xE0,0xF4,0xFD,0xEC,
+ 0xF4,0x90,0x42,0x65,0xF0,0xA3,0xED,0xF0,
+ 0xEF,0x24,0xFE,0xFF,0x12,0x49,0x46,0x90,
+ 0x42,0x65,0xE0,0x6E,0x70,0x03,0xA3,0xE0,
+ 0x6F,0x60,0x09,0x90,0x42,0x6C,0x74,0x02,
+ 0xF0,0x02,0x4C,0x28,0x90,0x41,0x8B,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0x90,0x42,0x69,0xE0,
+ 0xB5,0x06,0x27,0xA3,0xE0,0xB5,0x07,0x22,
+ 0x12,0x48,0xCA,0x90,0x42,0x6C,0x74,0x01,
+ 0xF0,0xE4,0xFD,0xFF,0x12,0x49,0x27,0x90,
+ 0xFE,0x01,0xE0,0xFE,0xA3,0xE0,0xF4,0xFF,
+ 0xEE,0xF4,0xA3,0xF0,0xA3,0xEF,0xF0,0x02,
+ 0x4C,0x28,0x90,0xFE,0x04,0xE0,0xFF,0x90,
+ 0x42,0x6B,0xF0,0x90,0xFE,0x01,0xE0,0x54,
+ 0x3F,0xFC,0xA3,0xE0,0xFD,0xEC,0x60,0x03,
+ 0x02,0x4C,0x80,0xED,0x60,0x59,0x24,0xF8,
+ 0x60,0x55,0x14,0x60,0x15,0x24,0xFC,0x70,
+ 0x03,0x02,0x4C,0x1F,0x24,0xEB,0x70,0x03,
+ 0x02,0x4B,0xD4,0x24,0x21,0x60,0x03,0x02,
+ 0x4C,0x80,0xEF,0x60,0x23,0x1F,0x90,0x42,
+ 0x67,0xE0,0xFC,0xA3,0xE0,0x2F,0xF5,0x82,
+ 0xE4,0x3C,0xF5,0x83,0xE0,0xFE,0x90,0x42,
+ 0x69,0xE0,0xFC,0xA3,0xE0,0x2F,0xF5,0x82,
+ 0xE4,0x3C,0xF5,0x83,0xEE,0xF0,0x80,0xDA,
+ 0x85,0x2C,0x2C,0x05,0x2C,0x05,0x2C,0x12,
+ 0xA7,0x48,0x05,0x2C,0x85,0x2C,0x2C,0x05,
+ 0x2C,0x85,0x2C,0x2C,0x02,0x4C,0x28,0x90,
+ 0x42,0x6B,0xE0,0xFF,0xE4,0xFD,0x12,0x49,
+ 0x27,0x90,0x42,0x69,0xE0,0xFE,0xA3,0xE0,
+ 0xFF,0xA3,0xE0,0xFD,0x12,0x49,0x99,0x90,
+ 0xFE,0x00,0xE0,0x24,0xFE,0xFF,0x12,0x49,
+ 0x46,0xEF,0xF4,0xFF,0xEE,0xF4,0xFE,0x90,
+ 0xFE,0x00,0xE0,0x24,0xFF,0xF5,0x82,0xE4,
+ 0x34,0xFD,0xF5,0x83,0xEE,0xF0,0xA3,0xEF,
+ 0xF0,0x80,0x54,0xE4,0xFD,0x7F,0x04,0x12,
+ 0x49,0x27,0x90,0x41,0x91,0xE0,0x90,0xFE,
+ 0x03,0xF0,0x90,0x41,0x92,0xE0,0x90,0xFE,
+ 0x04,0xF0,0x90,0x41,0x93,0xE0,0x90,0xFE,
+ 0x05,0xF0,0x90,0x41,0x94,0xE0,0x90,0xFE,
+ 0x06,0xF0,0x90,0xFE,0x00,0xE0,0x24,0xFE,
+ 0xFF,0x12,0x49,0x46,0xEF,0xF4,0xFF,0xEE,
+ 0xF4,0xFE,0x90,0xFE,0x00,0xE0,0x24,0xFF,
+ 0xF5,0x82,0xE4,0x34,0xFD,0xF5,0x83,0xEE,
+ 0xF0,0xA3,0xEF,0xF0,0x80,0x09,0x90,0xFB,
+ 0x86,0x74,0x01,0xF0,0x12,0x8A,0x16,0x90,
+ 0xFB,0x86,0x74,0x01,0xF0,0x90,0x42,0x6C,
+ 0xE0,0xFF,0x64,0x02,0x60,0x24,0xEF,0x64,
+ 0x03,0x60,0x1F,0x90,0xF9,0x9F,0xE0,0x60,
+ 0x14,0x90,0xFB,0x88,0xE0,0x64,0x01,0x60,
+ 0xF8,0x90,0xFB,0x96,0xE4,0xF0,0x90,0xFB,
+ 0x88,0x04,0xF0,0x80,0x05,0x90,0xFB,0x93,
+ 0xE4,0xF0,0x90,0x42,0x6C,0xE0,0xFF,0x64,
+ 0x01,0x60,0x04,0xEF,0xB4,0x03,0x18,0x85,
+ 0x2C,0x2C,0x85,0x2C,0x2C,0x12,0x68,0xE0,
+ 0xE4,0xF5,0x0F,0x7B,0x01,0x7A,0x43,0x79,
+ 0x49,0x7D,0x01,0xFC,0x12,0xAD,0x13,0x22,
+ 0x90,0xFB,0x86,0xE0,0x60,0x32,0x90,0x43,
+ 0x51,0xE0,0x70,0x24,0x90,0xFE,0x00,0xE0,
+ 0x24,0x01,0xFF,0xE4,0x33,0xFE,0x90,0xFB,
+ 0x82,0xE0,0xC3,0x9F,0xEE,0x64,0x80,0xF8,
+ 0x74,0x80,0x98,0x50,0x0B,0xE0,0xF4,0x60,
+ 0x07,0x90,0xFB,0x86,0x74,0x01,0xF0,0x22,
+ 0x90,0xFB,0x82,0xE4,0xF0,0x12,0x49,0xD7,
+ 0x22,0xC2,0x8C,0x22,0x22,0x22,0x22,0x22,
+ 0x22,0x22,0xD2,0xAF,0x90,0x42,0x6D,0xE0,
+ 0x04,0xF0,0x12,0x63,0xAC,0x90,0xF5,0xBE,
+ 0x74,0x01,0xF0,0x12,0x62,0x71,0x90,0x44,
+ 0x98,0x74,0x01,0xF0,0x90,0x42,0x6D,0xE0,
+ 0x64,0xAF,0x70,0x31,0x90,0xF5,0xC1,0xE0,
+ 0x70,0x04,0x90,0x42,0x96,0xF0,0x90,0xF5,
+ 0xBA,0xE0,0x70,0x04,0x90,0x42,0x97,0xF0,
+ 0x90,0x42,0x97,0xE0,0x70,0x17,0x90,0x42,
+ 0x96,0xE0,0x70,0x11,0x90,0xF5,0xB9,0x04,
+ 0xF0,0x90,0xF5,0xC0,0xF0,0xD2,0xE9,0x90,
+ 0x44,0x98,0xF0,0xD2,0xEA,0x12,0x88,0x8B,
+ 0x53,0x91,0xDF,0xD2,0xAF,0x22,0x90,0xF7,
+ 0x79,0x74,0x01,0xF0,0xA3,0xF0,0xA3,0xF0,
+ 0xA3,0xF0,0x90,0xF7,0x6A,0xF0,0x90,0xF7,
+ 0x74,0xF0,0x90,0xF0,0x09,0xF0,0x90,0xF7,
+ 0x7D,0xF0,0x90,0xF5,0xB9,0xF0,0x90,0xF5,
+ 0xBE,0xF0,0x90,0xF5,0xC0,0xF0,0x22,0xD2,
+ 0xAF,0x90,0xF7,0x7D,0xE0,0x64,0x01,0x70,
+ 0x57,0x90,0xF7,0x32,0xE0,0x60,0x03,0x12,
+ 0x9B,0x0B,0x90,0xF7,0x3C,0xE0,0x60,0x03,
+ 0x02,0x4E,0x18,0x90,0xF5,0xA9,0xE0,0x60,
+ 0x03,0x02,0x4E,0x18,0x90,0xF7,0x32,0xE0,
+ 0xB4,0x01,0x10,0x90,0xF7,0x7B,0xE0,0xB4,
+ 0x01,0x09,0x90,0x43,0x3C,0x74,0x02,0xF0,
+ 0x12,0x9C,0x7C,0x90,0xF7,0x31,0xE0,0x64,
+ 0x01,0x60,0x03,0x02,0x4E,0x18,0x90,0xF7,
+ 0x7C,0xE0,0x64,0x01,0x60,0x03,0x02,0x4E,
+ 0x18,0x90,0x44,0x97,0x04,0xF0,0x90,0xF7,
+ 0x49,0xE0,0x90,0x44,0x99,0xF0,0x80,0x6F,
+ 0x90,0x44,0x98,0xE0,0x64,0x01,0x70,0x67,
+ 0x90,0xF5,0xB9,0xE0,0x64,0x01,0x70,0x29,
+ 0x90,0xF5,0xB3,0x04,0xF0,0x90,0xF4,0x60,
+ 0xE0,0x70,0x05,0x12,0x67,0x0D,0x80,0x0F,
+ 0x90,0xF4,0x60,0xE0,0xB4,0x01,0x05,0x12,
+ 0x67,0x1D,0x80,0x03,0x12,0x67,0x2D,0x90,
+ 0xF5,0xB3,0xE4,0xF0,0x90,0x42,0x97,0x04,
+ 0xF0,0x90,0xF5,0xC0,0xE0,0x64,0x01,0x70,
+ 0x29,0x90,0xF5,0xBD,0x04,0xF0,0x90,0xF4,
+ 0x60,0xE0,0x70,0x05,0x12,0x67,0x3D,0x80,
+ 0x0F,0x90,0xF4,0x60,0xE0,0xB4,0x01,0x05,
+ 0x12,0x67,0x4B,0x80,0x03,0x12,0x67,0x5C,
+ 0x90,0xF5,0xBD,0xE4,0xF0,0x90,0x42,0x96,
+ 0x04,0xF0,0xE4,0x90,0x42,0x6D,0xF0,0x12,
+ 0x4D,0x1F,0x53,0x91,0xBF,0xE4,0x90,0x44,
+ 0x98,0xF0,0xD2,0xEA,0xD2,0xE9,0xD2,0xAF,
+ 0x22,0x90,0xF5,0x52,0x74,0x3F,0xF0,0x90,
+ 0xF5,0x54,0x74,0x01,0xF0,0x90,0xF7,0x0E,
+ 0xF0,0x22,0x90,0x43,0xC3,0x74,0x01,0xF0,
+ 0x90,0x44,0xBC,0x74,0x05,0xF0,0x90,0x43,
+ 0x42,0x74,0x01,0xF0,0x12,0xA9,0x0F,0x12,
+ 0xA8,0xA6,0x53,0x91,0x7F,0x12,0xA7,0x32,
+ 0x22,0x90,0xF7,0x11,0xE4,0xF0,0x7F,0xFF,
+ 0x7E,0x66,0x12,0x47,0x76,0x90,0x44,0x98,
+ 0x74,0x01,0xF0,0xD2,0xEA,0x90,0xF7,0x11,
+ 0xF0,0x22,0xC2,0xAF,0xC2,0xDB,0x90,0xFB,
+ 0x7F,0xE0,0x70,0x09,0x90,0xFB,0x87,0xF0,
+ 0x90,0xFB,0xAF,0x04,0xF0,0xD2,0xAF,0x22,
+ 0xC2,0xE9,0xC2,0xEA,0xD2,0xA8,0xD2,0xAF,
+ 0x90,0x43,0x3A,0xE0,0x60,0x12,0x90,0xF9,
+ 0x57,0xE0,0x54,0xFD,0x44,0x02,0xF0,0xE0,
+ 0x54,0xFD,0xF0,0xE4,0x90,0x43,0x3A,0xF0,
+ 0x90,0xF5,0xA9,0x74,0x01,0xF0,0x90,0xF0,
+ 0x71,0xE4,0xF0,0x90,0xF1,0xE9,0xF0,0x90,
+ 0xF0,0xD5,0xF0,0x90,0xF0,0xE3,0xF0,0x90,
+ 0xF0,0xE2,0xF0,0x90,0xF1,0xEA,0xF0,0x90,
+ 0xF1,0xEF,0xF0,0x90,0xF1,0xF2,0xF0,0x90,
+ 0xF1,0xF7,0xF0,0x90,0xF1,0xFB,0xF0,0x90,
+ 0xF5,0xAF,0xF0,0xA3,0xF0,0xA3,0xF0,0x90,
+ 0xF5,0xBB,0xF0,0x90,0xF5,0xA8,0xF0,0x90,
+ 0xF5,0xAC,0xF0,0x90,0xF5,0xC8,0xF0,0x90,
+ 0xF4,0x71,0xF0,0x90,0xF9,0x0B,0xF0,0x90,
+ 0xF5,0xE7,0xF0,0x90,0xF5,0xE1,0xF0,0x90,
+ 0xF4,0x71,0xF0,0x90,0xF5,0xD7,0xF0,0x90,
+ 0xF6,0x25,0xF0,0x90,0xFD,0xA2,0xF0,0x90,
+ 0xF1,0xE8,0x04,0xF0,0x90,0xF0,0x6C,0xF0,
+ 0x90,0xF1,0x75,0xF0,0x90,0xF1,0x31,0xF0,
+ 0xE4,0x90,0x43,0x80,0xF0,0x90,0xF1,0xF6,
+ 0x04,0xF0,0x90,0xF1,0xFA,0xF0,0x90,0xF1,
+ 0xF3,0xF0,0x90,0xF1,0xF0,0xF0,0x90,0xF0,
+ 0x7D,0xF0,0x90,0xF1,0xEB,0xF0,0x90,0xF5,
+ 0xC2,0xF0,0x90,0xF5,0xB3,0xF0,0x90,0xF5,
+ 0xBD,0xF0,0x90,0xF1,0xE8,0xF0,0xE4,0xF0,
+ 0x90,0xF0,0x6C,0xF0,0x90,0xF1,0x75,0xF0,
+ 0x90,0xF1,0x31,0xF0,0x90,0xF1,0xFA,0xF0,
+ 0x90,0x41,0xBE,0xE0,0x90,0xF1,0xA3,0xF0,
+ 0x90,0x41,0xBF,0xE0,0x90,0xF1,0xA4,0xF0,
+ 0x90,0x41,0xC0,0xE0,0x90,0xF1,0xA5,0xF0,
+ 0x90,0xF6,0x21,0x74,0x02,0xF0,0x90,0xF6,
+ 0x23,0xF0,0x90,0xF5,0xC6,0xE4,0xF0,0xA3,
+ 0xF0,0x90,0xF5,0xC3,0xF0,0xA3,0xF0,0x90,
+ 0x41,0xB6,0xE0,0x90,0xF1,0x54,0xF0,0x90,
+ 0x41,0xB7,0xE0,0x90,0xF1,0x55,0xF0,0x90,
+ 0x41,0xB8,0xE0,0x90,0xF1,0x52,0xF0,0x90,
+ 0x41,0xB9,0xE0,0x90,0xF1,0x53,0xF0,0x90,
+ 0xF1,0x93,0xE4,0xF0,0x90,0xF1,0x69,0x74,
+ 0x08,0xF0,0x90,0xF1,0x5F,0x74,0x02,0xF0,
+ 0x90,0xF1,0x4E,0x74,0x40,0xF0,0x74,0xFF,
+ 0xF0,0x90,0xF1,0x85,0xE4,0xF0,0x90,0xF1,
+ 0x2F,0x04,0xF0,0x90,0xFD,0x02,0xF0,0x90,
+ 0xFD,0x0F,0x74,0x07,0xF0,0x90,0xF7,0x0F,
+ 0xE4,0xF0,0x90,0xF7,0x8A,0x74,0x0F,0xF0,
+ 0x90,0xF7,0x98,0x74,0x0D,0xF0,0x90,0xF7,
+ 0x8B,0x74,0x01,0xF0,0x90,0xFD,0x29,0xE4,
+ 0xF0,0x90,0xFD,0xA5,0xF0,0x90,0xF5,0x52,
+ 0x74,0x3F,0xF0,0xA3,0x74,0x05,0xF0,0x90,
+ 0x44,0x9A,0x74,0x0A,0xF0,0x90,0xF0,0x71,
+ 0x74,0x01,0xF0,0x90,0xF7,0x15,0xF0,0x90,
+ 0xF9,0x0E,0xF0,0x90,0xF5,0x06,0x74,0x04,
+ 0xF0,0x90,0xF7,0x3C,0xE0,0x70,0x04,0x90,
+ 0xF7,0x2F,0xF0,0x12,0x9C,0x73,0x90,0xF7,
+ 0x34,0xE4,0xF0,0x90,0xF7,0x33,0xF0,0x90,
+ 0xF7,0x35,0x74,0x05,0xF0,0xA3,0xF0,0x90,
+ 0xF7,0x39,0x74,0xFF,0xF0,0xA3,0x74,0x9C,
+ 0xF0,0x90,0xF7,0x7E,0x74,0x01,0xF0,0x90,
+ 0xFD,0x00,0xF0,0x90,0xFD,0x90,0x74,0x03,
+ 0xF0,0x90,0xF2,0x17,0x74,0xFE,0xF0,0x90,
+ 0xF0,0x42,0x04,0xF0,0xA3,0xF0,0xA3,0x74,
+ 0x07,0xF0,0xA3,0xF0,0x90,0xF7,0x74,0x74,
+ 0x01,0xF0,0x90,0xF7,0x6A,0xF0,0x12,0x4D,
+ 0x1F,0x90,0xF7,0x3E,0x74,0x01,0xF0,0x90,
+ 0xF7,0x3C,0xE0,0x70,0x0B,0x90,0x44,0x98,
+ 0xF0,0xD2,0xEA,0x90,0xF7,0x76,0x04,0xF0,
+ 0x90,0xF7,0x37,0x74,0xDC,0xF0,0xA3,0x74,
+ 0x05,0xF0,0x90,0xFD,0xA2,0xE4,0xF0,0xA3,
+ 0xF0,0xA3,0x74,0x05,0xF0,0x90,0xF5,0x4D,
+ 0x74,0x01,0xF0,0x90,0xF5,0x41,0xE4,0xF0,
+ 0xA3,0x74,0x02,0xF0,0x90,0xF6,0x5C,0xE4,
+ 0xF0,0xA3,0xF0,0x90,0xF0,0x5F,0x04,0xF0,
+ 0x90,0x42,0x0E,0xE0,0x90,0xF0,0x06,0xF0,
+ 0x90,0xF0,0x58,0xE4,0xF0,0xF0,0x90,0x42,
+ 0x2F,0xF0,0x90,0x42,0x3C,0x74,0xFF,0xF0,
+ 0x90,0x44,0x47,0xF0,0x90,0x44,0x40,0xF0,
+ 0x90,0xFD,0x29,0xE4,0xF0,0x90,0xF9,0xE5,
+ 0x74,0x1E,0xF0,0xA3,0x74,0x05,0xF0,0xA3,
+ 0xE4,0xF0,0x90,0x42,0x41,0x74,0xFF,0xF0,
+ 0x22,0x90,0xFD,0x15,0x74,0x08,0xF0,0xA3,
+ 0x74,0x10,0xF0,0xA3,0xE4,0xF0,0x90,0xFD,
+ 0x05,0x04,0xF0,0x90,0xFD,0x2B,0xF0,0x90,
+ 0xFD,0x2A,0xF0,0x90,0x42,0x6E,0xEF,0xF0,
+ 0xE4,0x90,0x42,0x3D,0xF0,0x90,0xFD,0x29,
+ 0xF0,0x90,0xFD,0x2C,0x04,0xF0,0xFF,0x12,
+ 0x6D,0xE8,0x90,0xFD,0x2C,0xE4,0xF0,0x22,
+ 0x90,0xF4,0xC1,0xE0,0x14,0x60,0x46,0x14,
+ 0x60,0x7C,0x24,0x02,0x60,0x03,0x02,0x51,
+ 0xED,0x90,0xFD,0x19,0x74,0xCA,0xF0,0xA3,
+ 0x74,0x08,0xF0,0xA3,0x74,0x4A,0xF0,0xA3,
+ 0x74,0x0A,0xF0,0xA3,0x74,0xCA,0xF0,0xA3,
+ 0x74,0x0C,0xF0,0xA3,0x74,0x4A,0xF0,0xA3,
+ 0x74,0x10,0xF0,0xA3,0x74,0xCA,0xF0,0xA3,
+ 0x74,0x14,0xF0,0xA3,0x74,0x4A,0xF0,0xA3,
+ 0x74,0x1A,0xF0,0xA3,0x74,0xCA,0xF0,0xA3,
+ 0x74,0x20,0xF0,0x80,0x6F,0x90,0xFD,0x19,
+ 0x74,0x80,0xF0,0xA3,0xE4,0xF0,0xA3,0xF0,
+ 0xA3,0x74,0x02,0xF0,0xA3,0x74,0x20,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0x74,0xE8,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0x74,0xB0,0xF0,
+ 0xA3,0x74,0x04,0xF0,0xA3,0x74,0xDC,0xF0,
+ 0xA3,0x74,0x05,0xF0,0xA3,0x74,0x34,0xF0,
+ 0xA3,0x74,0x08,0xF0,0x80,0x36,0x90,0xFD,
+ 0x19,0x74,0x7D,0xF0,0xA3,0xE4,0xF0,0xA3,
+ 0x74,0xB4,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,
+ 0xC8,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0xFA,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x2C,0xF0,
+ 0xA3,0x74,0x01,0xF0,0xA3,0x74,0x52,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0x74,0x34,0xF0,
+ 0xA3,0x74,0x08,0xF0,0xE4,0xFD,0xED,0x75,
+ 0xF0,0x02,0xA4,0x24,0x19,0xFF,0xE5,0xF0,
+ 0x34,0xFD,0xFE,0x8F,0x82,0xF5,0x83,0xE0,
+ 0xF9,0xA3,0xE0,0xFC,0x90,0xF9,0x00,0xE0,
+ 0x70,0x18,0xEC,0x54,0x0F,0xFB,0xC4,0x54,
+ 0xF0,0xFB,0xE9,0xC4,0x54,0x0F,0x4B,0x8F,
+ 0x82,0x8E,0x83,0xF0,0xEC,0xC4,0x54,0x0F,
+ 0xA3,0xF0,0x90,0xF9,0x00,0xE0,0x64,0x02,
+ 0x70,0x1D,0xEC,0x54,0x0F,0xFB,0x25,0xE0,
+ 0x25,0xE0,0xFB,0xAA,0x01,0xEA,0x13,0x13,
+ 0x54,0x3F,0x4B,0x8F,0x82,0x8E,0x83,0xF0,
+ 0xEC,0x13,0x13,0x54,0x3F,0xA3,0xF0,0x0D,
+ 0xED,0xB4,0x07,0xA2,0x22,0x90,0xF5,0xC8,
+ 0xE4,0xF0,0x90,0xF5,0x75,0xF0,0x90,0xF5,
+ 0x74,0xF0,0x90,0xF1,0xD0,0xF0,0xA3,0xF0,
+ 0xA3,0xF0,0x90,0xF5,0x6E,0x74,0x0A,0xF0,
+ 0x90,0xF5,0x71,0x74,0x02,0xF0,0xA3,0x74,
+ 0x27,0xF0,0xA3,0xE4,0xF0,0x90,0x42,0x43,
+ 0xE0,0x64,0x01,0x60,0x03,0x02,0x53,0x06,
+ 0x90,0xF5,0xF7,0xE0,0xFE,0x90,0xF5,0xF6,
+ 0xE0,0x7C,0x00,0x24,0x00,0xFF,0xEC,0x3E,
+ 0xFE,0xEF,0x78,0x06,0xCE,0xC3,0x13,0xCE,
+ 0x13,0xD8,0xF9,0x90,0x42,0x6F,0xF0,0x90,
+ 0xF9,0x00,0xE0,0xB4,0x01,0x0C,0x90,0x42,
+ 0x6F,0xE0,0xFF,0x13,0x13,0x54,0x3F,0xF0,
+ 0x80,0x0F,0x90,0xF9,0x00,0xE0,0xB4,0x02,
+ 0x08,0x90,0x42,0x6F,0xE0,0xFF,0xC3,0x13,
+ 0xF0,0x90,0x42,0x6F,0xE0,0xFF,0xC3,0x94,
+ 0x04,0x40,0x05,0x74,0x03,0xF0,0x80,0x21,
+ 0xEF,0xC3,0x94,0x02,0x40,0x08,0x90,0x42,
+ 0x6F,0x74,0x02,0xF0,0x80,0x13,0xEF,0xC3,
+ 0x94,0x01,0x40,0x08,0x90,0x42,0x6F,0x74,
+ 0x01,0xF0,0x80,0x05,0xE4,0x90,0x42,0x6F,
+ 0xF0,0x90,0x42,0x6F,0xE0,0xFF,0x90,0xF9,
+ 0x01,0xE0,0xC3,0x9F,0x50,0x0F,0xE0,0x90,
+ 0x42,0x6F,0xF0,0x80,0x08,0x90,0xF9,0x01,
+ 0xE0,0x90,0x42,0x6F,0xF0,0x90,0x42,0x6F,
+ 0xE0,0x14,0x60,0x0F,0x14,0x60,0x11,0x14,
+ 0x60,0x13,0x24,0x03,0x70,0x12,0x12,0x53,
+ 0x52,0x80,0x0D,0x12,0x54,0x6F,0x80,0x08,
+ 0x12,0x55,0x88,0x80,0x03,0x12,0x56,0xAC,
+ 0x90,0xF9,0x01,0xE0,0x14,0x60,0x0E,0x14,
+ 0x60,0x0F,0x14,0x60,0x10,0x24,0x03,0x70,
+ 0x0F,0x12,0x54,0x07,0x22,0x12,0x55,0x20,
+ 0x22,0x12,0x56,0x48,0x22,0x12,0x57,0x5E,
+ 0x22,0x90,0xF5,0x76,0x74,0x20,0xF0,0xA3,
+ 0x74,0x01,0xF0,0xA3,0x74,0x22,0xF0,0xA3,
+ 0x74,0x02,0xF0,0xA3,0x74,0xFF,0xF0,0xA3,
+ 0x74,0x01,0xF0,0xA3,0x74,0x7E,0xF0,0xA3,
+ 0x74,0x02,0xF0,0xA3,0x74,0xA0,0xF0,0xA3,
+ 0xE4,0xF0,0xA3,0x74,0x51,0xF0,0xA3,0xE4,
+ 0xF0,0xA3,0xF0,0xA3,0x74,0x03,0xF0,0xA3,
+ 0x74,0x40,0xF0,0xA3,0x74,0x01,0xF0,0xA3,
+ 0x74,0xED,0xF0,0xA3,0x74,0x02,0xF0,0xA3,
+ 0x74,0xA1,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,
+ 0xDF,0xF0,0xA3,0x74,0x03,0xF0,0xA3,0x74,
+ 0xC1,0xF0,0xA3,0x74,0x03,0xF0,0xA3,0x74,
+ 0x68,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x9F,
+ 0xF0,0xA3,0x74,0x03,0xF0,0xA3,0x74,0x3E,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0xE8,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0x74,0xFF,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0x74,0x0A,0xF0,
+ 0xA3,0xE4,0xF0,0x90,0xF9,0x00,0xE0,0x70,
+ 0x0A,0x90,0xF5,0x9E,0x74,0x3F,0xF0,0xA3,
+ 0xE4,0xF0,0x22,0x90,0xF9,0x00,0xE0,0xB4,
+ 0x01,0x0A,0x90,0xF5,0x9E,0x74,0xFB,0xF0,
+ 0xA3,0xE4,0xF0,0x22,0x90,0xF5,0x9E,0x74,
+ 0x7D,0xF0,0xA3,0xE4,0xF0,0x22,0x90,0xF5,
+ 0x6C,0x74,0x40,0xF0,0xA3,0x74,0x07,0xF0,
+ 0x90,0xF9,0x00,0xE0,0x70,0x16,0x90,0xF5,
+ 0x6A,0xF0,0xA3,0x74,0x05,0xF0,0x90,0xF5,
+ 0x70,0x74,0x03,0xF0,0x90,0xF5,0x6F,0x74,
+ 0x01,0xF0,0x80,0x32,0x90,0xF9,0x00,0xE0,
+ 0xB4,0x01,0x16,0x90,0xF5,0x6A,0xE4,0xF0,
+ 0xA3,0x74,0x04,0xF0,0x90,0xF5,0x70,0x04,
+ 0xF0,0x90,0xF5,0x6F,0x74,0x03,0xF0,0x80,
+ 0x15,0x90,0xF5,0x6A,0xE4,0xF0,0xA3,0x74,
+ 0x0A,0xF0,0x90,0xF5,0x70,0x74,0x04,0xF0,
+ 0x90,0xF5,0x6F,0x74,0x02,0xF0,0x90,0xFD,
+ 0x27,0x74,0x03,0xF0,0x90,0xFD,0x31,0x74,
+ 0x40,0xF0,0xA3,0xE4,0xF0,0x22,0x90,0xF5,
+ 0x76,0x74,0x72,0xF0,0xA3,0x74,0x01,0xF0,
+ 0xA3,0xF0,0xA3,0x04,0xF0,0xA3,0x74,0x5C,
+ 0xF0,0xA3,0x74,0x01,0xF0,0xA3,0xE4,0xF0,
+ 0xA3,0xF0,0xA3,0x74,0xCD,0xF0,0xA3,0x74,
+ 0x02,0xF0,0xA3,0x74,0x8E,0xF0,0xA3,0x74,
+ 0x01,0xF0,0xA3,0x04,0xF0,0xA3,0x04,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0xF0,0xA3,0x74,0xC3,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x16,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0x74,0x89,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,
+ 0x74,0xA9,0xF0,0xA3,0x74,0x03,0xF0,0xA3,
+ 0x74,0x5D,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,
+ 0xD0,0xF0,0xA3,0x74,0x03,0xF0,0xA3,0xE4,
+ 0xF0,0xA3,0xF0,0xA3,0x74,0x15,0xF0,0xA3,
+ 0xE4,0xF0,0xA3,0x74,0xEF,0xF0,0xA3,0x74,
+ 0x03,0xF0,0x90,0xF5,0x6C,0x74,0x80,0xF0,
+ 0xA3,0x74,0x06,0xF0,0x90,0xF9,0x00,0xE0,
+ 0x70,0x0A,0x90,0xF5,0x9E,0x74,0x3F,0xF0,
+ 0xA3,0xE4,0xF0,0x22,0x90,0xF9,0x00,0xE0,
+ 0xB4,0x01,0x0A,0x90,0xF5,0x9E,0x74,0xFB,
+ 0xF0,0xA3,0xE4,0xF0,0x22,0x90,0xF5,0x9E,
+ 0x74,0x7D,0xF0,0xA3,0xE4,0xF0,0x22,0x90,
+ 0xF5,0x6C,0x74,0x80,0xF0,0xA3,0x74,0x06,
+ 0xF0,0x90,0xF9,0x00,0xE0,0x70,0x16,0x90,
+ 0xF5,0x6A,0xF0,0xA3,0x74,0x0A,0xF0,0x90,
+ 0xF5,0x70,0x74,0x04,0xF0,0x90,0xF5,0x6F,
+ 0x74,0x02,0xF0,0x80,0x32,0x90,0xF9,0x00,
+ 0xE0,0xB4,0x01,0x17,0x90,0xF5,0x6A,0xE4,
+ 0xF0,0xA3,0x74,0x08,0xF0,0x90,0xF5,0x70,
+ 0x74,0x06,0xF0,0x90,0xF5,0x6F,0x74,0x04,
+ 0xF0,0x80,0x14,0x90,0xF5,0x6A,0xE4,0xF0,
+ 0xA3,0x74,0x04,0xF0,0x90,0xF5,0x70,0x04,
+ 0xF0,0x90,0xF5,0x6F,0x74,0x03,0xF0,0x90,
+ 0xFD,0x27,0x74,0x04,0xF0,0x90,0xFD,0x31,
+ 0x74,0x80,0xF0,0xA3,0xE4,0xF0,0x22,0x90,
+ 0xF5,0x76,0x74,0xFF,0xF0,0xA3,0x74,0x01,
+ 0xF0,0xA3,0x74,0x9E,0xF0,0xA3,0x74,0x03,
+ 0xF0,0xA3,0x74,0x31,0xF0,0xA3,0x74,0x02,
+ 0xF0,0xA3,0x74,0xB0,0xF0,0xA3,0xE4,0xF0,
+ 0xA3,0x74,0x7B,0xF0,0xA3,0x74,0x01,0xF0,
+ 0xA3,0x74,0x25,0xF0,0xA3,0x74,0x03,0xF0,
+ 0xA3,0x74,0xEC,0xF0,0xA3,0x74,0x02,0xF0,
+ 0xA3,0x74,0xE1,0xF0,0xA3,0xE4,0xF0,0xA3,
+ 0x74,0xB0,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,
+ 0x3A,0xF0,0xA3,0x74,0x03,0xF0,0xA3,0x74,
+ 0xA2,0xF0,0xA3,0x74,0x03,0xF0,0xA3,0x74,
+ 0x97,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x26,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x9C,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0x74,0xF9,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0x74,0x37,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0x74,0xFC,0xF0,0xA3,
+ 0x74,0x03,0xF0,0xA3,0x74,0xE8,0xF0,0xA3,
+ 0x74,0x03,0xF0,0x90,0xF5,0x6C,0xE4,0xF0,
+ 0xA3,0x74,0x05,0xF0,0x90,0xF9,0x00,0xE0,
+ 0x70,0x0A,0x90,0xF5,0x9E,0x74,0x19,0xF0,
+ 0xA3,0xE4,0xF0,0x22,0x90,0xF9,0x00,0xE0,
+ 0xB4,0x01,0x0A,0x90,0xF5,0x9E,0x74,0x65,
+ 0xF0,0xA3,0xE4,0xF0,0x22,0x90,0xF5,0x9E,
+ 0x74,0x65,0xF0,0xA3,0xE4,0xF0,0x22,0x90,
+ 0xF5,0x6C,0xE4,0xF0,0xA3,0x74,0x05,0xF0,
+ 0x90,0xF9,0x00,0xE0,0x70,0x15,0x90,0xF5,
+ 0x6A,0xF0,0xA3,0x74,0x04,0xF0,0x90,0xF5,
+ 0x70,0x04,0xF0,0x90,0xF5,0x6F,0x74,0x03,
+ 0xF0,0x80,0x31,0x90,0xF9,0x00,0xE0,0xB4,
+ 0x01,0x15,0x90,0xF5,0x6A,0xE4,0xF0,0xA3,
+ 0xF0,0x90,0xF5,0x70,0x74,0x07,0xF0,0x90,
+ 0xF5,0x6F,0x74,0x05,0xF0,0x80,0x15,0x90,
+ 0xF5,0x6A,0xE4,0xF0,0xA3,0x74,0x08,0xF0,
+ 0x90,0xF5,0x70,0x74,0x06,0xF0,0x90,0xF5,
+ 0x6F,0x74,0x04,0xF0,0x90,0xFD,0x27,0x74,
+ 0x07,0xF0,0x90,0xFD,0x31,0xE4,0xF0,0xA3,
+ 0x04,0xF0,0x22,0x90,0xF5,0x76,0x74,0x06,
+ 0xF0,0xA3,0x74,0x01,0xF0,0xA3,0x74,0xC1,
+ 0xF0,0xA3,0x74,0x01,0xF0,0xA3,0x74,0xFF,
+ 0xF0,0xA3,0x74,0x01,0xF0,0xA3,0x74,0xB8,
+ 0xF0,0xA3,0x74,0x01,0xF0,0xA3,0x74,0x0C,
+ 0xF0,0xA3,0x74,0x01,0xF0,0xA3,0x74,0x36,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x79,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0xF0,0xA3,0xF0,
+ 0xA3,0x74,0xE7,0xF0,0xA3,0x74,0x02,0xF0,
+ 0xA3,0x74,0x18,0xF0,0xA3,0x74,0x03,0xF0,
+ 0xA3,0x74,0x74,0xF0,0xA3,0x74,0x03,0xF0,
+ 0xA3,0x74,0xD6,0xF0,0xA3,0x74,0x03,0xF0,
+ 0xA3,0x74,0x1E,0xF0,0xA3,0xE4,0xF0,0xA3,
+ 0x74,0x41,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,
+ 0x43,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x30,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x18,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0x74,0x07,0xF0,0xA3,
+ 0xE4,0xF0,0x90,0xF9,0x00,0xE0,0x70,0x0A,
+ 0x90,0xF5,0x9E,0x74,0x19,0xF0,0xA3,0xE4,
+ 0xF0,0x22,0x90,0xF9,0x00,0xE0,0xB4,0x01,
+ 0x0A,0x90,0xF5,0x9E,0x74,0x65,0xF0,0xA3,
+ 0xE4,0xF0,0x22,0x90,0xF5,0x9E,0x74,0x32,
+ 0xF0,0xA3,0xE4,0xF0,0x22,0x90,0xF5,0x6C,
+ 0xE4,0xF0,0xA3,0x74,0x02,0xF0,0x90,0xF9,
+ 0x00,0xE0,0x70,0x16,0x90,0xF5,0x6A,0xF0,
+ 0xA3,0x74,0x08,0xF0,0x90,0xF5,0x70,0x74,
+ 0x04,0xF0,0x90,0xF5,0x6F,0x74,0x02,0xF0,
+ 0x80,0x2F,0x90,0xF9,0x00,0xE0,0xB4,0x01,
+ 0x15,0x90,0xF5,0x6A,0xE4,0xF0,0xA3,0xF0,
+ 0x90,0xF5,0x70,0x74,0x06,0xF0,0x90,0xF5,
+ 0x6F,0x74,0x04,0xF0,0x80,0x13,0x90,0xF5,
+ 0x6A,0xE4,0xF0,0xA3,0xF0,0x90,0xF5,0x70,
+ 0x74,0x05,0xF0,0x90,0xF5,0x6F,0x74,0x03,
+ 0xF0,0x90,0xFD,0x27,0x74,0x07,0xF0,0x90,
+ 0xFD,0x31,0xE4,0xF0,0xA3,0x74,0x02,0xF0,
+ 0x22,0xE4,0x90,0x42,0x77,0xF0,0xA3,0xF0,
+ 0x90,0x42,0x7B,0xF0,0xA3,0x04,0xF0,0xE4,
+ 0x90,0x42,0x8D,0xF0,0x90,0xF5,0xAD,0xF0,
+ 0x90,0x42,0x75,0xF0,0xA3,0xF0,0x90,0x42,
+ 0x75,0xE0,0xFE,0xA3,0xE0,0xFF,0xC3,0x94,
+ 0x03,0xEE,0x94,0x00,0x40,0x03,0x02,0x59,
+ 0x62,0xEF,0x4E,0x70,0x22,0x90,0xF4,0x61,
+ 0xF0,0x90,0xF4,0x60,0xF0,0x90,0xF4,0x64,
+ 0x74,0x02,0xF0,0x90,0xF4,0x63,0x74,0x06,
+ 0xF0,0x90,0x43,0x80,0xE0,0x60,0x5A,0x90,
+ 0xF4,0x63,0x74,0x07,0xF0,0x80,0x52,0x90,
+ 0x42,0x75,0xE0,0x70,0x04,0xA3,0xE0,0x64,
+ 0x01,0x70,0x22,0x90,0xF4,0x61,0x74,0x02,
+ 0xF0,0x90,0xF4,0x60,0xF0,0x90,0xF4,0x6C,
+ 0xF0,0x90,0xF4,0x6B,0x74,0x04,0xF0,0x90,
+ 0x43,0x80,0xE0,0x60,0x2C,0x90,0xF4,0x6B,
+ 0x74,0x07,0xF0,0x80,0x24,0x90,0xF4,0x61,
+ 0x74,0x01,0xF0,0x90,0xF4,0x60,0x74,0x04,
+ 0xF0,0x90,0xF4,0x68,0x74,0x02,0xF0,0x90,
+ 0xF4,0x65,0x74,0x05,0xF0,0x90,0x43,0x80,
+ 0xE0,0x60,0x06,0x90,0xF4,0x65,0x74,0x07,
+ 0xF0,0x90,0xF5,0xAC,0x74,0x01,0xF0,0x90,
+ 0xF5,0xAE,0xE0,0xB4,0x01,0xF9,0x90,0xF5,
+ 0xAE,0x74,0x01,0xF0,0x90,0xF4,0x6F,0xE0,
+ 0xFE,0x90,0xF4,0x6E,0xE0,0xFD,0xEE,0xED,
+ 0xFF,0x90,0x42,0x79,0xEE,0xF0,0xA3,0xEF,
+ 0xF0,0x90,0xF4,0x73,0xE0,0xFE,0x90,0xF4,
+ 0x72,0xE0,0xFD,0xEE,0xED,0xFF,0x90,0x42,
+ 0x7D,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x42,
+ 0x7B,0xE0,0xFE,0xA3,0xE0,0xFF,0xFB,0xAA,
+ 0x06,0xE4,0xF9,0xF8,0x90,0x42,0x79,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0xE4,0xFC,0xFD,0x12,
+ 0xA9,0xD1,0xC0,0x04,0xC0,0x05,0xC0,0x06,
+ 0xC0,0x07,0x90,0x42,0x7D,0xE0,0xFE,0xA3,
+ 0xE0,0xFF,0xFB,0xAA,0x06,0xE4,0xF9,0xF8,
+ 0x90,0x42,0x77,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0xE4,0xFC,0xFD,0x12,0xA9,0xD1,0xA8,0x04,
+ 0xA9,0x05,0xAA,0x06,0xAB,0x07,0xD0,0x07,
+ 0xD0,0x06,0xD0,0x05,0xD0,0x04,0xC3,0x12,
+ 0xAA,0x44,0x50,0x4F,0x90,0x42,0x79,0xE0,
+ 0xFF,0xA3,0xE0,0x90,0x42,0x77,0xCF,0xF0,
+ 0xA3,0xEF,0xF0,0x90,0x42,0x7D,0xE0,0xFF,
+ 0xA3,0xE0,0x90,0x42,0x7B,0xCF,0xF0,0xA3,
+ 0xEF,0xF0,0x90,0xF4,0x74,0xE0,0x90,0x42,
+ 0x71,0xF0,0x90,0xF4,0x75,0xE0,0x90,0x42,
+ 0x72,0xF0,0x90,0xF4,0x76,0xE0,0x90,0x42,
+ 0x73,0xF0,0x90,0xF4,0x77,0xE0,0x90,0x42,
+ 0x74,0xF0,0x90,0x42,0x76,0xE0,0x25,0xE0,
+ 0xFF,0x90,0x42,0x75,0xE0,0x33,0x90,0x42,
+ 0x8D,0xEF,0xF0,0x90,0xF5,0xAC,0xE4,0xF0,
+ 0x90,0x42,0x76,0xE0,0x04,0xF0,0x70,0x06,
+ 0x90,0x42,0x75,0xE0,0x04,0xF0,0x02,0x57,
+ 0xDF,0x90,0x42,0x74,0xE0,0xFF,0x90,0x42,
+ 0x73,0xE0,0xC3,0x9F,0x50,0x0D,0x90,0x42,
+ 0x70,0x74,0x03,0xF0,0x90,0x42,0x73,0xEF,
+ 0xF0,0x80,0x06,0x90,0x42,0x70,0x74,0x02,
+ 0xF0,0x90,0x42,0x72,0xE0,0xFF,0x90,0x42,
+ 0x71,0xE0,0xC3,0x9F,0x50,0x0D,0x90,0x42,
+ 0x8E,0x74,0x01,0xF0,0x90,0x42,0x71,0xEF,
+ 0xF0,0x80,0x05,0xE4,0x90,0x42,0x8E,0xF0,
+ 0x90,0x42,0x73,0xE0,0xFF,0x90,0x42,0x71,
+ 0xE0,0xC3,0x9F,0x50,0x08,0x90,0x42,0x70,
+ 0xE0,0x90,0x42,0x8E,0xF0,0x90,0x44,0x97,
+ 0xE0,0xB4,0x01,0x1F,0x90,0x44,0x99,0xE0,
+ 0xFF,0x70,0x06,0x90,0x42,0x8D,0xF0,0x80,
+ 0x12,0xEF,0xB4,0x01,0x08,0x90,0x42,0x8D,
+ 0x74,0x02,0xF0,0x80,0x06,0x90,0x42,0x8D,
+ 0x74,0x04,0xF0,0x90,0x42,0x8E,0xE0,0x90,
+ 0xF9,0x01,0xF0,0x90,0x42,0x8D,0xE0,0xFF,
+ 0x70,0x06,0x90,0xF9,0x00,0xF0,0x80,0x21,
+ 0xEF,0xC3,0x94,0x04,0x40,0x0E,0x90,0xF9,
+ 0x00,0x74,0x02,0xF0,0x90,0x42,0x8E,0xE0,
+ 0x04,0xF0,0x80,0x0D,0x90,0xF9,0x00,0x74,
+ 0x01,0xF0,0x90,0x42,0x8E,0xE0,0x24,0x02,
+ 0xF0,0x90,0x42,0x8E,0xE0,0xFD,0x12,0x5C,
+ 0x4D,0x90,0x42,0x8E,0xE0,0x24,0x06,0xFF,
+ 0x74,0x01,0x7E,0x00,0xA8,0x07,0x08,0x80,
+ 0x05,0xC3,0x33,0xCE,0x33,0xCE,0xD8,0xF9,
+ 0x24,0xF6,0xFF,0xEE,0x34,0xFF,0x90,0x42,
+ 0x75,0xF0,0xA3,0xEF,0xF0,0xE0,0x90,0xF4,
+ 0x69,0xF0,0x90,0x42,0x75,0xE0,0x90,0xF4,
+ 0x6A,0xF0,0x90,0xF4,0x6D,0x74,0x14,0xF0,
+ 0x90,0xF5,0xAC,0xE4,0xF0,0x22,0x90,0x41,
+ 0xD5,0xE0,0x60,0x6E,0x90,0xF9,0x00,0xE0,
+ 0x90,0x42,0x8D,0xF0,0x90,0xF9,0x01,0xE0,
+ 0x90,0x42,0x8E,0xF0,0x90,0x42,0x8D,0xE0,
+ 0x70,0x0A,0xA3,0xE0,0xFD,0xE4,0xFF,0x12,
+ 0x5C,0x4D,0x80,0x22,0x90,0x42,0x8D,0xE0,
+ 0xB4,0x02,0x0D,0xA3,0xE0,0x04,0xF0,0xE0,
+ 0xFD,0x7F,0x04,0x12,0x5C,0x4D,0x80,0x0E,
+ 0x90,0x42,0x8E,0xE0,0x24,0x02,0xF0,0xE0,
+ 0xFD,0x7F,0x02,0x12,0x5C,0x4D,0x90,0x42,
+ 0x8E,0xE0,0x24,0x06,0xFF,0x74,0x01,0x7E,
+ 0x00,0xA8,0x07,0x08,0x80,0x05,0xC3,0x33,
+ 0xCE,0x33,0xCE,0xD8,0xF9,0x24,0xF6,0xFF,
+ 0xEE,0x34,0xFF,0xFE,0xEF,0x90,0xF4,0x69,
+ 0xF0,0xEE,0xA3,0xF0,0x90,0xF4,0x6D,0x74,
+ 0x14,0xF0,0x90,0xF4,0x63,0x74,0x05,0xF0,
+ 0x90,0x43,0x80,0xE0,0x60,0x06,0x90,0xF4,
+ 0x63,0x74,0x07,0xF0,0x90,0xF5,0xAD,0x74,
+ 0x01,0xF0,0x90,0xF5,0xAC,0xE4,0xF0,0x04,
+ 0xF0,0x90,0xF5,0xAE,0xE0,0xB4,0x01,0xF9,
+ 0x90,0xF5,0xAE,0x74,0x01,0xF0,0x90,0xF4,
+ 0x83,0xE0,0x90,0x42,0x7F,0xF0,0x90,0xF4,
+ 0x82,0xE0,0x90,0x42,0x80,0xF0,0x90,0xF4,
+ 0x81,0xE0,0x90,0x42,0x81,0xF0,0x90,0xF4,
+ 0x80,0xE0,0x90,0x42,0x82,0xF0,0x90,0xF4,
+ 0x86,0xE0,0x30,0xE2,0x04,0x7F,0xFF,0x80,
+ 0x02,0x7F,0x00,0x90,0x42,0x83,0xEF,0xF0,
+ 0xE0,0xB4,0xFF,0x09,0x90,0xF4,0x86,0xE0,
+ 0x44,0xF8,0xFF,0x80,0x07,0x90,0xF4,0x86,
+ 0xE0,0x54,0x07,0xFF,0x90,0x42,0x84,0xEF,
+ 0xF0,0x90,0xF4,0x85,0xE0,0x90,0x42,0x85,
+ 0xF0,0x90,0xF4,0x84,0xE0,0x90,0x42,0x86,
+ 0xF0,0x90,0x42,0x8E,0xE0,0x24,0x05,0xFF,
+ 0x74,0x01,0x7E,0x00,0xA8,0x07,0x08,0x80,
+ 0x05,0xC3,0x33,0xCE,0x33,0xCE,0xD8,0xF9,
+ 0x90,0x42,0x8C,0xF0,0xEE,0x90,0x42,0x8B,
+ 0xF0,0x90,0x42,0x83,0xE0,0xF8,0xA3,0xE0,
+ 0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,0xFB,0x90,
+ 0x42,0x7F,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0x12,0xAC,0x9E,
+ 0xA8,0x04,0xA9,0x05,0xAA,0x06,0xAB,0x07,
+ 0x90,0x42,0x8B,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0xE4,0xFC,0xFD,0xEB,0x2F,0xFF,0xEA,0x3E,
+ 0xFE,0xED,0x39,0xFD,0xEC,0x38,0xFC,0x90,
+ 0x42,0x87,0x12,0xAA,0x8F,0x90,0x42,0x8C,
+ 0xE0,0x90,0xF5,0x3C,0xF0,0x90,0x42,0x8B,
+ 0xE0,0x90,0xF5,0x3D,0xF0,0xE4,0x7F,0xFF,
+ 0x7E,0x07,0xFD,0xFC,0x90,0x42,0x87,0xE0,
+ 0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,
+ 0xE0,0xFB,0xD3,0x12,0xAA,0x2E,0x40,0x0C,
+ 0x90,0x42,0x87,0x12,0xAA,0x9B,0x00,0x00,
+ 0x07,0xFF,0x80,0x26,0x7F,0x00,0x7E,0xF8,
+ 0x7D,0xFF,0x7C,0xFF,0x90,0x42,0x87,0xE0,
+ 0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,
+ 0xE0,0xFB,0xC3,0x12,0xAA,0x2E,0x50,0x0A,
+ 0x90,0x42,0x87,0x12,0xAA,0x9B,0xFF,0xFF,
+ 0xF8,0x00,0x90,0x42,0x8A,0xE0,0x90,0xF4,
+ 0x66,0xF0,0x90,0x42,0x89,0xE0,0x90,0xF4,
+ 0x67,0xF0,0x90,0xF4,0x67,0xE0,0x70,0xFA,
+ 0x90,0xF4,0x66,0xE0,0x70,0xF4,0x22,0x90,
+ 0xF4,0x71,0xE4,0xF0,0x04,0xF0,0x90,0xF5,
+ 0xAC,0xE4,0xF0,0xEF,0x70,0x05,0x12,0xAE,
+ 0xE1,0x80,0x03,0x12,0x5A,0x57,0x90,0xF4,
+ 0x71,0xE4,0xF0,0x22,0x90,0xF4,0x60,0xEF,
+ 0xF0,0xA3,0xED,0xF0,0x22,0x90,0x42,0x8F,
+ 0xEE,0xF0,0xA3,0xEF,0xF0,0xA3,0xED,0xF0,
+ 0xE4,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0x90,
+ 0xF4,0x1D,0xE0,0x90,0x42,0x95,0xF0,0x90,
+ 0x42,0xA3,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x42,0x92,
+ 0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,
+ 0xA3,0xE0,0xFB,0xC3,0x12,0xAA,0x2E,0x40,
+ 0x48,0x90,0x42,0x92,0xE0,0xFC,0xA3,0xE0,
+ 0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,0x90,
+ 0x42,0xA3,0x12,0xAA,0x8F,0x90,0x42,0x8F,
+ 0xE0,0xFF,0xA3,0xE0,0x90,0x42,0xAB,0xCF,
+ 0xF0,0xA3,0xEF,0xF0,0x90,0x42,0x91,0xE0,
+ 0x70,0x10,0x90,0x42,0xA5,0xE0,0xFF,0xA3,
+ 0xE0,0x90,0x42,0xA7,0xCF,0xF0,0xA3,0xEF,
+ 0xF0,0x22,0x90,0x42,0xA5,0xE0,0xFF,0xA3,
+ 0xE0,0x90,0x42,0xA9,0xCF,0xF0,0xA3,0xEF,
+ 0xF0,0x22,0xE4,0x90,0x42,0xA7,0xF0,0xA3,
+ 0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,
+ 0xF0,0x90,0xF5,0xB3,0x04,0xF0,0x90,0xF5,
+ 0xB1,0xE4,0xF0,0x90,0xF5,0xB0,0xF0,0x90,
+ 0xF5,0xC2,0x04,0xF0,0x90,0xF5,0xB0,0xF0,
+ 0x90,0xF5,0xC2,0xE4,0xF0,0x90,0x42,0xB3,
+ 0xF0,0x90,0x42,0x9E,0xE0,0x70,0x05,0x90,
+ 0x42,0xB3,0x04,0xF0,0x90,0x42,0xA3,0x12,
+ 0xAA,0x9B,0x00,0x00,0x00,0x00,0xE4,0x90,
+ 0x42,0xB7,0xF0,0x90,0x42,0xB3,0xE0,0xFF,
+ 0x90,0x42,0xB7,0xE0,0xFE,0xD3,0x9F,0x40,
+ 0x03,0x02,0x5D,0xD8,0x90,0xF5,0xB8,0xEE,
+ 0xF0,0x90,0x42,0xB1,0xE0,0xFE,0xA3,0xE0,
+ 0xFF,0xC3,0xE4,0x9F,0xFF,0xE4,0x9E,0x90,
+ 0x42,0xB4,0xF0,0xA3,0xEF,0xF0,0x90,0x42,
+ 0xB1,0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x42,
+ 0xB4,0xE0,0xFC,0xA3,0xE0,0xFD,0xD3,0x9F,
+ 0xEE,0x64,0x80,0xF8,0xEC,0x64,0x80,0x98,
+ 0x50,0x64,0xE0,0x90,0xF4,0x11,0xF0,0xEC,
+ 0xFF,0x33,0x95,0xE0,0xA3,0xEF,0xF0,0x90,
+ 0xF5,0xB5,0x74,0x01,0xF0,0x90,0x41,0xD6,
+ 0xE0,0xB4,0x01,0x04,0x7F,0x01,0x80,0x02,
+ 0x7F,0x00,0x90,0xF5,0xB5,0xE0,0x64,0x01,
+ 0x60,0x04,0x7E,0x01,0x80,0x02,0x7E,0x00,
+ 0xEE,0x5F,0x70,0xE1,0x90,0xF5,0xB5,0xE0,
+ 0xB4,0x01,0x04,0x7F,0x01,0x80,0x02,0x7F,
+ 0x00,0x90,0x42,0xB6,0xEF,0xF0,0x90,0x42,
+ 0xB4,0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x42,
+ 0xB7,0xE0,0xFD,0x12,0x5C,0x56,0x90,0x42,
+ 0xB5,0xE0,0x04,0xF0,0x70,0x06,0x90,0x42,
+ 0xB4,0xE0,0x04,0xF0,0x80,0x80,0x90,0x42,
+ 0xB7,0xE0,0x04,0xF0,0x02,0x5D,0x24,0x90,
+ 0x42,0xA7,0xE0,0xFE,0xA3,0xE0,0xFF,0xD3,
+ 0x90,0x42,0xAA,0xE0,0x9F,0x90,0x42,0xA9,
+ 0xE0,0x9E,0x50,0x03,0x02,0x5E,0xD3,0x90,
+ 0x41,0xEB,0xE0,0x64,0x01,0xF0,0x90,0xF0,
+ 0x76,0xF0,0xE4,0x90,0x42,0xAD,0xF0,0x90,
+ 0xF1,0xB5,0xE0,0x90,0x42,0xAE,0xF0,0x90,
+ 0xF1,0xB4,0xE0,0x90,0x42,0xAF,0xF0,0x90,
+ 0xF1,0xB3,0xE0,0x90,0x42,0xB0,0xF0,0xE4,
+ 0xFF,0xFE,0x7D,0x40,0xFC,0x90,0x42,0xAD,
+ 0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,
+ 0xA3,0xE0,0xFB,0x12,0xAA,0x2E,0x40,0x23,
+ 0x90,0x42,0xAD,0xE0,0xF8,0xA3,0xE0,0xF9,
+ 0xA3,0xE0,0xFA,0xA3,0xE0,0xFB,0xE4,0x9B,
+ 0xFF,0xE4,0x9A,0xFE,0x74,0x80,0x99,0xFD,
+ 0xE4,0x98,0xFC,0x90,0x42,0xAD,0x12,0xAA,
+ 0x8F,0x80,0x17,0x90,0x42,0xAD,0xE0,0xFC,
+ 0xA3,0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,
+ 0xFF,0x12,0xAA,0x20,0x90,0x42,0xAD,0x12,
+ 0xAA,0x8F,0x90,0x42,0x9F,0xE0,0xF8,0xA3,
+ 0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,0xFB,
+ 0xC3,0xE4,0x9B,0xFF,0xE4,0x9A,0xFE,0x74,
+ 0x80,0x99,0xFD,0xE4,0x98,0xFC,0x90,0x42,
+ 0x9F,0x12,0xAA,0x8F,0x90,0xF1,0xEB,0x74,
+ 0x01,0xF0,0xE4,0xF0,0x90,0x42,0xAE,0xE0,
+ 0x90,0xF1,0xA5,0xF0,0x90,0x42,0xAF,0xE0,
+ 0x90,0xF1,0xA4,0xF0,0x90,0x42,0xB0,0xE0,
+ 0x90,0xF1,0xA3,0xF0,0x90,0xF1,0x14,0xE0,
+ 0x70,0x06,0x90,0xF1,0x10,0xE0,0x60,0x1A,
+ 0x90,0xF1,0x0E,0xE0,0xF4,0xF0,0xA3,0xE0,
+ 0xF4,0xF0,0x90,0xF1,0x12,0xE0,0xF4,0xF0,
+ 0xA3,0xE0,0xF4,0xF0,0x90,0xF1,0x0A,0x74,
+ 0x01,0xF0,0x90,0x42,0xAB,0xE0,0xFF,0x33,
+ 0x95,0xE0,0x90,0xF4,0x0D,0xEF,0xF0,0x90,
+ 0x42,0xAC,0xE0,0x90,0xF4,0x0C,0xF0,0x90,
+ 0xF5,0xB6,0x74,0x01,0xF0,0x90,0x41,0xD6,
+ 0xE0,0xB4,0x01,0x04,0x7F,0x01,0x80,0x02,
+ 0x7F,0x00,0x90,0xF5,0xB7,0xE0,0x64,0x01,
+ 0x60,0x04,0x7E,0x01,0x80,0x02,0x7E,0x00,
+ 0xEE,0x5F,0x70,0xE1,0x90,0xF5,0xB7,0xE0,
+ 0xB4,0x01,0x04,0x7F,0x01,0x80,0x02,0x7F,
+ 0x00,0x90,0x42,0xB6,0xEF,0xF0,0x90,0x42,
+ 0xB6,0xE0,0x60,0xFA,0x90,0xF5,0xB6,0xE4,
+ 0xF0,0x90,0xF5,0xC2,0x04,0xF0,0x90,0xF5,
+ 0xB0,0xE4,0xF0,0x90,0xF5,0xC2,0xF0,0x22,
+ 0x90,0xF9,0x00,0xE0,0x70,0x0A,0x90,0x42,
+ 0xB1,0xF0,0xA3,0x74,0x32,0xF0,0x80,0x1B,
+ 0x90,0xF9,0x00,0xE0,0xB4,0x01,0x0B,0x90,
+ 0x42,0xB1,0xE4,0xF0,0xA3,0x74,0xC8,0xF0,
+ 0x80,0x09,0x90,0x42,0xB1,0xE4,0xF0,0xA3,
+ 0x74,0x64,0xF0,0x12,0x5C,0xDB,0x7F,0x01,
+ 0x12,0x6D,0xE8,0x90,0x42,0xB1,0xE4,0xF0,
+ 0xA3,0x74,0x1E,0xF0,0x12,0x5C,0xDB,0x90,
+ 0xF4,0x0C,0xE0,0x60,0x4E,0x90,0xF1,0xEB,
+ 0x74,0x01,0xF0,0xE4,0xF0,0x90,0xF9,0x00,
+ 0xE0,0x70,0x0A,0x90,0x42,0xB1,0xF0,0xA3,
+ 0x74,0x96,0xF0,0x80,0x1D,0x90,0xF9,0x00,
+ 0xE0,0xB4,0x01,0x0C,0x90,0x42,0xB1,0x74,
+ 0x02,0xF0,0xA3,0x74,0x58,0xF0,0x80,0x0A,
+ 0x90,0x42,0xB1,0x74,0x01,0xF0,0xA3,0x74,
+ 0x2C,0xF0,0x7F,0x01,0x12,0x6D,0xE8,0x12,
+ 0x5C,0xDB,0x90,0x42,0xB1,0xE4,0xF0,0xA3,
+ 0x74,0x1E,0xF0,0x7F,0x01,0x12,0x6D,0xE8,
+ 0x12,0x5C,0xDB,0x90,0xF4,0x0C,0xE0,0x60,
+ 0x10,0x90,0x41,0xDC,0x74,0x02,0xF0,0x90,
+ 0xF2,0x1C,0xF0,0xE4,0x90,0x43,0x3D,0xF0,
+ 0x22,0x90,0x41,0xDC,0x74,0x01,0xF0,0x90,
+ 0xF2,0x1C,0xF0,0x90,0x43,0x3D,0xF0,0xE4,
+ 0x90,0x42,0xAD,0xF0,0x90,0xF1,0xB5,0xE0,
+ 0x90,0x42,0xAE,0xF0,0x90,0xF1,0xB4,0xE0,
+ 0x90,0x42,0xAF,0xF0,0x90,0xF1,0xB3,0xE0,
+ 0x90,0x42,0xB0,0xF0,0x90,0x42,0xAD,0xE0,
+ 0xFC,0xA3,0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,
+ 0xE0,0xFF,0x90,0x42,0x9F,0xE0,0xF8,0xA3,
+ 0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,0xFB,
+ 0xC3,0xEF,0x9B,0xFF,0xEE,0x9A,0xFE,0xED,
+ 0x99,0xFD,0xEC,0x98,0xFC,0x90,0x42,0xAD,
+ 0x12,0xAA,0x8F,0x7F,0xFF,0x7E,0xFF,0x7D,
+ 0x3F,0x7C,0x00,0x90,0x42,0xAD,0xE0,0xF8,
+ 0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,
+ 0xFB,0xD3,0x12,0xAA,0x2E,0x40,0x21,0x90,
+ 0x42,0xAD,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,
+ 0xE0,0xFE,0xA3,0xE0,0x24,0x00,0xFF,0xE4,
+ 0x3E,0xFE,0xED,0x34,0x80,0xFD,0xEC,0x34,
+ 0xFF,0xFC,0x90,0x42,0xAD,0x12,0xAA,0x8F,
+ 0x90,0x42,0xAD,0xE0,0xFC,0xA3,0xE0,0xFD,
+ 0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,0x78,0x09,
+ 0x12,0xAA,0x68,0x90,0x42,0xAD,0x12,0xAA,
+ 0x8F,0x90,0x43,0x82,0xE0,0x60,0x04,0x7F,
+ 0x01,0x80,0x02,0x7F,0x00,0x90,0x42,0x23,
+ 0xE0,0x5F,0x70,0x0F,0x90,0xF1,0x33,0xE0,
+ 0x70,0x09,0x90,0xF1,0x35,0xE0,0x70,0x03,
+ 0x02,0x62,0x53,0xE4,0x90,0x42,0x9F,0xF0,
+ 0xA3,0xF0,0x90,0xF1,0x0F,0xE0,0x90,0x42,
+ 0xA1,0xF0,0x90,0xF1,0x0E,0xE0,0x90,0x42,
+ 0xA2,0xF0,0x90,0x42,0x9F,0xE0,0xFC,0xA3,
+ 0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0x90,0x42,0xAD,0xE0,0xF8,0xA3,0xE0,0xF9,
+ 0xA3,0xE0,0xFA,0xA3,0xE0,0x2F,0xFF,0xEA,
+ 0x3E,0xFE,0xE9,0x3D,0xFD,0xE8,0x3C,0xFC,
+ 0x90,0x42,0x9F,0x12,0xAA,0x8F,0xE4,0xFF,
+ 0x7E,0x40,0xFD,0xFC,0x90,0x42,0x9F,0xE0,
+ 0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,
+ 0xE0,0xFB,0xC3,0x12,0xAA,0x2E,0x40,0x24,
+ 0x90,0x42,0x9F,0xE0,0xFC,0xA3,0xE0,0xFD,
+ 0xA3,0xE0,0xFE,0xA3,0xE0,0x24,0x00,0xFF,
+ 0xEE,0x34,0xC0,0xFE,0xED,0x34,0xFF,0xFD,
+ 0xEC,0x34,0xFF,0xFC,0x90,0x42,0x9F,0x12,
+ 0xAA,0x8F,0x80,0x39,0xE4,0xFF,0xFE,0xFD,
+ 0xFC,0x90,0x42,0x9F,0xE0,0xF8,0xA3,0xE0,
+ 0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,0xFB,0xC3,
+ 0x12,0xAA,0x2E,0x50,0x20,0x90,0x42,0x9F,
+ 0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,0xE0,0xFE,
+ 0xA3,0xE0,0x24,0x00,0xFF,0xEE,0x34,0x40,
+ 0xFE,0xE4,0x3D,0xFD,0xE4,0x3C,0xFC,0x90,
+ 0x42,0x9F,0x12,0xAA,0x8F,0x90,0x42,0xA2,
+ 0xE0,0x90,0xF1,0x0E,0xF0,0x90,0x42,0xA1,
+ 0xE0,0x90,0xF1,0x0F,0xF0,0xE4,0x90,0x42,
+ 0x9F,0xF0,0xA3,0xF0,0x90,0xF1,0x13,0xE0,
+ 0x90,0x42,0xA1,0xF0,0x90,0xF1,0x12,0xE0,
+ 0x90,0x42,0xA2,0xF0,0x90,0x42,0x9F,0xE0,
+ 0xFC,0xA3,0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,
+ 0xE0,0xFF,0x90,0x42,0xAD,0xE0,0xF8,0xA3,
+ 0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,0x2F,
+ 0xFF,0xEA,0x3E,0xFE,0xE9,0x3D,0xFD,0xE8,
+ 0x3C,0xFC,0x90,0x42,0x9F,0x12,0xAA,0x8F,
+ 0xE4,0xFF,0x7E,0x40,0xFD,0xFC,0x90,0x42,
+ 0x9F,0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,
+ 0xFA,0xA3,0xE0,0xFB,0xC3,0x12,0xAA,0x2E,
+ 0x40,0x24,0x90,0x42,0x9F,0xE0,0xFC,0xA3,
+ 0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,0x24,
+ 0x00,0xFF,0xEE,0x34,0xC0,0xFE,0xED,0x34,
+ 0xFF,0xFD,0xEC,0x34,0xFF,0xFC,0x90,0x42,
+ 0x9F,0x12,0xAA,0x8F,0x80,0x39,0xE4,0xFF,
+ 0xFE,0xFD,0xFC,0x90,0x42,0x9F,0xE0,0xF8,
+ 0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,
+ 0xFB,0xC3,0x12,0xAA,0x2E,0x50,0x20,0x90,
+ 0x42,0x9F,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,
+ 0xE0,0xFE,0xA3,0xE0,0x24,0x00,0xFF,0xEE,
+ 0x34,0x40,0xFE,0xE4,0x3D,0xFD,0xE4,0x3C,
+ 0xFC,0x90,0x42,0x9F,0x12,0xAA,0x8F,0x90,
+ 0x42,0xA2,0xE0,0x90,0xF1,0x12,0xF0,0x90,
+ 0x42,0xA1,0xE0,0x90,0xF1,0x13,0xF0,0x90,
+ 0x43,0x80,0xE0,0x70,0x05,0x90,0xF1,0x0A,
+ 0x04,0xF0,0xE4,0x90,0x42,0x9F,0xF0,0x90,
+ 0xF1,0xB5,0xE0,0x90,0x42,0xA0,0xF0,0x90,
+ 0xF1,0xB4,0xE0,0x90,0x42,0xA1,0xF0,0x90,
+ 0xF1,0xB3,0xE0,0x90,0x42,0xA2,0xF0,0x22,
+ 0x90,0x42,0x98,0xE0,0x70,0x1A,0xA3,0xE0,
+ 0x64,0x0C,0x60,0x05,0xE0,0x64,0x0D,0x70,
+ 0x22,0x90,0xF4,0x1B,0xE0,0xB4,0x0A,0x1B,
+ 0x90,0x42,0x98,0x74,0x01,0xF0,0x80,0x13,
+ 0x90,0x42,0x99,0xE0,0xB4,0x0C,0x0C,0x90,
+ 0xF4,0x1C,0xE0,0xB4,0x0A,0x05,0xE4,0x90,
+ 0x42,0x98,0xF0,0x90,0x42,0x98,0xE0,0xB4,
+ 0x01,0x19,0xA3,0xE0,0xB4,0x0C,0x14,0x90,
+ 0xF5,0xBA,0xE0,0xB4,0x01,0x0D,0x90,0x42,
+ 0x99,0x74,0x03,0xF0,0x90,0xF4,0x19,0xF0,
+ 0x02,0x63,0x75,0x90,0x42,0x98,0xE0,0xB4,
+ 0x01,0x0F,0xA3,0xE0,0xB4,0x0D,0x0A,0x74,
+ 0x03,0xF0,0x90,0xF4,0x19,0xF0,0x02,0x63,
+ 0x75,0x90,0x42,0x98,0xE0,0x70,0x15,0xA3,
+ 0xE0,0xB4,0x0C,0x10,0x90,0xF5,0xBA,0xE0,
+ 0xB4,0x01,0x09,0x90,0xF4,0x19,0x74,0x0C,
+ 0xF0,0x02,0x63,0x75,0x90,0x42,0x98,0xE0,
+ 0x70,0x16,0xA3,0xE0,0xB4,0x0C,0x11,0x90,
+ 0xF4,0x1C,0xE0,0xC3,0x94,0x0A,0x50,0x08,
+ 0x90,0xF4,0x19,0x74,0x0C,0xF0,0x80,0x64,
+ 0x90,0x42,0x98,0xE0,0x64,0x01,0x70,0x1C,
+ 0xA3,0xE0,0xB4,0x0C,0x17,0x90,0xF5,0xBA,
+ 0xE0,0x70,0x11,0x90,0xF4,0x1B,0xE0,0xC3,
+ 0x94,0x0A,0x50,0x08,0x90,0xF4,0x19,0x74,
+ 0x0C,0xF0,0x80,0x40,0x90,0x42,0x98,0xE0,
+ 0x64,0x01,0x70,0x1E,0xA3,0xE0,0xB4,0x0C,
+ 0x19,0x90,0xF5,0xBA,0xE0,0x70,0x13,0x90,
+ 0xF4,0x1B,0xE0,0xB4,0x0A,0x0C,0x90,0x42,
+ 0x99,0x74,0x03,0xF0,0x90,0xF4,0x19,0xF0,
+ 0x80,0x1A,0x90,0x42,0x99,0xE0,0xB4,0x0D,
+ 0x08,0x90,0xF4,0x19,0x74,0x0D,0xF0,0x80,
+ 0x0B,0x90,0x42,0x99,0xE0,0x04,0xF0,0xE0,
+ 0x90,0xF4,0x19,0xF0,0x90,0x42,0x99,0xE0,
+ 0x24,0xB8,0xF5,0x82,0xE4,0x34,0x42,0xF5,
+ 0x83,0xE0,0x90,0xF4,0x08,0xF0,0x90,0x42,
+ 0x99,0xE0,0x24,0xC6,0xF5,0x82,0xE4,0x34,
+ 0x42,0xF5,0x83,0xE0,0x90,0xF4,0x09,0xF0,
+ 0x90,0x42,0x99,0xE0,0x24,0xD4,0xF5,0x82,
+ 0xE4,0x34,0x42,0xF5,0x83,0xE0,0x90,0xF4,
+ 0x0A,0xF0,0x22,0x90,0x42,0x9B,0xE0,0x70,
+ 0x1A,0xA3,0xE0,0x64,0x0C,0x60,0x05,0xE0,
+ 0x64,0x0D,0x70,0x22,0x90,0xF5,0x68,0xE0,
+ 0xB4,0x0A,0x1B,0x90,0x42,0x9B,0x74,0x01,
+ 0xF0,0x80,0x13,0x90,0x42,0x9C,0xE0,0xB4,
+ 0x0C,0x0C,0x90,0xF5,0x69,0xE0,0xB4,0x05,
+ 0x05,0xE4,0x90,0x42,0x9B,0xF0,0x90,0x42,
+ 0x9B,0xE0,0xB4,0x01,0x19,0xA3,0xE0,0xB4,
+ 0x0C,0x14,0x90,0xF5,0xC1,0xE0,0xB4,0x01,
+ 0x0D,0x90,0x42,0x9C,0x74,0x03,0xF0,0x90,
+ 0xF5,0x66,0xF0,0x02,0x64,0xB0,0x90,0x42,
+ 0x9B,0xE0,0xB4,0x01,0x0F,0xA3,0xE0,0xB4,
+ 0x0D,0x0A,0x74,0x03,0xF0,0x90,0xF5,0x66,
+ 0xF0,0x02,0x64,0xB0,0x90,0x42,0x9B,0xE0,
+ 0x70,0x15,0xA3,0xE0,0xB4,0x0C,0x10,0x90,
+ 0xF5,0xC1,0xE0,0xB4,0x01,0x09,0x90,0xF5,
+ 0x66,0x74,0x0C,0xF0,0x02,0x64,0xB0,0x90,
+ 0x42,0x9B,0xE0,0x70,0x16,0xA3,0xE0,0xB4,
+ 0x0C,0x11,0x90,0xF5,0x69,0xE0,0xC3,0x94,
+ 0x05,0x50,0x08,0x90,0xF5,0x66,0x74,0x0C,
+ 0xF0,0x80,0x64,0x90,0x42,0x9B,0xE0,0x64,
+ 0x01,0x70,0x1C,0xA3,0xE0,0xB4,0x0C,0x17,
+ 0x90,0xF5,0xC1,0xE0,0x70,0x11,0x90,0xF5,
+ 0x68,0xE0,0xC3,0x94,0x0A,0x50,0x08,0x90,
+ 0xF5,0x66,0x74,0x0C,0xF0,0x80,0x40,0x90,
+ 0x42,0x9B,0xE0,0x64,0x01,0x70,0x1E,0xA3,
+ 0xE0,0xB4,0x0C,0x19,0x90,0xF5,0xC1,0xE0,
+ 0x70,0x13,0x90,0xF5,0x68,0xE0,0xB4,0x0A,
+ 0x0C,0x90,0x42,0x9C,0x74,0x03,0xF0,0x90,
+ 0xF5,0x66,0xF0,0x80,0x1A,0x90,0x42,0x9C,
+ 0xE0,0xB4,0x0D,0x08,0x90,0xF5,0x66,0x74,
+ 0x0D,0xF0,0x80,0x0B,0x90,0x42,0x9C,0xE0,
+ 0x04,0xF0,0xE0,0x90,0xF5,0x66,0xF0,0x90,
+ 0x42,0x9C,0xE0,0x25,0xE0,0x24,0xE2,0xF5,
+ 0x82,0xE4,0x34,0x42,0xF5,0x83,0xE0,0xA3,
+ 0xE0,0x90,0xF5,0x5B,0xF0,0x90,0x42,0x9C,
+ 0xE0,0x25,0xE0,0x24,0xFE,0xF5,0x82,0xE4,
+ 0x34,0x42,0xF5,0x83,0xE0,0xA3,0xE0,0x90,
+ 0xF5,0x5C,0xF0,0x90,0x42,0x9C,0xE0,0x25,
+ 0xE0,0x24,0x1A,0xF5,0x82,0xE4,0x34,0x43,
+ 0xF5,0x83,0xE0,0xA3,0xE0,0x90,0xF5,0x5D,
+ 0xF0,0xA3,0xE4,0xF0,0x22,0x90,0xF4,0x60,
+ 0xE0,0x60,0x03,0x02,0x65,0x8F,0x90,0x41,
+ 0x96,0xE0,0x90,0xF4,0x03,0xF0,0x90,0x41,
+ 0x97,0xE0,0x90,0xF4,0x02,0xF0,0x90,0x41,
+ 0x98,0xE0,0x90,0xF4,0x01,0xF0,0x90,0x41,
+ 0x99,0xE0,0x90,0xF4,0x00,0xF0,0x90,0x41,
+ 0x9A,0xE0,0x90,0xF4,0x07,0xF0,0x90,0x41,
+ 0x9B,0xE0,0x90,0xF4,0x06,0xF0,0x90,0x41,
+ 0x9C,0xE0,0x90,0xF4,0x05,0xF0,0x90,0x41,
+ 0x9D,0xE0,0x90,0xF4,0x04,0xF0,0x12,0x67,
+ 0x0D,0x90,0xF9,0x01,0xE0,0x14,0x60,0x16,
+ 0x14,0x60,0x1F,0x14,0x60,0x28,0x24,0x03,
+ 0x70,0x2E,0x90,0xF5,0x59,0x74,0xFA,0xF0,
+ 0xA3,0x74,0x54,0xF0,0x80,0x22,0x90,0xF5,
+ 0x59,0x74,0x7A,0xF0,0xA3,0x74,0x52,0xF0,
+ 0x80,0x16,0x90,0xF5,0x59,0x74,0xE5,0xF0,
+ 0xA3,0x74,0x4D,0xF0,0x80,0x0A,0x90,0xF5,
+ 0x59,0x74,0x1B,0xF0,0xA3,0x74,0x46,0xF0,
+ 0x12,0x67,0x3D,0x90,0xF7,0x37,0x74,0xDC,
+ 0xF0,0xA3,0x74,0x05,0xF0,0x22,0x90,0xF4,
+ 0x60,0xE0,0x64,0x04,0x60,0x03,0x02,0x66,
+ 0x2A,0x90,0x41,0xAE,0xE0,0x90,0xF4,0x03,
+ 0xF0,0x90,0x41,0xAF,0xE0,0x90,0xF4,0x02,
+ 0xF0,0x90,0x41,0xB0,0xE0,0x90,0xF4,0x01,
+ 0xF0,0x90,0x41,0xB1,0xE0,0x90,0xF4,0x00,
+ 0xF0,0x90,0x41,0xB2,0xE0,0x90,0xF4,0x07,
+ 0xF0,0x90,0x41,0xB3,0xE0,0x90,0xF4,0x06,
+ 0xF0,0x90,0x41,0xB4,0xE0,0x90,0xF4,0x05,
+ 0xF0,0x90,0x41,0xB5,0xE0,0x90,0xF4,0x04,
+ 0xF0,0x12,0x67,0x2D,0x90,0xF9,0x01,0xE0,
+ 0x14,0x60,0x16,0x14,0x60,0x1F,0x14,0x60,
+ 0x28,0x24,0x03,0x70,0x2E,0x90,0xF5,0x59,
+ 0x74,0xA4,0xF0,0xA3,0x74,0x28,0xF0,0x80,
+ 0x22,0x90,0xF5,0x59,0x74,0x72,0xF0,0xA3,
+ 0x74,0x27,0xF0,0x80,0x16,0x90,0xF5,0x59,
+ 0x74,0x41,0xF0,0xA3,0x74,0x25,0xF0,0x80,
+ 0x0A,0x90,0xF5,0x59,0x74,0x87,0xF0,0xA3,
+ 0x74,0x21,0xF0,0x12,0x67,0x5C,0x90,0xF7,
+ 0x37,0x74,0xB8,0xF0,0xA3,0x74,0x0B,0xF0,
+ 0x22,0x90,0xF4,0x60,0xE0,0x24,0xFE,0x60,
+ 0x29,0x14,0x60,0x48,0x24,0x02,0x70,0x64,
+ 0x90,0x41,0x9E,0xE0,0x90,0xF4,0x03,0xF0,
+ 0x90,0x41,0x9F,0xE0,0x90,0xF4,0x02,0xF0,
+ 0x90,0x41,0xA0,0xE0,0x90,0xF4,0x01,0xF0,
+ 0x90,0x41,0xA1,0xE0,0x90,0xF4,0x00,0xF0,
+ 0x80,0x42,0x90,0x41,0xA2,0xE0,0x90,0xF4,
+ 0x03,0xF0,0x90,0x41,0xA3,0xE0,0x90,0xF4,
+ 0x02,0xF0,0x90,0x41,0xA4,0xE0,0x90,0xF4,
+ 0x01,0xF0,0x90,0x41,0xA5,0xE0,0x90,0xF4,
+ 0x00,0xF0,0x80,0x20,0x90,0x41,0xA6,0xE0,
+ 0x90,0xF4,0x03,0xF0,0x90,0x41,0xA7,0xE0,
+ 0x90,0xF4,0x02,0xF0,0x90,0x41,0xA8,0xE0,
+ 0x90,0xF4,0x01,0xF0,0x90,0x41,0xA9,0xE0,
+ 0x90,0xF4,0x00,0xF0,0x90,0x41,0xAA,0xE0,
+ 0x90,0xF4,0x07,0xF0,0x90,0x41,0xAB,0xE0,
+ 0x90,0xF4,0x06,0xF0,0x90,0x41,0xAC,0xE0,
+ 0x90,0xF4,0x05,0xF0,0x90,0x41,0xAD,0xE0,
+ 0x90,0xF4,0x04,0xF0,0x12,0x67,0x1D,0x90,
+ 0xF9,0x01,0xE0,0x14,0x60,0x16,0x14,0x60,
+ 0x1F,0x14,0x60,0x28,0x24,0x03,0x70,0x2E,
+ 0x90,0xF5,0x59,0x74,0x52,0xF0,0xA3,0x74,
+ 0x14,0xF0,0x80,0x22,0x90,0xF5,0x59,0x74,
+ 0xB9,0xF0,0xA3,0x74,0x13,0xF0,0x80,0x16,
+ 0x90,0xF5,0x59,0x74,0xA1,0xF0,0xA3,0x74,
+ 0x12,0xF0,0x80,0x0A,0x90,0xF5,0x59,0x74,
+ 0xC4,0xF0,0xA3,0x74,0x10,0xF0,0x12,0x67,
+ 0x4B,0x90,0xF7,0x37,0x74,0xB8,0xF0,0xA3,
+ 0x74,0x0B,0xF0,0x22,0x90,0xF4,0x08,0x74,
+ 0x99,0xF0,0xA3,0x74,0x02,0xF0,0xA3,0xE4,
+ 0xF0,0xA3,0xF0,0x22,0x90,0xF4,0x08,0x74,
+ 0x99,0xF0,0xA3,0x74,0x02,0xF0,0xA3,0xE4,
+ 0xF0,0xA3,0xF0,0x22,0x90,0xF4,0x08,0x74,
+ 0x99,0xF0,0xA3,0x74,0x02,0xF0,0xA3,0xE4,
+ 0xF0,0xA3,0xF0,0x22,0x90,0xF5,0x5B,0x74,
+ 0x60,0xF0,0xA3,0xE4,0xF0,0xA3,0xF0,0xA3,
+ 0xF0,0x22,0x90,0xF5,0x5B,0x74,0xFC,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0x74,0x02,0xF0,0xA3,
+ 0xE4,0xF0,0x22,0x90,0xF5,0x5B,0xE4,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0xE4,0xF0,0xA3,
+ 0xF0,0x22,0x90,0xFB,0x24,0xE4,0xF0,0x90,
+ 0x43,0x41,0xE0,0x90,0xFB,0x28,0xF0,0x22,
+ 0x90,0xFB,0x24,0x74,0x08,0xF0,0x90,0xFB,
+ 0x28,0x74,0x74,0xF0,0x22,0x90,0xFB,0x27,
+ 0xE0,0x54,0x1F,0xFF,0xC3,0x13,0xFF,0x90,
+ 0x41,0xDA,0x74,0x01,0xF0,0x90,0x43,0x41,
+ 0x74,0x82,0xF0,0x12,0x67,0x6B,0x90,0xFB,
+ 0x25,0x74,0x1F,0xF0,0xA3,0x74,0x22,0xF0,
+ 0x90,0xFB,0x29,0x74,0x42,0xF0,0x12,0x8E,
+ 0xE9,0x22,0x7E,0x41,0x7F,0x95,0xD3,0xEF,
+ 0x94,0x5D,0xEE,0x94,0x42,0x50,0x0D,0x8F,
+ 0x82,0x8E,0x83,0xE4,0xF0,0x0F,0xBF,0x00,
+ 0x01,0x0E,0x80,0xEA,0x12,0x67,0x86,0x12,
+ 0x47,0x82,0x90,0x41,0x8B,0x74,0x41,0xF0,
+ 0xA3,0x74,0x95,0xF0,0xE4,0x90,0x43,0x40,
+ 0xF0,0xD2,0xAF,0xD2,0xA8,0xC2,0xDB,0xD2,
+ 0xEC,0xF5,0x0F,0xF5,0x10,0x90,0x43,0x43,
+ 0xF0,0xA3,0xF0,0x90,0x43,0x3A,0xF0,0x90,
+ 0x41,0xD6,0x04,0xF0,0x90,0x41,0xE4,0x74,
+ 0x03,0xF0,0xE4,0x90,0x41,0xE5,0xF0,0xF5,
+ 0xF8,0x75,0xB8,0x12,0xD2,0x88,0xD2,0xEB,
+ 0x90,0x43,0x38,0xF0,0x90,0x41,0xD5,0xF0,
+ 0x90,0x43,0x3F,0x04,0xF0,0xE4,0x90,0x41,
+ 0xEB,0xF0,0x90,0x41,0xEA,0x04,0xF0,0x90,
+ 0x41,0xEF,0xF0,0x90,0x41,0xF0,0x04,0xF0,
+ 0xE4,0x90,0x41,0xF1,0xF0,0x90,0x41,0xF2,
+ 0xF0,0x90,0x42,0x12,0x04,0xF0,0x90,0x41,
+ 0xCF,0x74,0x10,0xF0,0x90,0x41,0xD0,0x74,
+ 0x27,0xF0,0x90,0x41,0xFA,0x74,0x50,0xF0,
+ 0x90,0x41,0xCE,0x74,0x01,0xF0,0x90,0x42,
+ 0x24,0x74,0x20,0xF0,0x90,0x42,0x25,0x74,
+ 0x2C,0xF0,0x90,0x42,0x26,0x74,0x01,0xF0,
+ 0x90,0x42,0x20,0x74,0x07,0xF0,0x90,0x42,
+ 0x21,0xF0,0x90,0x42,0x22,0x14,0xF0,0xE4,
+ 0x90,0x43,0x82,0xF0,0x90,0xF6,0x2E,0x74,
+ 0x64,0xF0,0xE4,0x90,0x43,0xBB,0xF0,0x90,
+ 0x41,0xE0,0x04,0xF0,0x90,0x43,0xF4,0x12,
+ 0xAA,0x9B,0x00,0x00,0x00,0x00,0xE4,0x90,
+ 0x41,0xF7,0xF0,0x90,0x41,0xF8,0xF0,0x90,
+ 0x41,0xF9,0xF0,0x90,0x41,0xC4,0x04,0xF0,
+ 0x90,0x41,0xCC,0x74,0x10,0xF0,0x90,0x41,
+ 0xCD,0x74,0x27,0xF0,0x7F,0x1B,0x12,0x89,
+ 0x23,0x90,0xFB,0x9F,0xE0,0x90,0x42,0x4E,
+ 0xF0,0x90,0xFB,0xA0,0xE0,0x90,0x44,0xBD,
+ 0xF0,0x12,0xA7,0x2B,0x22,0x90,0x43,0x38,
+ 0xE0,0x70,0x05,0x90,0x43,0x3D,0xF0,0x22,
+ 0x90,0x43,0x3D,0x74,0x01,0xF0,0x22,0x90,
+ 0x41,0xDA,0xE0,0xB4,0x01,0x0B,0x90,0xF0,
+ 0x7F,0x74,0x01,0xF0,0xA3,0xE4,0xF0,0x80,
+ 0x08,0x90,0xF0,0x7F,0xE4,0xF0,0xA3,0x04,
+ 0xF0,0x90,0x43,0xC3,0x74,0x01,0xF0,0xE4,
+ 0x90,0x41,0xD5,0xF0,0x90,0xF7,0x3C,0xE0,
+ 0x60,0x09,0xE4,0x90,0x41,0xD2,0xF0,0x90,
+ 0x41,0xD1,0xF0,0xE4,0x90,0x43,0xBF,0xF0,
+ 0xA3,0xF0,0x90,0x43,0xC1,0xF0,0xA3,0xF0,
+ 0x90,0x43,0xF8,0x04,0xF0,0x12,0x4E,0x89,
+ 0x12,0x88,0x8B,0x90,0x41,0xEA,0xE0,0x70,
+ 0x04,0x7F,0x01,0x80,0x02,0x7F,0x00,0x90,
+ 0x42,0x9E,0xEF,0xF0,0x12,0x72,0x21,0x90,
+ 0x43,0x42,0x74,0x01,0xF0,0xE4,0x90,0x43,
+ 0x40,0xF0,0x90,0xF7,0x31,0xE0,0xB4,0x01,
+ 0x03,0x12,0x9C,0xC3,0xE4,0x90,0x43,0x3E,
+ 0xF0,0x12,0xA8,0x22,0x90,0x43,0x3D,0x74,
+ 0x01,0xF0,0x22,0x90,0xF1,0xEA,0xE4,0xF0,
+ 0x90,0xF1,0xEF,0xF0,0x90,0xF1,0xF2,0xF0,
+ 0x90,0xF0,0x7C,0xF0,0x90,0xF1,0xFB,0xF0,
+ 0x90,0xF1,0xF7,0xF0,0x90,0xF1,0xE8,0x04,
+ 0xF0,0x90,0xF1,0xEB,0xF0,0x90,0xF1,0xF0,
+ 0xF0,0x90,0xF1,0xF3,0xF0,0x90,0xF0,0x7D,
+ 0xF0,0x90,0xF1,0xFA,0xF0,0x90,0xF1,0xF6,
+ 0xF0,0x90,0xF1,0xF8,0xE4,0xF0,0x90,0xF1,
+ 0xFC,0x74,0x03,0xF0,0x90,0xF1,0xE8,0xE4,
+ 0xF0,0x90,0xF1,0xEB,0xF0,0x90,0xF1,0xF0,
+ 0xF0,0x90,0xF1,0xF3,0xF0,0x90,0xF0,0x7D,
+ 0xF0,0x90,0xF1,0xFA,0xF0,0x90,0xF1,0xF6,
+ 0xF0,0x90,0xF1,0xEA,0x04,0xF0,0x90,0xF1,
+ 0xEF,0xF0,0x90,0xF1,0xF2,0xF0,0x90,0xF0,
+ 0x7C,0xF0,0x90,0xF1,0xF7,0xF0,0x90,0xF1,
+ 0xFB,0xF0,0x90,0xF5,0xC2,0xF0,0xE4,0xF0,
+ 0x22,0x12,0x69,0x64,0x90,0xF1,0x4E,0x74,
+ 0x3F,0xF0,0x90,0xF1,0x85,0xE4,0xF0,0x90,
+ 0xF1,0x47,0xF0,0xA3,0xF0,0x90,0x42,0x11,
+ 0xE0,0x64,0x01,0x60,0x08,0xE4,0x90,0x43,
+ 0x81,0xF0,0x12,0x72,0x42,0x90,0x43,0x81,
+ 0x74,0x01,0xF0,0x90,0x43,0x3D,0xF0,0x22,
+ 0x7F,0xD4,0x7E,0x27,0x12,0x47,0x76,0x90,
+ 0xF1,0x48,0x74,0x01,0xF0,0x90,0xF0,0x92,
+ 0xE4,0xF0,0x90,0xF0,0x91,0x04,0xF0,0x90,
+ 0xF0,0x94,0xF0,0x90,0xF0,0x81,0xF0,0x90,
+ 0xF0,0x91,0xE4,0xF0,0xA3,0x04,0xF0,0x90,
+ 0xF0,0x94,0xE0,0xB4,0x01,0xF9,0x90,0xF1,
+ 0xFB,0xE4,0xF0,0x90,0xF1,0xFA,0x04,0xF0,
+ 0x90,0xF1,0xFD,0xF0,0x90,0xF1,0xFC,0xF0,
+ 0x90,0xF1,0xFA,0xE4,0xF0,0xA3,0x04,0xF0,
+ 0x90,0xF1,0xFD,0xE0,0xB4,0x01,0xF9,0x90,
+ 0xF1,0xF7,0xE4,0xF0,0x90,0xF1,0xF6,0x04,
+ 0xF0,0x90,0xF1,0xF9,0xF0,0x90,0xF1,0xF8,
+ 0x04,0xF0,0x90,0xF2,0x14,0x14,0xF0,0x90,
+ 0xF1,0xF6,0xE4,0xF0,0xA3,0x04,0xF0,0x90,
+ 0xF1,0xF9,0xE0,0xB4,0x01,0xF9,0x90,0x43,
+ 0x3D,0x74,0x01,0xF0,0x22,0x90,0x41,0xD5,
+ 0xE0,0x70,0x04,0xFF,0x12,0x5C,0x30,0x12,
+ 0x64,0xF6,0x7F,0x01,0x12,0x5C,0x30,0x90,
+ 0xF6,0x24,0xE0,0xD3,0x94,0x04,0x40,0x0F,
+ 0xE4,0x90,0x41,0xDC,0xF0,0x90,0xF2,0x1C,
+ 0xF0,0x90,0x43,0x3D,0x04,0xF0,0x22,0x90,
+ 0x43,0x3D,0x74,0x01,0xF0,0x22,0x90,0xF1,
+ 0x48,0xE4,0xF0,0x90,0xF0,0x81,0x74,0x03,
+ 0xF0,0x90,0xF1,0xFC,0xF0,0x90,0xF5,0xAF,
+ 0xE4,0xF0,0x04,0xF0,0x90,0xF5,0xB4,0xE0,
+ 0xB4,0x01,0xF9,0x90,0xF5,0xAF,0xE4,0xF0,
+ 0x90,0x43,0x3D,0x04,0xF0,0x22,0x90,0xF4,
+ 0x13,0xE4,0xF0,0x12,0x5F,0x39,0x22,0x90,
+ 0xF4,0x1A,0x74,0x0D,0xF0,0x90,0xF4,0x10,
+ 0x74,0x08,0xF0,0x90,0xF4,0x18,0xF0,0x90,
+ 0xF5,0x61,0x74,0x06,0xF0,0xE4,0x90,0x42,
+ 0x6D,0xF0,0x90,0x42,0x98,0xF0,0x90,0x42,
+ 0x9A,0xF0,0x90,0x42,0x9B,0xF0,0x90,0x42,
+ 0x9D,0xF0,0x90,0x42,0x99,0xF0,0x90,0x42,
+ 0x9C,0xF0,0x90,0x42,0x96,0x04,0xF0,0x90,
+ 0xF5,0xBD,0xF0,0x90,0xF5,0xBB,0xF0,0x90,
+ 0xF5,0xBD,0xE4,0xF0,0x90,0xF5,0xBF,0x04,
+ 0xF0,0x90,0x42,0x97,0xF0,0x90,0xF5,0xB3,
+ 0xF0,0x90,0xF5,0xB1,0xF0,0x90,0xF5,0xB3,
+ 0xE4,0xF0,0x90,0xF5,0xB2,0x04,0xF0,0xD2,
+ 0xE9,0x22,0x90,0xF5,0xA8,0xE4,0xF0,0x04,
+ 0xF0,0x75,0xF0,0x02,0xE5,0x0F,0xA4,0x24,
+ 0x79,0xF5,0x82,0xE5,0xF0,0x34,0xAD,0xF5,
+ 0x83,0xE4,0x93,0xFC,0x74,0x01,0x93,0xFD,
+ 0xE4,0xFF,0x12,0x47,0xAD,0x90,0xF5,0xA9,
+ 0xE0,0x64,0x01,0x60,0x04,0x7F,0x01,0x80,
+ 0x02,0x7F,0x00,0x90,0xF1,0x1A,0xE0,0x5F,
+ 0x70,0xEB,0x90,0xF5,0xA9,0xE0,0xB4,0x01,
+ 0x04,0x7F,0x01,0x80,0x02,0x7F,0x00,0x90,
+ 0x43,0x3D,0xEF,0xF0,0xE0,0x64,0x01,0x70,
+ 0x40,0x90,0xF4,0xCC,0xE0,0xFF,0x90,0xF9,
+ 0x08,0xF0,0x90,0xF4,0xC1,0xE0,0xFF,0x90,
+ 0xF9,0x03,0xF0,0x90,0xF4,0xC4,0xE0,0xFF,
+ 0x90,0xF9,0x06,0xF0,0x90,0xF4,0xC5,0xE0,
+ 0xFF,0x90,0xF9,0x07,0xF0,0x90,0xF4,0xC6,
+ 0xE0,0x54,0x03,0xFF,0x90,0xF9,0x02,0xF0,
+ 0x70,0x05,0x90,0xF9,0x05,0x04,0xF0,0x90,
+ 0x41,0xD5,0x74,0x01,0xF0,0x90,0xF7,0x2F,
+ 0xF0,0x12,0x6E,0x8F,0x22,0x12,0x9A,0x04,
+ 0xE4,0x90,0x44,0x46,0xF0,0x90,0x44,0x42,
+ 0xF0,0xA3,0xF0,0x12,0x95,0xF5,0x90,0x44,
+ 0x41,0x74,0x01,0xF0,0x90,0x43,0x80,0xE0,
+ 0x60,0x0A,0x90,0xF1,0x2F,0x74,0x01,0xF0,
+ 0x90,0xF1,0x0A,0xF0,0x90,0x44,0x48,0x74,
+ 0x01,0xF0,0x12,0x97,0x17,0x12,0x70,0x6A,
+ 0x12,0x52,0x4E,0x12,0x51,0x31,0xE4,0xFF,
+ 0x12,0x50,0xFA,0x90,0xFD,0x32,0xE0,0x90,
+ 0xFD,0x92,0xF0,0x90,0xFD,0x31,0xE0,0x90,
+ 0xFD,0x91,0xF0,0x90,0xF2,0x1B,0x74,0x09,
+ 0xF0,0xE4,0xFF,0x12,0x83,0xDD,0x90,0xF2,
+ 0x1B,0x74,0x0A,0xF0,0x85,0x2C,0x2C,0x90,
+ 0xFD,0xA1,0xE0,0x60,0x03,0x12,0xA8,0x99,
+ 0x7F,0x04,0x12,0x6D,0xE8,0x90,0xF5,0x3B,
+ 0x74,0x01,0xF0,0xE4,0xFF,0x12,0x50,0xFA,
+ 0x12,0x72,0x21,0x90,0x43,0x3F,0xE0,0x60,
+ 0x21,0x90,0xF7,0x3C,0xE0,0x70,0x16,0x90,
+ 0xF7,0x40,0xF0,0x90,0xF5,0x54,0x04,0xF0,
+ 0xE4,0x90,0x44,0x9B,0xF0,0x90,0x44,0x9A,
+ 0xE0,0x90,0xF5,0x52,0xF0,0xE4,0x90,0x43,
+ 0x3B,0xF0,0x90,0x41,0xD1,0x74,0x01,0xF0,
+ 0x90,0x42,0x46,0xF0,0x12,0x93,0x38,0x7F,
+ 0x0A,0x12,0x6D,0xE8,0x90,0xF7,0x8E,0x74,
+ 0x01,0xF0,0x90,0x43,0xF8,0xF0,0x85,0x2C,
+ 0x2C,0x12,0xA8,0xF1,0xE5,0x2D,0x70,0x7B,
+ 0x90,0x42,0x45,0xE0,0x60,0x75,0x90,0x43,
+ 0x42,0xE0,0x60,0x6F,0x90,0xF0,0x2B,0xE0,
+ 0x60,0x69,0x90,0xF6,0x08,0xE0,0x70,0x63,
+ 0xC2,0xEB,0x90,0xF7,0x8B,0x74,0x02,0xF0,
+ 0x7F,0x01,0x12,0x86,0xB2,0x90,0x42,0x37,
+ 0xE0,0x90,0x43,0x36,0xF0,0x90,0xFD,0xA5,
+ 0x74,0x01,0xF0,0x90,0x43,0x3E,0xF0,0x90,
+ 0xFD,0x29,0xF0,0x7F,0x08,0x12,0x6D,0xE8,
+ 0x7F,0x01,0x12,0x86,0xB2,0x90,0x42,0x37,
+ 0xE0,0xFF,0x90,0x43,0x36,0xE0,0xC3,0x9F,
+ 0x40,0x0F,0x90,0xFD,0xA5,0xE4,0xF0,0x90,
+ 0xFD,0x29,0xF0,0x90,0x43,0x3E,0xF0,0x80,
+ 0x0E,0x90,0xFD,0xA5,0x74,0x01,0xF0,0x90,
+ 0xFD,0x29,0xF0,0x90,0x43,0x3E,0xF0,0xE4,
+ 0x90,0x43,0x42,0xF0,0x90,0xF7,0x8B,0x04,
+ 0xF0,0xD2,0xEB,0x12,0x6E,0x75,0x90,0xF7,
+ 0x3C,0xE0,0x70,0x03,0x12,0xAE,0xCF,0x90,
+ 0xF7,0x31,0xE0,0x60,0x05,0x7F,0x01,0x12,
+ 0x9C,0x29,0x12,0x91,0x6A,0x90,0xF2,0x1B,
+ 0x74,0x0B,0xF0,0x22,0x90,0x43,0x3D,0x74,
+ 0x01,0xF0,0xF5,0x0F,0x22,0x90,0x41,0xD6,
+ 0xE0,0x70,0x1D,0x90,0xF9,0x57,0xE0,0x54,
+ 0xFD,0x44,0x02,0xF0,0x90,0x41,0xD6,0x74,
+ 0x01,0xF0,0xE4,0x90,0x43,0x3A,0xF0,0x90,
+ 0x43,0x38,0xF0,0xA3,0xF0,0xF5,0x0F,0x22,
+ 0x90,0x43,0x39,0xE0,0x60,0x68,0x90,0x43,
+ 0x3D,0xE0,0xB4,0x01,0x0C,0xE5,0x0F,0x90,
+ 0xAD,0x5B,0x93,0xF5,0x0F,0xE4,0xF5,0x10,
+ 0x22,0xE5,0x0F,0x70,0x05,0xF5,0x0F,0xF5,
+ 0x10,0x22,0xE5,0x0F,0x90,0xAD,0x8D,0x93,
+ 0xB5,0x10,0x1C,0x90,0x43,0x43,0xE0,0xB5,
+ 0x0F,0x05,0x75,0x0F,0x01,0x80,0x0C,0x90,
+ 0x43,0x43,0xE5,0x0F,0xF0,0x90,0xAD,0x6F,
+ 0x93,0xF5,0x0F,0xE4,0xF5,0x10,0x22,0xE5,
+ 0x0F,0x90,0xAD,0x65,0x93,0xFF,0xB5,0x0F,
+ 0x03,0x05,0x10,0x22,0x90,0x43,0x44,0xE0,
+ 0xB5,0x0F,0x08,0x90,0xAD,0x6F,0x93,0xF5,
+ 0x0F,0x80,0x08,0x90,0x43,0x44,0xE5,0x0F,
+ 0xF0,0x8F,0x0F,0xE4,0xF5,0x10,0x22,0x90,
+ 0xF5,0x38,0xE0,0xFD,0xEF,0x60,0x0D,0x90,
+ 0xF5,0x38,0xE0,0xFE,0x6D,0x60,0xF5,0xAD,
+ 0x06,0x1F,0x80,0xF0,0x22,0xA2,0xAF,0xE4,
+ 0x33,0x90,0x43,0x37,0xF0,0x90,0xF7,0x14,
+ 0xE0,0x60,0x31,0x90,0xF7,0x32,0xE0,0x70,
+ 0x06,0x90,0xF7,0x3C,0xE0,0x60,0x25,0xC2,
+ 0xAF,0x90,0xF7,0x14,0xE4,0xF0,0x7F,0xD4,
+ 0x7E,0x27,0x12,0x47,0x76,0x90,0xF9,0x9D,
+ 0x74,0x01,0xF0,0x90,0xF7,0x16,0xF0,0x90,
+ 0xF7,0x11,0xE4,0xF0,0x90,0x43,0x37,0xE0,
+ 0x24,0xFF,0x92,0xAF,0x22,0xA2,0xAF,0xE4,
+ 0x33,0xFF,0xC2,0xAF,0x90,0xF7,0x14,0xE0,
+ 0x70,0x24,0x90,0xF7,0x32,0xE0,0x70,0x06,
+ 0x90,0xF7,0x3C,0xE0,0x60,0x18,0x90,0xF9,
+ 0x9D,0xE4,0xF0,0x90,0xF7,0x14,0x04,0xF0,
+ 0x90,0xF7,0x0D,0xF0,0x90,0xF7,0x86,0xF0,
+ 0xA3,0xF0,0x90,0xF7,0x11,0xF0,0xEF,0x24,
+ 0xFF,0x92,0xAF,0x22,0x90,0x42,0x46,0xE0,
+ 0x70,0x0C,0x90,0x42,0x47,0xE0,0x60,0x0A,
+ 0x90,0x44,0x97,0xE0,0x60,0x04,0x12,0x6E,
+ 0x3E,0x22,0x12,0x6D,0xFE,0x22,0x90,0xF1,
+ 0x0F,0xE0,0xFE,0x90,0xF1,0x0E,0xE0,0x7C,
+ 0x00,0x24,0x00,0xFF,0xEC,0x3E,0x90,0x43,
+ 0x45,0xF0,0xA3,0xEF,0xF0,0x90,0xF1,0x13,
+ 0xE0,0xFE,0x90,0xF1,0x12,0xE0,0x24,0x00,
+ 0xFF,0xEC,0x3E,0x90,0x43,0x47,0xF0,0xA3,
+ 0xEF,0xF0,0x90,0xF1,0x10,0xE0,0x64,0x01,
+ 0x60,0x03,0x02,0x6F,0x5C,0x90,0xF1,0x14,
+ 0xE0,0x64,0x01,0x60,0x03,0x02,0x6F,0x5C,
+ 0xD3,0x90,0x43,0x46,0xE0,0x94,0x10,0x90,
+ 0x43,0x45,0xE0,0x94,0x35,0x40,0x0C,0xA3,
+ 0xE0,0x94,0x30,0x90,0x43,0x45,0xE0,0x94,
+ 0x38,0x40,0x1B,0xD3,0x90,0x43,0x48,0xE0,
+ 0x94,0x10,0x90,0x43,0x47,0xE0,0x94,0x35,
+ 0x40,0x61,0xA3,0xE0,0x94,0x30,0x90,0x43,
+ 0x47,0xE0,0x94,0x38,0x50,0x55,0x90,0xF4,
+ 0xC1,0xE0,0x64,0x01,0x70,0x25,0x90,0xF9,
+ 0x00,0xE0,0x70,0x0C,0x90,0xF5,0x4B,0x74,
+ 0x05,0xF0,0x90,0xF6,0x55,0x74,0x20,0xF0,
+ 0x90,0xF9,0x00,0xE0,0xB4,0x01,0x0C,0x90,
+ 0xF5,0x4B,0x74,0x04,0xF0,0x90,0xF6,0x55,
+ 0x74,0x10,0xF0,0x90,0xF4,0xC1,0xE0,0x64,
+ 0x02,0x70,0x2C,0x90,0xF9,0x00,0xE0,0x70,
+ 0x06,0x90,0xF5,0x4B,0x74,0x09,0xF0,0x90,
+ 0xF9,0x00,0xE0,0xB4,0x01,0x06,0x90,0xF5,
+ 0x4B,0x74,0x08,0xF0,0x90,0xF6,0x55,0x74,
+ 0x20,0xF0,0x22,0x90,0xF5,0x4B,0x74,0x14,
+ 0xF0,0x90,0xF6,0x55,0x74,0x20,0xF0,0x22,
+ 0x12,0x70,0x49,0x12,0x47,0xCC,0x12,0x67,
+ 0xB3,0x90,0x43,0x50,0x74,0x01,0xF0,0xFB,
+ 0x7A,0x43,0x79,0x49,0x12,0xAC,0xE2,0xEF,
+ 0x4E,0x60,0x10,0x7A,0x47,0x79,0xCB,0x12,
+ 0xAA,0xCC,0x7A,0x47,0x79,0xCB,0x12,0xAA,
+ 0xCC,0xD2,0xAF,0x90,0xF2,0x1B,0xE4,0xF0,
+ 0x90,0x43,0x50,0xE0,0x70,0xFA,0x12,0x6E,
+ 0x75,0x90,0x43,0x50,0xE0,0x70,0xFA,0xE5,
+ 0x0F,0xB4,0x0A,0x00,0x40,0x03,0x02,0x70,
+ 0x39,0x90,0x6F,0xB9,0xF8,0x28,0x28,0x73,
+ 0x02,0x6F,0xD7,0x02,0x6F,0xDC,0x02,0x6F,
+ 0xE1,0x02,0x6F,0xE6,0x02,0x6F,0xEB,0x02,
+ 0x6F,0xF0,0x02,0x6F,0xF5,0x02,0x6F,0xFA,
+ 0x02,0x70,0x1A,0x02,0x70,0x34,0x12,0x68,
+ 0xCE,0x80,0x60,0x12,0x68,0xE0,0x80,0x5B,
+ 0x12,0x8F,0x6A,0x80,0x56,0x12,0x69,0xE2,
+ 0x80,0x51,0x12,0x6A,0x11,0x80,0x4C,0x12,
+ 0x6A,0x8E,0x80,0x47,0x12,0x6A,0xBF,0x80,
+ 0x42,0x90,0xF5,0x05,0x74,0x01,0xF0,0x90,
+ 0x44,0xA1,0xF0,0x12,0x6A,0xE7,0x90,0x43,
+ 0x3D,0xE0,0xB4,0x01,0x05,0x7F,0x01,0x12,
+ 0x5C,0x30,0x7F,0x01,0x12,0x6D,0xE8,0x80,
+ 0x22,0x12,0xA8,0xE6,0x85,0x2C,0x2C,0x90,
+ 0xF5,0x05,0xE4,0xF0,0x90,0x43,0x3D,0xE0,
+ 0xB4,0x01,0x10,0x12,0xAE,0x19,0x12,0x6B,
+ 0xE6,0x80,0x08,0x12,0x93,0x7B,0x80,0x03,
+ 0x12,0x6D,0x4D,0x12,0x9B,0xC3,0x12,0x6D,
+ 0x56,0x12,0x6E,0x75,0x02,0x6F,0xA2,0x22,
+ 0x90,0xFB,0x87,0xE0,0x60,0xFA,0x90,0xFB,
+ 0x9E,0xE0,0xB4,0x04,0x05,0xA3,0xE0,0xFF,
+ 0x80,0x02,0x7F,0x00,0x90,0x43,0x51,0xEF,
+ 0xF0,0x90,0xFB,0x87,0xE4,0xF0,0xC2,0xDB,
+ 0x22,0x90,0xF9,0x05,0xE0,0x60,0x0A,0x90,
+ 0xF4,0xC4,0xE0,0x90,0x43,0x53,0xF0,0x80,
+ 0x08,0x90,0xF4,0xC5,0xE0,0x90,0x43,0x53,
+ 0xF0,0x90,0x43,0x53,0xE0,0x14,0x60,0x20,
+ 0x14,0x60,0x2F,0x14,0x60,0x3D,0x14,0x60,
+ 0x4B,0x24,0x04,0x70,0x57,0x90,0xF7,0x7F,
+ 0x74,0xE0,0xF0,0xA3,0x74,0x01,0xF0,0xA3,
+ 0x74,0xBB,0xF0,0xA3,0x74,0x01,0xF0,0x22,
+ 0x90,0xF7,0x7F,0x74,0x40,0xF0,0xA3,0x74,
+ 0x01,0xF0,0xA3,0x74,0x55,0xF0,0xA3,0xE4,
+ 0xF0,0x22,0x90,0xF7,0x7F,0x74,0xFA,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0x74,0x30,0xF0,0xA3,
+ 0xE4,0xF0,0x22,0x90,0xF7,0x7F,0x74,0xF5,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x15,0xF0,
+ 0xA3,0xE4,0xF0,0x22,0x90,0xF7,0x7F,0x74,
+ 0xA0,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x15,
+ 0xF0,0xA3,0xE4,0xF0,0x22,0x90,0x44,0xBE,
+ 0xE0,0x70,0x03,0x02,0x72,0x20,0x90,0xF0,
+ 0x2B,0xE0,0x70,0x16,0x90,0xF5,0x3E,0xE0,
+ 0xD3,0x94,0x20,0x40,0x0D,0x90,0xF2,0x17,
+ 0x74,0xFE,0xF0,0x90,0xF7,0x87,0x74,0x01,
+ 0xF0,0x22,0x90,0xF7,0x32,0xE0,0x64,0x01,
+ 0x70,0x2D,0x90,0x42,0x37,0xE0,0xFE,0x90,
+ 0x44,0x9C,0xE0,0xFD,0xD3,0x9E,0x40,0x05,
+ 0xED,0x9E,0xFF,0x80,0x0C,0x90,0x44,0x9C,
+ 0xE0,0xFE,0x90,0x42,0x37,0xE0,0xC3,0x9E,
+ 0xFF,0xEF,0xC3,0x94,0x0A,0x50,0x08,0x90,
+ 0x44,0x9C,0xE0,0x90,0x42,0x37,0xF0,0x90,
+ 0x42,0x37,0xE0,0xFE,0xC3,0x94,0x23,0x50,
+ 0x07,0x90,0xF2,0x17,0x74,0xFE,0xF0,0x22,
+ 0xEE,0xC3,0x94,0x28,0x50,0x13,0x90,0xF2,
+ 0x17,0xE0,0xB4,0xFE,0x05,0xE0,0x64,0xA6,
+ 0x60,0x07,0x90,0xF2,0x17,0x74,0xFE,0xF0,
+ 0x22,0x90,0x42,0x37,0xE0,0xC3,0x94,0x2D,
+ 0x50,0x13,0x90,0xF2,0x17,0xE0,0xB4,0xFE,
+ 0x05,0xE0,0x64,0xA6,0x60,0x07,0x90,0xF2,
+ 0x17,0x74,0xA6,0xF0,0x22,0x90,0x42,0x37,
+ 0xE0,0xFE,0xC3,0x94,0x37,0x50,0x07,0x90,
+ 0xF2,0x17,0x74,0xA6,0xF0,0x22,0xEE,0xC3,
+ 0x94,0x3C,0x50,0x13,0x90,0xF2,0x17,0xE0,
+ 0xB4,0xA6,0x05,0xE0,0x64,0x26,0x60,0x07,
+ 0x90,0xF2,0x17,0x74,0xA6,0xF0,0x22,0x90,
+ 0x42,0x37,0xE0,0xC3,0x94,0x41,0x50,0x13,
+ 0x90,0xF2,0x17,0xE0,0xB4,0xA6,0x05,0xE0,
+ 0x64,0x26,0x60,0x07,0x90,0xF2,0x17,0x74,
+ 0x26,0xF0,0x22,0x90,0x42,0x37,0xE0,0xFE,
+ 0xC3,0x94,0x4B,0x50,0x07,0x90,0xF2,0x17,
+ 0x74,0x26,0xF0,0x22,0xEE,0xC3,0x94,0x50,
+ 0x50,0x13,0x90,0xF2,0x17,0xE0,0xB4,0x26,
+ 0x05,0xE0,0x64,0x25,0x60,0x07,0x90,0xF2,
+ 0x17,0x74,0x26,0xF0,0x22,0x90,0x42,0x37,
+ 0xE0,0xC3,0x94,0x55,0x50,0x13,0x90,0xF2,
+ 0x17,0xE0,0xB4,0x26,0x05,0xE0,0x64,0x25,
+ 0x60,0x07,0x90,0xF2,0x17,0x74,0x25,0xF0,
+ 0x22,0x90,0xF2,0x17,0x74,0x25,0xF0,0x22,
+ 0x90,0xF2,0x17,0x74,0xFE,0xF0,0x22,0xE4,
+ 0x90,0x42,0x2F,0xF0,0x90,0xF7,0x83,0x74,
+ 0xAA,0xF0,0xA3,0xE4,0xF0,0x22,0x90,0xF1,
+ 0x75,0x74,0x01,0xF0,0x90,0xF1,0x0A,0xF0,
+ 0x22,0x90,0x43,0x5D,0x74,0x01,0xF0,0xA3,
+ 0x04,0xF0,0xA3,0xF0,0x90,0x44,0x97,0xE0,
+ 0x60,0x04,0x7F,0x00,0x80,0x05,0x90,0x42,
+ 0x23,0xE0,0xFF,0x90,0x43,0x60,0xEF,0xF0,
+ 0x85,0x2C,0x2C,0x85,0x2C,0x2C,0x90,0x43,
+ 0x81,0xE0,0x14,0x70,0x03,0x02,0x72,0xFE,
+ 0x04,0x60,0x03,0x02,0x73,0x30,0x90,0x43,
+ 0x60,0xE0,0x60,0x09,0xE4,0xFD,0x7F,0x02,
+ 0x12,0x5C,0x4D,0x80,0x35,0x90,0x41,0xD5,
+ 0xE0,0xB4,0x01,0x23,0x90,0xF9,0x01,0xE0,
+ 0x90,0x43,0x5F,0xF0,0x90,0xF9,0x00,0xE0,
+ 0xFF,0x90,0x43,0x5D,0xF0,0x60,0x0B,0xA3,
+ 0x74,0x02,0xF0,0xA3,0xE0,0x24,0x02,0xF0,
+ 0x80,0x05,0xE4,0x90,0x43,0x5E,0xF0,0x90,
+ 0x43,0x5E,0xE0,0xFF,0xA3,0xE0,0xFD,0x12,
+ 0x5C,0x4D,0x90,0xF4,0x63,0xE4,0xF0,0x90,
+ 0xF4,0x69,0x74,0xFB,0xF0,0xA3,0xE4,0xF0,
+ 0x90,0xF4,0x6D,0x74,0x05,0xF0,0x7F,0x01,
+ 0x12,0x5C,0x30,0x12,0x6A,0x11,0x90,0x43,
+ 0x60,0xE0,0xFF,0x60,0x06,0x90,0xF9,0x00,
+ 0x74,0x01,0xF0,0x90,0xF5,0xC2,0x74,0x01,
+ 0xF0,0xE4,0xF0,0xEF,0x60,0x0F,0xE4,0x90,
+ 0x42,0x40,0xF0,0x04,0x12,0x77,0x03,0x90,
+ 0x42,0x40,0xE0,0x60,0x32,0x90,0xF1,0x57,
+ 0xE0,0x60,0x08,0x90,0xF1,0x49,0x74,0x01,
+ 0xF0,0xE4,0xF0,0x7D,0xFF,0x7C,0x7F,0xE4,
+ 0xFF,0x12,0x47,0xAD,0x90,0xF1,0x82,0xE0,
+ 0x70,0x15,0x90,0xF1,0x57,0xE0,0x60,0x0F,
+ 0x90,0x42,0x62,0xE0,0xB4,0x01,0x08,0x90,
+ 0xF1,0x7C,0xE0,0x60,0xE7,0x80,0xE5,0xE4,
+ 0x90,0x42,0x9F,0xF0,0x90,0xF1,0xB5,0xE0,
+ 0x90,0x42,0xA0,0xF0,0x90,0xF1,0xB4,0xE0,
+ 0x90,0x42,0xA1,0xF0,0x90,0xF1,0xB3,0xE0,
+ 0x90,0x42,0xA2,0xF0,0x22,0x90,0x43,0x6B,
+ 0x12,0xAA,0x9B,0x00,0x00,0x00,0x00,0x90,
+ 0x43,0x6F,0x12,0xAA,0x9B,0x00,0x00,0x00,
+ 0x00,0xE4,0x90,0x43,0x92,0xF0,0xA3,0xF0,
+ 0x90,0x43,0x94,0xF0,0xA3,0xF0,0x90,0x43,
+ 0x83,0xE0,0xFF,0xA3,0xE0,0x90,0x43,0x61,
+ 0xCF,0xF0,0xA3,0xEF,0xF0,0x90,0x43,0x85,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0xD3,0x90,0x43,
+ 0x62,0xE0,0x9F,0x90,0x43,0x61,0xE0,0x9E,
+ 0x40,0x03,0x02,0x74,0xD6,0xA3,0xE0,0x90,
+ 0xF6,0x67,0xF0,0x90,0x43,0x61,0xE0,0x90,
+ 0xF6,0x68,0xF0,0x90,0xF6,0x66,0x74,0x01,
+ 0xF0,0x90,0xF6,0x66,0xE0,0xB4,0x01,0xF9,
+ 0x90,0xF6,0x30,0xE0,0x54,0x0F,0xFB,0xA3,
+ 0xE0,0x75,0xF0,0x10,0xA4,0xFF,0x90,0xF6,
+ 0x30,0xE0,0xFD,0xC4,0x54,0x0F,0x7C,0x00,
+ 0x2F,0xFF,0xEC,0x35,0xF0,0xFE,0xE4,0xFD,
+ 0x90,0x43,0x63,0x12,0xAA,0x8F,0xEB,0xB4,
+ 0x0F,0x16,0x90,0x43,0x63,0xE0,0xFC,0xA3,
+ 0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0x90,0x43,0x67,0x12,0xAA,0x8F,0x80,0x25,
+ 0x90,0x43,0x63,0xE0,0xFC,0xA3,0xE0,0xFD,
+ 0xA3,0xE0,0xFE,0xA3,0xE0,0x24,0x00,0xFF,
+ 0xEE,0x34,0x10,0xFE,0xE4,0x3D,0xFD,0xE4,
+ 0x3C,0xFC,0xA8,0x03,0x12,0xAA,0x7C,0x90,
+ 0x43,0x67,0x12,0xAA,0x8F,0x90,0x43,0x6B,
+ 0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x90,0x43,0x67,0xE0,0xF8,
+ 0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,
+ 0xFB,0xD3,0x12,0xAA,0x44,0x40,0x48,0x90,
+ 0x43,0x6B,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x43,0x6F,
+ 0x12,0xAA,0x8F,0x90,0x43,0x92,0xE0,0xFF,
+ 0xA3,0xE0,0x90,0x43,0x94,0xCF,0xF0,0xA3,
+ 0xEF,0xF0,0x90,0x43,0x67,0xE0,0xFC,0xA3,
+ 0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0x90,0x43,0x6B,0x12,0xAA,0x8F,0x90,0x43,
+ 0x61,0xE0,0xFF,0xA3,0xE0,0x90,0x43,0x92,
+ 0xCF,0xF0,0xA3,0xEF,0xF0,0x80,0x45,0x90,
+ 0x43,0x6F,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x43,0x67,
+ 0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,
+ 0xA3,0xE0,0xFB,0xD3,0x12,0xAA,0x44,0x40,
+ 0x23,0x90,0x43,0x67,0xE0,0xFC,0xA3,0xE0,
+ 0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,0x90,
+ 0x43,0x6F,0x12,0xAA,0x8F,0x90,0x43,0x61,
+ 0xE0,0xFF,0xA3,0xE0,0x90,0x43,0x94,0xCF,
+ 0xF0,0xA3,0xEF,0xF0,0x90,0x43,0x62,0xE0,
+ 0x04,0xF0,0x70,0x06,0x90,0x43,0x61,0xE0,
+ 0x04,0xF0,0x02,0x73,0x7E,0x22,0x90,0x41,
+ 0xB9,0xE0,0xFE,0x90,0x41,0xB8,0xE0,0x7C,
+ 0x00,0x24,0x00,0xFF,0xEC,0x3E,0x90,0x43,
+ 0x73,0xF0,0xA3,0xEF,0xF0,0xE4,0x7F,0x50,
+ 0x7E,0x0D,0xFD,0x90,0x43,0x8B,0xE0,0xF8,
+ 0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,
+ 0xFB,0xC3,0x12,0xAA,0x44,0x40,0x24,0x90,
+ 0x43,0x8B,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,
+ 0xE0,0xFE,0xA3,0xE0,0x24,0xB0,0xFF,0xEE,
+ 0x34,0xF2,0xFE,0xED,0x34,0xFF,0xFD,0xEC,
+ 0x34,0xFF,0xFC,0x90,0x43,0x87,0x12,0xAA,
+ 0x8F,0x80,0x23,0x90,0x43,0x8B,0xE0,0xF8,
+ 0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,
+ 0xFB,0xC3,0x74,0x50,0x9B,0xFF,0x74,0x0D,
+ 0x9A,0xFE,0xE4,0x99,0xFD,0xE4,0x98,0xFC,
+ 0x90,0x43,0x87,0x12,0xAA,0x8F,0x90,0x43,
+ 0x73,0xE0,0xFE,0xA3,0xE0,0xFF,0xE4,0xFC,
+ 0xFD,0x90,0x43,0x87,0xE0,0xF8,0xA3,0xE0,
+ 0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,0xFB,0x12,
+ 0xA9,0xD1,0x78,0x09,0x12,0xAA,0x55,0x90,
+ 0x43,0x87,0x12,0xAA,0x8F,0xE4,0x7F,0x50,
+ 0x7E,0x0D,0xFD,0xFC,0x90,0x43,0x8B,0xE0,
+ 0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,
+ 0xE0,0xFB,0xC3,0x12,0xAA,0x44,0x50,0x22,
+ 0x90,0x43,0x87,0xE0,0xF8,0xA3,0xE0,0xF9,
+ 0xA3,0xE0,0xFA,0xA3,0xE0,0xFB,0xC3,0xE4,
+ 0x9B,0xFF,0x74,0x40,0x9A,0xFE,0xE4,0x99,
+ 0xFD,0xE4,0x98,0xFC,0x90,0x43,0x87,0x12,
+ 0xAA,0x8F,0x22,0x90,0x41,0xB7,0xE0,0xFE,
+ 0x90,0x41,0xB6,0xE0,0x7C,0x00,0x24,0x00,
+ 0xFF,0xEC,0x3E,0xFE,0xE4,0xFD,0x90,0x43,
+ 0x87,0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,
+ 0xFA,0xA3,0xE0,0xFB,0x12,0xA9,0xD1,0x78,
+ 0x09,0x12,0xAA,0x55,0x90,0x43,0x8B,0x12,
+ 0xAA,0x8F,0x22,0x74,0xFF,0x90,0x43,0x77,
+ 0xF0,0xA3,0xF0,0x90,0x43,0x83,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0xC3,0x90,0x43,0x86,0xE0,
+ 0x9F,0xFF,0x90,0x43,0x85,0xE0,0x9E,0xFE,
+ 0x90,0x42,0x21,0xE0,0xFD,0x7C,0x00,0x12,
+ 0xA9,0x34,0x90,0x42,0x20,0xE0,0xFD,0xEF,
+ 0xA8,0x05,0x08,0x80,0x05,0xCE,0xC3,0x13,
+ 0xCE,0x13,0xD8,0xF9,0xFF,0x90,0x42,0x22,
+ 0xE0,0x2F,0x90,0x43,0x75,0xF0,0x90,0x43,
+ 0x82,0xE0,0x70,0x16,0x12,0x73,0x4E,0x90,
+ 0x43,0x92,0xE0,0xFE,0xA3,0xE0,0xFF,0xE4,
+ 0xFC,0xFD,0x90,0x43,0x8B,0x12,0xAA,0x8F,
+ 0x80,0x3F,0x90,0x43,0x82,0xE0,0xB4,0x01,
+ 0x16,0x12,0x73,0x4E,0x90,0x43,0x92,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0xE4,0xFC,0xFD,0x90,
+ 0x43,0x8B,0x12,0xAA,0x8F,0x80,0x22,0x90,
+ 0x43,0x85,0xE0,0xFE,0xA3,0xE0,0xFF,0x90,
+ 0x43,0x84,0xE0,0x2F,0xFF,0x90,0x43,0x83,
+ 0xE0,0x3E,0xC3,0x13,0xFE,0xEF,0x13,0xFF,
+ 0xE4,0xFC,0xFD,0x90,0x43,0x8B,0x12,0xAA,
+ 0x8F,0x12,0x74,0xD7,0x90,0x43,0x84,0xE0,
+ 0x24,0xB0,0xF0,0x90,0x43,0x83,0xE0,0x34,
+ 0x02,0xF0,0x90,0x43,0x86,0xE0,0x24,0xB0,
+ 0xF0,0x90,0x43,0x85,0xE0,0x34,0x02,0xF0,
+ 0x90,0x43,0x82,0xE0,0xFF,0x70,0x20,0x90,
+ 0x43,0x75,0xE0,0xA3,0xF0,0x90,0xF1,0x09,
+ 0xF0,0x90,0x43,0x8A,0xE0,0x90,0xF1,0x0E,
+ 0xF0,0x90,0x43,0x89,0xE0,0x90,0xF1,0x0F,
+ 0xF0,0xA3,0x74,0x01,0xF0,0x80,0x34,0xEF,
+ 0x64,0x01,0x70,0x2F,0x90,0x43,0x8F,0xE0,
+ 0x70,0x0A,0x90,0x43,0x75,0xE0,0x90,0xF1,
+ 0x0B,0xF0,0x80,0x0B,0x90,0x43,0x76,0xE0,
+ 0xFF,0xC3,0x13,0x90,0xF1,0x0B,0xF0,0x90,
+ 0x43,0x8A,0xE0,0x90,0xF1,0x12,0xF0,0x90,
+ 0x43,0x89,0xE0,0x90,0xF1,0x13,0xF0,0xA3,
+ 0x74,0x01,0xF0,0x90,0x43,0x82,0xE0,0x04,
+ 0xF0,0x22,0xE4,0x90,0x43,0x8F,0xF0,0x90,
+ 0x43,0x82,0xF0,0x90,0x42,0x25,0xE0,0x90,
+ 0x43,0x7A,0xF0,0x90,0x42,0x26,0xE0,0x90,
+ 0x43,0x79,0xF0,0x90,0xF6,0x25,0xE4,0xF0,
+ 0x90,0x42,0x24,0xE0,0x90,0xF6,0x26,0xF0,
+ 0x90,0xF6,0x2B,0x74,0x02,0xF0,0xA3,0xF0,
+ 0xA3,0xE4,0xF0,0x90,0xF6,0x25,0x04,0xF0,
+ 0x90,0xF6,0x2F,0xF0,0x90,0xF6,0x2F,0xE0,
+ 0xB4,0x01,0xF9,0x90,0xF6,0x32,0xE0,0x90,
+ 0x43,0x91,0xF0,0x90,0xF6,0x33,0xE0,0x90,
+ 0x43,0x90,0xF0,0x90,0x43,0x79,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0xC3,0x90,0x43,0x91,0xE0,
+ 0x9F,0x90,0x43,0x90,0xE0,0x9E,0x40,0x03,
+ 0x02,0x7A,0x09,0x90,0x43,0x79,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0xC3,0x90,0x43,0x91,0xE0,
+ 0x9F,0x90,0x43,0x90,0xE0,0x9E,0x50,0x3A,
+ 0x90,0xF6,0x2C,0xE0,0xB4,0x02,0x05,0x74,
+ 0x01,0xF0,0x80,0x0A,0x90,0xF6,0x2B,0xE0,
+ 0x04,0xF0,0xA3,0x74,0x02,0xF0,0x90,0xF6,
+ 0x2F,0x74,0x01,0xF0,0x90,0xF6,0x2F,0xE0,
+ 0xB4,0x01,0xF9,0x90,0xF6,0x32,0xE0,0x90,
+ 0x43,0x91,0xF0,0x90,0xF6,0x33,0xE0,0x90,
+ 0x43,0x90,0xF0,0x90,0xF6,0x2B,0xE0,0xB4,
+ 0x0F,0xB1,0x90,0x42,0x27,0xE0,0xFF,0x90,
+ 0xF6,0x2B,0xE0,0xC3,0x9F,0x40,0x04,0x7F,
+ 0x01,0x80,0x02,0x7F,0x00,0x90,0x43,0x80,
+ 0xEF,0xF0,0x60,0x5C,0x90,0xF1,0x2F,0xE4,
+ 0xF0,0x90,0xF1,0x34,0x04,0xF0,0x90,0xF1,
+ 0x37,0x74,0x10,0xF0,0xA3,0x74,0x06,0xF0,
+ 0x90,0xF1,0x3B,0x74,0x60,0xF0,0xA3,0x74,
+ 0x1A,0xF0,0x90,0xF1,0x3F,0x74,0xC0,0xF0,
+ 0xA3,0x74,0x2D,0xF0,0x90,0xF1,0x33,0x74,
+ 0x01,0xF0,0x90,0xF1,0x36,0x74,0x0D,0xF0,
+ 0x90,0xF1,0x39,0x74,0x10,0xF0,0xA3,0x74,
+ 0x18,0xF0,0x90,0xF1,0x3D,0x74,0x60,0xF0,
+ 0xA3,0x74,0x1B,0xF0,0x90,0xF1,0x41,0x74,
+ 0x40,0xF0,0xA3,0x74,0x3A,0xF0,0x90,0xF1,
+ 0x35,0x74,0x01,0xF0,0x90,0xF1,0x11,0xF0,
+ 0x90,0xF6,0x2B,0xE0,0x14,0xF0,0xC2,0xAF,
+ 0x90,0xF6,0x2D,0x74,0x01,0xF0,0x04,0x12,
+ 0xAF,0x2B,0x90,0x42,0x40,0xE0,0x60,0x03,
+ 0x02,0x7A,0x26,0x90,0xF6,0x4C,0xE0,0x90,
+ 0x43,0x7C,0xF0,0x90,0xF6,0x4D,0xE0,0x90,
+ 0x43,0x7D,0xF0,0x90,0xF6,0x4E,0xE0,0x90,
+ 0x43,0x7E,0xF0,0x90,0xF6,0x4F,0xE0,0x90,
+ 0x43,0x7F,0xF0,0x90,0x43,0x7D,0xE0,0xFF,
+ 0x90,0x43,0x7C,0xE0,0xFE,0x6F,0x60,0x20,
+ 0x90,0x43,0x7E,0xE0,0xFD,0xEE,0x6D,0x60,
+ 0x17,0xA3,0xE0,0xFC,0xEE,0x6C,0x60,0x10,
+ 0xEF,0x6D,0x60,0x0C,0x90,0x43,0x7D,0xE0,
+ 0x6C,0x60,0x05,0xA3,0xE0,0xB5,0x04,0x06,
+ 0x90,0x43,0x8F,0x74,0x01,0xF0,0x90,0x43,
+ 0x7B,0x74,0x04,0xF0,0x90,0x43,0x7B,0xE0,
+ 0xFF,0xC3,0x94,0x06,0x40,0x03,0x02,0x7A,
+ 0x09,0x90,0xF6,0x4C,0xE0,0x6F,0x70,0x4B,
+ 0x90,0x43,0x8F,0xE0,0xB4,0x01,0x21,0x90,
+ 0x43,0x7B,0xE0,0xB4,0x05,0x1A,0x90,0x43,
+ 0x84,0x74,0xA0,0xF0,0x90,0x43,0x83,0x74,
+ 0x0F,0xF0,0x90,0x43,0x86,0x74,0x9F,0xF0,
+ 0x90,0x43,0x85,0x74,0x1A,0xF0,0x80,0x20,
+ 0x90,0xF6,0x34,0xE0,0x90,0x43,0x84,0xF0,
+ 0x90,0xF6,0x35,0xE0,0x90,0x43,0x83,0xF0,
+ 0x90,0xF6,0x36,0xE0,0x90,0x43,0x86,0xF0,
+ 0x90,0xF6,0x37,0xE0,0x90,0x43,0x85,0xF0,
+ 0x12,0x75,0xE4,0x90,0x43,0x7B,0xE0,0xFF,
+ 0x90,0xF6,0x4D,0xE0,0x6F,0x70,0x48,0x90,
+ 0x43,0x8F,0xE0,0xB4,0x01,0x1E,0xEF,0xB4,
+ 0x05,0x1A,0x90,0x43,0x84,0x74,0xA0,0xF0,
+ 0x90,0x43,0x83,0x74,0x0F,0xF0,0x90,0x43,
+ 0x86,0x74,0x9F,0xF0,0x90,0x43,0x85,0x74,
+ 0x1A,0xF0,0x80,0x20,0x90,0xF6,0x3A,0xE0,
+ 0x90,0x43,0x84,0xF0,0x90,0xF6,0x3B,0xE0,
+ 0x90,0x43,0x83,0xF0,0x90,0xF6,0x3C,0xE0,
+ 0x90,0x43,0x86,0xF0,0x90,0xF6,0x3D,0xE0,
+ 0x90,0x43,0x85,0xF0,0x12,0x75,0xE4,0x90,
+ 0x43,0x7B,0xE0,0xFF,0x90,0xF6,0x4E,0xE0,
+ 0x6F,0x70,0x48,0x90,0x43,0x8F,0xE0,0xB4,
+ 0x01,0x1E,0xEF,0xB4,0x05,0x1A,0x90,0x43,
+ 0x84,0x74,0xA0,0xF0,0x90,0x43,0x83,0x74,
+ 0x0F,0xF0,0x90,0x43,0x86,0x74,0x9F,0xF0,
+ 0x90,0x43,0x85,0x74,0x1A,0xF0,0x80,0x20,
+ 0x90,0xF6,0x40,0xE0,0x90,0x43,0x84,0xF0,
+ 0x90,0xF6,0x41,0xE0,0x90,0x43,0x83,0xF0,
+ 0x90,0xF6,0x42,0xE0,0x90,0x43,0x86,0xF0,
+ 0x90,0xF6,0x43,0xE0,0x90,0x43,0x85,0xF0,
+ 0x12,0x75,0xE4,0x90,0x43,0x7B,0xE0,0xFF,
+ 0x90,0xF6,0x4F,0xE0,0x6F,0x70,0x48,0x90,
+ 0x43,0x8F,0xE0,0xB4,0x01,0x1E,0xEF,0xB4,
+ 0x05,0x1A,0x90,0x43,0x84,0x74,0xA0,0xF0,
+ 0x90,0x43,0x83,0x74,0x0F,0xF0,0x90,0x43,
+ 0x86,0x74,0x9F,0xF0,0x90,0x43,0x85,0x74,
+ 0x1A,0xF0,0x80,0x20,0x90,0xF6,0x46,0xE0,
+ 0x90,0x43,0x84,0xF0,0x90,0xF6,0x47,0xE0,
+ 0x90,0x43,0x83,0xF0,0x90,0xF6,0x48,0xE0,
+ 0x90,0x43,0x86,0xF0,0x90,0xF6,0x49,0xE0,
+ 0x90,0x43,0x85,0xF0,0x12,0x75,0xE4,0x90,
+ 0x43,0x7B,0xE0,0x04,0xF0,0x02,0x78,0xA5,
+ 0x90,0xF6,0x25,0xE4,0xF0,0x90,0x43,0x80,
+ 0xE0,0x70,0x0D,0x90,0x43,0x82,0xE0,0xB4,
+ 0x01,0x06,0x90,0xF1,0x0A,0x74,0x01,0xF0,
+ 0x7F,0x01,0x12,0x6D,0xE8,0x22,0xE4,0xFD,
+ 0x90,0xF5,0xF7,0xE0,0xFE,0x90,0xF5,0xF6,
+ 0xE0,0x7A,0x00,0x24,0x00,0xFF,0xEA,0x3E,
+ 0x90,0x43,0xDE,0xF0,0xA3,0xEF,0xF0,0x90,
+ 0x43,0xDE,0xE0,0xFE,0xA3,0xE0,0xFF,0xC3,
+ 0x94,0x40,0xEE,0x94,0x08,0x40,0x0A,0xD3,
+ 0xEF,0x94,0x60,0xEE,0x94,0x08,0x50,0x01,
+ 0x0D,0x90,0x41,0xF3,0xE0,0x64,0x02,0x70,
+ 0x45,0xED,0x64,0x01,0x70,0x40,0x90,0xF9,
+ 0x04,0xE0,0x64,0x01,0x70,0x38,0x90,0xF9,
+ 0x01,0xE0,0x64,0x03,0x70,0x30,0x90,0xF9,
+ 0x00,0xE0,0x64,0x01,0x70,0x28,0x90,0xF9,
+ 0x03,0xE0,0x64,0x02,0x70,0x20,0x90,0x43,
+ 0xE4,0xE0,0xFF,0x70,0x0B,0x90,0xF5,0x6C,
+ 0x74,0xE5,0xF0,0xA3,0x74,0x01,0xF0,0x22,
+ 0xEF,0xB4,0x01,0x0A,0x90,0xF5,0x6C,0x74,
+ 0x1B,0xF0,0xA3,0x74,0x02,0xF0,0x22,0x90,
+ 0x43,0xE2,0x74,0x01,0xF0,0x90,0x41,0xF3,
+ 0xE0,0xFF,0xD3,0x94,0x01,0x40,0x05,0xEF,
+ 0x14,0xFF,0x80,0x02,0x7F,0x01,0x90,0x43,
+ 0xE3,0xEF,0xF0,0x90,0xF6,0x6D,0x74,0x01,
+ 0xF0,0x90,0x41,0xF3,0xE0,0x90,0xF6,0x6C,
+ 0xF0,0x90,0xF6,0x69,0x74,0x01,0xF0,0xE4,
+ 0xF9,0x90,0x41,0xF3,0xE0,0xFE,0xE9,0xC3,
+ 0x9E,0x50,0x47,0xE9,0x25,0xE0,0x24,0xC5,
+ 0xF5,0x82,0xE4,0x34,0x43,0xF5,0x83,0xE0,
+ 0x90,0xF6,0x6B,0xF0,0xE9,0x25,0xE0,0x24,
+ 0xC6,0xF5,0x82,0xE4,0x34,0x43,0xF5,0x83,
+ 0xE0,0x90,0xF6,0x6A,0xF0,0xE9,0x25,0xE0,
+ 0x24,0xCD,0xF5,0x82,0xE4,0x34,0x43,0xF5,
+ 0x83,0xE0,0x90,0xF6,0x6B,0xF0,0xE9,0x25,
+ 0xE0,0x24,0xCE,0xF5,0x82,0xE4,0x34,0x43,
+ 0xF5,0x83,0xE0,0x90,0xF6,0x6A,0xF0,0x09,
+ 0x80,0xAF,0x90,0x42,0x12,0xE0,0xB4,0x01,
+ 0x46,0x90,0x43,0xBF,0xE0,0xFC,0xA3,0xE0,
+ 0xFD,0xC3,0x90,0x43,0xEA,0xE0,0x9D,0x90,
+ 0x43,0xE9,0xE0,0x9C,0x50,0x0E,0x90,0x43,
+ 0xBF,0xE0,0xA3,0xE0,0x90,0x43,0xE9,0xEC,
+ 0xF0,0xA3,0xED,0xF0,0x90,0x43,0xC1,0xE0,
+ 0xFC,0xA3,0xE0,0xFD,0xC3,0x90,0x43,0xEC,
+ 0xE0,0x9D,0x90,0x43,0xEB,0xE0,0x9C,0x50,
+ 0x0E,0x90,0x43,0xC1,0xE0,0xA3,0xE0,0x90,
+ 0x43,0xEB,0xEC,0xF0,0xA3,0xED,0xF0,0x79,
+ 0x01,0x90,0x41,0xF3,0xE0,0xFE,0xE9,0xC3,
+ 0x9E,0x50,0x79,0xE9,0x25,0xE0,0x24,0xCD,
+ 0xF5,0x82,0xE4,0x34,0x43,0xF5,0x83,0xE0,
+ 0xFC,0xA3,0xE0,0xFD,0x90,0x43,0xCD,0xE0,
+ 0xFA,0xA3,0xE0,0xFB,0xC3,0xED,0x9B,0xFD,
+ 0xEC,0x9A,0xFC,0xD3,0x90,0x43,0xEA,0xE0,
+ 0x9D,0x90,0x43,0xE9,0xE0,0x9C,0x40,0x06,
+ 0xE9,0x04,0x90,0x43,0xE2,0xF0,0x90,0x43,
+ 0xE0,0xE0,0xFC,0xA3,0xE0,0xFD,0x90,0x43,
+ 0xCE,0xE0,0x2D,0xFD,0x90,0x43,0xCD,0xE0,
+ 0x3C,0xFC,0xC3,0xEE,0x99,0xFF,0x25,0xE0,
+ 0x24,0xCD,0xF5,0x82,0xE4,0x34,0x43,0xF5,
+ 0x83,0xE0,0xFA,0xA3,0xE0,0xFB,0xC3,0xED,
+ 0x9B,0xFD,0xEC,0x9A,0xFC,0xD3,0x90,0x43,
+ 0xEC,0xE0,0x9D,0x90,0x43,0xEB,0xE0,0x9C,
+ 0x40,0x06,0xEF,0x14,0x90,0x43,0xE3,0xF0,
+ 0x09,0x02,0x7B,0x7A,0x90,0x43,0xE3,0xE0,
+ 0xFF,0x90,0x43,0xE2,0xE0,0xFE,0xD3,0x9F,
+ 0x40,0x0F,0xEF,0x24,0x01,0xFD,0xE4,0x33,
+ 0xFC,0xEE,0xB5,0x05,0xE7,0xE4,0xB5,0x04,
+ 0xE3,0x90,0x41,0xF3,0xE0,0xFF,0xB4,0x01,
+ 0x0C,0xE4,0x90,0x43,0xE4,0xF0,0x90,0x43,
+ 0xDD,0x74,0x0C,0xF0,0x22,0x90,0x43,0xE3,
+ 0xE0,0xF9,0x24,0x01,0xFD,0xE4,0x33,0xFC,
+ 0x90,0x43,0xE2,0xE0,0xFE,0xB5,0x05,0x1E,
+ 0xE4,0xB5,0x04,0x1A,0xEE,0xB5,0x07,0x07,
+ 0xE4,0x90,0x43,0xE4,0xF0,0x80,0x08,0x90,
+ 0x43,0xE2,0xE0,0x90,0x43,0xE4,0xF0,0x90,
+ 0x43,0xDD,0x74,0x0C,0xF0,0x22,0xE9,0xFF,
+ 0x90,0x43,0xE2,0xE0,0x2F,0xFF,0xE4,0x33,
+ 0xA2,0xE7,0x13,0xEF,0x13,0x90,0x43,0xE5,
+ 0xF0,0x90,0x43,0xDD,0x74,0x06,0xF0,0x22,
+ 0x90,0x43,0xE5,0xE0,0xFE,0x90,0x43,0x9F,
+ 0xF0,0xE4,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,
+ 0xA3,0xF0,0xA3,0xF0,0xA3,0xCE,0xF0,0xE4,
+ 0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,
+ 0x90,0x43,0x9F,0xE0,0x04,0xFF,0x90,0x41,
+ 0xF3,0xE0,0xFE,0x2F,0x8E,0xF0,0x84,0xAF,
+ 0xF0,0x90,0x43,0x9F,0xEF,0xF0,0xA3,0xE0,
+ 0xFD,0xA3,0xE0,0xA3,0xCD,0xF0,0xA3,0xED,
+ 0xF0,0xEF,0x25,0xE0,0x24,0xCD,0xF5,0x82,
+ 0xE4,0x34,0x43,0xF5,0x83,0xE0,0xFE,0xA3,
+ 0xE0,0xFF,0x90,0x43,0xE0,0xE0,0xFC,0xA3,
+ 0xE0,0xFD,0xEF,0x2D,0xFF,0xEE,0x3C,0xFE,
+ 0x90,0x43,0xE5,0xE0,0x25,0xE0,0x24,0xCD,
+ 0xF5,0x82,0xE4,0x34,0x43,0xF5,0x83,0xE0,
+ 0xFA,0xA3,0xE0,0xFB,0xC3,0xEF,0x9B,0xFF,
+ 0xEE,0x9A,0xFE,0xED,0x24,0x01,0xFD,0xE4,
+ 0x3C,0xFC,0x12,0xA9,0x9B,0x90,0x43,0xA0,
+ 0xEC,0xF0,0xA3,0xED,0xF0,0xD3,0x90,0x43,
+ 0xDC,0xE0,0x9D,0xEC,0x64,0x80,0xF8,0x90,
+ 0x43,0xDB,0xE0,0x64,0x80,0x98,0x50,0x80,
+ 0x90,0x41,0xF3,0xE0,0xFD,0x7C,0x00,0x90,
+ 0x43,0xA5,0xE0,0x2D,0xFF,0x90,0x43,0xA4,
+ 0xE0,0x3C,0xCF,0x24,0xFF,0xCF,0x34,0xFF,
+ 0xFE,0x12,0xA9,0x9B,0xEC,0xF0,0xA3,0xED,
+ 0xF0,0xA3,0xE0,0xFF,0xA3,0xE0,0xA3,0xCF,
+ 0xF0,0xA3,0xEF,0xF0,0x90,0x43,0xA5,0xE0,
+ 0x25,0xE0,0xFF,0x90,0x43,0xA4,0xE0,0x33,
+ 0xFE,0x74,0xCD,0x2F,0xF5,0x82,0x74,0x43,
+ 0x3E,0xF5,0x83,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0x90,0x43,0xE5,0xE0,0x25,0xE0,0x24,0xCD,
+ 0xF5,0x82,0xE4,0x34,0x43,0xF5,0x83,0xE0,
+ 0xFC,0xA3,0xE0,0xFD,0x90,0x43,0xE0,0xE0,
+ 0xFA,0xA3,0xE0,0xFB,0xED,0x2B,0xFD,0xEC,
+ 0x3A,0xCD,0xC3,0x9F,0xFF,0xED,0x9E,0xFE,
+ 0xEB,0x24,0x01,0xFD,0xE4,0x3A,0xFC,0x12,
+ 0xA9,0x9B,0x90,0x43,0xA6,0xEC,0xF0,0xA3,
+ 0xED,0xF0,0xD3,0x90,0x43,0xDC,0xE0,0x9D,
+ 0xEC,0x64,0x80,0xF8,0x90,0x43,0xDB,0xE0,
+ 0x64,0x80,0x98,0x40,0x03,0x02,0x7D,0x19,
+ 0x90,0x43,0xA2,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0x90,0x43,0xA8,0xE0,0xFC,0xA3,0xE0,0xFD,
+ 0x9F,0xEE,0x64,0x80,0xF8,0xEC,0x64,0x80,
+ 0x98,0x40,0x08,0xA3,0xEC,0xF0,0xA3,0xED,
+ 0xF0,0x80,0x08,0x90,0x43,0xAA,0xEE,0xF0,
+ 0xA3,0xEF,0xF0,0x90,0x43,0xA0,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x90,0x43,0xA6,0xE0,0xFC,
+ 0xA3,0xE0,0xFD,0xC3,0x9F,0xEE,0x64,0x80,
+ 0xF8,0xEC,0x64,0x80,0x98,0x50,0x2B,0x90,
+ 0x43,0xAC,0xEC,0xF0,0xA3,0xED,0xF0,0x90,
+ 0x41,0xF3,0xE0,0xFD,0x7C,0x00,0x90,0x43,
+ 0xA5,0xE0,0x2D,0xFF,0x90,0x43,0xA4,0xE0,
+ 0x3C,0xCF,0x24,0xFF,0xCF,0x34,0xFF,0xFE,
+ 0x12,0xA9,0x9B,0xEC,0xF0,0xA3,0xED,0xF0,
+ 0x80,0x24,0x90,0x43,0xA0,0xE0,0xFF,0xA3,
+ 0xE0,0x90,0x43,0xAC,0xCF,0xF0,0xA3,0xEF,
+ 0xF0,0x90,0x43,0x9F,0xE0,0x04,0xFF,0x90,
+ 0x41,0xF3,0xE0,0xFE,0x2F,0x8E,0xF0,0x84,
+ 0x90,0x43,0x9F,0xE5,0xF0,0xF0,0x90,0x43,
+ 0xAA,0xE0,0xFE,0xA3,0xE0,0xFF,0xC3,0x90,
+ 0x43,0xAD,0xE0,0x9F,0xFF,0x90,0x43,0xAC,
+ 0xE0,0x9E,0x90,0x43,0xAE,0xF0,0xA3,0xEF,
+ 0xF0,0xE4,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,
+ 0x90,0x43,0x9E,0xF0,0x90,0x43,0xE8,0xE0,
+ 0x75,0xF0,0x04,0xA4,0xFF,0xC3,0x90,0x43,
+ 0xAF,0xE0,0x9F,0xE5,0xF0,0x64,0x80,0xF8,
+ 0x90,0x43,0xAE,0xE0,0x64,0x80,0x98,0x40,
+ 0x03,0x02,0x80,0x4A,0x90,0x43,0xB0,0xE0,
+ 0x60,0x03,0x02,0x80,0x4A,0x90,0x43,0x9E,
+ 0xE0,0x94,0x14,0x40,0x17,0x90,0xF5,0xE7,
+ 0xE4,0xF0,0x90,0xF5,0xE1,0xF0,0xF5,0x0F,
+ 0x7B,0x01,0x7A,0x43,0x79,0x49,0x7D,0x01,
+ 0xFC,0x12,0xAD,0x13,0x90,0x43,0x9E,0xE0,
+ 0x04,0xF0,0x90,0x43,0xAC,0xE0,0xFF,0xA3,
+ 0xE0,0x90,0x43,0xAA,0xCF,0xF0,0xA3,0xEF,
+ 0xF0,0x90,0x43,0x9F,0xE0,0x25,0xE0,0x24,
+ 0xCD,0xF5,0x82,0xE4,0x34,0x43,0xF5,0x83,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x43,0xE0,
+ 0xE0,0xFC,0xA3,0xE0,0xFD,0xEF,0x2D,0xFF,
+ 0xEE,0x3C,0xFE,0x90,0x43,0xE5,0xE0,0x25,
+ 0xE0,0x24,0xCD,0xF5,0x82,0xE4,0x34,0x43,
+ 0xF5,0x83,0xE0,0xFA,0xA3,0xE0,0xFB,0xC3,
+ 0xEF,0x9B,0xFF,0xEE,0x9A,0xFE,0xED,0x24,
+ 0x01,0xFD,0xE4,0x3C,0xFC,0x12,0xA9,0x9B,
+ 0x90,0x43,0xA0,0xEC,0xF0,0xA3,0xED,0xF0,
+ 0x90,0x43,0xA5,0xE0,0x25,0xE0,0xFF,0x90,
+ 0x43,0xA4,0xE0,0x33,0xFE,0x74,0xCD,0x2F,
+ 0xF5,0x82,0x74,0x43,0x3E,0xF5,0x83,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0x90,0x43,0xE5,0xE0,
+ 0x25,0xE0,0x24,0xCD,0xF5,0x82,0xE4,0x34,
+ 0x43,0xF5,0x83,0xE0,0xFC,0xA3,0xE0,0xFD,
+ 0x90,0x43,0xE0,0xE0,0xFA,0xA3,0xE0,0xFB,
+ 0xED,0x2B,0xFD,0xEC,0x3A,0xCD,0xC3,0x9F,
+ 0xFF,0xED,0x9E,0xFE,0xEB,0x24,0x01,0xFD,
+ 0xE4,0x3A,0xFC,0x12,0xA9,0x9B,0x90,0x43,
+ 0xA6,0xEC,0xF0,0xA3,0xED,0xF0,0x90,0x43,
+ 0xA0,0xE0,0xFE,0xA3,0xE0,0xFF,0xC3,0x9D,
+ 0xEC,0x64,0x80,0xF8,0xEE,0x64,0x80,0x98,
+ 0x50,0x3F,0x90,0x43,0xAC,0xEE,0xF0,0xA3,
+ 0xEF,0xF0,0x90,0x43,0xB2,0xE0,0x60,0x03,
+ 0x02,0x80,0x17,0x90,0x43,0xE5,0xE0,0xFF,
+ 0x90,0x43,0x9F,0xE0,0xFE,0xB5,0x07,0x04,
+ 0x7F,0x01,0x80,0x02,0x7F,0x00,0x90,0x43,
+ 0xB2,0xEF,0xF0,0x70,0x69,0xEE,0x04,0xFF,
+ 0x90,0x41,0xF3,0xE0,0xFE,0x2F,0x8E,0xF0,
+ 0x84,0x90,0x43,0x9F,0xE5,0xF0,0xF0,0x80,
+ 0x55,0x90,0x43,0xA6,0xE0,0xFF,0xA3,0xE0,
+ 0x90,0x43,0xAC,0xCF,0xF0,0xA3,0xEF,0xF0,
+ 0x90,0x43,0xB1,0xE0,0x70,0x40,0x90,0x43,
+ 0xE5,0xE0,0xFF,0x7E,0x00,0x90,0x43,0xA4,
+ 0xE0,0xFA,0xA3,0xE0,0xFB,0xB5,0x07,0x08,
+ 0xEE,0xB5,0x02,0x04,0x7F,0x01,0x80,0x02,
+ 0x7F,0x00,0x90,0x43,0xB1,0xEF,0xF0,0x70,
+ 0x1D,0x90,0x41,0xF3,0xE0,0xFD,0x7C,0x00,
+ 0x2B,0xFF,0xEC,0x3A,0xCF,0x24,0xFF,0xCF,
+ 0x34,0xFF,0xFE,0x12,0xA9,0x9B,0x90,0x43,
+ 0xA4,0xEC,0xF0,0xA3,0xED,0xF0,0x12,0xAF,
+ 0x9F,0x05,0x2C,0x85,0x2C,0x2C,0x05,0x2C,
+ 0x85,0x2C,0x2C,0x05,0x2C,0x85,0x2C,0x2C,
+ 0x05,0x2C,0x85,0x2C,0x2C,0x05,0x2C,0x85,
+ 0x2C,0x2C,0x05,0x2C,0x85,0x2C,0x2C,0x05,
+ 0x2C,0x85,0x2C,0x2C,0x05,0x2C,0x85,0x2C,
+ 0x2C,0x05,0x2C,0x85,0x2C,0x2C,0x02,0x7E,
+ 0x6D,0x90,0x43,0xB0,0xE0,0x60,0x0F,0x90,
+ 0x43,0xDD,0x74,0x07,0xF0,0x90,0x43,0xED,
+ 0x74,0x01,0xF0,0x02,0x81,0x04,0x90,0x43,
+ 0xE8,0xE0,0xF9,0x25,0xE0,0xFF,0xE4,0x33,
+ 0xFE,0x90,0x43,0xDB,0xE0,0xFC,0xA3,0xE0,
+ 0xFD,0x90,0x43,0xAC,0xE0,0xFA,0xA3,0xE0,
+ 0xFB,0xC3,0x9D,0xFD,0xEA,0x9C,0xFC,0xC3,
+ 0xED,0x9F,0xEE,0x64,0x80,0xF8,0xEC,0x64,
+ 0x80,0x98,0x50,0x22,0xE9,0x75,0xF0,0x02,
+ 0xA4,0xFF,0x90,0x43,0xDC,0xE0,0x2F,0xFF,
+ 0x90,0x43,0xDB,0xE0,0x35,0xF0,0xFE,0xC3,
+ 0xEB,0x9F,0xFF,0xEA,0x9E,0x90,0x43,0xE6,
+ 0xF0,0xA3,0xEF,0xF0,0x80,0x55,0xE9,0x25,
+ 0xE0,0xFF,0xE4,0x33,0xFE,0x90,0x43,0xAA,
+ 0xE0,0xFC,0xA3,0xE0,0xFD,0x90,0x43,0xDB,
+ 0xE0,0xFA,0xA3,0xE0,0xFB,0xC3,0x9D,0xFD,
+ 0xEA,0x9C,0xFC,0xC3,0xED,0x9F,0xEE,0x64,
+ 0x80,0xF8,0xEC,0x64,0x80,0x98,0x50,0x24,
+ 0xE9,0x25,0xE0,0xFF,0xE4,0x33,0xFE,0xEB,
+ 0x2F,0xFF,0xEA,0x3E,0xFE,0x90,0x43,0xAA,
+ 0xE0,0xFC,0xA3,0xE0,0xFD,0xC3,0xEF,0x9D,
+ 0xFF,0xEE,0x9C,0x90,0x43,0xE6,0xF0,0xA3,
+ 0xEF,0xF0,0x80,0x07,0xE4,0x90,0x43,0xE6,
+ 0xF0,0xA3,0xF0,0x90,0x43,0xED,0x74,0x03,
+ 0xF0,0x90,0xF5,0xE6,0xF0,0x90,0x43,0xE6,
+ 0xE0,0xA2,0xE7,0x13,0xF0,0xA3,0xE0,0x13,
+ 0xF0,0x90,0x43,0xDD,0x74,0x07,0xF0,0x22,
+ 0xAD,0x07,0x90,0x43,0xEF,0xE0,0x90,0xF5,
+ 0xDB,0xF0,0x90,0x43,0xEE,0xE0,0xFF,0x33,
+ 0x95,0xE0,0x90,0xF5,0xDC,0xEF,0xF0,0x90,
+ 0x43,0xE4,0xE0,0x90,0xF5,0xFA,0xF0,0x90,
+ 0xF5,0xE8,0xE4,0xF0,0x90,0x43,0xDD,0xE0,
+ 0x90,0xF5,0xE1,0xF0,0x90,0xF5,0xE8,0xE0,
+ 0xB4,0x01,0xF9,0x90,0xF5,0xE8,0xE4,0xF0,
+ 0x90,0xF5,0xE1,0x74,0x0D,0xF0,0x90,0xF5,
+ 0xE8,0xE0,0xB4,0x01,0xF9,0x90,0x43,0xDD,
+ 0x74,0x0E,0xF0,0x90,0xF5,0xDD,0xE0,0x90,
+ 0x43,0xB4,0xF0,0x90,0xF5,0xDE,0xE0,0x90,
+ 0x43,0xB3,0xF0,0xE0,0xC3,0x94,0x20,0x40,
+ 0x04,0xE0,0x24,0xC0,0xF0,0xED,0xB4,0x01,
+ 0x1C,0x90,0x43,0xF0,0xE0,0xFE,0xA3,0xE0,
+ 0xFF,0x90,0x43,0xB4,0xE0,0x2F,0xFF,0x90,
+ 0x43,0xB3,0xE0,0x3E,0x90,0x43,0xF2,0xF0,
+ 0xA3,0xEF,0xF0,0x80,0x1F,0x90,0x43,0xB3,
+ 0xE0,0xFF,0xA3,0xE0,0x90,0x43,0xF2,0xCF,
+ 0xF0,0xA3,0xEF,0xF0,0x90,0xF5,0xFB,0xE0,
+ 0x90,0x43,0xF1,0xF0,0x90,0xF5,0xFC,0xE0,
+ 0x90,0x43,0xF0,0xF0,0x90,0x43,0xF3,0xE0,
+ 0x90,0xF4,0x66,0xF0,0x90,0x43,0xF2,0xE0,
+ 0x90,0xF4,0x67,0xF0,0x90,0xF6,0x08,0xE0,
+ 0x90,0xFD,0x0F,0xF0,0x90,0xF6,0x08,0xE0,
+ 0xFF,0x13,0x13,0x13,0x54,0x1F,0x90,0xFD,
+ 0xA1,0xF0,0x90,0xF5,0xFC,0xE0,0xFE,0x90,
+ 0xF5,0xFB,0xE0,0x7C,0x00,0x24,0x00,0xFF,
+ 0xEC,0x3E,0xAD,0x07,0xFC,0x90,0xF5,0x3D,
+ 0xE0,0xFE,0x90,0xF5,0x3C,0xE0,0x7A,0x00,
+ 0x24,0x00,0xFF,0xEA,0x3E,0xFE,0xEF,0x2D,
+ 0xFD,0xEE,0x3C,0xFF,0x33,0x95,0xE0,0xA3,
+ 0xEF,0xF0,0xAF,0x05,0xEF,0x90,0xF5,0x3C,
+ 0xF0,0x22,0x90,0x43,0xED,0xE0,0xF9,0xB4,
+ 0x01,0x37,0x90,0x43,0xE5,0xE0,0x25,0xE0,
+ 0x24,0xCD,0xF5,0x82,0xE4,0x34,0x43,0xF5,
+ 0x83,0xE0,0xFC,0xA3,0xE0,0xFD,0x90,0x43,
+ 0xEE,0xE0,0xFA,0xA3,0xE0,0xFB,0xC3,0xED,
+ 0x9B,0xFD,0xEC,0x9A,0xFC,0x90,0x43,0xE7,
+ 0xE0,0x2D,0xFE,0x90,0x43,0xE6,0xE0,0x3C,
+ 0x90,0x43,0xB5,0xF0,0xA3,0xCE,0xF0,0x80,
+ 0x72,0xE9,0xB4,0x02,0x32,0x90,0x43,0xDB,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x43,0xE1,
+ 0xE0,0x2F,0xFF,0x90,0x43,0xE0,0xE0,0x3E,
+ 0xFE,0x90,0x43,0xE6,0xE0,0xFC,0xA3,0xE0,
+ 0xFD,0xC3,0xEF,0x9D,0xFF,0xEE,0x9C,0xFE,
+ 0xC3,0xE4,0x9F,0xFF,0xE4,0x9E,0x90,0x43,
+ 0xB5,0xF0,0xA3,0xEF,0xF0,0x80,0x3C,0x90,
+ 0x43,0xED,0xE0,0xB4,0x03,0x35,0x90,0x43,
+ 0xE5,0xE0,0x25,0xE0,0x24,0xCD,0xF5,0x82,
+ 0xE4,0x34,0x43,0xF5,0x83,0xE0,0xFE,0xA3,
+ 0xE0,0xFF,0x90,0x43,0xEE,0xE0,0xFC,0xA3,
+ 0xE0,0xFD,0xC3,0xEF,0x9D,0xFF,0xEE,0x9C,
+ 0xFE,0x90,0x43,0xE7,0xE0,0x2F,0xFF,0x90,
+ 0x43,0xE6,0xE0,0x3E,0x90,0x43,0xB5,0xF0,
+ 0xA3,0xEF,0xF0,0x90,0x43,0xB5,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x90,0x43,0xEF,0xE0,0x2F,
+ 0xF0,0x90,0x43,0xEE,0xE0,0x3E,0xF0,0x90,
+ 0x43,0xB6,0xE0,0x90,0xF4,0x66,0xF0,0x90,
+ 0x43,0xB5,0xE0,0x90,0xF4,0x67,0xF0,0x90,
+ 0x43,0xE7,0xE0,0x90,0xF5,0xF4,0xF0,0x90,
+ 0x43,0xE6,0xE0,0x90,0xF5,0xF5,0xF0,0x90,
+ 0x43,0xDD,0x74,0x08,0xF0,0x22,0x90,0xF5,
+ 0xEB,0xE0,0x90,0x43,0xB8,0xF0,0x90,0xF5,
+ 0xEC,0xE0,0x90,0x43,0xB7,0xF0,0x90,0xF5,
+ 0xED,0xE0,0x90,0x43,0xBA,0xF0,0x90,0xF5,
+ 0xEE,0xE0,0x90,0x43,0xB9,0xF0,0x90,0x43,
+ 0xED,0xE0,0xFF,0xB4,0x01,0x0A,0x74,0x02,
+ 0xF0,0x90,0x43,0xDD,0x74,0x07,0xF0,0x22,
+ 0xEF,0x64,0x02,0x60,0x08,0xEF,0x64,0x03,
+ 0x60,0x03,0x02,0x83,0xDC,0x90,0x43,0xE3,
+ 0xE0,0xFF,0x90,0x43,0xE2,0xE0,0xFE,0x6F,
+ 0x70,0x2C,0x90,0xF5,0xE9,0xE0,0x70,0x07,
+ 0x90,0x43,0xE4,0xEE,0xF0,0x80,0x18,0x90,
+ 0x41,0xF3,0xE0,0x14,0xB5,0x06,0x07,0xE4,
+ 0x90,0x43,0xE4,0xF0,0x80,0x09,0x90,0x43,
+ 0xE2,0xE0,0x04,0x90,0x43,0xE4,0xF0,0x90,
+ 0x43,0xDD,0x74,0x0C,0xF0,0x22,0x90,0xF5,
+ 0xE9,0xE0,0x70,0x18,0x90,0x43,0xE2,0xE0,
+ 0xFF,0x90,0x43,0xE5,0xE0,0xB5,0x07,0x0C,
+ 0x90,0x43,0xE4,0xEF,0xF0,0x90,0x43,0xDD,
+ 0x74,0x0C,0xF0,0x22,0x90,0xF5,0xE9,0xE0,
+ 0x70,0x0B,0x90,0x43,0xE5,0xE0,0x14,0x90,
+ 0x43,0xE3,0xF0,0x80,0x09,0x90,0x43,0xE5,
+ 0xE0,0x04,0x90,0x43,0xE2,0xF0,0x90,0x43,
+ 0xE3,0xE0,0xFF,0x90,0x43,0xE2,0xE0,0x2F,
+ 0xFF,0xC3,0x13,0x90,0x43,0xE5,0xF0,0x90,
+ 0x43,0xED,0x74,0x03,0xF0,0x90,0x43,0xDD,
+ 0x74,0x06,0xF0,0x22,0x90,0x43,0xBC,0xEF,
+ 0xF0,0xC2,0xEB,0xE4,0x90,0x43,0xE9,0xF0,
+ 0xA3,0xF0,0x90,0xF9,0x01,0xE0,0xD3,0x94,
+ 0x01,0x50,0x0A,0x90,0x43,0xE9,0x74,0x05,
+ 0xF0,0xA3,0x74,0x55,0xF0,0x90,0xF9,0x01,
+ 0xE0,0x24,0x06,0xFF,0x74,0x01,0x7E,0x00,
+ 0xA8,0x07,0x08,0x80,0x05,0xC3,0x33,0xCE,
+ 0x33,0xCE,0xD8,0xF9,0x90,0x43,0xDC,0xF0,
+ 0xEE,0x90,0x43,0xDB,0xF0,0x90,0xF9,0x00,
+ 0xE0,0x70,0x34,0x90,0x43,0xE0,0x74,0x02,
+ 0xF0,0xA3,0x74,0xAB,0xF0,0x90,0x43,0xE8,
+ 0x74,0x28,0xF0,0x90,0x43,0xBE,0x74,0x05,
+ 0xF0,0x90,0xF5,0xEF,0x74,0x28,0xF0,0x90,
+ 0x43,0xE9,0xE0,0xFE,0xA3,0xE0,0x78,0x02,
+ 0xCE,0xC3,0x13,0xCE,0x13,0xD8,0xF9,0xF0,
+ 0xEE,0x90,0x43,0xE9,0xF0,0x80,0x6F,0x90,
+ 0xF9,0x00,0xE0,0xB4,0x01,0x34,0x90,0x43,
+ 0xE0,0x74,0x0A,0xF0,0xA3,0x74,0xAB,0xF0,
+ 0x90,0x43,0xE8,0x74,0x50,0xF0,0x90,0x43,
+ 0xBE,0x74,0x12,0xF0,0x90,0xF5,0xEF,0x74,
+ 0x50,0xF0,0x90,0x43,0xDB,0xE0,0xFE,0xA3,
+ 0xE0,0x78,0x02,0xC3,0x33,0xCE,0x33,0xCE,
+ 0xD8,0xF9,0xF0,0xEE,0x90,0x43,0xDB,0xF0,
+ 0x80,0x34,0x90,0x43,0xE0,0x74,0x05,0xF0,
+ 0xA3,0x74,0x55,0xF0,0x90,0x43,0xE8,0x74,
+ 0x3C,0xF0,0x90,0x43,0xBE,0x74,0x09,0xF0,
+ 0x90,0xF5,0xEF,0x74,0x3C,0xF0,0x90,0x43,
+ 0xDC,0xE0,0x25,0xE0,0xF0,0x90,0x43,0xDB,
+ 0xE0,0x33,0xF0,0x90,0x43,0xE9,0xE0,0xC3,
+ 0x13,0xF0,0xA3,0xE0,0x13,0xF0,0x90,0x43,
+ 0xE9,0xE0,0xFF,0xA3,0xE0,0xA3,0xCF,0xF0,
+ 0xA3,0xEF,0xF0,0x90,0x43,0xE8,0xE0,0x90,
+ 0xF5,0xE2,0xF0,0x90,0x43,0xDB,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x90,0x43,0xE1,0xE0,0x2F,
+ 0xFF,0x90,0x43,0xE0,0xE0,0x3E,0xA2,0xE7,
+ 0x13,0xFE,0xEF,0x13,0xFF,0x90,0xF5,0xFE,
+ 0xF0,0xEE,0xA3,0xF0,0xE4,0x90,0x43,0xEE,
+ 0xF0,0xA3,0xF0,0x90,0xF5,0x3B,0xF0,0x90,
+ 0xF5,0xBB,0xF0,0x90,0xF5,0xB1,0xF0,0x90,
+ 0xF5,0xC8,0xF0,0x90,0xF5,0xF8,0x04,0xF0,
+ 0x90,0xF5,0xDF,0x74,0xFB,0xF0,0xA3,0xE4,
+ 0xF0,0x90,0xF5,0xE3,0x74,0x09,0xF0,0xA3,
+ 0x74,0x01,0xF0,0xA3,0xF0,0x90,0xF5,0xFD,
+ 0xF0,0x90,0xF6,0x6D,0xE4,0xF0,0x90,0xF5,
+ 0xF9,0x74,0x04,0xF0,0x90,0x42,0x12,0xE0,
+ 0xB4,0x01,0x1B,0x90,0x43,0xBC,0xE0,0xB4,
+ 0x01,0x14,0x90,0xF5,0xE3,0x74,0x01,0xF0,
+ 0x90,0xF5,0xF9,0xF0,0x90,0xF5,0xFE,0x74,
+ 0xFF,0xF0,0xA3,0x74,0x0F,0xF0,0xE4,0x90,
+ 0x43,0xBD,0xF0,0x90,0x43,0xC3,0xE0,0x64,
+ 0x01,0x70,0x3E,0x90,0x41,0xF3,0xF0,0x90,
+ 0x43,0xDA,0xF0,0x90,0x43,0xC4,0xF0,0x90,
+ 0x43,0xD8,0xF0,0x90,0x43,0xD6,0xF0,0x90,
+ 0xF0,0x2B,0xE0,0x60,0x12,0x90,0x42,0x5B,
+ 0xE0,0x90,0x43,0xD9,0xF0,0x90,0x42,0x57,
+ 0xE0,0x90,0x43,0xD7,0xF0,0x80,0x1E,0x90,
+ 0x42,0x16,0xE0,0x90,0x43,0xD9,0xF0,0x90,
+ 0x42,0x13,0xE0,0x90,0x43,0xD7,0xF0,0x80,
+ 0x0C,0x90,0x43,0xD7,0xE0,0x14,0xA3,0xF0,
+ 0xE4,0x90,0x43,0x42,0xF0,0x90,0x43,0xD7,
+ 0xE0,0xFF,0xA3,0xE0,0xC3,0x9F,0x50,0x5C,
+ 0x90,0xF5,0xE7,0xE4,0xF0,0xA3,0x04,0xF0,
+ 0x90,0xF5,0xE1,0xE4,0xF0,0x90,0xF5,0xE7,
+ 0x04,0xF0,0x90,0xF5,0xE8,0xE0,0xB4,0x01,
+ 0xF9,0x90,0xF5,0xE1,0xE0,0x90,0x43,0xDD,
+ 0xF0,0xE0,0x64,0x05,0x70,0x2E,0x74,0x06,
+ 0xF0,0x90,0xF5,0xEA,0xE0,0x90,0x43,0xD5,
+ 0xF0,0x12,0xAD,0x97,0x85,0x2C,0x2C,0x85,
+ 0x2C,0x2C,0x05,0x2C,0x85,0x2C,0x2C,0x90,
+ 0x43,0xDD,0xE0,0x90,0xF5,0xE1,0xF0,0x90,
+ 0x43,0xBC,0xE0,0xFF,0x90,0x43,0xBE,0xE0,
+ 0xFD,0x12,0x8B,0x5F,0x90,0x43,0xD8,0xE0,
+ 0x04,0xF0,0x80,0x99,0x12,0x7A,0xA8,0xE4,
+ 0x90,0x43,0xC3,0xF0,0x90,0x43,0xDD,0xE0,
+ 0xFF,0x64,0x0E,0x60,0x47,0xEF,0xB4,0x06,
+ 0x05,0x12,0x7C,0x79,0x80,0xEE,0x90,0x43,
+ 0xDD,0xE0,0x64,0x07,0x70,0x22,0x12,0x82,
+ 0x23,0x90,0xF5,0xE8,0x74,0x01,0xF0,0x90,
+ 0x43,0xDD,0xE0,0x90,0xF5,0xE1,0xF0,0x90,
+ 0xF5,0xE8,0xE0,0xB4,0x01,0xF9,0x90,0xF5,
+ 0xE6,0xE4,0xF0,0x12,0x83,0x0F,0x80,0xC4,
+ 0x90,0x43,0xDD,0xE0,0xB4,0x0C,0xBD,0x90,
+ 0x43,0xBC,0xE0,0xFF,0x12,0x81,0x21,0x12,
+ 0x7A,0x27,0x80,0xB0,0x90,0xF5,0xE7,0xE4,
+ 0xF0,0x90,0xF5,0xE1,0xF0,0xD2,0xEB,0x22,
+ 0x90,0x43,0xFF,0xE0,0xFE,0xA3,0xE0,0xA8,
+ 0x07,0x08,0x80,0x05,0xCE,0xC3,0x13,0xCE,
+ 0x13,0xD8,0xF9,0xF0,0xEE,0x90,0x43,0xFF,
+ 0xF0,0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x41,
+ 0xC4,0xE0,0xFD,0x7C,0x00,0x12,0xA9,0x46,
+ 0x90,0x43,0xFF,0xEE,0xF0,0xA3,0xEF,0xF0,
+ 0x22,0xAA,0x07,0xEA,0x70,0x10,0x90,0xF7,
+ 0x86,0x04,0xF0,0xA3,0xF0,0xE4,0x90,0x43,
+ 0xFE,0xF0,0x90,0x43,0xFC,0xF0,0xEA,0xB4,
+ 0x01,0x13,0x90,0x43,0xFC,0x74,0x01,0xF0,
+ 0x90,0xF7,0x87,0xF0,0x90,0xF7,0x87,0xE0,
+ 0x60,0xFA,0xE4,0xF5,0x2E,0xEA,0x64,0x01,
+ 0x60,0x24,0x90,0xF7,0x86,0xE0,0x70,0x09,
+ 0x90,0xF7,0x31,0xE0,0x70,0x03,0x02,0x87,
+ 0xAC,0x90,0x43,0xF8,0xE0,0xC3,0x94,0x01,
+ 0x50,0x03,0x02,0x87,0xAC,0x90,0xF7,0x87,
+ 0xE0,0x70,0x03,0x02,0x87,0xAC,0x05,0x2E,
+ 0x05,0x2C,0x05,0x2C,0x90,0xF9,0x00,0xE0,
+ 0x70,0x04,0x7B,0x04,0x80,0x0D,0x90,0xF9,
+ 0x00,0xE0,0xB4,0x01,0x04,0x7B,0x06,0x80,
+ 0x02,0x7B,0x05,0x90,0xF9,0x03,0xE0,0xFF,
+ 0xC3,0xEB,0x9F,0xFB,0x90,0xF7,0x92,0xE0,
+ 0x90,0x41,0xC1,0xF0,0x90,0xF7,0x93,0xE0,
+ 0x90,0x41,0xC2,0xF0,0x90,0xF7,0x94,0xE0,
+ 0x90,0x41,0xC3,0xF0,0x90,0xF7,0x8B,0xE0,
+ 0x90,0x41,0xC4,0xF0,0x90,0xF7,0x97,0xE0,
+ 0x90,0x43,0xF9,0xF0,0x90,0xF7,0x96,0xE0,
+ 0x90,0x43,0xFA,0xF0,0x90,0xF7,0x95,0xE0,
+ 0x90,0x43,0xFB,0xF0,0x90,0x43,0xF9,0xE0,
+ 0x90,0x43,0xFF,0xF0,0x90,0x43,0xFA,0xE0,
+ 0x90,0x44,0x00,0xF0,0xAF,0x03,0x12,0x86,
+ 0x81,0x90,0x44,0x00,0xE0,0x90,0x42,0x37,
+ 0xF0,0x90,0x41,0xC3,0xE0,0x90,0x43,0xFF,
+ 0xF0,0x90,0x41,0xC2,0xE0,0x90,0x44,0x00,
+ 0xF0,0xAF,0x03,0x12,0x86,0x81,0x90,0x44,
+ 0x00,0xE0,0x90,0x42,0x36,0xF0,0x90,0xF7,
+ 0x86,0x74,0x01,0xF0,0xA3,0xF0,0xE4,0x90,
+ 0x43,0xFE,0xF0,0xEA,0xB4,0x01,0x05,0xE4,
+ 0x90,0x43,0xFC,0xF0,0x22,0x90,0xF9,0x03,
+ 0xE0,0x90,0x41,0xC5,0xF0,0x90,0xF9,0x00,
+ 0xE0,0x90,0x41,0xC6,0xF0,0x90,0x43,0xFE,
+ 0xE0,0x04,0xF0,0xE0,0xC3,0x94,0x32,0x40,
+ 0x05,0xE4,0xFF,0x12,0x86,0xB2,0x90,0x43,
+ 0xFC,0xE0,0x70,0x05,0x7F,0x02,0x12,0x86,
+ 0xB2,0x90,0x43,0xFD,0xE0,0x04,0xF0,0xE0,
+ 0xC3,0x94,0x32,0x40,0x0B,0x90,0xF7,0x0D,
+ 0x74,0x01,0xF0,0xE4,0x90,0x43,0xFD,0xF0,
+ 0x90,0xF7,0x0D,0xE0,0x60,0x5A,0x90,0xF7,
+ 0x05,0xE0,0x90,0x41,0xC7,0xF0,0x90,0xF7,
+ 0x06,0xE0,0x90,0x41,0xC8,0xF0,0x90,0xF7,
+ 0x02,0xE0,0x90,0x41,0xC9,0xF0,0x90,0xF7,
+ 0x03,0xE0,0x90,0x41,0xCA,0xF0,0x90,0xF7,
+ 0x04,0xE0,0x90,0x41,0xCB,0xF0,0x90,0xF7,
+ 0x00,0xE0,0x90,0x41,0xCC,0xF0,0x90,0xF7,
+ 0x01,0xE0,0x90,0x41,0xCD,0xF0,0x90,0xF7,
+ 0x0D,0x74,0x01,0xF0,0xE4,0x90,0x43,0xFD,
+ 0xF0,0x90,0x41,0xD3,0xE0,0x04,0xF0,0xE0,
+ 0xFF,0x90,0x41,0xFA,0xE0,0xFE,0xEF,0x8E,
+ 0xF0,0x84,0x90,0x41,0xD3,0xE5,0xF0,0xF0,
+ 0x90,0xF7,0x00,0xE0,0xFF,0x90,0x41,0xCF,
+ 0xE0,0xFE,0xB5,0x07,0x0C,0x90,0xF7,0x01,
+ 0xE0,0xFF,0x90,0x41,0xD0,0xE0,0x6F,0x60,
+ 0x18,0x90,0xF7,0x00,0xEE,0xF0,0x90,0x41,
+ 0xD0,0xE0,0x90,0xF7,0x01,0xF0,0x90,0xF7,
+ 0x0C,0x74,0x01,0xF0,0xE4,0xF0,0xA3,0x04,
+ 0xF0,0x22,0x22,0x7F,0x00,0x22,0x90,0x42,
+ 0x5F,0xE0,0x04,0xF0,0x70,0x06,0x90,0x42,
+ 0x5E,0xE0,0x04,0xF0,0x90,0x42,0x48,0xE0,
+ 0x70,0x0B,0x90,0x42,0x5D,0xE0,0x70,0x05,
+ 0x12,0x9F,0x23,0x80,0x09,0x90,0xF0,0x01,
+ 0xE0,0x60,0x03,0x12,0xA4,0x86,0x90,0x42,
+ 0x5E,0xE0,0xFE,0xA3,0xE0,0xFF,0x7C,0x00,
+ 0x7D,0x0A,0x12,0xA9,0x46,0xED,0x4C,0x70,
+ 0x13,0x90,0x43,0x40,0xE0,0x60,0x0D,0x90,
+ 0x41,0xDB,0xE0,0xB4,0x23,0x03,0x12,0x88,
+ 0x8B,0x12,0xA6,0x11,0x90,0xF9,0x99,0xE0,
+ 0x90,0x41,0xD2,0xF0,0x90,0x42,0x46,0xE0,
+ 0x70,0x06,0x90,0x42,0x47,0xE0,0x60,0x04,
+ 0x7F,0x01,0x80,0x02,0x7F,0x00,0x90,0x41,
+ 0xD1,0xEF,0xF0,0x90,0x42,0x5E,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x7C,0x00,0x7D,0x32,0x12,
+ 0xA9,0x46,0xED,0x4C,0x70,0x0E,0x12,0x87,
+ 0xB6,0x12,0x8A,0x51,0x90,0x44,0xA0,0xE0,
+ 0x60,0x02,0x14,0xF0,0x12,0x88,0x8B,0xC2,
+ 0xCF,0x22,0xC2,0xAF,0x90,0xFB,0x88,0xE0,
+ 0x64,0x01,0x60,0xF8,0x90,0xFB,0x96,0xEF,
+ 0xF0,0x12,0x9D,0x24,0x90,0xFB,0x88,0xE0,
+ 0x70,0xFA,0xD2,0xAF,0x04,0x7F,0x01,0x22,
+ 0x90,0x43,0x3F,0xE0,0x70,0x03,0x02,0x8A,
+ 0x07,0xC2,0xE9,0xE4,0x90,0x44,0x98,0xF0,
+ 0x90,0xF7,0x3C,0xE0,0xB4,0x01,0x04,0xC2,
+ 0xEA,0x80,0x02,0xD2,0xEA,0x90,0xF7,0x0E,
+ 0xE0,0xB4,0x01,0x20,0x90,0x43,0x3B,0xE0,
+ 0xC3,0x94,0x02,0x50,0x11,0xE5,0x0F,0xB4,
+ 0x09,0x0C,0x12,0x4E,0x5A,0x90,0x43,0x3B,
+ 0xE0,0x04,0xF0,0x02,0x8A,0x07,0x12,0x8A,
+ 0x16,0x02,0x8A,0x07,0x90,0xF5,0x54,0xE0,
+ 0x64,0x01,0x70,0x7A,0x90,0xF0,0x2B,0xE0,
+ 0x70,0x12,0x90,0x42,0x38,0xE0,0xB4,0x01,
+ 0x0B,0x90,0xF2,0x17,0x74,0xFE,0xF0,0xE4,
+ 0x90,0x42,0x37,0xF0,0x90,0x44,0x9B,0xE0,
+ 0xC3,0x94,0x02,0x50,0x18,0xE5,0x0F,0xB4,
+ 0x09,0x13,0x12,0x4E,0x5A,0x90,0x44,0x9A,
+ 0xE0,0x90,0xF5,0x52,0xF0,0x90,0x44,0x9B,
+ 0xE0,0x04,0xF0,0x80,0x41,0x90,0x43,0x3C,
+ 0x74,0x02,0xF0,0x90,0xF7,0x0E,0xE0,0x64,
+ 0x01,0x60,0x07,0x90,0xF7,0x40,0xE0,0xB4,
+ 0x01,0x05,0x12,0x8A,0x16,0x80,0x27,0x90,
+ 0xF7,0x31,0xE0,0x60,0x0A,0xE4,0xFF,0x12,
+ 0x9C,0x29,0x12,0x48,0x8D,0x80,0x0C,0x90,
+ 0xF7,0x3C,0xE0,0x70,0x03,0x12,0x48,0x8D,
+ 0x12,0x72,0x28,0x05,0x2C,0xE4,0xF5,0x2D,
+ 0x12,0x4E,0x2A,0x12,0x4E,0x3B,0x12,0x4E,
+ 0x2A,0x90,0x44,0x9A,0xE0,0x90,0xF5,0x52,
+ 0xF0,0x53,0x91,0x7F,0x22,0x90,0xF7,0x32,
+ 0xE0,0x60,0x19,0x90,0xFB,0x88,0xE0,0x70,
+ 0xFA,0x90,0xFB,0x96,0x74,0x0D,0xF0,0x90,
+ 0xFB,0x88,0x74,0x01,0xF0,0xE4,0x90,0x44,
+ 0x97,0xF0,0x05,0x2C,0xE4,0x90,0x42,0x47,
+ 0xF0,0x90,0x42,0x46,0xF0,0x12,0x6E,0x75,
+ 0x12,0x48,0xAC,0x12,0x4E,0x2A,0x90,0x43,
+ 0x3C,0x74,0x01,0xF0,0x12,0x4E,0x3B,0x22,
+ 0x90,0x44,0x02,0xE0,0x54,0x01,0xF0,0xA2,
+ 0xAF,0xE4,0x33,0x90,0x44,0x01,0xF0,0xC2,
+ 0xAF,0x90,0x44,0x02,0xE0,0x70,0x27,0x90,
+ 0xF7,0x02,0xE0,0x90,0xFB,0x97,0xF0,0x90,
+ 0xF7,0x03,0xE0,0x90,0xFB,0x98,0xF0,0x90,
+ 0xF7,0x04,0xE0,0x90,0xFB,0x99,0xF0,0x90,
+ 0xF9,0x99,0xE0,0x90,0xFB,0x9A,0xF0,0x7F,
+ 0x04,0x12,0x89,0x23,0x80,0x41,0x90,0x44,
+ 0x02,0xE0,0x64,0x01,0x70,0x39,0x90,0xFB,
+ 0x97,0xE5,0x12,0xF0,0x90,0x42,0x5C,0xE0,
+ 0x90,0xFB,0x98,0xF0,0x90,0x42,0x30,0xE0,
+ 0x90,0xFB,0x9B,0xF0,0x90,0x42,0x31,0xE0,
+ 0x90,0xFB,0x9C,0xF0,0x90,0x42,0x48,0xE0,
+ 0x70,0x05,0x12,0x8B,0x2D,0x80,0x0B,0x90,
+ 0xF0,0x60,0xE0,0x90,0xFB,0x99,0xF0,0x12,
+ 0x8B,0x2D,0x7F,0x05,0x12,0x89,0x23,0x90,
+ 0x44,0x01,0xE0,0x24,0xFF,0x92,0xAF,0x90,
+ 0x44,0x02,0xE0,0x04,0xF0,0x90,0xFB,0xA3,
+ 0xE0,0x90,0x41,0xDE,0xF0,0x85,0x2C,0x2C,
+ 0x85,0x2C,0x2C,0x90,0xFB,0xA4,0xE0,0x90,
+ 0x41,0xDF,0xF0,0xE0,0xFF,0xD3,0x94,0x4E,
+ 0x40,0x06,0xE4,0x90,0x41,0xDD,0xF0,0x22,
+ 0xEF,0xC3,0x94,0x32,0x50,0x07,0x90,0x41,
+ 0xDD,0x74,0x64,0xF0,0x22,0xEF,0x24,0xCE,
+ 0xFF,0xE4,0x34,0xFF,0xFE,0x7C,0x00,0x7D,
+ 0x07,0x12,0xA9,0x34,0xEE,0xA2,0xE7,0x13,
+ 0xEF,0x13,0xFF,0xC3,0x74,0x64,0x9F,0x90,
+ 0x41,0xDD,0xF0,0x22,0xE4,0xFF,0x90,0x41,
+ 0xE7,0xE0,0x60,0x0B,0x90,0x42,0x59,0xE0,
+ 0x60,0x05,0x90,0x42,0x32,0xE0,0xFF,0x90,
+ 0xF0,0x61,0xE0,0xFE,0x90,0x42,0x48,0xE0,
+ 0x70,0x05,0x90,0x42,0x08,0xE0,0xFE,0xC3,
+ 0xEE,0x9F,0x90,0xFB,0x9A,0xF0,0xEE,0xC3,
+ 0x9F,0x50,0x02,0xE4,0xF0,0x22,0x90,0x44,
+ 0x03,0xEF,0xF0,0xA9,0x05,0xE4,0x90,0x44,
+ 0x09,0xF0,0xFB,0x90,0x43,0xD5,0xE0,0xFD,
+ 0xEB,0xC3,0x9D,0x50,0x5B,0x90,0xF5,0xF1,
+ 0xE0,0xFF,0x75,0xF0,0x02,0xEB,0xA4,0x24,
+ 0xC5,0xF5,0x82,0xE5,0xF0,0x34,0x43,0xF5,
+ 0x83,0xEF,0xF0,0x90,0xF5,0xF0,0xE0,0xFF,
+ 0x75,0xF0,0x02,0xEB,0xA4,0x24,0xC6,0xF5,
+ 0x82,0xE5,0xF0,0x34,0x43,0xF5,0x83,0xEF,
+ 0xF0,0x90,0xF5,0xF1,0xE0,0xFF,0x75,0xF0,
+ 0x02,0xEB,0xA4,0x24,0xCD,0xF5,0x82,0xE5,
+ 0xF0,0x34,0x43,0xF5,0x83,0xEF,0xF0,0x90,
+ 0xF5,0xF0,0xE0,0xFF,0x75,0xF0,0x02,0xEB,
+ 0xA4,0x24,0xCE,0xF5,0x82,0xE5,0xF0,0x34,
+ 0x43,0xF5,0x83,0xEF,0xF0,0x0B,0x80,0x9B,
+ 0x90,0x41,0xF3,0xED,0xF0,0x90,0x43,0xC5,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0xEE,0xC3,0x13,
+ 0xFE,0xEF,0x13,0xFF,0x90,0x44,0x04,0xEE,
+ 0xF0,0xA3,0xEF,0xF0,0x7A,0x01,0x90,0x41,
+ 0xF3,0xE0,0xFF,0xEA,0xC3,0x9F,0x50,0x54,
+ 0x75,0xF0,0x02,0xEA,0xA4,0x24,0xC5,0xF5,
+ 0x82,0xE5,0xF0,0x34,0x43,0xF5,0x83,0xE0,
+ 0xFE,0xA3,0xE0,0x78,0x02,0xCE,0xC3,0x13,
+ 0xCE,0x13,0xD8,0xF9,0xFD,0xAC,0x06,0x75,
+ 0xF0,0x02,0xEA,0xA4,0x24,0xC5,0xF5,0x82,
+ 0xE5,0xF0,0x34,0x43,0xF5,0x83,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0xEE,0xC3,0x13,0xFE,0xEF,
+ 0x13,0x2D,0xFF,0xEE,0x3C,0xFE,0x90,0x44,
+ 0x04,0xE0,0xFC,0xA3,0xE0,0xC3,0x9F,0xEC,
+ 0x9E,0x50,0x06,0x90,0x43,0xC4,0x74,0x01,
+ 0xF0,0x0A,0x80,0xA2,0x90,0x43,0xD6,0xE0,
+ 0xFE,0x70,0x14,0x90,0x41,0xF3,0xE0,0x64,
+ 0x01,0x70,0x31,0x90,0x43,0xD6,0x04,0xF0,
+ 0x90,0xF5,0xE2,0xE9,0xF0,0x80,0x25,0xEE,
+ 0xB4,0x01,0x17,0x90,0x41,0xF3,0xE0,0xB4,
+ 0x01,0x08,0x90,0x43,0xD6,0x74,0x03,0xF0,
+ 0x80,0x12,0x90,0x43,0xD6,0x74,0x02,0xF0,
+ 0x80,0x0A,0x90,0x43,0xD6,0xE0,0xB4,0x02,
+ 0x03,0x74,0x03,0xF0,0x90,0x43,0xD6,0xE0,
+ 0xB4,0x03,0x0F,0x90,0x43,0xD7,0xE0,0x14,
+ 0x90,0x43,0xD8,0xF0,0x90,0x41,0xF3,0x74,
+ 0x01,0xF0,0x90,0x44,0x03,0xE0,0x60,0x03,
+ 0x02,0x8E,0xE8,0x7A,0x01,0x90,0x43,0xD5,
+ 0xE0,0xFF,0xEA,0xC3,0x9F,0x50,0x37,0x75,
+ 0xF0,0x02,0xEA,0xA4,0x24,0xCD,0xF5,0x82,
+ 0xE5,0xF0,0x34,0x43,0xF5,0x83,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x90,0x43,0xCD,0xE0,0xFC,
+ 0xA3,0xE0,0xFD,0xC3,0xEF,0x9D,0xFF,0xEE,
+ 0x9C,0xFE,0xEA,0x25,0xE0,0x24,0x08,0xF5,
+ 0x82,0xE4,0x34,0x44,0xF5,0x83,0xEE,0xF0,
+ 0xA3,0xEF,0xF0,0x0A,0x80,0xBF,0x90,0x43,
+ 0xDA,0xE0,0xFC,0x70,0x39,0xFA,0x90,0x43,
+ 0xD5,0xE0,0xFF,0xEA,0xC3,0x9F,0x50,0x25,
+ 0xEA,0x25,0xE0,0x24,0x0A,0xF5,0x82,0xE4,
+ 0x34,0x44,0xF5,0x83,0xE0,0xFE,0xA3,0xE0,
+ 0xFF,0xEA,0x25,0xE0,0x24,0x12,0xF5,0x82,
+ 0xE4,0x34,0x44,0xF5,0x83,0xEE,0xF0,0xA3,
+ 0xEF,0xF0,0x0A,0x80,0xD1,0x90,0x41,0xF3,
+ 0xE0,0x90,0x43,0xDA,0xF0,0x22,0xEC,0x64,
+ 0x01,0x70,0x03,0x02,0x8E,0x9E,0x90,0x44,
+ 0x08,0x74,0x01,0xF0,0x90,0x44,0x07,0xF0,
+ 0xE4,0xFA,0xF9,0xE9,0x25,0xE0,0x24,0x12,
+ 0xF5,0x82,0xE4,0x34,0x44,0xF5,0x83,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0xEA,0x25,0xE0,0x24,
+ 0x0A,0xF5,0x82,0xE4,0x34,0x44,0xF5,0x83,
+ 0xE0,0xFC,0xA3,0xE0,0xC3,0x9F,0xFF,0xEC,
+ 0x9E,0xFE,0xC3,0x64,0x80,0x94,0x80,0x50,
+ 0x24,0xC3,0xE4,0x9F,0xFF,0xE4,0x9E,0xFE,
+ 0x90,0x43,0xD5,0xE0,0x24,0xFE,0xFD,0xEA,
+ 0xC3,0x9D,0x50,0x03,0x0A,0x80,0x06,0x90,
+ 0x44,0x09,0x74,0x01,0xF0,0x90,0x44,0x06,
+ 0x74,0x01,0xF0,0x80,0x1A,0xE4,0x90,0x44,
+ 0x06,0xF0,0x90,0x43,0xDA,0xE0,0x24,0xFE,
+ 0xFD,0xE9,0xC3,0x9D,0x50,0x03,0x09,0x80,
+ 0x06,0x90,0x44,0x09,0x74,0x01,0xF0,0x90,
+ 0x43,0xD9,0xE0,0xFD,0xC3,0xEF,0x9D,0x74,
+ 0x80,0xF8,0x6E,0x98,0x40,0x2D,0x90,0x43,
+ 0xC5,0xE0,0xFE,0xA3,0xE0,0xFF,0xEE,0x13,
+ 0xFE,0xEF,0x13,0xFF,0x90,0x44,0x08,0xE0,
+ 0x75,0xF0,0x02,0xA4,0x24,0xC5,0xF5,0x82,
+ 0xE5,0xF0,0x34,0x43,0xF5,0x83,0xE0,0xFC,
+ 0xA3,0xE0,0xD3,0x9F,0xEC,0x9E,0x50,0x03,
+ 0x02,0x8E,0x7D,0x90,0x44,0x08,0xE0,0xFC,
+ 0x75,0xF0,0x02,0xA4,0x24,0xCD,0xF5,0x82,
+ 0xE5,0xF0,0x34,0x43,0xF5,0x83,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x90,0x44,0x07,0xE0,0xFD,
+ 0x75,0xF0,0x02,0xA4,0x24,0xCD,0xF5,0x82,
+ 0xE5,0xF0,0x34,0x43,0xF5,0x83,0xEE,0xF0,
+ 0xA3,0xEF,0xF0,0x75,0xF0,0x02,0xEC,0xA4,
+ 0x24,0xC5,0xF5,0x82,0xE5,0xF0,0x34,0x43,
+ 0xF5,0x83,0xE0,0xFE,0xA3,0xE0,0xFF,0x75,
+ 0xF0,0x02,0xED,0xA4,0x24,0xC5,0xF5,0x82,
+ 0xE5,0xF0,0x34,0x43,0xF5,0x83,0xEE,0xF0,
+ 0xA3,0xEF,0xF0,0x90,0x44,0x07,0xE0,0x04,
+ 0xF0,0x90,0x44,0x06,0xE0,0xB4,0x01,0x17,
+ 0x90,0x43,0xDA,0xE0,0x24,0xFE,0xFF,0xE9,
+ 0xC3,0x9F,0x50,0x03,0x09,0x80,0x1D,0x90,
+ 0x44,0x09,0x74,0x01,0xF0,0x80,0x15,0x90,
+ 0x43,0xD5,0xE0,0x24,0xFE,0xFF,0xEA,0xC3,
+ 0x9F,0x50,0x03,0x0A,0x80,0x06,0x90,0x44,
+ 0x09,0x74,0x01,0xF0,0x90,0x44,0x07,0xE0,
+ 0x90,0x41,0xF3,0xF0,0xEA,0x04,0x90,0x44,
+ 0x08,0xF0,0xA3,0xE0,0x64,0x01,0x60,0x03,
+ 0x02,0x8D,0x44,0x90,0x41,0xF3,0xE0,0x90,
+ 0x43,0xDA,0xF0,0x80,0x06,0x90,0x41,0xF3,
+ 0x74,0x01,0xF0,0x7B,0x01,0x90,0x43,0xDA,
+ 0xE0,0x14,0xFF,0xEB,0xC3,0x9F,0x50,0x37,
+ 0x75,0xF0,0x02,0xEB,0xA4,0x24,0xCD,0xF5,
+ 0x82,0xE5,0xF0,0x34,0x43,0xF5,0x83,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0x90,0x43,0xCD,0xE0,
+ 0xFC,0xA3,0xE0,0xFD,0xC3,0xEF,0x9D,0xFF,
+ 0xEE,0x9C,0xFE,0xEB,0x25,0xE0,0x24,0x10,
+ 0xF5,0x82,0xE4,0x34,0x44,0xF5,0x83,0xEE,
+ 0xF0,0xA3,0xEF,0xF0,0x0B,0x80,0xBE,0x22,
+ 0xEF,0x64,0x02,0x60,0x04,0xEF,0xB4,0x01,
+ 0x1B,0x90,0x44,0x36,0x74,0x0B,0xF0,0xA3,
+ 0x74,0xB3,0xF0,0xA3,0x74,0x0A,0xF0,0xA3,
+ 0x74,0x73,0xF0,0xA3,0x74,0x33,0xF0,0xA3,
+ 0x74,0xE5,0xF0,0x22,0xEF,0xB4,0x04,0x1B,
+ 0x90,0x44,0x36,0x74,0x0B,0xF0,0xA3,0x74,
+ 0xE3,0xF0,0xA3,0x74,0x0A,0xF0,0xA3,0x74,
+ 0x9D,0xF0,0xA3,0x74,0x33,0xF0,0xA3,0x74,
+ 0xB3,0xF0,0x22,0xEF,0xB4,0x05,0x1B,0x90,
+ 0x44,0x36,0x74,0x0B,0xF0,0xA3,0x74,0xA3,
+ 0xF0,0xA3,0x74,0x0A,0xF0,0xA3,0x74,0x65,
+ 0xF0,0xA3,0x74,0x33,0xF0,0xA3,0x74,0xF4,
+ 0xF0,0x22,0xEF,0xB4,0x0B,0x1A,0x90,0x44,
+ 0x36,0x74,0x0B,0xF0,0xA3,0x74,0xD5,0xF0,
+ 0xA3,0x74,0x0A,0xF0,0xA3,0x74,0x91,0xF0,
+ 0xA3,0x74,0x33,0xF0,0xA3,0x74,0xC1,0xF0,
+ 0x22,0x90,0xF0,0x2B,0xE4,0xF0,0x90,0x43,
+ 0x41,0x74,0x82,0xF0,0x90,0xFB,0x28,0xF0,
+ 0x90,0x42,0x09,0xE0,0x90,0xF0,0x41,0xF0,
+ 0x90,0x42,0x48,0xE0,0x14,0x60,0x21,0x14,
+ 0x60,0x39,0x24,0x02,0x60,0x03,0x02,0x90,
+ 0x1B,0x90,0xF1,0xE5,0x74,0x01,0xF0,0x12,
+ 0xA0,0x2F,0x12,0x9E,0x2B,0x12,0x9E,0xC1,
+ 0x90,0x43,0x3D,0x74,0x01,0xF0,0x80,0x72,
+ 0x12,0x9E,0x2B,0x90,0xF0,0x2C,0x74,0x01,
+ 0xF0,0x90,0xF1,0xE5,0xF0,0x90,0x43,0x3D,
+ 0xE0,0x64,0x01,0x70,0x5D,0x04,0x12,0xA8,
+ 0x12,0x80,0x57,0x90,0xF0,0x2C,0x74,0x01,
+ 0xF0,0x90,0xF1,0xE5,0xF0,0x12,0x88,0x8B,
+ 0x75,0xF0,0x02,0xE5,0x0F,0xA4,0x24,0x79,
+ 0xF5,0x82,0xE5,0xF0,0x34,0xAD,0xF5,0x83,
+ 0xE4,0x93,0xFC,0x74,0x01,0x93,0xFD,0xE4,
+ 0xFF,0x12,0x47,0xAD,0x90,0xF1,0xE7,0xE0,
+ 0x64,0x01,0x60,0x04,0x7F,0x01,0x80,0x02,
+ 0x7F,0x00,0x90,0xF1,0x1A,0xE0,0x5F,0x70,
+ 0xEB,0x90,0xF1,0xE7,0xE0,0xB4,0x01,0x04,
+ 0x7F,0x01,0x80,0x02,0x7F,0x00,0x90,0x43,
+ 0x3D,0xEF,0xF0,0xE0,0xB4,0x01,0x03,0x12,
+ 0xA8,0x12,0x90,0xF1,0x75,0x74,0x01,0xF0,
+ 0x90,0x42,0x5A,0xE0,0xF5,0x14,0x12,0xA5,
+ 0x62,0x90,0xF0,0xD5,0x74,0x01,0xF0,0x90,
+ 0xF0,0xE3,0xF0,0x90,0xF0,0xE2,0xF0,0x90,
+ 0x43,0x40,0xF0,0x22,0x90,0xF7,0x3C,0xE0,
+ 0x70,0x0B,0x90,0xF7,0x31,0xE0,0x60,0x05,
+ 0xE4,0xFF,0x12,0x9C,0x29,0x12,0x48,0x8D,
+ 0xE4,0xF5,0x0F,0x22,0x90,0x44,0x1B,0xEF,
+ 0xF0,0xA3,0xED,0xF0,0xE4,0x90,0x44,0x23,
+ 0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0xAF,
+ 0x03,0x90,0x44,0x21,0xEA,0xF0,0xA3,0xEF,
+ 0xF0,0x90,0x44,0x1F,0xE0,0xFE,0xA3,0xE0,
+ 0xFF,0xA3,0xE0,0xFC,0xA3,0xE0,0xFD,0xC3,
+ 0x9F,0xEC,0x9E,0x40,0x03,0x02,0x91,0x1E,
+ 0x90,0xF9,0x00,0xE0,0xB4,0x02,0x0F,0x90,
+ 0x44,0x22,0xE0,0x25,0xE0,0xFD,0x90,0x44,
+ 0x21,0xE0,0x33,0xFC,0x80,0x1A,0x90,0xF9,
+ 0x00,0xE0,0xB4,0x01,0x13,0x90,0x44,0x21,
+ 0xE0,0xFE,0xA3,0xE0,0x78,0x02,0xC3,0x33,
+ 0xCE,0x33,0xCE,0xD8,0xF9,0xFD,0xAC,0x06,
+ 0xED,0x90,0xF5,0x50,0xF0,0xEC,0xA3,0xF0,
+ 0x90,0xF6,0x5B,0x74,0x01,0xF0,0x7F,0x55,
+ 0x7E,0x0D,0x12,0x47,0x76,0x90,0xF6,0x5F,
+ 0xE0,0xFF,0x13,0x13,0x54,0x3F,0xFF,0x90,
+ 0x44,0x24,0xE0,0x2F,0xF0,0x90,0x44,0x23,
+ 0xE0,0x34,0x00,0xF0,0x90,0xF6,0x5F,0xE0,
+ 0xFF,0x90,0x44,0x26,0xE0,0xC3,0x9F,0x50,
+ 0x08,0x90,0xF6,0x5F,0xE0,0x90,0x44,0x26,
+ 0xF0,0x90,0x44,0x1C,0xE0,0xFF,0x90,0xF6,
+ 0x5F,0xE0,0xD3,0x9F,0x40,0x06,0x90,0x44,
+ 0x25,0xE0,0x04,0xF0,0x90,0x44,0x22,0xE0,
+ 0x04,0xF0,0x70,0x06,0x90,0x44,0x21,0xE0,
+ 0x04,0xF0,0x02,0x90,0x72,0x90,0x44,0x23,
+ 0xE0,0xFE,0xA3,0xE0,0x78,0x07,0xCE,0xC3,
+ 0x13,0xCE,0x13,0xD8,0xF9,0xFF,0x90,0x44,
+ 0x26,0xE0,0xFE,0x13,0x13,0x54,0x3F,0xFD,
+ 0xEF,0xD3,0x9D,0x40,0x13,0xEF,0x94,0x80,
+ 0x40,0x05,0x74,0xFF,0xF0,0x80,0x10,0xEF,
+ 0x25,0xE0,0x90,0x44,0x26,0xF0,0x80,0x07,
+ 0xEE,0xC3,0x13,0x90,0x44,0x26,0xF0,0x90,
+ 0x44,0x1B,0xE0,0x70,0x06,0x90,0x44,0x26,
+ 0xE0,0xFF,0x22,0x90,0x44,0x25,0xE0,0xFF,
+ 0x22,0xE4,0x90,0x44,0x2F,0xF0,0xA3,0xF0,
+ 0x90,0x44,0x3C,0x04,0xF0,0x22,0x90,0x44,
+ 0x3C,0xE0,0x60,0x08,0x12,0x72,0x37,0xE4,
+ 0x90,0x44,0x3C,0xF0,0x22,0x90,0xF6,0x08,
+ 0xE0,0x90,0x44,0x29,0xF0,0x90,0xFD,0x29,
+ 0xE0,0x90,0x44,0x2A,0xF0,0xE4,0xA3,0xF0,
+ 0x90,0x41,0xD9,0xE0,0x70,0x05,0x90,0x44,
+ 0x2F,0xF0,0x22,0x12,0x91,0x77,0x90,0xF5,
+ 0x4C,0xE0,0xFF,0x90,0xF5,0x41,0xE0,0x4F,
+ 0x70,0x03,0x02,0x92,0xB1,0x90,0x44,0x1F,
+ 0x74,0x02,0xF0,0xA3,0x74,0x39,0xF0,0xE4,
+ 0xFB,0xFA,0xFD,0xFF,0x12,0x90,0x55,0x90,
+ 0x44,0x28,0xEF,0xF0,0xD3,0x94,0x32,0x40,
+ 0x04,0xE0,0xFF,0x80,0x02,0x7F,0xFF,0x90,
+ 0x44,0x28,0xEF,0xF0,0xFD,0x90,0x44,0x1F,
+ 0xE4,0xF0,0xA3,0x74,0x32,0xF0,0xE4,0xFB,
+ 0xFA,0x7F,0x01,0x12,0x90,0x55,0x90,0x44,
+ 0x27,0xEF,0xF0,0xD3,0x94,0x0A,0x40,0x58,
+ 0x90,0xF1,0x14,0xE0,0x70,0x1E,0x04,0xF0,
+ 0x90,0x44,0x3B,0xE0,0x90,0xF1,0x12,0xF0,
+ 0x90,0x44,0x3A,0xE0,0x90,0xF1,0x13,0xF0,
+ 0x90,0xF1,0x0B,0xE4,0xF0,0x90,0xF1,0x0A,
+ 0x04,0xF0,0x80,0x34,0x90,0xF1,0x10,0xE0,
+ 0x70,0x2E,0x90,0x44,0x3B,0xE0,0xFF,0x90,
+ 0xF1,0x12,0xE0,0x6F,0x60,0x22,0x90,0x44,
+ 0x3A,0xE0,0xFE,0x90,0xF1,0x13,0xE0,0x6E,
+ 0x60,0x16,0x90,0xF1,0x10,0x74,0x01,0xF0,
+ 0x90,0xF1,0x0E,0xEF,0xF0,0xA3,0xEE,0xF0,
+ 0x90,0xF1,0x09,0xE4,0xF0,0xA3,0x04,0xF0,
+ 0x90,0x44,0x28,0xE0,0xFD,0x90,0x44,0x1F,
+ 0x74,0x02,0xF0,0xA3,0x74,0x39,0xF0,0x7B,
+ 0xF4,0x7A,0x01,0x7F,0x01,0x12,0x90,0x55,
+ 0x90,0x44,0x27,0xEF,0xF0,0xD3,0x94,0x19,
+ 0x40,0x3E,0x90,0xF1,0x14,0xE0,0x70,0x38,
+ 0x04,0xF0,0x90,0x44,0x39,0xE0,0x90,0xF1,
+ 0x12,0xF0,0x90,0x44,0x38,0xE0,0x90,0xF1,
+ 0x13,0xF0,0x90,0xF1,0x0B,0x74,0x15,0xF0,
+ 0x90,0xF1,0x10,0x74,0x01,0xF0,0x90,0x44,
+ 0x37,0xE0,0x90,0xF1,0x0E,0xF0,0x90,0x44,
+ 0x36,0xE0,0x90,0xF1,0x0F,0xF0,0x90,0xF1,
+ 0x09,0x74,0x10,0xF0,0xA3,0x74,0x01,0xF0,
+ 0x22,0x90,0xF1,0x14,0xE0,0xFF,0x90,0x44,
+ 0x2E,0xE0,0x6F,0x60,0x04,0x7F,0x01,0x80,
+ 0x02,0x7F,0x00,0x90,0xF1,0x10,0xE0,0xFE,
+ 0x90,0x44,0x2D,0xE0,0x6E,0x60,0x04,0x7E,
+ 0x01,0x80,0x02,0x7E,0x00,0xEE,0x4F,0xFF,
+ 0x90,0x42,0x2E,0xE0,0x64,0x01,0x70,0x39,
+ 0x90,0xF5,0x41,0xE0,0x60,0x03,0xEF,0x60,
+ 0x3D,0x12,0xAF,0x84,0x04,0x90,0xF5,0x4C,
+ 0xE0,0xB4,0x01,0xF9,0x90,0xF6,0x5D,0x74,
+ 0x01,0xF0,0x90,0xF1,0x10,0xE0,0x70,0x06,
+ 0x90,0xF1,0x14,0xE0,0x60,0x20,0x90,0xF4,
+ 0xC1,0xE0,0x70,0x1A,0x90,0xF4,0xC4,0xE0,
+ 0x70,0x14,0x90,0xF6,0x5C,0x04,0xF0,0x80,
+ 0x0D,0x90,0xF5,0x41,0xE4,0xF0,0x90,0xF6,
+ 0x5D,0xF0,0x90,0xF6,0x5C,0xF0,0x90,0xF1,
+ 0x10,0xE0,0x90,0x44,0x2D,0xF0,0x90,0xF1,
+ 0x14,0xE0,0x90,0x44,0x2E,0xF0,0x22,0xE4,
+ 0x90,0x44,0x3D,0xF0,0x90,0xF9,0x00,0xE0,
+ 0x70,0x09,0x90,0x42,0x2A,0xE0,0x90,0x44,
+ 0x3D,0xF0,0x22,0x90,0xF9,0x00,0xE0,0xB4,
+ 0x01,0x1F,0x90,0x41,0xE9,0xE0,0xB4,0x01,
+ 0x09,0x90,0x42,0x28,0xE0,0x90,0x44,0x3D,
+ 0xF0,0x22,0x90,0xF0,0x2B,0xE0,0x70,0x11,
+ 0x90,0x42,0x2B,0xE0,0x90,0x44,0x3D,0xF0,
+ 0x22,0x90,0x42,0x29,0xE0,0x90,0x44,0x3D,
+ 0xF0,0x22,0x12,0xA0,0x7B,0x12,0x92,0xB2,
+ 0x12,0x95,0x1B,0x12,0x91,0x86,0x90,0xF7,
+ 0x8E,0x74,0x01,0xF0,0x90,0xF7,0x91,0xF0,
+ 0x90,0xF7,0x31,0xE0,0x60,0x05,0x7F,0x01,
+ 0x12,0x9C,0x29,0x12,0x4D,0x1F,0xE4,0x90,
+ 0x44,0x2C,0xF0,0x7D,0x00,0x7C,0x07,0xE4,
+ 0xFF,0x12,0x47,0xAD,0x12,0x9F,0x31,0x12,
+ 0x6E,0x8F,0x12,0x97,0x25,0x04,0x12,0x70,
+ 0xEE,0x90,0x42,0x1F,0xE0,0x60,0x34,0x90,
+ 0xF1,0x33,0xE0,0x70,0x2E,0x90,0xF1,0x35,
+ 0xE0,0x70,0x28,0x90,0xF4,0xC1,0xE0,0x64,
+ 0x02,0x70,0x20,0x90,0xF9,0x00,0xE0,0x60,
+ 0x1A,0x90,0xF0,0x2B,0xE0,0x70,0x14,0x90,
+ 0x44,0x48,0xE0,0x70,0x0E,0x90,0x43,0xC4,
+ 0xE0,0x60,0x08,0x90,0xFD,0xA2,0x74,0x01,
+ 0xF0,0x80,0x05,0x90,0xFD,0xA2,0xE4,0xF0,
+ 0x90,0xF9,0x99,0xE0,0x60,0x0E,0x90,0xF2,
+ 0x1B,0x74,0x0C,0xF0,0x90,0x42,0x9E,0x74,
+ 0x01,0xF0,0x80,0x06,0x90,0xF2,0x1B,0x74,
+ 0x0D,0xF0,0x90,0xFD,0x33,0xE4,0xF0,0x04,
+ 0xF0,0x90,0xFD,0x36,0xE0,0xB4,0x01,0xF9,
+ 0x12,0x9B,0x78,0x12,0x93,0x38,0x90,0x43,
+ 0x3E,0xE0,0xB4,0x01,0x0C,0x90,0xFD,0x0F,
+ 0xE4,0xF0,0x90,0xFD,0x29,0x04,0xF0,0x80,
+ 0x2E,0x90,0x44,0x3D,0xE0,0xFF,0x90,0xFD,
+ 0x54,0xE0,0xC3,0x9F,0x50,0x11,0x90,0xFD,
+ 0x0F,0xEF,0xF0,0x90,0xFD,0x29,0x74,0x01,
+ 0xF0,0x90,0x42,0x6E,0xF0,0x80,0x10,0x90,
+ 0x42,0x6E,0xE0,0xB4,0x01,0x09,0x90,0xFD,
+ 0x29,0xE4,0xF0,0x90,0x42,0x6E,0xF0,0x12,
+ 0x98,0xDA,0x90,0x44,0x2C,0xE0,0x75,0xF0,
+ 0x50,0x84,0xE5,0xF0,0x70,0x03,0x12,0x91,
+ 0x86,0x12,0x92,0xB2,0x12,0xAE,0x61,0x12,
+ 0x9A,0xE4,0x12,0x70,0xEE,0x05,0x2C,0x90,
+ 0xF1,0x1A,0xE0,0x70,0xFA,0x90,0xF5,0x4E,
+ 0xE0,0x60,0x3C,0xA3,0xE0,0x60,0x38,0x90,
+ 0xF9,0x03,0xE0,0xFF,0x90,0xF4,0xC1,0xE0,
+ 0x6F,0x70,0x23,0x90,0xF9,0x05,0xE0,0xB4,
+ 0x01,0x0A,0xA3,0xE0,0xFF,0x90,0xF4,0xC4,
+ 0xE0,0xB5,0x07,0x12,0x90,0xF9,0x05,0xE0,
+ 0x70,0x15,0x90,0xF9,0x07,0xE0,0xFF,0x90,
+ 0xF4,0xC5,0xE0,0x6F,0x60,0x09,0x12,0xA7,
+ 0x40,0x90,0x44,0x2C,0x74,0xFE,0xF0,0x90,
+ 0x44,0x30,0xE0,0xB4,0x01,0x17,0x90,0xF5,
+ 0x4E,0xE0,0x64,0x01,0x60,0x0F,0xA3,0xE0,
+ 0x64,0x01,0x60,0x09,0x12,0xA7,0x40,0x90,
+ 0x44,0x2C,0x74,0xFE,0xF0,0x90,0x44,0x2C,
+ 0xE0,0x04,0xF0,0xE0,0xC3,0x94,0xFA,0x50,
+ 0x03,0x02,0x93,0xA4,0x90,0x44,0x30,0x74,
+ 0x01,0xF0,0x90,0x42,0x11,0xE0,0x64,0x01,
+ 0x60,0x09,0x90,0x44,0xA0,0xE0,0x70,0x03,
+ 0x12,0x72,0x42,0x90,0x43,0x3D,0x74,0x01,
+ 0xF0,0x22,0xE4,0xFF,0x90,0x44,0x32,0xF0,
+ 0xA3,0xF0,0xA3,0xF0,0x90,0xF9,0x00,0xE0,
+ 0x70,0x08,0x90,0x44,0x35,0x74,0x2D,0xF0,
+ 0x80,0x15,0x90,0xF9,0x00,0xE0,0xB4,0x02,
+ 0x08,0x90,0x44,0x35,0x74,0x59,0xF0,0x80,
+ 0x06,0x90,0x44,0x35,0x74,0xB1,0xF0,0x90,
+ 0xF5,0x56,0xE4,0xF0,0xFF,0x90,0x44,0x35,
+ 0xE0,0xFE,0xEF,0xC3,0x9E,0x40,0x03,0x02,
+ 0x95,0xEE,0x90,0xF6,0x56,0xEF,0xF0,0x90,
+ 0xF6,0x5A,0x74,0x01,0xF0,0x90,0xF6,0x5A,
+ 0xE0,0x70,0xFA,0x90,0xF6,0x5E,0xE0,0x90,
+ 0x44,0x31,0xF0,0x90,0x44,0x2F,0xE0,0xC3,
+ 0x94,0xC8,0x50,0x25,0x90,0x41,0xD9,0xE0,
+ 0xB4,0x01,0x1E,0xEF,0xC3,0x94,0x0E,0x40,
+ 0x0C,0x90,0x44,0x35,0xE0,0x24,0xF2,0xFE,
+ 0xEF,0xD3,0x9E,0x40,0x06,0x90,0x44,0x31,
+ 0x74,0x01,0xF0,0x90,0x44,0x2F,0xE0,0x04,
+ 0xF0,0x90,0x44,0x31,0xE0,0x60,0x17,0x90,
+ 0x44,0x33,0xE0,0xFE,0x74,0x01,0xA8,0x06,
+ 0x08,0x80,0x02,0xC3,0x33,0xD8,0xFC,0xFE,
+ 0x90,0x44,0x32,0xE0,0x2E,0xF0,0x90,0x44,
+ 0x33,0xE0,0x04,0xF0,0xE0,0x64,0x08,0x60,
+ 0x05,0xA3,0xE0,0xB4,0x16,0x1B,0x90,0x44,
+ 0x34,0xE0,0x90,0xF5,0x57,0xF0,0x90,0x44,
+ 0x32,0xE0,0x90,0xF5,0x55,0xF0,0xE4,0x90,
+ 0x44,0x32,0xF0,0xA3,0xF0,0xA3,0xE0,0x04,
+ 0xF0,0x0F,0x02,0x95,0x4E,0x90,0xF5,0x56,
+ 0x74,0x01,0xF0,0x22,0x90,0xF9,0x00,0xE0,
+ 0xB4,0x01,0x10,0x90,0x44,0x6B,0x74,0x0C,
+ 0xF0,0xA3,0x74,0x1A,0xF0,0xA3,0x74,0xA1,
+ 0xF0,0x80,0x24,0x90,0xF9,0x00,0xE0,0x70,
+ 0x10,0x90,0x44,0x6B,0x74,0x0A,0xF0,0xA3,
+ 0x74,0x06,0xF0,0xA3,0x74,0xA9,0xF0,0x80,
+ 0x0E,0x90,0x44,0x6B,0x74,0x0B,0xF0,0xA3,
+ 0x74,0x0D,0xF0,0xA3,0x74,0x51,0xF0,0xE4,
+ 0xFF,0x7F,0x08,0x90,0x44,0x71,0xE4,0xF0,
+ 0xA3,0xDF,0xFC,0x7F,0x08,0x90,0xF4,0xC1,
+ 0xE0,0x14,0x60,0x12,0x14,0x60,0x41,0x24,
+ 0x02,0x70,0x6E,0x90,0x44,0x69,0x74,0xB5,
+ 0xF0,0xA3,0x74,0x08,0xF0,0x22,0x90,0xF4,
+ 0xC6,0xE0,0x14,0x60,0x0A,0x14,0x60,0x12,
+ 0x14,0x60,0x1A,0x24,0x03,0x70,0x52,0x90,
+ 0x44,0x69,0x74,0xA2,0xF0,0xA3,0x74,0x09,
+ 0xF0,0x22,0x90,0x44,0x69,0x74,0xE5,0xF0,
+ 0xA3,0x74,0x0A,0xF0,0x22,0x90,0x44,0x69,
+ 0x74,0x8E,0xF0,0xA3,0x74,0x0A,0xF0,0x22,
+ 0x90,0xF4,0xC6,0xE0,0x14,0x60,0x0A,0x14,
+ 0x60,0x12,0x14,0x60,0x1A,0x24,0x03,0x70,
+ 0x20,0x90,0x44,0x69,0x74,0x9E,0xF0,0xA3,
+ 0x74,0x0A,0xF0,0x22,0x90,0x44,0x69,0x74,
+ 0x84,0xF0,0xA3,0x74,0x0A,0xF0,0x22,0x90,
+ 0x44,0x69,0x74,0xC5,0xF0,0xA3,0x74,0x0B,
+ 0xF0,0x22,0x90,0xFD,0x47,0xE0,0x90,0x44,
+ 0x55,0xF0,0x90,0xFD,0x46,0xE0,0x90,0x44,
+ 0x56,0xF0,0x90,0xFD,0x45,0xE0,0x90,0x44,
+ 0x57,0xF0,0x90,0xFD,0x44,0xE0,0x90,0x44,
+ 0x58,0xF0,0x90,0x44,0x55,0xE0,0xFC,0xA3,
+ 0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0x90,0x44,0x6B,0xE0,0xF9,0xF8,0x12,0xAA,
+ 0x55,0x90,0x44,0x55,0x12,0xAA,0x8F,0x22,
+ 0xE4,0x90,0x44,0x51,0xF0,0x90,0xF5,0xD6,
+ 0xE0,0x90,0x44,0x52,0xF0,0x90,0xF5,0xD5,
+ 0xE0,0x90,0x44,0x53,0xF0,0x90,0xF5,0xD4,
+ 0xE0,0x90,0x44,0x54,0xF0,0x22,0xE4,0x90,
+ 0x44,0x7D,0xF0,0x90,0x44,0x7C,0xF0,0x90,
+ 0x44,0x7B,0xF0,0x22,0x90,0x44,0x7D,0xE0,
+ 0xB4,0x64,0x22,0x90,0x44,0x7C,0xE0,0xD3,
+ 0x94,0x05,0x40,0x11,0x90,0x44,0x7B,0xE0,
+ 0xD3,0x94,0x05,0x40,0x08,0x90,0x44,0x48,
+ 0x74,0x01,0xF0,0x80,0x05,0xE4,0x90,0x44,
+ 0x48,0xF0,0x12,0x97,0x17,0x90,0x44,0x7D,
+ 0xE0,0x04,0xF0,0x12,0x97,0x58,0x22,0x90,
+ 0xF5,0xCC,0xE4,0xF0,0xA3,0x74,0x02,0xF0,
+ 0x90,0xF5,0xD4,0xE0,0x90,0x44,0x54,0xF0,
+ 0x90,0xF5,0xCB,0xE0,0xB4,0x01,0xF9,0x12,
+ 0x96,0xF9,0x90,0xFD,0x33,0xE4,0xF0,0x04,
+ 0xF0,0x90,0xFD,0x36,0xE0,0xB4,0x01,0xF9,
+ 0x12,0x96,0xBB,0x90,0x44,0x51,0xE0,0xFC,
+ 0xA3,0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,
+ 0xFF,0x90,0x44,0x55,0xE0,0xF8,0xA3,0xE0,
+ 0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,0xFB,0xC3,
+ 0x12,0xAA,0x44,0x50,0x06,0x90,0x44,0x7C,
+ 0xE0,0x04,0xF0,0x90,0x44,0x51,0xE0,0xFC,
+ 0xA3,0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,
+ 0xFF,0x78,0x02,0x12,0xAA,0x68,0x90,0x44,
+ 0x51,0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,
+ 0xFA,0xA3,0xE0,0x2F,0xFF,0xEA,0x3E,0xFE,
+ 0xE9,0x3D,0xFD,0xE8,0x3C,0xFC,0x90,0x44,
+ 0x55,0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,
+ 0xFA,0xA3,0xE0,0xFB,0xD3,0x12,0xAA,0x44,
+ 0x40,0x06,0x90,0x44,0x7B,0xE0,0x04,0xF0,
+ 0x22,0x90,0xF5,0xCB,0xE0,0xB4,0x01,0xF9,
+ 0x90,0xF5,0xD0,0xE0,0x90,0x44,0x4A,0xF0,
+ 0x90,0xF5,0xCF,0xE0,0x90,0x44,0x4B,0xF0,
+ 0x90,0xF5,0xCE,0xE0,0x90,0x44,0x4C,0xF0,
+ 0x90,0x44,0x49,0xE0,0xFC,0xA3,0xE0,0xFD,
+ 0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,0x78,0x0A,
+ 0x12,0xAA,0x7C,0x78,0x0A,0x12,0xAA,0x68,
+ 0x90,0x44,0x49,0x12,0xAA,0x8F,0x90,0x44,
+ 0x69,0xE0,0xFF,0xE4,0xFC,0xFD,0xFE,0x90,
+ 0x44,0x49,0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,
+ 0xE0,0xFA,0xA3,0xE0,0xFB,0x12,0xA9,0xD1,
+ 0x90,0x44,0x6A,0xE0,0xF9,0xF8,0x12,0xAA,
+ 0x68,0x90,0x44,0x49,0x12,0xAA,0x8F,0x90,
+ 0xF5,0xD3,0xE0,0x90,0x44,0x4E,0xF0,0x90,
+ 0xF5,0xD2,0xE0,0x90,0x44,0x4F,0xF0,0x90,
+ 0xF5,0xD1,0xE0,0x90,0x44,0x50,0xF0,0x90,
+ 0x44,0x4D,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0x78,0x0A,0x12,
+ 0xAA,0x7C,0x78,0x0A,0x12,0xAA,0x68,0x90,
+ 0x44,0x4D,0x12,0xAA,0x8F,0x90,0x44,0x69,
+ 0xE0,0xFF,0xE4,0xFC,0xFD,0xFE,0x90,0x44,
+ 0x4D,0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,
+ 0xFA,0xA3,0xE0,0xFB,0x12,0xA9,0xD1,0x90,
+ 0x44,0x6A,0xE0,0xF9,0xF8,0x12,0xAA,0x68,
+ 0x90,0x44,0x4D,0x12,0xAA,0x8F,0x22,0x90,
+ 0x44,0x45,0xE0,0x90,0xF5,0xCC,0xF0,0x90,
+ 0x44,0x44,0xE0,0x54,0x1F,0x90,0xF5,0xCD,
+ 0xF0,0x90,0xF5,0xD4,0xE0,0x90,0x44,0x54,
+ 0xF0,0x90,0xF5,0xCB,0xE0,0xB4,0x01,0xF9,
+ 0x22,0x90,0x42,0x3B,0xE0,0x70,0x03,0x02,
+ 0x99,0xC6,0x90,0x44,0xBA,0x74,0x08,0xF0,
+ 0xE4,0x90,0x44,0x3E,0xF0,0x90,0x44,0xBA,
+ 0xE0,0xFF,0x90,0x44,0x3E,0xE0,0xFE,0xC3,
+ 0x9F,0x50,0x6C,0xEE,0xFF,0x7E,0x00,0x7C,
+ 0x02,0x7D,0x58,0x12,0xA9,0x34,0xEF,0x24,
+ 0x64,0xFF,0xE4,0x3E,0x90,0x44,0x44,0xF0,
+ 0xA3,0xEF,0xF0,0x12,0xA7,0x71,0x90,0x44,
+ 0xBB,0xE0,0x70,0x43,0x05,0x2C,0x12,0x96,
+ 0xF9,0x90,0x44,0x3E,0xE0,0x70,0x03,0x12,
+ 0xA8,0x00,0x90,0x44,0x55,0xE0,0xFC,0xA3,
+ 0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0x78,0x04,0x12,0xAA,0x55,0x90,0x44,0x51,
+ 0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,
+ 0xA3,0xE0,0xFB,0xC3,0x12,0xAA,0x44,0x50,
+ 0x0E,0x90,0x44,0x43,0xE0,0x04,0xF0,0x70,
+ 0x06,0x90,0x44,0x42,0xE0,0x04,0xF0,0x90,
+ 0x44,0x3E,0xE0,0x04,0xF0,0x80,0x86,0x90,
+ 0x44,0x46,0xE0,0x04,0xF0,0xE0,0x64,0x64,
+ 0x70,0x53,0x90,0xF9,0x00,0xE0,0x60,0x08,
+ 0x90,0x44,0x7E,0x74,0x28,0xF0,0x80,0x06,
+ 0x90,0x44,0x7E,0x74,0x3E,0xF0,0x90,0x42,
+ 0x2F,0x74,0x01,0xF0,0x90,0x44,0x7E,0xE0,
+ 0xFF,0xD3,0x90,0x44,0x43,0xE0,0x9F,0x90,
+ 0x44,0x42,0xE0,0x94,0x00,0x40,0x0B,0xE4,
+ 0x90,0x41,0xE8,0xF0,0x90,0x41,0xE9,0xF0,
+ 0x80,0x0A,0x90,0x41,0xE8,0x74,0x01,0xF0,
+ 0x90,0x41,0xE9,0xF0,0x90,0x44,0x47,0xE0,
+ 0x04,0xF0,0xE4,0x90,0x44,0x42,0xF0,0xA3,
+ 0xF0,0x90,0x44,0x46,0xF0,0x12,0x99,0xCA,
+ 0x22,0x90,0x42,0x2F,0xE0,0x60,0x33,0x90,
+ 0xF0,0x2B,0xE0,0x70,0x21,0x90,0x43,0xC4,
+ 0xE0,0x70,0x0C,0x90,0x41,0xE0,0xE0,0x60,
+ 0x06,0x90,0xF9,0x00,0xE0,0x70,0x0F,0x90,
+ 0x41,0xE8,0xE0,0x70,0x09,0x90,0xF7,0x84,
+ 0xF0,0x90,0xF7,0x83,0xF0,0x22,0x90,0xF7,
+ 0x84,0x74,0x01,0xF0,0x90,0xF7,0x83,0x74,
+ 0xFF,0xF0,0x22,0xE4,0x90,0x44,0x70,0xF0,
+ 0x90,0x44,0x6E,0xF0,0xA3,0xF0,0x12,0x95,
+ 0xF5,0x22,0x90,0xF9,0x00,0xE0,0x70,0x19,
+ 0x90,0x44,0x44,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0x7C,0x06,0x7D,0xA8,0x12,0xA9,0x46,0x90,
+ 0x44,0x44,0xEC,0xF0,0xA3,0xED,0xF0,0x80,
+ 0x1E,0x90,0xF9,0x00,0xE0,0xB4,0x02,0x17,
+ 0x90,0x44,0x44,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0x7C,0x0D,0x7D,0x50,0x12,0xA9,0x46,0x90,
+ 0x44,0x44,0xEC,0xF0,0xA3,0xED,0xF0,0x12,
+ 0x98,0xB8,0x22,0x22,0xE4,0xFB,0xEB,0x25,
+ 0xE0,0x24,0x7F,0xF5,0x82,0xE4,0x34,0x44,
+ 0xF5,0x83,0xE0,0xFF,0xA3,0xE0,0x90,0x44,
+ 0x44,0xCF,0xF0,0xA3,0xEF,0xF0,0x12,0x9A,
+ 0x13,0x90,0xF5,0xD0,0xE0,0xFF,0xC4,0x13,
+ 0x54,0x07,0xFF,0x90,0xF5,0xD3,0xE0,0xFE,
+ 0xC4,0x13,0x54,0x07,0x6F,0x60,0x0D,0x74,
+ 0x71,0x2B,0xF5,0x82,0xE4,0x34,0x44,0xF5,
+ 0x83,0xE0,0x04,0xF0,0x0B,0xEB,0xB4,0x08,
+ 0xBD,0x90,0x44,0x6F,0xE0,0x04,0xF0,0xE0,
+ 0xC3,0x94,0x13,0x40,0x3D,0xE4,0xFF,0xFB,
+ 0x74,0x71,0x2B,0xF5,0x82,0xE4,0x34,0x44,
+ 0xF5,0x83,0xE0,0xFE,0xD3,0x94,0x0E,0x50,
+ 0x06,0xEE,0xC3,0x94,0x05,0x50,0x01,0x0F,
+ 0x74,0x71,0x2B,0xF5,0x82,0xE4,0x34,0x44,
+ 0xF5,0x83,0xE4,0xF0,0x0B,0xEB,0xB4,0x08,
+ 0xD7,0xEF,0xD3,0x94,0x06,0x40,0x06,0x90,
+ 0x42,0x3C,0x74,0x01,0xF0,0xE4,0x90,0x44,
+ 0x6F,0xF0,0x22,0x90,0x42,0x3A,0xE0,0xB4,
+ 0x01,0x1F,0x90,0xF0,0x2B,0xE0,0x70,0x19,
+ 0x12,0x9A,0x55,0x90,0x42,0x3C,0xE0,0xB4,
+ 0x01,0x0F,0x12,0x9A,0x04,0x90,0xFD,0x0F,
+ 0x74,0x07,0xF0,0x90,0xFD,0x29,0x74,0x01,
+ 0xF0,0x22,0x90,0xF7,0x66,0xE0,0x90,0x44,
+ 0x3F,0xF0,0xE0,0xFF,0x90,0x42,0x47,0xF0,
+ 0x90,0xF7,0x68,0xE0,0x90,0x44,0x9D,0xF0,
+ 0xEF,0x70,0x04,0x90,0x44,0x97,0xF0,0x90,
+ 0xF7,0x65,0xE0,0x90,0x44,0x9C,0xF0,0x90,
+ 0xF5,0xA9,0xE0,0x70,0x22,0x90,0xF7,0x63,
+ 0xE0,0x90,0x42,0x2F,0xF0,0x90,0xF7,0x64,
+ 0xE0,0x90,0x41,0xE8,0xF0,0x12,0x70,0x6A,
+ 0x90,0x44,0x3F,0xE0,0x90,0x41,0xD1,0xF0,
+ 0xE4,0x90,0x42,0x46,0xF0,0x80,0x0A,0x90,
+ 0x41,0xD1,0x74,0x01,0xF0,0x90,0x42,0x46,
+ 0xF0,0x12,0x99,0xCA,0x04,0x12,0x6E,0x75,
+ 0x90,0xF7,0x69,0xE0,0x70,0xFA,0x90,0xF7,
+ 0x6B,0x74,0x01,0xF0,0xE4,0xF0,0x22,0x90,
+ 0x42,0x3F,0xE0,0x64,0x01,0x70,0x42,0x90,
+ 0xFD,0x9D,0xE0,0xFE,0x90,0xFD,0x9C,0xE0,
+ 0x7C,0x00,0x24,0x00,0xFF,0xEC,0x3E,0xFE,
+ 0xC3,0xEF,0x94,0x46,0xEE,0x94,0x00,0x50,
+ 0x28,0x90,0xFD,0x37,0xE0,0x64,0x07,0x70,
+ 0x20,0x90,0xFD,0x29,0xF0,0x90,0x42,0x3D,
+ 0xF0,0x90,0xFD,0x2B,0xF0,0x7D,0xFF,0x7C,
+ 0x7F,0xFF,0x12,0x47,0xAD,0x90,0xF1,0x1A,
+ 0xE0,0x70,0xFA,0x90,0xFD,0x2B,0x74,0x01,
+ 0xF0,0x22,0xE5,0x0F,0x14,0xB4,0x08,0x00,
+ 0x50,0x5D,0x90,0x9B,0xD9,0x75,0xF0,0x03,
+ 0xA4,0xC5,0x83,0x25,0xF0,0xC5,0x83,0x73,
+ 0x02,0x9B,0xF1,0x02,0x9B,0xF8,0x02,0x9B,
+ 0xFF,0x02,0x9C,0x06,0x02,0x9C,0x0D,0x02,
+ 0x9C,0x14,0x02,0x9C,0x1B,0x02,0x9C,0x22,
+ 0x90,0xF2,0x1B,0x74,0x01,0xF0,0x22,0x90,
+ 0xF2,0x1B,0x74,0x02,0xF0,0x22,0x90,0xF2,
+ 0x1B,0x74,0x03,0xF0,0x22,0x90,0xF2,0x1B,
+ 0x74,0x04,0xF0,0x22,0x90,0xF2,0x1B,0x74,
+ 0x05,0xF0,0x22,0x90,0xF2,0x1B,0x74,0x06,
+ 0xF0,0x22,0x90,0xF2,0x1B,0x74,0x07,0xF0,
+ 0x22,0x90,0xF2,0x1B,0x74,0x08,0xF0,0x22,
+ 0xC2,0xAF,0x90,0x42,0x2F,0xE0,0x90,0xF7,
+ 0x5A,0xF0,0x90,0x41,0xE9,0xE0,0x90,0xF7,
+ 0x5B,0xF0,0x90,0x42,0x37,0xE0,0x90,0xF7,
+ 0x5C,0xF0,0xA3,0xEF,0xF0,0x90,0xF9,0x00,
+ 0xE0,0x90,0xF7,0x5E,0xF0,0x90,0x41,0xDF,
+ 0xE0,0x90,0xF7,0x5F,0xF0,0x90,0xF7,0x61,
+ 0x74,0x01,0xF0,0x90,0xF7,0x60,0xF0,0x7F,
+ 0x00,0x7E,0x28,0x12,0x47,0x76,0x90,0xF7,
+ 0x61,0xE4,0xF0,0x90,0xF7,0x60,0xF0,0xD2,
+ 0xAF,0x22,0x90,0xF5,0xA8,0xE4,0xF0,0x12,
+ 0x48,0xAC,0x22,0x12,0x9C,0xE6,0x90,0xF7,
+ 0x42,0xE0,0x90,0x44,0x99,0xF0,0xE0,0x90,
+ 0xF9,0x00,0xF0,0x90,0xF7,0x44,0xE0,0xFF,
+ 0x90,0xF9,0x08,0xF0,0x90,0xF7,0x43,0xE0,
+ 0xFF,0x90,0xF9,0x03,0xF0,0x90,0xF7,0x46,
+ 0xE0,0xFF,0x90,0xF9,0x06,0xF0,0x90,0xF7,
+ 0x47,0xE0,0xFF,0x90,0xF9,0x07,0xF0,0x90,
+ 0xF7,0x45,0xE0,0x54,0x03,0xFF,0x90,0xF9,
+ 0x02,0xF0,0x70,0x05,0x90,0xF9,0x05,0x04,
+ 0xF0,0x22,0xE4,0xFF,0xFE,0xC3,0xEF,0x94,
+ 0xFF,0xEE,0x64,0x80,0x94,0x7F,0x50,0x14,
+ 0xEF,0x24,0x58,0xFD,0xEE,0x34,0xF7,0x8D,
+ 0x82,0xF5,0x83,0xE4,0xF0,0x0F,0xBF,0x00,
+ 0x01,0x0E,0x80,0xE1,0x22,0x90,0xF5,0xB0,
+ 0xE0,0x60,0x0C,0x90,0xF9,0x00,0xE0,0xFF,
+ 0x90,0xF7,0x42,0xE0,0xB5,0x07,0x0D,0xE5,
+ 0x0F,0xB4,0x03,0x20,0x90,0xF7,0x42,0xE0,
+ 0x64,0x01,0x60,0x18,0x12,0x68,0xE0,0x75,
+ 0x0F,0x01,0x12,0x4D,0x1F,0x53,0x91,0xBF,
+ 0xE4,0x90,0x44,0x98,0xF0,0xD2,0xEA,0xD2,
+ 0xE9,0x12,0xA7,0x32,0x90,0x44,0x97,0x74,
+ 0x01,0xF0,0x22,0x90,0xFB,0x96,0xE0,0x30,
+ 0xE7,0x16,0xE4,0x90,0x42,0x37,0xF0,0x12,
+ 0x70,0xEE,0xE4,0x90,0x44,0xBE,0xF0,0xF5,
+ 0x2E,0x7F,0x80,0x7E,0x13,0x12,0x47,0x76,
+ 0x90,0xFB,0x88,0x74,0x01,0xF0,0x22,0x90,
+ 0x42,0x0A,0xE0,0xFF,0x90,0xF0,0x58,0xF0,
+ 0xEF,0xF0,0x90,0x41,0xDB,0xE0,0xB4,0x22,
+ 0x0B,0x90,0x42,0x0B,0xE0,0xFF,0x90,0xF0,
+ 0x58,0xF0,0xEF,0xF0,0x90,0x42,0x0D,0xE0,
+ 0x90,0xF0,0x58,0xF0,0x90,0x42,0x10,0xE0,
+ 0x90,0x42,0x08,0xF0,0xE4,0x90,0x41,0xD9,
+ 0xF0,0x22,0x90,0xF5,0xA9,0xE0,0x60,0x14,
+ 0x90,0x42,0x4E,0xE0,0x60,0x0E,0x90,0xF0,
+ 0x68,0xE0,0x20,0xE0,0xF9,0x90,0xF0,0x68,
+ 0xE0,0x30,0xE0,0xF9,0x22,0x12,0x9D,0x7B,
+ 0x90,0x42,0x0B,0xE0,0xFF,0x90,0xF0,0x58,
+ 0xF0,0xEF,0xF0,0x90,0x42,0x0D,0xE0,0xFF,
+ 0x90,0xF0,0x58,0xF0,0xEF,0xF0,0x22,0x12,
+ 0x9D,0x7B,0x90,0x42,0x0C,0xE0,0xFF,0x90,
+ 0xF0,0x58,0xF0,0xEF,0xF0,0x90,0x42,0x0D,
+ 0xE0,0xFF,0x90,0xF0,0x58,0xF0,0xEF,0xF0,
+ 0x22,0x90,0x42,0x0F,0xE0,0xFF,0x90,0x42,
+ 0x08,0xE0,0xC3,0x9F,0x50,0x06,0xE0,0x04,
+ 0xF0,0x12,0x9D,0x96,0x22,0x90,0x42,0x08,
+ 0xE0,0x60,0x05,0x14,0xF0,0x12,0x9D,0xB0,
+ 0x22,0x90,0x42,0x59,0xE0,0x60,0x1B,0x90,
+ 0x41,0xE7,0x74,0x01,0xF0,0x7F,0x84,0x12,
+ 0x89,0x23,0x90,0x41,0xD8,0x74,0x01,0xF0,
+ 0x90,0x43,0x41,0x74,0x86,0xF0,0x90,0xFB,
+ 0x28,0xF0,0x22,0x90,0x42,0x59,0xE0,0x60,
+ 0x18,0x7F,0x85,0x12,0x89,0x23,0xE4,0x90,
+ 0x41,0xE7,0xF0,0x90,0x41,0xD8,0xF0,0x90,
+ 0x43,0x41,0x74,0x82,0xF0,0x90,0xFB,0x28,
+ 0xF0,0x22,0x90,0x41,0xDB,0xE0,0xB4,0x2E,
+ 0x03,0x12,0xA2,0xD0,0x90,0x41,0xEC,0xE0,
+ 0x70,0x48,0x90,0x42,0x59,0xE0,0x60,0x42,
+ 0x90,0x41,0xE0,0xE0,0x70,0x12,0x90,0x42,
+ 0x03,0xE0,0x60,0x0C,0x90,0x44,0xAA,0xE0,
+ 0x75,0xF0,0x03,0x84,0xE5,0xF0,0x60,0x1B,
+ 0x90,0x41,0xDB,0xE0,0xB4,0x28,0x19,0x90,
+ 0x44,0xAA,0xE0,0x75,0xF0,0x03,0x84,0xE5,
+ 0xF0,0x64,0x02,0x60,0x0B,0x90,0xF0,0x2B,
+ 0xE0,0x70,0x05,0x12,0x9D,0xEA,0x80,0x03,
+ 0x12,0x9E,0x0C,0x74,0xFF,0xFF,0xFE,0x12,
+ 0x47,0x76,0x22,0xE5,0x13,0x60,0x30,0x30,
+ 0xE7,0x07,0x12,0x9D,0xDE,0x05,0x13,0x80,
+ 0xF2,0x12,0x9D,0xCA,0x15,0x13,0x90,0x41,
+ 0xDB,0xE0,0xB4,0x22,0xE6,0xE5,0x13,0x70,
+ 0xE2,0x90,0x42,0x08,0xE0,0xFF,0x54,0x0F,
+ 0xFE,0xBE,0x0F,0xD7,0xEF,0xC3,0x94,0x40,
+ 0x50,0xD1,0x12,0x9D,0xCA,0x80,0xCC,0x90,
+ 0x42,0x08,0xE0,0x90,0x42,0x41,0xF0,0x22,
+ 0xC2,0xAD,0x12,0x9D,0x48,0x90,0x42,0x59,
+ 0xE0,0x60,0x05,0xE4,0x90,0x44,0xA0,0xF0,
+ 0x90,0xF0,0x01,0x74,0x01,0xF0,0xE4,0x90,
+ 0x44,0x90,0xF0,0x90,0xF0,0x01,0xE0,0xB4,
+ 0x01,0xF9,0x12,0xA4,0x86,0xE5,0x13,0x60,
+ 0x1E,0x12,0x9E,0x84,0x7D,0x33,0x7C,0x01,
+ 0xE4,0xFF,0x12,0x47,0xAD,0x90,0xF1,0x1A,
+ 0xE0,0x70,0xFA,0x90,0x44,0x90,0xE0,0x04,
+ 0xF0,0xE0,0xC3,0x94,0x30,0x40,0xD4,0xD2,
+ 0xAD,0x90,0x42,0x59,0xE0,0x60,0x12,0x90,
+ 0x42,0x08,0xE0,0x70,0x0C,0x90,0x42,0x44,
+ 0xE0,0xD3,0x94,0xD0,0x40,0x03,0x12,0x9D,
+ 0xEA,0x22,0x90,0xF0,0x01,0xE0,0xB4,0x01,
+ 0x06,0x12,0xA4,0x86,0x12,0x9E,0x84,0x22,
+ 0xE4,0xFF,0xFE,0x90,0x44,0x91,0xF0,0x90,
+ 0x42,0x59,0xE0,0x70,0x03,0x02,0xA0,0x2E,
+ 0x90,0x42,0x08,0xE0,0xFD,0xFC,0x90,0x42,
+ 0x48,0xE0,0xFB,0xB4,0x01,0x05,0x90,0xF0,
+ 0x61,0xE0,0xFC,0x90,0x42,0x39,0xE0,0xFA,
+ 0xEC,0xC3,0x9A,0x50,0x02,0x7F,0x01,0xEB,
+ 0x70,0x13,0x90,0x42,0x42,0xE0,0xFC,0xED,
+ 0xC3,0x9C,0x50,0x09,0xC3,0xE5,0x1F,0x94,
+ 0x20,0x50,0x02,0x7E,0x01,0x90,0x42,0x48,
+ 0xE0,0xB4,0x01,0x0F,0x90,0x42,0x42,0xE0,
+ 0xFD,0x90,0xF0,0x61,0xE0,0xC3,0x9D,0x50,
+ 0x02,0x7E,0x01,0x90,0x44,0xA1,0xE0,0x64,
+ 0x03,0x60,0x08,0x90,0x42,0x58,0xE0,0x64,
+ 0x01,0x60,0xF0,0x90,0x41,0xEC,0xE0,0x60,
+ 0x03,0x02,0xA0,0x2E,0x90,0x41,0xE7,0xE0,
+ 0x70,0x1F,0xEF,0x70,0x09,0x90,0x41,0xD9,
+ 0xE0,0x60,0x7A,0xEE,0x60,0x77,0x12,0x9D,
+ 0xEA,0x90,0x44,0xA0,0x74,0x32,0xF0,0x90,
+ 0x41,0xD9,0xE0,0x60,0x68,0x12,0x72,0x37,
+ 0x22,0x90,0x42,0x4D,0xE0,0xFF,0x90,0x41,
+ 0xE0,0xE0,0xB4,0x01,0x05,0x90,0x42,0x4C,
+ 0xE0,0xFF,0x90,0x42,0x48,0xE0,0xFE,0x70,
+ 0x1E,0x90,0x42,0x08,0xE0,0xFD,0xD3,0x9F,
+ 0x50,0x0F,0x90,0x41,0xFD,0xE0,0xFC,0xED,
+ 0x9C,0x40,0x0C,0x90,0x41,0xD9,0xE0,0x70,
+ 0x06,0x90,0x44,0x91,0x74,0x01,0xF0,0xEE,
+ 0x64,0x01,0x70,0x20,0x90,0xF0,0x61,0xE0,
+ 0xD3,0x9F,0x50,0x12,0x90,0x41,0xFD,0xE0,
+ 0xFF,0x90,0xF0,0x61,0xE0,0x9F,0x40,0x0C,
+ 0x90,0x41,0xD9,0xE0,0x70,0x06,0x90,0x44,
+ 0x91,0x74,0x01,0xF0,0x90,0x44,0x91,0xE0,
+ 0x60,0x03,0x12,0x9E,0x0C,0x22,0x90,0x41,
+ 0xDB,0xE0,0x64,0x27,0x70,0x35,0x90,0x41,
+ 0xE0,0xE0,0x64,0x01,0x60,0x18,0x90,0x42,
+ 0x08,0xE0,0xC3,0x94,0x64,0x40,0x08,0x90,
+ 0x41,0xD8,0x74,0x01,0xF0,0x80,0x0C,0xE4,
+ 0x90,0x41,0xD8,0xF0,0x80,0x05,0xE4,0x90,
+ 0x41,0xD8,0xF0,0x12,0xA0,0x6D,0x90,0x41,
+ 0xD8,0xE0,0x90,0x44,0xB0,0xF0,0xE4,0x90,
+ 0x44,0xB3,0xF0,0x22,0x90,0x41,0xD8,0xE0,
+ 0x90,0xFB,0x97,0xF0,0x7F,0x86,0x12,0x89,
+ 0x23,0x22,0x90,0x41,0xDB,0xE0,0x64,0x27,
+ 0x60,0x03,0x02,0xA2,0x64,0x7F,0x25,0x12,
+ 0x89,0x23,0x90,0xFB,0x9F,0xE0,0x90,0x44,
+ 0xB1,0xF0,0x90,0xFB,0xA0,0xE0,0x90,0x44,
+ 0xB2,0xF0,0x90,0x44,0xB1,0xE0,0xFE,0xA3,
+ 0xE0,0x7C,0x00,0x24,0x00,0xFF,0xEC,0x3E,
+ 0x90,0x44,0xAE,0xF0,0xA3,0xEF,0xF0,0x90,
+ 0x41,0xE0,0xE0,0x64,0x01,0x60,0x60,0x90,
+ 0x44,0xAE,0xE0,0x70,0x02,0xA3,0xE0,0x70,
+ 0x20,0x90,0x42,0x08,0xE0,0xC3,0x94,0x69,
+ 0x40,0x17,0x90,0x41,0xD9,0xE0,0x70,0x11,
+ 0x90,0x44,0xB0,0xE0,0xB4,0x01,0x0A,0xE4,
+ 0xF0,0x90,0x41,0xD8,0xF0,0x12,0xA0,0x6D,
+ 0x22,0xD3,0x90,0x44,0xAF,0xE0,0x94,0xD2,
+ 0x90,0x44,0xAE,0xE0,0x94,0x00,0x40,0x09,
+ 0x90,0x42,0x08,0xE0,0xD3,0x94,0x5A,0x40,
+ 0x0B,0x90,0x41,0xD9,0xE0,0x64,0x01,0x60,
+ 0x03,0x02,0xA2,0x64,0x90,0x44,0xB0,0xE0,
+ 0x60,0x03,0x02,0xA2,0x64,0x04,0xF0,0x90,
+ 0x41,0xD8,0xF0,0x12,0xA0,0x6D,0x22,0x90,
+ 0x44,0xAE,0xE0,0x70,0x02,0xA3,0xE0,0x60,
+ 0x03,0x02,0xA1,0xB6,0x90,0x42,0x08,0xE0,
+ 0xFF,0xC3,0x94,0x69,0x40,0x06,0x90,0xF0,
+ 0x2B,0xE0,0x60,0x0E,0xEF,0xC3,0x94,0x5A,
+ 0x40,0x7B,0x90,0xF0,0x2B,0xE0,0x64,0x01,
+ 0x70,0x73,0x90,0x44,0xB0,0xE0,0xB4,0x01,
+ 0x10,0xE4,0xF0,0x90,0x41,0xD8,0xF0,0x12,
+ 0xA0,0x6D,0x90,0x44,0xB3,0xE0,0x04,0xF0,
+ 0x22,0x90,0x44,0xB0,0xE0,0xB4,0x02,0x22,
+ 0x90,0x41,0xD9,0xE0,0x60,0x08,0x90,0x44,
+ 0xB0,0x74,0x03,0xF0,0x80,0x05,0xE4,0x90,
+ 0x44,0xB0,0xF0,0xE4,0x90,0x41,0xD8,0xF0,
+ 0x12,0xA0,0x6D,0x90,0x44,0xB3,0xE0,0x04,
+ 0xF0,0x22,0x90,0x44,0xB0,0xE0,0xFF,0xB4,
+ 0x04,0x0F,0x90,0x41,0xD9,0xE0,0x60,0x03,
+ 0x02,0xA2,0x64,0x90,0x44,0xB0,0x04,0xF0,
+ 0x22,0xEF,0x64,0x05,0x60,0x03,0x02,0xA2,
+ 0x64,0x90,0x44,0xB0,0x74,0x06,0xF0,0xE4,
+ 0x90,0x41,0xD8,0xF0,0x12,0xA0,0x6D,0xE4,
+ 0x90,0x44,0xB3,0xF0,0x22,0xD3,0x90,0x44,
+ 0xAF,0xE0,0x94,0x2C,0x90,0x44,0xAE,0xE0,
+ 0x94,0x01,0x40,0x08,0x90,0x42,0x08,0xE0,
+ 0x94,0x64,0x50,0x33,0x90,0x44,0xAE,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0xD3,0x94,0xE6,0xEE,
+ 0x94,0x00,0x40,0x09,0x90,0x42,0x08,0xE0,
+ 0xD3,0x94,0x64,0x40,0x1A,0xD3,0xEF,0x94,
+ 0x2C,0xEE,0x94,0x01,0x40,0x62,0x90,0x42,
+ 0x08,0xE0,0xD3,0x94,0x2D,0x50,0x59,0x90,
+ 0xF0,0x2B,0xE0,0x64,0x01,0x70,0x51,0x90,
+ 0x44,0xB0,0xE0,0x70,0x32,0x90,0x41,0xD8,
+ 0x04,0xF0,0x12,0xA0,0x6D,0x90,0x41,0xD9,
+ 0xE0,0x60,0x08,0x90,0x44,0xB0,0x74,0x02,
+ 0xF0,0x80,0x15,0x90,0x44,0xB3,0xE0,0xB4,
+ 0x02,0x08,0x90,0x44,0xB0,0x74,0x05,0xF0,
+ 0x80,0x06,0x90,0x44,0xB0,0x74,0x01,0xF0,
+ 0x90,0x44,0xB3,0xE0,0x04,0xF0,0x22,0x90,
+ 0x44,0xB0,0xE0,0xB4,0x03,0x25,0x74,0x04,
+ 0xF0,0x90,0x41,0xD8,0x74,0x01,0xF0,0x12,
+ 0xA0,0x6D,0xE4,0x90,0x44,0xB3,0xF0,0x22,
+ 0x90,0x44,0xAE,0xE0,0x70,0x02,0xA3,0xE0,
+ 0x70,0x09,0x90,0x44,0xB0,0xE0,0xB4,0x06,
+ 0x02,0xE4,0xF0,0x22,0xC2,0xAF,0x90,0x41,
+ 0xDB,0xE0,0x64,0x32,0x70,0x5E,0x90,0xF9,
+ 0x04,0xE0,0x64,0x02,0x70,0x56,0x90,0x41,
+ 0xED,0xE0,0x70,0x50,0x90,0x41,0xD9,0xE0,
+ 0x70,0x11,0xD3,0xE5,0x20,0x94,0x50,0xE5,
+ 0x1F,0x94,0x06,0x40,0x13,0x90,0x44,0xA9,
+ 0xE0,0x70,0x0D,0x7F,0x88,0x12,0x89,0x23,
+ 0x90,0x44,0xA9,0x74,0x01,0xF0,0x80,0x2C,
+ 0xC3,0xE5,0x20,0x94,0x50,0xE5,0x1F,0x94,
+ 0x04,0x50,0x08,0x90,0x44,0xA9,0xE0,0x64,
+ 0x01,0x60,0x0F,0x90,0xF9,0x99,0xE0,0x20,
+ 0xE0,0x12,0x90,0xF7,0x31,0xE0,0x64,0x01,
+ 0x60,0x0A,0x7F,0x87,0x12,0x89,0x23,0xE4,
+ 0x90,0x44,0xA9,0xF0,0xD2,0xAF,0x22,0x90,
+ 0xFB,0x2A,0x74,0x71,0xF0,0x74,0xFF,0xFF,
+ 0xFE,0x12,0x47,0x76,0x74,0xFF,0xFF,0xFE,
+ 0x12,0x47,0x76,0x90,0xFB,0x97,0xE4,0xF0,
+ 0x7F,0x18,0x12,0x89,0x23,0x90,0xFB,0x08,
+ 0xE0,0xFE,0x90,0xFB,0x07,0xE0,0x7C,0x00,
+ 0x24,0x00,0xFF,0xEC,0x3E,0x90,0x44,0xB5,
+ 0xF0,0xA3,0xEF,0xF0,0x90,0xFB,0x97,0x74,
+ 0x08,0xF0,0x7F,0x18,0x12,0x89,0x23,0x90,
+ 0xFB,0x2A,0x74,0x75,0xF0,0x22,0x90,0xFB,
+ 0x08,0xE0,0xFE,0x90,0xFB,0x07,0xE0,0x7C,
+ 0x00,0x24,0x00,0xFF,0xEC,0x3E,0xFE,0x90,
+ 0x44,0xB5,0xE0,0xFC,0xA3,0xE0,0xFD,0xC3,
+ 0xEF,0x9D,0xFF,0xEE,0x9C,0x90,0x44,0x92,
+ 0xF0,0xA3,0xEF,0xF0,0x7F,0x19,0x12,0x89,
+ 0x23,0x90,0xFB,0x9F,0xE0,0x90,0x44,0xB4,
+ 0xF0,0xE0,0xFF,0x54,0x07,0xFD,0x44,0x08,
+ 0xFD,0xEF,0xD3,0x94,0x0F,0x40,0x08,0x90,
+ 0x44,0x94,0x74,0x02,0xF0,0x80,0x1C,0x90,
+ 0x44,0xB4,0xE0,0xFF,0xC3,0x94,0x10,0x50,
+ 0x0D,0xEF,0x94,0x07,0x40,0x08,0x90,0x44,
+ 0x94,0x74,0x01,0xF0,0x80,0x05,0xE4,0x90,
+ 0x44,0x94,0xF0,0x7C,0x02,0x90,0x41,0xD9,
+ 0xE0,0x64,0x01,0x70,0x35,0x90,0x44,0x92,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0xC3,0x94,0x40,
+ 0xEE,0x64,0x80,0x94,0x81,0x50,0x0D,0x90,
+ 0x44,0xB4,0xE0,0x64,0x10,0x60,0x4E,0x1D,
+ 0xE4,0xFC,0x80,0x49,0xD3,0xEF,0x94,0x50,
+ 0xEE,0x64,0x80,0x94,0x81,0x40,0x3E,0x90,
+ 0x44,0x94,0xE0,0x60,0x38,0x0D,0x7C,0x01,
+ 0x80,0x33,0x90,0x44,0x92,0xE0,0xFE,0xA3,
+ 0xE0,0xFF,0xC3,0x94,0x49,0xEE,0x64,0x80,
+ 0x94,0x81,0x50,0x0D,0x90,0x44,0xB4,0xE0,
+ 0x64,0x10,0x60,0x19,0x1D,0xE4,0xFC,0x80,
+ 0x14,0xD3,0xEF,0x94,0x92,0xEE,0x64,0x80,
+ 0x94,0x81,0x40,0x09,0x90,0x44,0x94,0xE0,
+ 0x60,0x03,0x0D,0x7C,0x01,0xEC,0x64,0x01,
+ 0x70,0x36,0xED,0xD3,0x94,0x0F,0x40,0x0C,
+ 0x90,0x44,0x94,0xE0,0xB4,0x01,0x05,0xE4,
+ 0xA3,0xF0,0x80,0x6E,0xED,0xD3,0x94,0x0F,
+ 0x40,0x0D,0x90,0x44,0x94,0xE0,0xB4,0x02,
+ 0x06,0xA3,0x74,0x08,0xF0,0x80,0x5B,0x90,
+ 0x44,0x94,0xE0,0xFF,0x33,0x33,0x33,0x54,
+ 0xF8,0x2D,0x24,0xF8,0xA3,0xF0,0x80,0x4A,
+ 0xEC,0x70,0x38,0xED,0xC3,0x94,0x08,0x50,
+ 0x0D,0x90,0x44,0x94,0xE0,0x70,0x07,0xED,
+ 0x24,0x08,0xA3,0xF0,0x80,0x34,0xED,0xC3,
+ 0x94,0x08,0x50,0x0E,0x90,0x44,0x94,0xE0,
+ 0xB4,0x01,0x07,0xED,0x24,0x10,0xA3,0xF0,
+ 0x80,0x20,0x90,0x44,0x94,0xE0,0xFF,0x33,
+ 0x33,0x33,0x54,0xF8,0x2D,0x24,0xF8,0xA3,
+ 0xF0,0x80,0x0F,0x90,0x44,0x94,0xE0,0xFF,
+ 0x33,0x33,0x33,0x54,0xF8,0x2D,0x24,0xF8,
+ 0xA3,0xF0,0xEC,0x64,0x02,0x60,0x0D,0x90,
+ 0x44,0x95,0xE0,0x90,0xFB,0x97,0xF0,0x7F,
+ 0x89,0x12,0x89,0x23,0x22,0x90,0xF0,0x02,
+ 0xE0,0xF5,0x12,0xA3,0xE0,0xF5,0x11,0xE0,
+ 0x60,0x04,0x7F,0xFF,0x80,0x05,0x90,0xF0,
+ 0x02,0xE0,0xFF,0x90,0x42,0x44,0xEF,0xF0,
+ 0x90,0xF0,0x63,0xE0,0x90,0x44,0x9E,0xF0,
+ 0x90,0xF0,0x62,0xE0,0x90,0x44,0x9F,0xF0,
+ 0x90,0x44,0xA3,0xE0,0xFB,0x7A,0x00,0x90,
+ 0x44,0x9F,0xE0,0x2B,0xFE,0x90,0x44,0x9E,
+ 0xE0,0x3A,0x90,0x44,0xA5,0xF0,0xA3,0xCE,
+ 0xF0,0xC3,0x90,0x44,0x9F,0xE0,0x9B,0xFE,
+ 0x90,0x44,0x9E,0xE0,0x9A,0x90,0x44,0xA7,
+ 0xF0,0xA3,0xCE,0xF0,0x90,0x44,0xA6,0xE0,
+ 0x25,0xE0,0xFF,0x90,0x44,0xA5,0xE0,0x33,
+ 0xFE,0xD3,0xE5,0x12,0x9F,0xE5,0x11,0x9E,
+ 0x40,0x05,0x75,0x13,0xFC,0x80,0x44,0xC3,
+ 0x90,0x44,0xA6,0xE0,0x95,0x12,0x90,0x44,
+ 0xA5,0xE0,0x95,0x11,0x50,0x05,0x75,0x13,
+ 0xFF,0x80,0x30,0x90,0x44,0xA7,0xE0,0xC3,
+ 0x13,0xFE,0xA3,0xE0,0x13,0xFF,0xC3,0xE5,
+ 0x12,0x9F,0xE5,0x11,0x9E,0x50,0x05,0x75,
+ 0x13,0x04,0x80,0x17,0xD3,0x90,0x44,0xA8,
+ 0xE0,0x95,0x12,0x90,0x44,0xA7,0xE0,0x95,
+ 0x11,0x40,0x05,0x75,0x13,0x01,0x80,0x03,
+ 0xE4,0xF5,0x13,0x90,0xF0,0x01,0x74,0x01,
+ 0xF0,0x22,0x90,0xF0,0x2B,0xE0,0x70,0x0E,
+ 0x90,0x43,0x3E,0xF0,0x90,0xFD,0x74,0xF0,
+ 0x90,0xF1,0xE9,0x04,0xF0,0x22,0x90,0xF1,
+ 0xE9,0xE4,0xF0,0x90,0xFD,0x74,0x04,0xF0,
+ 0x22,0xE5,0x0F,0xB4,0x02,0x05,0xE4,0x90,
+ 0x44,0xA1,0xF0,0x90,0x41,0xF5,0xE0,0x70,
+ 0x0A,0xF5,0x21,0xF5,0x22,0xF5,0x24,0xF5,
+ 0x25,0xF5,0x23,0x90,0x42,0x58,0xE0,0x60,
+ 0x05,0xE4,0xF5,0x2A,0xF5,0x2B,0x22,0xE5,
+ 0x22,0xD3,0x94,0x00,0x40,0x23,0x90,0x42,
+ 0x44,0xE0,0xFE,0xE5,0x23,0xD3,0x9E,0x40,
+ 0x06,0xE5,0x23,0x9E,0xFF,0x80,0x08,0x90,
+ 0x42,0x44,0xE0,0xC3,0x95,0x23,0xFF,0xEF,
+ 0x25,0x25,0xF5,0x25,0xE4,0x35,0x24,0xF5,
+ 0x24,0x90,0x42,0x44,0xE0,0xF5,0x23,0x22,
+ 0x90,0x42,0x05,0xE0,0xFD,0x90,0x42,0x06,
+ 0xE0,0x8D,0xF0,0xA4,0xFF,0xD3,0xE5,0x25,
+ 0x9F,0xE5,0x24,0x95,0xF0,0x40,0x08,0x90,
+ 0xF0,0x2B,0x74,0x01,0xF0,0x80,0x17,0x90,
+ 0x42,0x07,0xE0,0x8D,0xF0,0xA4,0xFF,0xC3,
+ 0xE5,0x25,0x9F,0xE5,0x24,0x95,0xF0,0x50,
+ 0x05,0x90,0xF0,0x2B,0xE4,0xF0,0x90,0xF0,
+ 0x2B,0xE0,0x60,0x0D,0x90,0x44,0xA3,0x74,
+ 0x15,0xF0,0x90,0xF7,0x0B,0x74,0x0B,0xF0,
+ 0x22,0x90,0x42,0x2D,0xE0,0x90,0x44,0xA3,
+ 0xF0,0x90,0xF7,0x0B,0x74,0x2B,0xF0,0x22,
+ 0xE5,0x0F,0xD3,0x94,0x02,0x40,0x37,0xE5,
+ 0x21,0xB4,0x01,0x03,0x12,0xA5,0x62,0xE5,
+ 0x21,0x70,0x21,0x90,0x42,0x05,0xE0,0xFF,
+ 0xE5,0x22,0xC3,0x9F,0x50,0x0A,0x12,0xA5,
+ 0x88,0x12,0xA6,0x50,0x05,0x22,0x80,0x0C,
+ 0x75,0x21,0x01,0x12,0xA6,0xB6,0x12,0xA5,
+ 0xB9,0x12,0xA5,0x43,0x90,0x41,0xDB,0xE0,
+ 0xB4,0x2E,0x03,0x12,0xA3,0x17,0x22,0x90,
+ 0xF1,0x61,0xE0,0xFE,0x90,0xF1,0x60,0xE0,
+ 0x7C,0x00,0x24,0x00,0xFF,0xEC,0x3E,0x90,
+ 0x44,0xB8,0xF0,0xA3,0xEF,0xF0,0x90,0x42,
+ 0x58,0xE0,0x60,0x48,0xE4,0xF5,0x26,0xF5,
+ 0x27,0x90,0xF2,0x10,0xE0,0xF5,0x28,0x90,
+ 0xF2,0x0F,0xE0,0xF5,0x29,0x90,0x42,0x44,
+ 0xE0,0xFF,0xE4,0xFC,0xFD,0xFE,0xAB,0x29,
+ 0xAA,0x28,0xA9,0x27,0xA8,0x26,0x12,0xA9,
+ 0xD1,0x8F,0x29,0x8E,0x28,0x8D,0x27,0x8C,
+ 0x26,0xAF,0x29,0xAE,0x28,0xAD,0x27,0xAC,
+ 0x26,0x90,0xF2,0x11,0xE0,0xF9,0xF8,0x12,
+ 0xAA,0x55,0xEF,0x25,0x2B,0xF5,0x2B,0xEE,
+ 0x35,0x2A,0xF5,0x2A,0x22,0x90,0x42,0x58,
+ 0xE0,0x60,0x6E,0x90,0x44,0xA1,0xE0,0xFF,
+ 0xD3,0x94,0x01,0x50,0x07,0xEF,0x60,0x61,
+ 0x74,0x02,0xF0,0x22,0x85,0x2A,0x1F,0x85,
+ 0x2B,0x20,0xD3,0xE5,0x2B,0x94,0x50,0xE5,
+ 0x2A,0x94,0x07,0x40,0x08,0x90,0x41,0xD9,
+ 0x74,0x01,0xF0,0x80,0x3E,0xC3,0xE5,0x2B,
+ 0x94,0x50,0xE5,0x2A,0x94,0x05,0x50,0x33,
+ 0x90,0x41,0xDB,0xE0,0xB4,0x27,0x27,0xD3,
+ 0x90,0x44,0xAF,0xE0,0x94,0x1E,0x90,0x44,
+ 0xAE,0xE0,0x94,0x00,0x40,0x18,0x90,0x42,
+ 0x08,0xE0,0x94,0x7D,0x40,0x10,0x90,0x41,
+ 0xE0,0xE0,0x64,0x01,0x60,0x08,0x90,0x41,
+ 0xD9,0x74,0x01,0xF0,0x80,0x05,0xE4,0x90,
+ 0x41,0xD9,0xF0,0x90,0x44,0xA1,0x74,0x03,
+ 0xF0,0x22,0x90,0x41,0xE2,0x74,0x01,0xF0,
+ 0x22,0x7B,0x01,0x7A,0x43,0x79,0x49,0x7D,
+ 0x01,0x7C,0x00,0x12,0xAD,0x13,0x22,0xC2,
+ 0xAF,0x12,0x90,0x3D,0xD2,0xAF,0x22,0x90,
+ 0x41,0xE3,0xE0,0x60,0x0C,0x90,0x44,0xBD,
+ 0xE0,0x60,0x06,0x7F,0x1A,0x12,0x89,0x23,
+ 0x22,0xE4,0xFD,0xFF,0x12,0x49,0x27,0x90,
+ 0xFE,0x01,0xE0,0xFE,0xA3,0xE0,0xF4,0xFF,
+ 0xEE,0xF4,0xA3,0xF0,0xA3,0xEF,0xF0,0x22,
+ 0x90,0x44,0x46,0xE0,0x75,0xF0,0x05,0xA4,
+ 0xFF,0xAE,0xF0,0x90,0x44,0x45,0xE0,0x2F,
+ 0xF0,0x90,0x44,0x44,0xE0,0x3E,0xF0,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0x90,0x44,0x6C,0xE0,
+ 0xFC,0xA3,0xE0,0xFD,0x12,0xA9,0x46,0x90,
+ 0x44,0x44,0xEC,0xF0,0xA3,0xED,0xF0,0x90,
+ 0x44,0x44,0xE0,0xFE,0xA3,0xE0,0x78,0x05,
+ 0xCE,0xC3,0x13,0xCE,0x13,0xD8,0xF9,0xFF,
+ 0x90,0xF9,0x00,0xE0,0x70,0x08,0xEF,0x25,
+ 0xE0,0x25,0xE0,0xFF,0x80,0x0B,0x90,0xF9,
+ 0x00,0xE0,0xB4,0x02,0x04,0xEF,0x25,0xE0,
+ 0xFF,0x90,0x41,0xD9,0xE0,0x60,0x27,0xEF,
+ 0xC3,0x94,0x16,0x40,0x16,0xEF,0xD3,0x94,
+ 0x57,0x40,0x05,0xEF,0x94,0x6D,0x40,0x0B,
+ 0xEF,0xD3,0x94,0x7D,0x40,0x10,0xEF,0x94,
+ 0x8F,0x50,0x0B,0x90,0x44,0xBA,0xE0,0x04,
+ 0xF0,0xA3,0x74,0x01,0xF0,0x22,0xE4,0x90,
+ 0x44,0xBB,0xF0,0x12,0x98,0xB8,0x22,0x90,
+ 0xFD,0x33,0xE4,0xF0,0x04,0xF0,0x90,0xFD,
+ 0x36,0xE0,0xB4,0x01,0xF9,0x12,0x96,0xBB,
+ 0x22,0x7D,0xFE,0x7C,0x27,0xE4,0xFF,0x12,
+ 0x47,0xAD,0x90,0xF1,0x1A,0xE0,0x70,0xFA,
+ 0x22,0x90,0x44,0x97,0xE0,0x70,0x17,0x90,
+ 0xF9,0x99,0xE0,0x70,0x11,0x90,0xF9,0x00,
+ 0xE0,0x70,0x04,0x7F,0x01,0x80,0x02,0x7F,
+ 0x00,0x90,0xF9,0x00,0xEF,0xF0,0x90,0x44,
+ 0xAA,0xE0,0x04,0xF0,0xE4,0xF5,0x2D,0x90,
+ 0x43,0xFC,0xF0,0xF5,0x2E,0x90,0x42,0x37,
+ 0xF0,0x90,0xF7,0x0B,0x74,0x2F,0xF0,0x90,
+ 0x44,0xBF,0x74,0x01,0xF0,0xE4,0xA3,0xF0,
+ 0x90,0x42,0x38,0xE0,0x90,0x44,0xBE,0xF0,
+ 0xE4,0x90,0x41,0xD9,0xF0,0x90,0x41,0xDB,
+ 0xE0,0xB4,0x32,0x0C,0x90,0x44,0xA9,0xE0,
+ 0xB4,0x01,0x05,0x7F,0x87,0x12,0x89,0x23,
+ 0xE4,0x90,0x44,0xA9,0xF0,0x90,0x44,0xC1,
+ 0xF0,0x22,0xE4,0x90,0x44,0xAA,0xF0,0x90,
+ 0x41,0xDC,0xF0,0x90,0x44,0x9C,0xF0,0x22,
+ 0x90,0xF7,0x81,0x74,0x40,0xF0,0x90,0xFD,
+ 0xA4,0x74,0x0A,0xF0,0x22,0x90,0xF5,0xB0,
+ 0xE4,0xF0,0xE5,0x0F,0xB4,0x09,0x02,0x05,
+ 0x2D,0x90,0x41,0xE6,0xE0,0xFF,0xE5,0x2D,
+ 0x8F,0xF0,0x84,0x85,0xF0,0x2D,0x75,0x0F,
+ 0x08,0xE5,0x2D,0x60,0x0A,0x90,0xF5,0x4E,
+ 0xE0,0x60,0x04,0xA3,0xE0,0x70,0x06,0x75,
+ 0x0F,0x01,0x12,0x68,0xE0,0x90,0xF2,0x17,
+ 0x74,0xFE,0xF0,0x90,0x44,0xBF,0x74,0x01,
+ 0xF0,0xE4,0xA3,0xF0,0x22,0xE5,0x2D,0x70,
+ 0x06,0x12,0x6A,0xF0,0x12,0x6B,0x53,0x22,
+ 0x90,0x43,0x42,0x74,0x01,0xF0,0x22,0x90,
+ 0xF9,0x0B,0xE4,0xF0,0x90,0xF5,0xD7,0x04,
+ 0xF0,0x90,0xF5,0xD7,0xE0,0x70,0xFA,0x22,
+ 0x12,0x86,0x81,0x05,0x2E,0x22,0xE4,0xF5,
+ 0x2E,0x90,0x44,0x9C,0xF0,0x22,
+
+ 0x02,0xA9,0x1B,0x06,0xDE,0x04,0x50,0xBB,
+ 0x01,0x06,0x89,0x82,0x8A,0x83,0xE0,0x22,
+ 0x50,0x02,0xE7,0x22,0xBB,0xFE,0x02,0xE3,
+ 0x22,0x89,0x82,0x8A,0x83,0xE4,0x93,0x22,
+ 0xEF,0x8D,0xF0,0xA4,0xA8,0xF0,0xCF,0x8C,
+ 0xF0,0xA4,0x28,0xCE,0x8D,0xF0,0xA4,0x2E,
+ 0xFE,0x22,0xBC,0x00,0x0B,0xBE,0x00,0x29,
+ 0xEF,0x8D,0xF0,0x84,0xFF,0xAD,0xF0,0x22,
+ 0xE4,0xCC,0xF8,0x75,0xF0,0x08,0xEF,0x2F,
+ 0xFF,0xEE,0x33,0xFE,0xEC,0x33,0xFC,0xEE,
+ 0x9D,0xEC,0x98,0x40,0x05,0xFC,0xEE,0x9D,
+ 0xFE,0x0F,0xD5,0xF0,0xE9,0xE4,0xCE,0xFD,
+ 0x22,0xED,0xF8,0xF5,0xF0,0xEE,0x84,0x20,
+ 0xD2,0x1C,0xFE,0xAD,0xF0,0x75,0xF0,0x08,
+ 0xEF,0x2F,0xFF,0xED,0x33,0xFD,0x40,0x07,
+ 0x98,0x50,0x06,0xD5,0xF0,0xF2,0x22,0xC3,
+ 0x98,0xFD,0x0F,0xD5,0xF0,0xEA,0x22,0xC2,
+ 0xD5,0xEC,0x30,0xE7,0x09,0xB2,0xD5,0xE4,
+ 0xC3,0x9D,0xFD,0xE4,0x9C,0xFC,0xEE,0x30,
+ 0xE7,0x15,0xB2,0xD5,0xE4,0xC3,0x9F,0xFF,
+ 0xE4,0x9E,0xFE,0x12,0xA9,0x46,0xC3,0xE4,
+ 0x9D,0xFD,0xE4,0x9C,0xFC,0x80,0x03,0x12,
+ 0xA9,0x46,0x30,0xD5,0x07,0xC3,0xE4,0x9F,
+ 0xFF,0xE4,0x9E,0xFE,0x22,0xE8,0x8F,0xF0,
+ 0xA4,0xCC,0x8B,0xF0,0xA4,0x2C,0xFC,0xE9,
+ 0x8E,0xF0,0xA4,0x2C,0xFC,0x8A,0xF0,0xED,
+ 0xA4,0x2C,0xFC,0xEA,0x8E,0xF0,0xA4,0xCD,
+ 0xA8,0xF0,0x8B,0xF0,0xA4,0x2D,0xCC,0x38,
+ 0x25,0xF0,0xFD,0xE9,0x8F,0xF0,0xA4,0x2C,
+ 0xCD,0x35,0xF0,0xFC,0xEB,0x8E,0xF0,0xA4,
+ 0xFE,0xA9,0xF0,0xEB,0x8F,0xF0,0xA4,0xCF,
+ 0xC5,0xF0,0x2E,0xCD,0x39,0xFE,0xE4,0x3C,
+ 0xFC,0xEA,0xA4,0x2D,0xCE,0x35,0xF0,0xFD,
+ 0xE4,0x3C,0xFC,0x22,0xC3,0xE4,0x9F,0xFF,
+ 0xE4,0x9E,0xFE,0xE4,0x9D,0xFD,0xE4,0x9C,
+ 0xFC,0x22,0xEB,0x9F,0xF5,0xF0,0xEA,0x9E,
+ 0x42,0xF0,0xE9,0x9D,0x42,0xF0,0xEC,0x64,
+ 0x80,0xC8,0x64,0x80,0x98,0x45,0xF0,0x22,
+ 0xEB,0x9F,0xF5,0xF0,0xEA,0x9E,0x42,0xF0,
+ 0xE9,0x9D,0x42,0xF0,0xE8,0x9C,0x45,0xF0,
+ 0x22,0xE8,0x60,0x0F,0xEC,0xC3,0x13,0xFC,
+ 0xED,0x13,0xFD,0xEE,0x13,0xFE,0xEF,0x13,
+ 0xFF,0xD8,0xF1,0x22,0xE8,0x60,0x10,0xEC,
+ 0xA2,0xE7,0x13,0xFC,0xED,0x13,0xFD,0xEE,
+ 0x13,0xFE,0xEF,0x13,0xFF,0xD8,0xF0,0x22,
+ 0xE8,0x60,0x0F,0xEF,0xC3,0x33,0xFF,0xEE,
+ 0x33,0xFE,0xED,0x33,0xFD,0xEC,0x33,0xFC,
+ 0xD8,0xF1,0x22,0xEC,0xF0,0xA3,0xED,0xF0,
+ 0xA3,0xEE,0xF0,0xA3,0xEF,0xF0,0x22,0xA8,
+ 0x82,0x85,0x83,0xF0,0xD0,0x83,0xD0,0x82,
+ 0x12,0xAA,0xB2,0x12,0xAA,0xB2,0x12,0xAA,
+ 0xB2,0x12,0xAA,0xB2,0xE4,0x73,0xE4,0x93,
+ 0xA3,0xC5,0x83,0xC5,0xF0,0xC5,0x83,0xC8,
+ 0xC5,0x82,0xC8,0xF0,0xA3,0xC5,0x83,0xC5,
+ 0xF0,0xC5,0x83,0xC8,0xC5,0x82,0xC8,0x22,
+ 0x8A,0x83,0x89,0x82,0xE4,0x73,0xBB,0x01,
+ 0x0C,0xE5,0x82,0x29,0xF5,0x82,0xE5,0x83,
+ 0x3A,0xF5,0x83,0xE0,0x22,0x50,0x06,0xE9,
+ 0x25,0x82,0xF8,0xE6,0x22,0xBB,0xFE,0x06,
+ 0xE9,0x25,0x82,0xF8,0xE2,0x22,0xE5,0x82,
+ 0x29,0xF5,0x82,0xE5,0x83,0x3A,0xF5,0x83,
+ 0xE4,0x93,0x22,0xF8,0xBB,0x01,0x0D,0xE5,
+ 0x82,0x29,0xF5,0x82,0xE5,0x83,0x3A,0xF5,
+ 0x83,0xE8,0xF0,0x22,0x50,0x06,0xE9,0x25,
+ 0x82,0xC8,0xF6,0x22,0xBB,0xFE,0x05,0xE9,
+ 0x25,0x82,0xC8,0xF2,0x22,0xBB,0x01,0x0A,
+ 0x89,0x82,0x8A,0x83,0xE0,0xF5,0xF0,0xA3,
+ 0xE0,0x22,0x50,0x06,0x87,0xF0,0x09,0xE7,
+ 0x19,0x22,0xBB,0xFE,0x07,0xE3,0xF5,0xF0,
+ 0x09,0xE3,0x19,0x22,0x89,0x82,0x8A,0x83,
+ 0xE4,0x93,0xF5,0xF0,0x74,0x01,0x93,0x22,
+ 0xBB,0x01,0x10,0xE5,0x82,0x29,0xF5,0x82,
+ 0xE5,0x83,0x3A,0xF5,0x83,0xE0,0xF5,0xF0,
+ 0xA3,0xE0,0x22,0x50,0x09,0xE9,0x25,0x82,
+ 0xF8,0x86,0xF0,0x08,0xE6,0x22,0xBB,0xFE,
+ 0x0A,0xE9,0x25,0x82,0xF8,0xE2,0xF5,0xF0,
+ 0x08,0xE2,0x22,0xE5,0x83,0x2A,0xF5,0x83,
+ 0xE9,0x93,0xF5,0xF0,0xA3,0xE9,0x93,0x22,
+ 0xBB,0x01,0x0A,0x89,0x82,0x8A,0x83,0xF0,
+ 0xE5,0xF0,0xA3,0xF0,0x22,0x50,0x06,0xF7,
+ 0x09,0xA7,0xF0,0x19,0x22,0xBB,0xFE,0x06,
+ 0xF3,0xE5,0xF0,0x09,0xF3,0x19,0x22,0xF8,
+ 0xBB,0x01,0x11,0xE5,0x82,0x29,0xF5,0x82,
+ 0xE5,0x83,0x3A,0xF5,0x83,0xE8,0xF0,0xE5,
+ 0xF0,0xA3,0xF0,0x22,0x50,0x09,0xE9,0x25,
+ 0x82,0xC8,0xF6,0x08,0xA6,0xF0,0x22,0xBB,
+ 0xFE,0x09,0xE9,0x25,0x82,0xC8,0xF2,0xE5,
+ 0xF0,0x08,0xF2,0x22,0x75,0xF0,0x08,0x75,
+ 0x82,0x00,0xEF,0x2F,0xFF,0xEE,0x33,0xFE,
+ 0xCD,0x33,0xCD,0xCC,0x33,0xCC,0xC5,0x82,
+ 0x33,0xC5,0x82,0x9B,0xED,0x9A,0xEC,0x99,
+ 0xE5,0x82,0x98,0x40,0x0C,0xF5,0x82,0xEE,
+ 0x9B,0xFE,0xED,0x9A,0xFD,0xEC,0x99,0xFC,
+ 0x0F,0xD5,0xF0,0xD6,0xE4,0xCE,0xFB,0xE4,
+ 0xCD,0xFA,0xE4,0xCC,0xF9,0xA8,0x82,0x22,
+ 0xB8,0x00,0xC1,0xB9,0x00,0x59,0xBA,0x00,
+ 0x2D,0xEC,0x8B,0xF0,0x84,0xCF,0xCE,0xCD,
+ 0xFC,0xE5,0xF0,0xCB,0xF9,0x78,0x18,0xEF,
+ 0x2F,0xFF,0xEE,0x33,0xFE,0xED,0x33,0xFD,
+ 0xEC,0x33,0xFC,0xEB,0x33,0xFB,0x10,0xD7,
+ 0x03,0x99,0x40,0x04,0xEB,0x99,0xFB,0x0F,
+ 0xD8,0xE5,0xE4,0xF9,0xFA,0x22,0x78,0x18,
+ 0xEF,0x2F,0xFF,0xEE,0x33,0xFE,0xED,0x33,
+ 0xFD,0xEC,0x33,0xFC,0xC9,0x33,0xC9,0x10,
+ 0xD7,0x05,0x9B,0xE9,0x9A,0x40,0x07,0xEC,
+ 0x9B,0xFC,0xE9,0x9A,0xF9,0x0F,0xD8,0xE0,
+ 0xE4,0xC9,0xFA,0xE4,0xCC,0xFB,0x22,0x75,
+ 0xF0,0x10,0xEF,0x2F,0xFF,0xEE,0x33,0xFE,
+ 0xED,0x33,0xFD,0xCC,0x33,0xCC,0xC8,0x33,
+ 0xC8,0x10,0xD7,0x07,0x9B,0xEC,0x9A,0xE8,
+ 0x99,0x40,0x0A,0xED,0x9B,0xFD,0xEC,0x9A,
+ 0xFC,0xE8,0x99,0xF8,0x0F,0xD5,0xF0,0xDA,
+ 0xE4,0xCD,0xFB,0xE4,0xCC,0xFA,0xE4,0xC8,
+ 0xF9,0x22,0xC2,0xD5,0xE8,0x30,0xE7,0x0F,
+ 0xB2,0xD5,0xE4,0xC3,0x9B,0xFB,0xE4,0x9A,
+ 0xFA,0xE4,0x99,0xF9,0xE4,0x98,0xF8,0xEC,
+ 0x30,0xE7,0x17,0xB2,0xD5,0x12,0xAC,0xD4,
+ 0x12,0xAC,0x0C,0xE4,0xC3,0x9B,0xFB,0xE4,
+ 0x9A,0xFA,0xE4,0x99,0xF9,0xE4,0x98,0xF8,
+ 0x80,0x03,0x12,0xAC,0x0C,0x30,0xD5,0x0D,
+ 0xE4,0xC3,0x9F,0xFF,0xE4,0x9E,0xFE,0xE4,
+ 0x9D,0xFD,0xE4,0x9C,0xFC,0x22,0xD0,0xE0,
+ 0xF5,0xF0,0xFC,0xD0,0xE0,0xFD,0x12,0xAB,
+ 0x84,0x85,0x2F,0xF0,0xE5,0x81,0x90,0x00,
+ 0x02,0x12,0xAB,0xA3,0x85,0x32,0xF0,0xE5,
+ 0x31,0x90,0x00,0x04,0x12,0xAB,0xA3,0xE5,
+ 0x30,0x90,0x00,0x06,0x12,0xAA,0xFF,0x8D,
+ 0x82,0x8C,0x83,0xE4,0xFE,0xFF,0x73,0xED,
+ 0xFF,0xEC,0xFE,0x12,0xAB,0x21,0xFC,0xAD,
+ 0xF0,0x90,0x00,0x02,0x12,0xAB,0x4C,0x85,
+ 0xF0,0x81,0xF5,0x2F,0x90,0x00,0x04,0x12,
+ 0xAB,0x4C,0xF5,0x32,0x85,0xF0,0x31,0x90,
+ 0x00,0x06,0x12,0xAA,0xD2,0xF5,0x30,0x8D,
+ 0x82,0x8C,0x83,0xE4,0x73,0x4C,0x81,0x4C,
+ 0xBA,0x4C,0xBD,0x4C,0xBE,0x4C,0xBF,0x88,
+ 0x8F,0x4C,0xC0,0x4C,0xC1,0x4C,0xC2,0x4C,
+ 0xC3,0x4D,0x48,0x89,0x41,0x4E,0x73,0x01,
+ 0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
+ 0x09,0x00,0x01,0x02,0x03,0x04,0x05,0x05,
+ 0x03,0x08,0x01,0x00,0x01,0x01,0x02,0x03,
+ 0x03,0x01,0x01,0x01,0x01,0x3E,0x80,0x06,
+ 0x40,0x7D,0x00,0x12,0xC0,0x12,0xC0,0xFA,
+ 0x00,0x12,0xC0,0xBB,0x80,0x9C,0x40,0x00,
+ 0xA0,0x00,0x00,0x01,0x02,0x02,0x02,0x02,
+ 0x02,0x01,0x01,0x90,0x43,0xD5,0xE0,0xB4,
+ 0x01,0x0A,0x90,0x43,0xD8,0xE0,0x70,0x04,
+ 0x90,0x43,0x42,0xF0,0x90,0x44,0xC0,0xE0,
+ 0xFF,0x60,0x0F,0x90,0x41,0xF3,0xE0,0xFE,
+ 0xEF,0x6E,0x60,0x06,0x90,0x44,0xBF,0xE0,
+ 0xE4,0xF0,0x90,0x43,0xDA,0xE0,0x90,0x44,
+ 0xC0,0xF0,0x22,0x90,0x41,0xBD,0xE0,0x90,
+ 0xF1,0xE0,0xF0,0x90,0x41,0xBC,0xE0,0x90,
+ 0xF1,0xDF,0xF0,0x90,0x41,0xBB,0xE0,0x90,
+ 0xF1,0xDE,0xF0,0x90,0x41,0xBA,0xE0,0x90,
+ 0xF1,0xDD,0xF0,0x90,0xF1,0xDB,0x74,0x01,
+ 0xF0,0x90,0xF1,0xDC,0xE0,0x60,0xFA,0x90,
+ 0xF1,0xE4,0xE0,0x90,0xF9,0x13,0xF0,0x90,
+ 0xF1,0xE3,0xE0,0x90,0xF9,0x12,0xF0,0x90,
+ 0xF1,0xE2,0xE0,0x90,0xF9,0x11,0xF0,0x90,
+ 0xF1,0xE1,0xE0,0x90,0xF9,0x10,0xF0,0x90,
+ 0xF1,0xDB,0xE4,0xF0,0x22,0x90,0xF5,0xBB,
+ 0xE4,0xF0,0x90,0xF5,0xB1,0xF0,0x90,0xF5,
+ 0xC8,0xF0,0xE5,0x2D,0x60,0x36,0x12,0xAD,
+ 0xC7,0x90,0xF9,0x0B,0x74,0x01,0xF0,0x90,
+ 0xF5,0xBB,0xE4,0xF0,0x90,0xF5,0xB1,0xF0,
+ 0x90,0xF5,0xC8,0xF0,0x90,0xF5,0x1D,0xE0,
+ 0x60,0xFA,0x7F,0x01,0x12,0x5C,0x30,0x90,
+ 0xF5,0xC2,0x74,0x01,0xF0,0xE4,0xF0,0x7F,
+ 0x02,0x12,0x6D,0xE8,0x12,0xA8,0xF8,0x7F,
+ 0x02,0x12,0x6D,0xE8,0x22,0x12,0x95,0x1B,
+ 0x90,0xF5,0x4E,0xE0,0x70,0x04,0xA3,0xE0,
+ 0x60,0x0F,0x90,0xF5,0xBB,0xE0,0x70,0x09,
+ 0x12,0x6A,0xF0,0x90,0xF5,0xC8,0x74,0x01,
+ 0xF0,0xE5,0x2E,0xD3,0x94,0x01,0x40,0x13,
+ 0x90,0xF7,0x31,0xE0,0x60,0x05,0x7F,0x01,
+ 0x12,0x9C,0x29,0x90,0x42,0x38,0xE0,0x90,
+ 0x44,0xBE,0xF0,0x75,0x2E,0x01,0x90,0xF7,
+ 0x31,0xE0,0x60,0x28,0x90,0xF7,0x3B,0xE0,
+ 0x64,0x02,0x60,0x20,0xE0,0x64,0x03,0x60,
+ 0x1B,0xE0,0x64,0x04,0x60,0x16,0xC2,0xAF,
+ 0x90,0xF7,0x34,0x74,0x01,0xF0,0x7F,0x00,
+ 0x7E,0x28,0x12,0x47,0x76,0x90,0xF7,0x34,
+ 0xE4,0xF0,0xD2,0xAF,0x12,0xA0,0x7B,0x12,
+ 0xA2,0x65,0x22,0xC2,0xAF,0x90,0xF7,0x3D,
+ 0x74,0x01,0xF0,0x7F,0x00,0x7E,0x28,0x12,
+ 0x47,0x76,0xD2,0xAF,0x22,0x90,0x41,0xDA,
+ 0xE0,0xB4,0x01,0x1E,0x90,0xFB,0x28,0x74,
+ 0x42,0xF0,0x90,0xF0,0x80,0x74,0x01,0xF0,
+ 0x90,0x41,0xC0,0xE0,0xFF,0x25,0xE0,0x90,
+ 0xF1,0xA5,0xF0,0x90,0xF1,0xEA,0xE4,0xF0,
+ 0x04,0xF0,0x12,0x57,0xC2,0x90,0x41,0xDA,
+ 0xE0,0xB4,0x01,0x1A,0x90,0x41,0xC0,0xE0,
+ 0x90,0xF1,0xA5,0xF0,0x90,0xF1,0xEA,0xE4,
+ 0xF0,0x04,0xF0,0x90,0xFB,0x28,0x74,0x82,
+ 0xF0,0x90,0xF0,0x80,0xE4,0xF0,0x22,0x90,
+ 0xF6,0x2F,0x74,0x01,0xF0,0x75,0xF0,0x02,
+ 0xE5,0x0F,0xA4,0x24,0x79,0xF5,0x82,0xE5,
+ 0xF0,0x34,0xAD,0xF5,0x83,0xE4,0x93,0xFC,
+ 0x74,0x01,0x93,0xFD,0xE4,0xFF,0x12,0x47,
+ 0xAD,0x90,0xF6,0x2F,0xE0,0x64,0x01,0x60,
+ 0x04,0x7F,0x01,0x80,0x02,0x7F,0x00,0x90,
+ 0xF1,0x1A,0xE0,0x5F,0x70,0xEB,0x90,0xF6,
+ 0x2F,0xE0,0xB4,0x01,0x04,0x7F,0x01,0x80,
+ 0x02,0x7F,0x00,0x90,0x43,0x3D,0xEF,0xF0,
+ 0xE0,0x70,0x0A,0x90,0x42,0x40,0x04,0xF0,
+ 0x90,0xF6,0x25,0xE4,0xF0,0xD2,0xAF,0x22,
+ 0x90,0xF5,0x41,0xE4,0xF0,0x90,0xF6,0x5D,
+ 0xF0,0x90,0xF6,0x5C,0xF0,0x7F,0x55,0x7E,
+ 0x0D,0x12,0x47,0x76,0x90,0xF5,0x41,0x74,
+ 0x01,0xF0,0x22,0x90,0x43,0xAE,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x90,0x44,0xC2,0xEE,0xF0,
+ 0xA3,0xEF,0xF0,0x90,0x43,0xAA,0xE0,0xFC,
+ 0xA3,0xE0,0xFD,0xA3,0xE0,0xFA,0xA3,0xE0,
+ 0xC3,0x9D,0xFD,0xEA,0x9C,0xA3,0xF0,0xA3,
+ 0xED,0xF0,0x90,0x43,0xAE,0xE0,0xFC,0xA3,
+ 0xE0,0xB5,0x07,0x0A,0xEC,0xB5,0x06,0x06,
+ 0x90,0x44,0xC1,0xE0,0x04,0xF0,0x90,0x43,
+ 0xB1,0xE0,0x60,0x04,0xA3,0xE0,0x70,0x09,
+ 0x90,0x44,0xC1,0xE0,0xC3,0x94,0x02,0x40,
+ 0x04,0x7F,0x01,0x80,0x02,0x7F,0x00,0x90,
+ 0x43,0xB0,0xEF,0xF0,0x22,
+
+ 0x01,0x41,0x00,0x00,0x03,0xFB,0xBE,0x02,
+ 0x48,0x00,
+
+ 0x01,0x48,0x00,0x3B,0x1D,0xE1,0x7C,0x75,
+ 0x81,0x16,0x02,0x48,0x41,0x02,0x59,0x93,
+ 0xE4,0x93,0xA3,0xF8,0xE4,0x93,0xA3,0x40,
+ 0x03,0xF6,0x80,0x01,0xF2,0x08,0xDF,0xF4,
+ 0x80,0x29,0xE4,0x93,0xA3,0xF8,0x54,0x07,
+ 0x24,0x0C,0xC8,0xC3,0x33,0xC4,0x54,0x0F,
+ 0x44,0x20,0xC8,0x83,0x40,0x04,0xF4,0x56,
+ 0x80,0x01,0x46,0xF6,0xDF,0xE4,0x80,0x0B,
+ 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
+ 0x90,0x79,0xF2,0xE4,0x7E,0x01,0x93,0x60,
+ 0xBC,0xA3,0xFF,0x54,0x3F,0x30,0xE5,0x09,
+ 0x54,0x1F,0xFE,0xE4,0x93,0xA3,0x60,0x01,
+ 0x0E,0xCF,0x54,0xC0,0x25,0xE0,0x60,0xA8,
+ 0x40,0xB8,0xE4,0x93,0xA3,0xFA,0xE4,0x93,
+ 0xA3,0xF8,0xE4,0x93,0xA3,0xC8,0xC5,0x82,
+ 0xC8,0xCA,0xC5,0x83,0xCA,0xF0,0xA3,0xC8,
+ 0xC5,0x82,0xC8,0xCA,0xC5,0x83,0xCA,0xDF,
+ 0xE9,0xDE,0xE7,0x80,0xBE,0xAA,0x86,0x53,
+ 0x86,0xFE,0x8E,0x85,0x8F,0x84,0x8C,0x83,
+ 0x8D,0x82,0x0B,0x80,0x0A,0xE0,0xA3,0x63,
+ 0x86,0x01,0xF0,0xA3,0x63,0x86,0x01,0xDB,
+ 0xF4,0x8A,0x86,0x22,0xC2,0xAF,0x90,0x41,
+ 0x03,0x74,0x02,0xF0,0xA3,0x74,0x49,0xF0,
+ 0xA3,0x74,0x61,0xF0,0x90,0x41,0x0B,0x74,
+ 0x02,0xF0,0xA3,0x74,0x49,0xF0,0xA3,0x74,
+ 0x69,0xF0,0x90,0x41,0x13,0x74,0x02,0xF0,
+ 0xA3,0x74,0x49,0xF0,0xA3,0x74,0x71,0xF0,
+ 0x90,0x41,0x1B,0x74,0x02,0xF0,0xA3,0x74,
+ 0x49,0xF0,0xA3,0x74,0x79,0xF0,0x90,0x41,
+ 0x23,0x74,0x02,0xF0,0xA3,0x74,0x49,0xF0,
+ 0xA3,0x74,0x81,0xF0,0x90,0x41,0x2B,0x74,
+ 0x02,0xF0,0xA3,0x74,0x49,0xF0,0xA3,0x74,
+ 0x89,0xF0,0x90,0x41,0x33,0x74,0x02,0xF0,
+ 0xA3,0x74,0x49,0xF0,0xA3,0x74,0x91,0xF0,
+ 0x90,0x41,0x3B,0x74,0x02,0xF0,0xA3,0x74,
+ 0x49,0xF0,0xA3,0x74,0x99,0xF0,0x90,0x41,
+ 0x43,0x74,0x02,0xF0,0xA3,0x74,0x49,0xF0,
+ 0xA3,0x74,0xA1,0xF0,0x90,0x41,0x4B,0x74,
+ 0x02,0xF0,0xA3,0x74,0x49,0xF0,0xA3,0x74,
+ 0xA9,0xF0,0x90,0x41,0x53,0x74,0x02,0xF0,
+ 0xA3,0x74,0x49,0xF0,0xA3,0x74,0xB1,0xF0,
+ 0x90,0x41,0x5B,0x74,0x02,0xF0,0xA3,0x74,
+ 0x49,0xF0,0xA3,0x74,0xB9,0xF0,0x90,0x41,
+ 0x63,0x74,0x02,0xF0,0xA3,0x74,0x49,0xF0,
+ 0xA3,0x74,0xC1,0xF0,0xD2,0xAF,0x22,0x22,
+ 0xC0,0xE0,0x75,0xE0,0x00,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x02,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x04,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x06,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x08,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x0A,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x0C,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x0E,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x10,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x12,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x14,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x16,0x02,0x49,0xC9,
+ 0xC0,0xE0,0x75,0xE0,0x18,0x02,0x49,0xC9,
+ 0xC0,0xD0,0x75,0xD0,0x00,0xC0,0x86,0x75,
+ 0x86,0x00,0xC0,0x83,0xC0,0x82,0xC0,0x85,
+ 0xC0,0x84,0xC0,0xF0,0xC0,0x00,0xC0,0x01,
+ 0xC0,0x02,0xC0,0x03,0xC0,0x04,0xC0,0x05,
+ 0xC0,0x06,0xC0,0x07,0x90,0x81,0xBF,0xF9,
+ 0x93,0xFA,0xE9,0x04,0x93,0xF9,0x12,0x80,
+ 0xD7,0xD0,0x07,0xD0,0x06,0xD0,0x05,0xD0,
+ 0x04,0xD0,0x03,0xD0,0x02,0xD0,0x01,0xD0,
+ 0x00,0xD0,0xF0,0xD0,0x84,0xD0,0x85,0xD0,
+ 0x82,0xD0,0x83,0xD0,0x86,0xD0,0xD0,0xD0,
+ 0xE0,0x32,0xC0,0x07,0x85,0x06,0x07,0x12,
+ 0x4A,0x37,0xD0,0xE0,0xC0,0xE0,0xC4,0x54,
+ 0x0F,0xFF,0x12,0x4A,0x57,0xD0,0xE0,0x54,
+ 0x0F,0xFF,0x12,0x4A,0x68,0x22,0xEF,0x70,
+ 0x02,0x80,0x0B,0x80,0x00,0xC0,0x07,0x12,
+ 0x4A,0x48,0xD0,0x07,0xDF,0xF7,0x22,0x7F,
+ 0x0C,0x12,0x4A,0x57,0x7F,0x04,0x90,0x4A,
+ 0x48,0xE0,0xDF,0xFD,0xE0,0x22,0xEF,0x70,
+ 0x02,0x80,0x0B,0x80,0x00,0x90,0x4A,0x5E,
+ 0xE0,0xE0,0xE0,0x04,0xDF,0xF7,0x22,0x90,
+ 0x4A,0x70,0xEF,0xF4,0x54,0x0F,0x73,0x04,
+ 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,
+ 0x04,0x04,0x04,0x04,0x04,0x04,0x22,0x43,
+ 0x8E,0x08,0x53,0x89,0xF0,0x43,0x89,0x01,
+ 0x22,0xAD,0x07,0xAC,0x06,0xC2,0x8C,0xC2,
+ 0x8D,0xEC,0xF4,0xF5,0x8C,0xED,0xF4,0xF5,
+ 0x8A,0xD2,0x8C,0x22,0x90,0x41,0x82,0x74,
+ 0xAF,0xF0,0xA3,0xEF,0xF0,0xA3,0x74,0x22,
+ 0xF0,0x7A,0x41,0x79,0x82,0x12,0x80,0xD7,
+ 0x22,0x90,0x41,0x82,0x74,0x8F,0xF0,0xA3,
+ 0xEF,0xF0,0xA3,0x74,0x22,0xF0,0xAF,0x05,
+ 0x7C,0x41,0x7D,0x82,0x90,0x41,0x82,0x12,
+ 0x80,0xDB,0x22,0x8F,0x82,0x8E,0x83,0xE4,
+ 0xFF,0xFE,0xED,0x4C,0x60,0x0F,0xED,0x60,
+ 0x01,0x0C,0xE0,0xA3,0x2F,0xFF,0xE4,0x3E,
+ 0xFE,0xDD,0xF7,0xDC,0xF5,0x22,0xE4,0x90,
+ 0x42,0x9A,0xF0,0x12,0x64,0x94,0x90,0x42,
+ 0xEB,0xEF,0xF0,0x60,0x25,0xE0,0xB4,0x05,
+ 0x03,0x7F,0x05,0x22,0x12,0x66,0x07,0x90,
+ 0x42,0xEB,0xEF,0xF0,0x60,0x14,0xE0,0xB4,
+ 0x05,0x03,0x7F,0x05,0x22,0x12,0x67,0x65,
+ 0x90,0x42,0xEB,0xEF,0xF0,0x60,0x03,0xE0,
+ 0xFF,0x22,0x7F,0x00,0x22,0x90,0x41,0x8C,
+ 0xE0,0xD3,0x94,0x00,0x40,0x06,0x90,0x42,
+ 0x99,0xEF,0xF0,0x22,0x90,0x41,0x8B,0xE0,
+ 0xFE,0xEF,0xC3,0x9E,0x50,0x06,0x90,0x42,
+ 0x99,0xEF,0xF0,0x22,0x90,0x42,0x99,0xEE,
+ 0xF0,0x22,0x90,0x42,0xEC,0xEB,0xF0,0xA3,
+ 0xEA,0xF0,0xA3,0xE9,0xF0,0xE4,0xFF,0x90,
+ 0x42,0x99,0xE0,0xD3,0x94,0x00,0x40,0x04,
+ 0x7E,0x01,0x80,0x02,0x7E,0x00,0xEF,0xC3,
+ 0x94,0x40,0x50,0x04,0x7D,0x01,0x80,0x02,
+ 0x7D,0x00,0xED,0x5E,0x60,0x33,0x90,0x42,
+ 0xEC,0xE0,0xFB,0xA3,0xE0,0xFA,0xA3,0xE0,
+ 0xF9,0x90,0x42,0x9A,0xE0,0xF5,0x82,0x75,
+ 0x83,0x00,0x12,0x80,0x30,0xFE,0x74,0x00,
+ 0x2F,0xF5,0x82,0xE4,0x34,0xDE,0xF5,0x83,
+ 0xEE,0xF0,0x0F,0x90,0x42,0x99,0xE0,0x14,
+ 0xF0,0x90,0x42,0x9A,0xE0,0x04,0xF0,0x80,
+ 0xAE,0x90,0xDD,0x85,0xEF,0xF0,0x22,0x90,
+ 0xDD,0x13,0xE0,0x44,0x01,0xF0,0x90,0xDD,
+ 0x1B,0x74,0x04,0xF0,0xE4,0xFF,0x74,0x00,
+ 0x2F,0xF5,0x82,0xE4,0x34,0xDF,0xF5,0x83,
+ 0xE0,0xFE,0x74,0x85,0x2F,0xF5,0x82,0xE4,
+ 0x34,0x41,0xF5,0x83,0xEE,0xF0,0x0F,0xEF,
+ 0xB4,0x08,0xE3,0x90,0xDD,0x1B,0xE0,0x20,
+ 0xE2,0xD4,0x22,0x90,0xDD,0x13,0x74,0x7B,
+ 0xF0,0x90,0xDD,0x80,0x74,0xC0,0xF0,0xA3,
+ 0x74,0x00,0xF0,0xA3,0x74,0x40,0xF0,0xA3,
+ 0x74,0x80,0xF0,0x12,0x6A,0x2D,0xE4,0x90,
+ 0x41,0x93,0xF0,0x90,0x41,0x94,0xF0,0x90,
+ 0xDD,0x14,0x74,0x0B,0xF0,0x90,0xDD,0x17,
+ 0x74,0x06,0xF0,0x90,0x43,0x28,0xE0,0xB4,
+ 0x01,0x07,0x90,0xDD,0x17,0xE0,0x44,0x01,
+ 0xF0,0x90,0xDD,0x15,0x74,0x0B,0xF0,0x90,
+ 0xDD,0x0C,0x74,0x80,0xF0,0x90,0xDD,0x8E,
+ 0xE4,0xF0,0xA3,0x74,0x03,0xF0,0x90,0xDD,
+ 0x0E,0xE4,0xF0,0xA3,0x04,0xF0,0x90,0xDD,
+ 0x13,0xE0,0x54,0x7F,0xF0,0x90,0xDD,0x20,
+ 0xE0,0x54,0xFC,0x44,0x03,0xF0,0x90,0xDD,
+ 0x11,0x74,0x8F,0xF0,0x90,0x43,0x0D,0xE0,
+ 0x64,0x01,0x70,0x27,0xC3,0x74,0x34,0x94,
+ 0xBA,0x90,0x41,0xB3,0xF0,0x90,0x42,0x9D,
+ 0xF0,0x90,0x41,0xB5,0x74,0x02,0xF0,0x90,
+ 0x42,0x9F,0xF0,0x90,0xDD,0x15,0xE0,0x44,
+ 0x10,0xF0,0x90,0xDD,0x11,0xE0,0x44,0x10,
+ 0xF0,0x80,0x17,0xC3,0x74,0x1B,0x94,0xBA,
+ 0x90,0x41,0xB3,0xF0,0x90,0x42,0x9D,0xF0,
+ 0x90,0x41,0xB5,0x74,0x01,0xF0,0x90,0x42,
+ 0x9F,0xF0,0x90,0x45,0x61,0xE0,0x60,0x03,
+ 0x12,0x50,0xE8,0x90,0xDD,0x0C,0x74,0x80,
+ 0xF0,0x90,0xDD,0x89,0x74,0x03,0xF0,0x90,
+ 0xDD,0x88,0x74,0xDB,0xF0,0x90,0xDD,0x13,
+ 0xE0,0x54,0xDF,0xF0,0x90,0xF4,0x1A,0xE0,
+ 0x54,0xFE,0x44,0x01,0xF0,0x22,0x90,0x42,
+ 0x11,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x42,
+ 0x0A,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x42,
+ 0x03,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x41,
+ 0xFC,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x41,
+ 0xE5,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x41,
+ 0xDE,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x41,
+ 0xD7,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x41,
+ 0xD0,0xEE,0xF0,0xA3,0xEF,0xF0,0x22,0x90,
+ 0x42,0x18,0xEE,0xF0,0xA3,0xEF,0xF0,0x22,
+ 0xE4,0x90,0x42,0xF2,0xF0,0x90,0x42,0xE9,
+ 0xE0,0x60,0x0D,0x90,0xDD,0xA8,0xE0,0x30,
+ 0xE0,0x06,0x12,0x4F,0xEB,0x02,0x4F,0x38,
+ 0x90,0xDF,0x82,0xE0,0x20,0xE1,0x06,0x12,
+ 0x4F,0x45,0x02,0x4F,0x38,0x90,0x42,0xE9,
+ 0xE0,0x70,0x09,0x90,0x42,0xF3,0xE0,0x04,
+ 0xF0,0x02,0x4F,0x38,0x90,0xDD,0xA8,0xE0,
+ 0x30,0xE0,0x06,0x12,0x4F,0xEB,0x02,0x4F,
+ 0x38,0x90,0xDD,0x1B,0xE0,0x30,0xE1,0x12,
+ 0x90,0xDD,0x1D,0x74,0xFF,0xF0,0x90,0xDD,
+ 0x1B,0x74,0x02,0xF0,0x12,0x4F,0x94,0x02,
+ 0x4F,0x38,0x90,0x43,0x28,0xE0,0x64,0x01,
+ 0x70,0x29,0x90,0xDD,0x1B,0xE0,0x30,0xE0,
+ 0x22,0x74,0x01,0xF0,0xE4,0x90,0x42,0xF1,
+ 0xF0,0x90,0xDD,0x1B,0xE0,0x30,0xE0,0x0D,
+ 0x74,0x01,0xF0,0x90,0x42,0xF1,0xE0,0x04,
+ 0xF0,0xE0,0xB4,0x02,0xEC,0x12,0x4F,0xB3,
+ 0x02,0x4F,0x38,0x90,0xDD,0x1B,0xE0,0x30,
+ 0xE2,0x28,0x90,0xDD,0x14,0xE0,0x44,0x01,
+ 0xF0,0x12,0x4B,0xA8,0x12,0x56,0x20,0x90,
+ 0x42,0xF0,0xEF,0xF0,0x70,0x03,0x02,0x4F,
+ 0x38,0x90,0xDD,0x14,0xE0,0x54,0xFE,0xF0,
+ 0x90,0xDD,0x12,0xE0,0x44,0x01,0xF0,0x02,
+ 0x4F,0x38,0x90,0xDD,0x19,0xE0,0x30,0xE0,
+ 0x42,0x90,0xDD,0x14,0xE0,0x44,0x01,0xF0,
+ 0x90,0xDD,0x19,0x74,0x01,0xF0,0x90,0xDD,
+ 0x13,0xE0,0x44,0x01,0xF0,0x90,0x42,0xE7,
+ 0xE0,0x64,0x01,0x60,0x03,0x02,0x4F,0x38,
+ 0x90,0xDD,0x00,0xC0,0x83,0xC0,0x82,0xE0,
+ 0xFF,0x90,0x41,0x8A,0xE0,0xFE,0x33,0x33,
+ 0x33,0x54,0xF8,0xFE,0xEF,0x4E,0xD0,0x82,
+ 0xD0,0x83,0xF0,0xE4,0x90,0x42,0xE7,0xF0,
+ 0x02,0x4F,0x38,0x90,0xDD,0x18,0xE0,0x30,
+ 0xE0,0x31,0x90,0xDD,0x14,0xE0,0x30,0xE0,
+ 0x2A,0x90,0xDD,0x14,0xE0,0x54,0xFE,0xF0,
+ 0x12,0x56,0x3B,0x90,0x42,0xF0,0xEF,0xF0,
+ 0x60,0x09,0x90,0xDD,0x12,0xE0,0x44,0x01,
+ 0xF0,0x80,0x07,0x90,0xDD,0x13,0xE0,0x54,
+ 0xFE,0xF0,0x90,0xDD,0x18,0x74,0x01,0xF0,
+ 0x02,0x4F,0x38,0x90,0xDD,0x19,0xE0,0x30,
+ 0xE1,0x10,0x90,0xDD,0x19,0x74,0x02,0xF0,
+ 0x90,0xDD,0x13,0xE0,0x44,0x02,0xF0,0x02,
+ 0x4F,0x38,0x90,0xDD,0x18,0xE0,0x30,0xE1,
+ 0x16,0x90,0xDD,0x84,0x74,0x40,0xF0,0x90,
+ 0xDD,0x13,0xE0,0x54,0xFD,0xF0,0x90,0xDD,
+ 0x18,0x74,0x02,0xF0,0x02,0x4F,0x38,0x90,
+ 0xDD,0x19,0xE0,0x30,0xE4,0x6A,0x90,0xDD,
+ 0x19,0x74,0x10,0xF0,0x90,0x45,0xA6,0xE0,
+ 0x64,0x01,0x60,0x03,0x02,0x4F,0x38,0x90,
+ 0x45,0xB9,0xE0,0xFF,0xB4,0x01,0x31,0xE4,
+ 0x90,0x42,0xF1,0xF0,0x90,0x42,0xF1,0xE0,
+ 0xFE,0xC3,0x94,0x08,0x50,0x14,0x74,0x80,
+ 0x2E,0xF5,0x82,0xE4,0x34,0xDE,0xF5,0x83,
+ 0xE4,0xF0,0x90,0x42,0xF1,0xE0,0x04,0xF0,
+ 0x80,0xE2,0x90,0xDD,0x87,0x74,0x08,0xF0,
+ 0x90,0x45,0xB9,0x74,0x02,0xF0,0x80,0x6F,
+ 0xEF,0x64,0x02,0x70,0x6A,0x90,0x45,0xB9,
+ 0xF0,0x90,0xDD,0x13,0xE0,0x44,0x10,0xF0,
+ 0x90,0x41,0x81,0xE0,0xFF,0x64,0x01,0x60,
+ 0x56,0x90,0x45,0xA6,0xEF,0xF0,0x80,0x4F,
+ 0x90,0xDD,0x19,0xE0,0x30,0xE3,0x18,0x90,
+ 0xDD,0x13,0xE0,0x44,0x08,0xF0,0x90,0xDD,
+ 0x19,0x74,0x08,0xF0,0x12,0x74,0xD3,0x90,
+ 0x42,0xE8,0x74,0x01,0xF0,0x80,0x30,0x90,
+ 0xDD,0x14,0xE0,0x54,0x08,0xFF,0x13,0x13,
+ 0x13,0x54,0x1F,0x60,0x1C,0x90,0xDD,0x18,
+ 0xE0,0x30,0xE3,0x15,0x90,0xDD,0x84,0x74,
+ 0x40,0xF0,0x90,0xDD,0x13,0xE0,0x54,0xF7,
+ 0xF0,0x90,0xDD,0x18,0x74,0x08,0xF0,0x80,
+ 0x06,0x90,0x42,0xF4,0xE0,0x04,0xF0,0xC2,
+ 0xDC,0x22,0x12,0x4D,0x09,0x22,0xC2,0xDB,
+ 0x12,0x4D,0x09,0x22,0x90,0x43,0x0D,0xE0,
+ 0x64,0x01,0x60,0x05,0xE0,0x64,0x05,0x70,
+ 0x41,0x90,0x43,0x29,0xE0,0x70,0x05,0x12,
+ 0x6E,0x5D,0x80,0x1B,0x90,0x43,0x29,0xE0,
+ 0xB4,0x01,0x05,0x12,0x6F,0xFC,0x80,0x0F,
+ 0x90,0x43,0x29,0xE0,0x64,0x02,0x60,0x04,
+ 0xE0,0xB4,0xFF,0x03,0x12,0x6B,0x19,0x90,
+ 0x45,0xA6,0xE0,0xB4,0x01,0x14,0x90,0x45,
+ 0xB9,0xE0,0xB4,0x01,0x0D,0x90,0xDD,0x13,
+ 0xE0,0x54,0xEF,0xF0,0x90,0xDD,0x87,0x74,
+ 0x08,0xF0,0x22,0x12,0x4B,0xDC,0x90,0xDD,
+ 0x01,0xE0,0x54,0x04,0x90,0x42,0xEF,0xF0,
+ 0x90,0x45,0x61,0xE0,0x60,0x03,0x12,0x50,
+ 0xE8,0x12,0x50,0xE7,0xE4,0x90,0x45,0xB9,
+ 0xF0,0x22,0x90,0xD8,0x06,0xE0,0x54,0xFE,
+ 0x44,0x01,0xF0,0x22,0x12,0x4B,0xDC,0x90,
+ 0x43,0x06,0xE0,0x30,0xE6,0x09,0x90,0xDD,
+ 0xA7,0xE0,0x44,0x01,0xF0,0x80,0x07,0x90,
+ 0xDD,0x00,0xE0,0x44,0x80,0xF0,0xD2,0xAF,
+ 0xD2,0xDD,0x22,0x90,0x43,0x07,0xE0,0x30,
+ 0xE0,0x07,0x90,0xDD,0xA8,0xE0,0x30,0xE2,
+ 0xF9,0x22,0x90,0xDD,0xA7,0xE0,0x30,0xE1,
+ 0x06,0xE0,0x54,0xFD,0xF0,0x80,0x07,0x90,
+ 0xDD,0xA7,0xE0,0x44,0x02,0xF0,0x90,0xDD,
+ 0xA8,0xE0,0x30,0xE1,0x08,0x90,0xDD,0x00,
+ 0xE0,0x44,0x80,0xF0,0x22,0x90,0xDD,0x00,
+ 0xE0,0x54,0x7F,0xF0,0x22,0xAE,0x07,0x90,
+ 0x42,0xEA,0xE0,0xFD,0xB4,0x01,0x03,0x7F,
+ 0x03,0x22,0xAF,0x06,0xE4,0x90,0x45,0x66,
+ 0xF0,0x7A,0x42,0x7B,0xF5,0xA3,0x74,0x42,
+ 0xF0,0xA3,0x74,0xF5,0xF0,0xA3,0x74,0x01,
+ 0xF0,0xA3,0xE4,0xF0,0x7B,0x01,0x12,0x54,
+ 0x23,0xEF,0x60,0x03,0x7F,0x04,0x22,0x7E,
+ 0x42,0x7F,0xF7,0x90,0x42,0xF7,0xE0,0xFD,
+ 0x7C,0x00,0x12,0x4A,0xCC,0x90,0x42,0xF5,
+ 0xE0,0x6E,0x70,0x03,0xA3,0xE0,0x6F,0x60,
+ 0x03,0x7F,0x05,0x22,0x7F,0x00,0x22,0x90,
+ 0x42,0xFD,0xE0,0xFF,0xA3,0xE0,0x90,0x41,
+ 0x9D,0xCF,0xF0,0xA3,0xEF,0xF0,0x90,0x42,
+ 0xFF,0xE0,0xFF,0xA3,0xE0,0x90,0x41,0x9F,
+ 0xCF,0xF0,0xA3,0xEF,0xF0,0x90,0x43,0x01,
+ 0xE0,0xFF,0xA3,0xE0,0x90,0x41,0xA1,0xCF,
+ 0xF0,0xA3,0xEF,0xF0,0x90,0x43,0x03,0xE0,
+ 0x90,0x41,0xA3,0xF0,0x90,0x43,0x04,0xE0,
+ 0x90,0x41,0xA4,0xF0,0x90,0x43,0x05,0xE0,
+ 0x90,0x41,0xA5,0xF0,0x90,0x43,0x0A,0xE0,
+ 0x90,0x42,0x33,0xF0,0x90,0x43,0x08,0xE0,
+ 0x90,0x41,0xB9,0xF0,0x90,0x43,0x06,0xE0,
+ 0xFF,0x90,0x42,0xA2,0xF0,0x90,0x41,0xB8,
+ 0xF0,0x90,0x43,0x09,0xE0,0x90,0x42,0xA3,
+ 0xF0,0x90,0x43,0x0B,0xE0,0x90,0xF1,0x03,
+ 0xF0,0x90,0x43,0x4B,0xE0,0xF4,0x60,0x05,
+ 0xE0,0x90,0xDD,0x93,0xF0,0x22,0x22,0x90,
+ 0x42,0xF9,0xE0,0x70,0x03,0x02,0x53,0x64,
+ 0x90,0x42,0xF9,0xE0,0x75,0xF0,0x08,0xA4,
+ 0x90,0x45,0x5A,0xF0,0xE0,0x24,0xF6,0xF5,
+ 0x82,0xE4,0x34,0x42,0xF5,0x83,0xE0,0x90,
+ 0x45,0x5D,0xF0,0x90,0x45,0x5D,0xE0,0x70,
+ 0x03,0x02,0x53,0x64,0x90,0x45,0x5A,0xE0,
+ 0xFE,0x24,0x02,0xA3,0xF0,0x74,0xF5,0x2E,
+ 0xF5,0x82,0xE4,0x34,0x42,0xF5,0x83,0xE0,
+ 0x90,0x45,0x5C,0xF0,0xE0,0x54,0xC0,0xFF,
+ 0x70,0x06,0x90,0x42,0xEF,0xE0,0x70,0x16,
+ 0xBF,0x40,0x06,0x90,0x42,0xEF,0xE0,0x60,
+ 0x0D,0x90,0x45,0x5C,0xE0,0x54,0xC0,0x64,
+ 0xC0,0x60,0x03,0x02,0x52,0xEC,0x90,0x45,
+ 0x5C,0xE0,0x54,0x03,0x14,0x60,0x54,0x14,
+ 0x70,0x03,0x02,0x52,0x01,0x14,0x70,0x03,
+ 0x02,0x52,0x7F,0x24,0x03,0x60,0x03,0x02,
+ 0x52,0xE9,0xE4,0x90,0x45,0x5E,0xF0,0x90,
+ 0x45,0x5D,0xE0,0xFF,0xA3,0xE0,0xC3,0x9F,
+ 0x40,0x03,0x02,0x52,0xEC,0x90,0x45,0x5B,
+ 0xE0,0xFE,0x24,0xF5,0xF5,0x82,0xE4,0x34,
+ 0x42,0xF5,0x83,0xE0,0xFF,0x74,0xF6,0x2E,
+ 0xF5,0x82,0xE4,0x34,0x42,0xF5,0x83,0xE0,
+ 0xFD,0x12,0x4A,0xB2,0x90,0x45,0x5B,0xE0,
+ 0x24,0x02,0xF0,0x90,0x45,0x5E,0xE0,0x04,
+ 0xF0,0x80,0xC4,0xE4,0x90,0x45,0x5E,0xF0,
+ 0x90,0x45,0x5D,0xE0,0xFF,0xA3,0xE0,0xC3,
+ 0x9F,0x40,0x03,0x02,0x52,0xEC,0x90,0x45,
+ 0x5B,0xE0,0xFF,0x24,0xF7,0xF5,0x82,0xE4,
+ 0x34,0x42,0xF5,0x83,0xE0,0xFD,0x74,0xF5,
+ 0x2F,0xF5,0x82,0xE4,0x34,0x42,0xF5,0x83,
+ 0xE0,0xFE,0x90,0x45,0x5B,0xE0,0x24,0xF6,
+ 0xF5,0x82,0xE4,0x34,0x42,0xF5,0x83,0xE0,
+ 0xFB,0xEE,0xEB,0xF5,0x82,0x8E,0x83,0xED,
+ 0xF0,0x90,0x45,0x5B,0xE0,0x24,0x03,0xF0,
+ 0x90,0x45,0x5E,0xE0,0x04,0xF0,0x80,0xB0,
+ 0x90,0x45,0x5B,0xE0,0xFD,0x24,0xF5,0xF5,
+ 0x82,0xE4,0x34,0x42,0xF5,0x83,0xE0,0xFE,
+ 0x74,0xF6,0x2D,0xF5,0x82,0xE4,0x34,0x42,
+ 0xF5,0x83,0xE0,0xFD,0xEE,0xED,0xFF,0x90,
+ 0x45,0x5F,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,
+ 0x45,0x5B,0xE0,0x24,0x02,0xF0,0xE4,0x90,
+ 0x45,0x5E,0xF0,0x90,0x45,0x5D,0xE0,0xFF,
+ 0xA3,0xE0,0xC3,0x9F,0x40,0x03,0x02,0x52,
+ 0xEC,0x90,0x45,0x5B,0xE0,0xFF,0x24,0xF6,
+ 0xF5,0x82,0xE4,0x34,0x42,0xF5,0x83,0xE0,
+ 0xFE,0x74,0xF5,0x2F,0xF5,0x82,0xE4,0x34,
+ 0x42,0xF5,0x83,0xE0,0xFD,0x90,0x45,0x60,
+ 0xE0,0x2D,0xFD,0x90,0x45,0x5F,0xE0,0x34,
+ 0x00,0x8D,0x82,0xF5,0x83,0xEE,0xF0,0x90,
+ 0x45,0x5B,0xE0,0x24,0x02,0xF0,0x90,0x45,
+ 0x5E,0xE0,0x04,0xF0,0x80,0xB5,0x90,0x45,
+ 0x5B,0xE0,0xFD,0x24,0xF5,0xF5,0x82,0xE4,
+ 0x34,0x42,0xF5,0x83,0xE0,0xFE,0x74,0xF6,
+ 0x2D,0xF5,0x82,0xE4,0x34,0x42,0xF5,0x83,
+ 0xE0,0xFD,0xEE,0xED,0xFF,0x90,0x45,0x5F,
+ 0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x45,0x5B,
+ 0xE0,0x24,0x02,0xF0,0xE4,0x90,0x45,0x5E,
+ 0xF0,0x90,0x45,0x5D,0xE0,0xFF,0xA3,0xE0,
+ 0xC3,0x9F,0x50,0x2F,0x90,0x45,0x5B,0xE0,
+ 0xFF,0x04,0xF0,0x74,0xF5,0x2F,0xF5,0x82,
+ 0xE4,0x34,0x42,0xF5,0x83,0xE0,0xFF,0x90,
+ 0x45,0x5F,0xE4,0x75,0xF0,0x01,0x12,0x80,
+ 0x85,0x85,0xF0,0x82,0xF5,0x83,0xEF,0xF0,
+ 0x90,0x45,0x5E,0xE0,0x04,0xF0,0x80,0xC9,
+ 0x12,0x7B,0x63,0x90,0x45,0x5A,0xE0,0x24,
+ 0x02,0xF0,0x90,0x45,0x5C,0xE0,0x54,0x03,
+ 0x14,0x60,0x19,0x14,0x60,0x27,0x14,0x60,
+ 0x38,0x24,0x03,0x70,0x46,0x90,0x45,0x5D,
+ 0xE0,0x25,0xE0,0xFF,0x90,0x45,0x5A,0xE0,
+ 0x2F,0xF0,0x80,0x3A,0x90,0x45,0x5D,0xE0,
+ 0x75,0xF0,0x03,0xA4,0xFF,0x90,0x45,0x5A,
+ 0xE0,0x2F,0xF0,0x80,0x29,0x90,0x45,0x5A,
+ 0xE0,0x24,0x02,0xFF,0x90,0x45,0x5D,0xE0,
+ 0x25,0xE0,0x2F,0x90,0x45,0x5A,0xF0,0x80,
+ 0x15,0x90,0x45,0x5A,0xE0,0x24,0x02,0xFF,
+ 0x90,0x45,0x5D,0xE0,0x2F,0x90,0x45,0x5A,
+ 0xF0,0x80,0x03,0x12,0x7B,0x63,0x90,0x45,
+ 0x5A,0xE0,0x24,0xF6,0xF5,0x82,0xE4,0x34,
+ 0x42,0xF5,0x83,0xE0,0x90,0x45,0x5D,0xF0,
+ 0x02,0x51,0x0C,0x22,0x90,0x42,0xE9,0xE0,
+ 0x60,0x08,0x90,0x45,0x62,0x74,0x01,0xF0,
+ 0x80,0x06,0x90,0x45,0x62,0x74,0x03,0xF0,
+ 0x12,0x4A,0x80,0x12,0x54,0x18,0x90,0xF1,
+ 0x03,0xE0,0x90,0x45,0x88,0xF0,0x90,0xF6,
+ 0xB5,0xE0,0x54,0xF7,0x44,0x08,0xF0,0xE0,
+ 0x54,0xF7,0xF0,0x90,0x45,0x88,0xE0,0x90,
+ 0xF1,0x03,0xF0,0x90,0x45,0x62,0xE0,0xFF,
+ 0x12,0x80,0x23,0x90,0x42,0xEA,0xEF,0xF0,
+ 0x90,0x42,0xE9,0xE0,0x60,0x03,0x12,0x6A,
+ 0x3A,0x90,0x45,0x62,0xE0,0xFF,0x12,0x50,
+ 0x16,0xEF,0x70,0x04,0x7F,0x01,0x80,0x02,
+ 0x7F,0x00,0x90,0x45,0x61,0xEF,0xF0,0x60,
+ 0x1C,0x90,0x43,0x4C,0xE0,0x60,0x16,0xE0,
+ 0x90,0xF6,0x32,0xF0,0x90,0x43,0x4C,0xE0,
+ 0x90,0xF6,0x33,0xF0,0x90,0xF6,0x31,0xE0,
+ 0x54,0xFE,0x44,0x01,0xF0,0x90,0x45,0x61,
+ 0xE0,0x60,0x07,0x12,0x50,0x68,0x12,0x50,
+ 0xE8,0x22,0x90,0x42,0xE9,0xE0,0x60,0x1E,
+ 0xE4,0x90,0x43,0x26,0xF0,0x90,0x43,0x28,
+ 0xF0,0x90,0x43,0x07,0xF0,0x90,0x43,0x0D,
+ 0x74,0x05,0xF0,0xE4,0x90,0x43,0x29,0xF0,
+ 0x90,0x43,0x06,0x74,0x80,0xF0,0x22,0x80,
+ 0x02,0x80,0xFE,0x90,0xF1,0x03,0x74,0x25,
+ 0xF0,0x22,0x90,0x45,0x63,0xEF,0xF0,0xA3,
+ 0xED,0xF0,0xA3,0xEB,0xF0,0xA3,0xE0,0xFE,
+ 0xFD,0x7C,0x00,0x90,0x45,0x69,0xE0,0xFA,
+ 0xA3,0xE0,0xFB,0x2D,0xFD,0xEC,0x3A,0xFC,
+ 0xD3,0xED,0x94,0x00,0xEC,0x94,0x01,0x40,
+ 0x03,0x7F,0x01,0x22,0xE4,0xB5,0x03,0x08,
+ 0xEA,0xB4,0x01,0x04,0x7F,0x08,0x80,0x0B,
+ 0xEE,0x54,0x07,0xFF,0xC3,0x74,0x08,0x9F,
+ 0x54,0x07,0xFF,0x90,0x45,0x6B,0xEF,0xF0,
+ 0xC3,0xEB,0x9F,0xEA,0x94,0x00,0x50,0x06,
+ 0x90,0x45,0x6A,0xE0,0xA3,0xF0,0x90,0x45,
+ 0x6A,0xE0,0xFF,0xA3,0xE0,0xFE,0xC3,0xEF,
+ 0x9E,0x54,0x07,0xFE,0x90,0x45,0x6D,0xF0,
+ 0x90,0x45,0x6B,0xE0,0xFD,0xC3,0xEF,0x9D,
+ 0xC3,0x9E,0xA3,0xF0,0x90,0x45,0x6B,0xE0,
+ 0x90,0x45,0x6E,0xF0,0xA3,0x74,0x08,0xF0,
+ 0x90,0x45,0x6D,0xE0,0x90,0x45,0x70,0xF0,
+ 0xE4,0xA3,0xF0,0x90,0x45,0x71,0xE0,0xFB,
+ 0x24,0x6B,0xF5,0x82,0xE4,0x34,0x45,0xF5,
+ 0x83,0xE0,0x70,0x03,0x02,0x55,0xC9,0x90,
+ 0x45,0x66,0xE0,0x90,0xF0,0x01,0xF0,0x90,
+ 0x45,0x65,0xE0,0x70,0x4E,0x7E,0xF0,0x7F,
+ 0x02,0x90,0x45,0x67,0xE0,0xFC,0xA3,0xE0,
+ 0xFD,0x74,0x6E,0x2B,0xF5,0x82,0xE4,0x34,
+ 0x45,0xF5,0x83,0xE0,0xFB,0x12,0x48,0x86,
+ 0x90,0x45,0x63,0xE0,0xFF,0xA3,0xE0,0xFD,
+ 0x90,0x45,0x71,0xE0,0x24,0x6E,0xF5,0x82,
+ 0xE4,0x34,0x45,0xF5,0x83,0xE0,0x04,0xFB,
+ 0x90,0x46,0x04,0x74,0x01,0xF0,0x12,0x7E,
+ 0xD9,0xEF,0x60,0x03,0x7F,0x02,0x22,0x7F,
+ 0x35,0x7E,0x82,0x12,0x4A,0x8A,0x20,0x8D,
+ 0x60,0x80,0xFB,0x90,0x45,0x63,0xE0,0xFF,
+ 0xA3,0xE0,0xFD,0x90,0x46,0x04,0x74,0x01,
+ 0xF0,0xFB,0x12,0x7E,0xD9,0xEF,0x60,0x03,
+ 0x7F,0x02,0x22,0x90,0x45,0x63,0xE0,0xFF,
+ 0xA3,0xE0,0x44,0x01,0xFD,0x90,0x45,0x71,
+ 0xE0,0x24,0x6E,0xF5,0x82,0xE4,0x34,0x45,
+ 0xF5,0x83,0xE0,0xFB,0x90,0x46,0x04,0x74,
+ 0x01,0xF0,0x12,0x7E,0xD9,0xEF,0x60,0x03,
+ 0x7F,0x02,0x22,0x90,0x45,0x67,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x7C,0xF0,0x7D,0x00,0x90,
+ 0x45,0x71,0xE0,0x24,0x6E,0xF5,0x82,0xE4,
+ 0x34,0x45,0xF5,0x83,0xE0,0xFB,0x12,0x48,
+ 0x86,0x90,0x45,0x71,0xE0,0xFF,0x24,0x6E,
+ 0xF5,0x82,0xE4,0x34,0x45,0xF5,0x83,0xE0,
+ 0xFE,0x90,0x45,0x66,0xE0,0x2E,0xF0,0xEE,
+ 0xFD,0x90,0x45,0x68,0xE0,0x2D,0xF0,0x90,
+ 0x45,0x67,0xE0,0x34,0x00,0xF0,0x74,0x6B,
+ 0x2F,0xF5,0x82,0xE4,0x34,0x45,0xF5,0x83,
+ 0xC0,0x83,0xC0,0x82,0xE0,0xFF,0x90,0x45,
+ 0x71,0xE0,0x24,0x6E,0xF5,0x82,0xE4,0x34,
+ 0x45,0xF5,0x83,0xE0,0xFE,0xC3,0xEF,0x9E,
+ 0xD0,0x82,0xD0,0x83,0xF0,0x02,0x54,0xAC,
+ 0x90,0x45,0x71,0xE0,0x04,0xF0,0xE0,0xC3,
+ 0x94,0x03,0x50,0x03,0x02,0x54,0xAC,0x7F,
+ 0x00,0x22,0x90,0x45,0x72,0xEF,0xF0,0xE4,
+ 0x90,0x45,0x73,0xF0,0x90,0x45,0x73,0xE0,
+ 0xFE,0xC3,0x94,0x10,0x50,0x1F,0x90,0x45,
+ 0x72,0xE0,0xFF,0xEE,0x44,0xA0,0xFD,0x90,
+ 0x46,0x04,0x74,0x01,0xF0,0xFB,0x12,0x7E,
+ 0xD9,0xEF,0x60,0x09,0x90,0x45,0x73,0xE0,
+ 0x24,0x02,0xF0,0x80,0xD7,0x90,0x45,0x73,
+ 0xE0,0xFF,0xC3,0x94,0x10,0x50,0x05,0xEF,
+ 0x44,0xA0,0xFF,0x22,0x7F,0x01,0x22,0x12,
+ 0x68,0x70,0x90,0x42,0x98,0xEF,0xF0,0x90,
+ 0x42,0x98,0xE0,0x70,0x03,0x7F,0x06,0x22,
+ 0x12,0x4A,0xE7,0xEF,0x60,0x01,0x22,0x7F,
+ 0x00,0x22,0x12,0x67,0xB7,0xEF,0x60,0x01,
+ 0x22,0x7F,0x00,0x22,0x90,0x45,0x74,0xEF,
+ 0xF0,0xA3,0xED,0xF0,0xEB,0x70,0x61,0x90,
+ 0x45,0x77,0xE0,0xFF,0xB4,0x01,0x0A,0x90,
+ 0x45,0x79,0xE0,0x90,0xF0,0x01,0xF0,0x80,
+ 0x14,0xEF,0xB4,0x02,0x10,0x90,0x45,0x78,
+ 0xE0,0x90,0xF0,0x01,0xF0,0x90,0x45,0x79,
+ 0xE0,0x90,0xF0,0x02,0xF0,0x90,0x45,0x77,
+ 0xE0,0x24,0x01,0xF5,0x82,0xE4,0x34,0xF0,
+ 0xAF,0x82,0xFE,0x90,0x45,0x7A,0xE0,0xFC,
+ 0xA3,0xE0,0xFD,0x90,0x45,0x7D,0xE0,0xFB,
+ 0x12,0x48,0x86,0x90,0x45,0x74,0xE0,0xFF,
+ 0xA3,0xE0,0xFD,0x90,0x45,0x7D,0xE0,0xFE,
+ 0x90,0x45,0x77,0xE0,0x2E,0xFB,0x90,0x46,
+ 0x04,0x74,0x01,0xF0,0x12,0x7E,0xD9,0x22,
+ 0x90,0x45,0x77,0xE0,0x70,0x22,0x90,0x45,
+ 0x74,0xE0,0xFF,0xA3,0xE0,0x44,0x01,0xFD,
+ 0x90,0x45,0x7D,0xE0,0xFB,0x90,0x46,0x04,
+ 0x74,0x01,0xF0,0x12,0x7E,0xD9,0x90,0x45,
+ 0x7E,0xEF,0xF0,0x60,0x5F,0xE0,0xFF,0x22,
+ 0x7E,0xF0,0x7F,0x01,0x90,0x45,0x77,0xE0,
+ 0xFD,0xC3,0x74,0x7A,0x9D,0xF9,0x74,0x45,
+ 0x94,0x00,0xFC,0xAD,0x01,0xE0,0xFB,0x12,
+ 0x48,0x86,0x90,0x45,0x74,0xE0,0xFF,0xA3,
+ 0xE0,0xFD,0x90,0x45,0x77,0xE0,0xFB,0x90,
+ 0x46,0x04,0x74,0x01,0xF0,0x12,0x7E,0xD9,
+ 0x90,0x45,0x7E,0xEF,0xF0,0x60,0x03,0xE0,
+ 0xFF,0x22,0x90,0x45,0x74,0xE0,0xFF,0xA3,
+ 0xE0,0x44,0x01,0xFD,0x90,0x45,0x7D,0xE0,
+ 0xFB,0x90,0x46,0x04,0x74,0x01,0xF0,0x12,
+ 0x7E,0xD9,0x90,0x45,0x7E,0xEF,0xF0,0x60,
+ 0x03,0xE0,0xFF,0x22,0x90,0x45,0x7A,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0x7C,0xF0,0x7D,0x00,
+ 0x90,0x45,0x7D,0xE0,0xFB,0x12,0x48,0x86,
+ 0x7F,0x00,0x22,0x90,0x45,0x7F,0xEE,0xF0,
+ 0xA3,0xEF,0xF0,0xA3,0xEC,0xF0,0xA3,0xED,
+ 0xF0,0x90,0x45,0x77,0x74,0x01,0xF0,0x90,
+ 0x45,0x7F,0xE0,0xFF,0xA3,0xE0,0x90,0x45,
+ 0x78,0xCF,0xF0,0xA3,0xEF,0xF0,0x90,0x45,
+ 0x81,0xE0,0xFF,0xA3,0xE0,0x90,0x45,0x7A,
+ 0xCF,0xF0,0xA3,0xEF,0xF0,0xA3,0xE4,0xF0,
+ 0xA3,0x04,0xF0,0x7D,0xC0,0x7F,0x02,0x12,
+ 0x56,0x45,0x22,0x90,0x45,0x83,0xEF,0xF0,
+ 0xA3,0xED,0xF0,0xA3,0xEB,0xF0,0x90,0x45,
+ 0x89,0x74,0x9C,0xF0,0xA3,0x74,0x40,0xF0,
+ 0xE5,0x16,0x60,0x03,0xE4,0xF5,0x16,0xE5,
+ 0x16,0x60,0x67,0x05,0x16,0x85,0x16,0x16,
+ 0x05,0x16,0x85,0x16,0x16,0x05,0x16,0x85,
+ 0x16,0x16,0x05,0x16,0x85,0x16,0x16,0x05,
+ 0x16,0x85,0x16,0x16,0x05,0x16,0x85,0x16,
+ 0x16,0x05,0x16,0x85,0x16,0x16,0x05,0x16,
+ 0x85,0x16,0x16,0x05,0x16,0x85,0x16,0x16,
+ 0x05,0x16,0x85,0x16,0x16,0x05,0x16,0x85,
+ 0x16,0x16,0x05,0x16,0x85,0x16,0x16,0x05,
+ 0x16,0x85,0x16,0x16,0x05,0x16,0x85,0x16,
+ 0x16,0x05,0x16,0x85,0x16,0x16,0x05,0x16,
+ 0x85,0x16,0x16,0x05,0x16,0x85,0x16,0x16,
+ 0x05,0x16,0x85,0x16,0x16,0x05,0x16,0x85,
+ 0x16,0x16,0x05,0x16,0x85,0x16,0x16,0x85,
+ 0x16,0x16,0x90,0x45,0x84,0xE0,0x90,0xF0,
+ 0x00,0xF0,0x90,0x83,0xED,0xE0,0xB4,0x01,
+ 0x27,0x90,0x83,0xF3,0xE0,0xFF,0x90,0x83,
+ 0xF2,0xE0,0x2F,0xFF,0xE4,0x33,0xFE,0xC3,
+ 0xEF,0x94,0x05,0xEE,0x64,0x80,0x94,0x80,
+ 0x50,0x05,0x12,0x7D,0xA1,0x80,0x09,0x90,
+ 0x45,0x87,0x74,0x05,0xF0,0x02,0x59,0x64,
+ 0x05,0x16,0x05,0x16,0x05,0x16,0x05,0x16,
+ 0x90,0xF1,0x03,0xE0,0x90,0x45,0x88,0xF0,
+ 0x90,0xF6,0xB5,0xE0,0x54,0xF7,0x44,0x08,
+ 0xF0,0xE0,0x54,0xF7,0xF0,0x90,0x45,0x83,
+ 0xE0,0xFF,0xB4,0x01,0x09,0x90,0xF1,0x04,
+ 0xE0,0x54,0xF3,0xF0,0x80,0x18,0xEF,0xB4,
+ 0x02,0x0B,0x90,0xF1,0x04,0xE0,0x54,0xF3,
+ 0x44,0x08,0xF0,0x80,0x09,0x90,0xF1,0x04,
+ 0xE0,0x54,0xF3,0x44,0x04,0xF0,0x90,0x45,
+ 0x84,0xE0,0x54,0x01,0xFF,0x90,0xF1,0x00,
+ 0xE0,0x54,0xFE,0x4F,0xF0,0x90,0x45,0x85,
+ 0xE0,0x90,0xF1,0x01,0xF0,0x12,0x7E,0x84,
+ 0x90,0x45,0x86,0xE0,0x64,0x01,0x60,0x03,
+ 0x02,0x59,0x42,0x90,0xF1,0x02,0xE0,0x20,
+ 0xE2,0x16,0xE0,0x20,0xE1,0x12,0xE0,0x20,
+ 0xE3,0x0E,0x90,0x45,0x89,0x74,0xFF,0xF5,
+ 0xF0,0x12,0x80,0x6F,0x45,0xF0,0x70,0xE3,
+ 0x90,0x45,0x89,0xE0,0x70,0x02,0xA3,0xE0,
+ 0x70,0x25,0x05,0x16,0x85,0x16,0x16,0x05,
+ 0x16,0x85,0x16,0x16,0x85,0x16,0x16,0x85,
+ 0x16,0x16,0x90,0xF6,0xB5,0xE0,0x54,0xF7,
+ 0x44,0x08,0xF0,0xE0,0x54,0xF7,0xF0,0x90,
+ 0x45,0x87,0x74,0x04,0xF0,0x80,0x49,0x90,
+ 0xF1,0x02,0xE0,0x30,0xE2,0x08,0x90,0x45,
+ 0x87,0x74,0x02,0xF0,0x80,0x3A,0x90,0x45,
+ 0x84,0xE0,0x30,0xE0,0x16,0x90,0xF1,0x02,
+ 0xE0,0x30,0xE1,0x08,0x90,0x45,0x87,0x74,
+ 0x01,0xF0,0x80,0x24,0xE4,0x90,0x45,0x87,
+ 0xF0,0x80,0x1D,0x90,0xF1,0x02,0xE0,0x30,
+ 0xE3,0x08,0x90,0x45,0x87,0x74,0x01,0xF0,
+ 0x80,0x0E,0xE4,0x90,0x45,0x87,0xF0,0x80,
+ 0x07,0xE4,0x90,0x45,0x87,0xF0,0x80,0x1B,
+ 0x90,0x45,0x84,0xE0,0x30,0xE0,0x0B,0x90,
+ 0xF1,0x02,0xE0,0x54,0xF7,0x44,0x08,0xF0,
+ 0x80,0x09,0x90,0xF1,0x02,0xE0,0x54,0xFD,
+ 0x44,0x02,0xF0,0x90,0x45,0x88,0xE0,0x90,
+ 0xF1,0x03,0xF0,0x90,0x45,0x87,0xE0,0xFF,
+ 0x22,0x90,0xF6,0x13,0xE0,0x30,0xE0,0x03,
+ 0x7F,0x03,0x22,0x90,0xF6,0xB4,0xE0,0x30,
+ 0xE0,0x03,0x7F,0x00,0x22,0x90,0xF6,0x6F,
+ 0xE0,0x30,0xE0,0x03,0x7F,0x02,0x22,0x7F,
+ 0x01,0x22,0x90,0x41,0x7F,0xE0,0x90,0x45,
+ 0x8B,0xF0,0xE0,0x54,0xF9,0xFF,0xBF,0x38,
+ 0x04,0x7F,0x01,0x80,0x02,0x7F,0x00,0xEF,
+ 0x54,0x01,0xFF,0x90,0xD8,0x1A,0xE0,0x54,
+ 0xFE,0x4F,0xF0,0x05,0x16,0x85,0x16,0x16,
+ 0x05,0x16,0x85,0x16,0x16,0x05,0x16,0x85,
+ 0x16,0x16,0x05,0x16,0x85,0x16,0x16,0x05,
+ 0x16,0x85,0x16,0x16,0x90,0xD8,0x30,0xE0,
+ 0x54,0xFE,0x44,0x01,0xF0,0xA3,0xE0,0x54,
+ 0xFE,0xF0,0xA3,0xE0,0x54,0xFE,0xF0,0x90,
+ 0xD8,0x29,0xE0,0x54,0xFE,0xF0,0x90,0xF6,
+ 0xB3,0xE0,0x54,0xFE,0x44,0x01,0xF0,0x90,
+ 0xF6,0x32,0x74,0xFF,0xF0,0xA3,0xF0,0x90,
+ 0xF6,0x31,0xE0,0x54,0xFE,0x44,0x01,0xF0,
+ 0x90,0xF6,0x13,0xE0,0x54,0x01,0x90,0x42,
+ 0xE9,0xF0,0x12,0x7E,0x06,0x12,0x59,0x72,
+ 0x90,0x45,0x8D,0xEF,0xF0,0x90,0xF6,0xA0,
+ 0x74,0x04,0xF0,0x90,0x45,0x8D,0xE0,0x90,
+ 0xF6,0xA1,0xF0,0x90,0xF6,0xDE,0xE0,0x54,
+ 0xFE,0x44,0x01,0xF0,0x90,0xF6,0xDE,0xE0,
+ 0x20,0xE0,0xF9,0x90,0xDF,0x82,0xE0,0x44,
+ 0x20,0xF0,0x90,0xDD,0x17,0xE0,0x54,0xFE,
+ 0xF0,0xC2,0xDC,0xD2,0xBC,0x12,0x48,0xA5,
+ 0xD2,0xE9,0x12,0x53,0x65,0x12,0x6A,0x52,
+ 0x90,0xF4,0x18,0xE4,0xF0,0xA3,0xE0,0x54,
+ 0xF0,0x44,0x08,0xF0,0x90,0xF4,0x1E,0xE0,
+ 0x54,0xEF,0x44,0x10,0xF0,0xD2,0xB8,0xC2,
+ 0xBA,0xD2,0xAF,0xD2,0xA8,0xD2,0xAA,0x90,
+ 0xDF,0x82,0xE0,0x30,0xE0,0x1A,0xA2,0xDD,
+ 0xE4,0x33,0x90,0x43,0xF5,0xF0,0xC2,0xDD,
+ 0x90,0xDF,0x82,0x74,0x20,0xF0,0xE4,0xF0,
+ 0x90,0x43,0xF5,0xE0,0x24,0xFF,0x92,0xDD,
+ 0x90,0x41,0x81,0xE0,0xFF,0x90,0x45,0xA6,
+ 0xE0,0x6F,0x60,0x1C,0xA2,0xDD,0xE4,0x33,
+ 0x90,0x43,0xF5,0xF0,0xC2,0xDD,0xE4,0x90,
+ 0x45,0xB9,0xF0,0x90,0x45,0xA6,0xEF,0xF0,
+ 0x90,0x43,0xF5,0xE0,0x24,0xFF,0x92,0xDD,
+ 0x12,0x79,0xFA,0x90,0x45,0x8C,0xE0,0xB4,
+ 0x07,0x05,0x12,0x7A,0x92,0x80,0xA8,0x12,
+ 0x7A,0x92,0x80,0xA3,0x22,0x22,0x22,0x90,
+ 0x45,0x8E,0xEE,0xF0,0xA3,0xEF,0xF0,0xE4,
+ 0xA3,0xF0,0xA3,0xF0,0xFC,0xEC,0xC3,0x9D,
+ 0x50,0x43,0xEC,0x30,0xE0,0x1F,0x90,0x45,
+ 0x8E,0xE0,0xFE,0xA3,0xE0,0x2C,0xF5,0x82,
+ 0xE4,0x3E,0xF5,0x83,0xE0,0xFF,0x90,0x45,
+ 0x91,0xE0,0x2F,0xF0,0x90,0x45,0x90,0xE0,
+ 0x34,0x00,0xF0,0x80,0x1D,0x90,0x45,0x8E,
+ 0xE0,0xFE,0xA3,0xE0,0x2C,0xF5,0x82,0xE4,
+ 0x3E,0xF5,0x83,0xE0,0xFE,0x90,0x45,0x91,
+ 0xE0,0x24,0x00,0xF0,0x90,0x45,0x90,0xE0,
+ 0x3E,0xF0,0x0C,0x80,0xB8,0x90,0x45,0x90,
+ 0xE0,0xFE,0xA3,0xE0,0xF4,0xFF,0xEE,0xF4,
+ 0xFE,0x22,0x90,0xF7,0x00,0xE0,0x24,0xFE,
+ 0xFD,0x7F,0x01,0x7E,0xF7,0x12,0x5A,0xD0,
+ 0x90,0xF7,0x00,0xE0,0x24,0xFF,0xF5,0x82,
+ 0xE4,0x34,0xF6,0xF5,0x83,0xEE,0xF0,0xA3,
+ 0xEF,0xF0,0x22,0x8F,0x0A,0xE5,0x0A,0x24,
+ 0x04,0x90,0xF7,0x00,0xF0,0x90,0xF7,0x03,
+ 0xE0,0x90,0xF7,0x01,0xF0,0xA3,0xE4,0xF0,
+ 0xE5,0x0A,0x24,0x05,0x90,0xF4,0x12,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0xE0,0x54,0xFC,0xF0,
+ 0x75,0x08,0xF7,0x75,0x09,0x03,0xE5,0x0A,
+ 0x60,0x3C,0xB4,0x01,0x0E,0x8D,0x82,0x8C,
+ 0x83,0xE0,0x85,0x09,0x82,0x85,0x08,0x83,
+ 0xF0,0x80,0x2B,0x8D,0x82,0x8C,0x83,0xE0,
+ 0xFF,0xA3,0xE0,0x85,0x09,0x82,0x85,0x08,
+ 0x83,0xCF,0xF0,0xA3,0xEF,0xF0,0x74,0x02,
+ 0x2D,0xFD,0xE4,0x3C,0xFC,0x74,0x02,0x25,
+ 0x09,0xF5,0x09,0xE4,0x35,0x08,0xF5,0x08,
+ 0x15,0x0A,0x15,0x0A,0x80,0xC0,0x12,0x5B,
+ 0x33,0x22,0x90,0x45,0x92,0x74,0xFE,0xF0,
+ 0x90,0xF4,0x05,0xE0,0x20,0xE5,0x03,0x02,
+ 0x64,0x8E,0xE4,0xF5,0x0C,0x90,0xF6,0xB4,
+ 0xE0,0x30,0xE0,0x1D,0x90,0xF4,0x09,0xE0,
+ 0xF4,0x60,0x16,0x90,0xF7,0x00,0xE0,0x04,
+ 0xFF,0x90,0xF4,0x09,0xE0,0xC3,0x9F,0x50,
+ 0x08,0x90,0xF4,0x05,0xE0,0x44,0x20,0xF0,
+ 0x22,0x90,0xF6,0xB4,0xE0,0x30,0xE0,0x05,
+ 0x90,0xF4,0x09,0xE4,0xF0,0x90,0xF6,0xB4,
+ 0xE0,0x20,0xE0,0x44,0x90,0xF6,0x6F,0xE0,
+ 0x20,0xE0,0x3D,0x90,0xF6,0x04,0xE0,0x54,
+ 0xF0,0x60,0x35,0x90,0xF6,0x03,0xE0,0x04,
+ 0xF0,0x90,0xF4,0x05,0x74,0x20,0xF0,0x90,
+ 0x45,0xA5,0xE0,0x04,0xF0,0x70,0x06,0x90,
+ 0x45,0xA4,0xE0,0x04,0xF0,0x90,0xF6,0x04,
+ 0xE0,0x30,0xE1,0xF9,0x90,0xF6,0x04,0xE4,
+ 0xF0,0xE0,0x44,0x01,0xF0,0xE0,0x54,0xFE,
+ 0xF0,0x90,0xF6,0x03,0xE0,0x14,0xF0,0x22,
+ 0x90,0xF7,0x01,0xE0,0x54,0x70,0x60,0x04,
+ 0x12,0x7B,0x67,0x22,0x90,0xF7,0x03,0xE0,
+ 0x90,0x45,0x97,0xF0,0x90,0xF7,0x00,0xE0,
+ 0x64,0x03,0x70,0x2C,0xA3,0xE0,0x64,0x02,
+ 0x70,0x26,0x90,0xF7,0x00,0x04,0xF0,0x90,
+ 0xF7,0x02,0xE0,0xFE,0xA3,0xE0,0xF5,0x82,
+ 0x8E,0x83,0xE0,0x90,0xF7,0x01,0xF0,0x90,
+ 0xF4,0x12,0x74,0x02,0xF0,0xA3,0xE4,0xF0,
+ 0xA3,0xE0,0x54,0xFC,0xF0,0x02,0x63,0xEF,
+ 0x90,0xF7,0x00,0xE0,0xB4,0x04,0x1E,0xA3,
+ 0xE0,0xB4,0x03,0x19,0x90,0xF7,0x04,0xE0,
+ 0xFF,0x90,0xF7,0x02,0xE0,0xFC,0xA3,0xE0,
+ 0xF5,0x82,0x8C,0x83,0xEF,0xF0,0x90,0xF4,
+ 0x05,0x74,0x20,0xF0,0x22,0x90,0xF7,0x00,
+ 0xE0,0xB4,0x04,0x0D,0xA3,0xE0,0xB4,0x04,
+ 0x08,0x90,0x45,0x93,0x74,0x01,0xF0,0x80,
+ 0x12,0x90,0xF7,0x00,0xE0,0x64,0x05,0x70,
+ 0x75,0xA3,0xE0,0x64,0x05,0x70,0x6F,0x90,
+ 0x45,0x93,0xF0,0x90,0xF7,0x02,0xE0,0xFD,
+ 0x90,0x45,0x93,0xE0,0xFB,0x90,0xF7,0x03,
+ 0xE0,0x90,0x45,0x77,0xF0,0x90,0xF7,0x04,
+ 0xE0,0xFF,0xA3,0xE0,0x90,0x45,0x78,0xCF,
+ 0xF0,0xA3,0xEF,0xF0,0xEB,0x60,0x06,0x7E,
+ 0xF7,0x7F,0x01,0x80,0x04,0x7E,0xF7,0x7F,
+ 0x06,0x90,0x45,0x7A,0xEE,0xF0,0xA3,0xEF,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x04,0xF0,0x7F,
+ 0x02,0x12,0x56,0x45,0x90,0x45,0x95,0xEF,
+ 0xF0,0x90,0x45,0x93,0xE0,0x70,0x07,0x90,
+ 0xF4,0x05,0x74,0x20,0xF0,0x22,0x90,0xF7,
+ 0x00,0x74,0x01,0xF0,0x90,0x45,0x95,0xE0,
+ 0x70,0x03,0x02,0x5C,0x88,0x90,0xF7,0x01,
+ 0x74,0xFF,0xF0,0x02,0x5C,0x88,0x90,0x45,
+ 0x92,0x74,0xFF,0xF0,0x85,0x16,0x16,0x85,
+ 0x16,0x16,0x90,0xF7,0x00,0xE0,0xF5,0x0B,
+ 0x24,0xFE,0xFD,0x7F,0x01,0x7E,0xF7,0x12,
+ 0x5A,0xD0,0x74,0xFF,0x25,0x0B,0xF5,0x82,
+ 0xE4,0x34,0xF6,0xF5,0x83,0xE0,0xFC,0xA3,
+ 0xE0,0x6F,0x70,0x02,0xEC,0x6E,0x60,0x03,
+ 0x02,0x63,0xEC,0x90,0x45,0x9D,0x74,0x01,
+ 0xF0,0x90,0xF7,0x01,0xE0,0xFE,0xA3,0xE0,
+ 0xFF,0xEE,0x60,0x03,0x02,0x63,0xE6,0xEF,
+ 0x12,0x80,0xB1,0x60,0x4F,0x00,0x5D,0xD0,
+ 0x01,0x5E,0xF5,0x02,0x5E,0xEE,0x03,0x5F,
+ 0xA8,0x04,0x5F,0xA1,0x05,0x60,0x67,0x06,
+ 0x5E,0x77,0x18,0x5E,0x30,0x22,0x61,0xE5,
+ 0x23,0x63,0xDB,0x25,0x62,0xA5,0x29,0x62,
+ 0x1A,0x2A,0x62,0x31,0x2B,0x60,0x67,0x30,
+ 0x60,0xEA,0x32,0x00,0x00,0x63,0xE6,0x90,
+ 0xF6,0xB4,0xE0,0x54,0x08,0xF5,0x0C,0x60,
+ 0x04,0xE0,0x54,0xF7,0xF0,0x90,0xF7,0x04,
+ 0xE0,0xF5,0x0B,0x90,0xF7,0x08,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x80,0x00,0x12,0x7B,0x64,
+ 0xEF,0x70,0x2B,0xE5,0x0B,0x60,0x27,0x15,
+ 0x0B,0x74,0x0A,0x25,0x0B,0xF5,0x82,0xE4,
+ 0x34,0xF7,0xF5,0x83,0xE0,0xFF,0xE5,0x0B,
+ 0xFD,0x7C,0x00,0x90,0xF7,0x08,0xE0,0xFA,
+ 0xA3,0xE0,0x2D,0xFD,0xEC,0x3A,0x8D,0x82,
+ 0xF5,0x83,0xEF,0xF0,0x80,0xD5,0xE5,0x0C,
+ 0x60,0x07,0x90,0xF6,0xB4,0xE0,0x44,0x08,
+ 0xF0,0xE4,0xF5,0x0C,0x02,0x63,0xEF,0x90,
+ 0xF4,0x12,0x74,0x09,0xF0,0xA3,0xE4,0xF0,
+ 0xA3,0xE0,0x54,0xFC,0xF0,0x90,0xF7,0x00,
+ 0x74,0x08,0xF0,0x90,0xF7,0x03,0xE0,0x90,
+ 0xF7,0x01,0xF0,0xA3,0xE4,0xF0,0x90,0x83,
+ 0xE9,0xE0,0x90,0xF7,0x03,0xF0,0x90,0x83,
+ 0xEA,0xE0,0x90,0xF7,0x04,0xF0,0x90,0x83,
+ 0xEB,0xE0,0x90,0xF7,0x05,0xF0,0x90,0x83,
+ 0xEC,0xE0,0x90,0xF7,0x06,0xF0,0xE4,0x90,
+ 0x45,0x92,0xF0,0x02,0x63,0xEF,0x90,0xF7,
+ 0x00,0x74,0x08,0xF0,0x90,0xF7,0x03,0xE0,
+ 0x90,0xF7,0x01,0xF0,0x90,0x45,0xB9,0xE0,
+ 0x60,0x40,0xE4,0x90,0x45,0xB9,0xF0,0x90,
+ 0xF7,0x02,0xF0,0x90,0x45,0xB8,0x04,0xF0,
+ 0x90,0x45,0xBA,0xE0,0xFF,0x90,0x45,0x9F,
+ 0xF0,0x90,0xDE,0x80,0xE0,0x90,0xF7,0x03,
+ 0xF0,0x90,0xDE,0x81,0xE0,0x90,0xF7,0x04,
+ 0xF0,0x90,0xDE,0x82,0xE0,0x90,0xF7,0x05,
+ 0xF0,0x90,0xDE,0x83,0xE0,0x90,0xF7,0x06,
+ 0xF0,0x90,0x45,0x9F,0xE0,0xB5,0x07,0xC2,
+ 0x80,0x06,0x90,0xF7,0x02,0x74,0x01,0xF0,
+ 0x90,0xF7,0x00,0xE0,0x04,0x90,0xF4,0x12,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0xE0,0x54,0xFC,
+ 0xF0,0xE4,0x90,0x45,0xB8,0xF0,0x90,0x45,
+ 0x92,0xF0,0x02,0x63,0xEF,0xE4,0x90,0x45,
+ 0x93,0xF0,0x80,0x06,0x90,0x45,0x93,0x74,
+ 0x01,0xF0,0x90,0x45,0x94,0x74,0x02,0xF0,
+ 0x90,0x45,0x93,0xE0,0x60,0x07,0x90,0xF7,
+ 0x04,0xE0,0xFF,0x80,0x02,0x7F,0x00,0xEF,
+ 0x24,0x04,0x90,0x45,0x96,0xF0,0x90,0xF7,
+ 0x05,0xE0,0xB4,0x01,0x08,0x90,0x42,0xEA,
+ 0xE0,0xFF,0xFD,0x80,0x06,0x90,0xF7,0x05,
+ 0xE0,0xFF,0xFD,0x90,0x45,0x93,0xE0,0xFB,
+ 0x90,0xF7,0x06,0xE0,0x90,0x45,0x77,0xF0,
+ 0x90,0xF7,0x07,0xE0,0xFF,0xA3,0xE0,0x90,
+ 0x45,0x78,0xCF,0xF0,0xA3,0xEF,0xF0,0xEB,
+ 0x60,0x06,0x7E,0xF7,0x7F,0x03,0x80,0x04,
+ 0x7E,0xF7,0x7F,0x09,0x90,0x45,0x7A,0xEE,
+ 0xF0,0xA3,0xEF,0xF0,0x90,0xF7,0x04,0xE0,
+ 0xFF,0x90,0x45,0x7C,0xE4,0xF0,0xA3,0xEF,
+ 0xF0,0x7F,0x02,0x12,0x56,0x45,0x90,0x45,
+ 0x95,0xEF,0xF0,0xA3,0xE0,0xFF,0x90,0xF7,
+ 0x00,0xF0,0x90,0x45,0x97,0xE0,0x90,0xF7,
+ 0x01,0xF0,0x90,0x45,0x95,0xE0,0x90,0xF7,
+ 0x02,0xF0,0xEF,0x04,0x90,0xF4,0x12,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0xE0,0x54,0xFC,0xF0,
+ 0xE4,0x90,0x45,0x92,0xF0,0x02,0x63,0xEF,
+ 0xE4,0x90,0x45,0x93,0xF0,0x80,0x06,0x90,
+ 0x45,0x93,0x74,0x01,0xF0,0x90,0x42,0xE9,
+ 0xE0,0x60,0x04,0x7F,0x01,0x80,0x02,0x7F,
+ 0x03,0x90,0x45,0x94,0xEF,0xF0,0x90,0x45,
+ 0x93,0xE0,0xFB,0x60,0x07,0x90,0xF7,0x04,
+ 0xE0,0xFF,0x80,0x02,0x7F,0x00,0xEF,0x24,
+ 0x04,0x90,0x45,0x96,0xF0,0x90,0xF7,0x05,
+ 0xE0,0xB4,0x01,0x08,0x90,0x42,0xEA,0xE0,
+ 0xFF,0xFD,0x80,0x06,0x90,0xF7,0x05,0xE0,
+ 0xFF,0xFD,0x90,0xF7,0x08,0xE0,0x90,0x45,
+ 0x66,0xF0,0xEB,0x60,0x06,0x7E,0xF7,0x7F,
+ 0x03,0x80,0x04,0x7E,0xF7,0x7F,0x09,0x90,
+ 0x45,0x67,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,
+ 0xF7,0x04,0xE0,0xFF,0x90,0x45,0x69,0xE4,
+ 0xF0,0xA3,0xEF,0xF0,0x90,0x45,0x94,0xE0,
+ 0xFF,0x12,0x54,0x23,0x90,0x45,0x95,0xEF,
+ 0xF0,0xA3,0xE0,0xFF,0x90,0xF7,0x00,0xF0,
+ 0x90,0x45,0x97,0xE0,0x90,0xF7,0x01,0xF0,
+ 0x90,0x45,0x95,0xE0,0x90,0xF7,0x02,0xF0,
+ 0xEF,0x04,0x90,0xF4,0x12,0xF0,0xA3,0xE4,
+ 0xF0,0xA3,0xE0,0x54,0xFC,0xF0,0xE4,0x90,
+ 0x45,0x92,0xF0,0x02,0x63,0xEF,0x90,0xF7,
+ 0x04,0xE0,0xFF,0x90,0xF7,0x08,0xE0,0xFC,
+ 0xA3,0xE0,0xFD,0x12,0x5B,0x54,0xE4,0x90,
+ 0x45,0x92,0xF0,0x02,0x63,0xEF,0xC2,0x8C,
+ 0xC2,0x8D,0xE4,0xF5,0x8A,0xF5,0x8C,0xE5,
+ 0x89,0x54,0xF0,0x44,0x01,0xF5,0x89,0xD2,
+ 0x8C,0xE4,0x90,0x45,0xA0,0xF0,0x90,0xF4,
+ 0x04,0xE0,0x54,0x04,0xFF,0x13,0x13,0x54,
+ 0x3F,0x60,0x1F,0xE0,0x54,0xFB,0x44,0x04,
+ 0xF0,0xA3,0x74,0x20,0xF0,0x90,0xF4,0x14,
+ 0xE0,0x54,0x7F,0xF0,0x90,0xF4,0x11,0xE0,
+ 0x54,0xFC,0x44,0x02,0xF0,0xC2,0x8C,0xC2,
+ 0x8D,0x22,0x30,0x8D,0xD1,0xC2,0x8C,0xC2,
+ 0x8D,0x90,0x45,0xA0,0xE0,0x04,0xF0,0xE0,
+ 0xD3,0x94,0x01,0x40,0x28,0x90,0xF4,0x14,
+ 0xE0,0x54,0x7F,0x44,0x80,0xF0,0xE0,0x54,
+ 0xFC,0xF0,0x90,0xF4,0x13,0x74,0x08,0xF0,
+ 0x90,0xF4,0x12,0xE4,0xF0,0x90,0xF4,0x05,
+ 0x74,0x20,0xF0,0x90,0xF4,0x11,0xE0,0x54,
+ 0xFC,0x44,0x01,0xF0,0x22,0xD2,0x8C,0x80,
+ 0x95,0x90,0xF7,0x0A,0xE0,0xFF,0x90,0x45,
+ 0x9D,0xF0,0x90,0x45,0xA1,0xF0,0x90,0xF4,
+ 0x14,0xE0,0x30,0xE7,0x1F,0x90,0xF7,0x04,
+ 0xE0,0x54,0x03,0xFF,0x90,0xF4,0x14,0xE0,
+ 0x54,0xFC,0x4F,0xF0,0x90,0xF7,0x05,0xE0,
+ 0x90,0xF4,0x13,0xF0,0x90,0xF7,0x06,0xE0,
+ 0x90,0xF4,0x12,0xF0,0x90,0xF4,0x05,0x74,
+ 0x20,0xF0,0x90,0xF4,0x11,0xE0,0x54,0x03,
+ 0x60,0x08,0x90,0x45,0xA2,0xE0,0x64,0x01,
+ 0x60,0x1B,0x90,0xF7,0x07,0xE0,0xB4,0xF0,
+ 0x0B,0x90,0xF4,0x11,0xE0,0x54,0xFC,0x44,
+ 0x02,0xF0,0x80,0x09,0x90,0xF4,0x11,0xE0,
+ 0x54,0xFC,0x44,0x01,0xF0,0xE4,0x90,0x45,
+ 0xA2,0xF0,0x90,0x45,0xA1,0xE0,0xB4,0x01,
+ 0x0A,0x90,0xF4,0x04,0xE0,0x54,0xFB,0x44,
+ 0x04,0xF0,0x22,0x90,0xF4,0x05,0xE0,0x20,
+ 0xE5,0x09,0x90,0xF4,0x15,0xE0,0xC3,0x94,
+ 0x05,0x40,0xF0,0x90,0xF4,0x04,0xE0,0x54,
+ 0xFB,0x44,0x04,0xF0,0xA3,0xE0,0x30,0xE5,
+ 0x07,0x90,0x45,0xA2,0x74,0x01,0xF0,0x22,
+ 0x90,0x45,0x9D,0xE0,0x14,0xF0,0x70,0x03,
+ 0x02,0x64,0x8E,0x90,0xF4,0x15,0xE0,0x70,
+ 0xFA,0xA3,0xE0,0x70,0xF6,0xA3,0xE0,0x54,
+ 0x03,0x70,0xF0,0x90,0xF4,0x04,0xE0,0x54,
+ 0x04,0xFF,0x13,0x13,0x54,0x3F,0x60,0x0C,
+ 0x90,0x45,0xA3,0xE0,0xC3,0x94,0xFF,0x50,
+ 0x03,0xE0,0x04,0xF0,0x90,0xF4,0x05,0xE0,
+ 0x20,0xE5,0x0D,0x90,0xF4,0x04,0xE0,0x54,
+ 0x04,0xFF,0x13,0x13,0x54,0x3F,0x60,0xEC,
+ 0x90,0xF4,0x05,0xE0,0x20,0xE5,0x03,0x02,
+ 0x61,0x23,0x90,0xF4,0x04,0xE0,0x54,0xFB,
+ 0x44,0x04,0xF0,0x22,0xD2,0x89,0x90,0xF6,
+ 0xB3,0xE0,0x54,0xFE,0xF0,0x90,0xF6,0xDE,
+ 0xE0,0x54,0xFE,0x44,0x01,0xF0,0x90,0xF6,
+ 0xDE,0xE0,0x20,0xE0,0xF9,0x90,0x42,0xE9,
+ 0xE0,0x60,0x07,0x90,0xDD,0x00,0xE0,0x54,
+ 0x7F,0xF0,0x90,0xF4,0x05,0x74,0x20,0xF0,
+ 0x90,0xF6,0x2F,0xE0,0x54,0xFE,0x44,0x01,
+ 0xF0,0x90,0x45,0x93,0x74,0x01,0xF0,0x90,
+ 0xF7,0x06,0xE0,0x44,0x01,0xF0,0x90,0xF7,
+ 0x03,0xE0,0x90,0xF7,0x01,0xF0,0x80,0x1D,
+ 0xE4,0x90,0x45,0x93,0xF0,0x90,0xF7,0x03,
+ 0xE0,0x90,0xF7,0x01,0xF0,0x7E,0xF0,0x7F,
+ 0x01,0x90,0xF7,0x04,0xE0,0xFB,0x7D,0x07,
+ 0x7C,0xF7,0x12,0x48,0x86,0x90,0xF7,0x04,
+ 0xE0,0xF5,0x0B,0xA3,0xE0,0xFF,0xA3,0xE0,
+ 0xFD,0x90,0x46,0x04,0x74,0x01,0xF0,0xAB,
+ 0x0B,0x12,0x7E,0xD9,0x8F,0x0C,0x90,0xF7,
+ 0x02,0xEF,0xF0,0x90,0x45,0x93,0xE0,0x64,
+ 0x01,0x60,0x03,0x02,0x63,0xEF,0x7C,0xF0,
+ 0x7D,0x00,0x90,0xF7,0x04,0xE0,0xFB,0x7F,
+ 0x03,0x7E,0xF7,0x12,0x48,0x86,0xE4,0x90,
+ 0x45,0x92,0xF0,0xE5,0x0B,0x24,0x04,0x90,
+ 0xF7,0x00,0xF0,0xE0,0x04,0x90,0xF4,0x12,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0xE0,0x54,0xFC,
+ 0xF0,0x02,0x63,0xEF,0x90,0x45,0x9B,0x74,
+ 0xF7,0xF0,0xA3,0x74,0x08,0xF0,0x90,0xF7,
+ 0x04,0xE0,0x24,0xFE,0x60,0x10,0x14,0x60,
+ 0x7F,0x24,0x02,0x60,0x03,0x02,0x63,0xCD,
+ 0x75,0x0C,0x01,0x02,0x63,0xD0,0x90,0xF7,
+ 0x07,0xE0,0x75,0xF0,0x02,0xA4,0x24,0x08,
+ 0xFE,0xE5,0xF0,0x34,0xF7,0x90,0x45,0x99,
+ 0xF0,0xA3,0xCE,0xF0,0xE4,0x90,0x45,0x98,
+ 0xF0,0x90,0xF7,0x07,0xE0,0xFF,0x90,0x45,
+ 0x98,0xE0,0xC3,0x9F,0x50,0x44,0xA3,0xE0,
+ 0xFE,0xA3,0xE0,0xF5,0x82,0x8E,0x83,0xE0,
+ 0xFF,0x90,0x45,0x9B,0xE0,0xFC,0xA3,0xE0,
+ 0xF5,0x82,0x8C,0x83,0xE0,0xFC,0xA3,0xE0,
+ 0xF5,0x82,0x8C,0x83,0xEF,0xF0,0x90,0x45,
+ 0x98,0xE0,0x04,0xF0,0x90,0x45,0x9A,0xE0,
+ 0x04,0xF0,0x70,0x06,0x90,0x45,0x99,0xE0,
+ 0x04,0xF0,0x90,0x45,0x9C,0xE0,0x24,0x02,
+ 0xF0,0x90,0x45,0x9B,0xE0,0x34,0x00,0xF0,
+ 0x80,0xAF,0xE4,0xF5,0x0C,0x02,0x63,0xD0,
+ 0x90,0xF7,0x07,0xE0,0x75,0xF0,0x03,0xA4,
+ 0x24,0x08,0xFE,0xE5,0xF0,0x34,0xF7,0x90,
+ 0x45,0x99,0xF0,0xA3,0xCE,0xF0,0x90,0xF7,
+ 0x07,0xE0,0x75,0xF0,0x03,0xA4,0x24,0x08,
+ 0x90,0xF6,0x20,0xF0,0xE4,0x90,0x45,0x98,
+ 0xF0,0x90,0xF7,0x07,0xE0,0xFF,0x90,0x45,
+ 0x98,0xE0,0xC3,0x9F,0x50,0x59,0x90,0x45,
+ 0x9B,0xE0,0xFE,0xA3,0xE0,0xFF,0x24,0x02,
+ 0xFD,0xE4,0x3E,0x8D,0x82,0xF5,0x83,0xE0,
+ 0xFD,0x90,0x45,0x9E,0xF0,0xFB,0x8F,0x82,
+ 0x8E,0x83,0xE0,0xFE,0xA3,0xE0,0xFF,0x90,
+ 0x45,0x99,0xE0,0xFC,0xA3,0xE0,0xFD,0x12,
+ 0x48,0x86,0x90,0x45,0x9E,0xE0,0xFF,0x90,
+ 0x45,0x9A,0xE0,0x2F,0xF0,0x90,0x45,0x99,
+ 0xE0,0x34,0x00,0xF0,0x90,0x45,0x98,0xE0,
+ 0x04,0xF0,0x90,0x45,0x9B,0xE0,0xFE,0xA3,
+ 0xE0,0x24,0x03,0xFF,0xE4,0x3E,0x90,0x45,
+ 0x9B,0xF0,0xA3,0xEF,0xF0,0x80,0x9A,0xE4,
+ 0xF5,0x0C,0x80,0x03,0x12,0x7B,0x63,0x90,
+ 0x45,0x92,0x74,0xFF,0xF0,0xE4,0xF5,0x0C,
+ 0x80,0x14,0x90,0x45,0x92,0x74,0xFF,0xF0,
+ 0x75,0x0C,0xFA,0x80,0x09,0x12,0x7B,0x64,
+ 0xEF,0x70,0x03,0x75,0x0C,0x02,0x90,0x45,
+ 0x92,0xE0,0xFF,0xF4,0x60,0x3F,0xEF,0x64,
+ 0xFE,0x60,0x3A,0x12,0x5B,0x33,0x90,0xF4,
+ 0x05,0x74,0x20,0xF0,0x90,0x42,0xE9,0xE0,
+ 0x60,0x1B,0x7E,0xDE,0x7F,0x40,0x90,0xF7,
+ 0x00,0xE0,0x04,0xFB,0x7D,0x00,0x7C,0xF7,
+ 0x12,0x48,0x86,0x90,0xF7,0x00,0xE0,0x04,
+ 0x90,0xDD,0x86,0xF0,0x22,0x90,0x45,0x92,
+ 0xE0,0x54,0x03,0xFF,0x90,0xF4,0x11,0xE0,
+ 0x54,0xFC,0x4F,0xF0,0x22,0x90,0x45,0x92,
+ 0xE0,0xF4,0x70,0x23,0x90,0xF4,0x12,0x74,
+ 0x05,0xF0,0xA3,0xE4,0xF0,0xA3,0xE0,0x54,
+ 0xFC,0xF0,0x90,0xF7,0x00,0x74,0x04,0xF0,
+ 0x90,0xF7,0x03,0xE0,0x90,0xF7,0x01,0xF0,
+ 0xA3,0xE5,0x0C,0xF0,0x12,0x5B,0x33,0x90,
+ 0xF4,0x05,0x74,0x20,0xF0,0x90,0x42,0xE9,
+ 0xE0,0x60,0x1B,0x7E,0xDE,0x7F,0x40,0x90,
+ 0xF7,0x00,0xE0,0x04,0xFB,0x7D,0x00,0x7C,
+ 0xF7,0x12,0x48,0x86,0x90,0xF7,0x00,0xE0,
+ 0x04,0x90,0xDD,0x86,0xF0,0x22,0x90,0xF4,
+ 0x11,0xE0,0x54,0xFC,0xF0,0x22,0x22,0x22,
+ 0x22,0x22,0x22,0x90,0x42,0x98,0xE0,0x24,
+ 0xA0,0x60,0x2D,0x14,0x60,0x35,0x14,0x70,
+ 0x03,0x02,0x65,0x2F,0x24,0xFD,0x70,0x03,
+ 0x02,0x65,0x8F,0x14,0x70,0x03,0x02,0x65,
+ 0x99,0x24,0x16,0x60,0x03,0x02,0x65,0xFB,
+ 0x90,0x41,0x87,0xE0,0x90,0xDD,0x10,0xF0,
+ 0xE4,0x90,0x42,0x99,0xF0,0x02,0x66,0x04,
+ 0x90,0x41,0x95,0xE0,0xFF,0x12,0x4B,0x1E,
+ 0x02,0x66,0x04,0x90,0x42,0xEF,0xE0,0x60,
+ 0x29,0x78,0xBA,0x7C,0x41,0x7D,0x01,0x7B,
+ 0x01,0x7A,0x41,0x79,0xB1,0x7E,0x00,0x7F,
+ 0x09,0x12,0x81,0x99,0x90,0x41,0xBB,0x74,
+ 0x02,0xF0,0x7F,0x00,0x7E,0x40,0x12,0x4C,
+ 0xBF,0x7F,0x02,0x7E,0x00,0x12,0x4D,0x00,
+ 0x80,0x21,0x78,0xBA,0x7C,0x41,0x7D,0x01,
+ 0x7B,0x01,0x7A,0x42,0x79,0x9B,0x7E,0x00,
+ 0x7F,0x09,0x12,0x81,0x99,0x7F,0x02,0x7E,
+ 0x00,0x12,0x4C,0xBF,0x7F,0x14,0x7E,0x00,
+ 0x12,0x4D,0x00,0x90,0x41,0xBC,0xE0,0xFF,
+ 0x12,0x4B,0x1E,0x02,0x66,0x04,0xE4,0xFF,
+ 0x90,0x41,0x87,0xE0,0xFE,0xEF,0xC3,0x9E,
+ 0x50,0x2C,0x90,0x42,0x9A,0xE0,0xFE,0x90,
+ 0x42,0xF8,0xE0,0x75,0xF0,0x08,0xA4,0x2E,
+ 0xF5,0x82,0xE4,0x35,0xF0,0xF5,0x83,0xE5,
+ 0x82,0x24,0xF5,0xF5,0x82,0xE5,0x83,0x34,
+ 0x42,0xF5,0x83,0xE0,0xFE,0x90,0x42,0x9A,
+ 0xE0,0x2E,0xF0,0x0F,0x80,0xCA,0x90,0x42,
+ 0x9A,0xE0,0xFF,0x90,0x42,0xF8,0xE0,0x75,
+ 0xF0,0x08,0xA4,0x2F,0xF5,0x82,0xE4,0x35,
+ 0xF0,0xF5,0x83,0xE5,0x82,0x24,0xF5,0xF5,
+ 0x82,0xE5,0x83,0x34,0x42,0xF5,0x83,0xE0,
+ 0xFF,0x12,0x4B,0x1E,0x80,0x75,0x90,0x41,
+ 0xA7,0xE0,0xFF,0x12,0x4B,0x1E,0x80,0x6B,
+ 0x90,0x42,0xEF,0xE0,0x60,0x31,0x78,0xBA,
+ 0x7C,0x41,0x7D,0x01,0x7B,0x01,0x7A,0x42,
+ 0x79,0x9B,0x7E,0x00,0x7F,0x09,0x12,0x81,
+ 0x99,0x90,0x41,0xBB,0x74,0x07,0xF0,0x7F,
+ 0x02,0x7E,0x00,0x12,0x4C,0xBF,0x7F,0x14,
+ 0x7E,0x00,0x12,0x4D,0x00,0x90,0x41,0xBC,
+ 0xE0,0xFF,0x12,0x4B,0x1E,0x80,0x34,0x78,
+ 0xBA,0x7C,0x41,0x7D,0x01,0x7B,0x01,0x7A,
+ 0x41,0x79,0xB1,0x7E,0x00,0x7F,0x09,0x12,
+ 0x81,0x99,0x90,0x41,0xBC,0xE0,0xFF,0x12,
+ 0x4B,0x1E,0x7F,0x00,0x7E,0x40,0x12,0x4C,
+ 0xBF,0x7F,0x02,0x7E,0x00,0x12,0x4D,0x00,
+ 0x80,0x09,0x12,0x7B,0x64,0xEF,0x70,0x03,
+ 0x7F,0x07,0x22,0x7F,0x00,0x22,0x90,0x42,
+ 0x98,0xE0,0xFF,0x14,0x24,0xFD,0x50,0x3A,
+ 0x24,0xF4,0x70,0x03,0x02,0x66,0xA5,0x24,
+ 0xFD,0x70,0x03,0x02,0x66,0xAD,0x24,0xE2,
+ 0x70,0x03,0x02,0x66,0xDF,0x14,0x70,0x03,
+ 0x02,0x66,0xC5,0x24,0xB2,0x70,0x03,0x02,
+ 0x67,0x15,0x24,0xF0,0x70,0x03,0x02,0x67,
+ 0x25,0x24,0xF0,0x70,0x03,0x02,0x67,0x37,
+ 0x24,0xF0,0x70,0x03,0x02,0x67,0x47,0x02,
+ 0x67,0x59,0xEF,0xB4,0x01,0x26,0x90,0x42,
+ 0xEF,0xE0,0x60,0x10,0x90,0x41,0xB8,0xE0,
+ 0xFF,0xC4,0x13,0x13,0x54,0x01,0x90,0xDE,
+ 0x00,0xF0,0x80,0x32,0x90,0x42,0xA2,0xE0,
+ 0xFF,0xC4,0x13,0x13,0x54,0x01,0x90,0xDE,
+ 0x00,0xF0,0x80,0x22,0x90,0x42,0x98,0xE0,
+ 0xB4,0x02,0x07,0xE4,0x90,0xDE,0x00,0xF0,
+ 0x80,0x14,0x90,0x41,0x89,0xE0,0x54,0x0F,
+ 0x24,0x8D,0xF5,0x82,0xE4,0x34,0x41,0xF5,
+ 0x83,0xE0,0x90,0xDE,0x00,0xF0,0xE4,0x90,
+ 0xDE,0x01,0xF0,0x90,0x42,0x99,0x74,0x02,
+ 0xF0,0x02,0x67,0x62,0xE4,0x90,0x42,0x99,
+ 0xF0,0x02,0x67,0x62,0x90,0x41,0x89,0xE0,
+ 0x54,0x0F,0x24,0x8D,0xF5,0x82,0xE4,0x34,
+ 0x41,0xF5,0x83,0xE4,0xF0,0x90,0x42,0x99,
+ 0xF0,0x02,0x67,0x62,0x90,0x41,0x89,0xE0,
+ 0x54,0x0F,0x24,0x8D,0xF5,0x82,0xE4,0x34,
+ 0x41,0xF5,0x83,0x74,0x01,0xF0,0xE4,0x90,
+ 0x42,0x99,0xF0,0x02,0x67,0x62,0x90,0x42,
+ 0xEF,0xE0,0x60,0x08,0xE4,0x90,0x42,0xE7,
+ 0xF0,0x7F,0x07,0x22,0x90,0x41,0x8A,0xE0,
+ 0x14,0x24,0xFC,0x50,0x02,0x80,0x08,0x90,
+ 0x42,0xE7,0x74,0x01,0xF0,0x80,0x0E,0x12,
+ 0x7B,0x64,0xEF,0x70,0x08,0xE4,0x90,0x42,
+ 0xE7,0xF0,0x7F,0x07,0x22,0xE4,0x90,0x42,
+ 0x99,0xF0,0x80,0x4D,0x90,0x41,0x93,0xE0,
+ 0x90,0xDE,0x00,0xF0,0x90,0x42,0x99,0x74,
+ 0x01,0xF0,0x80,0x3D,0x12,0x6A,0x2D,0x90,
+ 0x41,0x87,0xE0,0x90,0x41,0x93,0xF0,0xE4,
+ 0x90,0x42,0x99,0xF0,0x80,0x2B,0x90,0x41,
+ 0x94,0xE0,0x90,0xDE,0x00,0xF0,0x90,0x42,
+ 0x99,0x74,0x01,0xF0,0x80,0x1B,0x12,0x6A,
+ 0x2D,0x90,0x41,0x87,0xE0,0x90,0x41,0x94,
+ 0xF0,0xE4,0x90,0x42,0x99,0xF0,0x80,0x09,
+ 0x12,0x7B,0x64,0xEF,0x70,0x03,0x7F,0x07,
+ 0x22,0x7F,0x00,0x22,0x90,0x42,0x98,0xE0,
+ 0x24,0xDE,0x60,0x1F,0x24,0xF7,0x60,0x2B,
+ 0x24,0xBF,0x60,0x0D,0x04,0x70,0x33,0x90,
+ 0x42,0x24,0xE0,0xFF,0x12,0x4B,0x1E,0x80,
+ 0x32,0x90,0x42,0x2B,0xE0,0xFF,0x12,0x4B,
+ 0x1E,0x80,0x28,0x90,0x42,0xE5,0xE0,0x90,
+ 0xDE,0x00,0xF0,0x90,0x42,0x99,0x74,0x01,
+ 0xF0,0x80,0x18,0x90,0x41,0x88,0xE0,0x90,
+ 0x42,0xE5,0xF0,0xE4,0x90,0x42,0x99,0xF0,
+ 0x80,0x09,0x12,0x7B,0x64,0xEF,0x70,0x03,
+ 0x7F,0x07,0x22,0x7F,0x00,0x22,0x90,0x42,
+ 0x98,0xE0,0x12,0x80,0xB1,0x68,0x01,0x01,
+ 0x68,0x01,0x02,0x68,0x01,0x03,0x68,0x01,
+ 0x10,0x68,0x01,0x13,0x68,0x01,0x22,0x68,
+ 0x01,0x2B,0x68,0x01,0x31,0x68,0x01,0x32,
+ 0x68,0x01,0x50,0x68,0x0B,0x60,0x68,0x21,
+ 0x61,0x68,0x37,0x62,0x68,0x16,0x65,0x68,
+ 0x2C,0x66,0x68,0x4E,0x6B,0x68,0x59,0x6C,
+ 0x68,0x01,0x80,0x68,0x01,0x90,0x68,0x01,
+ 0xA0,0x68,0x01,0xB0,0x00,0x00,0x68,0x64,
+ 0x90,0x42,0x99,0xE0,0x90,0xDD,0x85,0xF0,
+ 0x80,0x62,0x7A,0x41,0x79,0x95,0x7B,0x01,
+ 0x12,0x4B,0x43,0x80,0x57,0x7A,0x41,0x79,
+ 0xA7,0x7B,0x01,0x12,0x4B,0x43,0x80,0x4C,
+ 0x7A,0x41,0x79,0xBA,0x7B,0x01,0x12,0x4B,
+ 0x43,0x80,0x41,0x7A,0x41,0x79,0xBA,0x7B,
+ 0x01,0x12,0x4B,0x43,0x80,0x36,0x90,0x42,
+ 0xF8,0xE0,0x75,0xF0,0x08,0xA4,0x24,0xF5,
+ 0xF9,0x74,0x42,0x35,0xF0,0xFA,0x7B,0x01,
+ 0x12,0x4B,0x43,0x80,0x1F,0x7A,0x42,0x79,
+ 0x24,0x7B,0x01,0x12,0x4B,0x43,0x80,0x14,
+ 0x7B,0x01,0x7A,0x42,0x79,0xA4,0x12,0x4B,
+ 0x43,0x80,0x09,0x12,0x7B,0x64,0xEF,0x70,
+ 0x03,0x7F,0x03,0x22,0x7F,0x00,0x22,0x90,
+ 0x41,0x85,0xE0,0xFF,0x20,0xE7,0x03,0x02,
+ 0x69,0x5D,0xB4,0xA1,0x1C,0xA3,0xE0,0x24,
+ 0xFE,0x60,0x0A,0x14,0x60,0x0A,0x24,0x02,
+ 0x70,0x09,0x7F,0x21,0x22,0x7F,0x22,0x22,
+ 0x7F,0x23,0x22,0x12,0x7B,0x63,0x02,0x6A,
+ 0x2A,0x90,0x41,0x85,0xE0,0xFF,0x54,0x60,
+ 0x60,0x03,0x02,0x6A,0x2A,0x90,0x41,0x86,
+ 0xE0,0x24,0xFA,0x60,0x30,0x24,0xFE,0x70,
+ 0x03,0x02,0x69,0x51,0x24,0xFE,0x70,0x03,
+ 0x02,0x69,0x54,0x24,0x0A,0x60,0x03,0x02,
+ 0x69,0x57,0xEF,0x24,0x7F,0x60,0x0A,0x14,
+ 0x60,0x0A,0x24,0x02,0x70,0x09,0x7F,0x01,
+ 0x22,0x7F,0x02,0x22,0x7F,0x03,0x22,0x12,
+ 0x7B,0x63,0x02,0x6A,0x2A,0x90,0x41,0x85,
+ 0xE0,0xB4,0x81,0x1E,0x90,0x41,0x88,0xE0,
+ 0x24,0xDE,0x60,0x0A,0x14,0x60,0x0A,0x24,
+ 0x02,0x70,0x09,0x7F,0x6B,0x22,0x7F,0x6C,
+ 0x22,0x7F,0x6D,0x22,0x12,0x7B,0x63,0x02,
+ 0x6A,0x2A,0x90,0x41,0x88,0xE0,0x14,0xB4,
+ 0x08,0x00,0x50,0x3E,0x90,0x69,0x1B,0x75,
+ 0xF0,0x03,0xA4,0xC5,0x83,0x25,0xF0,0xC5,
+ 0x83,0x73,0x02,0x69,0x33,0x02,0x69,0x36,
+ 0x02,0x69,0x39,0x02,0x69,0x3C,0x02,0x69,
+ 0x3F,0x02,0x69,0x42,0x02,0x69,0x45,0x02,
+ 0x69,0x48,0x7F,0x60,0x22,0x7F,0x61,0x22,
+ 0x7F,0x62,0x22,0x7F,0x63,0x22,0x7F,0x64,
+ 0x22,0x7F,0x65,0x22,0x7F,0x66,0x22,0x7F,
+ 0x67,0x22,0x12,0x7B,0x63,0x02,0x6A,0x2A,
+ 0x7F,0x80,0x22,0x7F,0xA0,0x22,0x12,0x7B,
+ 0x63,0x02,0x6A,0x2A,0x90,0x41,0x85,0xE0,
+ 0xB4,0x21,0x1C,0xA3,0xE0,0x24,0xF6,0x60,
+ 0x0A,0x14,0x60,0x0A,0x24,0x02,0x70,0x09,
+ 0x7F,0x29,0x22,0x7F,0x2B,0x22,0x7F,0x2B,
+ 0x22,0x12,0x7B,0x63,0x02,0x6A,0x2A,0x90,
+ 0x41,0x85,0xE0,0xFF,0x54,0x60,0x60,0x03,
+ 0x02,0x6A,0x2A,0x90,0x41,0x86,0xE0,0x24,
+ 0xFD,0x60,0x41,0x24,0xFE,0x60,0x70,0x24,
+ 0xFE,0x60,0x78,0x24,0xFE,0x70,0x03,0x02,
+ 0x6A,0x21,0x24,0xFE,0x60,0x7D,0x24,0x0A,
+ 0x70,0x7C,0xEF,0x24,0xFE,0x60,0x17,0x24,
+ 0x02,0x70,0x1C,0x90,0x41,0x87,0xE0,0xFE,
+ 0xB4,0x01,0x03,0x7F,0x10,0x22,0xEE,0x64,
+ 0x02,0x70,0x66,0x7F,0x12,0x22,0x90,0x41,
+ 0x87,0xE0,0x70,0x5D,0x7F,0x13,0x22,0x12,
+ 0x7B,0x63,0x80,0x55,0x90,0x41,0x85,0xE0,
+ 0x24,0xFE,0x60,0x1D,0x24,0x02,0x70,0x22,
+ 0x90,0x41,0x87,0xE0,0xFE,0xB4,0x01,0x03,
+ 0x7F,0x30,0x22,0xEE,0x64,0x02,0x70,0x39,
+ 0x90,0x41,0x89,0xE0,0x70,0x33,0x7F,0x31,
+ 0x22,0x90,0x41,0x87,0xE0,0x70,0x2A,0x7F,
+ 0x32,0x22,0x12,0x7B,0x63,0x80,0x22,0x90,
+ 0x41,0x87,0xE0,0xC3,0x94,0x80,0x50,0x19,
+ 0x7F,0x50,0x22,0x90,0x41,0x85,0xE0,0xB4,
+ 0x01,0x03,0x7F,0x71,0x22,0x7F,0x70,0x22,
+ 0x7F,0x90,0x22,0x7F,0xB0,0x22,0x12,0x7B,
+ 0x63,0x7F,0x00,0x22,0xE4,0xFF,0x7F,0x06,
+ 0x90,0x41,0x8D,0xE4,0xF0,0xA3,0xDF,0xFC,
+ 0x22,0xE4,0x90,0x42,0xE6,0xF0,0x90,0x42,
+ 0xE7,0xF0,0x90,0x42,0xE8,0xF0,0x90,0x42,
+ 0xEF,0xF0,0x12,0x54,0x18,0x12,0x6A,0x9D,
+ 0x22,0x90,0x43,0x0D,0xE0,0x60,0x38,0x74,
+ 0x43,0x90,0x41,0x7F,0xF0,0x74,0xF6,0xA3,
+ 0xF0,0x90,0x43,0x29,0xE0,0x70,0x05,0x12,
+ 0x6D,0x91,0x80,0x1B,0x90,0x43,0x29,0xE0,
+ 0xB4,0x01,0x05,0x12,0x6D,0x9B,0x80,0x0F,
+ 0x90,0x43,0x29,0xE0,0x64,0x02,0x60,0x04,
+ 0xE0,0xB4,0xFF,0x03,0x12,0x6A,0xD7,0x90,
+ 0x42,0xE9,0xE0,0x70,0x02,0xD2,0xDD,0x90,
+ 0x42,0xE9,0xE0,0x60,0x06,0x12,0x4F,0xDC,
+ 0x12,0x4F,0xBD,0x22,0x78,0x95,0x7C,0x41,
+ 0x7D,0x01,0x7B,0xFF,0x7A,0x81,0x79,0xD9,
+ 0x7E,0x01,0x7F,0x03,0x12,0x81,0x99,0x78,
+ 0x9B,0x7C,0x42,0x7D,0x01,0x7B,0x01,0x7A,
+ 0x41,0x79,0xBA,0x7E,0x00,0x7F,0x09,0x12,
+ 0x81,0x99,0x78,0xA4,0x7C,0x42,0x7D,0x01,
+ 0x7B,0xFF,0x7A,0x82,0x79,0xDC,0x7E,0x00,
+ 0x7F,0x41,0x12,0x81,0x99,0x22,0xE4,0x90,
+ 0x45,0xAB,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,
+ 0xF0,0xA3,0xF0,0x90,0xDF,0x84,0x74,0x64,
+ 0xF0,0xE4,0x90,0xDF,0x85,0xF0,0x90,0xDF,
+ 0x86,0x74,0x2C,0xF0,0x90,0xDF,0x87,0x74,
+ 0x01,0xF0,0xE4,0x90,0xDF,0x88,0xF0,0x90,
+ 0xDF,0x89,0x74,0x02,0xF0,0x12,0x6D,0x2C,
+ 0x90,0xDF,0x82,0xE0,0x20,0xE1,0x08,0x90,
+ 0x45,0xAA,0xE5,0xE4,0xF0,0x80,0xF1,0x22,
+ 0x90,0xDF,0x82,0xE0,0x30,0xE0,0x0E,0x74,
+ 0x20,0xF0,0xE0,0x90,0x45,0xA7,0xF0,0xE4,
+ 0x90,0xDF,0x82,0xF0,0x22,0x90,0xDF,0x82,
+ 0xE0,0x30,0xE1,0x03,0x02,0x6D,0x2B,0x90,
+ 0x45,0xA7,0xE5,0xE4,0xF0,0xE0,0x54,0x0F,
+ 0xA3,0xF0,0x90,0x45,0xA7,0xE0,0xFF,0xC4,
+ 0x54,0x0F,0x90,0x45,0xA9,0xF0,0x90,0x45,
+ 0xBB,0xE0,0x14,0x70,0x03,0x02,0x6C,0x08,
+ 0x04,0x60,0x03,0x02,0x6C,0x7D,0x90,0x45,
+ 0xAC,0xE0,0x25,0xE0,0xF0,0x90,0x45,0xAB,
+ 0xE0,0x33,0xF0,0xA3,0xE0,0x44,0x01,0xF0,
+ 0xA3,0xE0,0x04,0xF0,0x90,0x45,0xA7,0xE0,
+ 0x24,0xEF,0x70,0x03,0x02,0x6C,0x80,0x24,
+ 0xEF,0x60,0x20,0x24,0x10,0x70,0x37,0x90,
+ 0x45,0xAC,0xE0,0x25,0xE0,0xF0,0x90,0x45,
+ 0xAB,0xE0,0x33,0xF0,0x90,0x45,0xAD,0xE0,
+ 0x04,0xF0,0x90,0x45,0xBB,0x74,0x01,0xF0,
+ 0x02,0x6C,0x80,0x90,0x45,0xAC,0xE0,0x25,
+ 0xE0,0xF0,0x90,0x45,0xAB,0xE0,0x33,0xF0,
+ 0x90,0x45,0xAD,0xE0,0x04,0xF0,0xE4,0x90,
+ 0x45,0xBB,0xF0,0x02,0x6C,0x80,0x12,0x7B,
+ 0x64,0xEF,0x60,0x03,0x02,0x6C,0x80,0x90,
+ 0x45,0xA8,0xE0,0xB4,0x02,0x13,0x90,0x45,
+ 0xAC,0xE0,0x25,0xE0,0xF0,0x90,0x45,0xAB,
+ 0xE0,0x33,0xF0,0x90,0x45,0xAD,0xE0,0x04,
+ 0xF0,0x90,0x45,0xA9,0xE0,0xD3,0x94,0x02,
+ 0x40,0x15,0x90,0x45,0xA8,0xE0,0x64,0x01,
+ 0x60,0x04,0xE0,0xB4,0x02,0x09,0x90,0x45,
+ 0xA9,0x74,0xFF,0xF0,0x02,0x6C,0x80,0x90,
+ 0x45,0xA9,0x74,0xFE,0xF0,0x80,0x78,0x90,
+ 0x45,0xA7,0xE0,0x24,0xDF,0x60,0x1F,0x24,
+ 0x10,0x70,0x35,0x90,0x45,0xAC,0xE0,0x25,
+ 0xE0,0xF0,0x90,0x45,0xAB,0xE0,0x33,0xF0,
+ 0x90,0x45,0xAD,0xE0,0x04,0xF0,0x90,0x45,
+ 0xBB,0x74,0x01,0xF0,0x80,0x51,0x90,0x45,
+ 0xAC,0xE0,0x25,0xE0,0xF0,0x90,0x45,0xAB,
+ 0xE0,0x33,0xF0,0x90,0x45,0xAD,0xE0,0x04,
+ 0xF0,0xE4,0x90,0x45,0xBB,0xF0,0x80,0x37,
+ 0x12,0x7B,0x64,0xEF,0x70,0x31,0x90,0x45,
+ 0xAC,0xE0,0x25,0xE0,0xF0,0x90,0x45,0xAB,
+ 0xE0,0x33,0xF0,0x90,0x45,0xAD,0xE0,0x04,
+ 0xF0,0x90,0x45,0xA8,0xE0,0xB4,0x01,0x0C,
+ 0xA3,0xE0,0xD3,0x94,0x02,0x40,0x05,0x74,
+ 0xFF,0xF0,0x80,0x0B,0x90,0x45,0xA9,0x74,
+ 0xFE,0xF0,0x80,0x03,0x12,0x7B,0x63,0x90,
+ 0x45,0xA9,0xE0,0xD3,0x94,0x0F,0x50,0x03,
+ 0x02,0x6B,0x2E,0x90,0x45,0xAD,0xE0,0xFF,
+ 0xD3,0x94,0x10,0x50,0x7E,0xEF,0x94,0x0A,
+ 0x40,0x79,0x90,0x45,0xA9,0xE0,0xF4,0x70,
+ 0x72,0xFF,0x7F,0x08,0x90,0x45,0xBE,0xE4,
+ 0xF0,0xA3,0xDF,0xFC,0x7F,0x08,0x90,0x43,
+ 0x29,0xE0,0xB4,0xFF,0x1A,0x90,0x45,0xAB,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x45,0xAE,
+ 0xE0,0x6E,0x70,0x03,0xA3,0xE0,0x6F,0x60,
+ 0x06,0x90,0x45,0xBE,0x74,0x01,0xF0,0x90,
+ 0x45,0xAB,0xE0,0xFF,0xA3,0xE0,0x90,0x45,
+ 0xAE,0xCF,0xF0,0xA3,0xEF,0xF0,0x90,0x45,
+ 0xAB,0xE0,0x54,0xF7,0xF0,0x90,0x43,0x29,
+ 0xE0,0xB4,0xFF,0x12,0x90,0x45,0xAE,0xE0,
+ 0x90,0x45,0xC0,0xF0,0x90,0x45,0xAF,0xE0,
+ 0x90,0x45,0xC1,0xF0,0x80,0x10,0x90,0x45,
+ 0xAB,0xE0,0x90,0x45,0xC0,0xF0,0x90,0x45,
+ 0xAC,0xE0,0x90,0x45,0xC1,0xF0,0x12,0x72,
+ 0xA1,0x80,0x07,0xE4,0x90,0x45,0xAE,0xF0,
+ 0xA3,0xF0,0xE4,0x90,0x45,0xAB,0xF0,0xA3,
+ 0xF0,0xA3,0xF0,0x90,0x45,0xBB,0xF0,0x02,
+ 0x6B,0x2E,0x22,0x90,0xDF,0x82,0xE0,0x54,
+ 0xDF,0xF0,0xE4,0x90,0x45,0xB9,0xF0,0x90,
+ 0x45,0xB8,0xF0,0x90,0x45,0xA6,0x04,0xF0,
+ 0x90,0x41,0x81,0xF0,0x90,0x45,0x56,0x74,
+ 0x32,0xF0,0x90,0x45,0x58,0x74,0x14,0xF0,
+ 0x90,0x45,0x57,0x74,0x3E,0xF0,0xE4,0x90,
+ 0x45,0xBB,0xF0,0x90,0x45,0xC6,0xF0,0x90,
+ 0x45,0xCA,0xF0,0x90,0x45,0xCC,0xF0,0xA3,
+ 0xF0,0x90,0x45,0xBC,0xF0,0xA3,0xF0,0x90,
+ 0x45,0xC7,0xF0,0xA3,0xF0,0x90,0x45,0xD2,
+ 0xF0,0x90,0xDF,0x80,0x74,0x28,0xF0,0xA3,
+ 0x74,0x04,0xF0,0x75,0xCA,0x01,0xE4,0xF5,
+ 0xCB,0xF5,0xC8,0xD2,0xAD,0xD2,0xCA,0x22,
+ 0x90,0xDF,0x92,0x74,0x50,0xF0,0x12,0x6D,
+ 0x2C,0x22,0x90,0x45,0x54,0x74,0x7F,0xF0,
+ 0xA3,0x74,0xFF,0xF0,0x90,0xDF,0x90,0x74,
+ 0x50,0xF0,0xE4,0xA3,0xF0,0xA3,0x74,0x96,
+ 0xF0,0xE4,0xA3,0xF0,0xA3,0x74,0x2C,0xF0,
+ 0xA3,0x74,0x01,0xF0,0xA3,0x74,0x90,0xF0,
+ 0xA3,0x74,0x01,0xF0,0xA3,0x74,0xC2,0xF0,
+ 0xA3,0x74,0x01,0xF0,0xA3,0x74,0x26,0xF0,
+ 0xA3,0x74,0x02,0xF0,0xE4,0xA3,0xF0,0xA3,
+ 0x74,0x10,0xF0,0xE4,0xA3,0xF0,0xA3,0x74,
+ 0x20,0xF0,0xE4,0xA3,0xF0,0xA3,0x74,0x40,
+ 0xF0,0x12,0x6D,0x2C,0x22,0xC2,0xCF,0x90,
+ 0x45,0xBC,0xE0,0x60,0x1A,0xA3,0xE0,0x04,
+ 0xF0,0x90,0x45,0x58,0xE0,0xFF,0x90,0x45,
+ 0xBD,0xE0,0xD3,0x9F,0x40,0x10,0xE4,0x90,
+ 0x45,0xBC,0xF0,0xA3,0xF0,0x80,0x07,0xE4,
+ 0x90,0x45,0xBC,0xF0,0xA3,0xF0,0x90,0x45,
+ 0xCC,0xE0,0x60,0x18,0xA3,0xE0,0x04,0xF0,
+ 0x90,0x45,0x57,0xE0,0xFF,0x90,0x45,0xCD,
+ 0xE0,0xD3,0x9F,0x40,0x10,0xE4,0xF0,0x90,
+ 0x45,0xCC,0xF0,0x22,0xE4,0x90,0x45,0xCD,
+ 0xF0,0x90,0x45,0xCC,0xF0,0x22,0x90,0xDF,
+ 0x82,0xE0,0x30,0xE0,0x14,0x74,0x20,0xF0,
+ 0xE0,0x90,0x45,0xB0,0xF0,0xE4,0x90,0xDF,
+ 0x82,0xF0,0x90,0x45,0xBB,0xF0,0x7F,0x01,
+ 0x22,0x7F,0x00,0x22,0x12,0x6E,0x3F,0xEF,
+ 0x60,0x03,0x02,0x6F,0xFB,0x90,0xDF,0x82,
+ 0xE0,0x30,0xE1,0x03,0x02,0x6F,0xFB,0x90,
+ 0x45,0xB2,0xE5,0xE4,0xF0,0x90,0x45,0xBB,
+ 0xE0,0x14,0x60,0x68,0x14,0x70,0x03,0x02,
+ 0x6F,0x70,0x24,0x02,0x60,0x03,0x02,0x6F,
+ 0xEE,0x90,0x45,0xB2,0xE0,0x64,0xBC,0x70,
+ 0x3B,0x90,0x45,0xC6,0xF0,0x90,0x45,0xC8,
+ 0xF0,0x90,0x45,0xC7,0xF0,0x90,0x45,0xCA,
+ 0xF0,0x90,0x45,0xB1,0xF0,0x90,0x45,0xB1,
+ 0xE0,0xFF,0xC3,0x94,0x08,0x50,0x14,0x74,
+ 0xBE,0x2F,0xF5,0x82,0xE4,0x34,0x45,0xF5,
+ 0x83,0xE4,0xF0,0x90,0x45,0xB1,0xE0,0x04,
+ 0xF0,0x80,0xE2,0x90,0x45,0xBB,0x74,0x01,
+ 0xF0,0x02,0x6F,0xF1,0x90,0x45,0xB2,0xE0,
+ 0xB4,0xAC,0x09,0x90,0x45,0xBB,0x74,0x02,
+ 0xF0,0x02,0x6F,0xF1,0xE4,0x90,0x45,0xBB,
+ 0xF0,0x02,0x6F,0xF1,0x90,0x45,0xB2,0xE0,
+ 0xC3,0x94,0xE8,0x40,0x17,0x12,0x72,0xA1,
+ 0xE4,0x90,0x45,0xBB,0xF0,0x90,0x45,0xC8,
+ 0xF0,0x90,0x45,0xC7,0xF0,0x90,0x45,0xC6,
+ 0xF0,0x02,0x6F,0xF1,0x90,0x45,0xB2,0xE0,
+ 0xB4,0x98,0x1F,0x90,0x45,0xC7,0xE0,0xFF,
+ 0x74,0x01,0xA8,0x07,0x08,0x80,0x02,0xC3,
+ 0x33,0xD8,0xFC,0xFF,0x90,0x45,0xC8,0xE0,
+ 0x2F,0xF0,0x90,0x45,0xC7,0xE0,0x04,0xF0,
+ 0x80,0x1A,0x90,0x45,0xB2,0xE0,0xB4,0x88,
+ 0x08,0x90,0x45,0xC7,0xE0,0x04,0xF0,0x80,
+ 0x0B,0xE4,0x90,0x45,0xBB,0xF0,0x90,0x45,
+ 0xC7,0xE0,0x04,0xF0,0x90,0x45,0xC7,0xE0,
+ 0x64,0x08,0x60,0x03,0x02,0x6F,0xF1,0xA3,
+ 0xE0,0xFF,0x90,0x45,0xC6,0xE0,0xFE,0x04,
+ 0xF0,0x74,0xBE,0x2E,0xF5,0x82,0xE4,0x34,
+ 0x45,0xF5,0x83,0xEF,0xF0,0xE4,0x90,0x45,
+ 0xC7,0xF0,0xA3,0xF0,0x02,0x6F,0xF1,0x90,
+ 0x45,0xB2,0xE0,0xC3,0x94,0xF8,0x40,0x78,
+ 0x90,0x45,0xCA,0xE0,0x04,0xF0,0x90,0x45,
+ 0xB9,0xE0,0x70,0x4C,0x90,0x45,0x58,0xE0,
+ 0x75,0xF0,0x05,0x84,0xFF,0x90,0x45,0xCA,
+ 0xE0,0x6F,0x70,0x3C,0x90,0x45,0xB1,0xF0,
+ 0x90,0x45,0xB1,0xE0,0xFF,0x24,0xBE,0xF5,
+ 0x82,0xE4,0x34,0x45,0xF5,0x83,0xE0,0xFE,
+ 0x74,0x80,0x2F,0xF5,0x82,0xE4,0x34,0xDE,
+ 0xF5,0x83,0xEE,0xF0,0x90,0x45,0xB1,0xE0,
+ 0x04,0xF0,0xE0,0xB4,0x08,0xDA,0x90,0x45,
+ 0xCC,0xE0,0x60,0x06,0x74,0x01,0xF0,0xE4,
+ 0xA3,0xF0,0x90,0x45,0xB9,0x74,0x01,0xF0,
+ 0x90,0x45,0x58,0xE0,0x75,0xF0,0x05,0x84,
+ 0xFF,0x90,0x45,0xCA,0xE0,0xB5,0x07,0x02,
+ 0xE4,0xF0,0xE4,0x90,0x45,0xBB,0xF0,0x90,
+ 0x45,0xC6,0xF0,0x80,0x03,0x12,0x7B,0x63,
+ 0x90,0xDF,0x82,0xE0,0x20,0xE1,0x03,0x02,
+ 0x6E,0x70,0x22,0x12,0x6E,0x3F,0xEF,0x60,
+ 0x03,0x02,0x72,0xA0,0x90,0xDF,0x82,0xE0,
+ 0x30,0xE1,0x03,0x02,0x72,0xA0,0x90,0x45,
+ 0xB3,0xE5,0xE4,0xF0,0x90,0x45,0xBB,0xE0,
+ 0x14,0x60,0x3F,0x14,0x70,0x03,0x02,0x71,
+ 0x68,0x24,0x02,0x60,0x03,0x02,0x72,0x93,
+ 0x90,0x45,0xB3,0xE0,0xB4,0x8C,0x23,0xE4,
+ 0x90,0x45,0xC6,0xF0,0xA3,0xF0,0xA3,0xF0,
+ 0xFF,0x7F,0x03,0x90,0x45,0xCE,0xE4,0xF0,
+ 0xA3,0xDF,0xFC,0x7F,0x03,0x90,0x45,0xBB,
+ 0x74,0x01,0xF0,0x90,0x45,0xD3,0xF0,0x02,
+ 0x72,0x96,0xE4,0x90,0x45,0xBB,0xF0,0x02,
+ 0x72,0x96,0x90,0x45,0xB3,0xE0,0x54,0x0F,
+ 0xA3,0xF0,0x90,0x45,0xB3,0xE0,0xFF,0xC4,
+ 0x54,0x0F,0x90,0x45,0xB5,0xF0,0x90,0x45,
+ 0xD3,0xE0,0x24,0xFE,0x60,0x34,0x14,0x60,
+ 0x52,0x14,0x60,0x70,0x14,0x70,0x03,0x02,
+ 0x71,0x0E,0x24,0x04,0x60,0x03,0x02,0x71,
+ 0x62,0x90,0x45,0xB4,0xE0,0xB4,0x07,0x0E,
+ 0xA3,0xE0,0xB4,0x07,0x09,0x90,0x45,0xD3,
+ 0x74,0x02,0xF0,0x02,0x72,0x96,0xE4,0x90,
+ 0x45,0xBB,0xF0,0x90,0x45,0xD3,0xF0,0x02,
+ 0x72,0x96,0x90,0x45,0xB4,0xE0,0xB4,0x07,
+ 0x0E,0xA3,0xE0,0xB4,0x07,0x09,0x90,0x45,
+ 0xD3,0x74,0x03,0xF0,0x02,0x72,0x96,0xE4,
+ 0x90,0x45,0xBB,0xF0,0x90,0x45,0xD3,0xF0,
+ 0x02,0x72,0x96,0x90,0x45,0xB4,0xE0,0xB4,
+ 0x07,0x0E,0xA3,0xE0,0xB4,0x08,0x09,0x90,
+ 0x45,0xD3,0x74,0x04,0xF0,0x02,0x72,0x96,
+ 0xE4,0x90,0x45,0xBB,0xF0,0x90,0x45,0xD3,
+ 0xF0,0x02,0x72,0x96,0x90,0x45,0xB4,0xE0,
+ 0xB4,0x07,0x0E,0xA3,0xE0,0xB4,0x08,0x09,
+ 0x90,0x45,0xD3,0x74,0x05,0xF0,0x02,0x72,
+ 0x96,0xE4,0x90,0x45,0xBB,0xF0,0x90,0x45,
+ 0xD3,0xF0,0x02,0x72,0x96,0x90,0x45,0xB4,
+ 0xE0,0x64,0x09,0x70,0x40,0x90,0x45,0xCE,
+ 0x74,0x08,0xF0,0x90,0x45,0xB5,0xE0,0xB4,
+ 0x08,0x0F,0x90,0x45,0xCF,0x74,0x88,0xF0,
+ 0xA3,0xF0,0xE4,0xA3,0xF0,0xA3,0x74,0x03,
+ 0xF0,0x90,0x45,0xB5,0xE0,0xB4,0x07,0x0F,
+ 0x90,0x45,0xCF,0x74,0x88,0xF0,0xE4,0xA3,
+ 0xF0,0xA3,0xF0,0xA3,0x74,0x02,0xF0,0x90,
+ 0x45,0xBB,0x74,0x02,0xF0,0xE4,0x90,0x45,
+ 0xD3,0xF0,0x02,0x72,0x96,0xE4,0x90,0x45,
+ 0xBB,0xF0,0x90,0x45,0xD3,0xF0,0x02,0x72,
+ 0x96,0x12,0x7B,0x63,0x02,0x72,0x96,0x90,
+ 0x45,0xB3,0xE0,0x54,0x0F,0xA3,0xF0,0x90,
+ 0x45,0xB3,0xE0,0xFF,0xC4,0x54,0x0F,0x90,
+ 0x45,0xB5,0xF0,0x90,0x45,0xB4,0xE0,0xB4,
+ 0x07,0x21,0x90,0x45,0xD2,0xE0,0xFF,0x04,
+ 0xF0,0x74,0xCE,0x2F,0xF5,0x82,0xE4,0x34,
+ 0x45,0xF5,0x83,0x74,0x08,0xF0,0x90,0x45,
+ 0xD2,0xE0,0x64,0x04,0x70,0x50,0x12,0x72,
+ 0xE4,0x80,0x4B,0x90,0x45,0xB4,0xE0,0x64,
+ 0x08,0x70,0x3E,0x90,0x45,0xD2,0xE0,0xFF,
+ 0x04,0xF0,0x74,0xCE,0x2F,0xF5,0x82,0xE4,
+ 0x34,0x45,0xF5,0x83,0x74,0x08,0xF0,0x90,
+ 0x45,0xD2,0xE0,0xB4,0x04,0x03,0x12,0x72,
+ 0xE4,0x90,0x45,0xD2,0xE0,0xFF,0x04,0xF0,
+ 0x74,0xCE,0x2F,0xF5,0x82,0xE4,0x34,0x45,
+ 0xF5,0x83,0x74,0x08,0xF0,0x90,0x45,0xD2,
+ 0xE0,0xB4,0x04,0x0A,0x12,0x72,0xE4,0x80,
+ 0x05,0xE4,0x90,0x45,0xBB,0xF0,0x90,0x45,
+ 0xB5,0xE0,0xC3,0x94,0x0C,0x40,0x26,0x90,
+ 0x45,0xD2,0xE0,0x94,0x04,0x50,0x14,0xE0,
+ 0xFF,0x04,0xF0,0x74,0xCE,0x2F,0xF5,0x82,
+ 0xE4,0x34,0x45,0xF5,0x83,0x74,0x88,0xF0,
+ 0x12,0x72,0xE4,0x12,0x72,0xA1,0xE4,0x90,
+ 0x45,0xBB,0xF0,0x80,0x78,0x90,0x45,0xB5,
+ 0xE0,0xB4,0x07,0x21,0x90,0x45,0xD2,0xE0,
+ 0xFF,0x04,0xF0,0x74,0xCE,0x2F,0xF5,0x82,
+ 0xE4,0x34,0x45,0xF5,0x83,0x74,0x88,0xF0,
+ 0x90,0x45,0xD2,0xE0,0x64,0x04,0x70,0x55,
+ 0x12,0x72,0xE4,0x80,0x50,0x90,0x45,0xB5,
+ 0xE0,0x64,0x08,0x70,0x3E,0x90,0x45,0xD2,
+ 0xE0,0xFF,0x04,0xF0,0x74,0xCE,0x2F,0xF5,
+ 0x82,0xE4,0x34,0x45,0xF5,0x83,0x74,0x88,
+ 0xF0,0x90,0x45,0xD2,0xE0,0xB4,0x04,0x03,
+ 0x12,0x72,0xE4,0x90,0x45,0xD2,0xE0,0xFF,
+ 0x04,0xF0,0x74,0xCE,0x2F,0xF5,0x82,0xE4,
+ 0x34,0x45,0xF5,0x83,0x74,0x88,0xF0,0x90,
+ 0x45,0xD2,0xE0,0xB4,0x04,0x0F,0x12,0x72,
+ 0xE4,0x80,0x0A,0xE4,0x90,0x45,0xBB,0xF0,
+ 0x80,0x03,0x12,0x7B,0x63,0x90,0xDF,0x82,
+ 0xE0,0x20,0xE1,0x03,0x02,0x70,0x0F,0x22,
+ 0x90,0x43,0x0D,0xE0,0xB4,0x01,0x0D,0x90,
+ 0x45,0xA6,0xE0,0xB4,0x01,0x06,0x12,0x73,
+ 0x9E,0xEF,0x60,0x2E,0x90,0x45,0xBC,0xE0,
+ 0x70,0x28,0x7E,0xDE,0x7F,0x80,0x7C,0x45,
+ 0x7D,0xBE,0x7B,0x08,0x12,0x48,0x86,0x90,
+ 0x45,0xBC,0x74,0x01,0xF0,0xE4,0xA3,0xF0,
+ 0x90,0x45,0xB8,0xE0,0x60,0x06,0x90,0x45,
+ 0xBA,0xE0,0x04,0xF0,0x90,0x45,0xB9,0x74,
+ 0x01,0xF0,0x22,0xE4,0xFF,0xEF,0xC3,0x94,
+ 0x04,0x50,0x65,0x74,0xCE,0x2F,0xF5,0x82,
+ 0xE4,0x34,0x45,0xF5,0x83,0xE0,0xFE,0xB4,
+ 0x08,0x32,0x74,0xCF,0x2F,0xF5,0x82,0xE4,
+ 0x34,0x45,0xF5,0x83,0xE0,0xB4,0x88,0x24,
+ 0x90,0x45,0xC7,0xE0,0xFD,0xC3,0x74,0x07,
+ 0x9D,0xFD,0x74,0x01,0xA8,0x05,0x08,0x80,
+ 0x02,0xC3,0x33,0xD8,0xFC,0xFD,0x90,0x45,
+ 0xC8,0xE0,0x2D,0xF0,0x90,0x45,0xC7,0xE0,
+ 0x04,0xF0,0x80,0x20,0xEE,0xB4,0x88,0x16,
+ 0x74,0xCF,0x2F,0xF5,0x82,0xE4,0x34,0x45,
+ 0xF5,0x83,0xE0,0xB4,0x08,0x08,0x90,0x45,
+ 0xC7,0xE0,0x04,0xF0,0x80,0x06,0x90,0x45,
+ 0xC7,0xE0,0x04,0xF0,0x0F,0x0F,0x80,0x95,
+ 0xE4,0x90,0x45,0xD2,0xF0,0x90,0x45,0xC7,
+ 0xE0,0x64,0x08,0x70,0x3F,0xA3,0xE0,0xFF,
+ 0x90,0x45,0xC6,0xE0,0xFE,0x04,0xF0,0x74,
+ 0xBE,0x2E,0xF5,0x82,0xE4,0x34,0x45,0xF5,
+ 0x83,0xEF,0xF0,0xE4,0x90,0x45,0xC7,0xF0,
+ 0xA3,0xF0,0x90,0x45,0xC6,0xE0,0xB4,0x04,
+ 0x1B,0x90,0x45,0x54,0xE0,0xFF,0x90,0x45,
+ 0xC0,0xE0,0x5F,0xF0,0x90,0x45,0x55,0xE0,
+ 0xFF,0x90,0x45,0xC1,0xE0,0x5F,0xF0,0xE4,
+ 0x90,0x45,0xC6,0xF0,0x22,0xE4,0x90,0x45,
+ 0xB6,0xF0,0xA3,0xF0,0x90,0x45,0x56,0xE0,
+ 0x75,0xF0,0x07,0xA4,0xFF,0x90,0x45,0xB6,
+ 0xE0,0xFC,0xA3,0xE0,0xFD,0xC3,0x9F,0xEC,
+ 0x95,0xF0,0x40,0x03,0x02,0x74,0x9B,0x74,
+ 0xF6,0x2D,0xF5,0x82,0x74,0x43,0x3C,0xF5,
+ 0x83,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0x90,0x45,0xBE,0xE0,
+ 0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,
+ 0xE0,0xFB,0xC3,0x12,0x80,0x9B,0x60,0x03,
+ 0x02,0x74,0x8A,0x90,0x45,0xB6,0xE0,0xFE,
+ 0xA3,0xE0,0x24,0xFC,0xF5,0x82,0x74,0x43,
+ 0x3E,0xF5,0x83,0xE0,0xFE,0x30,0xE7,0x0B,
+ 0x90,0x45,0xCC,0x74,0x01,0xF0,0xE4,0xA3,
+ 0xF0,0xFF,0x22,0x90,0x45,0xCC,0xE0,0x60,
+ 0x1A,0xE4,0xA3,0xF0,0x90,0x45,0xCC,0x04,
+ 0xF0,0xEE,0xB4,0x40,0x0E,0x90,0x45,0xB7,
+ 0xE0,0x24,0x07,0xF0,0x90,0x45,0xB6,0xE0,
+ 0x34,0x00,0xF0,0xE4,0x90,0x45,0xBE,0xF0,
+ 0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,
+ 0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0x90,0x45,
+ 0xB6,0xE0,0xFE,0xA3,0xE0,0xFF,0x24,0xFA,
+ 0xF5,0x82,0x74,0x43,0x3E,0xF5,0x83,0xE0,
+ 0xFD,0x90,0x45,0xC0,0xF0,0x74,0xFB,0x2F,
+ 0xF5,0x82,0x74,0x43,0x3E,0xF5,0x83,0xE0,
+ 0xFF,0x60,0x06,0x90,0x45,0xBE,0xF0,0x80,
+ 0x1D,0x90,0x45,0xB6,0xE0,0xFE,0xA3,0xE0,
+ 0x24,0xFC,0xF5,0x82,0x74,0x43,0x3E,0xF5,
+ 0x83,0xE0,0x30,0xE0,0x09,0x90,0x45,0xC0,
+ 0x74,0x9A,0xF0,0xA3,0xED,0xF0,0x7F,0x01,
+ 0x22,0x90,0x45,0xB7,0xE0,0x24,0x07,0xF0,
+ 0x90,0x45,0xB6,0xE0,0x34,0x00,0xF0,0x02,
+ 0x73,0xA5,0x7F,0x00,0x22,0x90,0x45,0xD4,
+ 0xEC,0xF0,0xA3,0xED,0xF0,0x90,0x45,0x77,
+ 0x74,0x01,0xF0,0x7E,0x00,0xA3,0x14,0xF0,
+ 0xA3,0xEF,0xF0,0x90,0x45,0xD4,0xE0,0xFF,
+ 0xA3,0xE0,0x90,0x45,0x7A,0xCF,0xF0,0xA3,
+ 0xEF,0xF0,0xA3,0xE4,0xF0,0xA3,0x04,0xF0,
+ 0xE4,0xFB,0x7D,0xAC,0x7F,0x02,0x12,0x56,
+ 0x45,0x22,0x90,0xDE,0xC3,0xE0,0x90,0xDE,
+ 0x41,0xF0,0xE4,0xA3,0xF0,0x7C,0xDE,0x7D,
+ 0xC0,0x90,0xDE,0xC0,0xE0,0x04,0xFB,0x7F,
+ 0x00,0x7E,0xF7,0x12,0x48,0x86,0x90,0xF4,
+ 0x10,0xE0,0x54,0xFE,0x44,0x01,0xF0,0x22,
+ 0x90,0xF6,0xA8,0xE0,0x12,0x80,0xB1,0x75,
+ 0x46,0x00,0x75,0x63,0x04,0x75,0x86,0x05,
+ 0x75,0xF5,0x0D,0x76,0x4E,0x10,0x75,0xBF,
+ 0x11,0x79,0x5B,0x18,0x79,0x89,0x19,0x78,
+ 0xAD,0x1A,0x78,0xBE,0x1B,0x75,0xF5,0x20,
+ 0x79,0x20,0x25,0x77,0x73,0x80,0x77,0x73,
+ 0x81,0x76,0xC1,0x82,0x76,0xC1,0x83,0x77,
+ 0x56,0x84,0x77,0x56,0x85,0x78,0xDD,0x86,
+ 0x77,0xFB,0x87,0x77,0xFB,0x88,0x79,0xB6,
+ 0x89,0x00,0x00,0x79,0xE4,0x7E,0xDE,0x7F,
+ 0x40,0x90,0xF7,0x00,0xE0,0x04,0xFB,0x7D,
+ 0x00,0x7C,0xF7,0x12,0x48,0x86,0x90,0xF7,
+ 0x00,0xE0,0x04,0x90,0xDD,0x86,0xF0,0x02,
+ 0x79,0xE7,0x90,0xF6,0xA9,0xE0,0x90,0x45,
+ 0xEE,0xF0,0x90,0xF6,0xAA,0xE0,0x90,0x45,
+ 0xEF,0xF0,0x90,0xF6,0xAB,0xE0,0x90,0x45,
+ 0xF0,0xF0,0x90,0xF6,0xAC,0xE0,0x90,0x45,
+ 0xF1,0xF0,0x02,0x79,0xE7,0x90,0x45,0x8C,
+ 0x74,0x05,0xF0,0x90,0xF6,0xA9,0xE0,0x90,
+ 0x45,0xF2,0xF0,0x90,0xF6,0xAB,0xE0,0x90,
+ 0x45,0xF3,0xF0,0x90,0xF6,0xAC,0xE0,0x90,
+ 0x45,0xF4,0xF0,0x90,0xF6,0xAD,0xE0,0x90,
+ 0x45,0xF5,0xF0,0x90,0xF6,0xAE,0xE0,0x90,
+ 0x45,0xF6,0xF0,0x90,0xF6,0xAA,0xE0,0x90,
+ 0x45,0xF7,0xF0,0x02,0x79,0xE7,0x7C,0x45,
+ 0x7D,0xDA,0x7B,0x01,0x7F,0x1C,0x7E,0x00,
+ 0x12,0x57,0x4C,0x90,0x45,0xDA,0xE0,0x54,
+ 0xF7,0xF0,0xE0,0xFF,0x90,0xF6,0xA9,0xE0,
+ 0xFE,0x33,0x33,0x33,0x54,0xF8,0xFE,0xEF,
+ 0x4E,0x90,0x45,0xDA,0xF0,0x7C,0x45,0x7D,
+ 0xDA,0xE4,0xFB,0x7F,0x1C,0xFE,0x12,0x57,
+ 0x4C,0x02,0x79,0xE7,0x90,0x42,0xE9,0xE0,
+ 0x60,0x08,0x90,0x45,0xD8,0x74,0x01,0xF0,
+ 0x80,0x06,0x90,0x45,0xD8,0x74,0x03,0xF0,
+ 0x90,0xF0,0x01,0x74,0x08,0xF0,0xA3,0x74,
+ 0x80,0xF0,0x90,0xF6,0xA8,0xE0,0x90,0xF0,
+ 0x03,0xF0,0xE4,0xA3,0xF0,0xA3,0xF0,0xA3,
+ 0xF0,0xA3,0xF0,0xA3,0x74,0x7F,0xF0,0x90,
+ 0xF6,0xA8,0xE0,0xF4,0x90,0xF0,0x09,0xF0,
+ 0x90,0x45,0xD8,0xE0,0xFF,0x90,0x45,0x8B,
+ 0xE0,0xFD,0x90,0x46,0x04,0x74,0x01,0xF0,
+ 0x7B,0x09,0x12,0x7E,0xD9,0x90,0x45,0xD7,
+ 0xEF,0xF0,0x02,0x79,0xE7,0x90,0x45,0x77,
+ 0x74,0x01,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,
+ 0x07,0xF0,0xA3,0x74,0x45,0xF0,0xA3,0x74,
+ 0xD6,0xF0,0xA3,0xE4,0xF0,0xA3,0x04,0xF0,
+ 0xFB,0x7D,0xC0,0x7F,0x02,0x12,0x56,0x45,
+ 0x90,0xF6,0xA9,0xE0,0x90,0x45,0xE2,0xF0,
+ 0x90,0x45,0xD6,0xE0,0x54,0xC3,0xF0,0xE0,
+ 0xFF,0x90,0x45,0xE2,0xE0,0xFE,0x25,0xE0,
+ 0x25,0xE0,0xFE,0xEF,0x4E,0x90,0x45,0xD6,
+ 0xF0,0x90,0x45,0x77,0x74,0x01,0xF0,0xA3,
+ 0xE4,0xF0,0xA3,0x74,0x07,0xF0,0xA3,0x74,
+ 0x45,0xF0,0xA3,0x74,0xD6,0xF0,0xA3,0xE4,
+ 0xF0,0xA3,0x04,0xF0,0xE4,0xFB,0x7D,0xC0,
+ 0x7F,0x02,0x12,0x56,0x45,0x90,0x45,0xE2,
+ 0xE0,0x90,0xF6,0xA1,0xF0,0x02,0x79,0xE7,
+ 0x90,0xF0,0x02,0x74,0x52,0xF0,0x90,0x45,
+ 0x77,0x74,0x01,0xF0,0xA3,0xE4,0xF0,0xA3,
+ 0x74,0x05,0xF0,0xA3,0x74,0x45,0xF0,0xA3,
+ 0x74,0xD6,0xF0,0xA3,0xE4,0xF0,0xA3,0x04,
+ 0xF0,0xFB,0x7D,0xC0,0x7F,0x02,0x12,0x56,
+ 0x45,0x90,0xF6,0xA8,0xE0,0xB4,0x82,0x0C,
+ 0x90,0x45,0xD9,0x74,0x01,0xF0,0x90,0x45,
+ 0xE3,0xF0,0x80,0x12,0x90,0xF6,0xA8,0xE0,
+ 0xB4,0x83,0x0B,0x90,0x45,0xD9,0x74,0x02,
+ 0xF0,0xE4,0x90,0x45,0xE3,0xF0,0x90,0x45,
+ 0xD6,0xE0,0x54,0xCF,0xF0,0xE0,0xFF,0x90,
+ 0x45,0xD9,0xE0,0xFE,0xC4,0x54,0xF0,0xFE,
+ 0xEF,0x4E,0x90,0x45,0xD6,0xF0,0x90,0x45,
+ 0x77,0x74,0x01,0xF0,0xA3,0xE4,0xF0,0xA3,
+ 0x74,0x05,0xF0,0xA3,0x74,0x45,0xF0,0xA3,
+ 0x74,0xD6,0xF0,0xA3,0xE4,0xF0,0xA3,0x04,
+ 0xF0,0xE4,0xFB,0x7D,0xC0,0x7F,0x02,0x12,
+ 0x56,0x45,0x90,0x45,0xD9,0xE0,0x90,0xF6,
+ 0xA1,0xF0,0x02,0x79,0xE7,0x90,0xF6,0xA8,
+ 0xE0,0xB4,0x84,0x0C,0x90,0xD8,0xCF,0xE0,
+ 0x54,0xFE,0x44,0x01,0xF0,0x02,0x79,0xE7,
+ 0x90,0xD8,0xCF,0xE0,0x54,0xFE,0xF0,0x02,
+ 0x79,0xE7,0x90,0x45,0x77,0x74,0x01,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0x74,0x20,0xF0,0xA3,
+ 0x74,0x45,0xF0,0xA3,0x74,0xD6,0xF0,0xA3,
+ 0xE4,0xF0,0xA3,0x04,0xF0,0xFB,0x7D,0xC0,
+ 0x7F,0x02,0x12,0x56,0x45,0x90,0xF6,0xA8,
+ 0xE0,0xB4,0x80,0x07,0xE4,0x90,0x45,0xE4,
+ 0xF0,0x80,0x0D,0x90,0xF6,0xA8,0xE0,0xB4,
+ 0x81,0x06,0x90,0x45,0xE4,0x74,0x01,0xF0,
+ 0x90,0x45,0xD6,0xE0,0x54,0x7F,0xF0,0xE0,
+ 0xFF,0x90,0x45,0xE4,0xE0,0xFE,0xC4,0x33,
+ 0x33,0x33,0x54,0x80,0xFE,0xEF,0x4E,0x90,
+ 0x45,0xD6,0xF0,0x90,0x45,0x77,0x74,0x01,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x20,0xF0,
+ 0xA3,0x74,0x45,0xF0,0xA3,0x74,0xD6,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0x04,0xF0,0xE4,0xFB,
+ 0x7D,0xC0,0x7F,0x02,0x12,0x56,0x45,0x90,
+ 0x45,0xE4,0xE0,0x90,0xF6,0xA1,0xF0,0x02,
+ 0x79,0xE7,0x90,0xF6,0x41,0xE0,0x24,0xCE,
+ 0x60,0x03,0x02,0x79,0xE7,0x90,0xF6,0xA8,
+ 0xE0,0x64,0x87,0x70,0x3D,0x90,0x45,0xD6,
+ 0xF0,0x7C,0x45,0x7D,0xD6,0x7F,0x44,0x12,
+ 0x74,0x9E,0x90,0x45,0xD6,0x74,0x28,0xF0,
+ 0x7C,0x45,0x7D,0xD6,0x7F,0x37,0x12,0x74,
+ 0x9E,0x90,0x45,0xD6,0x74,0x09,0xF0,0x7C,
+ 0x45,0x7D,0xD6,0x7F,0x2E,0x12,0x74,0x9E,
+ 0x90,0x45,0xD6,0x74,0x01,0xF0,0x7C,0x45,
+ 0x7D,0xD6,0x7F,0x2E,0x12,0x74,0x9E,0x02,
+ 0x79,0xE7,0x90,0xF6,0xA8,0xE0,0x64,0x88,
+ 0x60,0x03,0x02,0x79,0xE7,0x90,0x45,0xD6,
+ 0x74,0x02,0xF0,0x7C,0x45,0x7D,0xD6,0x7F,
+ 0x44,0x12,0x74,0x9E,0x90,0x45,0xD6,0x74,
+ 0x01,0xF0,0x7C,0x45,0x7D,0xD6,0x7F,0x47,
+ 0x12,0x74,0x9E,0x7C,0x45,0x7D,0xD6,0x7F,
+ 0x48,0x12,0x74,0x9E,0x90,0x45,0xD6,0x74,
+ 0x34,0xF0,0x7C,0x45,0x7D,0xD6,0x7F,0x37,
+ 0x12,0x74,0x9E,0x90,0x45,0xD6,0x74,0x09,
+ 0xF0,0x7C,0x45,0x7D,0xD6,0x7F,0x2E,0x12,
+ 0x74,0x9E,0x90,0x45,0xD6,0x74,0x01,0xF0,
+ 0x7C,0x45,0x7D,0xD6,0x7F,0x2E,0x12,0x74,
+ 0x9E,0x02,0x79,0xE7,0x90,0x45,0xFA,0x74,
+ 0x01,0xF0,0x12,0x7B,0x67,0xE4,0x90,0x45,
+ 0xFA,0xF0,0x02,0x79,0xE7,0x90,0x83,0xD0,
+ 0xE0,0xD3,0x94,0x01,0x40,0x04,0x7F,0x01,
+ 0x80,0x02,0x7F,0x00,0x90,0xF6,0xA1,0xEF,
+ 0xF0,0x90,0x45,0x8B,0xE0,0x90,0xF6,0xA2,
+ 0xF0,0x02,0x79,0xE7,0x90,0xF6,0xA9,0xE0,
+ 0xFF,0x90,0x45,0xDB,0x74,0x55,0xF0,0xEF,
+ 0xB4,0x01,0x06,0xA3,0x74,0x32,0xF0,0x80,
+ 0x06,0x90,0x45,0xDC,0x74,0xD2,0xF0,0x90,
+ 0x45,0x77,0x74,0x01,0xF0,0xA3,0xE4,0xF0,
+ 0xA3,0x74,0x3E,0xF0,0xA3,0x74,0x45,0xF0,
+ 0xA3,0x74,0xDB,0xF0,0xA3,0xE4,0xF0,0xA3,
+ 0x74,0x02,0xF0,0xE4,0xFB,0x7D,0xC0,0x7F,
+ 0x02,0x12,0x56,0x45,0x02,0x79,0xE7,0x90,
+ 0x83,0xE8,0x74,0x01,0xF0,0x90,0x45,0x77,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x62,0xF0,
+ 0xA3,0x74,0x45,0xF0,0xA3,0x74,0xDD,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0x74,0x02,0xF0,0x7B,
+ 0x01,0x7D,0xC0,0xFF,0x12,0x56,0x45,0x90,
+ 0x45,0xDD,0xE0,0x90,0xF6,0xA1,0xF0,0x90,
+ 0x45,0xDE,0xE0,0x90,0xF6,0xA2,0xF0,0x02,
+ 0x79,0xE7,0x90,0xF6,0xA9,0xE0,0x90,0x45,
+ 0xDF,0xF0,0x90,0x45,0x77,0x74,0x01,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0x74,0x13,0xF0,0xA3,
+ 0x74,0x45,0xF0,0xA3,0x74,0xDF,0xF0,0xA3,
+ 0xE4,0xF0,0xA3,0x04,0xF0,0xE4,0xFB,0x7D,
+ 0xC0,0x7F,0x02,0x12,0x56,0x45,0x80,0x5E,
+ 0x90,0x45,0x77,0x74,0x01,0xF0,0xA3,0xE4,
+ 0xF0,0xA3,0x74,0x13,0xF0,0xA3,0x74,0x45,
+ 0xF0,0xA3,0x74,0xE0,0xF0,0xA3,0xE4,0xF0,
+ 0xA3,0x04,0xF0,0xFB,0x7D,0xC0,0x7F,0x02,
+ 0x12,0x56,0x45,0x90,0x45,0xE0,0xE0,0x90,
+ 0xF6,0xA1,0xF0,0x80,0x31,0x90,0xF6,0xA9,
+ 0xE0,0x90,0x45,0xE1,0xF0,0x90,0x45,0x77,
+ 0x74,0x01,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,
+ 0x13,0xF0,0xA3,0x74,0x45,0xF0,0xA3,0x74,
+ 0xE1,0xF0,0xA3,0xE4,0xF0,0xA3,0x04,0xF0,
+ 0xE4,0xFB,0x7D,0xC0,0x7F,0x02,0x12,0x56,
+ 0x45,0x80,0x03,0x12,0x7B,0x63,0x53,0x91,
+ 0xDF,0x90,0xF6,0xDF,0xE0,0x54,0xFE,0xF0,
+ 0x22,0x44,0x45,0xE5,0x9E,0xBE,0xDE,0xFE,
+ 0x00,0xC2,0xE9,0x90,0x45,0xEE,0xE0,0xFF,
+ 0xA3,0xE0,0xFE,0xA3,0xE0,0xFD,0xA3,0xE0,
+ 0xFC,0xD2,0xE9,0x60,0x06,0xED,0xD3,0x94,
+ 0x02,0x40,0x06,0x90,0xF6,0xA5,0xE4,0xF0,
+ 0x22,0xED,0xD3,0x94,0x00,0x40,0x16,0xED,
+ 0xC4,0x54,0xF0,0xFC,0x74,0x37,0x9C,0xFC,
+ 0xEE,0xC4,0x54,0x0F,0xFB,0xC3,0xEC,0x9B,
+ 0x90,0xF6,0xA5,0xF0,0x22,0xEE,0xD3,0x94,
+ 0x0C,0x40,0x10,0xEE,0x13,0x13,0x13,0x54,
+ 0x1F,0xFC,0xC3,0x74,0x49,0x9C,0x90,0xF6,
+ 0xA5,0xF0,0x22,0xEE,0xD3,0x94,0x02,0x40,
+ 0x19,0xEE,0x25,0xE0,0xFC,0xC3,0x74,0x5F,
+ 0x9C,0xFC,0xEF,0xC4,0x13,0x13,0x13,0x54,
+ 0x01,0xFB,0xC3,0xEC,0x9B,0x90,0xF6,0xA5,
+ 0xF0,0x22,0xED,0xD3,0x94,0x10,0x40,0x1A,
+ 0xEE,0x25,0xE0,0x25,0xE0,0xFE,0xC3,0x74,
+ 0x64,0x9E,0xFE,0xEF,0xC4,0x13,0x13,0x54,
+ 0x03,0xFF,0xC3,0xEE,0x9F,0x90,0xF6,0xA5,
+ 0xF0,0x22,0x90,0xF6,0xA5,0x74,0x64,0xF0,
+ 0x22,0xC2,0xE9,0x90,0x45,0xF2,0xE0,0xFF,
+ 0x90,0x45,0xE9,0xF0,0x90,0x45,0xF3,0xE0,
+ 0x90,0x45,0xEA,0xF0,0x90,0x45,0xF4,0xE0,
+ 0xF9,0xA3,0xE0,0x90,0x45,0xEB,0xF0,0x90,
+ 0x45,0xF6,0xE0,0x90,0x45,0xEC,0xF0,0x90,
+ 0x45,0xF7,0xE0,0x90,0x45,0xED,0xF0,0xD2,
+ 0xE9,0xEF,0xD3,0x94,0x64,0x50,0x03,0x02,
+ 0x7B,0x4B,0x90,0x45,0xEB,0xE0,0xFF,0xE9,
+ 0x9F,0x50,0x1C,0xE9,0xFD,0xC3,0xEF,0x9D,
+ 0xFF,0xE4,0x94,0x00,0xFE,0xA3,0xE0,0xFD,
+ 0x7C,0x00,0x12,0x80,0x5D,0xC3,0xE4,0x9F,
+ 0xFB,0x74,0x1E,0x9E,0xFA,0x80,0x1C,0x90,
+ 0x45,0xEB,0xE0,0xFF,0xE9,0xC3,0x9F,0xFF,
+ 0xE4,0x94,0x00,0xFE,0xA3,0xE0,0xFD,0x7C,
+ 0x00,0x12,0x80,0x5D,0xE4,0x2F,0xFB,0xEE,
+ 0x34,0x1E,0xFA,0x90,0xF6,0x41,0xE0,0x64,
+ 0x23,0x70,0x31,0x90,0x45,0xE3,0xE0,0xB4,
+ 0x01,0x1C,0xAF,0x01,0x90,0x45,0xEA,0xE0,
+ 0x29,0xFF,0xE4,0x33,0xCF,0x24,0x71,0xCF,
+ 0x34,0xFF,0xFE,0x7C,0x00,0x7D,0x28,0x12,
+ 0x80,0x5D,0xAA,0x06,0xAB,0x07,0xEA,0xFF,
+ 0x90,0x45,0xE2,0xE0,0x2F,0x24,0x05,0x90,
+ 0xF6,0xA6,0xF0,0x22,0xEA,0x90,0xF6,0xA6,
+ 0xF0,0x22,0x90,0x45,0xE9,0xE0,0xFF,0xC3,
+ 0x74,0x64,0x9F,0x75,0xF0,0x06,0x84,0xFF,
+ 0x90,0x45,0xED,0xE0,0x2F,0x90,0xF6,0xA6,
+ 0xF0,0x22,0x22,0x7F,0x00,0x22,0x90,0xF1,
+ 0x03,0xE0,0x90,0x45,0x88,0xF0,0x90,0xF6,
+ 0xB5,0xE0,0x54,0xF7,0x44,0x08,0xF0,0xE0,
+ 0x54,0xF7,0xF0,0x90,0x45,0x88,0xE0,0x90,
+ 0xF1,0x03,0xF0,0x90,0xF7,0x00,0xE0,0x04,
+ 0xF5,0x0D,0xA3,0xE0,0x54,0x70,0xFF,0x74,
+ 0xFE,0x25,0x0D,0xF5,0x82,0xE4,0x34,0xF6,
+ 0xF5,0x83,0xE0,0x2F,0xF0,0x90,0xF7,0x01,
+ 0xE0,0x54,0x8F,0xF0,0x7E,0xF0,0x7F,0x01,
+ 0xAB,0x0D,0x7D,0x00,0x7C,0xF7,0x12,0x48,
+ 0x86,0x90,0x42,0xE9,0xE0,0x60,0x04,0x7F,
+ 0x01,0x80,0x02,0x7F,0x03,0x90,0x45,0xF8,
+ 0xEF,0xF0,0x90,0x45,0x8B,0xE0,0xFD,0x90,
+ 0x46,0x04,0x74,0x01,0xF0,0xAB,0x0D,0x12,
+ 0x7E,0xD9,0xEF,0x70,0x76,0x90,0xF7,0x00,
+ 0xE0,0xB4,0x03,0x0A,0xA3,0xE0,0xB4,0x02,
+ 0x05,0x75,0x0D,0x02,0x80,0x6C,0x90,0xF7,
+ 0x00,0xE0,0xB4,0x04,0x06,0xA3,0xE0,0x64,
+ 0x03,0x60,0x58,0x90,0xF7,0x00,0xE0,0xB4,
+ 0x04,0x0A,0xA3,0xE0,0xB4,0x04,0x05,0x75,
+ 0x0D,0x02,0x80,0x4E,0x90,0xF7,0x00,0xE0,
+ 0xB4,0x05,0x06,0xA3,0xE0,0x64,0x05,0x60,
+ 0x3A,0x90,0xF7,0x02,0xE0,0x60,0x1F,0x24,
+ 0xFE,0x60,0x1B,0x14,0x60,0x13,0x24,0xE1,
+ 0x60,0x1E,0x24,0xFD,0x60,0x0B,0x24,0xFB,
+ 0x60,0x0C,0x14,0x60,0x04,0x24,0x2A,0x70,
+ 0x14,0x75,0x0D,0x05,0x80,0x1C,0x90,0xF7,
+ 0x04,0xE0,0x24,0x05,0xF5,0x0D,0x80,0x12,
+ 0x75,0x0D,0x09,0x80,0x0D,0x12,0x7B,0x64,
+ 0xEF,0x70,0x07,0x90,0xF4,0x05,0x74,0x20,
+ 0xF0,0x22,0x90,0xF4,0x12,0xE5,0x0D,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0xE0,0x54,0xFC,0xF0,
+ 0xE4,0xF5,0x0E,0xF5,0x0F,0x90,0x45,0xF8,
+ 0xE0,0xFF,0x90,0x45,0x8B,0xE0,0x44,0x01,
+ 0xFD,0x90,0x46,0x04,0x74,0x01,0xF0,0xAB,
+ 0x0D,0x12,0x7E,0xD9,0x90,0x45,0xF9,0xEF,
+ 0xF0,0x60,0x14,0xE5,0x0F,0xF4,0x70,0x03,
+ 0xE5,0x0E,0xF4,0x60,0xBE,0x05,0x0F,0xE5,
+ 0x0F,0x70,0x02,0x05,0x0E,0x80,0xCE,0x7C,
+ 0xF0,0x7D,0x00,0xAB,0x0D,0x7F,0x00,0x7E,
+ 0xF7,0x12,0x48,0x86,0x90,0xF4,0x05,0x74,
+ 0x20,0xF0,0x90,0x45,0xFA,0xE0,0x70,0x28,
+ 0x90,0x42,0xE9,0xE0,0x60,0x1B,0x7E,0xDE,
+ 0x7F,0x40,0x90,0xF7,0x00,0xE0,0x04,0xFB,
+ 0x7D,0x00,0x7C,0xF7,0x12,0x48,0x86,0x90,
+ 0xF7,0x00,0xE0,0x04,0x90,0xDD,0x86,0xF0,
+ 0x22,0x90,0xF4,0x11,0xE0,0x54,0xFC,0xF0,
+ 0x22,0x05,0x16,0x85,0x16,0x16,0x05,0x16,
+ 0x85,0x16,0x16,0x05,0x16,0x85,0x16,0x16,
+ 0x05,0x16,0x85,0x16,0x16,0x05,0x16,0x05,
+ 0x16,0x90,0x83,0xF1,0xE0,0x90,0xF1,0x03,
+ 0xF0,0x12,0x4A,0x80,0x90,0x83,0xEE,0xE0,
+ 0xFF,0x90,0xF1,0x01,0xE0,0x8F,0xF0,0xA4,
+ 0xFF,0xAE,0xF0,0x90,0x83,0xEF,0xE0,0x7C,
+ 0x00,0x2F,0xF5,0x13,0xEC,0x3E,0xF5,0x12,
+ 0xE4,0xF5,0x14,0xF5,0x10,0xF5,0x11,0xC3,
+ 0xE5,0x11,0x95,0x13,0xE5,0x10,0x95,0x12,
+ 0x50,0x74,0xE5,0x11,0x45,0x10,0x70,0x20,
+ 0x90,0xF1,0x02,0xE0,0x54,0xFE,0x44,0x01,
+ 0xF0,0x90,0x83,0xFE,0xE0,0x54,0xFE,0x44,
+ 0x01,0xF0,0xE0,0x54,0xFE,0xF0,0xE0,0x54,
+ 0xFE,0x44,0x01,0xF0,0xE0,0x54,0xFE,0xF0,
+ 0xE5,0x14,0x25,0xE0,0x24,0xF4,0xF5,0x82,
+ 0xE4,0x34,0x83,0xF5,0x83,0xE0,0xFE,0xA3,
+ 0xE0,0xFF,0x12,0x4A,0x1B,0x7E,0x00,0xE5,
+ 0x11,0x54,0x01,0x24,0xF0,0xF5,0x82,0xEE,
+ 0x34,0x83,0xF5,0x83,0xE0,0x90,0xF1,0x03,
+ 0xF0,0x90,0x83,0xFE,0xE0,0x54,0xFE,0x44,
+ 0x01,0xF0,0xE0,0x54,0xFE,0xF0,0x05,0x11,
+ 0xE5,0x11,0x70,0x02,0x05,0x10,0x74,0xFB,
+ 0x25,0x14,0xF5,0x82,0xE4,0x34,0x45,0xF5,
+ 0x83,0xE0,0xF5,0x14,0x80,0x81,0xE4,0x22,
+ 0xE4,0xFF,0x90,0x83,0xF3,0xE0,0xFE,0x90,
+ 0x83,0xF2,0xE0,0xFD,0x2E,0x14,0xFE,0xEF,
+ 0xC3,0x9E,0x50,0x12,0xEF,0x04,0xFE,0x74,
+ 0xFB,0x2F,0xF5,0x82,0xE4,0x34,0x45,0xF5,
+ 0x83,0xEE,0xF0,0x0F,0x80,0xDC,0x74,0xFB,
+ 0x2F,0xF5,0x82,0xE4,0x34,0x45,0xF5,0x83,
+ 0xED,0xF0,0x22,0xE4,0x90,0x83,0xED,0xF0,
+ 0xA3,0x74,0x02,0xF0,0xA3,0x14,0xF0,0xA3,
+ 0x74,0xFF,0xF0,0xA3,0x74,0x07,0xF0,0xA3,
+ 0x74,0x01,0xF0,0xA3,0x04,0xF0,0xA3,0x14,
+ 0xF0,0xA3,0x74,0x63,0xF0,0xA3,0x74,0x03,
+ 0xF0,0xA3,0x74,0x40,0xF0,0xA3,0xE4,0xF0,
+ 0xA3,0x74,0x24,0xF0,0x22,0x12,0x7D,0xD4,
+ 0xE4,0x90,0x83,0xE8,0xF0,0x90,0x46,0x07,
+ 0x74,0xAE,0xF0,0x12,0x7F,0xD8,0xD2,0x88,
+ 0xE4,0x90,0x45,0xFA,0xF0,0x12,0x7F,0xF3,
+ 0x22,0x90,0xF1,0x01,0xE0,0x04,0xFF,0xF0,
+ 0x24,0x00,0xF5,0x82,0xE4,0x34,0xF0,0xF5,
+ 0x83,0x74,0xFF,0xF0,0x90,0xF1,0x03,0x74,
+ 0x1A,0xF0,0x90,0x83,0xFE,0x74,0x01,0xF0,
+ 0xE4,0xF0,0x90,0xF1,0x02,0xE0,0x54,0xFE,
+ 0x44,0x01,0xF0,0x90,0x46,0x05,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x12,0x4A,0x1B,0x90,0xF6,
+ 0xB5,0xE0,0x54,0xF7,0x44,0x08,0xF0,0xE0,
+ 0x54,0xF7,0xF0,0x90,0x45,0x89,0xE4,0xF0,
+ 0xA3,0x04,0xF0,0x22,0x7E,0x00,0x7C,0x03,
+ 0x7D,0xA8,0x12,0x80,0x5D,0xE4,0x2F,0xFF,
+ 0xEE,0x34,0x04,0x90,0x46,0x05,0xF0,0xA3,
+ 0xEF,0xF0,0x22,0x90,0x83,0xE8,0xE0,0x60,
+ 0x06,0x14,0xF0,0x12,0x7E,0x22,0x22,0x90,
+ 0x83,0xE3,0xE0,0xB4,0x01,0x04,0x12,0x7F,
+ 0x43,0x22,0x90,0x83,0xED,0xE0,0x70,0x34,
+ 0x90,0xF1,0x04,0xE0,0x54,0x0C,0xFF,0xBF,
+ 0x08,0x18,0x90,0xF6,0xA7,0xE0,0x70,0x08,
+ 0x90,0xF1,0x03,0x74,0x1A,0xF0,0x80,0x12,
+ 0x90,0xF6,0xA7,0xE0,0x90,0xF1,0x03,0xF0,
+ 0x80,0x08,0x90,0x45,0x88,0xE0,0x90,0xF1,
+ 0x03,0xF0,0x90,0xF1,0x02,0xE0,0x54,0xFE,
+ 0x44,0x01,0xF0,0x22,0x12,0x7C,0xDA,0x22,
+ 0x90,0x46,0x01,0xEF,0xF0,0xAA,0x05,0xE4,
+ 0xF5,0x15,0x90,0x83,0xE8,0xE0,0x60,0x0E,
+ 0x75,0x15,0x01,0xAF,0x03,0x12,0x7E,0x6D,
+ 0xC2,0xAF,0xC2,0xDD,0x80,0x13,0x90,0x83,
+ 0xED,0xE0,0x64,0x01,0x60,0x07,0x90,0x83,
+ 0xE3,0xE0,0xB4,0x01,0x04,0xC2,0xAF,0xC2,
+ 0xDD,0x90,0x46,0x01,0xE0,0xFF,0xAE,0x02,
+ 0xAD,0x06,0x90,0x46,0x04,0xE0,0x90,0x45,
+ 0x86,0xF0,0x12,0x57,0x8C,0xD2,0xDD,0xD2,
+ 0xAF,0xE5,0x15,0x70,0x07,0x90,0x83,0xE3,
+ 0xE0,0xB4,0x01,0x02,0xE4,0xFF,0x90,0x83,
+ 0xE3,0xE0,0x60,0x0D,0x90,0x46,0x01,0xE0,
+ 0xB4,0x02,0x06,0x90,0x83,0xE3,0xE0,0x14,
+ 0xF0,0x22,0x90,0xF6,0xFF,0xE0,0x54,0xEF,
+ 0xF0,0xE0,0x54,0xFB,0xF0,0x90,0xF1,0x03,
+ 0x74,0x07,0xF0,0x90,0xF1,0x02,0xE0,0x54,
+ 0xFE,0x44,0x01,0xF0,0x90,0x83,0xE4,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0x12,0x4A,0x1B,0x90,
+ 0x83,0xFE,0xE0,0x54,0xFE,0x44,0x01,0xF0,
+ 0xE0,0x54,0xFE,0xF0,0x90,0xF6,0xB5,0xE0,
+ 0x54,0xF7,0x44,0x08,0xF0,0xE0,0x54,0xF7,
+ 0xF0,0x90,0xF6,0xFF,0xE0,0x54,0xFD,0x44,
+ 0x02,0xF0,0x90,0x83,0xE6,0xE0,0xFE,0xA3,
+ 0xE0,0xFF,0x12,0x4A,0x1B,0x90,0xF6,0xFF,
+ 0xE0,0x54,0xFB,0x44,0x04,0xF0,0x7F,0x01,
+ 0x7E,0x00,0x12,0x4A,0x1B,0x90,0xF6,0xFF,
+ 0xE0,0x54,0xFB,0xF0,0xE0,0x54,0xF7,0x44,
+ 0x08,0xF0,0x7F,0x01,0x7E,0x00,0x12,0x4A,
+ 0x1B,0x90,0xF6,0xFF,0xE0,0x54,0xFD,0xF0,
+ 0x7F,0x01,0x7E,0x00,0x12,0x4A,0x1B,0x90,
+ 0xF6,0xFF,0xE0,0x54,0xF7,0xF0,0x90,0x45,
+ 0x89,0xE4,0xF0,0xA3,0x04,0xF0,0x22,0xE4,
+ 0x90,0x83,0xE3,0xF0,0xA3,0x74,0x08,0xF0,
+ 0xA3,0x74,0x60,0xF0,0xA3,0x74,0x28,0xF0,
+ 0xA3,0x74,0x07,0xF0,0x22,0xC2,0xAF,0xC2,
+ 0xDD,0x22,0x90,0x12,0x22,0xE0,0x90,0x83,
+ 0xD0,0xF0,0xC3,0x94,0x7F,0x40,0x22,0x90,
+ 0x38,0x4F,0xE0,0xB4,0xFF,0x07,0x90,0x83,
+ 0xD0,0x74,0x02,0xF0,0x22,0x90,0x83,0xD1,
+ 0xE0,0xB4,0xC3,0x07,0x90,0x83,0xD0,0x74,
+ 0x11,0xF0,0x22,0x90,0x83,0xD0,0x74,0x01,
+ 0xF0,0x22,0x90,0x42,0xE9,0xE0,0x60,0x04,
+ 0x12,0x55,0xDB,0x22,0x7F,0x01,0x22,0xBB,
+ 0x01,0x0C,0xE5,0x82,0x29,0xF5,0x82,0xE5,
+ 0x83,0x3A,0xF5,0x83,0xE0,0x22,0x50,0x06,
+ 0xE9,0x25,0x82,0xF8,0xE6,0x22,0xBB,0xFE,
+ 0x06,0xE9,0x25,0x82,0xF8,0xE2,0x22,0xE5,
+ 0x82,0x29,0xF5,0x82,0xE5,0x83,0x3A,0xF5,
+ 0x83,0xE4,0x93,0x22,0xEF,0x8D,0xF0,0xA4,
+ 0xA8,0xF0,0xCF,0x8C,0xF0,0xA4,0x28,0xCE,
+ 0x8D,0xF0,0xA4,0x2E,0xFE,0x22,0xC5,0xF0,
+ 0xF8,0xA3,0xE0,0x28,0xF0,0xC5,0xF0,0xF8,
+ 0xE5,0x82,0x15,0x82,0x70,0x02,0x15,0x83,
+ 0xE0,0x38,0xF0,0x22,0xA3,0xF8,0xE0,0xC5,
+ 0xF0,0x25,0xF0,0xF0,0xE5,0x82,0x15,0x82,
+ 0x70,0x02,0x15,0x83,0xE0,0xC8,0x38,0xF0,
+ 0xE8,0x22,0xEB,0x9F,0xF5,0xF0,0xEA,0x9E,
+ 0x42,0xF0,0xE9,0x9D,0x42,0xF0,0xEC,0x64,
+ 0x80,0xC8,0x64,0x80,0x98,0x45,0xF0,0x22,
+ 0xD0,0x83,0xD0,0x82,0xF8,0xE4,0x93,0x70,
+ 0x12,0x74,0x01,0x93,0x70,0x0D,0xA3,0xA3,
+ 0x93,0xF8,0x74,0x01,0x93,0xF5,0x82,0x88,
+ 0x83,0xE4,0x73,0x74,0x02,0x93,0x68,0x60,
+ 0xEF,0xA3,0xA3,0xA3,0x80,0xDF,0x8A,0x83,
+ 0x89,0x82,0xE4,0x73,0xE7,0x09,0xF6,0x08,
+ 0xDF,0xFA,0x80,0x46,0xE7,0x09,0xF2,0x08,
+ 0xDF,0xFA,0x80,0x3E,0x88,0x82,0x8C,0x83,
+ 0xE7,0x09,0xF0,0xA3,0xDF,0xFA,0x80,0x32,
+ 0xE3,0x09,0xF6,0x08,0xDF,0xFA,0x80,0x6E,
+ 0xE3,0x09,0xF2,0x08,0xDF,0xFA,0x80,0x66,
+ 0x88,0x82,0x8C,0x83,0xE3,0x09,0xF0,0xA3,
+ 0xDF,0xFA,0x80,0x5A,0x89,0x82,0x8A,0x83,
+ 0xE0,0xA3,0xF6,0x08,0xDF,0xFA,0x80,0x4E,
+ 0x89,0x82,0x8A,0x83,0xE0,0xA3,0xF2,0x08,
+ 0xDF,0xFA,0x80,0x42,0x80,0xD2,0x80,0xFA,
+ 0x80,0xC6,0x80,0xD4,0x80,0x55,0x80,0xF2,
+ 0x80,0x29,0x80,0x10,0x80,0xA6,0x80,0xEA,
+ 0x80,0x9A,0x80,0xA8,0x80,0xDA,0x80,0xE2,
+ 0x80,0xCA,0x80,0x29,0x88,0x84,0x8C,0x85,
+ 0x89,0x82,0x8A,0x83,0xE4,0x93,0xA3,0x05,
+ 0x86,0xF0,0xA3,0x05,0x86,0xDF,0xF5,0xDE,
+ 0xF3,0x80,0x0B,0x89,0x82,0x8A,0x83,0xE4,
+ 0x93,0xA3,0xF6,0x08,0xDF,0xF9,0xEC,0xFA,
+ 0xA9,0xF0,0xED,0xFB,0x22,0x88,0x84,0x8C,
+ 0x85,0x89,0x82,0x8A,0x83,0xE0,0xA3,0x05,
+ 0x86,0xF0,0xA3,0x05,0x86,0xDF,0xF6,0xDE,
+ 0xF4,0x80,0xE3,0x89,0x82,0x8A,0x83,0xE4,
+ 0x93,0xA3,0xF2,0x08,0xDF,0xF9,0x80,0xD6,
+ 0x88,0xF0,0xEF,0x60,0x01,0x0E,0x4E,0x60,
+ 0xCD,0x88,0xF0,0xED,0x24,0x02,0xB4,0x04,
+ 0x00,0x50,0xC3,0xF5,0x82,0xEB,0x24,0x02,
+ 0xB4,0x04,0x00,0x50,0xB9,0x23,0x23,0x45,
+ 0x82,0x23,0x90,0x81,0x2D,0x73,0x7F,0xEE,
+ 0x5A,0xCF,0x5B,0xC3,0x64,0x8F,0x49,0x60,
+ 0x6D,0xEE,0x4F,0x3B,0x64,0x90,0x64,0x91,
+ 0x74,0xF9,0x64,0x92,0x64,0x93,0x4F,0x3F,
+ 0x12,0x01,0x00,0x02,0x00,0x00,0x00,0x40,
+ 0xA4,0x15,0x35,0x90,0x00,0x02,0x00,0x00,
+ 0x00,0x01,0x0A,0x06,0x00,0x02,0x00,0x00,
+ 0x00,0x40,0x01,0x00,0x09,0x07,0x35,0x00,
+ 0x01,0x01,0x00,0x80,0xFA,0x09,0x02,0x35,
+ 0x00,0x01,0x01,0x00,0x80,0xFA,0x09,0x04,
+ 0x00,0x00,0x05,0xFF,0x00,0x00,0x00,0x07,
+ 0x05,0x81,0x02,0x40,0x00,0x00,0x07,0x05,
+ 0x02,0x02,0x40,0x00,0x00,0x07,0x05,0x84,
+ 0x02,0x40,0x00,0x00,0x07,0x05,0x85,0x02,
+ 0x40,0x00,0x00,0x07,0x05,0x86,0x01,0x00,
+ 0x00,0x01,0x09,0x04,0x00,0x01,0x05,0xFF,
+ 0x00,0x00,0x00,0x07,0x05,0x81,0x02,0x40,
+ 0x00,0x00,0x07,0x05,0x02,0x02,0x40,0x00,
+ 0x00,0x07,0x05,0x84,0x02,0x40,0x00,0x00,
+ 0x07,0x05,0x85,0x02,0x40,0x00,0x00,0x07,
+ 0x05,0x86,0x01,0x00,0x14,0x01,0x09,0x04,
+ 0x01,0x00,0x01,0x03,0x00,0x01,0x00,0x09,
+ 0x21,0x01,0x01,0x00,0x01,0x22,0x41,0x00,
+ 0x07,0x05,0x83,0x03,0x40,0x00,0x10,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x05,0x01,0x09,0x06,0xA1,
+ 0x01,0x05,0x07,0x19,0xE0,0x29,0xE7,0x15,
+ 0x00,0x25,0x01,0x95,0x08,0x75,0x01,0x81,
+ 0x02,0x95,0x08,0x75,0x01,0x81,0x01,0x05,
+ 0x08,0x19,0x01,0x29,0x03,0x95,0x03,0x75,
+ 0x01,0x91,0x02,0x95,0x01,0x75,0x05,0x91,
+ 0x01,0x05,0x07,0x19,0x00,0x2A,0xFF,0x00,
+ 0x15,0x00,0x26,0xFF,0x00,0x95,0x06,0x75,
+ 0x08,0x81,0x00,0xC0,
+
+ 0x01,0x83,0xE9,0x00,0x04,0x11,0x7C,0x0B,
+ 0x16,0x0C,0x00,
+
+ 0x02,0x41,0x00,0x00,0x03,0xFA,0xBE,0x02,
+ 0x46,0x0C,
+
+ 0x02,0x45,0x50,0x63,0x0E,0x9F,0x57,0x44,
+ 0x41,0x91,0x05,0x42,0x0C,0x00,0x4E,0x42,
+ 0xB8,0x99,0x46,0x01,0xE9,0x50,0x06,0xC6,
+ 0xB3,0xB0,0xB0,0xAE,0xA8,0x9E,0x74,0x4E,
+ 0x42,0xC6,0x02,0x02,0x02,0x01,0x01,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x4E,0x42,0xD4,0x00,0x00,0x00,0x03,0x05,
+ 0x08,0x0C,0x0F,0x10,0x10,0x10,0x0D,0x0B,
+ 0x05,0x5C,0x42,0xE2,0x00,0x00,0x00,0x99,
+ 0x00,0x00,0x00,0xE8,0x00,0x4B,0x00,0xFC,
+ 0x00,0xAE,0x00,0x8B,0x00,0x79,0x00,0x70,
+ 0x00,0x6C,0x00,0x6B,0x00,0x6B,0x00,0x14,
+ 0x5C,0x42,0xFE,0x00,0x03,0x00,0x02,0x00,
+ 0x02,0x00,0x01,0x00,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,
+ 0x43,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x01,0x00,0x01,0x00,0x02,0x00,0x03,
+ 0x00,0x03,0x00,0x04,0x00,0x05,0x00,0x05,
+ 0x00,0x06,0x00,0x06,0x00,0x03,0x48,0x44,
+ 0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x50,0x44,0x7F,0x02,0x39,0x04,0xEE,
+ 0x08,0xFB,0x0E,0xAA,0x10,0xD5,0x13,0x0D,
+ 0x14,0xC9,0x18,0xFE,0x43,0x44,0xAB,0x40,
+ 0x5B,0x00,0x00,0x78,0x7F,0xE4,0xF6,0xD8,
+ 0xFD,0x75,0x81,0x32,0x02,0x46,0x53,0x02,
+ 0x6F,0x69,0xE4,0x93,0xA3,0xF8,0xE4,0x93,
+ 0xA3,0x40,0x03,0xF6,0x80,0x01,0xF2,0x08,
+ 0xDF,0xF4,0x80,0x29,0xE4,0x93,0xA3,0xF8,
+ 0x54,0x07,0x24,0x0C,0xC8,0xC3,0x33,0xC4,
+ 0x54,0x0F,0x44,0x20,0xC8,0x83,0x40,0x04,
+ 0xF4,0x56,0x80,0x01,0x46,0xF6,0xDF,0xE4,
+ 0x80,0x0B,0x01,0x02,0x04,0x08,0x10,0x20,
+ 0x40,0x80,0x90,0x45,0x50,0xE4,0x7E,0x01,
+ 0x93,0x60,0xBC,0xA3,0xFF,0x54,0x3F,0x30,
+ 0xE5,0x09,0x54,0x1F,0xFE,0xE4,0x93,0xA3,
+ 0x60,0x01,0x0E,0xCF,0x54,0xC0,0x25,0xE0,
+ 0x60,0xA8,0x40,0xB8,0xE4,0x93,0xA3,0xFA,
+ 0xE4,0x93,0xA3,0xF8,0xE4,0x93,0xA3,0xC8,
+ 0xC5,0x82,0xC8,0xCA,0xC5,0x83,0xCA,0xF0,
+ 0xA3,0xC8,0xC5,0x82,0xC8,0xCA,0xC5,0x83,
+ 0xCA,0xDF,0xE9,0xDE,0xE7,0x80,0xBE,0xC0,
+ 0xE0,0x75,0xE0,0x00,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x02,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x04,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x06,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x08,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x0A,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x0C,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x0E,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x10,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x12,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x14,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x16,0x02,0x47,0x00,0xC0,
+ 0xE0,0x75,0xE0,0x18,0x02,0x47,0x00,0xC0,
+ 0xD0,0x75,0xD0,0x00,0xC0,0x86,0x75,0x86,
+ 0x00,0xC0,0x83,0xC0,0x82,0xC0,0x85,0xC0,
+ 0x84,0xC0,0xF0,0xC0,0x00,0xC0,0x01,0xC0,
+ 0x02,0xC0,0x03,0xC0,0x04,0xC0,0x05,0xC0,
+ 0x06,0xC0,0x07,0x90,0xAD,0x41,0xF9,0x93,
+ 0xFA,0xE9,0x04,0x93,0xF9,0x12,0xAA,0xCC,
+ 0xD0,0x07,0xD0,0x06,0xD0,0x05,0xD0,0x04,
+ 0xD0,0x03,0xD0,0x02,0xD0,0x01,0xD0,0x00,
+ 0xD0,0xF0,0xD0,0x84,0xD0,0x85,0xD0,0x82,
+ 0xD0,0x83,0xD0,0x86,0xD0,0xD0,0xD0,0xE0,
+ 0x32,0xC2,0x8C,0xC2,0x8D,0xEF,0x42,0x89,
+ 0xEA,0xF4,0xF5,0x8C,0xEB,0xF4,0xF5,0x8A,
+ 0x53,0x8E,0xF7,0xAF,0x05,0xEF,0x33,0x33,
+ 0x33,0x54,0xF8,0x42,0x8E,0xD2,0x8C,0x30,
+ 0x8D,0xFD,0xC2,0x8D,0x22,0xAB,0x07,0xAA,
+ 0x06,0xE4,0xFD,0x7F,0x01,0x12,0x47,0x52,
+ 0x22,0xC2,0xCA,0x43,0x8E,0x08,0xE4,0x90,
+ 0x42,0x5E,0xF0,0xA3,0xF0,0x90,0x42,0x60,
+ 0xF0,0xA3,0xF0,0xD2,0xAD,0xF5,0xC9,0xC2,
+ 0xC9,0xC2,0xCD,0xC2,0xCC,0xC2,0xC8,0xC2,
+ 0xCE,0xC2,0xCB,0x75,0xCA,0xAA,0x75,0xCB,
+ 0xF2,0xD2,0xCA,0x22,0xAB,0x07,0x90,0xF1,
+ 0x1D,0x74,0x01,0xF0,0xE4,0xF0,0xED,0x90,
+ 0xF1,0x18,0xF0,0xEC,0xA3,0xF0,0x90,0xF1,
+ 0x1B,0xEB,0xF0,0x90,0xF1,0x1A,0x74,0x01,
+ 0xF0,0x22,0x22,0xC2,0xAF,0x90,0x41,0x03,
+ 0x74,0x02,0xF0,0xA3,0x74,0x46,0xF0,0xA3,
+ 0x74,0x98,0xF0,0x90,0x41,0x0B,0x74,0x02,
+ 0xF0,0xA3,0x74,0x46,0xF0,0xA3,0x74,0xA0,
+ 0xF0,0x90,0x41,0x13,0x74,0x02,0xF0,0xA3,
+ 0x74,0x46,0xF0,0xA3,0x74,0xA8,0xF0,0x90,
+ 0x41,0x1B,0x74,0x02,0xF0,0xA3,0x74,0x46,
+ 0xF0,0xA3,0x74,0xB0,0xF0,0x90,0x41,0x23,
+ 0x74,0x02,0xF0,0xA3,0x74,0x46,0xF0,0xA3,
+ 0x74,0xB8,0xF0,0x90,0x41,0x2B,0x74,0x02,
+ 0xF0,0xA3,0x74,0x46,0xF0,0xA3,0x74,0xC0,
+ 0xF0,0x90,0x41,0x33,0x74,0x02,0xF0,0xA3,
+ 0x74,0x46,0xF0,0xA3,0x74,0xC8,0xF0,0x90,
+ 0x41,0x3B,0x74,0x02,0xF0,0xA3,0x74,0x46,
+ 0xF0,0xA3,0x74,0xD0,0xF0,0x90,0x41,0x43,
+ 0x74,0x02,0xF0,0xA3,0x74,0x46,0xF0,0xA3,
+ 0x74,0xD8,0xF0,0x90,0x41,0x4B,0x74,0x02,
+ 0xF0,0xA3,0x74,0x46,0xF0,0xA3,0x74,0xE0,
+ 0xF0,0x90,0x41,0x53,0x74,0x02,0xF0,0xA3,
+ 0x74,0x46,0xF0,0xA3,0x74,0xE8,0xF0,0x90,
+ 0x41,0x5B,0x74,0x02,0xF0,0xA3,0x74,0x46,
+ 0xF0,0xA3,0x74,0xF0,0xF0,0x90,0x41,0x63,
+ 0x74,0x02,0xF0,0xA3,0x74,0x46,0xF0,0xA3,
+ 0x74,0xF8,0xF0,0x90,0x47,0xCB,0x74,0x32,
+ 0xF0,0xD2,0xAF,0x22,0xE4,0x90,0x42,0x46,
+ 0xF0,0x12,0x6E,0x75,0x90,0xF7,0x3C,0xE0,
+ 0x70,0x03,0x12,0x9C,0x73,0xE4,0x90,0x41,
+ 0xD2,0xF0,0x90,0x41,0xD1,0xF0,0x04,0x12,
+ 0x72,0x28,0x22,0xC2,0xAF,0x90,0xF7,0x3D,
+ 0xE4,0xF0,0xFF,0x7E,0x28,0x12,0x47,0x76,
+ 0xD2,0xAF,0x22,0xE4,0x90,0x42,0x47,0xF0,
+ 0x90,0x42,0x46,0xF0,0x90,0x44,0x97,0xF0,
+ 0x22,0x05,0x2C,0x12,0x48,0xBC,0x12,0x48,
+ 0x8D,0x90,0x41,0xEB,0xE0,0x90,0xF0,0x76,
+ 0xF0,0x90,0x43,0x38,0x74,0x01,0xF0,0x90,
+ 0x43,0x3D,0xF0,0x90,0x43,0x39,0xF0,0xE4,
+ 0x90,0x43,0x3C,0xF0,0x90,0x41,0xE1,0xE0,
+ 0xB4,0x01,0x14,0x90,0x43,0x50,0x74,0x01,
+ 0xF0,0x12,0x68,0xE0,0x12,0x67,0x79,0x90,
+ 0xFB,0xA8,0x74,0x01,0xF0,0x80,0x16,0x90,
+ 0xFB,0xA8,0xE4,0xF0,0x12,0x67,0x6B,0xE4,
+ 0x90,0x43,0x50,0xF0,0x90,0x42,0x4B,0xE0,
+ 0x60,0x03,0x12,0x9E,0x78,0xE4,0x90,0x41,
+ 0xE1,0xF0,0x12,0xA5,0x73,0x22,0xEF,0x24,
+ 0x04,0x90,0xFE,0x00,0xF0,0x90,0xFE,0x03,
+ 0xE0,0x90,0xFE,0x01,0xF0,0xA3,0xED,0xF0,
+ 0xEF,0x24,0x05,0x90,0xFB,0x90,0xF0,0xA3,
+ 0xE4,0xF0,0xA3,0xF0,0x22,0xAD,0x07,0x75,
+ 0x0A,0x01,0x75,0x0B,0xFE,0x75,0x0C,0x01,
+ 0xE4,0xF5,0x08,0xF5,0x09,0xED,0x60,0x3B,
+ 0xB4,0x01,0x16,0xAB,0x0A,0xAA,0x0B,0xA9,
+ 0x0C,0x12,0xA9,0x1B,0xFE,0xE4,0x25,0x09,
+ 0xF5,0x09,0xEE,0x35,0x08,0xF5,0x08,0x80,
+ 0x22,0x85,0x0C,0x82,0x85,0x0B,0x83,0xE0,
+ 0xFE,0xA3,0xE0,0x25,0x09,0xF5,0x09,0xEE,
+ 0x35,0x08,0xF5,0x08,0x74,0x02,0x25,0x0C,
+ 0xF5,0x0C,0xE4,0x35,0x0B,0xF5,0x0B,0x1D,
+ 0x1D,0x80,0xC2,0xAE,0x08,0xAF,0x09,0x22,
+ 0x90,0x42,0x63,0xEE,0xF0,0xA3,0xEF,0xF0,
+ 0x75,0x0D,0xFE,0x75,0x0E,0x03,0xED,0x60,
+ 0x2C,0x90,0x42,0x63,0xE0,0xFE,0xA3,0xE0,
+ 0xF5,0x82,0x8E,0x83,0xE0,0x85,0x0E,0x82,
+ 0x85,0x0D,0x83,0xF0,0x90,0x42,0x64,0xE0,
+ 0x04,0xF0,0x70,0x06,0x90,0x42,0x63,0xE0,
+ 0x04,0xF0,0x05,0x0E,0xE5,0x0E,0x70,0x02,
+ 0x05,0x0D,0x1D,0x80,0xD1,0x22,0xE4,0x90,
+ 0x42,0x6C,0xF0,0x90,0xFE,0x01,0xE0,0x54,
+ 0x7F,0x90,0x44,0x96,0xF0,0x90,0xFE,0x08,
+ 0xE0,0xFF,0xA3,0xE0,0x90,0x42,0x69,0xCF,
+ 0xF0,0xA3,0xEF,0xF0,0x12,0x88,0x8B,0x90,
+ 0x44,0x96,0xE0,0xFB,0x60,0x0F,0x90,0xFE,
+ 0x02,0xE0,0xFD,0xA3,0xE0,0x90,0x42,0x69,
+ 0xCD,0xF0,0xA3,0xED,0xF0,0x90,0x42,0x69,
+ 0xE0,0xFC,0xA3,0xE0,0xFD,0xC3,0xEC,0x94,
+ 0x40,0x50,0x12,0x90,0x41,0x8C,0xE0,0x2D,
+ 0xFE,0x90,0x41,0x8B,0xE0,0x3C,0x90,0x42,
+ 0x69,0xF0,0xA3,0xCE,0xF0,0x90,0xFE,0x00,
+ 0xE0,0x64,0x03,0x70,0x29,0xEB,0x64,0x02,
+ 0x70,0x24,0x04,0xF0,0x90,0x42,0x69,0xE0,
+ 0xFE,0xA3,0xE0,0xF5,0x82,0x8E,0x83,0xE0,
+ 0x90,0xFE,0x01,0xF0,0x90,0xFB,0x90,0x74,
+ 0x02,0xF0,0xA3,0xE4,0xF0,0xA3,0xF0,0x90,
+ 0x42,0x6C,0xF0,0x02,0x4C,0x28,0x90,0xFE,
+ 0x00,0xE0,0x64,0x04,0x70,0x43,0x90,0x44,
+ 0x96,0xE0,0x64,0x03,0x70,0x3B,0x90,0x41,
+ 0x8B,0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x42,
+ 0x69,0xE0,0xB5,0x06,0x11,0xA3,0xE0,0xB5,
+ 0x07,0x0C,0x12,0x48,0xCA,0x90,0x42,0x6C,
+ 0x74,0x03,0xF0,0x02,0x4C,0x28,0x90,0xFE,
+ 0x04,0xE0,0xFF,0x90,0x42,0x69,0xE0,0xFC,
+ 0xA3,0xE0,0xF5,0x82,0x8C,0x83,0xEF,0xF0,
+ 0x90,0x42,0x6C,0x74,0x02,0xF0,0x02,0x4C,
+ 0x28,0x90,0x42,0x67,0x74,0xFE,0xF0,0xA3,
+ 0x74,0x0A,0xF0,0x90,0xFE,0x00,0xE0,0xFF,
+ 0x24,0xFF,0xF5,0x82,0xE4,0x34,0xFD,0xF5,
+ 0x83,0xE0,0xFC,0xA3,0xE0,0xF4,0xFD,0xEC,
+ 0xF4,0x90,0x42,0x65,0xF0,0xA3,0xED,0xF0,
+ 0xEF,0x24,0xFE,0xFF,0x12,0x49,0x46,0x90,
+ 0x42,0x65,0xE0,0x6E,0x70,0x03,0xA3,0xE0,
+ 0x6F,0x60,0x09,0x90,0x42,0x6C,0x74,0x02,
+ 0xF0,0x02,0x4C,0x28,0x90,0x41,0x8B,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0x90,0x42,0x69,0xE0,
+ 0xB5,0x06,0x27,0xA3,0xE0,0xB5,0x07,0x22,
+ 0x12,0x48,0xCA,0x90,0x42,0x6C,0x74,0x01,
+ 0xF0,0xE4,0xFD,0xFF,0x12,0x49,0x27,0x90,
+ 0xFE,0x01,0xE0,0xFE,0xA3,0xE0,0xF4,0xFF,
+ 0xEE,0xF4,0xA3,0xF0,0xA3,0xEF,0xF0,0x02,
+ 0x4C,0x28,0x90,0xFE,0x04,0xE0,0xFF,0x90,
+ 0x42,0x6B,0xF0,0x90,0xFE,0x01,0xE0,0x54,
+ 0x3F,0xFC,0xA3,0xE0,0xFD,0xEC,0x60,0x03,
+ 0x02,0x4C,0x80,0xED,0x60,0x59,0x24,0xF8,
+ 0x60,0x55,0x14,0x60,0x15,0x24,0xFC,0x70,
+ 0x03,0x02,0x4C,0x1F,0x24,0xEB,0x70,0x03,
+ 0x02,0x4B,0xD4,0x24,0x21,0x60,0x03,0x02,
+ 0x4C,0x80,0xEF,0x60,0x23,0x1F,0x90,0x42,
+ 0x67,0xE0,0xFC,0xA3,0xE0,0x2F,0xF5,0x82,
+ 0xE4,0x3C,0xF5,0x83,0xE0,0xFE,0x90,0x42,
+ 0x69,0xE0,0xFC,0xA3,0xE0,0x2F,0xF5,0x82,
+ 0xE4,0x3C,0xF5,0x83,0xEE,0xF0,0x80,0xDA,
+ 0x85,0x2C,0x2C,0x05,0x2C,0x05,0x2C,0x12,
+ 0xA4,0x30,0x05,0x2C,0x85,0x2C,0x2C,0x05,
+ 0x2C,0x85,0x2C,0x2C,0x02,0x4C,0x28,0x90,
+ 0x42,0x6B,0xE0,0xFF,0xE4,0xFD,0x12,0x49,
+ 0x27,0x90,0x42,0x69,0xE0,0xFE,0xA3,0xE0,
+ 0xFF,0xA3,0xE0,0xFD,0x12,0x49,0x99,0x90,
+ 0xFE,0x00,0xE0,0x24,0xFE,0xFF,0x12,0x49,
+ 0x46,0xEF,0xF4,0xFF,0xEE,0xF4,0xFE,0x90,
+ 0xFE,0x00,0xE0,0x24,0xFF,0xF5,0x82,0xE4,
+ 0x34,0xFD,0xF5,0x83,0xEE,0xF0,0xA3,0xEF,
+ 0xF0,0x80,0x54,0xE4,0xFD,0x7F,0x04,0x12,
+ 0x49,0x27,0x90,0x41,0x91,0xE0,0x90,0xFE,
+ 0x03,0xF0,0x90,0x41,0x92,0xE0,0x90,0xFE,
+ 0x04,0xF0,0x90,0x41,0x93,0xE0,0x90,0xFE,
+ 0x05,0xF0,0x90,0x41,0x94,0xE0,0x90,0xFE,
+ 0x06,0xF0,0x90,0xFE,0x00,0xE0,0x24,0xFE,
+ 0xFF,0x12,0x49,0x46,0xEF,0xF4,0xFF,0xEE,
+ 0xF4,0xFE,0x90,0xFE,0x00,0xE0,0x24,0xFF,
+ 0xF5,0x82,0xE4,0x34,0xFD,0xF5,0x83,0xEE,
+ 0xF0,0xA3,0xEF,0xF0,0x80,0x09,0x90,0xFB,
+ 0x86,0x74,0x01,0xF0,0x12,0x8A,0x16,0x90,
+ 0xFB,0x86,0x74,0x01,0xF0,0x90,0x42,0x6C,
+ 0xE0,0xFF,0x64,0x02,0x60,0x24,0xEF,0x64,
+ 0x03,0x60,0x1F,0x90,0xF9,0x9F,0xE0,0x60,
+ 0x14,0x90,0xFB,0x88,0xE0,0x64,0x01,0x60,
+ 0xF8,0x90,0xFB,0x96,0xE4,0xF0,0x90,0xFB,
+ 0x88,0x04,0xF0,0x80,0x05,0x90,0xFB,0x93,
+ 0xE4,0xF0,0x90,0x42,0x6C,0xE0,0xFF,0x64,
+ 0x01,0x60,0x04,0xEF,0xB4,0x03,0x18,0x85,
+ 0x2C,0x2C,0x85,0x2C,0x2C,0x12,0x68,0xE0,
+ 0xE4,0xF5,0x0F,0x7B,0x01,0x7A,0x43,0x79,
+ 0x49,0x7D,0x01,0xFC,0x12,0xAD,0x13,0x22,
+ 0x90,0xFB,0x86,0xE0,0x60,0x32,0x90,0x43,
+ 0x51,0xE0,0x70,0x24,0x90,0xFE,0x00,0xE0,
+ 0x24,0x01,0xFF,0xE4,0x33,0xFE,0x90,0xFB,
+ 0x82,0xE0,0xC3,0x9F,0xEE,0x64,0x80,0xF8,
+ 0x74,0x80,0x98,0x50,0x0B,0xE0,0xF4,0x60,
+ 0x07,0x90,0xFB,0x86,0x74,0x01,0xF0,0x22,
+ 0x90,0xFB,0x82,0xE4,0xF0,0x12,0x49,0xD7,
+ 0x22,0xC2,0x8C,0x22,0x22,0x22,0x22,0x22,
+ 0x22,0x22,0xD2,0xAF,0x90,0x42,0x6D,0xE0,
+ 0x04,0xF0,0x12,0x63,0xAC,0x90,0xF5,0xBE,
+ 0x74,0x01,0xF0,0x12,0x62,0x71,0x90,0x44,
+ 0x98,0x74,0x01,0xF0,0x90,0x42,0x6D,0xE0,
+ 0x64,0xAF,0x70,0x31,0x90,0xF5,0xC1,0xE0,
+ 0x70,0x04,0x90,0x42,0x96,0xF0,0x90,0xF5,
+ 0xBA,0xE0,0x70,0x04,0x90,0x42,0x97,0xF0,
+ 0x90,0x42,0x97,0xE0,0x70,0x17,0x90,0x42,
+ 0x96,0xE0,0x70,0x11,0x90,0xF5,0xB9,0x04,
+ 0xF0,0x90,0xF5,0xC0,0xF0,0xD2,0xE9,0x90,
+ 0x44,0x98,0xF0,0xD2,0xEA,0x12,0x88,0x8B,
+ 0x53,0x91,0xDF,0xD2,0xAF,0x22,0x90,0xF7,
+ 0x79,0x74,0x01,0xF0,0xA3,0xF0,0xA3,0xF0,
+ 0xA3,0xF0,0x90,0xF7,0x6A,0xF0,0x90,0xF7,
+ 0x74,0xF0,0x90,0xF0,0x09,0xF0,0x90,0xF7,
+ 0x7D,0xF0,0x90,0xF5,0xB9,0xF0,0x90,0xF5,
+ 0xBE,0xF0,0x90,0xF5,0xC0,0xF0,0x22,0xD2,
+ 0xAF,0x90,0xF7,0x7D,0xE0,0x64,0x01,0x70,
+ 0x57,0x90,0xF7,0x32,0xE0,0x60,0x03,0x12,
+ 0x9B,0x0B,0x90,0xF7,0x3C,0xE0,0x60,0x03,
+ 0x02,0x4E,0x18,0x90,0xF5,0xA9,0xE0,0x60,
+ 0x03,0x02,0x4E,0x18,0x90,0xF7,0x32,0xE0,
+ 0xB4,0x01,0x10,0x90,0xF7,0x7B,0xE0,0xB4,
+ 0x01,0x09,0x90,0x43,0x3C,0x74,0x02,0xF0,
+ 0x12,0x9C,0x7C,0x90,0xF7,0x31,0xE0,0x64,
+ 0x01,0x60,0x03,0x02,0x4E,0x18,0x90,0xF7,
+ 0x7C,0xE0,0x64,0x01,0x60,0x03,0x02,0x4E,
+ 0x18,0x90,0x44,0x97,0x04,0xF0,0x90,0xF7,
+ 0x49,0xE0,0x90,0x44,0x99,0xF0,0x80,0x6F,
+ 0x90,0x44,0x98,0xE0,0x64,0x01,0x70,0x67,
+ 0x90,0xF5,0xB9,0xE0,0x64,0x01,0x70,0x29,
+ 0x90,0xF5,0xB3,0x04,0xF0,0x90,0xF4,0x60,
+ 0xE0,0x70,0x05,0x12,0x67,0x0D,0x80,0x0F,
+ 0x90,0xF4,0x60,0xE0,0xB4,0x01,0x05,0x12,
+ 0x67,0x1D,0x80,0x03,0x12,0x67,0x2D,0x90,
+ 0xF5,0xB3,0xE4,0xF0,0x90,0x42,0x97,0x04,
+ 0xF0,0x90,0xF5,0xC0,0xE0,0x64,0x01,0x70,
+ 0x29,0x90,0xF5,0xBD,0x04,0xF0,0x90,0xF4,
+ 0x60,0xE0,0x70,0x05,0x12,0x67,0x3D,0x80,
+ 0x0F,0x90,0xF4,0x60,0xE0,0xB4,0x01,0x05,
+ 0x12,0x67,0x4B,0x80,0x03,0x12,0x67,0x5C,
+ 0x90,0xF5,0xBD,0xE4,0xF0,0x90,0x42,0x96,
+ 0x04,0xF0,0xE4,0x90,0x42,0x6D,0xF0,0x12,
+ 0x4D,0x1F,0x53,0x91,0xBF,0xE4,0x90,0x44,
+ 0x98,0xF0,0xD2,0xEA,0xD2,0xE9,0xD2,0xAF,
+ 0x22,0x90,0xF5,0x52,0x74,0x3F,0xF0,0x90,
+ 0xF5,0x54,0x74,0x01,0xF0,0x90,0xF7,0x0E,
+ 0xF0,0x22,0x90,0x43,0xC3,0x74,0x01,0xF0,
+ 0x90,0x44,0xB0,0x74,0x05,0xF0,0x90,0x43,
+ 0x42,0x74,0x01,0xF0,0x12,0xA7,0x2C,0x12,
+ 0xA5,0x8E,0x53,0x91,0x7F,0x12,0xA4,0x1A,
+ 0x22,0x90,0xF7,0x11,0xE4,0xF0,0x7F,0xFF,
+ 0x7E,0x66,0x12,0x47,0x76,0x90,0x44,0x98,
+ 0x74,0x01,0xF0,0xD2,0xEA,0x90,0xF7,0x11,
+ 0xF0,0x22,0xC2,0xAF,0xC2,0xDB,0x90,0xFB,
+ 0x7F,0xE0,0x70,0x09,0x90,0xFB,0x87,0xF0,
+ 0x90,0xFB,0xAF,0x04,0xF0,0xD2,0xAF,0x22,
+ 0xC2,0xE9,0xC2,0xEA,0xD2,0xA8,0xD2,0xAF,
+ 0x90,0x43,0x3A,0xE0,0x60,0x12,0x90,0xF9,
+ 0x57,0xE0,0x54,0xFD,0x44,0x02,0xF0,0xE0,
+ 0x54,0xFD,0xF0,0xE4,0x90,0x43,0x3A,0xF0,
+ 0x90,0xF5,0xA9,0x74,0x01,0xF0,0x90,0xF0,
+ 0x71,0xE4,0xF0,0x90,0xF1,0xE9,0xF0,0x90,
+ 0xF0,0xD5,0xF0,0x90,0xF0,0xE3,0xF0,0x90,
+ 0xF0,0xE2,0xF0,0x90,0xF1,0xEA,0xF0,0x90,
+ 0xF1,0xEF,0xF0,0x90,0xF1,0xF2,0xF0,0x90,
+ 0xF1,0xF7,0xF0,0x90,0xF1,0xFB,0xF0,0x90,
+ 0xF5,0xAF,0xF0,0xA3,0xF0,0xA3,0xF0,0x90,
+ 0xF5,0xBB,0xF0,0x90,0xF5,0xA8,0xF0,0x90,
+ 0xF5,0xAC,0xF0,0x90,0xF5,0xC8,0xF0,0x90,
+ 0xF4,0x71,0xF0,0x90,0xF9,0x0B,0xF0,0x90,
+ 0xF5,0xE7,0xF0,0x90,0xF5,0xE1,0xF0,0x90,
+ 0xF4,0x71,0xF0,0x90,0xF5,0xD7,0xF0,0x90,
+ 0xF6,0x25,0xF0,0x90,0xFD,0xA2,0xF0,0x90,
+ 0xF1,0xE8,0x04,0xF0,0x90,0xF0,0x6C,0xF0,
+ 0x90,0xF1,0x75,0xF0,0x90,0xF1,0x31,0xF0,
+ 0xE4,0x90,0x43,0x80,0xF0,0x90,0xF1,0xF6,
+ 0x04,0xF0,0x90,0xF1,0xFA,0xF0,0x90,0xF1,
+ 0xF3,0xF0,0x90,0xF1,0xF0,0xF0,0x90,0xF0,
+ 0x7D,0xF0,0x90,0xF1,0xEB,0xF0,0x90,0xF5,
+ 0xC2,0xF0,0x90,0xF5,0xB3,0xF0,0x90,0xF5,
+ 0xBD,0xF0,0x90,0xF1,0xE8,0xF0,0xE4,0xF0,
+ 0x90,0xF0,0x6C,0xF0,0x90,0xF1,0x75,0xF0,
+ 0x90,0xF1,0x31,0xF0,0x90,0xF1,0xFA,0xF0,
+ 0x90,0x41,0xBE,0xE0,0x90,0xF1,0xA3,0xF0,
+ 0x90,0x41,0xBF,0xE0,0x90,0xF1,0xA4,0xF0,
+ 0x90,0x41,0xC0,0xE0,0x90,0xF1,0xA5,0xF0,
+ 0x90,0xF6,0x21,0x74,0x02,0xF0,0x90,0xF6,
+ 0x23,0xF0,0x90,0xF5,0xC6,0xE4,0xF0,0xA3,
+ 0xF0,0x90,0xF5,0xC3,0xF0,0xA3,0xF0,0x90,
+ 0x41,0xB6,0xE0,0x90,0xF1,0x54,0xF0,0x90,
+ 0x41,0xB7,0xE0,0x90,0xF1,0x55,0xF0,0x90,
+ 0x41,0xB8,0xE0,0x90,0xF1,0x52,0xF0,0x90,
+ 0x41,0xB9,0xE0,0x90,0xF1,0x53,0xF0,0x90,
+ 0xF1,0x93,0xE4,0xF0,0x90,0xF1,0x69,0x74,
+ 0x08,0xF0,0x90,0xF1,0x5F,0x74,0x02,0xF0,
+ 0x90,0xF1,0x4E,0x74,0x40,0xF0,0x74,0xFF,
+ 0xF0,0x90,0xF1,0x85,0xE4,0xF0,0x90,0xF1,
+ 0x2F,0x04,0xF0,0x90,0xFD,0x02,0xF0,0x90,
+ 0xFD,0x0F,0x74,0x07,0xF0,0x90,0xF7,0x0F,
+ 0xE4,0xF0,0x90,0xF7,0x8A,0x74,0x0F,0xF0,
+ 0x90,0xF7,0x98,0x74,0x0D,0xF0,0x90,0xF7,
+ 0x8B,0x74,0x01,0xF0,0x90,0xFD,0x29,0xE4,
+ 0xF0,0x90,0xFD,0xA5,0xF0,0x90,0xF5,0x52,
+ 0x74,0x3F,0xF0,0xA3,0x74,0x05,0xF0,0x90,
+ 0x44,0x9A,0x74,0x0A,0xF0,0x90,0xF0,0x71,
+ 0x74,0x01,0xF0,0x90,0xF7,0x15,0xF0,0x90,
+ 0xF9,0x0E,0xF0,0x90,0xF5,0x06,0x74,0x04,
+ 0xF0,0x90,0xF7,0x3C,0xE0,0x70,0x04,0x90,
+ 0xF7,0x2F,0xF0,0x12,0x9C,0x73,0x90,0xF7,
+ 0x34,0xE4,0xF0,0x90,0xF7,0x33,0xF0,0x90,
+ 0xF7,0x35,0x74,0x05,0xF0,0xA3,0xF0,0x90,
+ 0xF7,0x39,0x74,0xFF,0xF0,0xA3,0x74,0x9C,
+ 0xF0,0x90,0xF7,0x7E,0x74,0x01,0xF0,0x90,
+ 0xFD,0x00,0xF0,0x90,0xFD,0x90,0x74,0x03,
+ 0xF0,0x90,0xF2,0x17,0x74,0xFE,0xF0,0x90,
+ 0xF0,0x42,0x04,0xF0,0xA3,0xF0,0xA3,0x74,
+ 0x07,0xF0,0xA3,0xF0,0x90,0xF7,0x74,0x74,
+ 0x01,0xF0,0x90,0xF7,0x6A,0xF0,0x12,0x4D,
+ 0x1F,0x90,0xF7,0x3E,0x74,0x01,0xF0,0x90,
+ 0xF7,0x3C,0xE0,0x70,0x0B,0x90,0x44,0x98,
+ 0xF0,0xD2,0xEA,0x90,0xF7,0x76,0x04,0xF0,
+ 0x90,0xF7,0x37,0x74,0xDC,0xF0,0xA3,0x74,
+ 0x05,0xF0,0x90,0xFD,0xA2,0xE4,0xF0,0xA3,
+ 0xF0,0xA3,0x74,0x05,0xF0,0x90,0xF5,0x4D,
+ 0x74,0x01,0xF0,0x90,0xF5,0x41,0xE4,0xF0,
+ 0xA3,0x74,0x02,0xF0,0x90,0xF6,0x5C,0xE4,
+ 0xF0,0xA3,0xF0,0x90,0xF0,0x5F,0x04,0xF0,
+ 0x90,0x42,0x0E,0xE0,0x90,0xF0,0x06,0xF0,
+ 0x90,0xF0,0x58,0xE4,0xF0,0xF0,0x90,0x42,
+ 0x2F,0xF0,0x90,0x42,0x3C,0x74,0xFF,0xF0,
+ 0x90,0x44,0x47,0xF0,0x90,0x44,0x40,0xF0,
+ 0x90,0xFD,0x29,0xE4,0xF0,0x90,0xF9,0xE5,
+ 0x74,0x1E,0xF0,0xA3,0x74,0x05,0xF0,0xA3,
+ 0xE4,0xF0,0x90,0x42,0x41,0x74,0xFF,0xF0,
+ 0x22,0x90,0xFD,0x15,0x74,0x08,0xF0,0xA3,
+ 0x74,0x10,0xF0,0xA3,0xE4,0xF0,0x90,0xFD,
+ 0x05,0x04,0xF0,0x90,0xFD,0x2B,0xF0,0x90,
+ 0xFD,0x2A,0xF0,0x90,0x42,0x6E,0xEF,0xF0,
+ 0xE4,0x90,0x42,0x3D,0xF0,0x90,0xFD,0x29,
+ 0xF0,0x90,0xFD,0x2C,0x04,0xF0,0xFF,0x12,
+ 0x6D,0xE8,0x90,0xFD,0x2C,0xE4,0xF0,0x22,
+ 0x90,0xF4,0xC1,0xE0,0x14,0x60,0x46,0x14,
+ 0x60,0x7C,0x24,0x02,0x60,0x03,0x02,0x51,
+ 0xED,0x90,0xFD,0x19,0x74,0xCA,0xF0,0xA3,
+ 0x74,0x08,0xF0,0xA3,0x74,0x4A,0xF0,0xA3,
+ 0x74,0x0A,0xF0,0xA3,0x74,0xCA,0xF0,0xA3,
+ 0x74,0x0C,0xF0,0xA3,0x74,0x4A,0xF0,0xA3,
+ 0x74,0x10,0xF0,0xA3,0x74,0xCA,0xF0,0xA3,
+ 0x74,0x14,0xF0,0xA3,0x74,0x4A,0xF0,0xA3,
+ 0x74,0x1A,0xF0,0xA3,0x74,0xCA,0xF0,0xA3,
+ 0x74,0x20,0xF0,0x80,0x6F,0x90,0xFD,0x19,
+ 0x74,0x80,0xF0,0xA3,0xE4,0xF0,0xA3,0xF0,
+ 0xA3,0x74,0x02,0xF0,0xA3,0x74,0x20,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0x74,0xE8,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0x74,0xB0,0xF0,
+ 0xA3,0x74,0x04,0xF0,0xA3,0x74,0xDC,0xF0,
+ 0xA3,0x74,0x05,0xF0,0xA3,0x74,0x34,0xF0,
+ 0xA3,0x74,0x08,0xF0,0x80,0x36,0x90,0xFD,
+ 0x19,0x74,0x7D,0xF0,0xA3,0xE4,0xF0,0xA3,
+ 0x74,0xB4,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,
+ 0xC8,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0xFA,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x2C,0xF0,
+ 0xA3,0x74,0x01,0xF0,0xA3,0x74,0x52,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0x74,0x34,0xF0,
+ 0xA3,0x74,0x08,0xF0,0xE4,0xFD,0xED,0x75,
+ 0xF0,0x02,0xA4,0x24,0x19,0xFF,0xE5,0xF0,
+ 0x34,0xFD,0xFE,0x8F,0x82,0xF5,0x83,0xE0,
+ 0xF9,0xA3,0xE0,0xFC,0x90,0xF9,0x00,0xE0,
+ 0x70,0x18,0xEC,0x54,0x0F,0xFB,0xC4,0x54,
+ 0xF0,0xFB,0xE9,0xC4,0x54,0x0F,0x4B,0x8F,
+ 0x82,0x8E,0x83,0xF0,0xEC,0xC4,0x54,0x0F,
+ 0xA3,0xF0,0x90,0xF9,0x00,0xE0,0x64,0x02,
+ 0x70,0x1D,0xEC,0x54,0x0F,0xFB,0x25,0xE0,
+ 0x25,0xE0,0xFB,0xAA,0x01,0xEA,0x13,0x13,
+ 0x54,0x3F,0x4B,0x8F,0x82,0x8E,0x83,0xF0,
+ 0xEC,0x13,0x13,0x54,0x3F,0xA3,0xF0,0x0D,
+ 0xED,0xB4,0x07,0xA2,0x22,0x90,0xF5,0xC8,
+ 0xE4,0xF0,0x90,0xF5,0x75,0xF0,0x90,0xF5,
+ 0x74,0xF0,0x90,0xF1,0xD0,0xF0,0xA3,0xF0,
+ 0xA3,0xF0,0x90,0xF5,0x6E,0x74,0x0A,0xF0,
+ 0x90,0xF5,0x71,0x74,0x02,0xF0,0xA3,0x74,
+ 0x27,0xF0,0xA3,0xE4,0xF0,0x90,0x42,0x43,
+ 0xE0,0x64,0x01,0x60,0x03,0x02,0x53,0x06,
+ 0x90,0xF5,0xF7,0xE0,0xFE,0x90,0xF5,0xF6,
+ 0xE0,0x7C,0x00,0x24,0x00,0xFF,0xEC,0x3E,
+ 0xFE,0xEF,0x78,0x06,0xCE,0xC3,0x13,0xCE,
+ 0x13,0xD8,0xF9,0x90,0x42,0x6F,0xF0,0x90,
+ 0xF9,0x00,0xE0,0xB4,0x01,0x0C,0x90,0x42,
+ 0x6F,0xE0,0xFF,0x13,0x13,0x54,0x3F,0xF0,
+ 0x80,0x0F,0x90,0xF9,0x00,0xE0,0xB4,0x02,
+ 0x08,0x90,0x42,0x6F,0xE0,0xFF,0xC3,0x13,
+ 0xF0,0x90,0x42,0x6F,0xE0,0xFF,0xC3,0x94,
+ 0x04,0x40,0x05,0x74,0x03,0xF0,0x80,0x21,
+ 0xEF,0xC3,0x94,0x02,0x40,0x08,0x90,0x42,
+ 0x6F,0x74,0x02,0xF0,0x80,0x13,0xEF,0xC3,
+ 0x94,0x01,0x40,0x08,0x90,0x42,0x6F,0x74,
+ 0x01,0xF0,0x80,0x05,0xE4,0x90,0x42,0x6F,
+ 0xF0,0x90,0x42,0x6F,0xE0,0xFF,0x90,0xF9,
+ 0x01,0xE0,0xC3,0x9F,0x50,0x0F,0xE0,0x90,
+ 0x42,0x6F,0xF0,0x80,0x08,0x90,0xF9,0x01,
+ 0xE0,0x90,0x42,0x6F,0xF0,0x90,0x42,0x6F,
+ 0xE0,0x14,0x60,0x0F,0x14,0x60,0x11,0x14,
+ 0x60,0x13,0x24,0x03,0x70,0x12,0x12,0x53,
+ 0x52,0x80,0x0D,0x12,0x54,0x6F,0x80,0x08,
+ 0x12,0x55,0x88,0x80,0x03,0x12,0x56,0xAC,
+ 0x90,0xF9,0x01,0xE0,0x14,0x60,0x0E,0x14,
+ 0x60,0x0F,0x14,0x60,0x10,0x24,0x03,0x70,
+ 0x0F,0x12,0x54,0x07,0x22,0x12,0x55,0x20,
+ 0x22,0x12,0x56,0x48,0x22,0x12,0x57,0x5E,
+ 0x22,0x90,0xF5,0x76,0x74,0x20,0xF0,0xA3,
+ 0x74,0x01,0xF0,0xA3,0x74,0x22,0xF0,0xA3,
+ 0x74,0x02,0xF0,0xA3,0x74,0xFF,0xF0,0xA3,
+ 0x74,0x01,0xF0,0xA3,0x74,0x7E,0xF0,0xA3,
+ 0x74,0x02,0xF0,0xA3,0x74,0xA0,0xF0,0xA3,
+ 0xE4,0xF0,0xA3,0x74,0x51,0xF0,0xA3,0xE4,
+ 0xF0,0xA3,0xF0,0xA3,0x74,0x03,0xF0,0xA3,
+ 0x74,0x40,0xF0,0xA3,0x74,0x01,0xF0,0xA3,
+ 0x74,0xED,0xF0,0xA3,0x74,0x02,0xF0,0xA3,
+ 0x74,0xA1,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,
+ 0xDF,0xF0,0xA3,0x74,0x03,0xF0,0xA3,0x74,
+ 0xC1,0xF0,0xA3,0x74,0x03,0xF0,0xA3,0x74,
+ 0x68,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x9F,
+ 0xF0,0xA3,0x74,0x03,0xF0,0xA3,0x74,0x3E,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0xE8,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0x74,0xFF,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0x74,0x0A,0xF0,
+ 0xA3,0xE4,0xF0,0x90,0xF9,0x00,0xE0,0x70,
+ 0x0A,0x90,0xF5,0x9E,0x74,0x3F,0xF0,0xA3,
+ 0xE4,0xF0,0x22,0x90,0xF9,0x00,0xE0,0xB4,
+ 0x01,0x0A,0x90,0xF5,0x9E,0x74,0xFB,0xF0,
+ 0xA3,0xE4,0xF0,0x22,0x90,0xF5,0x9E,0x74,
+ 0x7D,0xF0,0xA3,0xE4,0xF0,0x22,0x90,0xF5,
+ 0x6C,0x74,0x40,0xF0,0xA3,0x74,0x07,0xF0,
+ 0x90,0xF9,0x00,0xE0,0x70,0x16,0x90,0xF5,
+ 0x6A,0xF0,0xA3,0x74,0x05,0xF0,0x90,0xF5,
+ 0x70,0x74,0x03,0xF0,0x90,0xF5,0x6F,0x74,
+ 0x01,0xF0,0x80,0x32,0x90,0xF9,0x00,0xE0,
+ 0xB4,0x01,0x16,0x90,0xF5,0x6A,0xE4,0xF0,
+ 0xA3,0x74,0x04,0xF0,0x90,0xF5,0x70,0x04,
+ 0xF0,0x90,0xF5,0x6F,0x74,0x03,0xF0,0x80,
+ 0x15,0x90,0xF5,0x6A,0xE4,0xF0,0xA3,0x74,
+ 0x0A,0xF0,0x90,0xF5,0x70,0x74,0x04,0xF0,
+ 0x90,0xF5,0x6F,0x74,0x02,0xF0,0x90,0xFD,
+ 0x27,0x74,0x03,0xF0,0x90,0xFD,0x31,0x74,
+ 0x40,0xF0,0xA3,0xE4,0xF0,0x22,0x90,0xF5,
+ 0x76,0x74,0x72,0xF0,0xA3,0x74,0x01,0xF0,
+ 0xA3,0xF0,0xA3,0x04,0xF0,0xA3,0x74,0x5C,
+ 0xF0,0xA3,0x74,0x01,0xF0,0xA3,0xE4,0xF0,
+ 0xA3,0xF0,0xA3,0x74,0xCD,0xF0,0xA3,0x74,
+ 0x02,0xF0,0xA3,0x74,0x8E,0xF0,0xA3,0x74,
+ 0x01,0xF0,0xA3,0x04,0xF0,0xA3,0x04,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0xF0,0xA3,0x74,0xC3,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x16,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0x74,0x89,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,
+ 0x74,0xA9,0xF0,0xA3,0x74,0x03,0xF0,0xA3,
+ 0x74,0x5D,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,
+ 0xD0,0xF0,0xA3,0x74,0x03,0xF0,0xA3,0xE4,
+ 0xF0,0xA3,0xF0,0xA3,0x74,0x15,0xF0,0xA3,
+ 0xE4,0xF0,0xA3,0x74,0xEF,0xF0,0xA3,0x74,
+ 0x03,0xF0,0x90,0xF5,0x6C,0x74,0x80,0xF0,
+ 0xA3,0x74,0x06,0xF0,0x90,0xF9,0x00,0xE0,
+ 0x70,0x0A,0x90,0xF5,0x9E,0x74,0x3F,0xF0,
+ 0xA3,0xE4,0xF0,0x22,0x90,0xF9,0x00,0xE0,
+ 0xB4,0x01,0x0A,0x90,0xF5,0x9E,0x74,0xFB,
+ 0xF0,0xA3,0xE4,0xF0,0x22,0x90,0xF5,0x9E,
+ 0x74,0x7D,0xF0,0xA3,0xE4,0xF0,0x22,0x90,
+ 0xF5,0x6C,0x74,0x80,0xF0,0xA3,0x74,0x06,
+ 0xF0,0x90,0xF9,0x00,0xE0,0x70,0x16,0x90,
+ 0xF5,0x6A,0xF0,0xA3,0x74,0x0A,0xF0,0x90,
+ 0xF5,0x70,0x74,0x04,0xF0,0x90,0xF5,0x6F,
+ 0x74,0x02,0xF0,0x80,0x32,0x90,0xF9,0x00,
+ 0xE0,0xB4,0x01,0x17,0x90,0xF5,0x6A,0xE4,
+ 0xF0,0xA3,0x74,0x08,0xF0,0x90,0xF5,0x70,
+ 0x74,0x06,0xF0,0x90,0xF5,0x6F,0x74,0x04,
+ 0xF0,0x80,0x14,0x90,0xF5,0x6A,0xE4,0xF0,
+ 0xA3,0x74,0x04,0xF0,0x90,0xF5,0x70,0x04,
+ 0xF0,0x90,0xF5,0x6F,0x74,0x03,0xF0,0x90,
+ 0xFD,0x27,0x74,0x04,0xF0,0x90,0xFD,0x31,
+ 0x74,0x80,0xF0,0xA3,0xE4,0xF0,0x22,0x90,
+ 0xF5,0x76,0x74,0xFF,0xF0,0xA3,0x74,0x01,
+ 0xF0,0xA3,0x74,0x9E,0xF0,0xA3,0x74,0x03,
+ 0xF0,0xA3,0x74,0x31,0xF0,0xA3,0x74,0x02,
+ 0xF0,0xA3,0x74,0xB0,0xF0,0xA3,0xE4,0xF0,
+ 0xA3,0x74,0x7B,0xF0,0xA3,0x74,0x01,0xF0,
+ 0xA3,0x74,0x25,0xF0,0xA3,0x74,0x03,0xF0,
+ 0xA3,0x74,0xEC,0xF0,0xA3,0x74,0x02,0xF0,
+ 0xA3,0x74,0xE1,0xF0,0xA3,0xE4,0xF0,0xA3,
+ 0x74,0xB0,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,
+ 0x3A,0xF0,0xA3,0x74,0x03,0xF0,0xA3,0x74,
+ 0xA2,0xF0,0xA3,0x74,0x03,0xF0,0xA3,0x74,
+ 0x97,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x26,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x9C,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0x74,0xF9,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0x74,0x37,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0x74,0xFC,0xF0,0xA3,
+ 0x74,0x03,0xF0,0xA3,0x74,0xE8,0xF0,0xA3,
+ 0x74,0x03,0xF0,0x90,0xF5,0x6C,0xE4,0xF0,
+ 0xA3,0x74,0x05,0xF0,0x90,0xF9,0x00,0xE0,
+ 0x70,0x0A,0x90,0xF5,0x9E,0x74,0x19,0xF0,
+ 0xA3,0xE4,0xF0,0x22,0x90,0xF9,0x00,0xE0,
+ 0xB4,0x01,0x0A,0x90,0xF5,0x9E,0x74,0x65,
+ 0xF0,0xA3,0xE4,0xF0,0x22,0x90,0xF5,0x9E,
+ 0x74,0x65,0xF0,0xA3,0xE4,0xF0,0x22,0x90,
+ 0xF5,0x6C,0xE4,0xF0,0xA3,0x74,0x05,0xF0,
+ 0x90,0xF9,0x00,0xE0,0x70,0x15,0x90,0xF5,
+ 0x6A,0xF0,0xA3,0x74,0x04,0xF0,0x90,0xF5,
+ 0x70,0x04,0xF0,0x90,0xF5,0x6F,0x74,0x03,
+ 0xF0,0x80,0x31,0x90,0xF9,0x00,0xE0,0xB4,
+ 0x01,0x15,0x90,0xF5,0x6A,0xE4,0xF0,0xA3,
+ 0xF0,0x90,0xF5,0x70,0x74,0x07,0xF0,0x90,
+ 0xF5,0x6F,0x74,0x05,0xF0,0x80,0x15,0x90,
+ 0xF5,0x6A,0xE4,0xF0,0xA3,0x74,0x08,0xF0,
+ 0x90,0xF5,0x70,0x74,0x06,0xF0,0x90,0xF5,
+ 0x6F,0x74,0x04,0xF0,0x90,0xFD,0x27,0x74,
+ 0x07,0xF0,0x90,0xFD,0x31,0xE4,0xF0,0xA3,
+ 0x04,0xF0,0x22,0x90,0xF5,0x76,0x74,0x06,
+ 0xF0,0xA3,0x74,0x01,0xF0,0xA3,0x74,0xC1,
+ 0xF0,0xA3,0x74,0x01,0xF0,0xA3,0x74,0xFF,
+ 0xF0,0xA3,0x74,0x01,0xF0,0xA3,0x74,0xB8,
+ 0xF0,0xA3,0x74,0x01,0xF0,0xA3,0x74,0x0C,
+ 0xF0,0xA3,0x74,0x01,0xF0,0xA3,0x74,0x36,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x79,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0xF0,0xA3,0xF0,
+ 0xA3,0x74,0xE7,0xF0,0xA3,0x74,0x02,0xF0,
+ 0xA3,0x74,0x18,0xF0,0xA3,0x74,0x03,0xF0,
+ 0xA3,0x74,0x74,0xF0,0xA3,0x74,0x03,0xF0,
+ 0xA3,0x74,0xD6,0xF0,0xA3,0x74,0x03,0xF0,
+ 0xA3,0x74,0x1E,0xF0,0xA3,0xE4,0xF0,0xA3,
+ 0x74,0x41,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,
+ 0x43,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x30,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x18,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0x74,0x07,0xF0,0xA3,
+ 0xE4,0xF0,0x90,0xF9,0x00,0xE0,0x70,0x0A,
+ 0x90,0xF5,0x9E,0x74,0x19,0xF0,0xA3,0xE4,
+ 0xF0,0x22,0x90,0xF9,0x00,0xE0,0xB4,0x01,
+ 0x0A,0x90,0xF5,0x9E,0x74,0x65,0xF0,0xA3,
+ 0xE4,0xF0,0x22,0x90,0xF5,0x9E,0x74,0x32,
+ 0xF0,0xA3,0xE4,0xF0,0x22,0x90,0xF5,0x6C,
+ 0xE4,0xF0,0xA3,0x74,0x02,0xF0,0x90,0xF9,
+ 0x00,0xE0,0x70,0x16,0x90,0xF5,0x6A,0xF0,
+ 0xA3,0x74,0x08,0xF0,0x90,0xF5,0x70,0x74,
+ 0x04,0xF0,0x90,0xF5,0x6F,0x74,0x02,0xF0,
+ 0x80,0x2F,0x90,0xF9,0x00,0xE0,0xB4,0x01,
+ 0x15,0x90,0xF5,0x6A,0xE4,0xF0,0xA3,0xF0,
+ 0x90,0xF5,0x70,0x74,0x06,0xF0,0x90,0xF5,
+ 0x6F,0x74,0x04,0xF0,0x80,0x13,0x90,0xF5,
+ 0x6A,0xE4,0xF0,0xA3,0xF0,0x90,0xF5,0x70,
+ 0x74,0x05,0xF0,0x90,0xF5,0x6F,0x74,0x03,
+ 0xF0,0x90,0xFD,0x27,0x74,0x07,0xF0,0x90,
+ 0xFD,0x31,0xE4,0xF0,0xA3,0x74,0x02,0xF0,
+ 0x22,0xE4,0x90,0x42,0x77,0xF0,0xA3,0xF0,
+ 0x90,0x42,0x7B,0xF0,0xA3,0x04,0xF0,0xE4,
+ 0x90,0x42,0x8D,0xF0,0x90,0xF5,0xAD,0xF0,
+ 0x90,0x42,0x75,0xF0,0xA3,0xF0,0x90,0x42,
+ 0x75,0xE0,0xFE,0xA3,0xE0,0xFF,0xC3,0x94,
+ 0x03,0xEE,0x94,0x00,0x40,0x03,0x02,0x59,
+ 0x62,0xEF,0x4E,0x70,0x22,0x90,0xF4,0x61,
+ 0xF0,0x90,0xF4,0x60,0xF0,0x90,0xF4,0x64,
+ 0x74,0x02,0xF0,0x90,0xF4,0x63,0x74,0x06,
+ 0xF0,0x90,0x43,0x80,0xE0,0x60,0x5A,0x90,
+ 0xF4,0x63,0x74,0x07,0xF0,0x80,0x52,0x90,
+ 0x42,0x75,0xE0,0x70,0x04,0xA3,0xE0,0x64,
+ 0x01,0x70,0x22,0x90,0xF4,0x61,0x74,0x02,
+ 0xF0,0x90,0xF4,0x60,0xF0,0x90,0xF4,0x6C,
+ 0xF0,0x90,0xF4,0x6B,0x74,0x04,0xF0,0x90,
+ 0x43,0x80,0xE0,0x60,0x2C,0x90,0xF4,0x6B,
+ 0x74,0x07,0xF0,0x80,0x24,0x90,0xF4,0x61,
+ 0x74,0x01,0xF0,0x90,0xF4,0x60,0x74,0x04,
+ 0xF0,0x90,0xF4,0x68,0x74,0x02,0xF0,0x90,
+ 0xF4,0x65,0x74,0x05,0xF0,0x90,0x43,0x80,
+ 0xE0,0x60,0x06,0x90,0xF4,0x65,0x74,0x07,
+ 0xF0,0x90,0xF5,0xAC,0x74,0x01,0xF0,0x90,
+ 0xF5,0xAE,0xE0,0xB4,0x01,0xF9,0x90,0xF5,
+ 0xAE,0x74,0x01,0xF0,0x90,0xF4,0x6F,0xE0,
+ 0xFE,0x90,0xF4,0x6E,0xE0,0xFD,0xEE,0xED,
+ 0xFF,0x90,0x42,0x79,0xEE,0xF0,0xA3,0xEF,
+ 0xF0,0x90,0xF4,0x73,0xE0,0xFE,0x90,0xF4,
+ 0x72,0xE0,0xFD,0xEE,0xED,0xFF,0x90,0x42,
+ 0x7D,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x42,
+ 0x7B,0xE0,0xFE,0xA3,0xE0,0xFF,0xFB,0xAA,
+ 0x06,0xE4,0xF9,0xF8,0x90,0x42,0x79,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0xE4,0xFC,0xFD,0x12,
+ 0xA9,0xD1,0xC0,0x04,0xC0,0x05,0xC0,0x06,
+ 0xC0,0x07,0x90,0x42,0x7D,0xE0,0xFE,0xA3,
+ 0xE0,0xFF,0xFB,0xAA,0x06,0xE4,0xF9,0xF8,
+ 0x90,0x42,0x77,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0xE4,0xFC,0xFD,0x12,0xA9,0xD1,0xA8,0x04,
+ 0xA9,0x05,0xAA,0x06,0xAB,0x07,0xD0,0x07,
+ 0xD0,0x06,0xD0,0x05,0xD0,0x04,0xC3,0x12,
+ 0xAA,0x44,0x50,0x4F,0x90,0x42,0x79,0xE0,
+ 0xFF,0xA3,0xE0,0x90,0x42,0x77,0xCF,0xF0,
+ 0xA3,0xEF,0xF0,0x90,0x42,0x7D,0xE0,0xFF,
+ 0xA3,0xE0,0x90,0x42,0x7B,0xCF,0xF0,0xA3,
+ 0xEF,0xF0,0x90,0xF4,0x74,0xE0,0x90,0x42,
+ 0x71,0xF0,0x90,0xF4,0x75,0xE0,0x90,0x42,
+ 0x72,0xF0,0x90,0xF4,0x76,0xE0,0x90,0x42,
+ 0x73,0xF0,0x90,0xF4,0x77,0xE0,0x90,0x42,
+ 0x74,0xF0,0x90,0x42,0x76,0xE0,0x25,0xE0,
+ 0xFF,0x90,0x42,0x75,0xE0,0x33,0x90,0x42,
+ 0x8D,0xEF,0xF0,0x90,0xF5,0xAC,0xE4,0xF0,
+ 0x90,0x42,0x76,0xE0,0x04,0xF0,0x70,0x06,
+ 0x90,0x42,0x75,0xE0,0x04,0xF0,0x02,0x57,
+ 0xDF,0x90,0x42,0x74,0xE0,0xFF,0x90,0x42,
+ 0x73,0xE0,0xC3,0x9F,0x50,0x0D,0x90,0x42,
+ 0x70,0x74,0x03,0xF0,0x90,0x42,0x73,0xEF,
+ 0xF0,0x80,0x06,0x90,0x42,0x70,0x74,0x02,
+ 0xF0,0x90,0x42,0x72,0xE0,0xFF,0x90,0x42,
+ 0x71,0xE0,0xC3,0x9F,0x50,0x0D,0x90,0x42,
+ 0x8E,0x74,0x01,0xF0,0x90,0x42,0x71,0xEF,
+ 0xF0,0x80,0x05,0xE4,0x90,0x42,0x8E,0xF0,
+ 0x90,0x42,0x73,0xE0,0xFF,0x90,0x42,0x71,
+ 0xE0,0xC3,0x9F,0x50,0x08,0x90,0x42,0x70,
+ 0xE0,0x90,0x42,0x8E,0xF0,0x90,0x44,0x97,
+ 0xE0,0xB4,0x01,0x1F,0x90,0x44,0x99,0xE0,
+ 0xFF,0x70,0x06,0x90,0x42,0x8D,0xF0,0x80,
+ 0x12,0xEF,0xB4,0x01,0x08,0x90,0x42,0x8D,
+ 0x74,0x02,0xF0,0x80,0x06,0x90,0x42,0x8D,
+ 0x74,0x04,0xF0,0x90,0x42,0x8E,0xE0,0x90,
+ 0xF9,0x01,0xF0,0x90,0x42,0x8D,0xE0,0xFF,
+ 0x70,0x06,0x90,0xF9,0x00,0xF0,0x80,0x21,
+ 0xEF,0xC3,0x94,0x04,0x40,0x0E,0x90,0xF9,
+ 0x00,0x74,0x02,0xF0,0x90,0x42,0x8E,0xE0,
+ 0x04,0xF0,0x80,0x0D,0x90,0xF9,0x00,0x74,
+ 0x01,0xF0,0x90,0x42,0x8E,0xE0,0x24,0x02,
+ 0xF0,0x90,0x42,0x8E,0xE0,0xFD,0x12,0x5C,
+ 0x4D,0x90,0x42,0x8E,0xE0,0x24,0x06,0xFF,
+ 0x74,0x01,0x7E,0x00,0xA8,0x07,0x08,0x80,
+ 0x05,0xC3,0x33,0xCE,0x33,0xCE,0xD8,0xF9,
+ 0x24,0xF6,0xFF,0xEE,0x34,0xFF,0x90,0x42,
+ 0x75,0xF0,0xA3,0xEF,0xF0,0xE0,0x90,0xF4,
+ 0x69,0xF0,0x90,0x42,0x75,0xE0,0x90,0xF4,
+ 0x6A,0xF0,0x90,0xF4,0x6D,0x74,0x14,0xF0,
+ 0x90,0xF5,0xAC,0xE4,0xF0,0x22,0x90,0x41,
+ 0xD5,0xE0,0x60,0x6E,0x90,0xF9,0x00,0xE0,
+ 0x90,0x42,0x8D,0xF0,0x90,0xF9,0x01,0xE0,
+ 0x90,0x42,0x8E,0xF0,0x90,0x42,0x8D,0xE0,
+ 0x70,0x0A,0xA3,0xE0,0xFD,0xE4,0xFF,0x12,
+ 0x5C,0x4D,0x80,0x22,0x90,0x42,0x8D,0xE0,
+ 0xB4,0x02,0x0D,0xA3,0xE0,0x04,0xF0,0xE0,
+ 0xFD,0x7F,0x04,0x12,0x5C,0x4D,0x80,0x0E,
+ 0x90,0x42,0x8E,0xE0,0x24,0x02,0xF0,0xE0,
+ 0xFD,0x7F,0x02,0x12,0x5C,0x4D,0x90,0x42,
+ 0x8E,0xE0,0x24,0x06,0xFF,0x74,0x01,0x7E,
+ 0x00,0xA8,0x07,0x08,0x80,0x05,0xC3,0x33,
+ 0xCE,0x33,0xCE,0xD8,0xF9,0x24,0xF6,0xFF,
+ 0xEE,0x34,0xFF,0xFE,0xEF,0x90,0xF4,0x69,
+ 0xF0,0xEE,0xA3,0xF0,0x90,0xF4,0x6D,0x74,
+ 0x14,0xF0,0x90,0xF4,0x63,0x74,0x05,0xF0,
+ 0x90,0x43,0x80,0xE0,0x60,0x06,0x90,0xF4,
+ 0x63,0x74,0x07,0xF0,0x90,0xF5,0xAD,0x74,
+ 0x01,0xF0,0x90,0xF5,0xAC,0xE4,0xF0,0x04,
+ 0xF0,0x90,0xF5,0xAE,0xE0,0xB4,0x01,0xF9,
+ 0x90,0xF5,0xAE,0x74,0x01,0xF0,0x90,0xF4,
+ 0x83,0xE0,0x90,0x42,0x7F,0xF0,0x90,0xF4,
+ 0x82,0xE0,0x90,0x42,0x80,0xF0,0x90,0xF4,
+ 0x81,0xE0,0x90,0x42,0x81,0xF0,0x90,0xF4,
+ 0x80,0xE0,0x90,0x42,0x82,0xF0,0x90,0xF4,
+ 0x86,0xE0,0x30,0xE2,0x04,0x7F,0xFF,0x80,
+ 0x02,0x7F,0x00,0x90,0x42,0x83,0xEF,0xF0,
+ 0xE0,0xB4,0xFF,0x09,0x90,0xF4,0x86,0xE0,
+ 0x44,0xF8,0xFF,0x80,0x07,0x90,0xF4,0x86,
+ 0xE0,0x54,0x07,0xFF,0x90,0x42,0x84,0xEF,
+ 0xF0,0x90,0xF4,0x85,0xE0,0x90,0x42,0x85,
+ 0xF0,0x90,0xF4,0x84,0xE0,0x90,0x42,0x86,
+ 0xF0,0x90,0x42,0x8E,0xE0,0x24,0x05,0xFF,
+ 0x74,0x01,0x7E,0x00,0xA8,0x07,0x08,0x80,
+ 0x05,0xC3,0x33,0xCE,0x33,0xCE,0xD8,0xF9,
+ 0x90,0x42,0x8C,0xF0,0xEE,0x90,0x42,0x8B,
+ 0xF0,0x90,0x42,0x83,0xE0,0xF8,0xA3,0xE0,
+ 0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,0xFB,0x90,
+ 0x42,0x7F,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0x12,0xAC,0x9E,
+ 0xA8,0x04,0xA9,0x05,0xAA,0x06,0xAB,0x07,
+ 0x90,0x42,0x8B,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0xE4,0xFC,0xFD,0xEB,0x2F,0xFF,0xEA,0x3E,
+ 0xFE,0xED,0x39,0xFD,0xEC,0x38,0xFC,0x90,
+ 0x42,0x87,0x12,0xAA,0x8F,0x90,0x42,0x8C,
+ 0xE0,0x90,0xF5,0x3C,0xF0,0x90,0x42,0x8B,
+ 0xE0,0x90,0xF5,0x3D,0xF0,0xE4,0x7F,0xFF,
+ 0x7E,0x07,0xFD,0xFC,0x90,0x42,0x87,0xE0,
+ 0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,
+ 0xE0,0xFB,0xD3,0x12,0xAA,0x2E,0x40,0x0C,
+ 0x90,0x42,0x87,0x12,0xAA,0x9B,0x00,0x00,
+ 0x07,0xFF,0x80,0x26,0x7F,0x00,0x7E,0xF8,
+ 0x7D,0xFF,0x7C,0xFF,0x90,0x42,0x87,0xE0,
+ 0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,
+ 0xE0,0xFB,0xC3,0x12,0xAA,0x2E,0x50,0x0A,
+ 0x90,0x42,0x87,0x12,0xAA,0x9B,0xFF,0xFF,
+ 0xF8,0x00,0x90,0x42,0x8A,0xE0,0x90,0xF4,
+ 0x66,0xF0,0x90,0x42,0x89,0xE0,0x90,0xF4,
+ 0x67,0xF0,0x90,0xF4,0x67,0xE0,0x70,0xFA,
+ 0x90,0xF4,0x66,0xE0,0x70,0xF4,0x22,0x90,
+ 0xF4,0x71,0xE4,0xF0,0x04,0xF0,0x90,0xF5,
+ 0xAC,0xE4,0xF0,0xEF,0x70,0x05,0x12,0xA7,
+ 0x46,0x80,0x03,0x12,0x5A,0x57,0x90,0xF4,
+ 0x71,0xE4,0xF0,0x22,0x90,0xF4,0x60,0xEF,
+ 0xF0,0xA3,0xED,0xF0,0x22,0x90,0x42,0x8F,
+ 0xEE,0xF0,0xA3,0xEF,0xF0,0xA3,0xED,0xF0,
+ 0xE4,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0x90,
+ 0xF4,0x1D,0xE0,0x90,0x42,0x95,0xF0,0x90,
+ 0x42,0xA3,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x42,0x92,
+ 0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,
+ 0xA3,0xE0,0xFB,0xC3,0x12,0xAA,0x2E,0x40,
+ 0x48,0x90,0x42,0x92,0xE0,0xFC,0xA3,0xE0,
+ 0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,0x90,
+ 0x42,0xA3,0x12,0xAA,0x8F,0x90,0x42,0x8F,
+ 0xE0,0xFF,0xA3,0xE0,0x90,0x42,0xAB,0xCF,
+ 0xF0,0xA3,0xEF,0xF0,0x90,0x42,0x91,0xE0,
+ 0x70,0x10,0x90,0x42,0xA5,0xE0,0xFF,0xA3,
+ 0xE0,0x90,0x42,0xA7,0xCF,0xF0,0xA3,0xEF,
+ 0xF0,0x22,0x90,0x42,0xA5,0xE0,0xFF,0xA3,
+ 0xE0,0x90,0x42,0xA9,0xCF,0xF0,0xA3,0xEF,
+ 0xF0,0x22,0xE4,0x90,0x42,0xA7,0xF0,0xA3,
+ 0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,
+ 0xF0,0x90,0xF5,0xB3,0x04,0xF0,0x90,0xF5,
+ 0xB1,0xE4,0xF0,0x90,0xF5,0xB0,0xF0,0x90,
+ 0xF5,0xC2,0x04,0xF0,0x90,0xF5,0xB0,0xF0,
+ 0x90,0xF5,0xC2,0xE4,0xF0,0x90,0x42,0xB3,
+ 0xF0,0x90,0x42,0x9E,0xE0,0x70,0x05,0x90,
+ 0x42,0xB3,0x04,0xF0,0x90,0x42,0xA3,0x12,
+ 0xAA,0x9B,0x00,0x00,0x00,0x00,0xE4,0x90,
+ 0x42,0xB7,0xF0,0x90,0x42,0xB3,0xE0,0xFF,
+ 0x90,0x42,0xB7,0xE0,0xFE,0xD3,0x9F,0x40,
+ 0x03,0x02,0x5D,0xD8,0x90,0xF5,0xB8,0xEE,
+ 0xF0,0x90,0x42,0xB1,0xE0,0xFE,0xA3,0xE0,
+ 0xFF,0xC3,0xE4,0x9F,0xFF,0xE4,0x9E,0x90,
+ 0x42,0xB4,0xF0,0xA3,0xEF,0xF0,0x90,0x42,
+ 0xB1,0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x42,
+ 0xB4,0xE0,0xFC,0xA3,0xE0,0xFD,0xD3,0x9F,
+ 0xEE,0x64,0x80,0xF8,0xEC,0x64,0x80,0x98,
+ 0x50,0x64,0xE0,0x90,0xF4,0x11,0xF0,0xEC,
+ 0xFF,0x33,0x95,0xE0,0xA3,0xEF,0xF0,0x90,
+ 0xF5,0xB5,0x74,0x01,0xF0,0x90,0x41,0xD6,
+ 0xE0,0xB4,0x01,0x04,0x7F,0x01,0x80,0x02,
+ 0x7F,0x00,0x90,0xF5,0xB5,0xE0,0x64,0x01,
+ 0x60,0x04,0x7E,0x01,0x80,0x02,0x7E,0x00,
+ 0xEE,0x5F,0x70,0xE1,0x90,0xF5,0xB5,0xE0,
+ 0xB4,0x01,0x04,0x7F,0x01,0x80,0x02,0x7F,
+ 0x00,0x90,0x42,0xB6,0xEF,0xF0,0x90,0x42,
+ 0xB4,0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x42,
+ 0xB7,0xE0,0xFD,0x12,0x5C,0x56,0x90,0x42,
+ 0xB5,0xE0,0x04,0xF0,0x70,0x06,0x90,0x42,
+ 0xB4,0xE0,0x04,0xF0,0x80,0x80,0x90,0x42,
+ 0xB7,0xE0,0x04,0xF0,0x02,0x5D,0x24,0x90,
+ 0x42,0xA7,0xE0,0xFE,0xA3,0xE0,0xFF,0xD3,
+ 0x90,0x42,0xAA,0xE0,0x9F,0x90,0x42,0xA9,
+ 0xE0,0x9E,0x50,0x03,0x02,0x5E,0xD3,0x90,
+ 0x41,0xEB,0xE0,0x64,0x01,0xF0,0x90,0xF0,
+ 0x76,0xF0,0xE4,0x90,0x42,0xAD,0xF0,0x90,
+ 0xF1,0xB5,0xE0,0x90,0x42,0xAE,0xF0,0x90,
+ 0xF1,0xB4,0xE0,0x90,0x42,0xAF,0xF0,0x90,
+ 0xF1,0xB3,0xE0,0x90,0x42,0xB0,0xF0,0xE4,
+ 0xFF,0xFE,0x7D,0x40,0xFC,0x90,0x42,0xAD,
+ 0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,
+ 0xA3,0xE0,0xFB,0x12,0xAA,0x2E,0x40,0x23,
+ 0x90,0x42,0xAD,0xE0,0xF8,0xA3,0xE0,0xF9,
+ 0xA3,0xE0,0xFA,0xA3,0xE0,0xFB,0xE4,0x9B,
+ 0xFF,0xE4,0x9A,0xFE,0x74,0x80,0x99,0xFD,
+ 0xE4,0x98,0xFC,0x90,0x42,0xAD,0x12,0xAA,
+ 0x8F,0x80,0x17,0x90,0x42,0xAD,0xE0,0xFC,
+ 0xA3,0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,
+ 0xFF,0x12,0xAA,0x20,0x90,0x42,0xAD,0x12,
+ 0xAA,0x8F,0x90,0x42,0x9F,0xE0,0xF8,0xA3,
+ 0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,0xFB,
+ 0xC3,0xE4,0x9B,0xFF,0xE4,0x9A,0xFE,0x74,
+ 0x80,0x99,0xFD,0xE4,0x98,0xFC,0x90,0x42,
+ 0x9F,0x12,0xAA,0x8F,0x90,0xF1,0xEB,0x74,
+ 0x01,0xF0,0xE4,0xF0,0x90,0x42,0xAE,0xE0,
+ 0x90,0xF1,0xA5,0xF0,0x90,0x42,0xAF,0xE0,
+ 0x90,0xF1,0xA4,0xF0,0x90,0x42,0xB0,0xE0,
+ 0x90,0xF1,0xA3,0xF0,0x90,0xF1,0x14,0xE0,
+ 0x70,0x06,0x90,0xF1,0x10,0xE0,0x60,0x1A,
+ 0x90,0xF1,0x0E,0xE0,0xF4,0xF0,0xA3,0xE0,
+ 0xF4,0xF0,0x90,0xF1,0x12,0xE0,0xF4,0xF0,
+ 0xA3,0xE0,0xF4,0xF0,0x90,0xF1,0x0A,0x74,
+ 0x01,0xF0,0x90,0x42,0xAB,0xE0,0xFF,0x33,
+ 0x95,0xE0,0x90,0xF4,0x0D,0xEF,0xF0,0x90,
+ 0x42,0xAC,0xE0,0x90,0xF4,0x0C,0xF0,0x90,
+ 0xF5,0xB6,0x74,0x01,0xF0,0x90,0x41,0xD6,
+ 0xE0,0xB4,0x01,0x04,0x7F,0x01,0x80,0x02,
+ 0x7F,0x00,0x90,0xF5,0xB7,0xE0,0x64,0x01,
+ 0x60,0x04,0x7E,0x01,0x80,0x02,0x7E,0x00,
+ 0xEE,0x5F,0x70,0xE1,0x90,0xF5,0xB7,0xE0,
+ 0xB4,0x01,0x04,0x7F,0x01,0x80,0x02,0x7F,
+ 0x00,0x90,0x42,0xB6,0xEF,0xF0,0x90,0x42,
+ 0xB6,0xE0,0x60,0xFA,0x90,0xF5,0xB6,0xE4,
+ 0xF0,0x90,0xF5,0xC2,0x04,0xF0,0x90,0xF5,
+ 0xB0,0xE4,0xF0,0x90,0xF5,0xC2,0xF0,0x22,
+ 0x90,0xF9,0x00,0xE0,0x70,0x0A,0x90,0x42,
+ 0xB1,0xF0,0xA3,0x74,0x32,0xF0,0x80,0x1B,
+ 0x90,0xF9,0x00,0xE0,0xB4,0x01,0x0B,0x90,
+ 0x42,0xB1,0xE4,0xF0,0xA3,0x74,0xC8,0xF0,
+ 0x80,0x09,0x90,0x42,0xB1,0xE4,0xF0,0xA3,
+ 0x74,0x64,0xF0,0x12,0x5C,0xDB,0x7F,0x01,
+ 0x12,0x6D,0xE8,0x90,0x42,0xB1,0xE4,0xF0,
+ 0xA3,0x74,0x1E,0xF0,0x12,0x5C,0xDB,0x90,
+ 0xF4,0x0C,0xE0,0x60,0x4E,0x90,0xF1,0xEB,
+ 0x74,0x01,0xF0,0xE4,0xF0,0x90,0xF9,0x00,
+ 0xE0,0x70,0x0A,0x90,0x42,0xB1,0xF0,0xA3,
+ 0x74,0x96,0xF0,0x80,0x1D,0x90,0xF9,0x00,
+ 0xE0,0xB4,0x01,0x0C,0x90,0x42,0xB1,0x74,
+ 0x02,0xF0,0xA3,0x74,0x58,0xF0,0x80,0x0A,
+ 0x90,0x42,0xB1,0x74,0x01,0xF0,0xA3,0x74,
+ 0x2C,0xF0,0x7F,0x01,0x12,0x6D,0xE8,0x12,
+ 0x5C,0xDB,0x90,0x42,0xB1,0xE4,0xF0,0xA3,
+ 0x74,0x1E,0xF0,0x7F,0x01,0x12,0x6D,0xE8,
+ 0x12,0x5C,0xDB,0x90,0xF4,0x0C,0xE0,0x60,
+ 0x10,0x90,0x41,0xDC,0x74,0x02,0xF0,0x90,
+ 0xF2,0x1C,0xF0,0xE4,0x90,0x43,0x3D,0xF0,
+ 0x22,0x90,0x41,0xDC,0x74,0x01,0xF0,0x90,
+ 0xF2,0x1C,0xF0,0x90,0x43,0x3D,0xF0,0xE4,
+ 0x90,0x42,0xAD,0xF0,0x90,0xF1,0xB5,0xE0,
+ 0x90,0x42,0xAE,0xF0,0x90,0xF1,0xB4,0xE0,
+ 0x90,0x42,0xAF,0xF0,0x90,0xF1,0xB3,0xE0,
+ 0x90,0x42,0xB0,0xF0,0x90,0x42,0xAD,0xE0,
+ 0xFC,0xA3,0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,
+ 0xE0,0xFF,0x90,0x42,0x9F,0xE0,0xF8,0xA3,
+ 0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,0xFB,
+ 0xC3,0xEF,0x9B,0xFF,0xEE,0x9A,0xFE,0xED,
+ 0x99,0xFD,0xEC,0x98,0xFC,0x90,0x42,0xAD,
+ 0x12,0xAA,0x8F,0x7F,0xFF,0x7E,0xFF,0x7D,
+ 0x3F,0x7C,0x00,0x90,0x42,0xAD,0xE0,0xF8,
+ 0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,
+ 0xFB,0xD3,0x12,0xAA,0x2E,0x40,0x21,0x90,
+ 0x42,0xAD,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,
+ 0xE0,0xFE,0xA3,0xE0,0x24,0x00,0xFF,0xE4,
+ 0x3E,0xFE,0xED,0x34,0x80,0xFD,0xEC,0x34,
+ 0xFF,0xFC,0x90,0x42,0xAD,0x12,0xAA,0x8F,
+ 0x90,0x42,0xAD,0xE0,0xFC,0xA3,0xE0,0xFD,
+ 0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,0x78,0x09,
+ 0x12,0xAA,0x68,0x90,0x42,0xAD,0x12,0xAA,
+ 0x8F,0x90,0x43,0x82,0xE0,0x60,0x04,0x7F,
+ 0x01,0x80,0x02,0x7F,0x00,0x90,0x42,0x23,
+ 0xE0,0x5F,0x70,0x0F,0x90,0xF1,0x33,0xE0,
+ 0x70,0x09,0x90,0xF1,0x35,0xE0,0x70,0x03,
+ 0x02,0x62,0x53,0xE4,0x90,0x42,0x9F,0xF0,
+ 0xA3,0xF0,0x90,0xF1,0x0F,0xE0,0x90,0x42,
+ 0xA1,0xF0,0x90,0xF1,0x0E,0xE0,0x90,0x42,
+ 0xA2,0xF0,0x90,0x42,0x9F,0xE0,0xFC,0xA3,
+ 0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0x90,0x42,0xAD,0xE0,0xF8,0xA3,0xE0,0xF9,
+ 0xA3,0xE0,0xFA,0xA3,0xE0,0x2F,0xFF,0xEA,
+ 0x3E,0xFE,0xE9,0x3D,0xFD,0xE8,0x3C,0xFC,
+ 0x90,0x42,0x9F,0x12,0xAA,0x8F,0xE4,0xFF,
+ 0x7E,0x40,0xFD,0xFC,0x90,0x42,0x9F,0xE0,
+ 0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,
+ 0xE0,0xFB,0xC3,0x12,0xAA,0x2E,0x40,0x24,
+ 0x90,0x42,0x9F,0xE0,0xFC,0xA3,0xE0,0xFD,
+ 0xA3,0xE0,0xFE,0xA3,0xE0,0x24,0x00,0xFF,
+ 0xEE,0x34,0xC0,0xFE,0xED,0x34,0xFF,0xFD,
+ 0xEC,0x34,0xFF,0xFC,0x90,0x42,0x9F,0x12,
+ 0xAA,0x8F,0x80,0x39,0xE4,0xFF,0xFE,0xFD,
+ 0xFC,0x90,0x42,0x9F,0xE0,0xF8,0xA3,0xE0,
+ 0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,0xFB,0xC3,
+ 0x12,0xAA,0x2E,0x50,0x20,0x90,0x42,0x9F,
+ 0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,0xE0,0xFE,
+ 0xA3,0xE0,0x24,0x00,0xFF,0xEE,0x34,0x40,
+ 0xFE,0xE4,0x3D,0xFD,0xE4,0x3C,0xFC,0x90,
+ 0x42,0x9F,0x12,0xAA,0x8F,0x90,0x42,0xA2,
+ 0xE0,0x90,0xF1,0x0E,0xF0,0x90,0x42,0xA1,
+ 0xE0,0x90,0xF1,0x0F,0xF0,0xE4,0x90,0x42,
+ 0x9F,0xF0,0xA3,0xF0,0x90,0xF1,0x13,0xE0,
+ 0x90,0x42,0xA1,0xF0,0x90,0xF1,0x12,0xE0,
+ 0x90,0x42,0xA2,0xF0,0x90,0x42,0x9F,0xE0,
+ 0xFC,0xA3,0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,
+ 0xE0,0xFF,0x90,0x42,0xAD,0xE0,0xF8,0xA3,
+ 0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,0x2F,
+ 0xFF,0xEA,0x3E,0xFE,0xE9,0x3D,0xFD,0xE8,
+ 0x3C,0xFC,0x90,0x42,0x9F,0x12,0xAA,0x8F,
+ 0xE4,0xFF,0x7E,0x40,0xFD,0xFC,0x90,0x42,
+ 0x9F,0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,
+ 0xFA,0xA3,0xE0,0xFB,0xC3,0x12,0xAA,0x2E,
+ 0x40,0x24,0x90,0x42,0x9F,0xE0,0xFC,0xA3,
+ 0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,0x24,
+ 0x00,0xFF,0xEE,0x34,0xC0,0xFE,0xED,0x34,
+ 0xFF,0xFD,0xEC,0x34,0xFF,0xFC,0x90,0x42,
+ 0x9F,0x12,0xAA,0x8F,0x80,0x39,0xE4,0xFF,
+ 0xFE,0xFD,0xFC,0x90,0x42,0x9F,0xE0,0xF8,
+ 0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,
+ 0xFB,0xC3,0x12,0xAA,0x2E,0x50,0x20,0x90,
+ 0x42,0x9F,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,
+ 0xE0,0xFE,0xA3,0xE0,0x24,0x00,0xFF,0xEE,
+ 0x34,0x40,0xFE,0xE4,0x3D,0xFD,0xE4,0x3C,
+ 0xFC,0x90,0x42,0x9F,0x12,0xAA,0x8F,0x90,
+ 0x42,0xA2,0xE0,0x90,0xF1,0x12,0xF0,0x90,
+ 0x42,0xA1,0xE0,0x90,0xF1,0x13,0xF0,0x90,
+ 0x43,0x80,0xE0,0x70,0x05,0x90,0xF1,0x0A,
+ 0x04,0xF0,0xE4,0x90,0x42,0x9F,0xF0,0x90,
+ 0xF1,0xB5,0xE0,0x90,0x42,0xA0,0xF0,0x90,
+ 0xF1,0xB4,0xE0,0x90,0x42,0xA1,0xF0,0x90,
+ 0xF1,0xB3,0xE0,0x90,0x42,0xA2,0xF0,0x22,
+ 0x90,0x42,0x98,0xE0,0x70,0x1A,0xA3,0xE0,
+ 0x64,0x0C,0x60,0x05,0xE0,0x64,0x0D,0x70,
+ 0x22,0x90,0xF4,0x1B,0xE0,0xB4,0x0A,0x1B,
+ 0x90,0x42,0x98,0x74,0x01,0xF0,0x80,0x13,
+ 0x90,0x42,0x99,0xE0,0xB4,0x0C,0x0C,0x90,
+ 0xF4,0x1C,0xE0,0xB4,0x0A,0x05,0xE4,0x90,
+ 0x42,0x98,0xF0,0x90,0x42,0x98,0xE0,0xB4,
+ 0x01,0x19,0xA3,0xE0,0xB4,0x0C,0x14,0x90,
+ 0xF5,0xBA,0xE0,0xB4,0x01,0x0D,0x90,0x42,
+ 0x99,0x74,0x03,0xF0,0x90,0xF4,0x19,0xF0,
+ 0x02,0x63,0x75,0x90,0x42,0x98,0xE0,0xB4,
+ 0x01,0x0F,0xA3,0xE0,0xB4,0x0D,0x0A,0x74,
+ 0x03,0xF0,0x90,0xF4,0x19,0xF0,0x02,0x63,
+ 0x75,0x90,0x42,0x98,0xE0,0x70,0x15,0xA3,
+ 0xE0,0xB4,0x0C,0x10,0x90,0xF5,0xBA,0xE0,
+ 0xB4,0x01,0x09,0x90,0xF4,0x19,0x74,0x0C,
+ 0xF0,0x02,0x63,0x75,0x90,0x42,0x98,0xE0,
+ 0x70,0x16,0xA3,0xE0,0xB4,0x0C,0x11,0x90,
+ 0xF4,0x1C,0xE0,0xC3,0x94,0x0A,0x50,0x08,
+ 0x90,0xF4,0x19,0x74,0x0C,0xF0,0x80,0x64,
+ 0x90,0x42,0x98,0xE0,0x64,0x01,0x70,0x1C,
+ 0xA3,0xE0,0xB4,0x0C,0x17,0x90,0xF5,0xBA,
+ 0xE0,0x70,0x11,0x90,0xF4,0x1B,0xE0,0xC3,
+ 0x94,0x0A,0x50,0x08,0x90,0xF4,0x19,0x74,
+ 0x0C,0xF0,0x80,0x40,0x90,0x42,0x98,0xE0,
+ 0x64,0x01,0x70,0x1E,0xA3,0xE0,0xB4,0x0C,
+ 0x19,0x90,0xF5,0xBA,0xE0,0x70,0x13,0x90,
+ 0xF4,0x1B,0xE0,0xB4,0x0A,0x0C,0x90,0x42,
+ 0x99,0x74,0x03,0xF0,0x90,0xF4,0x19,0xF0,
+ 0x80,0x1A,0x90,0x42,0x99,0xE0,0xB4,0x0D,
+ 0x08,0x90,0xF4,0x19,0x74,0x0D,0xF0,0x80,
+ 0x0B,0x90,0x42,0x99,0xE0,0x04,0xF0,0xE0,
+ 0x90,0xF4,0x19,0xF0,0x90,0x42,0x99,0xE0,
+ 0x24,0xB8,0xF5,0x82,0xE4,0x34,0x42,0xF5,
+ 0x83,0xE0,0x90,0xF4,0x08,0xF0,0x90,0x42,
+ 0x99,0xE0,0x24,0xC6,0xF5,0x82,0xE4,0x34,
+ 0x42,0xF5,0x83,0xE0,0x90,0xF4,0x09,0xF0,
+ 0x90,0x42,0x99,0xE0,0x24,0xD4,0xF5,0x82,
+ 0xE4,0x34,0x42,0xF5,0x83,0xE0,0x90,0xF4,
+ 0x0A,0xF0,0x22,0x90,0x42,0x9B,0xE0,0x70,
+ 0x1A,0xA3,0xE0,0x64,0x0C,0x60,0x05,0xE0,
+ 0x64,0x0D,0x70,0x22,0x90,0xF5,0x68,0xE0,
+ 0xB4,0x0A,0x1B,0x90,0x42,0x9B,0x74,0x01,
+ 0xF0,0x80,0x13,0x90,0x42,0x9C,0xE0,0xB4,
+ 0x0C,0x0C,0x90,0xF5,0x69,0xE0,0xB4,0x05,
+ 0x05,0xE4,0x90,0x42,0x9B,0xF0,0x90,0x42,
+ 0x9B,0xE0,0xB4,0x01,0x19,0xA3,0xE0,0xB4,
+ 0x0C,0x14,0x90,0xF5,0xC1,0xE0,0xB4,0x01,
+ 0x0D,0x90,0x42,0x9C,0x74,0x03,0xF0,0x90,
+ 0xF5,0x66,0xF0,0x02,0x64,0xB0,0x90,0x42,
+ 0x9B,0xE0,0xB4,0x01,0x0F,0xA3,0xE0,0xB4,
+ 0x0D,0x0A,0x74,0x03,0xF0,0x90,0xF5,0x66,
+ 0xF0,0x02,0x64,0xB0,0x90,0x42,0x9B,0xE0,
+ 0x70,0x15,0xA3,0xE0,0xB4,0x0C,0x10,0x90,
+ 0xF5,0xC1,0xE0,0xB4,0x01,0x09,0x90,0xF5,
+ 0x66,0x74,0x0C,0xF0,0x02,0x64,0xB0,0x90,
+ 0x42,0x9B,0xE0,0x70,0x16,0xA3,0xE0,0xB4,
+ 0x0C,0x11,0x90,0xF5,0x69,0xE0,0xC3,0x94,
+ 0x05,0x50,0x08,0x90,0xF5,0x66,0x74,0x0C,
+ 0xF0,0x80,0x64,0x90,0x42,0x9B,0xE0,0x64,
+ 0x01,0x70,0x1C,0xA3,0xE0,0xB4,0x0C,0x17,
+ 0x90,0xF5,0xC1,0xE0,0x70,0x11,0x90,0xF5,
+ 0x68,0xE0,0xC3,0x94,0x0A,0x50,0x08,0x90,
+ 0xF5,0x66,0x74,0x0C,0xF0,0x80,0x40,0x90,
+ 0x42,0x9B,0xE0,0x64,0x01,0x70,0x1E,0xA3,
+ 0xE0,0xB4,0x0C,0x19,0x90,0xF5,0xC1,0xE0,
+ 0x70,0x13,0x90,0xF5,0x68,0xE0,0xB4,0x0A,
+ 0x0C,0x90,0x42,0x9C,0x74,0x03,0xF0,0x90,
+ 0xF5,0x66,0xF0,0x80,0x1A,0x90,0x42,0x9C,
+ 0xE0,0xB4,0x0D,0x08,0x90,0xF5,0x66,0x74,
+ 0x0D,0xF0,0x80,0x0B,0x90,0x42,0x9C,0xE0,
+ 0x04,0xF0,0xE0,0x90,0xF5,0x66,0xF0,0x90,
+ 0x42,0x9C,0xE0,0x25,0xE0,0x24,0xE2,0xF5,
+ 0x82,0xE4,0x34,0x42,0xF5,0x83,0xE0,0xA3,
+ 0xE0,0x90,0xF5,0x5B,0xF0,0x90,0x42,0x9C,
+ 0xE0,0x25,0xE0,0x24,0xFE,0xF5,0x82,0xE4,
+ 0x34,0x42,0xF5,0x83,0xE0,0xA3,0xE0,0x90,
+ 0xF5,0x5C,0xF0,0x90,0x42,0x9C,0xE0,0x25,
+ 0xE0,0x24,0x1A,0xF5,0x82,0xE4,0x34,0x43,
+ 0xF5,0x83,0xE0,0xA3,0xE0,0x90,0xF5,0x5D,
+ 0xF0,0xA3,0xE4,0xF0,0x22,0x90,0xF4,0x60,
+ 0xE0,0x60,0x03,0x02,0x65,0x8F,0x90,0x41,
+ 0x96,0xE0,0x90,0xF4,0x03,0xF0,0x90,0x41,
+ 0x97,0xE0,0x90,0xF4,0x02,0xF0,0x90,0x41,
+ 0x98,0xE0,0x90,0xF4,0x01,0xF0,0x90,0x41,
+ 0x99,0xE0,0x90,0xF4,0x00,0xF0,0x90,0x41,
+ 0x9A,0xE0,0x90,0xF4,0x07,0xF0,0x90,0x41,
+ 0x9B,0xE0,0x90,0xF4,0x06,0xF0,0x90,0x41,
+ 0x9C,0xE0,0x90,0xF4,0x05,0xF0,0x90,0x41,
+ 0x9D,0xE0,0x90,0xF4,0x04,0xF0,0x12,0x67,
+ 0x0D,0x90,0xF9,0x01,0xE0,0x14,0x60,0x16,
+ 0x14,0x60,0x1F,0x14,0x60,0x28,0x24,0x03,
+ 0x70,0x2E,0x90,0xF5,0x59,0x74,0xFA,0xF0,
+ 0xA3,0x74,0x54,0xF0,0x80,0x22,0x90,0xF5,
+ 0x59,0x74,0x7A,0xF0,0xA3,0x74,0x52,0xF0,
+ 0x80,0x16,0x90,0xF5,0x59,0x74,0xE5,0xF0,
+ 0xA3,0x74,0x4D,0xF0,0x80,0x0A,0x90,0xF5,
+ 0x59,0x74,0x1B,0xF0,0xA3,0x74,0x46,0xF0,
+ 0x12,0x67,0x3D,0x90,0xF7,0x37,0x74,0xDC,
+ 0xF0,0xA3,0x74,0x05,0xF0,0x22,0x90,0xF4,
+ 0x60,0xE0,0x64,0x04,0x60,0x03,0x02,0x66,
+ 0x2A,0x90,0x41,0xAE,0xE0,0x90,0xF4,0x03,
+ 0xF0,0x90,0x41,0xAF,0xE0,0x90,0xF4,0x02,
+ 0xF0,0x90,0x41,0xB0,0xE0,0x90,0xF4,0x01,
+ 0xF0,0x90,0x41,0xB1,0xE0,0x90,0xF4,0x00,
+ 0xF0,0x90,0x41,0xB2,0xE0,0x90,0xF4,0x07,
+ 0xF0,0x90,0x41,0xB3,0xE0,0x90,0xF4,0x06,
+ 0xF0,0x90,0x41,0xB4,0xE0,0x90,0xF4,0x05,
+ 0xF0,0x90,0x41,0xB5,0xE0,0x90,0xF4,0x04,
+ 0xF0,0x12,0x67,0x2D,0x90,0xF9,0x01,0xE0,
+ 0x14,0x60,0x16,0x14,0x60,0x1F,0x14,0x60,
+ 0x28,0x24,0x03,0x70,0x2E,0x90,0xF5,0x59,
+ 0x74,0xA4,0xF0,0xA3,0x74,0x28,0xF0,0x80,
+ 0x22,0x90,0xF5,0x59,0x74,0x72,0xF0,0xA3,
+ 0x74,0x27,0xF0,0x80,0x16,0x90,0xF5,0x59,
+ 0x74,0x41,0xF0,0xA3,0x74,0x25,0xF0,0x80,
+ 0x0A,0x90,0xF5,0x59,0x74,0x87,0xF0,0xA3,
+ 0x74,0x21,0xF0,0x12,0x67,0x5C,0x90,0xF7,
+ 0x37,0x74,0xB8,0xF0,0xA3,0x74,0x0B,0xF0,
+ 0x22,0x90,0xF4,0x60,0xE0,0x24,0xFE,0x60,
+ 0x29,0x14,0x60,0x48,0x24,0x02,0x70,0x64,
+ 0x90,0x41,0x9E,0xE0,0x90,0xF4,0x03,0xF0,
+ 0x90,0x41,0x9F,0xE0,0x90,0xF4,0x02,0xF0,
+ 0x90,0x41,0xA0,0xE0,0x90,0xF4,0x01,0xF0,
+ 0x90,0x41,0xA1,0xE0,0x90,0xF4,0x00,0xF0,
+ 0x80,0x42,0x90,0x41,0xA2,0xE0,0x90,0xF4,
+ 0x03,0xF0,0x90,0x41,0xA3,0xE0,0x90,0xF4,
+ 0x02,0xF0,0x90,0x41,0xA4,0xE0,0x90,0xF4,
+ 0x01,0xF0,0x90,0x41,0xA5,0xE0,0x90,0xF4,
+ 0x00,0xF0,0x80,0x20,0x90,0x41,0xA6,0xE0,
+ 0x90,0xF4,0x03,0xF0,0x90,0x41,0xA7,0xE0,
+ 0x90,0xF4,0x02,0xF0,0x90,0x41,0xA8,0xE0,
+ 0x90,0xF4,0x01,0xF0,0x90,0x41,0xA9,0xE0,
+ 0x90,0xF4,0x00,0xF0,0x90,0x41,0xAA,0xE0,
+ 0x90,0xF4,0x07,0xF0,0x90,0x41,0xAB,0xE0,
+ 0x90,0xF4,0x06,0xF0,0x90,0x41,0xAC,0xE0,
+ 0x90,0xF4,0x05,0xF0,0x90,0x41,0xAD,0xE0,
+ 0x90,0xF4,0x04,0xF0,0x12,0x67,0x1D,0x90,
+ 0xF9,0x01,0xE0,0x14,0x60,0x16,0x14,0x60,
+ 0x1F,0x14,0x60,0x28,0x24,0x03,0x70,0x2E,
+ 0x90,0xF5,0x59,0x74,0x52,0xF0,0xA3,0x74,
+ 0x14,0xF0,0x80,0x22,0x90,0xF5,0x59,0x74,
+ 0xB9,0xF0,0xA3,0x74,0x13,0xF0,0x80,0x16,
+ 0x90,0xF5,0x59,0x74,0xA1,0xF0,0xA3,0x74,
+ 0x12,0xF0,0x80,0x0A,0x90,0xF5,0x59,0x74,
+ 0xC4,0xF0,0xA3,0x74,0x10,0xF0,0x12,0x67,
+ 0x4B,0x90,0xF7,0x37,0x74,0xB8,0xF0,0xA3,
+ 0x74,0x0B,0xF0,0x22,0x90,0xF4,0x08,0x74,
+ 0x99,0xF0,0xA3,0x74,0x02,0xF0,0xA3,0xE4,
+ 0xF0,0xA3,0xF0,0x22,0x90,0xF4,0x08,0x74,
+ 0x99,0xF0,0xA3,0x74,0x02,0xF0,0xA3,0xE4,
+ 0xF0,0xA3,0xF0,0x22,0x90,0xF4,0x08,0x74,
+ 0x99,0xF0,0xA3,0x74,0x02,0xF0,0xA3,0xE4,
+ 0xF0,0xA3,0xF0,0x22,0x90,0xF5,0x5B,0x74,
+ 0x60,0xF0,0xA3,0xE4,0xF0,0xA3,0xF0,0xA3,
+ 0xF0,0x22,0x90,0xF5,0x5B,0x74,0xFC,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0x74,0x02,0xF0,0xA3,
+ 0xE4,0xF0,0x22,0x90,0xF5,0x5B,0xE4,0xF0,
+ 0xA3,0x74,0x03,0xF0,0xA3,0xE4,0xF0,0xA3,
+ 0xF0,0x22,0x90,0xFB,0x24,0xE4,0xF0,0x90,
+ 0x43,0x41,0xE0,0x90,0xFB,0x28,0xF0,0x22,
+ 0x90,0xFB,0x24,0x74,0x08,0xF0,0x90,0xFB,
+ 0x28,0x74,0x74,0xF0,0x22,0x90,0xFB,0x27,
+ 0xE0,0x54,0x1F,0xFF,0xC3,0x13,0xFF,0x90,
+ 0x41,0xDA,0x74,0x01,0xF0,0x90,0x43,0x41,
+ 0x74,0x82,0xF0,0x12,0x67,0x6B,0x90,0xFB,
+ 0x25,0x74,0x1F,0xF0,0xA3,0x74,0x22,0xF0,
+ 0x90,0xFB,0x29,0x74,0x42,0xF0,0x12,0x8E,
+ 0xE9,0x22,0x7E,0x41,0x7F,0x95,0xD3,0xEF,
+ 0x94,0x5D,0xEE,0x94,0x42,0x50,0x0D,0x8F,
+ 0x82,0x8E,0x83,0xE4,0xF0,0x0F,0xBF,0x00,
+ 0x01,0x0E,0x80,0xEA,0x12,0x67,0x86,0x12,
+ 0x47,0x82,0x90,0x41,0x8B,0x74,0x41,0xF0,
+ 0xA3,0x74,0x95,0xF0,0xE4,0x90,0x43,0x40,
+ 0xF0,0xD2,0xAF,0xD2,0xA8,0xC2,0xDB,0xD2,
+ 0xEC,0xF5,0x0F,0xF5,0x10,0x90,0x43,0x43,
+ 0xF0,0xA3,0xF0,0x90,0x43,0x3A,0xF0,0x90,
+ 0x41,0xD6,0x04,0xF0,0x90,0x41,0xE4,0x74,
+ 0x03,0xF0,0xE4,0x90,0x41,0xE5,0xF0,0xF5,
+ 0xF8,0x75,0xB8,0x12,0xD2,0x88,0xD2,0xEB,
+ 0x90,0x43,0x38,0xF0,0x90,0x41,0xD5,0xF0,
+ 0x90,0x43,0x3F,0x04,0xF0,0xE4,0x90,0x41,
+ 0xEB,0xF0,0x90,0x41,0xEA,0x04,0xF0,0x90,
+ 0x41,0xEF,0xF0,0x90,0x41,0xF0,0x04,0xF0,
+ 0xE4,0x90,0x41,0xF1,0xF0,0x90,0x41,0xF2,
+ 0xF0,0x90,0x42,0x12,0x04,0xF0,0x90,0x41,
+ 0xCF,0x74,0x10,0xF0,0x90,0x41,0xD0,0x74,
+ 0x27,0xF0,0x90,0x41,0xFA,0x74,0x50,0xF0,
+ 0x90,0x41,0xCE,0x74,0x01,0xF0,0x90,0x42,
+ 0x24,0x74,0x20,0xF0,0x90,0x42,0x25,0x74,
+ 0x2C,0xF0,0x90,0x42,0x26,0x74,0x01,0xF0,
+ 0x90,0x42,0x20,0x74,0x07,0xF0,0x90,0x42,
+ 0x21,0xF0,0x90,0x42,0x22,0x14,0xF0,0xE4,
+ 0x90,0x43,0x82,0xF0,0x90,0xF6,0x2E,0x74,
+ 0x64,0xF0,0xE4,0x90,0x43,0xBB,0xF0,0x90,
+ 0x41,0xE0,0x04,0xF0,0x90,0x43,0xF4,0x12,
+ 0xAA,0x9B,0x00,0x00,0x00,0x00,0xE4,0x90,
+ 0x41,0xF7,0xF0,0x90,0x41,0xF8,0xF0,0x90,
+ 0x41,0xF9,0xF0,0x90,0x41,0xC4,0x04,0xF0,
+ 0x90,0x41,0xCC,0x74,0x10,0xF0,0x90,0x41,
+ 0xCD,0x74,0x27,0xF0,0x7F,0x1B,0x12,0x89,
+ 0x23,0x90,0xFB,0x9F,0xE0,0x90,0x42,0x4E,
+ 0xF0,0x90,0xFB,0xA0,0xE0,0x90,0x44,0xB1,
+ 0xF0,0x12,0xA4,0x13,0x22,0x90,0x43,0x38,
+ 0xE0,0x70,0x05,0x90,0x43,0x3D,0xF0,0x22,
+ 0x90,0x43,0x3D,0x74,0x01,0xF0,0x22,0x90,
+ 0x41,0xDA,0xE0,0xB4,0x01,0x0B,0x90,0xF0,
+ 0x7F,0x74,0x01,0xF0,0xA3,0xE4,0xF0,0x80,
+ 0x08,0x90,0xF0,0x7F,0xE4,0xF0,0xA3,0x04,
+ 0xF0,0x90,0x43,0xC3,0x74,0x01,0xF0,0xE4,
+ 0x90,0x41,0xD5,0xF0,0x90,0xF7,0x3C,0xE0,
+ 0x60,0x09,0xE4,0x90,0x41,0xD2,0xF0,0x90,
+ 0x41,0xD1,0xF0,0xE4,0x90,0x43,0xBF,0xF0,
+ 0xA3,0xF0,0x90,0x43,0xC1,0xF0,0xA3,0xF0,
+ 0x90,0x43,0xF8,0x04,0xF0,0x12,0x4E,0x89,
+ 0x12,0x9F,0x6A,0x90,0x41,0xEA,0xE0,0x70,
+ 0x04,0x7F,0x01,0x80,0x02,0x7F,0x00,0x90,
+ 0x42,0x9E,0xEF,0xF0,0x12,0x72,0x21,0x90,
+ 0x43,0x42,0x74,0x01,0xF0,0xE4,0x90,0x43,
+ 0x40,0xF0,0x90,0xF7,0x31,0xE0,0xB4,0x01,
+ 0x03,0x12,0x9C,0xC3,0xE4,0x90,0x43,0x3E,
+ 0xF0,0x12,0xA5,0x0A,0x90,0x43,0x3D,0x74,
+ 0x01,0xF0,0x22,0x90,0xF1,0xEA,0xE4,0xF0,
+ 0x90,0xF1,0xEF,0xF0,0x90,0xF1,0xF2,0xF0,
+ 0x90,0xF0,0x7C,0xF0,0x90,0xF1,0xFB,0xF0,
+ 0x90,0xF1,0xF7,0xF0,0x90,0xF1,0xE8,0x04,
+ 0xF0,0x90,0xF1,0xEB,0xF0,0x90,0xF1,0xF0,
+ 0xF0,0x90,0xF1,0xF3,0xF0,0x90,0xF0,0x7D,
+ 0xF0,0x90,0xF1,0xFA,0xF0,0x90,0xF1,0xF6,
+ 0xF0,0x90,0xF1,0xF8,0xE4,0xF0,0x90,0xF1,
+ 0xFC,0x74,0x03,0xF0,0x90,0xF1,0xE8,0xE4,
+ 0xF0,0x90,0xF1,0xEB,0xF0,0x90,0xF1,0xF0,
+ 0xF0,0x90,0xF1,0xF3,0xF0,0x90,0xF0,0x7D,
+ 0xF0,0x90,0xF1,0xFA,0xF0,0x90,0xF1,0xF6,
+ 0xF0,0x90,0xF1,0xEA,0x04,0xF0,0x90,0xF1,
+ 0xEF,0xF0,0x90,0xF1,0xF2,0xF0,0x90,0xF0,
+ 0x7C,0xF0,0x90,0xF1,0xF7,0xF0,0x90,0xF1,
+ 0xFB,0xF0,0x90,0xF5,0xC2,0xF0,0xE4,0xF0,
+ 0x22,0x12,0x69,0x64,0x90,0xF1,0x4E,0x74,
+ 0x3F,0xF0,0x90,0xF1,0x85,0xE4,0xF0,0x90,
+ 0xF1,0x47,0xF0,0xA3,0xF0,0x90,0x42,0x11,
+ 0xE0,0x64,0x01,0x60,0x08,0xE4,0x90,0x43,
+ 0x81,0xF0,0x12,0x72,0x42,0x90,0x43,0x81,
+ 0x74,0x01,0xF0,0x90,0x43,0x3D,0xF0,0x22,
+ 0x7F,0xD4,0x7E,0x27,0x12,0x47,0x76,0x90,
+ 0xF1,0x48,0x74,0x01,0xF0,0x90,0xF0,0x92,
+ 0xE4,0xF0,0x90,0xF0,0x91,0x04,0xF0,0x90,
+ 0xF0,0x94,0xF0,0x90,0xF0,0x81,0xF0,0x90,
+ 0xF0,0x91,0xE4,0xF0,0xA3,0x04,0xF0,0x90,
+ 0xF0,0x94,0xE0,0xB4,0x01,0xF9,0x90,0xF1,
+ 0xFB,0xE4,0xF0,0x90,0xF1,0xFA,0x04,0xF0,
+ 0x90,0xF1,0xFD,0xF0,0x90,0xF1,0xFC,0xF0,
+ 0x90,0xF1,0xFA,0xE4,0xF0,0xA3,0x04,0xF0,
+ 0x90,0xF1,0xFD,0xE0,0xB4,0x01,0xF9,0x90,
+ 0xF1,0xF7,0xE4,0xF0,0x90,0xF1,0xF6,0x04,
+ 0xF0,0x90,0xF1,0xF9,0xF0,0x90,0xF1,0xF8,
+ 0x04,0xF0,0x90,0xF2,0x14,0x14,0xF0,0x90,
+ 0xF1,0xF6,0xE4,0xF0,0xA3,0x04,0xF0,0x90,
+ 0xF1,0xF9,0xE0,0xB4,0x01,0xF9,0x90,0x43,
+ 0x3D,0x74,0x01,0xF0,0x22,0x90,0x41,0xD5,
+ 0xE0,0x70,0x04,0xFF,0x12,0x5C,0x30,0x12,
+ 0x64,0xF6,0x7F,0x01,0x12,0x5C,0x30,0x90,
+ 0xF6,0x24,0xE0,0xD3,0x94,0x04,0x40,0x0F,
+ 0xE4,0x90,0x41,0xDC,0xF0,0x90,0xF2,0x1C,
+ 0xF0,0x90,0x43,0x3D,0x04,0xF0,0x22,0x90,
+ 0x43,0x3D,0x74,0x01,0xF0,0x22,0x90,0xF1,
+ 0x48,0xE4,0xF0,0x90,0xF0,0x81,0x74,0x03,
+ 0xF0,0x90,0xF1,0xFC,0xF0,0x90,0xF5,0xAF,
+ 0xE4,0xF0,0x04,0xF0,0x90,0xF5,0xB4,0xE0,
+ 0xB4,0x01,0xF9,0x90,0xF5,0xAF,0xE4,0xF0,
+ 0x90,0x43,0x3D,0x04,0xF0,0x22,0x90,0xF4,
+ 0x13,0xE4,0xF0,0x12,0x5F,0x39,0x22,0x90,
+ 0xF4,0x1A,0x74,0x0D,0xF0,0x90,0xF4,0x10,
+ 0x74,0x08,0xF0,0x90,0xF4,0x18,0xF0,0x90,
+ 0xF5,0x61,0x74,0x06,0xF0,0xE4,0x90,0x42,
+ 0x6D,0xF0,0x90,0x42,0x98,0xF0,0x90,0x42,
+ 0x9A,0xF0,0x90,0x42,0x9B,0xF0,0x90,0x42,
+ 0x9D,0xF0,0x90,0x42,0x99,0xF0,0x90,0x42,
+ 0x9C,0xF0,0x90,0x42,0x96,0x04,0xF0,0x90,
+ 0xF5,0xBD,0xF0,0x90,0xF5,0xBB,0xF0,0x90,
+ 0xF5,0xBD,0xE4,0xF0,0x90,0xF5,0xBF,0x04,
+ 0xF0,0x90,0x42,0x97,0xF0,0x90,0xF5,0xB3,
+ 0xF0,0x90,0xF5,0xB1,0xF0,0x90,0xF5,0xB3,
+ 0xE4,0xF0,0x90,0xF5,0xB2,0x04,0xF0,0xD2,
+ 0xE9,0x22,0x90,0xF5,0xA8,0xE4,0xF0,0x04,
+ 0xF0,0x75,0xF0,0x02,0xE5,0x0F,0xA4,0x24,
+ 0x79,0xF5,0x82,0xE5,0xF0,0x34,0xAD,0xF5,
+ 0x83,0xE4,0x93,0xFC,0x74,0x01,0x93,0xFD,
+ 0xE4,0xFF,0x12,0x47,0xAD,0x90,0xF5,0xA9,
+ 0xE0,0x64,0x01,0x60,0x04,0x7F,0x01,0x80,
+ 0x02,0x7F,0x00,0x90,0xF1,0x1A,0xE0,0x5F,
+ 0x70,0xEB,0x90,0xF5,0xA9,0xE0,0xB4,0x01,
+ 0x04,0x7F,0x01,0x80,0x02,0x7F,0x00,0x90,
+ 0x43,0x3D,0xEF,0xF0,0xE0,0x64,0x01,0x70,
+ 0x40,0x90,0xF4,0xCC,0xE0,0xFF,0x90,0xF9,
+ 0x08,0xF0,0x90,0xF4,0xC1,0xE0,0xFF,0x90,
+ 0xF9,0x03,0xF0,0x90,0xF4,0xC4,0xE0,0xFF,
+ 0x90,0xF9,0x06,0xF0,0x90,0xF4,0xC5,0xE0,
+ 0xFF,0x90,0xF9,0x07,0xF0,0x90,0xF4,0xC6,
+ 0xE0,0x54,0x03,0xFF,0x90,0xF9,0x02,0xF0,
+ 0x70,0x05,0x90,0xF9,0x05,0x04,0xF0,0x90,
+ 0x41,0xD5,0x74,0x01,0xF0,0x90,0xF7,0x2F,
+ 0xF0,0x12,0x6E,0x8F,0x22,0x12,0x9A,0x04,
+ 0xE4,0x90,0x44,0x46,0xF0,0x90,0x44,0x42,
+ 0xF0,0xA3,0xF0,0x12,0x95,0xF5,0x90,0x44,
+ 0x41,0x74,0x01,0xF0,0x90,0x43,0x80,0xE0,
+ 0x60,0x0A,0x90,0xF1,0x2F,0x74,0x01,0xF0,
+ 0x90,0xF1,0x0A,0xF0,0x90,0x44,0x48,0x74,
+ 0x01,0xF0,0x12,0x97,0x17,0x12,0x70,0x6A,
+ 0x12,0x52,0x4E,0x12,0x51,0x31,0xE4,0xFF,
+ 0x12,0x50,0xFA,0x90,0xFD,0x32,0xE0,0x90,
+ 0xFD,0x92,0xF0,0x90,0xFD,0x31,0xE0,0x90,
+ 0xFD,0x91,0xF0,0x90,0xF2,0x1B,0x74,0x09,
+ 0xF0,0xE4,0xFF,0x12,0x83,0xDD,0x90,0xF2,
+ 0x1B,0x74,0x0A,0xF0,0x85,0x2C,0x2C,0x90,
+ 0xFD,0xA1,0xE0,0x60,0x03,0x12,0xA5,0x81,
+ 0x7F,0x04,0x12,0x6D,0xE8,0x90,0xF5,0x3B,
+ 0x74,0x01,0xF0,0xE4,0xFF,0x12,0x50,0xFA,
+ 0x12,0x72,0x21,0x90,0x43,0x3F,0xE0,0x60,
+ 0x21,0x90,0xF7,0x3C,0xE0,0x70,0x16,0x90,
+ 0xF7,0x40,0xF0,0x90,0xF5,0x54,0x04,0xF0,
+ 0xE4,0x90,0x44,0x9B,0xF0,0x90,0x44,0x9A,
+ 0xE0,0x90,0xF5,0x52,0xF0,0xE4,0x90,0x43,
+ 0x3B,0xF0,0x90,0x41,0xD1,0x74,0x01,0xF0,
+ 0x90,0x42,0x46,0xF0,0x12,0x93,0x38,0x7F,
+ 0x0A,0x12,0x6D,0xE8,0x90,0xF7,0x8E,0x74,
+ 0x01,0xF0,0x90,0x43,0xF8,0xF0,0x85,0x2C,
+ 0x2C,0x12,0xA6,0x09,0xE5,0x2D,0x70,0x7B,
+ 0x90,0x42,0x45,0xE0,0x60,0x75,0x90,0x43,
+ 0x42,0xE0,0x60,0x6F,0x90,0xF0,0x2B,0xE0,
+ 0x60,0x69,0x90,0xF6,0x08,0xE0,0x70,0x63,
+ 0xC2,0xEB,0x90,0xF7,0x8B,0x74,0x02,0xF0,
+ 0x7F,0x01,0x12,0x86,0xB2,0x90,0x42,0x37,
+ 0xE0,0x90,0x43,0x36,0xF0,0x90,0xFD,0xA5,
+ 0x74,0x01,0xF0,0x90,0x43,0x3E,0xF0,0x90,
+ 0xFD,0x29,0xF0,0x7F,0x08,0x12,0x6D,0xE8,
+ 0x7F,0x01,0x12,0x86,0xB2,0x90,0x42,0x37,
+ 0xE0,0xFF,0x90,0x43,0x36,0xE0,0xC3,0x9F,
+ 0x40,0x0F,0x90,0xFD,0xA5,0xE4,0xF0,0x90,
+ 0xFD,0x29,0xF0,0x90,0x43,0x3E,0xF0,0x80,
+ 0x0E,0x90,0xFD,0xA5,0x74,0x01,0xF0,0x90,
+ 0xFD,0x29,0xF0,0x90,0x43,0x3E,0xF0,0xE4,
+ 0x90,0x43,0x42,0xF0,0x90,0xF7,0x8B,0x04,
+ 0xF0,0xD2,0xEB,0x12,0x6E,0x75,0x90,0xF7,
+ 0x3C,0xE0,0x70,0x03,0x12,0xA7,0x34,0x90,
+ 0xF7,0x31,0xE0,0x60,0x05,0x7F,0x01,0x12,
+ 0x9C,0x29,0x12,0x91,0x6A,0x90,0xF2,0x1B,
+ 0x74,0x0B,0xF0,0x22,0x90,0x43,0x3D,0x74,
+ 0x01,0xF0,0xF5,0x0F,0x22,0x90,0x41,0xD6,
+ 0xE0,0x70,0x1D,0x90,0xF9,0x57,0xE0,0x54,
+ 0xFD,0x44,0x02,0xF0,0x90,0x41,0xD6,0x74,
+ 0x01,0xF0,0xE4,0x90,0x43,0x3A,0xF0,0x90,
+ 0x43,0x38,0xF0,0xA3,0xF0,0xF5,0x0F,0x22,
+ 0x90,0x43,0x39,0xE0,0x60,0x68,0x90,0x43,
+ 0x3D,0xE0,0xB4,0x01,0x0C,0xE5,0x0F,0x90,
+ 0xAD,0x5B,0x93,0xF5,0x0F,0xE4,0xF5,0x10,
+ 0x22,0xE5,0x0F,0x70,0x05,0xF5,0x0F,0xF5,
+ 0x10,0x22,0xE5,0x0F,0x90,0xAD,0x8D,0x93,
+ 0xB5,0x10,0x1C,0x90,0x43,0x43,0xE0,0xB5,
+ 0x0F,0x05,0x75,0x0F,0x01,0x80,0x0C,0x90,
+ 0x43,0x43,0xE5,0x0F,0xF0,0x90,0xAD,0x6F,
+ 0x93,0xF5,0x0F,0xE4,0xF5,0x10,0x22,0xE5,
+ 0x0F,0x90,0xAD,0x65,0x93,0xFF,0xB5,0x0F,
+ 0x03,0x05,0x10,0x22,0x90,0x43,0x44,0xE0,
+ 0xB5,0x0F,0x08,0x90,0xAD,0x6F,0x93,0xF5,
+ 0x0F,0x80,0x08,0x90,0x43,0x44,0xE5,0x0F,
+ 0xF0,0x8F,0x0F,0xE4,0xF5,0x10,0x22,0x90,
+ 0xF5,0x38,0xE0,0xFD,0xEF,0x60,0x0D,0x90,
+ 0xF5,0x38,0xE0,0xFE,0x6D,0x60,0xF5,0xAD,
+ 0x06,0x1F,0x80,0xF0,0x22,0xA2,0xAF,0xE4,
+ 0x33,0x90,0x43,0x37,0xF0,0x90,0xF7,0x14,
+ 0xE0,0x60,0x31,0x90,0xF7,0x32,0xE0,0x70,
+ 0x06,0x90,0xF7,0x3C,0xE0,0x60,0x25,0xC2,
+ 0xAF,0x90,0xF7,0x14,0xE4,0xF0,0x7F,0xD4,
+ 0x7E,0x27,0x12,0x47,0x76,0x90,0xF9,0x9D,
+ 0x74,0x01,0xF0,0x90,0xF7,0x16,0xF0,0x90,
+ 0xF7,0x11,0xE4,0xF0,0x90,0x43,0x37,0xE0,
+ 0x24,0xFF,0x92,0xAF,0x22,0xA2,0xAF,0xE4,
+ 0x33,0xFF,0xC2,0xAF,0x90,0xF7,0x14,0xE0,
+ 0x70,0x24,0x90,0xF7,0x32,0xE0,0x70,0x06,
+ 0x90,0xF7,0x3C,0xE0,0x60,0x18,0x90,0xF9,
+ 0x9D,0xE4,0xF0,0x90,0xF7,0x14,0x04,0xF0,
+ 0x90,0xF7,0x0D,0xF0,0x90,0xF7,0x86,0xF0,
+ 0xA3,0xF0,0x90,0xF7,0x11,0xF0,0xEF,0x24,
+ 0xFF,0x92,0xAF,0x22,0x90,0x42,0x46,0xE0,
+ 0x70,0x0C,0x90,0x42,0x47,0xE0,0x60,0x0A,
+ 0x90,0x44,0x97,0xE0,0x60,0x04,0x12,0x6E,
+ 0x3E,0x22,0x12,0x6D,0xFE,0x22,0x90,0xF1,
+ 0x0F,0xE0,0xFE,0x90,0xF1,0x0E,0xE0,0x7C,
+ 0x00,0x24,0x00,0xFF,0xEC,0x3E,0x90,0x43,
+ 0x45,0xF0,0xA3,0xEF,0xF0,0x90,0xF1,0x13,
+ 0xE0,0xFE,0x90,0xF1,0x12,0xE0,0x24,0x00,
+ 0xFF,0xEC,0x3E,0x90,0x43,0x47,0xF0,0xA3,
+ 0xEF,0xF0,0x90,0xF1,0x10,0xE0,0x64,0x01,
+ 0x60,0x03,0x02,0x6F,0x5C,0x90,0xF1,0x14,
+ 0xE0,0x64,0x01,0x60,0x03,0x02,0x6F,0x5C,
+ 0xD3,0x90,0x43,0x46,0xE0,0x94,0x10,0x90,
+ 0x43,0x45,0xE0,0x94,0x35,0x40,0x0C,0xA3,
+ 0xE0,0x94,0x30,0x90,0x43,0x45,0xE0,0x94,
+ 0x38,0x40,0x1B,0xD3,0x90,0x43,0x48,0xE0,
+ 0x94,0x10,0x90,0x43,0x47,0xE0,0x94,0x35,
+ 0x40,0x61,0xA3,0xE0,0x94,0x30,0x90,0x43,
+ 0x47,0xE0,0x94,0x38,0x50,0x55,0x90,0xF4,
+ 0xC1,0xE0,0x64,0x01,0x70,0x25,0x90,0xF9,
+ 0x00,0xE0,0x70,0x0C,0x90,0xF5,0x4B,0x74,
+ 0x05,0xF0,0x90,0xF6,0x55,0x74,0x20,0xF0,
+ 0x90,0xF9,0x00,0xE0,0xB4,0x01,0x0C,0x90,
+ 0xF5,0x4B,0x74,0x04,0xF0,0x90,0xF6,0x55,
+ 0x74,0x10,0xF0,0x90,0xF4,0xC1,0xE0,0x64,
+ 0x02,0x70,0x2C,0x90,0xF9,0x00,0xE0,0x70,
+ 0x06,0x90,0xF5,0x4B,0x74,0x09,0xF0,0x90,
+ 0xF9,0x00,0xE0,0xB4,0x01,0x06,0x90,0xF5,
+ 0x4B,0x74,0x08,0xF0,0x90,0xF6,0x55,0x74,
+ 0x20,0xF0,0x22,0x90,0xF5,0x4B,0x74,0x14,
+ 0xF0,0x90,0xF6,0x55,0x74,0x20,0xF0,0x22,
+ 0x12,0x70,0x49,0x12,0x47,0xCC,0x12,0x67,
+ 0xB3,0x90,0x43,0x50,0x74,0x01,0xF0,0xFB,
+ 0x7A,0x43,0x79,0x49,0x12,0xAC,0xE2,0xEF,
+ 0x4E,0x60,0x10,0x7A,0x47,0x79,0xCB,0x12,
+ 0xAA,0xCC,0x7A,0x47,0x79,0xCB,0x12,0xAA,
+ 0xCC,0xD2,0xAF,0x90,0xF2,0x1B,0xE4,0xF0,
+ 0x90,0x43,0x50,0xE0,0x70,0xFA,0x12,0x6E,
+ 0x75,0x90,0x43,0x50,0xE0,0x70,0xFA,0xE5,
+ 0x0F,0xB4,0x0A,0x00,0x40,0x03,0x02,0x70,
+ 0x39,0x90,0x6F,0xB9,0xF8,0x28,0x28,0x73,
+ 0x02,0x6F,0xD7,0x02,0x6F,0xDC,0x02,0x6F,
+ 0xE1,0x02,0x6F,0xE6,0x02,0x6F,0xEB,0x02,
+ 0x6F,0xF0,0x02,0x6F,0xF5,0x02,0x6F,0xFA,
+ 0x02,0x70,0x1A,0x02,0x70,0x34,0x12,0x68,
+ 0xCE,0x80,0x60,0x12,0x68,0xE0,0x80,0x5B,
+ 0x12,0x8F,0x6A,0x80,0x56,0x12,0x69,0xE2,
+ 0x80,0x51,0x12,0x6A,0x11,0x80,0x4C,0x12,
+ 0x6A,0x8E,0x80,0x47,0x12,0x6A,0xBF,0x80,
+ 0x42,0x90,0xF5,0x05,0x74,0x01,0xF0,0x90,
+ 0x44,0xA1,0xF0,0x12,0x6A,0xE7,0x90,0x43,
+ 0x3D,0xE0,0xB4,0x01,0x05,0x7F,0x01,0x12,
+ 0x5C,0x30,0x7F,0x01,0x12,0x6D,0xE8,0x80,
+ 0x22,0x12,0xA5,0xCE,0x85,0x2C,0x2C,0x90,
+ 0xF5,0x05,0xE4,0xF0,0x90,0x43,0x3D,0xE0,
+ 0xB4,0x01,0x10,0x12,0xA6,0x73,0x12,0x6B,
+ 0xE6,0x80,0x08,0x12,0x93,0x7B,0x80,0x03,
+ 0x12,0x6D,0x4D,0x12,0x9B,0xC3,0x12,0x6D,
+ 0x56,0x12,0x6E,0x75,0x02,0x6F,0xA2,0x22,
+ 0x90,0xFB,0x87,0xE0,0x60,0xFA,0x90,0xFB,
+ 0x9E,0xE0,0xB4,0x04,0x05,0xA3,0xE0,0xFF,
+ 0x80,0x02,0x7F,0x00,0x90,0x43,0x51,0xEF,
+ 0xF0,0x90,0xFB,0x87,0xE4,0xF0,0xC2,0xDB,
+ 0x22,0x90,0xF9,0x05,0xE0,0x60,0x0A,0x90,
+ 0xF4,0xC4,0xE0,0x90,0x43,0x53,0xF0,0x80,
+ 0x08,0x90,0xF4,0xC5,0xE0,0x90,0x43,0x53,
+ 0xF0,0x90,0x43,0x53,0xE0,0x14,0x60,0x20,
+ 0x14,0x60,0x2F,0x14,0x60,0x3D,0x14,0x60,
+ 0x4B,0x24,0x04,0x70,0x57,0x90,0xF7,0x7F,
+ 0x74,0xE0,0xF0,0xA3,0x74,0x01,0xF0,0xA3,
+ 0x74,0xBB,0xF0,0xA3,0x74,0x01,0xF0,0x22,
+ 0x90,0xF7,0x7F,0x74,0x40,0xF0,0xA3,0x74,
+ 0x01,0xF0,0xA3,0x74,0x55,0xF0,0xA3,0xE4,
+ 0xF0,0x22,0x90,0xF7,0x7F,0x74,0xFA,0xF0,
+ 0xA3,0xE4,0xF0,0xA3,0x74,0x30,0xF0,0xA3,
+ 0xE4,0xF0,0x22,0x90,0xF7,0x7F,0x74,0xF5,
+ 0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x15,0xF0,
+ 0xA3,0xE4,0xF0,0x22,0x90,0xF7,0x7F,0x74,
+ 0xA0,0xF0,0xA3,0xE4,0xF0,0xA3,0x74,0x15,
+ 0xF0,0xA3,0xE4,0xF0,0x22,0x90,0x44,0xB2,
+ 0xE0,0x70,0x03,0x02,0x72,0x20,0x90,0xF0,
+ 0x2B,0xE0,0x70,0x16,0x90,0xF5,0x3E,0xE0,
+ 0xD3,0x94,0x20,0x40,0x0D,0x90,0xF2,0x17,
+ 0x74,0xFE,0xF0,0x90,0xF7,0x87,0x74,0x01,
+ 0xF0,0x22,0x90,0xF7,0x32,0xE0,0x64,0x01,
+ 0x70,0x2D,0x90,0x42,0x37,0xE0,0xFE,0x90,
+ 0x44,0x9C,0xE0,0xFD,0xD3,0x9E,0x40,0x05,
+ 0xED,0x9E,0xFF,0x80,0x0C,0x90,0x44,0x9C,
+ 0xE0,0xFE,0x90,0x42,0x37,0xE0,0xC3,0x9E,
+ 0xFF,0xEF,0xC3,0x94,0x0A,0x50,0x08,0x90,
+ 0x44,0x9C,0xE0,0x90,0x42,0x37,0xF0,0x90,
+ 0x42,0x37,0xE0,0xFE,0xC3,0x94,0x23,0x50,
+ 0x07,0x90,0xF2,0x17,0x74,0xFE,0xF0,0x22,
+ 0xEE,0xC3,0x94,0x28,0x50,0x13,0x90,0xF2,
+ 0x17,0xE0,0xB4,0xFE,0x05,0xE0,0x64,0xA6,
+ 0x60,0x07,0x90,0xF2,0x17,0x74,0xFE,0xF0,
+ 0x22,0x90,0x42,0x37,0xE0,0xC3,0x94,0x2D,
+ 0x50,0x13,0x90,0xF2,0x17,0xE0,0xB4,0xFE,
+ 0x05,0xE0,0x64,0xA6,0x60,0x07,0x90,0xF2,
+ 0x17,0x74,0xA6,0xF0,0x22,0x90,0x42,0x37,
+ 0xE0,0xFE,0xC3,0x94,0x37,0x50,0x07,0x90,
+ 0xF2,0x17,0x74,0xA6,0xF0,0x22,0xEE,0xC3,
+ 0x94,0x3C,0x50,0x13,0x90,0xF2,0x17,0xE0,
+ 0xB4,0xA6,0x05,0xE0,0x64,0x26,0x60,0x07,
+ 0x90,0xF2,0x17,0x74,0xA6,0xF0,0x22,0x90,
+ 0x42,0x37,0xE0,0xC3,0x94,0x41,0x50,0x13,
+ 0x90,0xF2,0x17,0xE0,0xB4,0xA6,0x05,0xE0,
+ 0x64,0x26,0x60,0x07,0x90,0xF2,0x17,0x74,
+ 0x26,0xF0,0x22,0x90,0x42,0x37,0xE0,0xFE,
+ 0xC3,0x94,0x4B,0x50,0x07,0x90,0xF2,0x17,
+ 0x74,0x26,0xF0,0x22,0xEE,0xC3,0x94,0x50,
+ 0x50,0x13,0x90,0xF2,0x17,0xE0,0xB4,0x26,
+ 0x05,0xE0,0x64,0x25,0x60,0x07,0x90,0xF2,
+ 0x17,0x74,0x26,0xF0,0x22,0x90,0x42,0x37,
+ 0xE0,0xC3,0x94,0x55,0x50,0x13,0x90,0xF2,
+ 0x17,0xE0,0xB4,0x26,0x05,0xE0,0x64,0x25,
+ 0x60,0x07,0x90,0xF2,0x17,0x74,0x25,0xF0,
+ 0x22,0x90,0xF2,0x17,0x74,0x25,0xF0,0x22,
+ 0x90,0xF2,0x17,0x74,0xFE,0xF0,0x22,0xE4,
+ 0x90,0x42,0x2F,0xF0,0x90,0xF7,0x83,0x74,
+ 0xAA,0xF0,0xA3,0xE4,0xF0,0x22,0x90,0xF1,
+ 0x75,0x74,0x01,0xF0,0x90,0xF1,0x0A,0xF0,
+ 0x22,0x90,0x43,0x5D,0x74,0x01,0xF0,0xA3,
+ 0x04,0xF0,0xA3,0xF0,0x90,0x44,0x97,0xE0,
+ 0x60,0x04,0x7F,0x00,0x80,0x05,0x90,0x42,
+ 0x23,0xE0,0xFF,0x90,0x43,0x60,0xEF,0xF0,
+ 0x85,0x2C,0x2C,0x85,0x2C,0x2C,0x90,0x43,
+ 0x81,0xE0,0x14,0x70,0x03,0x02,0x72,0xFE,
+ 0x04,0x60,0x03,0x02,0x73,0x30,0x90,0x43,
+ 0x60,0xE0,0x60,0x09,0xE4,0xFD,0x7F,0x02,
+ 0x12,0x5C,0x4D,0x80,0x35,0x90,0x41,0xD5,
+ 0xE0,0xB4,0x01,0x23,0x90,0xF9,0x01,0xE0,
+ 0x90,0x43,0x5F,0xF0,0x90,0xF9,0x00,0xE0,
+ 0xFF,0x90,0x43,0x5D,0xF0,0x60,0x0B,0xA3,
+ 0x74,0x02,0xF0,0xA3,0xE0,0x24,0x02,0xF0,
+ 0x80,0x05,0xE4,0x90,0x43,0x5E,0xF0,0x90,
+ 0x43,0x5E,0xE0,0xFF,0xA3,0xE0,0xFD,0x12,
+ 0x5C,0x4D,0x90,0xF4,0x63,0xE4,0xF0,0x90,
+ 0xF4,0x69,0x74,0xFB,0xF0,0xA3,0xE4,0xF0,
+ 0x90,0xF4,0x6D,0x74,0x05,0xF0,0x7F,0x01,
+ 0x12,0x5C,0x30,0x12,0x6A,0x11,0x90,0x43,
+ 0x60,0xE0,0xFF,0x60,0x06,0x90,0xF9,0x00,
+ 0x74,0x01,0xF0,0x90,0xF5,0xC2,0x74,0x01,
+ 0xF0,0xE4,0xF0,0xEF,0x60,0x0F,0xE4,0x90,
+ 0x42,0x40,0xF0,0x04,0x12,0x77,0x03,0x90,
+ 0x42,0x40,0xE0,0x60,0x32,0x90,0xF1,0x57,
+ 0xE0,0x60,0x08,0x90,0xF1,0x49,0x74,0x01,
+ 0xF0,0xE4,0xF0,0x7D,0xFF,0x7C,0x7F,0xE4,
+ 0xFF,0x12,0x47,0xAD,0x90,0xF1,0x82,0xE0,
+ 0x70,0x15,0x90,0xF1,0x57,0xE0,0x60,0x0F,
+ 0x90,0x42,0x62,0xE0,0xB4,0x01,0x08,0x90,
+ 0xF1,0x7C,0xE0,0x60,0xE7,0x80,0xE5,0xE4,
+ 0x90,0x42,0x9F,0xF0,0x90,0xF1,0xB5,0xE0,
+ 0x90,0x42,0xA0,0xF0,0x90,0xF1,0xB4,0xE0,
+ 0x90,0x42,0xA1,0xF0,0x90,0xF1,0xB3,0xE0,
+ 0x90,0x42,0xA2,0xF0,0x22,0x90,0x43,0x6B,
+ 0x12,0xAA,0x9B,0x00,0x00,0x00,0x00,0x90,
+ 0x43,0x6F,0x12,0xAA,0x9B,0x00,0x00,0x00,
+ 0x00,0xE4,0x90,0x43,0x92,0xF0,0xA3,0xF0,
+ 0x90,0x43,0x94,0xF0,0xA3,0xF0,0x90,0x43,
+ 0x83,0xE0,0xFF,0xA3,0xE0,0x90,0x43,0x61,
+ 0xCF,0xF0,0xA3,0xEF,0xF0,0x90,0x43,0x85,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0xD3,0x90,0x43,
+ 0x62,0xE0,0x9F,0x90,0x43,0x61,0xE0,0x9E,
+ 0x40,0x03,0x02,0x74,0xD6,0xA3,0xE0,0x90,
+ 0xF6,0x67,0xF0,0x90,0x43,0x61,0xE0,0x90,
+ 0xF6,0x68,0xF0,0x90,0xF6,0x66,0x74,0x01,
+ 0xF0,0x90,0xF6,0x66,0xE0,0xB4,0x01,0xF9,
+ 0x90,0xF6,0x30,0xE0,0x54,0x0F,0xFB,0xA3,
+ 0xE0,0x75,0xF0,0x10,0xA4,0xFF,0x90,0xF6,
+ 0x30,0xE0,0xFD,0xC4,0x54,0x0F,0x7C,0x00,
+ 0x2F,0xFF,0xEC,0x35,0xF0,0xFE,0xE4,0xFD,
+ 0x90,0x43,0x63,0x12,0xAA,0x8F,0xEB,0xB4,
+ 0x0F,0x16,0x90,0x43,0x63,0xE0,0xFC,0xA3,
+ 0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0x90,0x43,0x67,0x12,0xAA,0x8F,0x80,0x25,
+ 0x90,0x43,0x63,0xE0,0xFC,0xA3,0xE0,0xFD,
+ 0xA3,0xE0,0xFE,0xA3,0xE0,0x24,0x00,0xFF,
+ 0xEE,0x34,0x10,0xFE,0xE4,0x3D,0xFD,0xE4,
+ 0x3C,0xFC,0xA8,0x03,0x12,0xAA,0x7C,0x90,
+ 0x43,0x67,0x12,0xAA,0x8F,0x90,0x43,0x6B,
+ 0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x90,0x43,0x67,0xE0,0xF8,
+ 0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,
+ 0xFB,0xD3,0x12,0xAA,0x44,0x40,0x48,0x90,
+ 0x43,0x6B,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x43,0x6F,
+ 0x12,0xAA,0x8F,0x90,0x43,0x92,0xE0,0xFF,
+ 0xA3,0xE0,0x90,0x43,0x94,0xCF,0xF0,0xA3,
+ 0xEF,0xF0,0x90,0x43,0x67,0xE0,0xFC,0xA3,
+ 0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0x90,0x43,0x6B,0x12,0xAA,0x8F,0x90,0x43,
+ 0x61,0xE0,0xFF,0xA3,0xE0,0x90,0x43,0x92,
+ 0xCF,0xF0,0xA3,0xEF,0xF0,0x80,0x45,0x90,
+ 0x43,0x6F,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x43,0x67,
+ 0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,
+ 0xA3,0xE0,0xFB,0xD3,0x12,0xAA,0x44,0x40,
+ 0x23,0x90,0x43,0x67,0xE0,0xFC,0xA3,0xE0,
+ 0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,0x90,
+ 0x43,0x6F,0x12,0xAA,0x8F,0x90,0x43,0x61,
+ 0xE0,0xFF,0xA3,0xE0,0x90,0x43,0x94,0xCF,
+ 0xF0,0xA3,0xEF,0xF0,0x90,0x43,0x62,0xE0,
+ 0x04,0xF0,0x70,0x06,0x90,0x43,0x61,0xE0,
+ 0x04,0xF0,0x02,0x73,0x7E,0x22,0x90,0x41,
+ 0xB9,0xE0,0xFE,0x90,0x41,0xB8,0xE0,0x7C,
+ 0x00,0x24,0x00,0xFF,0xEC,0x3E,0x90,0x43,
+ 0x73,0xF0,0xA3,0xEF,0xF0,0xE4,0x7F,0x50,
+ 0x7E,0x0D,0xFD,0x90,0x43,0x8B,0xE0,0xF8,
+ 0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,
+ 0xFB,0xC3,0x12,0xAA,0x44,0x40,0x24,0x90,
+ 0x43,0x8B,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,
+ 0xE0,0xFE,0xA3,0xE0,0x24,0xB0,0xFF,0xEE,
+ 0x34,0xF2,0xFE,0xED,0x34,0xFF,0xFD,0xEC,
+ 0x34,0xFF,0xFC,0x90,0x43,0x87,0x12,0xAA,
+ 0x8F,0x80,0x23,0x90,0x43,0x8B,0xE0,0xF8,
+ 0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,
+ 0xFB,0xC3,0x74,0x50,0x9B,0xFF,0x74,0x0D,
+ 0x9A,0xFE,0xE4,0x99,0xFD,0xE4,0x98,0xFC,
+ 0x90,0x43,0x87,0x12,0xAA,0x8F,0x90,0x43,
+ 0x73,0xE0,0xFE,0xA3,0xE0,0xFF,0xE4,0xFC,
+ 0xFD,0x90,0x43,0x87,0xE0,0xF8,0xA3,0xE0,
+ 0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,0xFB,0x12,
+ 0xA9,0xD1,0x78,0x09,0x12,0xAA,0x55,0x90,
+ 0x43,0x87,0x12,0xAA,0x8F,0xE4,0x7F,0x50,
+ 0x7E,0x0D,0xFD,0xFC,0x90,0x43,0x8B,0xE0,
+ 0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,0xA3,
+ 0xE0,0xFB,0xC3,0x12,0xAA,0x44,0x50,0x22,
+ 0x90,0x43,0x87,0xE0,0xF8,0xA3,0xE0,0xF9,
+ 0xA3,0xE0,0xFA,0xA3,0xE0,0xFB,0xC3,0xE4,
+ 0x9B,0xFF,0x74,0x40,0x9A,0xFE,0xE4,0x99,
+ 0xFD,0xE4,0x98,0xFC,0x90,0x43,0x87,0x12,
+ 0xAA,0x8F,0x22,0x90,0x41,0xB7,0xE0,0xFE,
+ 0x90,0x41,0xB6,0xE0,0x7C,0x00,0x24,0x00,
+ 0xFF,0xEC,0x3E,0xFE,0xE4,0xFD,0x90,0x43,
+ 0x87,0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,
+ 0xFA,0xA3,0xE0,0xFB,0x12,0xA9,0xD1,0x78,
+ 0x09,0x12,0xAA,0x55,0x90,0x43,0x8B,0x12,
+ 0xAA,0x8F,0x22,0x74,0xFF,0x90,0x43,0x77,
+ 0xF0,0xA3,0xF0,0x90,0x43,0x83,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0xC3,0x90,0x43,0x86,0xE0,
+ 0x9F,0xFF,0x90,0x43,0x85,0xE0,0x9E,0xFE,
+ 0x90,0x42,0x21,0xE0,0xFD,0x7C,0x00,0x12,
+ 0xA9,0x34,0x90,0x42,0x20,0xE0,0xFD,0xEF,
+ 0xA8,0x05,0x08,0x80,0x05,0xCE,0xC3,0x13,
+ 0xCE,0x13,0xD8,0xF9,0xFF,0x90,0x42,0x22,
+ 0xE0,0x2F,0x90,0x43,0x75,0xF0,0x90,0x43,
+ 0x82,0xE0,0x70,0x16,0x12,0x73,0x4E,0x90,
+ 0x43,0x92,0xE0,0xFE,0xA3,0xE0,0xFF,0xE4,
+ 0xFC,0xFD,0x90,0x43,0x8B,0x12,0xAA,0x8F,
+ 0x80,0x3F,0x90,0x43,0x82,0xE0,0xB4,0x01,
+ 0x16,0x12,0x73,0x4E,0x90,0x43,0x92,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0xE4,0xFC,0xFD,0x90,
+ 0x43,0x8B,0x12,0xAA,0x8F,0x80,0x22,0x90,
+ 0x43,0x85,0xE0,0xFE,0xA3,0xE0,0xFF,0x90,
+ 0x43,0x84,0xE0,0x2F,0xFF,0x90,0x43,0x83,
+ 0xE0,0x3E,0xC3,0x13,0xFE,0xEF,0x13,0xFF,
+ 0xE4,0xFC,0xFD,0x90,0x43,0x8B,0x12,0xAA,
+ 0x8F,0x12,0x74,0xD7,0x90,0x43,0x84,0xE0,
+ 0x24,0xB0,0xF0,0x90,0x43,0x83,0xE0,0x34,
+ 0x02,0xF0,0x90,0x43,0x86,0xE0,0x24,0xB0,
+ 0xF0,0x90,0x43,0x85,0xE0,0x34,0x02,0xF0,
+ 0x90,0x43,0x82,0xE0,0xFF,0x70,0x20,0x90,
+ 0x43,0x75,0xE0,0xA3,0xF0,0x90,0xF1,0x09,
+ 0xF0,0x90,0x43,0x8A,0xE0,0x90,0xF1,0x0E,
+ 0xF0,0x90,0x43,0x89,0xE0,0x90,0xF1,0x0F,
+ 0xF0,0xA3,0x74,0x01,0xF0,0x80,0x34,0xEF,
+ 0x64,0x01,0x70,0x2F,0x90,0x43,0x8F,0xE0,
+ 0x70,0x0A,0x90,0x43,0x75,0xE0,0x90,0xF1,
+ 0x0B,0xF0,0x80,0x0B,0x90,0x43,0x76,0xE0,
+ 0xFF,0xC3,0x13,0x90,0xF1,0x0B,0xF0,0x90,
+ 0x43,0x8A,0xE0,0x90,0xF1,0x12,0xF0,0x90,
+ 0x43,0x89,0xE0,0x90,0xF1,0x13,0xF0,0xA3,
+ 0x74,0x01,0xF0,0x90,0x43,0x82,0xE0,0x04,
+ 0xF0,0x22,0xE4,0x90,0x43,0x8F,0xF0,0x90,
+ 0x43,0x82,0xF0,0x90,0x42,0x25,0xE0,0x90,
+ 0x43,0x7A,0xF0,0x90,0x42,0x26,0xE0,0x90,
+ 0x43,0x79,0xF0,0x90,0xF6,0x25,0xE4,0xF0,
+ 0x90,0x42,0x24,0xE0,0x90,0xF6,0x26,0xF0,
+ 0x90,0xF6,0x2B,0x74,0x02,0xF0,0xA3,0xF0,
+ 0xA3,0xE4,0xF0,0x90,0xF6,0x25,0x04,0xF0,
+ 0x90,0xF6,0x2F,0xF0,0x90,0xF6,0x2F,0xE0,
+ 0xB4,0x01,0xF9,0x90,0xF6,0x32,0xE0,0x90,
+ 0x43,0x91,0xF0,0x90,0xF6,0x33,0xE0,0x90,
+ 0x43,0x90,0xF0,0x90,0x43,0x79,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0xC3,0x90,0x43,0x91,0xE0,
+ 0x9F,0x90,0x43,0x90,0xE0,0x9E,0x40,0x03,
+ 0x02,0x7A,0x09,0x90,0x43,0x79,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0xC3,0x90,0x43,0x91,0xE0,
+ 0x9F,0x90,0x43,0x90,0xE0,0x9E,0x50,0x3A,
+ 0x90,0xF6,0x2C,0xE0,0xB4,0x02,0x05,0x74,
+ 0x01,0xF0,0x80,0x0A,0x90,0xF6,0x2B,0xE0,
+ 0x04,0xF0,0xA3,0x74,0x02,0xF0,0x90,0xF6,
+ 0x2F,0x74,0x01,0xF0,0x90,0xF6,0x2F,0xE0,
+ 0xB4,0x01,0xF9,0x90,0xF6,0x32,0xE0,0x90,
+ 0x43,0x91,0xF0,0x90,0xF6,0x33,0xE0,0x90,
+ 0x43,0x90,0xF0,0x90,0xF6,0x2B,0xE0,0xB4,
+ 0x0F,0xB1,0x90,0x42,0x27,0xE0,0xFF,0x90,
+ 0xF6,0x2B,0xE0,0xC3,0x9F,0x40,0x04,0x7F,
+ 0x01,0x80,0x02,0x7F,0x00,0x90,0x43,0x80,
+ 0xEF,0xF0,0x60,0x5C,0x90,0xF1,0x2F,0xE4,
+ 0xF0,0x90,0xF1,0x34,0x04,0xF0,0x90,0xF1,
+ 0x37,0x74,0x10,0xF0,0xA3,0x74,0x06,0xF0,
+ 0x90,0xF1,0x3B,0x74,0x60,0xF0,0xA3,0x74,
+ 0x1A,0xF0,0x90,0xF1,0x3F,0x74,0xC0,0xF0,
+ 0xA3,0x74,0x2D,0xF0,0x90,0xF1,0x33,0x74,
+ 0x01,0xF0,0x90,0xF1,0x36,0x74,0x0D,0xF0,
+ 0x90,0xF1,0x39,0x74,0x10,0xF0,0xA3,0x74,
+ 0x18,0xF0,0x90,0xF1,0x3D,0x74,0x60,0xF0,
+ 0xA3,0x74,0x1B,0xF0,0x90,0xF1,0x41,0x74,
+ 0x40,0xF0,0xA3,0x74,0x3A,0xF0,0x90,0xF1,
+ 0x35,0x74,0x01,0xF0,0x90,0xF1,0x11,0xF0,
+ 0x90,0xF6,0x2B,0xE0,0x14,0xF0,0xC2,0xAF,
+ 0x90,0xF6,0x2D,0x74,0x01,0xF0,0x04,0x12,
+ 0xA7,0x90,0x90,0x42,0x40,0xE0,0x60,0x03,
+ 0x02,0x7A,0x26,0x90,0xF6,0x4C,0xE0,0x90,
+ 0x43,0x7C,0xF0,0x90,0xF6,0x4D,0xE0,0x90,
+ 0x43,0x7D,0xF0,0x90,0xF6,0x4E,0xE0,0x90,
+ 0x43,0x7E,0xF0,0x90,0xF6,0x4F,0xE0,0x90,
+ 0x43,0x7F,0xF0,0x90,0x43,0x7D,0xE0,0xFF,
+ 0x90,0x43,0x7C,0xE0,0xFE,0x6F,0x60,0x20,
+ 0x90,0x43,0x7E,0xE0,0xFD,0xEE,0x6D,0x60,
+ 0x17,0xA3,0xE0,0xFC,0xEE,0x6C,0x60,0x10,
+ 0xEF,0x6D,0x60,0x0C,0x90,0x43,0x7D,0xE0,
+ 0x6C,0x60,0x05,0xA3,0xE0,0xB5,0x04,0x06,
+ 0x90,0x43,0x8F,0x74,0x01,0xF0,0x90,0x43,
+ 0x7B,0x74,0x04,0xF0,0x90,0x43,0x7B,0xE0,
+ 0xFF,0xC3,0x94,0x06,0x40,0x03,0x02,0x7A,
+ 0x09,0x90,0xF6,0x4C,0xE0,0x6F,0x70,0x4B,
+ 0x90,0x43,0x8F,0xE0,0xB4,0x01,0x21,0x90,
+ 0x43,0x7B,0xE0,0xB4,0x05,0x1A,0x90,0x43,
+ 0x84,0x74,0xA0,0xF0,0x90,0x43,0x83,0x74,
+ 0x0F,0xF0,0x90,0x43,0x86,0x74,0x9F,0xF0,
+ 0x90,0x43,0x85,0x74,0x1A,0xF0,0x80,0x20,
+ 0x90,0xF6,0x34,0xE0,0x90,0x43,0x84,0xF0,
+ 0x90,0xF6,0x35,0xE0,0x90,0x43,0x83,0xF0,
+ 0x90,0xF6,0x36,0xE0,0x90,0x43,0x86,0xF0,
+ 0x90,0xF6,0x37,0xE0,0x90,0x43,0x85,0xF0,
+ 0x12,0x75,0xE4,0x90,0x43,0x7B,0xE0,0xFF,
+ 0x90,0xF6,0x4D,0xE0,0x6F,0x70,0x48,0x90,
+ 0x43,0x8F,0xE0,0xB4,0x01,0x1E,0xEF,0xB4,
+ 0x05,0x1A,0x90,0x43,0x84,0x74,0xA0,0xF0,
+ 0x90,0x43,0x83,0x74,0x0F,0xF0,0x90,0x43,
+ 0x86,0x74,0x9F,0xF0,0x90,0x43,0x85,0x74,
+ 0x1A,0xF0,0x80,0x20,0x90,0xF6,0x3A,0xE0,
+ 0x90,0x43,0x84,0xF0,0x90,0xF6,0x3B,0xE0,
+ 0x90,0x43,0x83,0xF0,0x90,0xF6,0x3C,0xE0,
+ 0x90,0x43,0x86,0xF0,0x90,0xF6,0x3D,0xE0,
+ 0x90,0x43,0x85,0xF0,0x12,0x75,0xE4,0x90,
+ 0x43,0x7B,0xE0,0xFF,0x90,0xF6,0x4E,0xE0,
+ 0x6F,0x70,0x48,0x90,0x43,0x8F,0xE0,0xB4,
+ 0x01,0x1E,0xEF,0xB4,0x05,0x1A,0x90,0x43,
+ 0x84,0x74,0xA0,0xF0,0x90,0x43,0x83,0x74,
+ 0x0F,0xF0,0x90,0x43,0x86,0x74,0x9F,0xF0,
+ 0x90,0x43,0x85,0x74,0x1A,0xF0,0x80,0x20,
+ 0x90,0xF6,0x40,0xE0,0x90,0x43,0x84,0xF0,
+ 0x90,0xF6,0x41,0xE0,0x90,0x43,0x83,0xF0,
+ 0x90,0xF6,0x42,0xE0,0x90,0x43,0x86,0xF0,
+ 0x90,0xF6,0x43,0xE0,0x90,0x43,0x85,0xF0,
+ 0x12,0x75,0xE4,0x90,0x43,0x7B,0xE0,0xFF,
+ 0x90,0xF6,0x4F,0xE0,0x6F,0x70,0x48,0x90,
+ 0x43,0x8F,0xE0,0xB4,0x01,0x1E,0xEF,0xB4,
+ 0x05,0x1A,0x90,0x43,0x84,0x74,0xA0,0xF0,
+ 0x90,0x43,0x83,0x74,0x0F,0xF0,0x90,0x43,
+ 0x86,0x74,0x9F,0xF0,0x90,0x43,0x85,0x74,
+ 0x1A,0xF0,0x80,0x20,0x90,0xF6,0x46,0xE0,
+ 0x90,0x43,0x84,0xF0,0x90,0xF6,0x47,0xE0,
+ 0x90,0x43,0x83,0xF0,0x90,0xF6,0x48,0xE0,
+ 0x90,0x43,0x86,0xF0,0x90,0xF6,0x49,0xE0,
+ 0x90,0x43,0x85,0xF0,0x12,0x75,0xE4,0x90,
+ 0x43,0x7B,0xE0,0x04,0xF0,0x02,0x78,0xA5,
+ 0x90,0xF6,0x25,0xE4,0xF0,0x90,0x43,0x80,
+ 0xE0,0x70,0x0D,0x90,0x43,0x82,0xE0,0xB4,
+ 0x01,0x06,0x90,0xF1,0x0A,0x74,0x01,0xF0,
+ 0x7F,0x01,0x12,0x6D,0xE8,0x22,0xE4,0xFD,
+ 0x90,0xF5,0xF7,0xE0,0xFE,0x90,0xF5,0xF6,
+ 0xE0,0x7A,0x00,0x24,0x00,0xFF,0xEA,0x3E,
+ 0x90,0x43,0xDE,0xF0,0xA3,0xEF,0xF0,0x90,
+ 0x43,0xDE,0xE0,0xFE,0xA3,0xE0,0xFF,0xC3,
+ 0x94,0x40,0xEE,0x94,0x08,0x40,0x0A,0xD3,
+ 0xEF,0x94,0x60,0xEE,0x94,0x08,0x50,0x01,
+ 0x0D,0x90,0x41,0xF3,0xE0,0x64,0x02,0x70,
+ 0x45,0xED,0x64,0x01,0x70,0x40,0x90,0xF9,
+ 0x04,0xE0,0x64,0x01,0x70,0x38,0x90,0xF9,
+ 0x01,0xE0,0x64,0x03,0x70,0x30,0x90,0xF9,
+ 0x00,0xE0,0x64,0x01,0x70,0x28,0x90,0xF9,
+ 0x03,0xE0,0x64,0x02,0x70,0x20,0x90,0x43,
+ 0xE4,0xE0,0xFF,0x70,0x0B,0x90,0xF5,0x6C,
+ 0x74,0xE5,0xF0,0xA3,0x74,0x01,0xF0,0x22,
+ 0xEF,0xB4,0x01,0x0A,0x90,0xF5,0x6C,0x74,
+ 0x1B,0xF0,0xA3,0x74,0x02,0xF0,0x22,0x90,
+ 0x43,0xE2,0x74,0x01,0xF0,0x90,0x41,0xF3,
+ 0xE0,0xFF,0xD3,0x94,0x01,0x40,0x05,0xEF,
+ 0x14,0xFF,0x80,0x02,0x7F,0x01,0x90,0x43,
+ 0xE3,0xEF,0xF0,0x90,0xF6,0x6D,0x74,0x01,
+ 0xF0,0x90,0x41,0xF3,0xE0,0x90,0xF6,0x6C,
+ 0xF0,0x90,0xF6,0x69,0x74,0x01,0xF0,0xE4,
+ 0xF9,0x90,0x41,0xF3,0xE0,0xFE,0xE9,0xC3,
+ 0x9E,0x50,0x47,0xE9,0x25,0xE0,0x24,0xC5,
+ 0xF5,0x82,0xE4,0x34,0x43,0xF5,0x83,0xE0,
+ 0x90,0xF6,0x6B,0xF0,0xE9,0x25,0xE0,0x24,
+ 0xC6,0xF5,0x82,0xE4,0x34,0x43,0xF5,0x83,
+ 0xE0,0x90,0xF6,0x6A,0xF0,0xE9,0x25,0xE0,
+ 0x24,0xCD,0xF5,0x82,0xE4,0x34,0x43,0xF5,
+ 0x83,0xE0,0x90,0xF6,0x6B,0xF0,0xE9,0x25,
+ 0xE0,0x24,0xCE,0xF5,0x82,0xE4,0x34,0x43,
+ 0xF5,0x83,0xE0,0x90,0xF6,0x6A,0xF0,0x09,
+ 0x80,0xAF,0x90,0x42,0x12,0xE0,0xB4,0x01,
+ 0x46,0x90,0x43,0xBF,0xE0,0xFC,0xA3,0xE0,
+ 0xFD,0xC3,0x90,0x43,0xEA,0xE0,0x9D,0x90,
+ 0x43,0xE9,0xE0,0x9C,0x50,0x0E,0x90,0x43,
+ 0xBF,0xE0,0xA3,0xE0,0x90,0x43,0xE9,0xEC,
+ 0xF0,0xA3,0xED,0xF0,0x90,0x43,0xC1,0xE0,
+ 0xFC,0xA3,0xE0,0xFD,0xC3,0x90,0x43,0xEC,
+ 0xE0,0x9D,0x90,0x43,0xEB,0xE0,0x9C,0x50,
+ 0x0E,0x90,0x43,0xC1,0xE0,0xA3,0xE0,0x90,
+ 0x43,0xEB,0xEC,0xF0,0xA3,0xED,0xF0,0x79,
+ 0x01,0x90,0x41,0xF3,0xE0,0xFE,0xE9,0xC3,
+ 0x9E,0x50,0x79,0xE9,0x25,0xE0,0x24,0xCD,
+ 0xF5,0x82,0xE4,0x34,0x43,0xF5,0x83,0xE0,
+ 0xFC,0xA3,0xE0,0xFD,0x90,0x43,0xCD,0xE0,
+ 0xFA,0xA3,0xE0,0xFB,0xC3,0xED,0x9B,0xFD,
+ 0xEC,0x9A,0xFC,0xD3,0x90,0x43,0xEA,0xE0,
+ 0x9D,0x90,0x43,0xE9,0xE0,0x9C,0x40,0x06,
+ 0xE9,0x04,0x90,0x43,0xE2,0xF0,0x90,0x43,
+ 0xE0,0xE0,0xFC,0xA3,0xE0,0xFD,0x90,0x43,
+ 0xCE,0xE0,0x2D,0xFD,0x90,0x43,0xCD,0xE0,
+ 0x3C,0xFC,0xC3,0xEE,0x99,0xFF,0x25,0xE0,
+ 0x24,0xCD,0xF5,0x82,0xE4,0x34,0x43,0xF5,
+ 0x83,0xE0,0xFA,0xA3,0xE0,0xFB,0xC3,0xED,
+ 0x9B,0xFD,0xEC,0x9A,0xFC,0xD3,0x90,0x43,
+ 0xEC,0xE0,0x9D,0x90,0x43,0xEB,0xE0,0x9C,
+ 0x40,0x06,0xEF,0x14,0x90,0x43,0xE3,0xF0,
+ 0x09,0x02,0x7B,0x7A,0x90,0x43,0xE3,0xE0,
+ 0xFF,0x90,0x43,0xE2,0xE0,0xFE,0xD3,0x9F,
+ 0x40,0x0F,0xEF,0x24,0x01,0xFD,0xE4,0x33,
+ 0xFC,0xEE,0xB5,0x05,0xE7,0xE4,0xB5,0x04,
+ 0xE3,0x90,0x41,0xF3,0xE0,0xFF,0xB4,0x01,
+ 0x0C,0xE4,0x90,0x43,0xE4,0xF0,0x90,0x43,
+ 0xDD,0x74,0x0C,0xF0,0x22,0x90,0x43,0xE3,
+ 0xE0,0xF9,0x24,0x01,0xFD,0xE4,0x33,0xFC,
+ 0x90,0x43,0xE2,0xE0,0xFE,0xB5,0x05,0x1E,
+ 0xE4,0xB5,0x04,0x1A,0xEE,0xB5,0x07,0x07,
+ 0xE4,0x90,0x43,0xE4,0xF0,0x80,0x08,0x90,
+ 0x43,0xE2,0xE0,0x90,0x43,0xE4,0xF0,0x90,
+ 0x43,0xDD,0x74,0x0C,0xF0,0x22,0xE9,0xFF,
+ 0x90,0x43,0xE2,0xE0,0x2F,0xFF,0xE4,0x33,
+ 0xA2,0xE7,0x13,0xEF,0x13,0x90,0x43,0xE5,
+ 0xF0,0x90,0x43,0xDD,0x74,0x06,0xF0,0x22,
+ 0x90,0x43,0xE5,0xE0,0xFE,0x90,0x43,0x9F,
+ 0xF0,0xE4,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,
+ 0xA3,0xF0,0xA3,0xF0,0xA3,0xCE,0xF0,0xE4,
+ 0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,
+ 0x90,0x43,0x9F,0xE0,0x04,0xFF,0x90,0x41,
+ 0xF3,0xE0,0xFE,0x2F,0x8E,0xF0,0x84,0xAF,
+ 0xF0,0x90,0x43,0x9F,0xEF,0xF0,0xA3,0xE0,
+ 0xFD,0xA3,0xE0,0xA3,0xCD,0xF0,0xA3,0xED,
+ 0xF0,0xEF,0x25,0xE0,0x24,0xCD,0xF5,0x82,
+ 0xE4,0x34,0x43,0xF5,0x83,0xE0,0xFE,0xA3,
+ 0xE0,0xFF,0x90,0x43,0xE0,0xE0,0xFC,0xA3,
+ 0xE0,0xFD,0xEF,0x2D,0xFF,0xEE,0x3C,0xFE,
+ 0x90,0x43,0xE5,0xE0,0x25,0xE0,0x24,0xCD,
+ 0xF5,0x82,0xE4,0x34,0x43,0xF5,0x83,0xE0,
+ 0xFA,0xA3,0xE0,0xFB,0xC3,0xEF,0x9B,0xFF,
+ 0xEE,0x9A,0xFE,0xED,0x24,0x01,0xFD,0xE4,
+ 0x3C,0xFC,0x12,0xA9,0x9B,0x90,0x43,0xA0,
+ 0xEC,0xF0,0xA3,0xED,0xF0,0xD3,0x90,0x43,
+ 0xDC,0xE0,0x9D,0xEC,0x64,0x80,0xF8,0x90,
+ 0x43,0xDB,0xE0,0x64,0x80,0x98,0x50,0x80,
+ 0x90,0x41,0xF3,0xE0,0xFD,0x7C,0x00,0x90,
+ 0x43,0xA5,0xE0,0x2D,0xFF,0x90,0x43,0xA4,
+ 0xE0,0x3C,0xCF,0x24,0xFF,0xCF,0x34,0xFF,
+ 0xFE,0x12,0xA9,0x9B,0xEC,0xF0,0xA3,0xED,
+ 0xF0,0xA3,0xE0,0xFF,0xA3,0xE0,0xA3,0xCF,
+ 0xF0,0xA3,0xEF,0xF0,0x90,0x43,0xA5,0xE0,
+ 0x25,0xE0,0xFF,0x90,0x43,0xA4,0xE0,0x33,
+ 0xFE,0x74,0xCD,0x2F,0xF5,0x82,0x74,0x43,
+ 0x3E,0xF5,0x83,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0x90,0x43,0xE5,0xE0,0x25,0xE0,0x24,0xCD,
+ 0xF5,0x82,0xE4,0x34,0x43,0xF5,0x83,0xE0,
+ 0xFC,0xA3,0xE0,0xFD,0x90,0x43,0xE0,0xE0,
+ 0xFA,0xA3,0xE0,0xFB,0xED,0x2B,0xFD,0xEC,
+ 0x3A,0xCD,0xC3,0x9F,0xFF,0xED,0x9E,0xFE,
+ 0xEB,0x24,0x01,0xFD,0xE4,0x3A,0xFC,0x12,
+ 0xA9,0x9B,0x90,0x43,0xA6,0xEC,0xF0,0xA3,
+ 0xED,0xF0,0xD3,0x90,0x43,0xDC,0xE0,0x9D,
+ 0xEC,0x64,0x80,0xF8,0x90,0x43,0xDB,0xE0,
+ 0x64,0x80,0x98,0x40,0x03,0x02,0x7D,0x19,
+ 0x90,0x43,0xA2,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0x90,0x43,0xA8,0xE0,0xFC,0xA3,0xE0,0xFD,
+ 0x9F,0xEE,0x64,0x80,0xF8,0xEC,0x64,0x80,
+ 0x98,0x40,0x08,0xA3,0xEC,0xF0,0xA3,0xED,
+ 0xF0,0x80,0x08,0x90,0x43,0xAA,0xEE,0xF0,
+ 0xA3,0xEF,0xF0,0x90,0x43,0xA0,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x90,0x43,0xA6,0xE0,0xFC,
+ 0xA3,0xE0,0xFD,0xC3,0x9F,0xEE,0x64,0x80,
+ 0xF8,0xEC,0x64,0x80,0x98,0x50,0x2B,0x90,
+ 0x43,0xAC,0xEC,0xF0,0xA3,0xED,0xF0,0x90,
+ 0x41,0xF3,0xE0,0xFD,0x7C,0x00,0x90,0x43,
+ 0xA5,0xE0,0x2D,0xFF,0x90,0x43,0xA4,0xE0,
+ 0x3C,0xCF,0x24,0xFF,0xCF,0x34,0xFF,0xFE,
+ 0x12,0xA9,0x9B,0xEC,0xF0,0xA3,0xED,0xF0,
+ 0x80,0x24,0x90,0x43,0xA0,0xE0,0xFF,0xA3,
+ 0xE0,0x90,0x43,0xAC,0xCF,0xF0,0xA3,0xEF,
+ 0xF0,0x90,0x43,0x9F,0xE0,0x04,0xFF,0x90,
+ 0x41,0xF3,0xE0,0xFE,0x2F,0x8E,0xF0,0x84,
+ 0x90,0x43,0x9F,0xE5,0xF0,0xF0,0x90,0x43,
+ 0xAA,0xE0,0xFE,0xA3,0xE0,0xFF,0xC3,0x90,
+ 0x43,0xAD,0xE0,0x9F,0xFF,0x90,0x43,0xAC,
+ 0xE0,0x9E,0x90,0x43,0xAE,0xF0,0xA3,0xEF,
+ 0xF0,0xE4,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,
+ 0x90,0x43,0x9E,0xF0,0x90,0x43,0xE8,0xE0,
+ 0x75,0xF0,0x04,0xA4,0xFF,0xC3,0x90,0x43,
+ 0xAF,0xE0,0x9F,0xE5,0xF0,0x64,0x80,0xF8,
+ 0x90,0x43,0xAE,0xE0,0x64,0x80,0x98,0x40,
+ 0x03,0x02,0x80,0x4A,0x90,0x43,0xB0,0xE0,
+ 0x60,0x03,0x02,0x80,0x4A,0x90,0x43,0x9E,
+ 0xE0,0x94,0x14,0x40,0x17,0x90,0xF5,0xE7,
+ 0xE4,0xF0,0x90,0xF5,0xE1,0xF0,0xF5,0x0F,
+ 0x7B,0x01,0x7A,0x43,0x79,0x49,0x7D,0x01,
+ 0xFC,0x12,0xAD,0x13,0x90,0x43,0x9E,0xE0,
+ 0x04,0xF0,0x90,0x43,0xAC,0xE0,0xFF,0xA3,
+ 0xE0,0x90,0x43,0xAA,0xCF,0xF0,0xA3,0xEF,
+ 0xF0,0x90,0x43,0x9F,0xE0,0x25,0xE0,0x24,
+ 0xCD,0xF5,0x82,0xE4,0x34,0x43,0xF5,0x83,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x43,0xE0,
+ 0xE0,0xFC,0xA3,0xE0,0xFD,0xEF,0x2D,0xFF,
+ 0xEE,0x3C,0xFE,0x90,0x43,0xE5,0xE0,0x25,
+ 0xE0,0x24,0xCD,0xF5,0x82,0xE4,0x34,0x43,
+ 0xF5,0x83,0xE0,0xFA,0xA3,0xE0,0xFB,0xC3,
+ 0xEF,0x9B,0xFF,0xEE,0x9A,0xFE,0xED,0x24,
+ 0x01,0xFD,0xE4,0x3C,0xFC,0x12,0xA9,0x9B,
+ 0x90,0x43,0xA0,0xEC,0xF0,0xA3,0xED,0xF0,
+ 0x90,0x43,0xA5,0xE0,0x25,0xE0,0xFF,0x90,
+ 0x43,0xA4,0xE0,0x33,0xFE,0x74,0xCD,0x2F,
+ 0xF5,0x82,0x74,0x43,0x3E,0xF5,0x83,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0x90,0x43,0xE5,0xE0,
+ 0x25,0xE0,0x24,0xCD,0xF5,0x82,0xE4,0x34,
+ 0x43,0xF5,0x83,0xE0,0xFC,0xA3,0xE0,0xFD,
+ 0x90,0x43,0xE0,0xE0,0xFA,0xA3,0xE0,0xFB,
+ 0xED,0x2B,0xFD,0xEC,0x3A,0xCD,0xC3,0x9F,
+ 0xFF,0xED,0x9E,0xFE,0xEB,0x24,0x01,0xFD,
+ 0xE4,0x3A,0xFC,0x12,0xA9,0x9B,0x90,0x43,
+ 0xA6,0xEC,0xF0,0xA3,0xED,0xF0,0x90,0x43,
+ 0xA0,0xE0,0xFE,0xA3,0xE0,0xFF,0xC3,0x9D,
+ 0xEC,0x64,0x80,0xF8,0xEE,0x64,0x80,0x98,
+ 0x50,0x3F,0x90,0x43,0xAC,0xEE,0xF0,0xA3,
+ 0xEF,0xF0,0x90,0x43,0xB2,0xE0,0x60,0x03,
+ 0x02,0x80,0x17,0x90,0x43,0xE5,0xE0,0xFF,
+ 0x90,0x43,0x9F,0xE0,0xFE,0xB5,0x07,0x04,
+ 0x7F,0x01,0x80,0x02,0x7F,0x00,0x90,0x43,
+ 0xB2,0xEF,0xF0,0x70,0x69,0xEE,0x04,0xFF,
+ 0x90,0x41,0xF3,0xE0,0xFE,0x2F,0x8E,0xF0,
+ 0x84,0x90,0x43,0x9F,0xE5,0xF0,0xF0,0x80,
+ 0x55,0x90,0x43,0xA6,0xE0,0xFF,0xA3,0xE0,
+ 0x90,0x43,0xAC,0xCF,0xF0,0xA3,0xEF,0xF0,
+ 0x90,0x43,0xB1,0xE0,0x70,0x40,0x90,0x43,
+ 0xE5,0xE0,0xFF,0x7E,0x00,0x90,0x43,0xA4,
+ 0xE0,0xFA,0xA3,0xE0,0xFB,0xB5,0x07,0x08,
+ 0xEE,0xB5,0x02,0x04,0x7F,0x01,0x80,0x02,
+ 0x7F,0x00,0x90,0x43,0xB1,0xEF,0xF0,0x70,
+ 0x1D,0x90,0x41,0xF3,0xE0,0xFD,0x7C,0x00,
+ 0x2B,0xFF,0xEC,0x3A,0xCF,0x24,0xFF,0xCF,
+ 0x34,0xFF,0xFE,0x12,0xA9,0x9B,0x90,0x43,
+ 0xA4,0xEC,0xF0,0xA3,0xED,0xF0,0x12,0xA8,
+ 0x04,0x05,0x2C,0x85,0x2C,0x2C,0x05,0x2C,
+ 0x85,0x2C,0x2C,0x05,0x2C,0x85,0x2C,0x2C,
+ 0x05,0x2C,0x85,0x2C,0x2C,0x05,0x2C,0x85,
+ 0x2C,0x2C,0x05,0x2C,0x85,0x2C,0x2C,0x05,
+ 0x2C,0x85,0x2C,0x2C,0x05,0x2C,0x85,0x2C,
+ 0x2C,0x05,0x2C,0x85,0x2C,0x2C,0x02,0x7E,
+ 0x6D,0x90,0x43,0xB0,0xE0,0x60,0x0F,0x90,
+ 0x43,0xDD,0x74,0x07,0xF0,0x90,0x43,0xED,
+ 0x74,0x01,0xF0,0x02,0x81,0x04,0x90,0x43,
+ 0xE8,0xE0,0xF9,0x25,0xE0,0xFF,0xE4,0x33,
+ 0xFE,0x90,0x43,0xDB,0xE0,0xFC,0xA3,0xE0,
+ 0xFD,0x90,0x43,0xAC,0xE0,0xFA,0xA3,0xE0,
+ 0xFB,0xC3,0x9D,0xFD,0xEA,0x9C,0xFC,0xC3,
+ 0xED,0x9F,0xEE,0x64,0x80,0xF8,0xEC,0x64,
+ 0x80,0x98,0x50,0x22,0xE9,0x75,0xF0,0x02,
+ 0xA4,0xFF,0x90,0x43,0xDC,0xE0,0x2F,0xFF,
+ 0x90,0x43,0xDB,0xE0,0x35,0xF0,0xFE,0xC3,
+ 0xEB,0x9F,0xFF,0xEA,0x9E,0x90,0x43,0xE6,
+ 0xF0,0xA3,0xEF,0xF0,0x80,0x55,0xE9,0x25,
+ 0xE0,0xFF,0xE4,0x33,0xFE,0x90,0x43,0xAA,
+ 0xE0,0xFC,0xA3,0xE0,0xFD,0x90,0x43,0xDB,
+ 0xE0,0xFA,0xA3,0xE0,0xFB,0xC3,0x9D,0xFD,
+ 0xEA,0x9C,0xFC,0xC3,0xED,0x9F,0xEE,0x64,
+ 0x80,0xF8,0xEC,0x64,0x80,0x98,0x50,0x24,
+ 0xE9,0x25,0xE0,0xFF,0xE4,0x33,0xFE,0xEB,
+ 0x2F,0xFF,0xEA,0x3E,0xFE,0x90,0x43,0xAA,
+ 0xE0,0xFC,0xA3,0xE0,0xFD,0xC3,0xEF,0x9D,
+ 0xFF,0xEE,0x9C,0x90,0x43,0xE6,0xF0,0xA3,
+ 0xEF,0xF0,0x80,0x07,0xE4,0x90,0x43,0xE6,
+ 0xF0,0xA3,0xF0,0x90,0x43,0xED,0x74,0x03,
+ 0xF0,0x90,0xF5,0xE6,0xF0,0x90,0x43,0xE6,
+ 0xE0,0xA2,0xE7,0x13,0xF0,0xA3,0xE0,0x13,
+ 0xF0,0x90,0x43,0xDD,0x74,0x07,0xF0,0x22,
+ 0xAD,0x07,0x90,0x43,0xEF,0xE0,0x90,0xF5,
+ 0xDB,0xF0,0x90,0x43,0xEE,0xE0,0xFF,0x33,
+ 0x95,0xE0,0x90,0xF5,0xDC,0xEF,0xF0,0x90,
+ 0x43,0xE4,0xE0,0x90,0xF5,0xFA,0xF0,0x90,
+ 0xF5,0xE8,0xE4,0xF0,0x90,0x43,0xDD,0xE0,
+ 0x90,0xF5,0xE1,0xF0,0x90,0xF5,0xE8,0xE0,
+ 0xB4,0x01,0xF9,0x90,0xF5,0xE8,0xE4,0xF0,
+ 0x90,0xF5,0xE1,0x74,0x0D,0xF0,0x90,0xF5,
+ 0xE8,0xE0,0xB4,0x01,0xF9,0x90,0x43,0xDD,
+ 0x74,0x0E,0xF0,0x90,0xF5,0xDD,0xE0,0x90,
+ 0x43,0xB4,0xF0,0x90,0xF5,0xDE,0xE0,0x90,
+ 0x43,0xB3,0xF0,0xE0,0xC3,0x94,0x20,0x40,
+ 0x04,0xE0,0x24,0xC0,0xF0,0xED,0xB4,0x01,
+ 0x1C,0x90,0x43,0xF0,0xE0,0xFE,0xA3,0xE0,
+ 0xFF,0x90,0x43,0xB4,0xE0,0x2F,0xFF,0x90,
+ 0x43,0xB3,0xE0,0x3E,0x90,0x43,0xF2,0xF0,
+ 0xA3,0xEF,0xF0,0x80,0x1F,0x90,0x43,0xB3,
+ 0xE0,0xFF,0xA3,0xE0,0x90,0x43,0xF2,0xCF,
+ 0xF0,0xA3,0xEF,0xF0,0x90,0xF5,0xFB,0xE0,
+ 0x90,0x43,0xF1,0xF0,0x90,0xF5,0xFC,0xE0,
+ 0x90,0x43,0xF0,0xF0,0x90,0x43,0xF3,0xE0,
+ 0x90,0xF4,0x66,0xF0,0x90,0x43,0xF2,0xE0,
+ 0x90,0xF4,0x67,0xF0,0x90,0xF6,0x08,0xE0,
+ 0x90,0xFD,0x0F,0xF0,0x90,0xF6,0x08,0xE0,
+ 0xFF,0x13,0x13,0x13,0x54,0x1F,0x90,0xFD,
+ 0xA1,0xF0,0x90,0xF5,0xFC,0xE0,0xFE,0x90,
+ 0xF5,0xFB,0xE0,0x7C,0x00,0x24,0x00,0xFF,
+ 0xEC,0x3E,0xAD,0x07,0xFC,0x90,0xF5,0x3D,
+ 0xE0,0xFE,0x90,0xF5,0x3C,0xE0,0x7A,0x00,
+ 0x24,0x00,0xFF,0xEA,0x3E,0xFE,0xEF,0x2D,
+ 0xFD,0xEE,0x3C,0xFF,0x33,0x95,0xE0,0xA3,
+ 0xEF,0xF0,0xAF,0x05,0xEF,0x90,0xF5,0x3C,
+ 0xF0,0x22,0x90,0x43,0xED,0xE0,0xF9,0xB4,
+ 0x01,0x37,0x90,0x43,0xE5,0xE0,0x25,0xE0,
+ 0x24,0xCD,0xF5,0x82,0xE4,0x34,0x43,0xF5,
+ 0x83,0xE0,0xFC,0xA3,0xE0,0xFD,0x90,0x43,
+ 0xEE,0xE0,0xFA,0xA3,0xE0,0xFB,0xC3,0xED,
+ 0x9B,0xFD,0xEC,0x9A,0xFC,0x90,0x43,0xE7,
+ 0xE0,0x2D,0xFE,0x90,0x43,0xE6,0xE0,0x3C,
+ 0x90,0x43,0xB5,0xF0,0xA3,0xCE,0xF0,0x80,
+ 0x72,0xE9,0xB4,0x02,0x32,0x90,0x43,0xDB,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x43,0xE1,
+ 0xE0,0x2F,0xFF,0x90,0x43,0xE0,0xE0,0x3E,
+ 0xFE,0x90,0x43,0xE6,0xE0,0xFC,0xA3,0xE0,
+ 0xFD,0xC3,0xEF,0x9D,0xFF,0xEE,0x9C,0xFE,
+ 0xC3,0xE4,0x9F,0xFF,0xE4,0x9E,0x90,0x43,
+ 0xB5,0xF0,0xA3,0xEF,0xF0,0x80,0x3C,0x90,
+ 0x43,0xED,0xE0,0xB4,0x03,0x35,0x90,0x43,
+ 0xE5,0xE0,0x25,0xE0,0x24,0xCD,0xF5,0x82,
+ 0xE4,0x34,0x43,0xF5,0x83,0xE0,0xFE,0xA3,
+ 0xE0,0xFF,0x90,0x43,0xEE,0xE0,0xFC,0xA3,
+ 0xE0,0xFD,0xC3,0xEF,0x9D,0xFF,0xEE,0x9C,
+ 0xFE,0x90,0x43,0xE7,0xE0,0x2F,0xFF,0x90,
+ 0x43,0xE6,0xE0,0x3E,0x90,0x43,0xB5,0xF0,
+ 0xA3,0xEF,0xF0,0x90,0x43,0xB5,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x90,0x43,0xEF,0xE0,0x2F,
+ 0xF0,0x90,0x43,0xEE,0xE0,0x3E,0xF0,0x90,
+ 0x43,0xB6,0xE0,0x90,0xF4,0x66,0xF0,0x90,
+ 0x43,0xB5,0xE0,0x90,0xF4,0x67,0xF0,0x90,
+ 0x43,0xE7,0xE0,0x90,0xF5,0xF4,0xF0,0x90,
+ 0x43,0xE6,0xE0,0x90,0xF5,0xF5,0xF0,0x90,
+ 0x43,0xDD,0x74,0x08,0xF0,0x22,0x90,0xF5,
+ 0xEB,0xE0,0x90,0x43,0xB8,0xF0,0x90,0xF5,
+ 0xEC,0xE0,0x90,0x43,0xB7,0xF0,0x90,0xF5,
+ 0xED,0xE0,0x90,0x43,0xBA,0xF0,0x90,0xF5,
+ 0xEE,0xE0,0x90,0x43,0xB9,0xF0,0x90,0x43,
+ 0xED,0xE0,0xFF,0xB4,0x01,0x0A,0x74,0x02,
+ 0xF0,0x90,0x43,0xDD,0x74,0x07,0xF0,0x22,
+ 0xEF,0x64,0x02,0x60,0x08,0xEF,0x64,0x03,
+ 0x60,0x03,0x02,0x83,0xDC,0x90,0x43,0xE3,
+ 0xE0,0xFF,0x90,0x43,0xE2,0xE0,0xFE,0x6F,
+ 0x70,0x2C,0x90,0xF5,0xE9,0xE0,0x70,0x07,
+ 0x90,0x43,0xE4,0xEE,0xF0,0x80,0x18,0x90,
+ 0x41,0xF3,0xE0,0x14,0xB5,0x06,0x07,0xE4,
+ 0x90,0x43,0xE4,0xF0,0x80,0x09,0x90,0x43,
+ 0xE2,0xE0,0x04,0x90,0x43,0xE4,0xF0,0x90,
+ 0x43,0xDD,0x74,0x0C,0xF0,0x22,0x90,0xF5,
+ 0xE9,0xE0,0x70,0x18,0x90,0x43,0xE2,0xE0,
+ 0xFF,0x90,0x43,0xE5,0xE0,0xB5,0x07,0x0C,
+ 0x90,0x43,0xE4,0xEF,0xF0,0x90,0x43,0xDD,
+ 0x74,0x0C,0xF0,0x22,0x90,0xF5,0xE9,0xE0,
+ 0x70,0x0B,0x90,0x43,0xE5,0xE0,0x14,0x90,
+ 0x43,0xE3,0xF0,0x80,0x09,0x90,0x43,0xE5,
+ 0xE0,0x04,0x90,0x43,0xE2,0xF0,0x90,0x43,
+ 0xE3,0xE0,0xFF,0x90,0x43,0xE2,0xE0,0x2F,
+ 0xFF,0xC3,0x13,0x90,0x43,0xE5,0xF0,0x90,
+ 0x43,0xED,0x74,0x03,0xF0,0x90,0x43,0xDD,
+ 0x74,0x06,0xF0,0x22,0x90,0x43,0xBC,0xEF,
+ 0xF0,0xC2,0xEB,0xE4,0x90,0x43,0xE9,0xF0,
+ 0xA3,0xF0,0x90,0xF9,0x01,0xE0,0xD3,0x94,
+ 0x01,0x50,0x0A,0x90,0x43,0xE9,0x74,0x05,
+ 0xF0,0xA3,0x74,0x55,0xF0,0x90,0xF9,0x01,
+ 0xE0,0x24,0x06,0xFF,0x74,0x01,0x7E,0x00,
+ 0xA8,0x07,0x08,0x80,0x05,0xC3,0x33,0xCE,
+ 0x33,0xCE,0xD8,0xF9,0x90,0x43,0xDC,0xF0,
+ 0xEE,0x90,0x43,0xDB,0xF0,0x90,0xF9,0x00,
+ 0xE0,0x70,0x34,0x90,0x43,0xE0,0x74,0x02,
+ 0xF0,0xA3,0x74,0xAB,0xF0,0x90,0x43,0xE8,
+ 0x74,0x28,0xF0,0x90,0x43,0xBE,0x74,0x05,
+ 0xF0,0x90,0xF5,0xEF,0x74,0x28,0xF0,0x90,
+ 0x43,0xE9,0xE0,0xFE,0xA3,0xE0,0x78,0x02,
+ 0xCE,0xC3,0x13,0xCE,0x13,0xD8,0xF9,0xF0,
+ 0xEE,0x90,0x43,0xE9,0xF0,0x80,0x6F,0x90,
+ 0xF9,0x00,0xE0,0xB4,0x01,0x34,0x90,0x43,
+ 0xE0,0x74,0x0A,0xF0,0xA3,0x74,0xAB,0xF0,
+ 0x90,0x43,0xE8,0x74,0x50,0xF0,0x90,0x43,
+ 0xBE,0x74,0x12,0xF0,0x90,0xF5,0xEF,0x74,
+ 0x50,0xF0,0x90,0x43,0xDB,0xE0,0xFE,0xA3,
+ 0xE0,0x78,0x02,0xC3,0x33,0xCE,0x33,0xCE,
+ 0xD8,0xF9,0xF0,0xEE,0x90,0x43,0xDB,0xF0,
+ 0x80,0x34,0x90,0x43,0xE0,0x74,0x05,0xF0,
+ 0xA3,0x74,0x55,0xF0,0x90,0x43,0xE8,0x74,
+ 0x3C,0xF0,0x90,0x43,0xBE,0x74,0x09,0xF0,
+ 0x90,0xF5,0xEF,0x74,0x3C,0xF0,0x90,0x43,
+ 0xDC,0xE0,0x25,0xE0,0xF0,0x90,0x43,0xDB,
+ 0xE0,0x33,0xF0,0x90,0x43,0xE9,0xE0,0xC3,
+ 0x13,0xF0,0xA3,0xE0,0x13,0xF0,0x90,0x43,
+ 0xE9,0xE0,0xFF,0xA3,0xE0,0xA3,0xCF,0xF0,
+ 0xA3,0xEF,0xF0,0x90,0x43,0xE8,0xE0,0x90,
+ 0xF5,0xE2,0xF0,0x90,0x43,0xDB,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x90,0x43,0xE1,0xE0,0x2F,
+ 0xFF,0x90,0x43,0xE0,0xE0,0x3E,0xA2,0xE7,
+ 0x13,0xFE,0xEF,0x13,0xFF,0x90,0xF5,0xFE,
+ 0xF0,0xEE,0xA3,0xF0,0xE4,0x90,0x43,0xEE,
+ 0xF0,0xA3,0xF0,0x90,0xF5,0x3B,0xF0,0x90,
+ 0xF5,0xBB,0xF0,0x90,0xF5,0xB1,0xF0,0x90,
+ 0xF5,0xC8,0xF0,0x90,0xF5,0xF8,0x04,0xF0,
+ 0x90,0xF5,0xDF,0x74,0xFB,0xF0,0xA3,0xE4,
+ 0xF0,0x90,0xF5,0xE3,0x74,0x09,0xF0,0xA3,
+ 0x74,0x01,0xF0,0xA3,0xF0,0x90,0xF5,0xFD,
+ 0xF0,0x90,0xF6,0x6D,0xE4,0xF0,0x90,0xF5,
+ 0xF9,0x74,0x04,0xF0,0x90,0x42,0x12,0xE0,
+ 0xB4,0x01,0x1B,0x90,0x43,0xBC,0xE0,0xB4,
+ 0x01,0x14,0x90,0xF5,0xE3,0x74,0x01,0xF0,
+ 0x90,0xF5,0xF9,0xF0,0x90,0xF5,0xFE,0x74,
+ 0xFF,0xF0,0xA3,0x74,0x0F,0xF0,0xE4,0x90,
+ 0x43,0xBD,0xF0,0x90,0x43,0xC3,0xE0,0x64,
+ 0x01,0x70,0x3E,0x90,0x41,0xF3,0xF0,0x90,
+ 0x43,0xDA,0xF0,0x90,0x43,0xC4,0xF0,0x90,
+ 0x43,0xD8,0xF0,0x90,0x43,0xD6,0xF0,0x90,
+ 0xF0,0x2B,0xE0,0x60,0x12,0x90,0x42,0x5B,
+ 0xE0,0x90,0x43,0xD9,0xF0,0x90,0x42,0x57,
+ 0xE0,0x90,0x43,0xD7,0xF0,0x80,0x1E,0x90,
+ 0x42,0x16,0xE0,0x90,0x43,0xD9,0xF0,0x90,
+ 0x42,0x13,0xE0,0x90,0x43,0xD7,0xF0,0x80,
+ 0x0C,0x90,0x43,0xD7,0xE0,0x14,0xA3,0xF0,
+ 0xE4,0x90,0x43,0x42,0xF0,0x90,0x43,0xD7,
+ 0xE0,0xFF,0xA3,0xE0,0xC3,0x9F,0x50,0x5C,
+ 0x90,0xF5,0xE7,0xE4,0xF0,0xA3,0x04,0xF0,
+ 0x90,0xF5,0xE1,0xE4,0xF0,0x90,0xF5,0xE7,
+ 0x04,0xF0,0x90,0xF5,0xE8,0xE0,0xB4,0x01,
+ 0xF9,0x90,0xF5,0xE1,0xE0,0x90,0x43,0xDD,
+ 0xF0,0xE0,0x64,0x05,0x70,0x2E,0x74,0x06,
+ 0xF0,0x90,0xF5,0xEA,0xE0,0x90,0x43,0xD5,
+ 0xF0,0x12,0xA5,0xD9,0x85,0x2C,0x2C,0x85,
+ 0x2C,0x2C,0x05,0x2C,0x85,0x2C,0x2C,0x90,
+ 0x43,0xDD,0xE0,0x90,0xF5,0xE1,0xF0,0x90,
+ 0x43,0xBC,0xE0,0xFF,0x90,0x43,0xBE,0xE0,
+ 0xFD,0x12,0x8B,0x5F,0x90,0x43,0xD8,0xE0,
+ 0x04,0xF0,0x80,0x99,0x12,0x7A,0xA8,0xE4,
+ 0x90,0x43,0xC3,0xF0,0x90,0x43,0xDD,0xE0,
+ 0xFF,0x64,0x0E,0x60,0x47,0xEF,0xB4,0x06,
+ 0x05,0x12,0x7C,0x79,0x80,0xEE,0x90,0x43,
+ 0xDD,0xE0,0x64,0x07,0x70,0x22,0x12,0x82,
+ 0x23,0x90,0xF5,0xE8,0x74,0x01,0xF0,0x90,
+ 0x43,0xDD,0xE0,0x90,0xF5,0xE1,0xF0,0x90,
+ 0xF5,0xE8,0xE0,0xB4,0x01,0xF9,0x90,0xF5,
+ 0xE6,0xE4,0xF0,0x12,0x83,0x0F,0x80,0xC4,
+ 0x90,0x43,0xDD,0xE0,0xB4,0x0C,0xBD,0x90,
+ 0x43,0xBC,0xE0,0xFF,0x12,0x81,0x21,0x12,
+ 0x7A,0x27,0x80,0xB0,0x90,0xF5,0xE7,0xE4,
+ 0xF0,0x90,0xF5,0xE1,0xF0,0xD2,0xEB,0x22,
+ 0x90,0x43,0xFF,0xE0,0xFE,0xA3,0xE0,0xA8,
+ 0x07,0x08,0x80,0x05,0xCE,0xC3,0x13,0xCE,
+ 0x13,0xD8,0xF9,0xF0,0xEE,0x90,0x43,0xFF,
+ 0xF0,0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x41,
+ 0xC4,0xE0,0xFD,0x7C,0x00,0x12,0xA9,0x46,
+ 0x90,0x43,0xFF,0xEE,0xF0,0xA3,0xEF,0xF0,
+ 0x22,0xAA,0x07,0xEA,0x70,0x10,0x90,0xF7,
+ 0x86,0x04,0xF0,0xA3,0xF0,0xE4,0x90,0x43,
+ 0xFE,0xF0,0x90,0x43,0xFC,0xF0,0xEA,0xB4,
+ 0x01,0x13,0x90,0x43,0xFC,0x74,0x01,0xF0,
+ 0x90,0xF7,0x87,0xF0,0x90,0xF7,0x87,0xE0,
+ 0x60,0xFA,0xE4,0xF5,0x2E,0xEA,0x64,0x01,
+ 0x60,0x24,0x90,0xF7,0x86,0xE0,0x70,0x09,
+ 0x90,0xF7,0x31,0xE0,0x70,0x03,0x02,0x87,
+ 0xAC,0x90,0x43,0xF8,0xE0,0xC3,0x94,0x01,
+ 0x50,0x03,0x02,0x87,0xAC,0x90,0xF7,0x87,
+ 0xE0,0x70,0x03,0x02,0x87,0xAC,0x05,0x2E,
+ 0x05,0x2C,0x05,0x2C,0x90,0xF9,0x00,0xE0,
+ 0x70,0x04,0x7B,0x04,0x80,0x0D,0x90,0xF9,
+ 0x00,0xE0,0xB4,0x01,0x04,0x7B,0x06,0x80,
+ 0x02,0x7B,0x05,0x90,0xF9,0x03,0xE0,0xFF,
+ 0xC3,0xEB,0x9F,0xFB,0x90,0xF7,0x92,0xE0,
+ 0x90,0x41,0xC1,0xF0,0x90,0xF7,0x93,0xE0,
+ 0x90,0x41,0xC2,0xF0,0x90,0xF7,0x94,0xE0,
+ 0x90,0x41,0xC3,0xF0,0x90,0xF7,0x8B,0xE0,
+ 0x90,0x41,0xC4,0xF0,0x90,0xF7,0x97,0xE0,
+ 0x90,0x43,0xF9,0xF0,0x90,0xF7,0x96,0xE0,
+ 0x90,0x43,0xFA,0xF0,0x90,0xF7,0x95,0xE0,
+ 0x90,0x43,0xFB,0xF0,0x90,0x43,0xF9,0xE0,
+ 0x90,0x43,0xFF,0xF0,0x90,0x43,0xFA,0xE0,
+ 0x90,0x44,0x00,0xF0,0xAF,0x03,0x12,0x86,
+ 0x81,0x90,0x44,0x00,0xE0,0x90,0x42,0x37,
+ 0xF0,0x90,0x41,0xC3,0xE0,0x90,0x43,0xFF,
+ 0xF0,0x90,0x41,0xC2,0xE0,0x90,0x44,0x00,
+ 0xF0,0xAF,0x03,0x12,0x86,0x81,0x90,0x44,
+ 0x00,0xE0,0x90,0x42,0x36,0xF0,0x90,0xF7,
+ 0x86,0x74,0x01,0xF0,0xA3,0xF0,0xE4,0x90,
+ 0x43,0xFE,0xF0,0xEA,0xB4,0x01,0x05,0xE4,
+ 0x90,0x43,0xFC,0xF0,0x22,0x90,0xF9,0x03,
+ 0xE0,0x90,0x41,0xC5,0xF0,0x90,0xF9,0x00,
+ 0xE0,0x90,0x41,0xC6,0xF0,0x90,0x43,0xFE,
+ 0xE0,0x04,0xF0,0xE0,0xC3,0x94,0x32,0x40,
+ 0x05,0xE4,0xFF,0x12,0x86,0xB2,0x90,0x43,
+ 0xFC,0xE0,0x70,0x05,0x7F,0x02,0x12,0x86,
+ 0xB2,0x90,0x43,0xFD,0xE0,0x04,0xF0,0xE0,
+ 0xC3,0x94,0x32,0x40,0x0B,0x90,0xF7,0x0D,
+ 0x74,0x01,0xF0,0xE4,0x90,0x43,0xFD,0xF0,
+ 0x90,0xF7,0x0D,0xE0,0x60,0x5A,0x90,0xF7,
+ 0x05,0xE0,0x90,0x41,0xC7,0xF0,0x90,0xF7,
+ 0x06,0xE0,0x90,0x41,0xC8,0xF0,0x90,0xF7,
+ 0x02,0xE0,0x90,0x41,0xC9,0xF0,0x90,0xF7,
+ 0x03,0xE0,0x90,0x41,0xCA,0xF0,0x90,0xF7,
+ 0x04,0xE0,0x90,0x41,0xCB,0xF0,0x90,0xF7,
+ 0x00,0xE0,0x90,0x41,0xCC,0xF0,0x90,0xF7,
+ 0x01,0xE0,0x90,0x41,0xCD,0xF0,0x90,0xF7,
+ 0x0D,0x74,0x01,0xF0,0xE4,0x90,0x43,0xFD,
+ 0xF0,0x90,0x41,0xD3,0xE0,0x04,0xF0,0xE0,
+ 0xFF,0x90,0x41,0xFA,0xE0,0xFE,0xEF,0x8E,
+ 0xF0,0x84,0x90,0x41,0xD3,0xE5,0xF0,0xF0,
+ 0x90,0xF7,0x00,0xE0,0xFF,0x90,0x41,0xCF,
+ 0xE0,0xFE,0xB5,0x07,0x0C,0x90,0xF7,0x01,
+ 0xE0,0xFF,0x90,0x41,0xD0,0xE0,0x6F,0x60,
+ 0x18,0x90,0xF7,0x00,0xEE,0xF0,0x90,0x41,
+ 0xD0,0xE0,0x90,0xF7,0x01,0xF0,0x90,0xF7,
+ 0x0C,0x74,0x01,0xF0,0xE4,0xF0,0xA3,0x04,
+ 0xF0,0x22,0x22,0x7F,0x00,0x22,0x90,0x42,
+ 0x5F,0xE0,0x04,0xF0,0x70,0x06,0x90,0x42,
+ 0x5E,0xE0,0x04,0xF0,0x90,0x42,0x48,0xE0,
+ 0x70,0x0B,0x90,0x42,0x5D,0xE0,0x70,0x05,
+ 0x12,0x88,0x8B,0x80,0x09,0x90,0xF0,0x01,
+ 0xE0,0x60,0x03,0x12,0x9D,0x48,0x90,0x42,
+ 0x5E,0xE0,0xFE,0xA3,0xE0,0xFF,0x7C,0x00,
+ 0x7D,0x0A,0x12,0xA9,0x46,0xED,0x4C,0x70,
+ 0x13,0x90,0x43,0x40,0xE0,0x60,0x0D,0x90,
+ 0x41,0xDB,0xE0,0xB4,0x23,0x03,0x12,0x9F,
+ 0xCB,0x12,0xA3,0x27,0x90,0xF9,0x99,0xE0,
+ 0x90,0x41,0xD2,0xF0,0x90,0x42,0x46,0xE0,
+ 0x70,0x06,0x90,0x42,0x47,0xE0,0x60,0x04,
+ 0x7F,0x01,0x80,0x02,0x7F,0x00,0x90,0x41,
+ 0xD1,0xEF,0xF0,0x90,0x42,0x5E,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x7C,0x00,0x7D,0x32,0x12,
+ 0xA9,0x46,0xED,0x4C,0x70,0x0E,0x12,0x87,
+ 0xB6,0x12,0x8A,0x51,0x90,0x44,0xA0,0xE0,
+ 0x60,0x02,0x14,0xF0,0x12,0x88,0x8B,0xC2,
+ 0xCF,0x22,0xC2,0xAF,0x90,0xFB,0x88,0xE0,
+ 0x64,0x01,0x60,0xF8,0x90,0xFB,0x96,0xEF,
+ 0xF0,0x12,0x9D,0x24,0x90,0xFB,0x88,0xE0,
+ 0x70,0xFA,0xD2,0xAF,0x04,0x7F,0x01,0x22,
+ 0x90,0x43,0x3F,0xE0,0x70,0x03,0x02,0x8A,
+ 0x07,0xC2,0xE9,0xE4,0x90,0x44,0x98,0xF0,
+ 0x90,0xF7,0x3C,0xE0,0xB4,0x01,0x04,0xC2,
+ 0xEA,0x80,0x02,0xD2,0xEA,0x90,0xF7,0x0E,
+ 0xE0,0xB4,0x01,0x20,0x90,0x43,0x3B,0xE0,
+ 0xC3,0x94,0x02,0x50,0x11,0xE5,0x0F,0xB4,
+ 0x09,0x0C,0x12,0x4E,0x5A,0x90,0x43,0x3B,
+ 0xE0,0x04,0xF0,0x02,0x8A,0x07,0x12,0x8A,
+ 0x16,0x02,0x8A,0x07,0x90,0xF5,0x54,0xE0,
+ 0x64,0x01,0x70,0x7A,0x90,0xF0,0x2B,0xE0,
+ 0x70,0x12,0x90,0x42,0x38,0xE0,0xB4,0x01,
+ 0x0B,0x90,0xF2,0x17,0x74,0xFE,0xF0,0xE4,
+ 0x90,0x42,0x37,0xF0,0x90,0x44,0x9B,0xE0,
+ 0xC3,0x94,0x02,0x50,0x18,0xE5,0x0F,0xB4,
+ 0x09,0x13,0x12,0x4E,0x5A,0x90,0x44,0x9A,
+ 0xE0,0x90,0xF5,0x52,0xF0,0x90,0x44,0x9B,
+ 0xE0,0x04,0xF0,0x80,0x41,0x90,0x43,0x3C,
+ 0x74,0x02,0xF0,0x90,0xF7,0x0E,0xE0,0x64,
+ 0x01,0x60,0x07,0x90,0xF7,0x40,0xE0,0xB4,
+ 0x01,0x05,0x12,0x8A,0x16,0x80,0x27,0x90,
+ 0xF7,0x31,0xE0,0x60,0x0A,0xE4,0xFF,0x12,
+ 0x9C,0x29,0x12,0x48,0x8D,0x80,0x0C,0x90,
+ 0xF7,0x3C,0xE0,0x70,0x03,0x12,0x48,0x8D,
+ 0x12,0x72,0x28,0x05,0x2C,0xE4,0xF5,0x2D,
+ 0x12,0x4E,0x2A,0x12,0x4E,0x3B,0x12,0x4E,
+ 0x2A,0x90,0x44,0x9A,0xE0,0x90,0xF5,0x52,
+ 0xF0,0x53,0x91,0x7F,0x22,0x90,0xF7,0x32,
+ 0xE0,0x60,0x19,0x90,0xFB,0x88,0xE0,0x70,
+ 0xFA,0x90,0xFB,0x96,0x74,0x0D,0xF0,0x90,
+ 0xFB,0x88,0x74,0x01,0xF0,0xE4,0x90,0x44,
+ 0x97,0xF0,0x05,0x2C,0xE4,0x90,0x42,0x47,
+ 0xF0,0x90,0x42,0x46,0xF0,0x12,0x6E,0x75,
+ 0x12,0x48,0xAC,0x12,0x4E,0x2A,0x90,0x43,
+ 0x3C,0x74,0x01,0xF0,0x12,0x4E,0x3B,0x22,
+ 0x90,0x44,0x02,0xE0,0x54,0x01,0xF0,0xA2,
+ 0xAF,0xE4,0x33,0x90,0x44,0x01,0xF0,0xC2,
+ 0xAF,0x90,0x44,0x02,0xE0,0x70,0x27,0x90,
+ 0xF7,0x02,0xE0,0x90,0xFB,0x97,0xF0,0x90,
+ 0xF7,0x03,0xE0,0x90,0xFB,0x98,0xF0,0x90,
+ 0xF7,0x04,0xE0,0x90,0xFB,0x99,0xF0,0x90,
+ 0xF9,0x99,0xE0,0x90,0xFB,0x9A,0xF0,0x7F,
+ 0x04,0x12,0x89,0x23,0x80,0x41,0x90,0x44,
+ 0x02,0xE0,0x64,0x01,0x70,0x39,0x90,0xFB,
+ 0x97,0xE5,0x12,0xF0,0x90,0x42,0x5C,0xE0,
+ 0x90,0xFB,0x98,0xF0,0x90,0x42,0x30,0xE0,
+ 0x90,0xFB,0x9B,0xF0,0x90,0x42,0x31,0xE0,
+ 0x90,0xFB,0x9C,0xF0,0x90,0x42,0x48,0xE0,
+ 0x70,0x05,0x12,0x8B,0x2D,0x80,0x0B,0x90,
+ 0xF0,0x60,0xE0,0x90,0xFB,0x99,0xF0,0x12,
+ 0x8B,0x2D,0x7F,0x05,0x12,0x89,0x23,0x90,
+ 0x44,0x01,0xE0,0x24,0xFF,0x92,0xAF,0x90,
+ 0x44,0x02,0xE0,0x04,0xF0,0x90,0xFB,0xA3,
+ 0xE0,0x90,0x41,0xDE,0xF0,0x85,0x2C,0x2C,
+ 0x85,0x2C,0x2C,0x90,0xFB,0xA4,0xE0,0x90,
+ 0x41,0xDF,0xF0,0xE0,0xFF,0xD3,0x94,0x4E,
+ 0x40,0x06,0xE4,0x90,0x41,0xDD,0xF0,0x22,
+ 0xEF,0xC3,0x94,0x32,0x50,0x07,0x90,0x41,
+ 0xDD,0x74,0x64,0xF0,0x22,0xEF,0x24,0xCE,
+ 0xFF,0xE4,0x34,0xFF,0xFE,0x7C,0x00,0x7D,
+ 0x07,0x12,0xA9,0x34,0xEE,0xA2,0xE7,0x13,
+ 0xEF,0x13,0xFF,0xC3,0x74,0x64,0x9F,0x90,
+ 0x41,0xDD,0xF0,0x22,0xE4,0xFF,0x90,0x41,
+ 0xE7,0xE0,0x60,0x0B,0x90,0x42,0x59,0xE0,
+ 0x60,0x05,0x90,0x42,0x32,0xE0,0xFF,0x90,
+ 0xF0,0x61,0xE0,0xFE,0x90,0x42,0x48,0xE0,
+ 0x70,0x05,0x90,0x42,0x08,0xE0,0xFE,0xC3,
+ 0xEE,0x9F,0x90,0xFB,0x9A,0xF0,0xEE,0xC3,
+ 0x9F,0x50,0x02,0xE4,0xF0,0x22,0x90,0x44,
+ 0x03,0xEF,0xF0,0xA9,0x05,0xE4,0x90,0x44,
+ 0x09,0xF0,0xFB,0x90,0x43,0xD5,0xE0,0xFD,
+ 0xEB,0xC3,0x9D,0x50,0x5B,0x90,0xF5,0xF1,
+ 0xE0,0xFF,0x75,0xF0,0x02,0xEB,0xA4,0x24,
+ 0xC5,0xF5,0x82,0xE5,0xF0,0x34,0x43,0xF5,
+ 0x83,0xEF,0xF0,0x90,0xF5,0xF0,0xE0,0xFF,
+ 0x75,0xF0,0x02,0xEB,0xA4,0x24,0xC6,0xF5,
+ 0x82,0xE5,0xF0,0x34,0x43,0xF5,0x83,0xEF,
+ 0xF0,0x90,0xF5,0xF1,0xE0,0xFF,0x75,0xF0,
+ 0x02,0xEB,0xA4,0x24,0xCD,0xF5,0x82,0xE5,
+ 0xF0,0x34,0x43,0xF5,0x83,0xEF,0xF0,0x90,
+ 0xF5,0xF0,0xE0,0xFF,0x75,0xF0,0x02,0xEB,
+ 0xA4,0x24,0xCE,0xF5,0x82,0xE5,0xF0,0x34,
+ 0x43,0xF5,0x83,0xEF,0xF0,0x0B,0x80,0x9B,
+ 0x90,0x41,0xF3,0xED,0xF0,0x90,0x43,0xC5,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0xEE,0xC3,0x13,
+ 0xFE,0xEF,0x13,0xFF,0x90,0x44,0x04,0xEE,
+ 0xF0,0xA3,0xEF,0xF0,0x7A,0x01,0x90,0x41,
+ 0xF3,0xE0,0xFF,0xEA,0xC3,0x9F,0x50,0x54,
+ 0x75,0xF0,0x02,0xEA,0xA4,0x24,0xC5,0xF5,
+ 0x82,0xE5,0xF0,0x34,0x43,0xF5,0x83,0xE0,
+ 0xFE,0xA3,0xE0,0x78,0x02,0xCE,0xC3,0x13,
+ 0xCE,0x13,0xD8,0xF9,0xFD,0xAC,0x06,0x75,
+ 0xF0,0x02,0xEA,0xA4,0x24,0xC5,0xF5,0x82,
+ 0xE5,0xF0,0x34,0x43,0xF5,0x83,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0xEE,0xC3,0x13,0xFE,0xEF,
+ 0x13,0x2D,0xFF,0xEE,0x3C,0xFE,0x90,0x44,
+ 0x04,0xE0,0xFC,0xA3,0xE0,0xC3,0x9F,0xEC,
+ 0x9E,0x50,0x06,0x90,0x43,0xC4,0x74,0x01,
+ 0xF0,0x0A,0x80,0xA2,0x90,0x43,0xD6,0xE0,
+ 0xFE,0x70,0x14,0x90,0x41,0xF3,0xE0,0x64,
+ 0x01,0x70,0x31,0x90,0x43,0xD6,0x04,0xF0,
+ 0x90,0xF5,0xE2,0xE9,0xF0,0x80,0x25,0xEE,
+ 0xB4,0x01,0x17,0x90,0x41,0xF3,0xE0,0xB4,
+ 0x01,0x08,0x90,0x43,0xD6,0x74,0x03,0xF0,
+ 0x80,0x12,0x90,0x43,0xD6,0x74,0x02,0xF0,
+ 0x80,0x0A,0x90,0x43,0xD6,0xE0,0xB4,0x02,
+ 0x03,0x74,0x03,0xF0,0x90,0x43,0xD6,0xE0,
+ 0xB4,0x03,0x0F,0x90,0x43,0xD7,0xE0,0x14,
+ 0x90,0x43,0xD8,0xF0,0x90,0x41,0xF3,0x74,
+ 0x01,0xF0,0x90,0x44,0x03,0xE0,0x60,0x03,
+ 0x02,0x8E,0xE8,0x7A,0x01,0x90,0x43,0xD5,
+ 0xE0,0xFF,0xEA,0xC3,0x9F,0x50,0x37,0x75,
+ 0xF0,0x02,0xEA,0xA4,0x24,0xCD,0xF5,0x82,
+ 0xE5,0xF0,0x34,0x43,0xF5,0x83,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x90,0x43,0xCD,0xE0,0xFC,
+ 0xA3,0xE0,0xFD,0xC3,0xEF,0x9D,0xFF,0xEE,
+ 0x9C,0xFE,0xEA,0x25,0xE0,0x24,0x08,0xF5,
+ 0x82,0xE4,0x34,0x44,0xF5,0x83,0xEE,0xF0,
+ 0xA3,0xEF,0xF0,0x0A,0x80,0xBF,0x90,0x43,
+ 0xDA,0xE0,0xFC,0x70,0x39,0xFA,0x90,0x43,
+ 0xD5,0xE0,0xFF,0xEA,0xC3,0x9F,0x50,0x25,
+ 0xEA,0x25,0xE0,0x24,0x0A,0xF5,0x82,0xE4,
+ 0x34,0x44,0xF5,0x83,0xE0,0xFE,0xA3,0xE0,
+ 0xFF,0xEA,0x25,0xE0,0x24,0x12,0xF5,0x82,
+ 0xE4,0x34,0x44,0xF5,0x83,0xEE,0xF0,0xA3,
+ 0xEF,0xF0,0x0A,0x80,0xD1,0x90,0x41,0xF3,
+ 0xE0,0x90,0x43,0xDA,0xF0,0x22,0xEC,0x64,
+ 0x01,0x70,0x03,0x02,0x8E,0x9E,0x90,0x44,
+ 0x08,0x74,0x01,0xF0,0x90,0x44,0x07,0xF0,
+ 0xE4,0xFA,0xF9,0xE9,0x25,0xE0,0x24,0x12,
+ 0xF5,0x82,0xE4,0x34,0x44,0xF5,0x83,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0xEA,0x25,0xE0,0x24,
+ 0x0A,0xF5,0x82,0xE4,0x34,0x44,0xF5,0x83,
+ 0xE0,0xFC,0xA3,0xE0,0xC3,0x9F,0xFF,0xEC,
+ 0x9E,0xFE,0xC3,0x64,0x80,0x94,0x80,0x50,
+ 0x24,0xC3,0xE4,0x9F,0xFF,0xE4,0x9E,0xFE,
+ 0x90,0x43,0xD5,0xE0,0x24,0xFE,0xFD,0xEA,
+ 0xC3,0x9D,0x50,0x03,0x0A,0x80,0x06,0x90,
+ 0x44,0x09,0x74,0x01,0xF0,0x90,0x44,0x06,
+ 0x74,0x01,0xF0,0x80,0x1A,0xE4,0x90,0x44,
+ 0x06,0xF0,0x90,0x43,0xDA,0xE0,0x24,0xFE,
+ 0xFD,0xE9,0xC3,0x9D,0x50,0x03,0x09,0x80,
+ 0x06,0x90,0x44,0x09,0x74,0x01,0xF0,0x90,
+ 0x43,0xD9,0xE0,0xFD,0xC3,0xEF,0x9D,0x74,
+ 0x80,0xF8,0x6E,0x98,0x40,0x2D,0x90,0x43,
+ 0xC5,0xE0,0xFE,0xA3,0xE0,0xFF,0xEE,0x13,
+ 0xFE,0xEF,0x13,0xFF,0x90,0x44,0x08,0xE0,
+ 0x75,0xF0,0x02,0xA4,0x24,0xC5,0xF5,0x82,
+ 0xE5,0xF0,0x34,0x43,0xF5,0x83,0xE0,0xFC,
+ 0xA3,0xE0,0xD3,0x9F,0xEC,0x9E,0x50,0x03,
+ 0x02,0x8E,0x7D,0x90,0x44,0x08,0xE0,0xFC,
+ 0x75,0xF0,0x02,0xA4,0x24,0xCD,0xF5,0x82,
+ 0xE5,0xF0,0x34,0x43,0xF5,0x83,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x90,0x44,0x07,0xE0,0xFD,
+ 0x75,0xF0,0x02,0xA4,0x24,0xCD,0xF5,0x82,
+ 0xE5,0xF0,0x34,0x43,0xF5,0x83,0xEE,0xF0,
+ 0xA3,0xEF,0xF0,0x75,0xF0,0x02,0xEC,0xA4,
+ 0x24,0xC5,0xF5,0x82,0xE5,0xF0,0x34,0x43,
+ 0xF5,0x83,0xE0,0xFE,0xA3,0xE0,0xFF,0x75,
+ 0xF0,0x02,0xED,0xA4,0x24,0xC5,0xF5,0x82,
+ 0xE5,0xF0,0x34,0x43,0xF5,0x83,0xEE,0xF0,
+ 0xA3,0xEF,0xF0,0x90,0x44,0x07,0xE0,0x04,
+ 0xF0,0x90,0x44,0x06,0xE0,0xB4,0x01,0x17,
+ 0x90,0x43,0xDA,0xE0,0x24,0xFE,0xFF,0xE9,
+ 0xC3,0x9F,0x50,0x03,0x09,0x80,0x1D,0x90,
+ 0x44,0x09,0x74,0x01,0xF0,0x80,0x15,0x90,
+ 0x43,0xD5,0xE0,0x24,0xFE,0xFF,0xEA,0xC3,
+ 0x9F,0x50,0x03,0x0A,0x80,0x06,0x90,0x44,
+ 0x09,0x74,0x01,0xF0,0x90,0x44,0x07,0xE0,
+ 0x90,0x41,0xF3,0xF0,0xEA,0x04,0x90,0x44,
+ 0x08,0xF0,0xA3,0xE0,0x64,0x01,0x60,0x03,
+ 0x02,0x8D,0x44,0x90,0x41,0xF3,0xE0,0x90,
+ 0x43,0xDA,0xF0,0x80,0x06,0x90,0x41,0xF3,
+ 0x74,0x01,0xF0,0x7B,0x01,0x90,0x43,0xDA,
+ 0xE0,0x14,0xFF,0xEB,0xC3,0x9F,0x50,0x37,
+ 0x75,0xF0,0x02,0xEB,0xA4,0x24,0xCD,0xF5,
+ 0x82,0xE5,0xF0,0x34,0x43,0xF5,0x83,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0x90,0x43,0xCD,0xE0,
+ 0xFC,0xA3,0xE0,0xFD,0xC3,0xEF,0x9D,0xFF,
+ 0xEE,0x9C,0xFE,0xEB,0x25,0xE0,0x24,0x10,
+ 0xF5,0x82,0xE4,0x34,0x44,0xF5,0x83,0xEE,
+ 0xF0,0xA3,0xEF,0xF0,0x0B,0x80,0xBE,0x22,
+ 0xEF,0x64,0x02,0x60,0x04,0xEF,0xB4,0x01,
+ 0x1B,0x90,0x44,0x36,0x74,0x0B,0xF0,0xA3,
+ 0x74,0xB3,0xF0,0xA3,0x74,0x0A,0xF0,0xA3,
+ 0x74,0x73,0xF0,0xA3,0x74,0x33,0xF0,0xA3,
+ 0x74,0xE5,0xF0,0x22,0xEF,0xB4,0x04,0x1B,
+ 0x90,0x44,0x36,0x74,0x0B,0xF0,0xA3,0x74,
+ 0xE3,0xF0,0xA3,0x74,0x0A,0xF0,0xA3,0x74,
+ 0x9D,0xF0,0xA3,0x74,0x33,0xF0,0xA3,0x74,
+ 0xB3,0xF0,0x22,0xEF,0xB4,0x05,0x1B,0x90,
+ 0x44,0x36,0x74,0x0B,0xF0,0xA3,0x74,0xA3,
+ 0xF0,0xA3,0x74,0x0A,0xF0,0xA3,0x74,0x65,
+ 0xF0,0xA3,0x74,0x33,0xF0,0xA3,0x74,0xF4,
+ 0xF0,0x22,0xEF,0xB4,0x0B,0x1A,0x90,0x44,
+ 0x36,0x74,0x0B,0xF0,0xA3,0x74,0xD5,0xF0,
+ 0xA3,0x74,0x0A,0xF0,0xA3,0x74,0x91,0xF0,
+ 0xA3,0x74,0x33,0xF0,0xA3,0x74,0xC1,0xF0,
+ 0x22,0x90,0xF0,0x2B,0xE4,0xF0,0x90,0x43,
+ 0x41,0x74,0x82,0xF0,0x90,0xFB,0x28,0xF0,
+ 0x90,0x42,0x09,0xE0,0x90,0xF0,0x41,0xF0,
+ 0x90,0x42,0x48,0xE0,0x14,0x60,0x21,0x14,
+ 0x60,0x39,0x24,0x02,0x60,0x03,0x02,0x90,
+ 0x1B,0x90,0xF1,0xE5,0x74,0x01,0xF0,0x12,
+ 0x88,0x8B,0x12,0x88,0x8B,0x12,0x88,0x8B,
+ 0x90,0x43,0x3D,0x74,0x01,0xF0,0x80,0x72,
+ 0x12,0x88,0x8B,0x90,0xF0,0x2C,0x74,0x01,
+ 0xF0,0x90,0xF1,0xE5,0xF0,0x90,0x43,0x3D,
+ 0xE0,0x64,0x01,0x70,0x5D,0x04,0x12,0xA4,
+ 0xFA,0x80,0x57,0x90,0xF0,0x2C,0x74,0x01,
+ 0xF0,0x90,0xF1,0xE5,0xF0,0x12,0x9E,0x2B,
+ 0x75,0xF0,0x02,0xE5,0x0F,0xA4,0x24,0x79,
+ 0xF5,0x82,0xE5,0xF0,0x34,0xAD,0xF5,0x83,
+ 0xE4,0x93,0xFC,0x74,0x01,0x93,0xFD,0xE4,
+ 0xFF,0x12,0x47,0xAD,0x90,0xF1,0xE7,0xE0,
+ 0x64,0x01,0x60,0x04,0x7F,0x01,0x80,0x02,
+ 0x7F,0x00,0x90,0xF1,0x1A,0xE0,0x5F,0x70,
+ 0xEB,0x90,0xF1,0xE7,0xE0,0xB4,0x01,0x04,
+ 0x7F,0x01,0x80,0x02,0x7F,0x00,0x90,0x43,
+ 0x3D,0xEF,0xF0,0xE0,0xB4,0x01,0x03,0x12,
+ 0xA4,0xFA,0x90,0xF1,0x75,0x74,0x01,0xF0,
+ 0x90,0x42,0x5A,0xE0,0xF5,0x14,0x12,0xA2,
+ 0x78,0x90,0xF0,0xD5,0x74,0x01,0xF0,0x90,
+ 0xF0,0xE3,0xF0,0x90,0xF0,0xE2,0xF0,0x90,
+ 0x43,0x40,0xF0,0x22,0x90,0xF7,0x3C,0xE0,
+ 0x70,0x0B,0x90,0xF7,0x31,0xE0,0x60,0x05,
+ 0xE4,0xFF,0x12,0x9C,0x29,0x12,0x48,0x8D,
+ 0xE4,0xF5,0x0F,0x22,0x90,0x44,0x1B,0xEF,
+ 0xF0,0xA3,0xED,0xF0,0xE4,0x90,0x44,0x23,
+ 0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0xAF,
+ 0x03,0x90,0x44,0x21,0xEA,0xF0,0xA3,0xEF,
+ 0xF0,0x90,0x44,0x1F,0xE0,0xFE,0xA3,0xE0,
+ 0xFF,0xA3,0xE0,0xFC,0xA3,0xE0,0xFD,0xC3,
+ 0x9F,0xEC,0x9E,0x40,0x03,0x02,0x91,0x1E,
+ 0x90,0xF9,0x00,0xE0,0xB4,0x02,0x0F,0x90,
+ 0x44,0x22,0xE0,0x25,0xE0,0xFD,0x90,0x44,
+ 0x21,0xE0,0x33,0xFC,0x80,0x1A,0x90,0xF9,
+ 0x00,0xE0,0xB4,0x01,0x13,0x90,0x44,0x21,
+ 0xE0,0xFE,0xA3,0xE0,0x78,0x02,0xC3,0x33,
+ 0xCE,0x33,0xCE,0xD8,0xF9,0xFD,0xAC,0x06,
+ 0xED,0x90,0xF5,0x50,0xF0,0xEC,0xA3,0xF0,
+ 0x90,0xF6,0x5B,0x74,0x01,0xF0,0x7F,0x55,
+ 0x7E,0x0D,0x12,0x47,0x76,0x90,0xF6,0x5F,
+ 0xE0,0xFF,0x13,0x13,0x54,0x3F,0xFF,0x90,
+ 0x44,0x24,0xE0,0x2F,0xF0,0x90,0x44,0x23,
+ 0xE0,0x34,0x00,0xF0,0x90,0xF6,0x5F,0xE0,
+ 0xFF,0x90,0x44,0x26,0xE0,0xC3,0x9F,0x50,
+ 0x08,0x90,0xF6,0x5F,0xE0,0x90,0x44,0x26,
+ 0xF0,0x90,0x44,0x1C,0xE0,0xFF,0x90,0xF6,
+ 0x5F,0xE0,0xD3,0x9F,0x40,0x06,0x90,0x44,
+ 0x25,0xE0,0x04,0xF0,0x90,0x44,0x22,0xE0,
+ 0x04,0xF0,0x70,0x06,0x90,0x44,0x21,0xE0,
+ 0x04,0xF0,0x02,0x90,0x72,0x90,0x44,0x23,
+ 0xE0,0xFE,0xA3,0xE0,0x78,0x07,0xCE,0xC3,
+ 0x13,0xCE,0x13,0xD8,0xF9,0xFF,0x90,0x44,
+ 0x26,0xE0,0xFE,0x13,0x13,0x54,0x3F,0xFD,
+ 0xEF,0xD3,0x9D,0x40,0x13,0xEF,0x94,0x80,
+ 0x40,0x05,0x74,0xFF,0xF0,0x80,0x10,0xEF,
+ 0x25,0xE0,0x90,0x44,0x26,0xF0,0x80,0x07,
+ 0xEE,0xC3,0x13,0x90,0x44,0x26,0xF0,0x90,
+ 0x44,0x1B,0xE0,0x70,0x06,0x90,0x44,0x26,
+ 0xE0,0xFF,0x22,0x90,0x44,0x25,0xE0,0xFF,
+ 0x22,0xE4,0x90,0x44,0x2F,0xF0,0xA3,0xF0,
+ 0x90,0x44,0x3C,0x04,0xF0,0x22,0x90,0x44,
+ 0x3C,0xE0,0x60,0x08,0x12,0x72,0x37,0xE4,
+ 0x90,0x44,0x3C,0xF0,0x22,0x90,0xF6,0x08,
+ 0xE0,0x90,0x44,0x29,0xF0,0x90,0xFD,0x29,
+ 0xE0,0x90,0x44,0x2A,0xF0,0xE4,0xA3,0xF0,
+ 0x90,0x41,0xD9,0xE0,0x70,0x05,0x90,0x44,
+ 0x2F,0xF0,0x22,0x12,0x91,0x77,0x90,0xF5,
+ 0x4C,0xE0,0xFF,0x90,0xF5,0x41,0xE0,0x4F,
+ 0x70,0x03,0x02,0x92,0xB1,0x90,0x44,0x1F,
+ 0x74,0x02,0xF0,0xA3,0x74,0x39,0xF0,0xE4,
+ 0xFB,0xFA,0xFD,0xFF,0x12,0x90,0x55,0x90,
+ 0x44,0x28,0xEF,0xF0,0xD3,0x94,0x32,0x40,
+ 0x04,0xE0,0xFF,0x80,0x02,0x7F,0xFF,0x90,
+ 0x44,0x28,0xEF,0xF0,0xFD,0x90,0x44,0x1F,
+ 0xE4,0xF0,0xA3,0x74,0x32,0xF0,0xE4,0xFB,
+ 0xFA,0x7F,0x01,0x12,0x90,0x55,0x90,0x44,
+ 0x27,0xEF,0xF0,0xD3,0x94,0x0A,0x40,0x58,
+ 0x90,0xF1,0x14,0xE0,0x70,0x1E,0x04,0xF0,
+ 0x90,0x44,0x3B,0xE0,0x90,0xF1,0x12,0xF0,
+ 0x90,0x44,0x3A,0xE0,0x90,0xF1,0x13,0xF0,
+ 0x90,0xF1,0x0B,0xE4,0xF0,0x90,0xF1,0x0A,
+ 0x04,0xF0,0x80,0x34,0x90,0xF1,0x10,0xE0,
+ 0x70,0x2E,0x90,0x44,0x3B,0xE0,0xFF,0x90,
+ 0xF1,0x12,0xE0,0x6F,0x60,0x22,0x90,0x44,
+ 0x3A,0xE0,0xFE,0x90,0xF1,0x13,0xE0,0x6E,
+ 0x60,0x16,0x90,0xF1,0x10,0x74,0x01,0xF0,
+ 0x90,0xF1,0x0E,0xEF,0xF0,0xA3,0xEE,0xF0,
+ 0x90,0xF1,0x09,0xE4,0xF0,0xA3,0x04,0xF0,
+ 0x90,0x44,0x28,0xE0,0xFD,0x90,0x44,0x1F,
+ 0x74,0x02,0xF0,0xA3,0x74,0x39,0xF0,0x7B,
+ 0xF4,0x7A,0x01,0x7F,0x01,0x12,0x90,0x55,
+ 0x90,0x44,0x27,0xEF,0xF0,0xD3,0x94,0x19,
+ 0x40,0x3E,0x90,0xF1,0x14,0xE0,0x70,0x38,
+ 0x04,0xF0,0x90,0x44,0x39,0xE0,0x90,0xF1,
+ 0x12,0xF0,0x90,0x44,0x38,0xE0,0x90,0xF1,
+ 0x13,0xF0,0x90,0xF1,0x0B,0x74,0x15,0xF0,
+ 0x90,0xF1,0x10,0x74,0x01,0xF0,0x90,0x44,
+ 0x37,0xE0,0x90,0xF1,0x0E,0xF0,0x90,0x44,
+ 0x36,0xE0,0x90,0xF1,0x0F,0xF0,0x90,0xF1,
+ 0x09,0x74,0x10,0xF0,0xA3,0x74,0x01,0xF0,
+ 0x22,0x90,0xF1,0x14,0xE0,0xFF,0x90,0x44,
+ 0x2E,0xE0,0x6F,0x60,0x04,0x7F,0x01,0x80,
+ 0x02,0x7F,0x00,0x90,0xF1,0x10,0xE0,0xFE,
+ 0x90,0x44,0x2D,0xE0,0x6E,0x60,0x04,0x7E,
+ 0x01,0x80,0x02,0x7E,0x00,0xEE,0x4F,0xFF,
+ 0x90,0x42,0x2E,0xE0,0x64,0x01,0x70,0x39,
+ 0x90,0xF5,0x41,0xE0,0x60,0x03,0xEF,0x60,
+ 0x3D,0x12,0xA7,0xE9,0x04,0x90,0xF5,0x4C,
+ 0xE0,0xB4,0x01,0xF9,0x90,0xF6,0x5D,0x74,
+ 0x01,0xF0,0x90,0xF1,0x10,0xE0,0x70,0x06,
+ 0x90,0xF1,0x14,0xE0,0x60,0x20,0x90,0xF4,
+ 0xC1,0xE0,0x70,0x1A,0x90,0xF4,0xC4,0xE0,
+ 0x70,0x14,0x90,0xF6,0x5C,0x04,0xF0,0x80,
+ 0x0D,0x90,0xF5,0x41,0xE4,0xF0,0x90,0xF6,
+ 0x5D,0xF0,0x90,0xF6,0x5C,0xF0,0x90,0xF1,
+ 0x10,0xE0,0x90,0x44,0x2D,0xF0,0x90,0xF1,
+ 0x14,0xE0,0x90,0x44,0x2E,0xF0,0x22,0xE4,
+ 0x90,0x44,0x3D,0xF0,0x90,0xF9,0x00,0xE0,
+ 0x70,0x09,0x90,0x42,0x2A,0xE0,0x90,0x44,
+ 0x3D,0xF0,0x22,0x90,0xF9,0x00,0xE0,0xB4,
+ 0x01,0x1F,0x90,0x41,0xE9,0xE0,0xB4,0x01,
+ 0x09,0x90,0x42,0x28,0xE0,0x90,0x44,0x3D,
+ 0xF0,0x22,0x90,0xF0,0x2B,0xE0,0x70,0x11,
+ 0x90,0x42,0x2B,0xE0,0x90,0x44,0x3D,0xF0,
+ 0x22,0x90,0x42,0x29,0xE0,0x90,0x44,0x3D,
+ 0xF0,0x22,0x12,0x88,0x8B,0x12,0x92,0xB2,
+ 0x12,0x95,0x1B,0x12,0x91,0x86,0x90,0xF7,
+ 0x8E,0x74,0x01,0xF0,0x90,0xF7,0x91,0xF0,
+ 0x90,0xF7,0x31,0xE0,0x60,0x05,0x7F,0x01,
+ 0x12,0x9C,0x29,0x12,0x4D,0x1F,0xE4,0x90,
+ 0x44,0x2C,0xF0,0x7D,0x00,0x7C,0x07,0xE4,
+ 0xFF,0x12,0x47,0xAD,0x12,0x88,0x8B,0x12,
+ 0x6E,0x8F,0x12,0x97,0x25,0x04,0x12,0x70,
+ 0xEE,0x90,0x42,0x1F,0xE0,0x60,0x34,0x90,
+ 0xF1,0x33,0xE0,0x70,0x2E,0x90,0xF1,0x35,
+ 0xE0,0x70,0x28,0x90,0xF4,0xC1,0xE0,0x64,
+ 0x02,0x70,0x20,0x90,0xF9,0x00,0xE0,0x60,
+ 0x1A,0x90,0xF0,0x2B,0xE0,0x70,0x14,0x90,
+ 0x44,0x48,0xE0,0x70,0x0E,0x90,0x43,0xC4,
+ 0xE0,0x60,0x08,0x90,0xFD,0xA2,0x74,0x01,
+ 0xF0,0x80,0x05,0x90,0xFD,0xA2,0xE4,0xF0,
+ 0x90,0xF9,0x99,0xE0,0x60,0x0E,0x90,0xF2,
+ 0x1B,0x74,0x0C,0xF0,0x90,0x42,0x9E,0x74,
+ 0x01,0xF0,0x80,0x06,0x90,0xF2,0x1B,0x74,
+ 0x0D,0xF0,0x90,0xFD,0x33,0xE4,0xF0,0x04,
+ 0xF0,0x90,0xFD,0x36,0xE0,0xB4,0x01,0xF9,
+ 0x12,0x9B,0x78,0x12,0x93,0x38,0x90,0x43,
+ 0x3E,0xE0,0xB4,0x01,0x0C,0x90,0xFD,0x0F,
+ 0xE4,0xF0,0x90,0xFD,0x29,0x04,0xF0,0x80,
+ 0x2E,0x90,0x44,0x3D,0xE0,0xFF,0x90,0xFD,
+ 0x54,0xE0,0xC3,0x9F,0x50,0x11,0x90,0xFD,
+ 0x0F,0xEF,0xF0,0x90,0xFD,0x29,0x74,0x01,
+ 0xF0,0x90,0x42,0x6E,0xF0,0x80,0x10,0x90,
+ 0x42,0x6E,0xE0,0xB4,0x01,0x09,0x90,0xFD,
+ 0x29,0xE4,0xF0,0x90,0x42,0x6E,0xF0,0x12,
+ 0x98,0xDA,0x90,0x44,0x2C,0xE0,0x75,0xF0,
+ 0x50,0x84,0xE5,0xF0,0x70,0x03,0x12,0x91,
+ 0x86,0x12,0x92,0xB2,0x12,0xA6,0xBB,0x12,
+ 0x9A,0xE4,0x12,0x70,0xEE,0x05,0x2C,0x90,
+ 0xF1,0x1A,0xE0,0x70,0xFA,0x90,0xF5,0x4E,
+ 0xE0,0x60,0x3C,0xA3,0xE0,0x60,0x38,0x90,
+ 0xF9,0x03,0xE0,0xFF,0x90,0xF4,0xC1,0xE0,
+ 0x6F,0x70,0x23,0x90,0xF9,0x05,0xE0,0xB4,
+ 0x01,0x0A,0xA3,0xE0,0xFF,0x90,0xF4,0xC4,
+ 0xE0,0xB5,0x07,0x12,0x90,0xF9,0x05,0xE0,
+ 0x70,0x15,0x90,0xF9,0x07,0xE0,0xFF,0x90,
+ 0xF4,0xC5,0xE0,0x6F,0x60,0x09,0x12,0xA4,
+ 0x28,0x90,0x44,0x2C,0x74,0xFE,0xF0,0x90,
+ 0x44,0x30,0xE0,0xB4,0x01,0x17,0x90,0xF5,
+ 0x4E,0xE0,0x64,0x01,0x60,0x0F,0xA3,0xE0,
+ 0x64,0x01,0x60,0x09,0x12,0xA4,0x28,0x90,
+ 0x44,0x2C,0x74,0xFE,0xF0,0x90,0x44,0x2C,
+ 0xE0,0x04,0xF0,0xE0,0xC3,0x94,0xFA,0x50,
+ 0x03,0x02,0x93,0xA4,0x90,0x44,0x30,0x74,
+ 0x01,0xF0,0x90,0x42,0x11,0xE0,0x64,0x01,
+ 0x60,0x09,0x90,0x44,0xA0,0xE0,0x70,0x03,
+ 0x12,0x72,0x42,0x90,0x43,0x3D,0x74,0x01,
+ 0xF0,0x22,0xE4,0xFF,0x90,0x44,0x32,0xF0,
+ 0xA3,0xF0,0xA3,0xF0,0x90,0xF9,0x00,0xE0,
+ 0x70,0x08,0x90,0x44,0x35,0x74,0x2D,0xF0,
+ 0x80,0x15,0x90,0xF9,0x00,0xE0,0xB4,0x02,
+ 0x08,0x90,0x44,0x35,0x74,0x59,0xF0,0x80,
+ 0x06,0x90,0x44,0x35,0x74,0xB1,0xF0,0x90,
+ 0xF5,0x56,0xE4,0xF0,0xFF,0x90,0x44,0x35,
+ 0xE0,0xFE,0xEF,0xC3,0x9E,0x40,0x03,0x02,
+ 0x95,0xEE,0x90,0xF6,0x56,0xEF,0xF0,0x90,
+ 0xF6,0x5A,0x74,0x01,0xF0,0x90,0xF6,0x5A,
+ 0xE0,0x70,0xFA,0x90,0xF6,0x5E,0xE0,0x90,
+ 0x44,0x31,0xF0,0x90,0x44,0x2F,0xE0,0xC3,
+ 0x94,0xC8,0x50,0x25,0x90,0x41,0xD9,0xE0,
+ 0xB4,0x01,0x1E,0xEF,0xC3,0x94,0x0E,0x40,
+ 0x0C,0x90,0x44,0x35,0xE0,0x24,0xF2,0xFE,
+ 0xEF,0xD3,0x9E,0x40,0x06,0x90,0x44,0x31,
+ 0x74,0x01,0xF0,0x90,0x44,0x2F,0xE0,0x04,
+ 0xF0,0x90,0x44,0x31,0xE0,0x60,0x17,0x90,
+ 0x44,0x33,0xE0,0xFE,0x74,0x01,0xA8,0x06,
+ 0x08,0x80,0x02,0xC3,0x33,0xD8,0xFC,0xFE,
+ 0x90,0x44,0x32,0xE0,0x2E,0xF0,0x90,0x44,
+ 0x33,0xE0,0x04,0xF0,0xE0,0x64,0x08,0x60,
+ 0x05,0xA3,0xE0,0xB4,0x16,0x1B,0x90,0x44,
+ 0x34,0xE0,0x90,0xF5,0x57,0xF0,0x90,0x44,
+ 0x32,0xE0,0x90,0xF5,0x55,0xF0,0xE4,0x90,
+ 0x44,0x32,0xF0,0xA3,0xF0,0xA3,0xE0,0x04,
+ 0xF0,0x0F,0x02,0x95,0x4E,0x90,0xF5,0x56,
+ 0x74,0x01,0xF0,0x22,0x90,0xF9,0x00,0xE0,
+ 0xB4,0x01,0x10,0x90,0x44,0x6B,0x74,0x0C,
+ 0xF0,0xA3,0x74,0x1A,0xF0,0xA3,0x74,0xA1,
+ 0xF0,0x80,0x24,0x90,0xF9,0x00,0xE0,0x70,
+ 0x10,0x90,0x44,0x6B,0x74,0x0A,0xF0,0xA3,
+ 0x74,0x06,0xF0,0xA3,0x74,0xA9,0xF0,0x80,
+ 0x0E,0x90,0x44,0x6B,0x74,0x0B,0xF0,0xA3,
+ 0x74,0x0D,0xF0,0xA3,0x74,0x51,0xF0,0xE4,
+ 0xFF,0x7F,0x08,0x90,0x44,0x71,0xE4,0xF0,
+ 0xA3,0xDF,0xFC,0x7F,0x08,0x90,0xF4,0xC1,
+ 0xE0,0x14,0x60,0x12,0x14,0x60,0x41,0x24,
+ 0x02,0x70,0x6E,0x90,0x44,0x69,0x74,0xB5,
+ 0xF0,0xA3,0x74,0x08,0xF0,0x22,0x90,0xF4,
+ 0xC6,0xE0,0x14,0x60,0x0A,0x14,0x60,0x12,
+ 0x14,0x60,0x1A,0x24,0x03,0x70,0x52,0x90,
+ 0x44,0x69,0x74,0xA2,0xF0,0xA3,0x74,0x09,
+ 0xF0,0x22,0x90,0x44,0x69,0x74,0xE5,0xF0,
+ 0xA3,0x74,0x0A,0xF0,0x22,0x90,0x44,0x69,
+ 0x74,0x8E,0xF0,0xA3,0x74,0x0A,0xF0,0x22,
+ 0x90,0xF4,0xC6,0xE0,0x14,0x60,0x0A,0x14,
+ 0x60,0x12,0x14,0x60,0x1A,0x24,0x03,0x70,
+ 0x20,0x90,0x44,0x69,0x74,0x9E,0xF0,0xA3,
+ 0x74,0x0A,0xF0,0x22,0x90,0x44,0x69,0x74,
+ 0x84,0xF0,0xA3,0x74,0x0A,0xF0,0x22,0x90,
+ 0x44,0x69,0x74,0xC5,0xF0,0xA3,0x74,0x0B,
+ 0xF0,0x22,0x90,0xFD,0x47,0xE0,0x90,0x44,
+ 0x55,0xF0,0x90,0xFD,0x46,0xE0,0x90,0x44,
+ 0x56,0xF0,0x90,0xFD,0x45,0xE0,0x90,0x44,
+ 0x57,0xF0,0x90,0xFD,0x44,0xE0,0x90,0x44,
+ 0x58,0xF0,0x90,0x44,0x55,0xE0,0xFC,0xA3,
+ 0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0x90,0x44,0x6B,0xE0,0xF9,0xF8,0x12,0xAA,
+ 0x55,0x90,0x44,0x55,0x12,0xAA,0x8F,0x22,
+ 0xE4,0x90,0x44,0x51,0xF0,0x90,0xF5,0xD6,
+ 0xE0,0x90,0x44,0x52,0xF0,0x90,0xF5,0xD5,
+ 0xE0,0x90,0x44,0x53,0xF0,0x90,0xF5,0xD4,
+ 0xE0,0x90,0x44,0x54,0xF0,0x22,0xE4,0x90,
+ 0x44,0x7D,0xF0,0x90,0x44,0x7C,0xF0,0x90,
+ 0x44,0x7B,0xF0,0x22,0x90,0x44,0x7D,0xE0,
+ 0xB4,0x64,0x22,0x90,0x44,0x7C,0xE0,0xD3,
+ 0x94,0x05,0x40,0x11,0x90,0x44,0x7B,0xE0,
+ 0xD3,0x94,0x05,0x40,0x08,0x90,0x44,0x48,
+ 0x74,0x01,0xF0,0x80,0x05,0xE4,0x90,0x44,
+ 0x48,0xF0,0x12,0x97,0x17,0x90,0x44,0x7D,
+ 0xE0,0x04,0xF0,0x12,0x97,0x58,0x22,0x90,
+ 0xF5,0xCC,0xE4,0xF0,0xA3,0x74,0x02,0xF0,
+ 0x90,0xF5,0xD4,0xE0,0x90,0x44,0x54,0xF0,
+ 0x90,0xF5,0xCB,0xE0,0xB4,0x01,0xF9,0x12,
+ 0x96,0xF9,0x90,0xFD,0x33,0xE4,0xF0,0x04,
+ 0xF0,0x90,0xFD,0x36,0xE0,0xB4,0x01,0xF9,
+ 0x12,0x96,0xBB,0x90,0x44,0x51,0xE0,0xFC,
+ 0xA3,0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,
+ 0xFF,0x90,0x44,0x55,0xE0,0xF8,0xA3,0xE0,
+ 0xF9,0xA3,0xE0,0xFA,0xA3,0xE0,0xFB,0xC3,
+ 0x12,0xAA,0x44,0x50,0x06,0x90,0x44,0x7C,
+ 0xE0,0x04,0xF0,0x90,0x44,0x51,0xE0,0xFC,
+ 0xA3,0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,
+ 0xFF,0x78,0x02,0x12,0xAA,0x68,0x90,0x44,
+ 0x51,0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,
+ 0xFA,0xA3,0xE0,0x2F,0xFF,0xEA,0x3E,0xFE,
+ 0xE9,0x3D,0xFD,0xE8,0x3C,0xFC,0x90,0x44,
+ 0x55,0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,
+ 0xFA,0xA3,0xE0,0xFB,0xD3,0x12,0xAA,0x44,
+ 0x40,0x06,0x90,0x44,0x7B,0xE0,0x04,0xF0,
+ 0x22,0x90,0xF5,0xCB,0xE0,0xB4,0x01,0xF9,
+ 0x90,0xF5,0xD0,0xE0,0x90,0x44,0x4A,0xF0,
+ 0x90,0xF5,0xCF,0xE0,0x90,0x44,0x4B,0xF0,
+ 0x90,0xF5,0xCE,0xE0,0x90,0x44,0x4C,0xF0,
+ 0x90,0x44,0x49,0xE0,0xFC,0xA3,0xE0,0xFD,
+ 0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,0x78,0x0A,
+ 0x12,0xAA,0x7C,0x78,0x0A,0x12,0xAA,0x68,
+ 0x90,0x44,0x49,0x12,0xAA,0x8F,0x90,0x44,
+ 0x69,0xE0,0xFF,0xE4,0xFC,0xFD,0xFE,0x90,
+ 0x44,0x49,0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,
+ 0xE0,0xFA,0xA3,0xE0,0xFB,0x12,0xA9,0xD1,
+ 0x90,0x44,0x6A,0xE0,0xF9,0xF8,0x12,0xAA,
+ 0x68,0x90,0x44,0x49,0x12,0xAA,0x8F,0x90,
+ 0xF5,0xD3,0xE0,0x90,0x44,0x4E,0xF0,0x90,
+ 0xF5,0xD2,0xE0,0x90,0x44,0x4F,0xF0,0x90,
+ 0xF5,0xD1,0xE0,0x90,0x44,0x50,0xF0,0x90,
+ 0x44,0x4D,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,
+ 0xE0,0xFE,0xA3,0xE0,0xFF,0x78,0x0A,0x12,
+ 0xAA,0x7C,0x78,0x0A,0x12,0xAA,0x68,0x90,
+ 0x44,0x4D,0x12,0xAA,0x8F,0x90,0x44,0x69,
+ 0xE0,0xFF,0xE4,0xFC,0xFD,0xFE,0x90,0x44,
+ 0x4D,0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,
+ 0xFA,0xA3,0xE0,0xFB,0x12,0xA9,0xD1,0x90,
+ 0x44,0x6A,0xE0,0xF9,0xF8,0x12,0xAA,0x68,
+ 0x90,0x44,0x4D,0x12,0xAA,0x8F,0x22,0x90,
+ 0x44,0x45,0xE0,0x90,0xF5,0xCC,0xF0,0x90,
+ 0x44,0x44,0xE0,0x54,0x1F,0x90,0xF5,0xCD,
+ 0xF0,0x90,0xF5,0xD4,0xE0,0x90,0x44,0x54,
+ 0xF0,0x90,0xF5,0xCB,0xE0,0xB4,0x01,0xF9,
+ 0x22,0x90,0x42,0x3B,0xE0,0x70,0x03,0x02,
+ 0x99,0xC6,0x90,0x44,0xAE,0x74,0x08,0xF0,
+ 0xE4,0x90,0x44,0x3E,0xF0,0x90,0x44,0xAE,
+ 0xE0,0xFF,0x90,0x44,0x3E,0xE0,0xFE,0xC3,
+ 0x9F,0x50,0x6C,0xEE,0xFF,0x7E,0x00,0x7C,
+ 0x02,0x7D,0x58,0x12,0xA9,0x34,0xEF,0x24,
+ 0x64,0xFF,0xE4,0x3E,0x90,0x44,0x44,0xF0,
+ 0xA3,0xEF,0xF0,0x12,0xA4,0x59,0x90,0x44,
+ 0xAF,0xE0,0x70,0x43,0x05,0x2C,0x12,0x96,
+ 0xF9,0x90,0x44,0x3E,0xE0,0x70,0x03,0x12,
+ 0xA4,0xE8,0x90,0x44,0x55,0xE0,0xFC,0xA3,
+ 0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0x78,0x04,0x12,0xAA,0x55,0x90,0x44,0x51,
+ 0xE0,0xF8,0xA3,0xE0,0xF9,0xA3,0xE0,0xFA,
+ 0xA3,0xE0,0xFB,0xC3,0x12,0xAA,0x44,0x50,
+ 0x0E,0x90,0x44,0x43,0xE0,0x04,0xF0,0x70,
+ 0x06,0x90,0x44,0x42,0xE0,0x04,0xF0,0x90,
+ 0x44,0x3E,0xE0,0x04,0xF0,0x80,0x86,0x90,
+ 0x44,0x46,0xE0,0x04,0xF0,0xE0,0x64,0x64,
+ 0x70,0x53,0x90,0xF9,0x00,0xE0,0x60,0x08,
+ 0x90,0x44,0x7E,0x74,0x28,0xF0,0x80,0x06,
+ 0x90,0x44,0x7E,0x74,0x3E,0xF0,0x90,0x42,
+ 0x2F,0x74,0x01,0xF0,0x90,0x44,0x7E,0xE0,
+ 0xFF,0xD3,0x90,0x44,0x43,0xE0,0x9F,0x90,
+ 0x44,0x42,0xE0,0x94,0x00,0x40,0x0B,0xE4,
+ 0x90,0x41,0xE8,0xF0,0x90,0x41,0xE9,0xF0,
+ 0x80,0x0A,0x90,0x41,0xE8,0x74,0x01,0xF0,
+ 0x90,0x41,0xE9,0xF0,0x90,0x44,0x47,0xE0,
+ 0x04,0xF0,0xE4,0x90,0x44,0x42,0xF0,0xA3,
+ 0xF0,0x90,0x44,0x46,0xF0,0x12,0x99,0xCA,
+ 0x22,0x90,0x42,0x2F,0xE0,0x60,0x33,0x90,
+ 0xF0,0x2B,0xE0,0x70,0x21,0x90,0x43,0xC4,
+ 0xE0,0x70,0x0C,0x90,0x41,0xE0,0xE0,0x60,
+ 0x06,0x90,0xF9,0x00,0xE0,0x70,0x0F,0x90,
+ 0x41,0xE8,0xE0,0x70,0x09,0x90,0xF7,0x84,
+ 0xF0,0x90,0xF7,0x83,0xF0,0x22,0x90,0xF7,
+ 0x84,0x74,0x01,0xF0,0x90,0xF7,0x83,0x74,
+ 0xFF,0xF0,0x22,0xE4,0x90,0x44,0x70,0xF0,
+ 0x90,0x44,0x6E,0xF0,0xA3,0xF0,0x12,0x95,
+ 0xF5,0x22,0x90,0xF9,0x00,0xE0,0x70,0x19,
+ 0x90,0x44,0x44,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0x7C,0x06,0x7D,0xA8,0x12,0xA9,0x46,0x90,
+ 0x44,0x44,0xEC,0xF0,0xA3,0xED,0xF0,0x80,
+ 0x1E,0x90,0xF9,0x00,0xE0,0xB4,0x02,0x17,
+ 0x90,0x44,0x44,0xE0,0xFE,0xA3,0xE0,0xFF,
+ 0x7C,0x0D,0x7D,0x50,0x12,0xA9,0x46,0x90,
+ 0x44,0x44,0xEC,0xF0,0xA3,0xED,0xF0,0x12,
+ 0x98,0xB8,0x22,0x22,0xE4,0xFB,0xEB,0x25,
+ 0xE0,0x24,0x7F,0xF5,0x82,0xE4,0x34,0x44,
+ 0xF5,0x83,0xE0,0xFF,0xA3,0xE0,0x90,0x44,
+ 0x44,0xCF,0xF0,0xA3,0xEF,0xF0,0x12,0x9A,
+ 0x13,0x90,0xF5,0xD0,0xE0,0xFF,0xC4,0x13,
+ 0x54,0x07,0xFF,0x90,0xF5,0xD3,0xE0,0xFE,
+ 0xC4,0x13,0x54,0x07,0x6F,0x60,0x0D,0x74,
+ 0x71,0x2B,0xF5,0x82,0xE4,0x34,0x44,0xF5,
+ 0x83,0xE0,0x04,0xF0,0x0B,0xEB,0xB4,0x08,
+ 0xBD,0x90,0x44,0x6F,0xE0,0x04,0xF0,0xE0,
+ 0xC3,0x94,0x13,0x40,0x3D,0xE4,0xFF,0xFB,
+ 0x74,0x71,0x2B,0xF5,0x82,0xE4,0x34,0x44,
+ 0xF5,0x83,0xE0,0xFE,0xD3,0x94,0x0E,0x50,
+ 0x06,0xEE,0xC3,0x94,0x05,0x50,0x01,0x0F,
+ 0x74,0x71,0x2B,0xF5,0x82,0xE4,0x34,0x44,
+ 0xF5,0x83,0xE4,0xF0,0x0B,0xEB,0xB4,0x08,
+ 0xD7,0xEF,0xD3,0x94,0x06,0x40,0x06,0x90,
+ 0x42,0x3C,0x74,0x01,0xF0,0xE4,0x90,0x44,
+ 0x6F,0xF0,0x22,0x90,0x42,0x3A,0xE0,0xB4,
+ 0x01,0x1F,0x90,0xF0,0x2B,0xE0,0x70,0x19,
+ 0x12,0x9A,0x55,0x90,0x42,0x3C,0xE0,0xB4,
+ 0x01,0x0F,0x12,0x9A,0x04,0x90,0xFD,0x0F,
+ 0x74,0x07,0xF0,0x90,0xFD,0x29,0x74,0x01,
+ 0xF0,0x22,0x90,0xF7,0x66,0xE0,0x90,0x44,
+ 0x3F,0xF0,0xE0,0xFF,0x90,0x42,0x47,0xF0,
+ 0x90,0xF7,0x68,0xE0,0x90,0x44,0x9D,0xF0,
+ 0xEF,0x70,0x04,0x90,0x44,0x97,0xF0,0x90,
+ 0xF7,0x65,0xE0,0x90,0x44,0x9C,0xF0,0x90,
+ 0xF5,0xA9,0xE0,0x70,0x22,0x90,0xF7,0x63,
+ 0xE0,0x90,0x42,0x2F,0xF0,0x90,0xF7,0x64,
+ 0xE0,0x90,0x41,0xE8,0xF0,0x12,0x70,0x6A,
+ 0x90,0x44,0x3F,0xE0,0x90,0x41,0xD1,0xF0,
+ 0xE4,0x90,0x42,0x46,0xF0,0x80,0x0A,0x90,
+ 0x41,0xD1,0x74,0x01,0xF0,0x90,0x42,0x46,
+ 0xF0,0x12,0x99,0xCA,0x04,0x12,0x6E,0x75,
+ 0x90,0xF7,0x69,0xE0,0x70,0xFA,0x90,0xF7,
+ 0x6B,0x74,0x01,0xF0,0xE4,0xF0,0x22,0x90,
+ 0x42,0x3F,0xE0,0x64,0x01,0x70,0x42,0x90,
+ 0xFD,0x9D,0xE0,0xFE,0x90,0xFD,0x9C,0xE0,
+ 0x7C,0x00,0x24,0x00,0xFF,0xEC,0x3E,0xFE,
+ 0xC3,0xEF,0x94,0x46,0xEE,0x94,0x00,0x50,
+ 0x28,0x90,0xFD,0x37,0xE0,0x64,0x07,0x70,
+ 0x20,0x90,0xFD,0x29,0xF0,0x90,0x42,0x3D,
+ 0xF0,0x90,0xFD,0x2B,0xF0,0x7D,0xFF,0x7C,
+ 0x7F,0xFF,0x12,0x47,0xAD,0x90,0xF1,0x1A,
+ 0xE0,0x70,0xFA,0x90,0xFD,0x2B,0x74,0x01,
+ 0xF0,0x22,0xE5,0x0F,0x14,0xB4,0x08,0x00,
+ 0x50,0x5D,0x90,0x9B,0xD9,0x75,0xF0,0x03,
+ 0xA4,0xC5,0x83,0x25,0xF0,0xC5,0x83,0x73,
+ 0x02,0x9B,0xF1,0x02,0x9B,0xF8,0x02,0x9B,
+ 0xFF,0x02,0x9C,0x06,0x02,0x9C,0x0D,0x02,
+ 0x9C,0x14,0x02,0x9C,0x1B,0x02,0x9C,0x22,
+ 0x90,0xF2,0x1B,0x74,0x01,0xF0,0x22,0x90,
+ 0xF2,0x1B,0x74,0x02,0xF0,0x22,0x90,0xF2,
+ 0x1B,0x74,0x03,0xF0,0x22,0x90,0xF2,0x1B,
+ 0x74,0x04,0xF0,0x22,0x90,0xF2,0x1B,0x74,
+ 0x05,0xF0,0x22,0x90,0xF2,0x1B,0x74,0x06,
+ 0xF0,0x22,0x90,0xF2,0x1B,0x74,0x07,0xF0,
+ 0x22,0x90,0xF2,0x1B,0x74,0x08,0xF0,0x22,
+ 0xC2,0xAF,0x90,0x42,0x2F,0xE0,0x90,0xF7,
+ 0x5A,0xF0,0x90,0x41,0xE9,0xE0,0x90,0xF7,
+ 0x5B,0xF0,0x90,0x42,0x37,0xE0,0x90,0xF7,
+ 0x5C,0xF0,0xA3,0xEF,0xF0,0x90,0xF9,0x00,
+ 0xE0,0x90,0xF7,0x5E,0xF0,0x90,0x41,0xDF,
+ 0xE0,0x90,0xF7,0x5F,0xF0,0x90,0xF7,0x61,
+ 0x74,0x01,0xF0,0x90,0xF7,0x60,0xF0,0x7F,
+ 0x00,0x7E,0x28,0x12,0x47,0x76,0x90,0xF7,
+ 0x61,0xE4,0xF0,0x90,0xF7,0x60,0xF0,0xD2,
+ 0xAF,0x22,0x90,0xF5,0xA8,0xE4,0xF0,0x12,
+ 0x48,0xAC,0x22,0x12,0x9C,0xE6,0x90,0xF7,
+ 0x42,0xE0,0x90,0x44,0x99,0xF0,0xE0,0x90,
+ 0xF9,0x00,0xF0,0x90,0xF7,0x44,0xE0,0xFF,
+ 0x90,0xF9,0x08,0xF0,0x90,0xF7,0x43,0xE0,
+ 0xFF,0x90,0xF9,0x03,0xF0,0x90,0xF7,0x46,
+ 0xE0,0xFF,0x90,0xF9,0x06,0xF0,0x90,0xF7,
+ 0x47,0xE0,0xFF,0x90,0xF9,0x07,0xF0,0x90,
+ 0xF7,0x45,0xE0,0x54,0x03,0xFF,0x90,0xF9,
+ 0x02,0xF0,0x70,0x05,0x90,0xF9,0x05,0x04,
+ 0xF0,0x22,0xE4,0xFF,0xFE,0xC3,0xEF,0x94,
+ 0xFF,0xEE,0x64,0x80,0x94,0x7F,0x50,0x14,
+ 0xEF,0x24,0x58,0xFD,0xEE,0x34,0xF7,0x8D,
+ 0x82,0xF5,0x83,0xE4,0xF0,0x0F,0xBF,0x00,
+ 0x01,0x0E,0x80,0xE1,0x22,0x90,0xF5,0xB0,
+ 0xE0,0x60,0x0C,0x90,0xF9,0x00,0xE0,0xFF,
+ 0x90,0xF7,0x42,0xE0,0xB5,0x07,0x0D,0xE5,
+ 0x0F,0xB4,0x03,0x20,0x90,0xF7,0x42,0xE0,
+ 0x64,0x01,0x60,0x18,0x12,0x68,0xE0,0x75,
+ 0x0F,0x01,0x12,0x4D,0x1F,0x53,0x91,0xBF,
+ 0xE4,0x90,0x44,0x98,0xF0,0xD2,0xEA,0xD2,
+ 0xE9,0x12,0xA4,0x1A,0x90,0x44,0x97,0x74,
+ 0x01,0xF0,0x22,0x90,0xFB,0x96,0xE0,0x30,
+ 0xE7,0x16,0xE4,0x90,0x42,0x37,0xF0,0x12,
+ 0x70,0xEE,0xE4,0x90,0x44,0xB2,0xF0,0xF5,
+ 0x2E,0x7F,0x80,0x7E,0x13,0x12,0x47,0x76,
+ 0x90,0xFB,0x88,0x74,0x01,0xF0,0x22,0x90,
+ 0xF0,0x02,0xE0,0xF5,0x12,0xA3,0xE0,0xF5,
+ 0x11,0xE0,0x60,0x04,0x7F,0xFF,0x80,0x05,
+ 0x90,0xF0,0x02,0xE0,0xFF,0x90,0x42,0x44,
+ 0xEF,0xF0,0x90,0xF0,0x63,0xE0,0x90,0x44,
+ 0x9E,0xF0,0x90,0xF0,0x62,0xE0,0x90,0x44,
+ 0x9F,0xF0,0x90,0x44,0xA3,0xE0,0xFB,0x7A,
+ 0x00,0x90,0x44,0x9F,0xE0,0x2B,0xFE,0x90,
+ 0x44,0x9E,0xE0,0x3A,0x90,0x44,0xA5,0xF0,
+ 0xA3,0xCE,0xF0,0xC3,0x90,0x44,0x9F,0xE0,
+ 0x9B,0xFE,0x90,0x44,0x9E,0xE0,0x9A,0x90,
+ 0x44,0xA7,0xF0,0xA3,0xCE,0xF0,0x90,0x44,
+ 0xA6,0xE0,0x25,0xE0,0xFF,0x90,0x44,0xA5,
+ 0xE0,0x33,0xFE,0xD3,0xE5,0x12,0x9F,0xE5,
+ 0x11,0x9E,0x40,0x05,0x75,0x13,0xFC,0x80,
+ 0x44,0xC3,0x90,0x44,0xA6,0xE0,0x95,0x12,
+ 0x90,0x44,0xA5,0xE0,0x95,0x11,0x50,0x05,
+ 0x75,0x13,0xFF,0x80,0x30,0x90,0x44,0xA7,
+ 0xE0,0xC3,0x13,0xFE,0xA3,0xE0,0x13,0xFF,
+ 0xC3,0xE5,0x12,0x9F,0xE5,0x11,0x9E,0x50,
+ 0x05,0x75,0x13,0x04,0x80,0x17,0xD3,0x90,
+ 0x44,0xA8,0xE0,0x95,0x12,0x90,0x44,0xA7,
+ 0xE0,0x95,0x11,0x40,0x05,0x75,0x13,0x01,
+ 0x80,0x03,0xE4,0xF5,0x13,0x90,0xF0,0x01,
+ 0x74,0x01,0xF0,0x22,0x90,0x42,0x5A,0xEF,
+ 0xF0,0x90,0x44,0x92,0xE0,0x6F,0x60,0x19,
+ 0x90,0x41,0xDB,0xE0,0xB4,0x23,0x12,0xC2,
+ 0xAF,0x90,0x44,0x92,0xEF,0xF0,0x90,0xFB,
+ 0x97,0xF0,0x7F,0x10,0x12,0x89,0x23,0xD2,
+ 0xAF,0x22,0x90,0x41,0xDB,0xE0,0x64,0x23,
+ 0x70,0x44,0x90,0x41,0xEC,0xE0,0x70,0x3E,
+ 0x90,0x41,0xD9,0x04,0xF0,0x90,0x41,0xE0,
+ 0xE0,0xB4,0x01,0x13,0x90,0x44,0x90,0x74,
+ 0x0E,0xF0,0x7F,0x82,0x12,0x89,0x23,0x90,
+ 0x41,0xE7,0x74,0x01,0xF0,0x80,0x06,0x90,
+ 0x44,0x90,0x74,0x0B,0xF0,0x7F,0x81,0x12,
+ 0x89,0x23,0x90,0x41,0xD7,0x74,0x01,0xF0,
+ 0x90,0x44,0x92,0x74,0xFF,0xF0,0x90,0x44,
+ 0x90,0xE0,0xFF,0x12,0x9E,0x05,0x22,0x90,
+ 0x42,0x4E,0xE0,0x60,0x06,0x90,0xFB,0x2A,
+ 0x74,0x71,0xF0,0x90,0xFB,0x97,0xE4,0xF0,
+ 0x7F,0x11,0x12,0x89,0x23,0x74,0xFF,0xFF,
+ 0xFE,0x12,0x47,0x76,0x74,0xFF,0xFF,0xFE,
+ 0x12,0x47,0x76,0x90,0xFB,0x08,0xE0,0xFE,
+ 0x90,0xFB,0x07,0xE0,0x7C,0x00,0x24,0x00,
+ 0xF5,0x1E,0xEC,0x3E,0xF5,0x1D,0x90,0x42,
+ 0x00,0xE5,0x1E,0xF0,0x90,0xFB,0x97,0x74,
+ 0x01,0xF0,0x7F,0x11,0x12,0x89,0x23,0x90,
+ 0x42,0x4E,0xE0,0x60,0x06,0x90,0xFB,0x2A,
+ 0x74,0x75,0xF0,0x22,0x90,0xFB,0x08,0xE0,
+ 0x7F,0x00,0xFE,0x90,0xFB,0x07,0xE0,0x7A,
+ 0x00,0x24,0x00,0xFF,0xEA,0x3E,0xCF,0xC3,
+ 0x95,0x1E,0xCF,0x95,0x1D,0xFE,0x90,0x42,
+ 0x49,0xE0,0xF9,0xEF,0xA8,0x01,0x08,0x80,
+ 0x05,0xCE,0xC3,0x13,0xCE,0x13,0xD8,0xF9,
+ 0xFF,0x90,0xFB,0x28,0xE0,0xB4,0x86,0x13,
+ 0x90,0x42,0x04,0xE0,0xFE,0xA8,0x01,0x08,
+ 0x80,0x02,0xC3,0x13,0xD8,0xFC,0xFE,0xC3,
+ 0xEF,0x9E,0xFF,0x90,0x42,0x4E,0xE0,0x60,
+ 0x06,0xEF,0x7C,0x00,0xFD,0x80,0x14,0xEF,
+ 0x75,0xF0,0xAB,0xA4,0xAE,0xF0,0x78,0x06,
+ 0xCE,0xA2,0xE7,0x13,0xCE,0x13,0xD8,0xF8,
+ 0xFD,0xAC,0x06,0xAF,0x05,0x90,0x42,0x01,
+ 0xEF,0xF0,0x22,0xE5,0x18,0x90,0xF0,0x0E,
+ 0xF0,0xE5,0x17,0xFF,0x33,0x95,0xE0,0xA3,
+ 0xEF,0xF0,0xE5,0x1C,0xFD,0x90,0xF0,0x1B,
+ 0xF0,0xE5,0x1B,0xFF,0x33,0x95,0xE0,0xA3,
+ 0xEF,0xF0,0x90,0xF0,0x25,0xED,0xF0,0xA3,
+ 0xEF,0xF0,0x90,0xF0,0x2C,0x74,0x01,0xF0,
+ 0x22,0x90,0x41,0xDB,0xE0,0x64,0x23,0x70,
+ 0x58,0x90,0x41,0xE0,0xE0,0xB4,0x01,0x22,
+ 0x90,0x42,0x1B,0xE0,0x90,0xF0,0x0E,0xF0,
+ 0x90,0x42,0x1C,0xE0,0x90,0xF0,0x0F,0xF0,
+ 0x90,0x42,0x1D,0xE0,0x90,0xF0,0x1B,0xF0,
+ 0x90,0x42,0x1E,0xE0,0x90,0xF0,0x1C,0xF0,
+ 0x80,0x14,0x90,0xF0,0x0E,0x74,0xFF,0xF0,
+ 0xA3,0x74,0x01,0xF0,0x90,0xF0,0x1B,0x74,
+ 0xF0,0xF0,0xA3,0x74,0x01,0xF0,0x90,0xF0,
+ 0x1B,0xE0,0x90,0xF0,0x25,0xF0,0x90,0xF0,
+ 0x1C,0xE0,0x90,0xF0,0x26,0xF0,0x90,0xF0,
+ 0x2C,0x74,0x01,0xF0,0xE4,0x90,0x44,0x91,
+ 0xF0,0x22,0x90,0x41,0xEC,0xE0,0x60,0x03,
+ 0x02,0xA0,0xE3,0x90,0xF0,0x60,0xE0,0xC3,
+ 0x94,0xD5,0x50,0x41,0x90,0x42,0x5A,0xE0,
+ 0xF5,0x14,0x60,0x07,0x14,0xF0,0xE0,0xFF,
+ 0x12,0x9E,0x05,0x90,0xF0,0x60,0xE0,0xD3,
+ 0x94,0x60,0x40,0x03,0x02,0xA0,0x76,0x90,
+ 0x43,0x41,0x74,0x86,0xF0,0x90,0xFB,0x28,
+ 0xF0,0x90,0x41,0xD7,0xE0,0x70,0x6E,0x90,
+ 0xF0,0x60,0xE0,0xC3,0x94,0x50,0x50,0x65,
+ 0x7F,0x81,0x12,0x89,0x23,0x90,0x41,0xD7,
+ 0x74,0x01,0xF0,0x80,0x58,0x90,0xF0,0x60,
+ 0xE0,0xD3,0x94,0xDB,0x40,0x4F,0x90,0x44,
+ 0x91,0xE0,0x70,0x49,0x90,0x42,0x5A,0xE0,
+ 0xFF,0x12,0x9E,0x05,0x90,0x41,0xE0,0xE0,
+ 0xB4,0x01,0x04,0x7F,0x0E,0x80,0x02,0x7F,
+ 0x0B,0x90,0x42,0x5A,0xE0,0xC3,0x9F,0x50,
+ 0x03,0xE0,0x04,0xF0,0x90,0xF0,0x60,0xE0,
+ 0xC3,0x94,0xDF,0x40,0x20,0x90,0x43,0x41,
+ 0x74,0x82,0xF0,0x90,0xFB,0x28,0xF0,0x90,
+ 0x41,0xD7,0xE0,0x60,0x10,0x90,0x41,0xD9,
+ 0xE0,0x70,0x0A,0x7F,0x80,0x12,0x89,0x23,
+ 0xE4,0x90,0x41,0xD7,0xF0,0x90,0x41,0xE7,
+ 0xE0,0x60,0x46,0x90,0xF0,0x61,0xE0,0xD3,
+ 0x94,0xF3,0x40,0x06,0x90,0x41,0xD9,0xE0,
+ 0x60,0x26,0x90,0x41,0xD9,0xE0,0x60,0x31,
+ 0x90,0x44,0x91,0xE0,0x25,0xE0,0xFF,0xE4,
+ 0x33,0xFE,0xEF,0x24,0xA0,0xFF,0xE4,0x3E,
+ 0xFE,0x90,0xF0,0x61,0xE0,0xD3,0x9F,0xEE,
+ 0x64,0x80,0xF8,0x74,0x80,0x98,0x40,0x11,
+ 0x90,0x41,0xE0,0xE0,0xB4,0x01,0x05,0x7F,
+ 0x83,0x12,0x89,0x23,0xE4,0x90,0x41,0xE7,
+ 0xF0,0x90,0x41,0xE7,0xE0,0x70,0x1B,0x90,
+ 0xF0,0x61,0xE0,0xC3,0x94,0x63,0x50,0x12,
+ 0x90,0x41,0xE0,0xE0,0xB4,0x01,0x05,0x7F,
+ 0x82,0x12,0x89,0x23,0x90,0x41,0xE7,0x74,
+ 0x01,0xF0,0x90,0x41,0xED,0xE0,0x60,0x03,
+ 0x02,0xA2,0x58,0x12,0x9E,0xCD,0xEF,0xFB,
+ 0x90,0x41,0xD7,0xE0,0xFF,0xC3,0x74,0x01,
+ 0x9F,0xFF,0xE4,0x94,0x00,0xFE,0x90,0x42,
+ 0x14,0xE0,0xFD,0x7C,0x00,0x12,0xA9,0x34,
+ 0x90,0x42,0x17,0xE0,0x2F,0xFF,0xEC,0x3E,
+ 0xFE,0xD3,0xEB,0x9F,0xEE,0x64,0x80,0xF8,
+ 0x74,0x80,0x98,0x50,0x13,0x12,0x9E,0xCD,
+ 0x90,0x42,0x18,0xE0,0xFE,0xEF,0xD3,0x9E,
+ 0x40,0x78,0x90,0x41,0xD9,0xE0,0x60,0x72,
+ 0x90,0x42,0x5A,0xE0,0x60,0x6C,0x14,0xF0,
+ 0xE0,0xFF,0x12,0x9E,0x05,0x90,0x42,0x5A,
+ 0xE0,0xF5,0x14,0x90,0xF0,0x1C,0xE0,0xFE,
+ 0x90,0xF0,0x1B,0xE0,0x7C,0x00,0x24,0x00,
+ 0xF5,0x1C,0xEC,0x3E,0xF5,0x1B,0x74,0xFE,
+ 0x25,0x1C,0xF5,0x1C,0x74,0xFF,0x35,0x1B,
+ 0xF5,0x1B,0x90,0xF0,0x0F,0xE0,0xFE,0x90,
+ 0xF0,0x0E,0xE0,0x24,0x00,0xF5,0x18,0xEC,
+ 0x3E,0xF5,0x17,0x74,0xFE,0x25,0x18,0xF5,
+ 0x18,0x74,0xFF,0x35,0x17,0xF5,0x17,0x12,
+ 0x9F,0x3C,0x90,0x44,0x91,0xE0,0x04,0xF0,
+ 0x90,0x42,0x5A,0xE0,0xC3,0x94,0x03,0x50,
+ 0x11,0x90,0x41,0xD7,0xE0,0x70,0x0B,0x7F,
+ 0x81,0x12,0x89,0x23,0x90,0x41,0xD7,0x74,
+ 0x01,0xF0,0x12,0x9E,0xCD,0x90,0x42,0x19,
+ 0xE0,0xFE,0xEF,0xC3,0x9E,0x50,0x06,0x90,
+ 0x41,0xD9,0xE0,0x60,0x10,0x12,0x9E,0xCD,
+ 0x90,0x42,0x1A,0xE0,0xFE,0xEF,0xC3,0x9E,
+ 0x40,0x03,0x02,0xA2,0x58,0x90,0x41,0xE0,
+ 0xE0,0xB4,0x01,0x04,0x7F,0x0E,0x80,0x02,
+ 0x7F,0x0B,0x90,0x42,0x5A,0xE0,0xC3,0x9F,
+ 0x50,0x74,0x90,0x44,0x91,0xE0,0x60,0x77,
+ 0x90,0x42,0x5A,0xE0,0x04,0xF0,0xE0,0xFF,
+ 0x12,0x9E,0x05,0x90,0xF0,0x1C,0xE0,0xFE,
+ 0x90,0xF0,0x1B,0xE0,0x7C,0x00,0x24,0x00,
+ 0xF5,0x1C,0xEC,0x3E,0xF5,0x1B,0x74,0x02,
+ 0x25,0x1C,0xF5,0x1C,0xE4,0x35,0x1B,0xF5,
+ 0x1B,0x90,0xF0,0x0F,0xE0,0xFE,0x90,0xF0,
+ 0x0E,0xE0,0x24,0x00,0xF5,0x18,0xEC,0x3E,
+ 0xF5,0x17,0x74,0x02,0x25,0x18,0xF5,0x18,
+ 0xE4,0x35,0x17,0xF5,0x17,0x12,0x9F,0x3C,
+ 0x90,0x44,0x91,0xE0,0x14,0xF0,0x90,0x42,
+ 0x5A,0xE0,0xD3,0x94,0x0B,0x40,0x20,0x90,
+ 0x41,0xD7,0xE0,0x60,0x1A,0x90,0x44,0x91,
+ 0xE0,0x70,0x14,0x7F,0x80,0x12,0x89,0x23,
+ 0xE4,0x90,0x41,0xD7,0xF0,0x22,0x90,0x44,
+ 0x91,0xE0,0x60,0x03,0x12,0x9F,0x6A,0x22,
+ 0x90,0xF0,0x2B,0xE0,0x70,0x0E,0x90,0x43,
+ 0x3E,0xF0,0x90,0xFD,0x74,0xF0,0x90,0xF1,
+ 0xE9,0x04,0xF0,0x22,0x90,0xF1,0xE9,0xE4,
+ 0xF0,0x90,0xFD,0x74,0x04,0xF0,0x22,0xE5,
+ 0x0F,0xB4,0x02,0x05,0xE4,0x90,0x44,0xA1,
+ 0xF0,0x90,0x41,0xF5,0xE0,0x70,0x0A,0xF5,
+ 0x21,0xF5,0x22,0xF5,0x24,0xF5,0x25,0xF5,
+ 0x23,0x90,0x42,0x58,0xE0,0x60,0x05,0xE4,
+ 0xF5,0x2A,0xF5,0x2B,0x22,0xE5,0x22,0xD3,
+ 0x94,0x00,0x40,0x23,0x90,0x42,0x44,0xE0,
+ 0xFE,0xE5,0x23,0xD3,0x9E,0x40,0x06,0xE5,
+ 0x23,0x9E,0xFF,0x80,0x08,0x90,0x42,0x44,
+ 0xE0,0xC3,0x95,0x23,0xFF,0xEF,0x25,0x25,
+ 0xF5,0x25,0xE4,0x35,0x24,0xF5,0x24,0x90,
+ 0x42,0x44,0xE0,0xF5,0x23,0x22,0x90,0x42,
+ 0x05,0xE0,0xFD,0x90,0x42,0x06,0xE0,0x8D,
+ 0xF0,0xA4,0xFF,0xD3,0xE5,0x25,0x9F,0xE5,
+ 0x24,0x95,0xF0,0x40,0x08,0x90,0xF0,0x2B,
+ 0x74,0x01,0xF0,0x80,0x17,0x90,0x42,0x07,
+ 0xE0,0x8D,0xF0,0xA4,0xFF,0xC3,0xE5,0x25,
+ 0x9F,0xE5,0x24,0x95,0xF0,0x50,0x05,0x90,
+ 0xF0,0x2B,0xE4,0xF0,0x90,0xF0,0x2B,0xE0,
+ 0x60,0x0D,0x90,0x44,0xA3,0x74,0x15,0xF0,
+ 0x90,0xF7,0x0B,0x74,0x0B,0xF0,0x22,0x90,
+ 0x42,0x2D,0xE0,0x90,0x44,0xA3,0xF0,0x90,
+ 0xF7,0x0B,0x74,0x2B,0xF0,0x22,0xE5,0x0F,
+ 0xD3,0x94,0x02,0x40,0x37,0xE5,0x21,0xB4,
+ 0x01,0x03,0x12,0xA2,0x78,0xE5,0x21,0x70,
+ 0x21,0x90,0x42,0x05,0xE0,0xFF,0xE5,0x22,
+ 0xC3,0x9F,0x50,0x0A,0x12,0xA2,0x9E,0x12,
+ 0xA3,0x66,0x05,0x22,0x80,0x0C,0x75,0x21,
+ 0x01,0x12,0xA3,0xCC,0x12,0xA2,0xCF,0x12,
+ 0xA2,0x59,0x90,0x41,0xDB,0xE0,0xB4,0x2E,
+ 0x03,0x12,0x88,0x8B,0x22,0x90,0xF1,0x61,
+ 0xE0,0xFE,0x90,0xF1,0x60,0xE0,0x7C,0x00,
+ 0x24,0x00,0xFF,0xEC,0x3E,0x90,0x44,0x93,
+ 0xF0,0xA3,0xEF,0xF0,0x90,0x42,0x58,0xE0,
+ 0x60,0x48,0xE4,0xF5,0x26,0xF5,0x27,0x90,
+ 0xF2,0x10,0xE0,0xF5,0x28,0x90,0xF2,0x0F,
+ 0xE0,0xF5,0x29,0x90,0x42,0x44,0xE0,0xFF,
+ 0xE4,0xFC,0xFD,0xFE,0xAB,0x29,0xAA,0x28,
+ 0xA9,0x27,0xA8,0x26,0x12,0xA9,0xD1,0x8F,
+ 0x29,0x8E,0x28,0x8D,0x27,0x8C,0x26,0xAF,
+ 0x29,0xAE,0x28,0xAD,0x27,0xAC,0x26,0x90,
+ 0xF2,0x11,0xE0,0xF9,0xF8,0x12,0xAA,0x55,
+ 0xEF,0x25,0x2B,0xF5,0x2B,0xEE,0x35,0x2A,
+ 0xF5,0x2A,0x22,0x90,0x42,0x58,0xE0,0x60,
+ 0x40,0x90,0x44,0xA1,0xE0,0xFF,0xD3,0x94,
+ 0x01,0x50,0x07,0xEF,0x60,0x33,0x74,0x02,
+ 0xF0,0x22,0x85,0x2A,0x1F,0x85,0x2B,0x20,
+ 0xD3,0xE5,0x2B,0x94,0x50,0xE5,0x2A,0x94,
+ 0x07,0x40,0x08,0x90,0x41,0xD9,0x74,0x01,
+ 0xF0,0x80,0x10,0xC3,0xE5,0x2B,0x94,0x50,
+ 0xE5,0x2A,0x94,0x05,0x50,0x05,0xE4,0x90,
+ 0x41,0xD9,0xF0,0x90,0x44,0xA1,0x74,0x03,
+ 0xF0,0x22,0x90,0x41,0xE2,0x74,0x01,0xF0,
+ 0x22,0x7B,0x01,0x7A,0x43,0x79,0x49,0x7D,
+ 0x01,0x7C,0x00,0x12,0xAD,0x13,0x22,0xC2,
+ 0xAF,0x12,0x90,0x3D,0xD2,0xAF,0x22,0x90,
+ 0x41,0xE3,0xE0,0x60,0x0C,0x90,0x44,0xB1,
+ 0xE0,0x60,0x06,0x7F,0x1A,0x12,0x89,0x23,
+ 0x22,0xE4,0xFD,0xFF,0x12,0x49,0x27,0x90,
+ 0xFE,0x01,0xE0,0xFE,0xA3,0xE0,0xF4,0xFF,
+ 0xEE,0xF4,0xA3,0xF0,0xA3,0xEF,0xF0,0x22,
+ 0x90,0x44,0x46,0xE0,0x75,0xF0,0x05,0xA4,
+ 0xFF,0xAE,0xF0,0x90,0x44,0x45,0xE0,0x2F,
+ 0xF0,0x90,0x44,0x44,0xE0,0x3E,0xF0,0xE0,
+ 0xFE,0xA3,0xE0,0xFF,0x90,0x44,0x6C,0xE0,
+ 0xFC,0xA3,0xE0,0xFD,0x12,0xA9,0x46,0x90,
+ 0x44,0x44,0xEC,0xF0,0xA3,0xED,0xF0,0x90,
+ 0x44,0x44,0xE0,0xFE,0xA3,0xE0,0x78,0x05,
+ 0xCE,0xC3,0x13,0xCE,0x13,0xD8,0xF9,0xFF,
+ 0x90,0xF9,0x00,0xE0,0x70,0x08,0xEF,0x25,
+ 0xE0,0x25,0xE0,0xFF,0x80,0x0B,0x90,0xF9,
+ 0x00,0xE0,0xB4,0x02,0x04,0xEF,0x25,0xE0,
+ 0xFF,0x90,0x41,0xD9,0xE0,0x60,0x27,0xEF,
+ 0xC3,0x94,0x16,0x40,0x16,0xEF,0xD3,0x94,
+ 0x57,0x40,0x05,0xEF,0x94,0x6D,0x40,0x0B,
+ 0xEF,0xD3,0x94,0x7D,0x40,0x10,0xEF,0x94,
+ 0x8F,0x50,0x0B,0x90,0x44,0xAE,0xE0,0x04,
+ 0xF0,0xA3,0x74,0x01,0xF0,0x22,0xE4,0x90,
+ 0x44,0xAF,0xF0,0x12,0x98,0xB8,0x22,0x90,
+ 0xFD,0x33,0xE4,0xF0,0x04,0xF0,0x90,0xFD,
+ 0x36,0xE0,0xB4,0x01,0xF9,0x12,0x96,0xBB,
+ 0x22,0x7D,0xFE,0x7C,0x27,0xE4,0xFF,0x12,
+ 0x47,0xAD,0x90,0xF1,0x1A,0xE0,0x70,0xFA,
+ 0x22,0x90,0x44,0x97,0xE0,0x70,0x17,0x90,
+ 0xF9,0x99,0xE0,0x70,0x11,0x90,0xF9,0x00,
+ 0xE0,0x70,0x04,0x7F,0x01,0x80,0x02,0x7F,
+ 0x00,0x90,0xF9,0x00,0xEF,0xF0,0x90,0x44,
+ 0xAA,0xE0,0x04,0xF0,0xE4,0xF5,0x2D,0x90,
+ 0x43,0xFC,0xF0,0xF5,0x2E,0x90,0x42,0x37,
+ 0xF0,0x90,0xF7,0x0B,0x74,0x2F,0xF0,0x90,
+ 0x44,0xB3,0x74,0x01,0xF0,0xE4,0xA3,0xF0,
+ 0x90,0x42,0x38,0xE0,0x90,0x44,0xB2,0xF0,
+ 0xE4,0x90,0x41,0xD9,0xF0,0x90,0x41,0xDB,
+ 0xE0,0xB4,0x32,0x0C,0x90,0x44,0xA9,0xE0,
+ 0xB4,0x01,0x05,0x7F,0x87,0x12,0x89,0x23,
+ 0xE4,0x90,0x44,0xA9,0xF0,0x90,0x44,0xB5,
+ 0xF0,0x22,0xE4,0x90,0x44,0xAA,0xF0,0x90,
+ 0x41,0xDC,0xF0,0x90,0x44,0x9C,0xF0,0x22,
+ 0x90,0xF7,0x81,0x74,0x40,0xF0,0x90,0xFD,
+ 0xA4,0x74,0x0A,0xF0,0x22,0x90,0xF5,0xB0,
+ 0xE4,0xF0,0xE5,0x0F,0xB4,0x09,0x02,0x05,
+ 0x2D,0x90,0x41,0xE6,0xE0,0xFF,0xE5,0x2D,
+ 0x8F,0xF0,0x84,0x85,0xF0,0x2D,0x75,0x0F,
+ 0x08,0xE5,0x2D,0x60,0x0A,0x90,0xF5,0x4E,
+ 0xE0,0x60,0x04,0xA3,0xE0,0x70,0x06,0x75,
+ 0x0F,0x01,0x12,0x68,0xE0,0x90,0xF2,0x17,
+ 0x74,0xFE,0xF0,0x90,0x44,0xB3,0x74,0x01,
+ 0xF0,0xE4,0xA3,0xF0,0x22,0xE5,0x2D,0x70,
+ 0x06,0x12,0x6A,0xF0,0x12,0x6B,0x53,0x22,
+ 0x90,0x43,0xD5,0xE0,0xB4,0x01,0x0A,0x90,
+ 0x43,0xD8,0xE0,0x70,0x04,0x90,0x43,0x42,
+ 0xF0,0x90,0x44,0xB4,0xE0,0xFF,0x60,0x0F,
+ 0x90,0x41,0xF3,0xE0,0xFE,0xEF,0x6E,0x60,
+ 0x06,0x90,0x44,0xB3,0xE0,0xE4,0xF0,0x90,
+ 0x43,0xDA,0xE0,0x90,0x44,0xB4,0xF0,0x22,
+ 0x90,0x43,0x42,0x74,0x01,0xF0,0x22,0x90,
+ 0xF9,0x0B,0xE4,0xF0,0x90,0xF5,0xD7,0x04,
+ 0xF0,0x90,0xF5,0xD7,0xE0,0x70,0xFA,0x22,
+ 0x90,0x41,0xBD,0xE0,0x90,0xF1,0xE0,0xF0,
+ 0x90,0x41,0xBC,0xE0,0x90,0xF1,0xDF,0xF0,
+ 0x90,0x41,0xBB,0xE0,0x90,0xF1,0xDE,0xF0,
+ 0x90,0x41,0xBA,0xE0,0x90,0xF1,0xDD,0xF0,
+ 0x90,0xF1,0xDB,0x74,0x01,0xF0,0x90,0xF1,
+ 0xDC,0xE0,0x60,0xFA,0x90,0xF1,0xE4,0xE0,
+ 0x90,0xF9,0x13,0xF0,0x90,0xF1,0xE3,0xE0,
+ 0x90,0xF9,0x12,0xF0,0x90,0xF1,0xE2,0xE0,
+ 0x90,0xF9,0x11,0xF0,0x90,0xF1,0xE1,0xE0,
+ 0x90,0xF9,0x10,0xF0,0x90,0xF1,0xDB,0xE4,
+ 0xF0,0x22,0x90,0xF5,0xBB,0xE4,0xF0,0x90,
+ 0xF5,0xB1,0xF0,0x90,0xF5,0xC8,0xF0,0xE5,
+ 0x2D,0x60,0x36,0x12,0xA6,0x21,0x90,0xF9,
+ 0x0B,0x74,0x01,0xF0,0x90,0xF5,0xBB,0xE4,
+ 0xF0,0x90,0xF5,0xB1,0xF0,0x90,0xF5,0xC8,
+ 0xF0,0x90,0xF5,0x1D,0xE0,0x60,0xFA,0x7F,
+ 0x01,0x12,0x5C,0x30,0x90,0xF5,0xC2,0x74,
+ 0x01,0xF0,0xE4,0xF0,0x7F,0x02,0x12,0x6D,
+ 0xE8,0x12,0xA6,0x10,0x7F,0x02,0x12,0x6D,
+ 0xE8,0x22,0x12,0x95,0x1B,0x90,0xF5,0x4E,
+ 0xE0,0x70,0x04,0xA3,0xE0,0x60,0x0F,0x90,
+ 0xF5,0xBB,0xE0,0x70,0x09,0x12,0x6A,0xF0,
+ 0x90,0xF5,0xC8,0x74,0x01,0xF0,0xE5,0x2E,
+ 0xD3,0x94,0x01,0x40,0x13,0x90,0xF7,0x31,
+ 0xE0,0x60,0x05,0x7F,0x01,0x12,0x9C,0x29,
+ 0x90,0x42,0x38,0xE0,0x90,0x44,0xB2,0xF0,
+ 0x75,0x2E,0x01,0x90,0xF7,0x31,0xE0,0x60,
+ 0x28,0x90,0xF7,0x3B,0xE0,0x64,0x02,0x60,
+ 0x20,0xE0,0x64,0x03,0x60,0x1B,0xE0,0x64,
+ 0x04,0x60,0x16,0xC2,0xAF,0x90,0xF7,0x34,
+ 0x74,0x01,0xF0,0x7F,0x00,0x7E,0x28,0x12,
+ 0x47,0x76,0x90,0xF7,0x34,0xE4,0xF0,0xD2,
+ 0xAF,0x12,0x88,0x8B,0x22,0x12,0x86,0x81,
+ 0x05,0x2E,0x22,0xE4,0xF5,0x2E,0x90,0x44,
+ 0x9C,0xF0,0x22,0xC2,0xAF,0x90,0xF7,0x3D,
+ 0x74,0x01,0xF0,0x7F,0x00,0x7E,0x28,0x12,
+ 0x47,0x76,0xD2,0xAF,0x22,0x90,0x41,0xDA,
+ 0xE0,0xB4,0x01,0x1E,0x90,0xFB,0x28,0x74,
+ 0x42,0xF0,0x90,0xF0,0x80,0x74,0x01,0xF0,
+ 0x90,0x41,0xC0,0xE0,0xFF,0x25,0xE0,0x90,
+ 0xF1,0xA5,0xF0,0x90,0xF1,0xEA,0xE4,0xF0,
+ 0x04,0xF0,0x12,0x57,0xC2,0x90,0x41,0xDA,
+ 0xE0,0xB4,0x01,0x1A,0x90,0x41,0xC0,0xE0,
+ 0x90,0xF1,0xA5,0xF0,0x90,0xF1,0xEA,0xE4,
+ 0xF0,0x04,0xF0,0x90,0xFB,0x28,0x74,0x82,
+ 0xF0,0x90,0xF0,0x80,0xE4,0xF0,0x22,0x90,
+ 0xF6,0x2F,0x74,0x01,0xF0,0x75,0xF0,0x02,
+ 0xE5,0x0F,0xA4,0x24,0x79,0xF5,0x82,0xE5,
+ 0xF0,0x34,0xAD,0xF5,0x83,0xE4,0x93,0xFC,
+ 0x74,0x01,0x93,0xFD,0xE4,0xFF,0x12,0x47,
+ 0xAD,0x90,0xF6,0x2F,0xE0,0x64,0x01,0x60,
+ 0x04,0x7F,0x01,0x80,0x02,0x7F,0x00,0x90,
+ 0xF1,0x1A,0xE0,0x5F,0x70,0xEB,0x90,0xF6,
+ 0x2F,0xE0,0xB4,0x01,0x04,0x7F,0x01,0x80,
+ 0x02,0x7F,0x00,0x90,0x43,0x3D,0xEF,0xF0,
+ 0xE0,0x70,0x0A,0x90,0x42,0x40,0x04,0xF0,
+ 0x90,0xF6,0x25,0xE4,0xF0,0xD2,0xAF,0x22,
+ 0x90,0xF5,0x41,0xE4,0xF0,0x90,0xF6,0x5D,
+ 0xF0,0x90,0xF6,0x5C,0xF0,0x7F,0x55,0x7E,
+ 0x0D,0x12,0x47,0x76,0x90,0xF5,0x41,0x74,
+ 0x01,0xF0,0x22,0x90,0x43,0xAE,0xE0,0xFE,
+ 0xA3,0xE0,0xFF,0x90,0x44,0xB6,0xEE,0xF0,
+ 0xA3,0xEF,0xF0,0x90,0x43,0xAA,0xE0,0xFC,
+ 0xA3,0xE0,0xFD,0xA3,0xE0,0xFA,0xA3,0xE0,
+ 0xC3,0x9D,0xFD,0xEA,0x9C,0xA3,0xF0,0xA3,
+ 0xED,0xF0,0x90,0x43,0xAE,0xE0,0xFC,0xA3,
+ 0xE0,0xB5,0x07,0x0A,0xEC,0xB5,0x06,0x06,
+ 0x90,0x44,0xB5,0xE0,0x04,0xF0,0x90,0x43,
+ 0xB1,0xE0,0x60,0x04,0xA3,0xE0,0x70,0x09,
+ 0x90,0x44,0xB5,0xE0,0xC3,0x94,0x02,0x40,
+ 0x04,0x7F,0x01,0x80,0x02,0x7F,0x00,0x90,
+ 0x43,0xB0,0xEF,0xF0,0x22,
+
+ 0x02,0xA9,0x1B,0x04,0x7C,0x66,0x52,0xBB,
+ 0x01,0x06,0x89,0x82,0x8A,0x83,0xE0,0x22,
+ 0x50,0x02,0xE7,0x22,0xBB,0xFE,0x02,0xE3,
+ 0x22,0x89,0x82,0x8A,0x83,0xE4,0x93,0x22,
+ 0xEF,0x8D,0xF0,0xA4,0xA8,0xF0,0xCF,0x8C,
+ 0xF0,0xA4,0x28,0xCE,0x8D,0xF0,0xA4,0x2E,
+ 0xFE,0x22,0xBC,0x00,0x0B,0xBE,0x00,0x29,
+ 0xEF,0x8D,0xF0,0x84,0xFF,0xAD,0xF0,0x22,
+ 0xE4,0xCC,0xF8,0x75,0xF0,0x08,0xEF,0x2F,
+ 0xFF,0xEE,0x33,0xFE,0xEC,0x33,0xFC,0xEE,
+ 0x9D,0xEC,0x98,0x40,0x05,0xFC,0xEE,0x9D,
+ 0xFE,0x0F,0xD5,0xF0,0xE9,0xE4,0xCE,0xFD,
+ 0x22,0xED,0xF8,0xF5,0xF0,0xEE,0x84,0x20,
+ 0xD2,0x1C,0xFE,0xAD,0xF0,0x75,0xF0,0x08,
+ 0xEF,0x2F,0xFF,0xED,0x33,0xFD,0x40,0x07,
+ 0x98,0x50,0x06,0xD5,0xF0,0xF2,0x22,0xC3,
+ 0x98,0xFD,0x0F,0xD5,0xF0,0xEA,0x22,0xC2,
+ 0xD5,0xEC,0x30,0xE7,0x09,0xB2,0xD5,0xE4,
+ 0xC3,0x9D,0xFD,0xE4,0x9C,0xFC,0xEE,0x30,
+ 0xE7,0x15,0xB2,0xD5,0xE4,0xC3,0x9F,0xFF,
+ 0xE4,0x9E,0xFE,0x12,0xA9,0x46,0xC3,0xE4,
+ 0x9D,0xFD,0xE4,0x9C,0xFC,0x80,0x03,0x12,
+ 0xA9,0x46,0x30,0xD5,0x07,0xC3,0xE4,0x9F,
+ 0xFF,0xE4,0x9E,0xFE,0x22,0xE8,0x8F,0xF0,
+ 0xA4,0xCC,0x8B,0xF0,0xA4,0x2C,0xFC,0xE9,
+ 0x8E,0xF0,0xA4,0x2C,0xFC,0x8A,0xF0,0xED,
+ 0xA4,0x2C,0xFC,0xEA,0x8E,0xF0,0xA4,0xCD,
+ 0xA8,0xF0,0x8B,0xF0,0xA4,0x2D,0xCC,0x38,
+ 0x25,0xF0,0xFD,0xE9,0x8F,0xF0,0xA4,0x2C,
+ 0xCD,0x35,0xF0,0xFC,0xEB,0x8E,0xF0,0xA4,
+ 0xFE,0xA9,0xF0,0xEB,0x8F,0xF0,0xA4,0xCF,
+ 0xC5,0xF0,0x2E,0xCD,0x39,0xFE,0xE4,0x3C,
+ 0xFC,0xEA,0xA4,0x2D,0xCE,0x35,0xF0,0xFD,
+ 0xE4,0x3C,0xFC,0x22,0xC3,0xE4,0x9F,0xFF,
+ 0xE4,0x9E,0xFE,0xE4,0x9D,0xFD,0xE4,0x9C,
+ 0xFC,0x22,0xEB,0x9F,0xF5,0xF0,0xEA,0x9E,
+ 0x42,0xF0,0xE9,0x9D,0x42,0xF0,0xEC,0x64,
+ 0x80,0xC8,0x64,0x80,0x98,0x45,0xF0,0x22,
+ 0xEB,0x9F,0xF5,0xF0,0xEA,0x9E,0x42,0xF0,
+ 0xE9,0x9D,0x42,0xF0,0xE8,0x9C,0x45,0xF0,
+ 0x22,0xE8,0x60,0x0F,0xEC,0xC3,0x13,0xFC,
+ 0xED,0x13,0xFD,0xEE,0x13,0xFE,0xEF,0x13,
+ 0xFF,0xD8,0xF1,0x22,0xE8,0x60,0x10,0xEC,
+ 0xA2,0xE7,0x13,0xFC,0xED,0x13,0xFD,0xEE,
+ 0x13,0xFE,0xEF,0x13,0xFF,0xD8,0xF0,0x22,
+ 0xE8,0x60,0x0F,0xEF,0xC3,0x33,0xFF,0xEE,
+ 0x33,0xFE,0xED,0x33,0xFD,0xEC,0x33,0xFC,
+ 0xD8,0xF1,0x22,0xEC,0xF0,0xA3,0xED,0xF0,
+ 0xA3,0xEE,0xF0,0xA3,0xEF,0xF0,0x22,0xA8,
+ 0x82,0x85,0x83,0xF0,0xD0,0x83,0xD0,0x82,
+ 0x12,0xAA,0xB2,0x12,0xAA,0xB2,0x12,0xAA,
+ 0xB2,0x12,0xAA,0xB2,0xE4,0x73,0xE4,0x93,
+ 0xA3,0xC5,0x83,0xC5,0xF0,0xC5,0x83,0xC8,
+ 0xC5,0x82,0xC8,0xF0,0xA3,0xC5,0x83,0xC5,
+ 0xF0,0xC5,0x83,0xC8,0xC5,0x82,0xC8,0x22,
+ 0x8A,0x83,0x89,0x82,0xE4,0x73,0xBB,0x01,
+ 0x0C,0xE5,0x82,0x29,0xF5,0x82,0xE5,0x83,
+ 0x3A,0xF5,0x83,0xE0,0x22,0x50,0x06,0xE9,
+ 0x25,0x82,0xF8,0xE6,0x22,0xBB,0xFE,0x06,
+ 0xE9,0x25,0x82,0xF8,0xE2,0x22,0xE5,0x82,
+ 0x29,0xF5,0x82,0xE5,0x83,0x3A,0xF5,0x83,
+ 0xE4,0x93,0x22,0xF8,0xBB,0x01,0x0D,0xE5,
+ 0x82,0x29,0xF5,0x82,0xE5,0x83,0x3A,0xF5,
+ 0x83,0xE8,0xF0,0x22,0x50,0x06,0xE9,0x25,
+ 0x82,0xC8,0xF6,0x22,0xBB,0xFE,0x05,0xE9,
+ 0x25,0x82,0xC8,0xF2,0x22,0xBB,0x01,0x0A,
+ 0x89,0x82,0x8A,0x83,0xE0,0xF5,0xF0,0xA3,
+ 0xE0,0x22,0x50,0x06,0x87,0xF0,0x09,0xE7,
+ 0x19,0x22,0xBB,0xFE,0x07,0xE3,0xF5,0xF0,
+ 0x09,0xE3,0x19,0x22,0x89,0x82,0x8A,0x83,
+ 0xE4,0x93,0xF5,0xF0,0x74,0x01,0x93,0x22,
+ 0xBB,0x01,0x10,0xE5,0x82,0x29,0xF5,0x82,
+ 0xE5,0x83,0x3A,0xF5,0x83,0xE0,0xF5,0xF0,
+ 0xA3,0xE0,0x22,0x50,0x09,0xE9,0x25,0x82,
+ 0xF8,0x86,0xF0,0x08,0xE6,0x22,0xBB,0xFE,
+ 0x0A,0xE9,0x25,0x82,0xF8,0xE2,0xF5,0xF0,
+ 0x08,0xE2,0x22,0xE5,0x83,0x2A,0xF5,0x83,
+ 0xE9,0x93,0xF5,0xF0,0xA3,0xE9,0x93,0x22,
+ 0xBB,0x01,0x0A,0x89,0x82,0x8A,0x83,0xF0,
+ 0xE5,0xF0,0xA3,0xF0,0x22,0x50,0x06,0xF7,
+ 0x09,0xA7,0xF0,0x19,0x22,0xBB,0xFE,0x06,
+ 0xF3,0xE5,0xF0,0x09,0xF3,0x19,0x22,0xF8,
+ 0xBB,0x01,0x11,0xE5,0x82,0x29,0xF5,0x82,
+ 0xE5,0x83,0x3A,0xF5,0x83,0xE8,0xF0,0xE5,
+ 0xF0,0xA3,0xF0,0x22,0x50,0x09,0xE9,0x25,
+ 0x82,0xC8,0xF6,0x08,0xA6,0xF0,0x22,0xBB,
+ 0xFE,0x09,0xE9,0x25,0x82,0xC8,0xF2,0xE5,
+ 0xF0,0x08,0xF2,0x22,0x75,0xF0,0x08,0x75,
+ 0x82,0x00,0xEF,0x2F,0xFF,0xEE,0x33,0xFE,
+ 0xCD,0x33,0xCD,0xCC,0x33,0xCC,0xC5,0x82,
+ 0x33,0xC5,0x82,0x9B,0xED,0x9A,0xEC,0x99,
+ 0xE5,0x82,0x98,0x40,0x0C,0xF5,0x82,0xEE,
+ 0x9B,0xFE,0xED,0x9A,0xFD,0xEC,0x99,0xFC,
+ 0x0F,0xD5,0xF0,0xD6,0xE4,0xCE,0xFB,0xE4,
+ 0xCD,0xFA,0xE4,0xCC,0xF9,0xA8,0x82,0x22,
+ 0xB8,0x00,0xC1,0xB9,0x00,0x59,0xBA,0x00,
+ 0x2D,0xEC,0x8B,0xF0,0x84,0xCF,0xCE,0xCD,
+ 0xFC,0xE5,0xF0,0xCB,0xF9,0x78,0x18,0xEF,
+ 0x2F,0xFF,0xEE,0x33,0xFE,0xED,0x33,0xFD,
+ 0xEC,0x33,0xFC,0xEB,0x33,0xFB,0x10,0xD7,
+ 0x03,0x99,0x40,0x04,0xEB,0x99,0xFB,0x0F,
+ 0xD8,0xE5,0xE4,0xF9,0xFA,0x22,0x78,0x18,
+ 0xEF,0x2F,0xFF,0xEE,0x33,0xFE,0xED,0x33,
+ 0xFD,0xEC,0x33,0xFC,0xC9,0x33,0xC9,0x10,
+ 0xD7,0x05,0x9B,0xE9,0x9A,0x40,0x07,0xEC,
+ 0x9B,0xFC,0xE9,0x9A,0xF9,0x0F,0xD8,0xE0,
+ 0xE4,0xC9,0xFA,0xE4,0xCC,0xFB,0x22,0x75,
+ 0xF0,0x10,0xEF,0x2F,0xFF,0xEE,0x33,0xFE,
+ 0xED,0x33,0xFD,0xCC,0x33,0xCC,0xC8,0x33,
+ 0xC8,0x10,0xD7,0x07,0x9B,0xEC,0x9A,0xE8,
+ 0x99,0x40,0x0A,0xED,0x9B,0xFD,0xEC,0x9A,
+ 0xFC,0xE8,0x99,0xF8,0x0F,0xD5,0xF0,0xDA,
+ 0xE4,0xCD,0xFB,0xE4,0xCC,0xFA,0xE4,0xC8,
+ 0xF9,0x22,0xC2,0xD5,0xE8,0x30,0xE7,0x0F,
+ 0xB2,0xD5,0xE4,0xC3,0x9B,0xFB,0xE4,0x9A,
+ 0xFA,0xE4,0x99,0xF9,0xE4,0x98,0xF8,0xEC,
+ 0x30,0xE7,0x17,0xB2,0xD5,0x12,0xAC,0xD4,
+ 0x12,0xAC,0x0C,0xE4,0xC3,0x9B,0xFB,0xE4,
+ 0x9A,0xFA,0xE4,0x99,0xF9,0xE4,0x98,0xF8,
+ 0x80,0x03,0x12,0xAC,0x0C,0x30,0xD5,0x0D,
+ 0xE4,0xC3,0x9F,0xFF,0xE4,0x9E,0xFE,0xE4,
+ 0x9D,0xFD,0xE4,0x9C,0xFC,0x22,0xD0,0xE0,
+ 0xF5,0xF0,0xFC,0xD0,0xE0,0xFD,0x12,0xAB,
+ 0x84,0x85,0x2F,0xF0,0xE5,0x81,0x90,0x00,
+ 0x02,0x12,0xAB,0xA3,0x85,0x32,0xF0,0xE5,
+ 0x31,0x90,0x00,0x04,0x12,0xAB,0xA3,0xE5,
+ 0x30,0x90,0x00,0x06,0x12,0xAA,0xFF,0x8D,
+ 0x82,0x8C,0x83,0xE4,0xFE,0xFF,0x73,0xED,
+ 0xFF,0xEC,0xFE,0x12,0xAB,0x21,0xFC,0xAD,
+ 0xF0,0x90,0x00,0x02,0x12,0xAB,0x4C,0x85,
+ 0xF0,0x81,0xF5,0x2F,0x90,0x00,0x04,0x12,
+ 0xAB,0x4C,0xF5,0x32,0x85,0xF0,0x31,0x90,
+ 0x00,0x06,0x12,0xAA,0xD2,0xF5,0x30,0x8D,
+ 0x82,0x8C,0x83,0xE4,0x73,0x4C,0x81,0x4C,
+ 0xBA,0x4C,0xBD,0x4C,0xBE,0x4C,0xBF,0x88,
+ 0x8F,0x4C,0xC0,0x4C,0xC1,0x4C,0xC2,0x4C,
+ 0xC3,0x4D,0x48,0x89,0x41,0x4E,0x73,0x01,
+ 0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
+ 0x09,0x00,0x01,0x02,0x03,0x04,0x05,0x05,
+ 0x03,0x08,0x01,0x00,0x01,0x01,0x02,0x03,
+ 0x03,0x01,0x01,0x01,0x01,0x3E,0x80,0x06,
+ 0x40,0x7D,0x00,0x12,0xC0,0x12,0xC0,0xFA,
+ 0x00,0x12,0xC0,0xBB,0x80,0x9C,0x40,0x00,
+ 0xA0,0x00,0x00,0x01,0x02,0x02,0x02,0x02,
+ 0x02,0x01,0x01
+};
+
+static Segment Firmware_segments[] = {
+ { 0x00, 0x0000000A },
+ { 0x00, 0x00003B24 },
+ { 0x00, 0x0000000B },
+ { 0x00, 0x0000000A },
+ { 0x00, 0x000063CE },
+ { 0x00, 0x000006E5 },
+ { 0x00, 0x0000000A },
+ { 0x00, 0x00003B24 },
+ { 0x00, 0x0000000B },
+ { 0x00, 0x0000000A },
+ { 0x00, 0x00006315 },
+ { 0x00, 0x00000483 }
+};
+
+static Byte Firmware_new_partitions[] = {
+ 0x06,
+ 0x06
+};
+
+
+#define Firmware_SCRIPTSETLENGTH 0x00000001
+
+
+static Word Firmware_scriptSets[] = {
+ 0x6C
+};
+
+
+static ValueSet Firmware_scripts[] = {
+ {0x0051, 0x01},
+ {0x0070, 0x0A},
+ {0x007E, 0x04},
+ {0x0081, 0x0A},
+ {0x008A, 0x01},
+ {0x008E, 0x01},
+ {0x0092, 0x06},
+ {0x0099, 0x01},
+ {0x009F, 0xE1},
+ {0x00A0, 0xCF},
+ {0x00A3, 0x01},
+ {0x00A5, 0x01},
+ {0x00A6, 0x01},
+ {0x00A9, 0x00},
+ {0x00AA, 0x01},
+ {0x00B0, 0x01},
+ {0x00C2, 0x05},
+ {0x00C6, 0x19},
+ {0xF000, 0x0F},
+ {0xF016, 0x10},
+ {0xF017, 0x04},
+ {0xF018, 0x05},
+ {0xF019, 0x04},
+ {0xF01A, 0x05},
+ {0xF021, 0x03},
+ {0xF022, 0x0A},
+ {0xF023, 0x0A},
+ {0xF02B, 0x00},
+ {0xF02C, 0x01},
+ {0xF064, 0x03},
+ {0xF065, 0xF9},
+ {0xF066, 0x03},
+ {0xF067, 0x01},
+ {0xF06F, 0xE0},
+ {0xF070, 0x03},
+ {0xF072, 0x0F},
+ {0xF073, 0x03},
+ {0xF078, 0x00},
+ {0xF087, 0x00},
+ {0xF09B, 0x3F},
+ {0xF09C, 0x00},
+ {0xF09D, 0x20},
+ {0xF09E, 0x00},
+ {0xF09F, 0x0C},
+ {0xF0A0, 0x00},
+ {0xF130, 0x04},
+ {0xF132, 0x04},
+ {0xF144, 0x1A},
+ {0xF146, 0x00},
+ {0xF14A, 0x01},
+ {0xF14C, 0x00},
+ {0xF14D, 0x00},
+ {0xF14F, 0x04},
+ {0xF158, 0x7F},
+ {0xF15A, 0x00},
+ {0xF15B, 0x08},
+ {0xF15D, 0x03},
+ {0xF15E, 0x05},
+ {0xF163, 0x05},
+ {0xF166, 0x01},
+ {0xF167, 0x40},
+ {0xF168, 0x0F},
+ {0xF17A, 0x00},
+ {0xF17B, 0x00},
+ {0xF183, 0x01},
+ {0xF19D, 0x40},
+ {0xF1BC, 0x36},
+ {0xF1BD, 0x00},
+ {0xF1CB, 0xA0},
+ {0xF1CC, 0x01},
+ {0xF204, 0x10},
+ {0xF214, 0x00},
+ {0xF40E, 0x0A},
+ {0xF40F, 0x40},
+ {0xF410, 0x08},
+ {0xF55F, 0x0A},
+ {0xF561, 0x15},
+ {0xF562, 0x20},
+ {0xF5DF, 0xFB},
+ {0xF5E0, 0x00},
+ {0xF5E3, 0x09},
+ {0xF5E4, 0x01},
+ {0xF5E5, 0x01},
+ {0xF5F8, 0x01},
+ {0xF5FD, 0x01},
+ {0xF600, 0x05},
+ {0xF601, 0x08},
+ {0xF602, 0x0B},
+ {0xF603, 0x0E},
+ {0xF604, 0x11},
+ {0xF605, 0x14},
+ {0xF606, 0x17},
+ {0xF607, 0x1F},
+ {0xF60E, 0x00},
+ {0xF60F, 0x04},
+ {0xF610, 0x32},
+ {0xF611, 0x10},
+ {0xF707, 0xFC},
+ {0xF708, 0x00},
+ {0xF709, 0x37},
+ {0xF70A, 0x00},
+ {0xF78B, 0x01},
+ {0xF80F, 0x40},
+ {0xF810, 0x54},
+ {0xF811, 0x5A},
+ {0xF905, 0x01},
+ {0xFB06, 0x03},
+ {0xFD8B, 0x00}
+};
+
+
+// Merged Firmware: LL_regular_OFDM_non_mt2266 + LL_regular_OFDM_mt2266
+#endif
diff --git a/api/i2c_driver.c b/api/i2c_driver.c
new file mode 100644
index 0000000..5c5460d
--- /dev/null
+++ b/api/i2c_driver.c
@@ -0,0 +1,65 @@
+//---------------------------------------------------------------------------
+#include "xc4000_control.h"
+#include "i2c_driver.h"
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "register.h"
+#include "standard.h"
+//---------------------------------------------------------------------------
+Demodulator* XC4000Handle = NULL;
+Byte XC4000Chip = 0;
+
+/* *************************************************************** */
+/* *************************************************************** */
+/* */
+/* FOLLOWING FUNCTIONS TO BE IMPLEMENTED BY CUSTOMER */
+/* */
+/* *************************************************************** */
+/* *************************************************************** */
+
+// user must replace the following routines with their own i2c driver
+// return XC_RESULT_SUCCESS if i2c data is send correctly,
+// return XC_RESULT_I2C_WRITE_FAILURE when error occur.
+int xc_send_i2c_data(unsigned char *bytes_to_send, int nb_bytes_to_send)
+{
+ Dword error = Error_NO_ERROR;
+
+ error = Standard_writeTunerRegisters (XC4000Handle, XC4000Chip, 0x0000, nb_bytes_to_send, bytes_to_send);
+ return (error);
+}
+
+int xc_read_i2c_data(unsigned char *bytes_received, int nb_bytes_to_receive)
+{
+ Dword error = Error_NO_ERROR;
+
+ error = Standard_readTunerRegisters (XC4000Handle, XC4000Chip, 0x0000, nb_bytes_to_receive, bytes_received);
+ return (error);
+}
+
+int xc_reset()
+{
+ Dword error = Error_NO_ERROR;
+
+ error = Standard_writeRegisterBits (XC4000Handle, XC4000Chip, Processor_LINK, p_reg_top_gpiot2_o, reg_top_gpiot2_o_pos, reg_top_gpiot2_o_len, 0);
+ if (error) goto exit;
+
+ error = Standard_writeRegisterBits (XC4000Handle, XC4000Chip, Processor_LINK, p_reg_top_gpiot2_en, reg_top_gpiot2_en_pos, reg_top_gpiot2_en_len, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegisterBits (XC4000Handle, XC4000Chip, Processor_LINK, p_reg_top_gpiot2_on, reg_top_gpiot2_on_pos, reg_top_gpiot2_on_len, 1);
+ if (error) goto exit;
+
+ User_delay (XC4000Handle, 250);
+
+ error = Standard_writeRegisterBits (XC4000Handle, XC4000Chip, Processor_LINK, p_reg_top_gpiot2_o, reg_top_gpiot2_o_pos, reg_top_gpiot2_o_len, 1);
+ if (error) goto exit;
+
+exit:
+ return (error);
+}
+
+void xc_wait(int wait_ms)
+{
+ User_delay (XC4000Handle, (Dword)wait_ms);
+}
diff --git a/api/i2c_driver.h b/api/i2c_driver.h
new file mode 100644
index 0000000..7826dce
--- /dev/null
+++ b/api/i2c_driver.h
@@ -0,0 +1,21 @@
+//---------------------------------------------------------------------------
+
+#ifndef i2c_driverH
+#define i2c_driverH
+
+// Sends data bytes to xc4000 via I2C starting with
+// bytes_to_send[0] and ending with bytes_to_send[nb_bytes_to_send-1]
+int xc_send_i2c_data(unsigned char *bytes_to_send, int nb_bytes_to_send);
+
+// Reads data bytes from xc4000 via I2C starting with
+// bytes_received[0] and ending with bytes_received[nb_bytes_to_receive-1]
+int xc_read_i2c_data(unsigned char *bytes_received, int nb_bytes_to_receive);
+
+// Does hardware reset
+int xc_reset();
+
+// Waits for wait_ms milliseconds
+void xc_wait(int wait_ms);
+
+//---------------------------------------------------------------------------
+#endif
diff --git a/api/inttype.h b/api/inttype.h
new file mode 100644
index 0000000..8f7ed4b
--- /dev/null
+++ b/api/inttype.h
@@ -0,0 +1,40 @@
+#ifndef __INTTYPE_H__
+#define __INTTYPE_H__
+
+
+/**
+ * The type defination of SnrTable.
+ */
+typedef struct {
+ Dword errorCount;
+ Dword snr;
+ double errorRate;
+} SnrTable;
+
+
+/**
+ * The type defination of Statistic.
+ */
+typedef struct {
+ Word abortCount;
+ Dword postVitBitCount;
+ Dword postVitErrorCount;
+ /** float point */
+ Dword softBitCount;
+ Dword softErrorCount;
+ Dword preVitBitCount;
+ Dword preVitErrorCount;
+ double snr;
+} ChannelStatistic;
+
+
+/**
+ * The type defination of AgcVoltage.
+ */
+typedef struct {
+ double doSetVolt;
+ double doPuUpVolt;
+} AgcVoltage;
+
+
+#endif \ No newline at end of file
diff --git a/api/iocontrol.h b/api/iocontrol.h
new file mode 100644
index 0000000..9f09478
--- /dev/null
+++ b/api/iocontrol.h
@@ -0,0 +1,738 @@
+/**
+ *
+ * Copyright (c) 2006 Afa Corporation. All rights reserved.
+ *
+ * Module Name:
+ * iocontrol.h
+ *
+ * Abstract:
+ * The structure and IO code for IO control call.
+ *
+ */
+
+#ifndef __IOCONTROL_H__
+#define __IOCONTROL_H__
+
+#ifdef UNDER_CE
+#include <winioctl.h>
+#else
+#endif
+
+#include "type.h"
+
+#define MEDIA_DEVICE_AFADEMOD 0x00000AFA
+
+typedef struct {
+ Byte chipNumber;
+ Word sawBandwidth;
+ StreamType streamType;
+ Architecture architecture;
+ Dword error;
+ Byte reserved[16];
+} InitializeRequest, *PInitializeRequest;
+
+typedef struct {
+ Dword error;
+ Byte reserved[16];
+} FinalizeRequest, *PFinalizeRequest;
+
+typedef struct {
+ StreamType streamType;
+ Dword error;
+ Byte reserved[16];
+} SetStreamTypeRequest, *PSetStreamTypeRequest;
+
+typedef struct {
+ Architecture architecture;
+ Dword error;
+ Byte reserved[16];
+} SetArchitectureRequest, *PSetArchitectureRequest;
+
+typedef struct {
+ Byte chip;
+ ChannelModulation* channelModulation;
+ Dword error;
+ Byte reserved[16];
+} GetChannelModulationRequest, *PGetChannelModulationRequest;
+
+typedef struct {
+ Processor processor;
+ Dword* version;
+ Dword error;
+ Byte reserved[16];
+} GetFirmwareVersionRequest, *PGetFirmwareVersionRequest;
+
+typedef struct {
+ Byte chip;
+ Word bandwidth;
+ Dword frequency;
+ Dword error;
+ Byte reserved[16];
+} AcquireChannelRequest, *PAcquireChannelRequest;
+
+typedef struct {
+ Byte chip;
+ Bool* locked;
+ Dword error;
+ Byte reserved[16];
+} IsLockedRequest, *PIsLockedRequest;
+
+typedef struct {
+ Byte chip;
+ Pid pid;
+ Dword error;
+ Byte reserved[16];
+} AddPidRequest, *PAddPidRequest;
+
+typedef struct {
+ Byte chip;
+ Pid pid;
+ Dword error;
+ Byte reserved[16];
+} RemovePidRequest, *PRemovePidRequest;
+
+typedef struct {
+ Byte chip;
+ Dword error;
+ Byte reserved[16];
+} ResetPidRequest, *PResetPidRequest;
+
+typedef struct {
+ Byte chip;
+ Byte superFrameCount;
+ Word packetUnit;
+ Dword error;
+ Byte reserved[16];
+} SetStatisticRangeRequest, *PSetStatisticRangeRequest;
+
+typedef struct {
+ Byte chip;
+ Byte* superFrameCount;
+ Word* packetUnit;
+ Dword error;
+ Byte reserved[16];
+} GetStatisticRangeRequest, *PGetStatisticRangeRequest;
+
+typedef struct {
+ Byte chip;
+ ChannelStatistic* channelStatistic;
+ Dword error;
+ Byte reserved[16];
+} GetChannelStatisticRequest, *PGetChannelStatisticRequest;
+
+typedef struct {
+ Byte chip;
+ Statistic* statistic;
+ Dword error;
+ Byte reserved[16];
+} GetStatisticRequest, *PGetStatisticRequest;
+
+typedef struct {
+ Dword* bufferLength;
+ Byte* buffer;
+ Dword error;
+ Byte reserved[16];
+} GetDatagramRequest, *PGetDatagramRequest;
+
+typedef struct {
+ Byte chip;
+ Byte control;
+ Dword error;
+ Byte reserved[16];
+} ControlPidFilterRequest, *PControlPidFilterRequest;
+
+typedef struct {
+ Byte chip;
+ Byte control;
+ Dword error;
+ Byte reserved[16];
+} ControlPowerSavingRequest, *PControlPowerSavingRequest;
+
+typedef struct {
+ Byte DriverVerion[16]; /** XX.XX.XX.XX Ex., 1.2.3.4 */
+ Byte APIVerion[32]; /** XX.XX.XXXXXXXX.XX Ex., 1.2.3.4 */
+ Byte FWVerionLink[16]; /** XX.XX.XX.XX Ex., 1.2.3.4 */
+ Byte FWVerionOFDM[16]; /** XX.XX.XX.XX Ex., 1.2.3.4 */
+ Byte DateTime[24]; /** Ex.,"2004-12-20 18:30:00" or "DEC 20 2004 10:22:10" with compiler __DATE__ and __TIME__ definitions */
+ Byte Company[8]; /** Ex.,"Afatech" */
+ Byte SupportHWInfo[32]; /** Ex.,"Jupiter DVBT/DVBH" */
+ Dword error;
+ Byte reserved[128];
+} DemodDriverInfo, *PDemodDriverInfo;
+
+typedef struct {
+ Ensemble* ensemble;
+ Dword error;
+ Byte reserved[16];
+} AcquireEnsembleRequest, *PAcquireEnsembleRequest;
+
+typedef struct {
+ Byte* serviceLength;
+ Service* services;
+ Dword error;
+ Byte reserved[16];
+} AcquireServiceRequest, *PAcquireServiceRequest;
+
+typedef struct {
+ Service service;
+ Byte* componentLength;
+ Component* components;
+ Dword error;
+ Byte reserved[16];
+} AcquireComponentRequest, *PAcquireComponentRequest;
+
+typedef struct {
+ Component component;
+ Dword error;
+ Byte reserved[16];
+} AddComponentRequest, *PAddComponentRequest;
+
+typedef struct {
+ Component component;
+ Dword error;
+ Byte reserved[16];
+} RemoveComponentRequest, *PRemoveComponentRequest;
+
+typedef struct {
+ Byte figType;
+ Byte figExtension;
+ Dword error;
+ Byte reserved[16];
+} AddFigRequest, *PAddFigRequest;
+
+typedef struct {
+ Byte figType;
+ Byte figExtension;
+ Dword error;
+ Byte reserved[16];
+} RemoveFigRequest, *PRemoveFigRequest;
+
+
+/**
+ * Demodulator API commands
+ */
+
+/**
+ * First, download firmware from host to demodulator. Actually, firmware is
+ * put in firmware.h as a part of source code. Therefore, in order to
+ * update firmware the host have to re-compile the source code.
+ * Second, setting all parameters which will be need at the beginning.
+ * Paramters: None
+ */
+#define IOCTL_AFA_DEMOD_INITIALIZE \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x003, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Set the output stream type of chip. Because the device could output in
+ * many stream type, therefore host have to choose one type before receive
+ * data.
+ * Paramters: DemodStreamType struct
+ */
+#define IOCTL_AFA_DEMOD_SETSTREAMTYPE \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x004, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Set the output stream type of chip. Because the device could output in
+ * many stream type, therefore host have to choose one type before receive
+ * data.
+ * Paramters: DemodStreamType struct
+ */
+#define IOCTL_AFA_DEMOD_SETARCHITECTURE \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x006, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Set the output stream type of chip. Because the device could output in
+ * many stream type, therefore host have to choose one type before receive
+ * data.
+ * Paramters: DemodStreamType struct
+ */
+#define IOCTL_AFA_DEMOD_GETCHANNELMODULATION \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x008, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Set the output stream type of chip. Because the device could output in
+ * many stream type, therefore host have to choose one type before receive
+ * data.
+ * Paramters: DemodStreamType struct
+ */
+#define IOCTL_AFA_DEMOD_GETFIRMWAREVERSION \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x009, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Specify the bandwidth of channel and tune the channel to the specific
+ * frequency. Afterwards, host could use output parameter dvbH to determine
+ * if there is a DVB-H signal.
+ * In DVB-T mode, after calling this function output parameter dvbH should
+ * be False and host could use output parameter "locked" to indicate if the
+ * TS is correct.
+ * In DVB-H mode, after calling this function output parameter dvbH should
+ * be True and host could use Jupiter_acquirePlatorm to get platform.
+ * Paramters: DemodAcqCh struct
+ */
+#define IOCTL_AFA_DEMOD_ACQUIRECHANNEL \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x00A, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Get all the platforms found in current frequency.
+ * Paramters: DemodAcqPlatform struct
+ */
+#define IOCTL_AFA_DEMOD_ISLOCKED \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x00B, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Get all the platforms found in current frequency.
+ * Paramters: DemodAcqPlatform struct
+ */
+#define IOCTL_AFA_DEMOD_ACQUIREPLATFORM \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x00C, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Change the current platform as the specified platform. If the target
+ * platform is locate in different frequency, this function will tune to
+ * that frequency before setting platform.
+ * Paramters: DemodSetPlatform struct
+ */
+#define IOCTL_AFA_DEMOD_SETPLATFORM \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x00D, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Add IP to IP filter.
+ * Paramters: DemodIp struct
+ */
+#define IOCTL_AFA_DEMOD_ADDIP \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x00E, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Remove IP from IP filter.
+ * Paramters: DemodIp struct
+ */
+#define IOCTL_AFA_DEMOD_REMOVEIP \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x00F, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Add PID to PID filter.
+ * Paramters: DemodPid struct
+ */
+#define IOCTL_AFA_DEMOD_ADDPID \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x010, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Remove PID from PID filter.
+ * Paramters: DemodPid struct
+ */
+#define IOCTL_AFA_DEMOD_REMOVEPID \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x011, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Reset PID from PID filter.
+ * Paramters: ResetPidRequest struct
+ */
+#define IOCTL_AFA_DEMOD_RESETPID \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x012, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Get data of one single section
+ * Paramters: DemodGetStat struct
+ */
+#define IOCTL_AFA_DEMOD_GETSECTION \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x013, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Get the statistic values of demodulator, it includes Pre-Viterbi BER,
+ * Post-Viterbi BER, Abort Count, Signal Presented Flag, Signal Locked Flag,
+ * Signal Quality, Signal Strength, Delta-T for DVB-H time slicing.
+ * Paramters: DemodGetStat struct
+ */
+#define IOCTL_AFA_DEMOD_SETSTATISTICRANGE \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x014, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Get the statistic values of demodulator, it includes Pre-Viterbi BER,
+ * Post-Viterbi BER, Abort Count, Signal Presented Flag, Signal Locked Flag,
+ * Signal Quality, Signal Strength, Delta-T for DVB-H time slicing.
+ * Paramters: DemodGetStat struct
+ */
+#define IOCTL_AFA_DEMOD_GETSTATISTICRANGE \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x015, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Get the statistic values of demodulator, it includes Pre-Viterbi BER,
+ * Post-Viterbi BER, Abort Count, Signal Presented Flag, Signal Locked Flag,
+ * Signal Quality, Signal Strength, Delta-T for DVB-H time slicing.
+ * Paramters: DemodGetStat struct
+ */
+#define IOCTL_AFA_DEMOD_GETCHANNELSTATISTIC \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x016, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Get the statistic values of demodulator, it includes Pre-Viterbi BER,
+ * Post-Viterbi BER, Abort Count, Signal Presented Flag, Signal Locked Flag,
+ * Signal Quality, Signal Strength, Delta-T for DVB-H time slicing.
+ * Paramters: DemodGetStat struct
+ */
+#define IOCTL_AFA_DEMOD_GETSTATISTIC \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x017, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Get the statistic values of demodulator, it includes Pre-Viterbi BER,
+ * Post-Viterbi BER, Abort Count, Signal Presented Flag, Signal Locked Flag,
+ * Signal Quality, Signal Strength, Delta-T for DVB-H time slicing.
+ * Paramters: DemodGetStat struct
+ */
+#define IOCTL_AFA_DEMOD_GETINTERRUPTS \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x018, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Get the statistic values of demodulator, it includes Pre-Viterbi BER,
+ * Post-Viterbi BER, Abort Count, Signal Presented Flag, Signal Locked Flag,
+ * Signal Quality, Signal Strength, Delta-T for DVB-H time slicing.
+ * Paramters: DemodGetStat struct
+ */
+#define IOCTL_AFA_DEMOD_CLEARINTERRUPT \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x019, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Get the statistic values of demodulator, it includes Pre-Viterbi BER,
+ * Post-Viterbi BER, Abort Count, Signal Presented Flag, Signal Locked Flag,
+ * Signal Quality, Signal Strength, Delta-T for DVB-H time slicing.
+ * Paramters: DemodGetStat struct
+ */
+#define IOCTL_AFA_DEMOD_GETDATAGRAM \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x01A, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ *
+ * Paramters: DemodControl struct
+ */
+#define IOCTL_AFA_DEMOD_GETDELTAT \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x01B, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Enable PID filter.
+ * Paramters: EnablePidRequest struct
+ */
+#define IOCTL_AFA_DEMOD_CONTROLPIDFILTER \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x01C, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ *
+ * Paramters: DemodControl struct
+ */
+#define IOCTL_AFA_DEMOD_CONTROLTIMESLICING \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x01D, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ *
+ * Paramters: DemodControl struct
+ */
+#define IOCTL_AFA_DEMOD_CONTROLPOWERSAVING \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x01E, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Power off the demodulators.
+ * Paramters: None
+ */
+#define IOCTL_AFA_DEMOD_FINALIZE \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x01F, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Get driver information.
+ * Paramters: DemodDriverInfo struct
+ */
+#define IOCTL_AFA_DEMOD_GETDRIVERINFO \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x020, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Get ensemble.
+ * Paramters: DemodDriverInfo struct
+ */
+#define IOCTL_AFA_DEMOD_ACQUIREENSEMBLE \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x021, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Get service.
+ * Paramters: DemodDriverInfo struct
+ */
+#define IOCTL_AFA_DEMOD_ACQUIRESERVICE \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x022, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Get component.
+ * Paramters: DemodDriverInfo struct
+ */
+#define IOCTL_AFA_DEMOD_ACQUIRECOMPONENT \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x023, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Add component.
+ * Paramters: DemodDriverInfo struct
+ */
+#define IOCTL_AFA_DEMOD_ADDCOMPONENT \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x024, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Remove component.
+ * Paramters: DemodDriverInfo struct
+ */
+#define IOCTL_AFA_DEMOD_REMOVECOMPONENT \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x025, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Add FIG.
+ * Paramters: DemodDriverInfo struct
+ */
+#define IOCTL_AFA_DEMOD_ADDFIG \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x026, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Remove FIG.
+ * Paramters: DemodDriverInfo struct
+ */
+#define IOCTL_AFA_DEMOD_REMOVEFIG \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x027, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+
+/**
+ * Demodulator Misc API commands
+ */
+
+typedef struct {
+ Byte chip;
+ Processor processor;
+ Dword registerAddress;
+ Byte bufferLength;
+ Byte buffer[256];
+ Dword error;
+ Byte reserved[16];
+} WriteRegistersRequest, *PWriteRegistersRequest;
+
+typedef struct {
+ Byte chip;
+ Word registerAddress;
+ Byte bufferLength;
+ Byte buffer[256];
+ Dword error;
+ Byte reserved[16];
+} WriteTunerRegistersRequest, *PWriteTunerRegistersRequest;
+
+typedef struct {
+ Byte chip;
+ Word registerAddress;
+ Byte bufferLength;
+ Byte buffer[256];
+ Dword error;
+ Byte reserved[16];
+} WriteEepromValuesRequest, *PWriteEepromValuesRequest;
+
+typedef struct {
+ Byte chip;
+ Processor processor;
+ Dword registerAddress;
+ Byte position;
+ Byte length;
+ Byte value;
+ Dword error;
+ Byte reserved[16];
+} WriteRegisterBitsRequest, *PWriteRegisterBitsRequest;
+
+typedef struct {
+ Byte chip;
+ Processor processor;
+ Word variableIndex;
+ Byte bufferLength;
+ Byte buffer[256];
+ Dword error;
+ Byte reserved[16];
+} SetVariablesRequest, *PSetVariablesRequest;
+
+typedef struct {
+ Byte chip;
+ Processor processor;
+ Word variableIndex;
+ Byte position;
+ Byte length;
+ Byte value;
+ Dword error;
+ Byte reserved[16];
+} SetVariableBitsRequest, *PSetVariableBitsRequest;
+
+typedef struct {
+ Byte chip;
+ Processor processor;
+ Dword registerAddress;
+ Byte bufferLength;
+ Byte* buffer;
+ Dword error;
+ Byte reserved[16];
+} ReadRegistersRequest, *PReadRegistersRequest;
+
+typedef struct {
+ Byte chip;
+ Word registerAddress;
+ Byte bufferLength;
+ Byte* buffer;
+ Dword error;
+ Byte reserved[16];
+} ReadTunerRegistersRequest, *PReadTunerRegistersRequest;
+
+typedef struct {
+ Byte chip;
+ Word registerAddress;
+ Byte bufferLength;
+ Byte* buffer;
+ Dword error;
+ Byte reserved[16];
+} ReadEepromValuesRequest, *PReadEepromValuesRequest;
+
+typedef struct {
+ Byte chip;
+ Processor processor;
+ Dword registerAddress;
+ Byte position;
+ Byte length;
+ Byte* value;
+ Dword error;
+ Byte reserved[16];
+} ReadRegisterBitsRequest, *PReadRegisterBitsRequest;
+
+typedef struct {
+ Byte chip;
+ Processor processor;
+ Word variableIndex;
+ Byte bufferLength;
+ Byte* buffer;
+ Dword error;
+ Byte reserved[16];
+} GetVariablesRequest, *PGetVariablesRequest;
+
+typedef struct {
+ Byte chip;
+ Processor processor;
+ Word variableIndex;
+ Byte position;
+ Byte length;
+ Byte* value;
+ Dword error;
+ Byte reserved[16];
+} GetVariableBitsRequest, *PGetVariableBitsRequest;
+
+
+/**
+ * Write a sequence of bytes to the contiguous registers in demodulator.
+ * Paramters: DemodRegs struct
+ */
+#define IOCTL_AFA_DEMOD_WRITEREGISTERS \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x101, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Write a sequence of bytes to the contiguous registers in tuner.
+ * Paramters: DemodTunerRegs struct
+ */
+#define IOCTL_AFA_DEMOD_WRITETUNERREGISTERS \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x102, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Write a sequence of bytes to the contiguous cells in the EEPROM.
+ * Paramters: DemodEEPROMVaules struct
+ */
+#define IOCTL_AFA_DEMOD_WRITEEEPROMVALUES \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x103, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Write one byte to the contiguous registers in demodulator.
+ * Paramters: DemodRegs struct
+ */
+#define IOCTL_AFA_DEMOD_WRITEREGISTERBITS \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x104, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Write a sequence of bytes to the contiguous variables in demodulator.
+ * Paramters: DemodVariables struct
+ */
+#define IOCTL_AFA_DEMOD_SETVARIABLES \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x105, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Write a sequence of bytes to the contiguous variables in demodulator.
+ * Paramters: DemodVariables struct
+ */
+#define IOCTL_AFA_DEMOD_SETVARIABLEBITS \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x106, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Read a sequence of bytes from the contiguous registers in demodulator.
+ * Paramters: DemodRegs struct
+ */
+#define IOCTL_AFA_DEMOD_READREGISTERS \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x108, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Read a sequence of bytes from the contiguous registers in tuner.
+ * Paramters: DemodTunerRegs
+ */
+#define IOCTL_AFA_DEMOD_READTUNERREGISTERS \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x109, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Read a sequence of bytes from the contiguous cells in the EEPROM.
+ * Paramters: DemodEEPROMVaules struct
+ */
+#define IOCTL_AFA_DEMOD_READEEPROMVALUES \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x10A, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Read a sequence of bytes from the contiguous registers in demodulator.
+ * Paramters: DemodRegs struct
+ */
+#define IOCTL_AFA_DEMOD_READREGISTERBITS \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x10B, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Read a sequence of bytes from the contiguous variables in demodulator.
+ * Paramters: DemodVariables struct
+ */
+#define IOCTL_AFA_DEMOD_GETVARIABLES \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x10C, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+/**
+ * Read a sequence of bytes from the contiguous variables in demodulator.
+ * Paramters: DemodVariables struct
+ */
+#define IOCTL_AFA_DEMOD_GETVARIABLEBITS \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x10D, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+
+
+/**
+ * Demodulator Stream control API commands
+ */
+
+typedef struct {
+ Byte chip;
+ Dword error;
+ Byte reserved[16];
+} StartCaptureRequest, *PStartCaptureRequest;
+
+typedef struct {
+ Byte chip;
+ Dword error;
+ Byte reserved[16];
+} StopCaptureRequest, *PStopCaptureRequest;
+
+/**
+ * Start capture data stream
+ * Paramters: DemodDriverInfo struct
+ */
+#define IOCTL_AFA_DEMOD_STARTCAPTURE \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x200, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+
+/**
+ * Stop capture data stream
+ * Paramters: DemodDriverInfo struct
+ */
+#define IOCTL_AFA_DEMOD_STOPCAPTURE \
+ CTL_CODE( MEDIA_DEVICE_AFADEMOD, 0x201, METHOD_BUFFERED, FILE_ANY_ACCESS )
+
+
+#endif \ No newline at end of file
diff --git a/api/mt2260.c b/api/mt2260.c
new file mode 100644
index 0000000..44a0e85
--- /dev/null
+++ b/api/mt2260.c
@@ -0,0 +1,1992 @@
+/*****************************************************************************
+**
+** Name: mt2260.c
+**
+** Description: Microtune MT2260 Tuner software interface.
+** Supports tuners with Part/Rev code: 0x85.
+**
+** Functions
+** Implemented: UData_t MT2260_Open
+** UData_t MT2260_Close
+** UData_t MT2260_ChangeFreq
+** UData_t MT2260_GetLocked
+** UData_t MT2260_GetParam
+** UData_t MT2260_GetReg
+** UData_t MT2260_GetUserData
+** UData_t MT2260_ReInit
+** UData_t MT2260_SetParam
+** UData_t MT2260_SetPowerModes
+** UData_t MT2260_SetReg
+**
+** References: AN-00010: MicroTuner Serial Interface Application Note
+** MicroTune, Inc.
+**
+** Exports: None
+**
+** Dependencies: MT2260_ReadSub(hUserData, IC_Addr, subAddress, *pData, cnt);
+** - Read byte(s) of data from the two-wire bus.
+**
+** MT2260_WriteSub(hUserData, IC_Addr, subAddress, *pData, cnt);
+** - Write byte(s) of data to the two-wire bus.
+**
+** MT2260_Sleep(hUserData, nMinDelayTime);
+** - Delay execution for x milliseconds
+**
+** CVS ID: $Id: mt2260.c,v 1.1 2006/05/08 22:05:01 software Exp $
+** CVS Source: $Source: /export/home/cvsroot/web05/html/software/tuners/MT2260/MT2260B0/mt2260.c,v $
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+** N/A 04-26-2006 DAD Ver 1.01: Add support for 8-38.4 MHz crystals
+**
+*****************************************************************************/
+#include "mt2260.h"
+//#include <stdlib.h> /* for NULL */ //for Linux
+
+/* Version of this module */
+#define VERSION 10001 /* Version 01.01 */
+
+
+#ifndef MT2260_CNT
+#error You must define MT2260_CNT in the "mt_userdef.h" file
+#endif
+
+/*
+** Normally, the "reg" array in the tuner structure is used as a cache
+** containing the current value of the tuner registers. If the user's
+** application MUST change tuner registers without using the MT2260_SetReg
+** routine provided, he may compile this code with the __NO_CACHE__
+** variable defined.
+** The PREFETCH macro will insert code code to re-read tuner registers if
+** __NO_CACHE__ is defined. If it is not defined (normal) then PREFETCH
+** does nothing.
+*/
+
+#if defined(__NO_CACHE__)
+#define PREFETCH(var, cnt) \
+ if (MT_NO_ERROR(status)) \
+ status |= MT2260_ReadSub(pInfo->hUserData, pInfo->address, (var), &pInfo->reg[(var)], (cnt));
+#else
+#define PREFETCH(var, cnt)
+#endif
+
+
+
+/*
+** Two-wire serial bus subaddresses of the tuner registers.
+** Also known as the tuner's register addresses.
+*/
+static enum MT2260_Register_Offsets
+{
+ MT2260_PART_REV = 0, /* 0x00 */
+ MT2260_LO_CTRL_1, /* 0x01 */
+ MT2260_LO_CTRL_2, /* 0x02 */
+ MT2260_LO_CTRL_3, /* 0x03 */
+ MT2260_SMART_ANT, /* 0x04 */
+ MT2260_BAND_CTRL, /* 0x05 */
+ MT2260_CLEARTUNE, /* 0x06 */
+ MT2260_IGAIN, /* 0x07 */
+ MT2260_BBFILT_1, /* 0x08 */
+ MT2260_BBFILT_2, /* 0x09 */
+ MT2260_BBFILT_3, /* 0x0A */
+ MT2260_BBFILT_4, /* 0x0B */
+ MT2260_BBFILT_5, /* 0x0C */
+ MT2260_BBFILT_6, /* 0x0D */
+ MT2260_BBFILT_7, /* 0x0E */
+ MT2260_BBFILT_8, /* 0x0F */
+ MT2260_RCC_CTRL, /* 0x10 */
+ MT2260_RSVD_11, /* 0x11 */
+ MT2260_STATUS_1, /* 0x12 */
+ MT2260_STATUS_2, /* 0x13 */
+ MT2260_STATUS_3, /* 0x14 */
+ MT2260_STATUS_4, /* 0x15 */
+ MT2260_STATUS_5, /* 0x16 */
+ MT2260_SRO_CTRL, /* 0x17 */
+ MT2260_RSVD_18, /* 0x18 */
+ MT2260_RSVD_19, /* 0x19 */
+ MT2260_RSVD_1A, /* 0x1A */
+ MT2260_RSVD_1B, /* 0x1B */
+ MT2260_ENABLES, /* 0x1C */
+ MT2260_RSVD_1D, /* 0x1D */
+ MT2260_RSVD_1E, /* 0x1E */
+ MT2260_RSVD_1F, /* 0x1F */
+ MT2260_GPO, /* 0x20 */
+ MT2260_RSVD_21, /* 0x21 */
+ MT2260_RSVD_22, /* 0x22 */
+ MT2260_RSVD_23, /* 0x23 */
+ MT2260_RSVD_24, /* 0x24 */
+ MT2260_RSVD_25, /* 0x25 */
+ MT2260_RSVD_26, /* 0x26 */
+ MT2260_RSVD_27, /* 0x27 */
+ MT2260_RSVD_28, /* 0x28 */
+ MT2260_RSVD_29, /* 0x29 */
+ MT2260_RSVD_2A, /* 0x2A */
+ MT2260_RSVD_2B, /* 0x2B */
+ MT2260_RSVD_2C, /* 0x2C */
+ MT2260_RSVD_2D, /* 0x2D */
+ MT2260_RSVD_2E, /* 0x2E */
+ MT2260_RSVD_2F, /* 0x2F */
+ MT2260_RSVD_30, /* 0x30 */
+ MT2260_RSVD_31, /* 0x31 */
+ MT2260_RSVD_32, /* 0x32 */
+ MT2260_RSVD_33, /* 0x33 */
+ MT2260_RSVD_34, /* 0x34 */
+ MT2260_RSVD_35, /* 0x35 */
+ MT2260_RSVD_36, /* 0x36 */
+ MT2260_RSVD_37, /* 0x37 */
+ MT2260_RSVD_38, /* 0x38 */
+ MT2260_RSVD_39, /* 0x39 */
+ MT2260_RSVD_3A, /* 0x3A */
+ MT2260_RSVD_3B, /* 0x3B */
+ MT2260_RSVD_3C, /* 0x3C */
+ END_REGS
+};
+
+/*
+** DefaultsEntry points to an array of U8Data used to initialize
+** various registers (the first byte is the starting subaddress)
+** and a count of the bytes (including subaddress) in the array.
+**
+** DefaultsList is an array of DefaultsEntry elements terminated
+** by an entry with a NULL pointer for the data array.
+*/
+typedef struct MT2260_DefaultsEntryTag
+{
+ U8Data *data;
+ UData_t cnt;
+} MT2260_DefaultsEntry;
+
+typedef MT2260_DefaultsEntry MT2260_DefaultsList[];
+
+#define DEF_LIST_ENTRY(a) {a, sizeof(a)/sizeof(U8Data) - 1}
+#define END_DEF_LIST {0,0}
+
+/*
+** Constants used by the tuning algorithm
+*/
+ /* REF_FREQ is now the actual crystal frequency */
+#define REF_FREQ (30000000UL) /* Reference oscillator Frequency (in Hz) */
+#define TUNE_STEP_SIZE (50UL) /* Tune in steps of 50 kHz */
+#define MIN_UHF_FREQ (350000000UL) /* Minimum UHF frequency (in Hz) */
+#define MAX_UHF_FREQ (900000000UL) /* Maximum UHF frequency (in Hz) */
+#define MIN_LBAND_FREQ (1670000000UL) /* Minimum L-Band frequency (in Hz) */
+#define MAX_LBAND_FREQ (1680000000UL) /* Maximum L-Band frequency (in Hz) */
+#define OUTPUT_BW (8000000UL) /* Output channel bandwidth (in Hz) */
+#define UHF_DEFAULT_FREQ (600000000UL) /* Default UHF input frequency (in Hz) */
+
+
+/*
+** The number of Tuner Registers
+*/
+static const UData_t Num_Registers = END_REGS;
+
+typedef struct
+{
+ Handle_t handle;
+ Handle_t hUserData;
+ UData_t address;
+ UData_t version;
+ UData_t tuner_id;
+ UData_t f_Ref;
+ UData_t f_Step;
+ UData_t f_in;
+ UData_t f_LO;
+ UData_t f_bw;
+ UData_t band;
+ UData_t num_regs;
+ U8Data RC2_Value;
+ U8Data RC2_Nominal;
+ U8Data reg[END_REGS];
+} MT2260_Info_t;
+
+static UData_t nMaxTuners = MT2260_CNT;
+static MT2260_Info_t MT2260_Info[MT2260_CNT];
+static MT2260_Info_t *Avail[MT2260_CNT];
+static UData_t nOpenTuners = 0;
+
+/*
+** Constants used to write a minimal set of registers when changing bands.
+** If the user wants a total reset, they should call MT2260_Open() again.
+** Skip 01, 02, 03, 04 (get overwritten anyways)
+** Write 05
+** Skip 06 - 18
+** Write 19 (diff for L-Band)
+** Skip 1A 1B 1C
+** Write 1D - 2B
+** Skip 2C - 3C
+*/
+
+static U8Data MT2260_UHF_defaults1[] =
+{
+ 0x05, /* address 0xC0, reg 0x05 */
+ 0x52, /* Reg 0x05 */
+};
+static U8Data MT2260_UHF_defaults2[] =
+{
+ 0x19, /* address 0xC0, reg 0x19 */
+ 0x61, /* Reg 0x19 CAPto = 3*/
+};
+static U8Data MT2260_UHF_defaults3[] =
+{
+ 0x1D, /* address 0xC0, reg 0x1D */
+ 0xDC, /* Reg 0x1D */
+ 0x00, /* Reg 0x1E */
+ 0x0A, /* Reg 0x1F */
+ 0xD4, /* Reg 0x20 GPO = 1*/
+ 0x03, /* Reg 0x21 LBIASen = 1, UBIASen = 1*/
+ 0x64, /* Reg 0x22 */
+ 0x64, /* Reg 0x23 */
+ 0x64, /* Reg 0x24 */
+ 0x64, /* Reg 0x25 */
+ 0x22, /* Reg 0x26 CASCM = b0100 (bits reversed)*/
+ 0xAA, /* Reg 0x27 */
+ 0xF2, /* Reg 0x28 */
+ 0x1E, /* Reg 0x29 */
+ 0x80, /* Reg 0x2A MIXbiasen = 1*/
+ 0x14, /* Reg 0x2B */
+};
+
+static MT2260_DefaultsList MT2260_UHF_defaults = {
+ DEF_LIST_ENTRY(MT2260_UHF_defaults1),
+ DEF_LIST_ENTRY(MT2260_UHF_defaults2),
+ DEF_LIST_ENTRY(MT2260_UHF_defaults3),
+ END_DEF_LIST
+};
+
+static U8Data MT2260_LBAND_defaults1[] =
+{
+ 0x05, /* address 0xC0, reg 0x05 */
+ 0xC4, /* Reg 0x05 */
+};
+static U8Data MT2260_LBAND_defaults2[] =
+{
+ 0x19, /* address 0xC0, reg 0x19 */
+ 0x63, /* Reg 0x19 CAPto = 3, VCOamp = 3*/
+};
+static U8Data MT2260_LBAND_defaults3[] =
+{
+ 0x1D, /* address 0xC0, reg 0x1D */
+ 0xFE, /* Reg 0x1D */
+ 0x00, /* reg 0x1E */
+ 0x00, /* reg 0x1F */
+ 0xB4, /* Reg 0x20 GPO = 1, RFAext = 0*/
+ 0x01, /* Reg 0x21 LBIASen = 1*/
+ 0xA5, /* Reg 0x22 */
+ 0xA5, /* Reg 0x23 */
+ 0xA5, /* Reg 0x24 */
+ 0xA5, /* Reg 0x25 */
+ 0x82, /* Reg 0x26 CASCM = b0001 (bits reversed)*/
+ 0xAA, /* Reg 0x27 */
+ 0xF1, /* Reg 0x28 */
+ 0x17, /* Reg 0x29 */
+ 0x80, /* Reg 0x2A MIXbiasen = 1*/
+ 0x1F, /* Reg 0x2B */
+};
+
+static MT2260_DefaultsList MT2260_LBAND_defaults = {
+ DEF_LIST_ENTRY(MT2260_LBAND_defaults1),
+ DEF_LIST_ENTRY(MT2260_LBAND_defaults2),
+ DEF_LIST_ENTRY(MT2260_LBAND_defaults3),
+ END_DEF_LIST
+};
+
+/* This table is used when MaxSensitivity is ON */
+static UData_t MT2260_UHF_XFreq[] =
+{
+ 443000 / TUNE_STEP_SIZE, /* < 443 MHz: 15+1 */
+ 470000 / TUNE_STEP_SIZE, /* 443 .. 470 MHz: 15 */
+ 496000 / TUNE_STEP_SIZE, /* 470 .. 496 MHz: 14 */
+ 525000 / TUNE_STEP_SIZE, /* 496 .. 525 MHz: 13 */
+ 552000 / TUNE_STEP_SIZE, /* 525 .. 552 MHz: 12 */
+ 580000 / TUNE_STEP_SIZE, /* 552 .. 580 MHz: 11 */
+ 605000 / TUNE_STEP_SIZE, /* 580 .. 605 MHz: 10 */
+ 632000 / TUNE_STEP_SIZE, /* 605 .. 632 MHz: 9 */
+ 657000 / TUNE_STEP_SIZE, /* 632 .. 657 MHz: 8 */
+ 682000 / TUNE_STEP_SIZE, /* 657 .. 682 MHz: 7 */
+ 710000 / TUNE_STEP_SIZE, /* 682 .. 710 MHz: 6 */
+ 735000 / TUNE_STEP_SIZE, /* 710 .. 735 MHz: 5 */
+ 763000 / TUNE_STEP_SIZE, /* 735 .. 763 MHz: 4 */
+ 802000 / TUNE_STEP_SIZE, /* 763 .. 802 MHz: 3 */
+ 840000 / TUNE_STEP_SIZE, /* 802 .. 840 MHz: 2 */
+ 877000 / TUNE_STEP_SIZE /* 840 .. 877 MHz: 1 */
+ /* 877+ MHz: 0 */
+};
+
+/* This table is used when MaxSensitivity is OFF */
+static UData_t MT2260_UHFA_XFreq[] =
+{
+ 442000 / TUNE_STEP_SIZE, /* < 442 MHz: 15+1 */
+ 472000 / TUNE_STEP_SIZE, /* 442 .. 472 MHz: 15 */
+ 505000 / TUNE_STEP_SIZE, /* 472 .. 505 MHz: 14 */
+ 535000 / TUNE_STEP_SIZE, /* 505 .. 535 MHz: 13 */
+ 560000 / TUNE_STEP_SIZE, /* 535 .. 560 MHz: 12 */
+ 593000 / TUNE_STEP_SIZE, /* 560 .. 593 MHz: 11 */
+ 620000 / TUNE_STEP_SIZE, /* 593 .. 620 MHz: 10 */
+ 647000 / TUNE_STEP_SIZE, /* 620 .. 647 MHz: 9 */
+ 673000 / TUNE_STEP_SIZE, /* 647 .. 673 MHz: 8 */
+ 700000 / TUNE_STEP_SIZE, /* 673 .. 700 MHz: 7 */
+ 727000 / TUNE_STEP_SIZE, /* 700 .. 727 MHz: 6 */
+ 752000 / TUNE_STEP_SIZE, /* 727 .. 752 MHz: 5 */
+ 783000 / TUNE_STEP_SIZE, /* 752 .. 783 MHz: 4 */
+ 825000 / TUNE_STEP_SIZE, /* 783 .. 825 MHz: 3 */
+ 865000 / TUNE_STEP_SIZE, /* 825 .. 865 MHz: 2 */
+ 905000 / TUNE_STEP_SIZE /* 865 .. 905 MHz: 1 */
+ /* 905+ MHz: 0 */
+};
+
+static UData_t UncheckedSet(MT2260_Info_t* pInfo,
+ U8Data reg,
+ U8Data val);
+
+static UData_t UncheckedGet(MT2260_Info_t* pInfo,
+ U8Data reg,
+ U8Data* val);
+
+
+/******************************************************************************
+**
+** Name: MT2260_Open
+**
+** Description: Initialize the tuner's register values.
+**
+** Parameters: MT2260_Addr - Serial bus address of the tuner.
+** hMT2260 - Tuner handle passed back.
+** hUserData - User-defined data, if needed for the
+** MT2260_ReadSub() & MT2260_WriteSub functions.
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_TUNER_ID_ERR - Tuner Part/Rev code mismatch
+** MT_TUNER_INIT_ERR - Tuner initialization failed
+** MT_COMM_ERR - Serial bus communications error
+** MT_ARG_NULL - Null pointer argument passed
+** MT_TUNER_CNT_ERR - Too many tuners open
+**
+** Dependencies: MT2260_ReadSub - Read byte(s) of data from the two-wire bus
+** MT2260_WriteSub - Write byte(s) of data to the two-wire bus
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+******************************************************************************/
+UData_t MT2260_Open(UData_t MT2260_Addr,
+ Handle_t* hMT2260,
+ Handle_t hUserData)
+{
+ UData_t status = MT_OK; /* Status to be returned. */
+ SData_t i;
+ MT2260_Info_t* pInfo = NULL;
+
+ /* Check the argument before using */
+ if (hMT2260 == NULL)
+ return MT_ARG_NULL;
+ *hMT2260 = NULL;
+
+ /*
+ ** If this is our first tuner, initialize the address fields and
+ ** the list of available control blocks.
+ */
+ if (nOpenTuners == 0)
+ {
+ for (i=MT2260_CNT-1; i>=0; i--)
+ {
+ MT2260_Info[i].handle = NULL;
+ MT2260_Info[i].address = MAX_UDATA;
+ MT2260_Info[i].hUserData = NULL;
+ Avail[i] = &MT2260_Info[i];
+ }
+ }
+
+ /*
+ ** Look for an existing MT2260_State_t entry with this address.
+ */
+ for (i=MT2260_CNT-1; i>=0; i--)
+ {
+ /*
+ ** If an open'ed handle provided, we'll re-initialize that structure.
+ **
+ ** We recognize an open tuner because the address and hUserData are
+ ** the same as one that has already been opened
+ */
+ if ((MT2260_Info[i].address == MT2260_Addr) &&
+ (MT2260_Info[i].hUserData == hUserData))
+ {
+ pInfo = &MT2260_Info[i];
+ break;
+ }
+ }
+
+ /* If not found, choose an empty spot. */
+ if (pInfo == NULL)
+ {
+ /* Check to see that we're not over-allocating. */
+ if (nOpenTuners == MT2260_CNT)
+ return MT_TUNER_CNT_ERR;
+
+ /* Use the next available block from the list */
+ pInfo = Avail[nOpenTuners];
+ nOpenTuners++;
+ }
+
+ pInfo->handle = (Handle_t) pInfo;
+ pInfo->hUserData = hUserData;
+ pInfo->address = MT2260_Addr;
+
+ status |= MT2260_ReInit((Handle_t) pInfo);
+
+ if (MT_IS_ERROR(status))
+ MT2260_Close((Handle_t) pInfo);
+ else
+ *hMT2260 = pInfo->handle;
+
+ return (status);
+}
+
+
+static UData_t IsValidHandle(MT2260_Info_t* handle)
+{
+ return ((handle != NULL) && (handle->handle == handle)) ? 1 : 0;
+}
+
+
+/******************************************************************************
+**
+** Name: MT2260_Close
+**
+** Description: Release the handle to the tuner.
+**
+** Parameters: hMT2260 - Handle to the MT2260 tuner
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: mt_errordef.h - definition of error codes
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+******************************************************************************/
+UData_t MT2260_Close(Handle_t hMT2260)
+{
+ MT2260_Info_t* pInfo = (MT2260_Info_t*) hMT2260;
+
+ if (!IsValidHandle(pInfo))
+ return MT_INV_HANDLE;
+
+ /* Remove the tuner from our list of tuners */
+ pInfo->handle = NULL;
+ pInfo->address = MAX_UDATA;
+ pInfo->hUserData = NULL;
+ nOpenTuners--;
+ Avail[nOpenTuners] = pInfo; /* Return control block to available list */
+
+ return MT_OK;
+}
+
+
+/******************************************************************************
+**
+** Name: Run_BB_RC_Cal2
+**
+** Description: Run Base Band RC Calibration (Method 2)
+** MT2260 B0 only, others return MT_OK
+**
+** Parameters: hMT2260 - Handle to the MT2260 tuner
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: mt_errordef.h - definition of error codes
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+** N/A 04-26-2006 DAD Clear bit only if SRO >= 36 MHz (was 33 MHz).
+**
+******************************************************************************/
+static UData_t Run_BB_RC_Cal2(Handle_t h)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ U8Data tmp_rcc;
+ U8Data dumy;
+
+ MT2260_Info_t* pInfo = (MT2260_Info_t*) h;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ status |= MT_INV_HANDLE;
+
+ /*
+ ** Set the crystal frequency in the calibration register
+ ** and enable RC calibration #2
+ */
+ PREFETCH(MT2260_RCC_CTRL, 1); /* Fetch register(s) if __NO_CACHE__ defined */
+ tmp_rcc = pInfo->reg[MT2260_RCC_CTRL];
+ if (pInfo->f_Ref < (36000000 /*/ TUNE_STEP_SIZE*/))
+ tmp_rcc = (tmp_rcc & 0xDF) | 0x10;
+ else
+ tmp_rcc |= 0x30;
+ status |= UncheckedSet(pInfo, MT2260_RCC_CTRL, tmp_rcc);
+
+ /* Read RC Calibration value */
+ status |= UncheckedGet(pInfo, MT2260_STATUS_4, &dumy);
+
+ /* Disable RC Cal 2 */
+ status |= UncheckedSet(pInfo, MT2260_RCC_CTRL, pInfo->reg[MT2260_RCC_CTRL] & 0xEF);
+
+ /* Store RC Cal 2 value */
+ pInfo->RC2_Value = pInfo->reg[MT2260_STATUS_4];
+
+ if (pInfo->f_Ref < (36000000 /*/ TUNE_STEP_SIZE*/))
+ pInfo->RC2_Nominal = (U8Data) ((pInfo->f_Ref + 77570) / 155139);
+ else
+ pInfo->RC2_Nominal = (U8Data) ((pInfo->f_Ref + 93077) / 186154);
+
+ return (status);
+}
+
+
+/******************************************************************************
+**
+** Name: Set_BBFilt
+**
+** Description: Set Base Band Filter bandwidth
+** Based on SRO frequency & BB RC Calibration
+** User stores channel bw as 5-8 MHz. This routine
+** calculates a 3 dB corner bw based on 1/2 the bandwidth
+** and a bandwidth related constant.
+**
+** Parameters: hMT2260 - Handle to the MT2260 tuner
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: mt_errordef.h - definition of error codes
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+******************************************************************************/
+static UData_t Set_BBFilt(Handle_t h)
+{
+ UData_t f_3dB_bw;
+ U8Data BBFilt = 0;
+ U8Data Sel = 0;
+ SData_t TmpFilt;
+ SData_t i;
+ UData_t status = MT_OK; /* Status to be returned */
+
+ MT2260_Info_t* pInfo = (MT2260_Info_t*) h;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ status |= MT_INV_HANDLE;
+
+ /*
+ ** Convert the channel bandwidth into a 3 dB bw by dividing it by 2
+ ** and subtracting 300, 250, 200, or 0 kHz based on 8, 7, 6, 5 MHz
+ ** channel bandwidth.
+ */
+ f_3dB_bw = (pInfo->f_bw / 2); /* bw -> bw/2 */
+ if (pInfo->f_bw > 7500000)
+ {
+ /* >3.75 MHz corner */
+ f_3dB_bw -= 300000;
+ Sel = 0x00;
+ TmpFilt = ((429916107 / pInfo->RC2_Value) * pInfo->RC2_Nominal) / f_3dB_bw - 81;
+ }
+ else if (pInfo->f_bw > 6500000)
+ {
+ /* >3.25 MHz .. 3.75 MHz corner */
+ f_3dB_bw -= 250000;
+ Sel = 0x00;
+ TmpFilt = ((429916107 / pInfo->RC2_Value) * pInfo->RC2_Nominal) / f_3dB_bw - 81;
+ }
+ else if (pInfo->f_bw > 5500000)
+ {
+ /* >2.75 MHz .. 3.25 MHz corner */
+ f_3dB_bw -= 200000;
+ Sel = 0x80;
+ TmpFilt = ((429916107 / pInfo->RC2_Value) * pInfo->RC2_Nominal) / f_3dB_bw - 113;
+ }
+ else
+ {
+ /* <= 2.75 MHz corner */
+ Sel = 0xC0;
+ TmpFilt = ((429916107 / pInfo->RC2_Value) * pInfo->RC2_Nominal) / f_3dB_bw - 129;
+ }
+
+ if (TmpFilt > 63)
+ TmpFilt = 63;
+ else if (TmpFilt < 0)
+ TmpFilt = 0;
+ BBFilt = ((U8Data) TmpFilt) | Sel;
+
+ for ( i = MT2260_BBFILT_1; i <= MT2260_BBFILT_8; i++ )
+ pInfo->reg[i] = BBFilt;
+
+ if (MT_NO_ERROR(status))
+ status |= MT2260_WriteSub(pInfo->hUserData,
+ pInfo->address,
+ MT2260_BBFILT_1,
+ &pInfo->reg[MT2260_BBFILT_1],
+ 8);
+
+ return (status);
+}
+
+
+/****************************************************************************
+**
+** Name: MT2260_GetLocked
+**
+** Description: Checks to see if the PLL is locked.
+**
+** Parameters: h - Open handle to the tuner (from MT2260_Open).
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_DNC_UNLOCK - Downconverter PLL unlocked
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: MT2260_ReadSub - Read byte(s) of data from the serial bus
+** MT2260_Sleep - Delay execution for x milliseconds
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2260_GetLocked(Handle_t h)
+{
+ const UData_t nMaxWait = 200; /* wait a maximum of 200 msec */
+ const UData_t nPollRate = 2; /* poll status bits every 2 ms */
+ const UData_t nMaxLoops = nMaxWait / nPollRate;
+ UData_t status = MT_OK; /* Status to be returned */
+ UData_t nDelays = 0;
+ U8Data statreg;
+ MT2260_Info_t* pInfo = (MT2260_Info_t*) h;
+
+ if (IsValidHandle(pInfo) == 0)
+ return MT_INV_HANDLE;
+
+ do
+ {
+ status |= UncheckedGet(pInfo, MT2260_STATUS_1, &statreg);
+
+ if ((MT_IS_ERROR(status)) || ((statreg & 0x40) == 0x40))
+ return (status);
+
+ MT2260_Sleep(pInfo->hUserData, nPollRate); /* Wait between retries */
+ }
+ while (++nDelays < nMaxLoops);
+
+ if ((statreg & 0x40) != 0x40)
+ status |= MT_DNC_UNLOCK;
+
+ return (status);
+}
+
+
+/****************************************************************************
+**
+** Name: MT2260_GetParam
+**
+** Description: Gets a tuning algorithm parameter.
+**
+** This function provides access to the internals of the
+** tuning algorithm - mostly for testing purposes.
+**
+** Parameters: h - Tuner handle (returned by MT2260_Open)
+** param - Tuning algorithm parameter
+** (see enum MT2260_Param)
+** pValue - ptr to returned value
+**
+** param Description
+** ---------------------- --------------------------------
+** MT2260_IC_ADDR Serial Bus address of this tuner
+** MT2260_MAX_OPEN Max number of MT2260's that can be open
+** MT2260_NUM_OPEN Number of MT2260's currently open
+** MT2260_NUM_REGS Number of tuner registers
+** MT2260_SRO_FREQ crystal frequency
+** MT2260_STEPSIZE minimum tuning step size
+** MT2260_INPUT_FREQ input center frequency
+** MT2260_LO_FREQ LO Frequency
+** MT2260_OUTPUT_BW Output channel bandwidth
+** MT2260_RC2_VALUE Base band filter cal RC code (method 2)
+** MT2260_RC2_NOMINAL Base band filter nominal cal RC code
+** MT2260_RF_ADC RF attenuator A/D readback
+** MT2260_RF_ATTN RF attenuation (0-255)
+** MT2260_RF_EXT External control of RF atten
+** MT2260_LNA_GAIN LNA gain setting (0-15)
+** MT2260_BB_ADC BB attenuator A/D readback
+** MT2260_BB_ATTN Baseband attenuation (0-255)
+** MT2260_BB_EXT External control of BB atten
+**
+** Usage: status |= MT2260_GetParam(hMT2260,
+** MT2260_OUTPUT_BW,
+** &f_bw);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_NULL - Null pointer argument passed
+** MT_ARG_RANGE - Invalid parameter requested
+**
+** Dependencies: USERS MUST CALL MT2260_Open() FIRST!
+**
+** See Also: MT2260_SetParam, MT2260_Open
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2260_GetParam(Handle_t h,
+ MT2260_Param param,
+ UData_t* pValue)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ U8Data tmp;
+ MT2260_Info_t* pInfo = (MT2260_Info_t*) h;
+
+ if (pValue == NULL)
+ status |= MT_ARG_NULL;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ status |= MT_INV_HANDLE;
+
+ if (MT_NO_ERROR(status))
+ {
+ switch (param)
+ {
+ /* Serial Bus address of this tuner */
+ case MT2260_IC_ADDR:
+ *pValue = pInfo->address;
+ break;
+
+ /* Max # of MT2260's allowed to be open */
+ case MT2260_MAX_OPEN:
+ *pValue = nMaxTuners;
+ break;
+
+ /* # of MT2260's open */
+ case MT2260_NUM_OPEN:
+ *pValue = nOpenTuners;
+ break;
+
+ /* Number of tuner registers */
+ case MT2260_NUM_REGS:
+ *pValue = Num_Registers;
+ break;
+
+ /* crystal frequency */
+ case MT2260_SRO_FREQ:
+ *pValue = pInfo->f_Ref;
+ break;
+
+ /* minimum tuning step size */
+ case MT2260_STEPSIZE:
+ *pValue = pInfo->f_Step;
+ break;
+
+ /* input center frequency */
+ case MT2260_INPUT_FREQ:
+ *pValue = pInfo->f_in;
+ break;
+
+ /* LO Frequency */
+ case MT2260_LO_FREQ:
+ *pValue = pInfo->f_LO;
+ break;
+
+ /* Output Channel Bandwidth */
+ case MT2260_OUTPUT_BW:
+ *pValue = pInfo->f_bw;
+ break;
+
+ /* Base band filter cal RC code */
+ case MT2260_RC2_VALUE:
+ *pValue = (UData_t) pInfo->RC2_Value;
+ break;
+
+ /* Base band filter nominal cal RC code */
+ case MT2260_RC2_NOMINAL:
+ *pValue = (UData_t) pInfo->RC2_Nominal;
+ break;
+
+ /* RF attenuator A/D readback */
+ case MT2260_RF_ADC:
+ status |= UncheckedGet(pInfo, MT2260_STATUS_2, &tmp);
+ if (MT_NO_ERROR(status))
+ *pValue = (UData_t) tmp;
+ break;
+
+ /* BB attenuator A/D readback */
+ case MT2260_BB_ADC:
+ status |= UncheckedGet(pInfo, MT2260_STATUS_3, &tmp);
+ if (MT_NO_ERROR(status))
+ *pValue = (UData_t) tmp;
+ break;
+
+ /* RF attenuator setting */
+ case MT2260_RF_ATTN:
+ PREFETCH(MT2260_RSVD_1F, 1); /* Fetch register(s) if __NO_CACHE__ defined */
+ if (MT_NO_ERROR(status))
+ *pValue = pInfo->reg[MT2260_RSVD_1F];
+ break;
+
+ /* BB attenuator setting */
+ case MT2260_BB_ATTN:
+ PREFETCH(MT2260_RSVD_2C, 3); /* Fetch register(s) if __NO_CACHE__ defined */
+ *pValue = pInfo->reg[MT2260_RSVD_2C]
+ + pInfo->reg[MT2260_RSVD_2D]
+ + pInfo->reg[MT2260_RSVD_2E] - 3;
+ break;
+
+ /* RF external / internal atten control */
+ case MT2260_RF_EXT:
+ PREFETCH(MT2260_GPO, 1); /* Fetch register(s) if __NO_CACHE__ defined */
+ *pValue = ((pInfo->reg[MT2260_GPO] & 0x40) != 0x00);
+ break;
+
+ /* BB external / internal atten control */
+ case MT2260_BB_EXT:
+ PREFETCH(MT2260_RSVD_33, 1); /* Fetch register(s) if __NO_CACHE__ defined */
+ *pValue = ((pInfo->reg[MT2260_RSVD_33] & 0x10) != 0x00);
+ break;
+
+ /* LNA gain setting (0-15) */
+ case MT2260_LNA_GAIN:
+ PREFETCH(MT2260_IGAIN, 1); /* Fetch register(s) if __NO_CACHE__ defined */
+ *pValue = ((pInfo->reg[MT2260_IGAIN] & 0x3C) >> 2);
+ break;
+
+ case MT2260_EOP:
+ default:
+ status |= MT_ARG_RANGE;
+ }
+ }
+ return (status);
+}
+
+
+/****************************************************************************
+** LOCAL FUNCTION - DO NOT USE OUTSIDE OF mt2260.c
+**
+** Name: UncheckedGet
+**
+** Description: Gets an MT2260 register with minimal checking
+**
+** NOTE: This is a local function that performs the same
+** steps as the MT2260_GetReg function that is available
+** in the external API. It does not do any of the standard
+** error checking that the API function provides and should
+** not be called from outside this file.
+**
+** Parameters: *pInfo - Tuner control structure
+** reg - MT2260 register/subaddress location
+** *val - MT2260 register/subaddress value
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_NULL - Null pointer argument passed
+** MT_ARG_RANGE - Argument out of range
+**
+** Dependencies: USERS MUST CALL MT2260_Open() FIRST!
+**
+** Use this function if you need to read a register from
+** the MT2260.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+static UData_t UncheckedGet(MT2260_Info_t* pInfo,
+ U8Data reg,
+ U8Data* val)
+{
+ UData_t status; /* Status to be returned */
+
+#if defined(_DEBUG)
+ status = MT_OK;
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ status |= MT_INV_HANDLE;
+
+ if (val == NULL)
+ status |= MT_ARG_NULL;
+
+ if (reg >= END_REGS)
+ status |= MT_ARG_RANGE;
+
+ if (MT_IS_ERROR(status))
+ return(status);
+#endif
+
+ status = MT2260_ReadSub(pInfo->hUserData, pInfo->address, reg, &pInfo->reg[reg], 1);
+
+ if (MT_NO_ERROR(status))
+ *val = pInfo->reg[reg];
+
+ return (status);
+}
+
+
+/****************************************************************************
+**
+** Name: MT2260_GetReg
+**
+** Description: Gets an MT2260 register.
+**
+** Parameters: h - Tuner handle (returned by MT2260_Open)
+** reg - MT2260 register/subaddress location
+** *val - MT2260 register/subaddress value
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_NULL - Null pointer argument passed
+** MT_ARG_RANGE - Argument out of range
+**
+** Dependencies: USERS MUST CALL MT2260_Open() FIRST!
+**
+** Use this function if you need to read a register from
+** the MT2260.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2260_GetReg(Handle_t h,
+ U8Data reg,
+ U8Data* val)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ MT2260_Info_t* pInfo = (MT2260_Info_t*) h;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ status |= MT_INV_HANDLE;
+
+ if (val == NULL)
+ status |= MT_ARG_NULL;
+
+ if (reg >= END_REGS)
+ status |= MT_ARG_RANGE;
+
+ if (MT_NO_ERROR(status))
+ status |= UncheckedGet(pInfo, reg, val);
+
+ return (status);
+}
+
+
+/****************************************************************************
+**
+** Name: MT2260_GetUserData
+**
+** Description: Gets the user-defined data item.
+**
+** Parameters: h - Tuner handle (returned by MT2260_Open)
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_NULL - Null pointer argument passed
+**
+** Dependencies: USERS MUST CALL MT2260_Open() FIRST!
+**
+** The hUserData parameter is a user-specific argument
+** that is stored internally with the other tuner-
+** specific information.
+**
+** For example, if additional arguments are needed
+** for the user to identify the device communicating
+** with the tuner, this argument can be used to supply
+** the necessary information.
+**
+** The hUserData parameter is initialized in the tuner's
+** Open function to NULL.
+**
+** See Also: MT2260_SetUserData, MT2260_Open
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2260_GetUserData(Handle_t h,
+ Handle_t* hUserData)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ MT2260_Info_t* pInfo = (MT2260_Info_t*) h;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ status = MT_INV_HANDLE;
+
+ if (hUserData == NULL)
+ status |= MT_ARG_NULL;
+
+ if (MT_NO_ERROR(status))
+ *hUserData = pInfo->hUserData;
+
+ return (status);
+}
+
+
+/******************************************************************************
+**
+** Name: MT2260_ReInit
+**
+** Description: Initialize the tuner's register values.
+**
+** Parameters: h - Tuner handle (returned by MT2260_Open)
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_TUNER_ID_ERR - Tuner Part/Rev code mismatch
+** MT_TUNER_INIT_ERR - Tuner initialization failed
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_COMM_ERR - Serial bus communications error
+**
+** Dependencies: MT2260_ReadSub - Read byte(s) of data from the two-wire bus
+** MT2260_WriteSub - Write byte(s) of data to the two-wire bus
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+******************************************************************************/
+UData_t MT2260_ReInit(Handle_t h)
+{
+ U8Data MT2260_Init_Defaults1[] =
+ {
+ 0x01, /* Start w/register 0x01 */
+ 0x00, /* Reg 0x01 */
+ 0x00, /* Reg 0x02 */
+ 0x28, /* Reg 0x03 */
+ 0x00, /* Reg 0x04 */
+ 0x52, /* Reg 0x05 */
+ 0x99, /* Reg 0x06 */
+ 0x3F, /* Reg 0x07 */
+ };
+
+ U8Data MT2260_Init_Defaults2[] =
+ {
+ 0x17, /* Start w/register 0x17 */
+ 0x6D, /* Reg 0x17 */
+ 0x71, /* Reg 0x18 */
+ 0x61, /* Reg 0x19 */
+ 0xC0, /* Reg 0x1A */
+ 0xBF, /* Reg 0x1B */
+ 0xFF, /* Reg 0x1C */
+ 0xDC, /* Reg 0x1D */
+ 0x00, /* Reg 0x1E */
+ 0x0A, /* Reg 0x1F */
+ 0xD4, /* Reg 0x20 */
+ 0x03, /* Reg 0x21 */
+ 0x64, /* Reg 0x22 */
+ 0x64, /* Reg 0x23 */
+ 0x64, /* Reg 0x24 */
+ 0x64, /* Reg 0x25 */
+ 0x22, /* Reg 0x26 */
+ 0xAA, /* Reg 0x27 */
+ 0xF2, /* Reg 0x28 */
+ 0x1E, /* Reg 0x29 */
+ 0x80, /* Reg 0x2A */
+ 0x14, /* Reg 0x2B */
+ 0x01, /* Reg 0x2C */
+ 0x01, /* Reg 0x2D */
+ 0x01, /* Reg 0x2E */
+ 0x01, /* Reg 0x2F */
+ 0x01, /* Reg 0x30 */
+ 0x01, /* Reg 0x31 */
+ 0x7F, /* Reg 0x32 */
+ 0x5E, /* Reg 0x33 */
+ 0x3F, /* Reg 0x34 */
+ 0xFF, /* Reg 0x35 */
+ 0xFF, /* Reg 0x36 */
+ 0xFF, /* Reg 0x37 */
+ 0x00, /* Reg 0x38 */
+ 0x77, /* Reg 0x39 */
+ 0x0F, /* Reg 0x3A */
+ 0x2D, /* Reg 0x3B */
+ };
+
+ UData_t status = MT_OK; /* Status to be returned */
+ MT2260_Info_t* pInfo = (MT2260_Info_t*) h;
+ U8Data BBVref;
+ U8Data tmpreg = 0;
+ U8Data fusereg = 0;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ status |= MT_INV_HANDLE;
+
+ /* Read the Part/Rev code from the tuner */
+ if (MT_NO_ERROR(status))
+ status |= UncheckedGet(pInfo, MT2260_PART_REV, &tmpreg);
+
+ /* MT2260 B0 */
+ if (MT_NO_ERROR(status) && (tmpreg != 0x85))
+ status |= MT_TUNER_ID_ERR; /* Wrong tuner Part/Rev code */
+
+ if (MT_NO_ERROR(status))
+ {
+ /* Initialize the tuner state. Hold off on f_in and f_LO */
+ pInfo->version = VERSION;
+ pInfo->tuner_id = pInfo->reg[MT2260_PART_REV];
+ pInfo->f_Ref = REF_FREQ;
+ pInfo->f_Step = TUNE_STEP_SIZE * 1000; /* kHz -> Hz */
+ pInfo->f_in = UHF_DEFAULT_FREQ;
+ pInfo->f_LO = UHF_DEFAULT_FREQ;
+ pInfo->f_bw = OUTPUT_BW;
+ pInfo->band = MT2260_UHF_BAND;
+ pInfo->num_regs = END_REGS;
+
+ /* Write the default values to the tuner registers. Default mode is UHF */
+ status |= MT2260_WriteSub(pInfo->hUserData,
+ pInfo->address,
+ MT2260_Init_Defaults1[0],
+ &MT2260_Init_Defaults1[1],
+ sizeof(MT2260_Init_Defaults1)/sizeof(U8Data)-1);
+
+ if (MT_NO_ERROR(status))
+ {
+ status |= MT2260_WriteSub(pInfo->hUserData,
+ pInfo->address,
+ MT2260_Init_Defaults2[0],
+ &MT2260_Init_Defaults2[1],
+ sizeof(MT2260_Init_Defaults2)/sizeof(U8Data)-1);
+ }
+ }
+
+ /* Read back all the registers from the tuner */
+ if (MT_NO_ERROR(status))
+ {
+ status |= MT2260_ReadSub(pInfo->hUserData, pInfo->address, 0, &pInfo->reg[0], END_REGS);
+ }
+
+ /*
+ ** Read the FUSE registers and set BBVref[0x33] accordingly
+ */
+ tmpreg = pInfo->reg[MT2260_RSVD_11] |= 0x03; /* FUSEen=1, FUSErd=1 */
+ if (MT_NO_ERROR(status))
+ status |= UncheckedSet(pInfo, MT2260_RSVD_11, tmpreg);
+ tmpreg &= ~(0x02); /* FUSErd=0 */
+ if (MT_NO_ERROR(status))
+ status |= UncheckedSet(pInfo, MT2260_RSVD_11, tmpreg);
+
+ /* Get and store the fuse register value */
+ if (MT_NO_ERROR(status))
+ status |= UncheckedGet(pInfo, MT2260_STATUS_5, &fusereg);
+
+ /* Use fuse register value to set BBVref */
+ if (MT_NO_ERROR(status))
+ {
+ BBVref = (((fusereg >> 6) + 2) & 0x03);
+ tmpreg = (pInfo->reg[MT2260_RSVD_33] & ~(0x60)) | (BBVref << 5);
+ status |= UncheckedSet(pInfo, MT2260_RSVD_33, tmpreg);
+ }
+
+ if (MT_NO_ERROR(status))
+ status |= Run_BB_RC_Cal2(h);
+
+ if (MT_NO_ERROR(status))
+ status |= Set_BBFilt(h);
+
+ return (status);
+}
+
+
+/****************************************************************************
+**
+** Name: MT2260_SetParam
+**
+** Description: Sets a tuning algorithm parameter.
+**
+** This function provides access to the internals of the
+** tuning algorithm. You can override many of the tuning
+** algorithm defaults using this function.
+**
+** Parameters: h - Tuner handle (returned by MT2260_Open)
+** param - Tuning algorithm parameter
+** (see enum MT2260_Param)
+** nValue - value to be set
+**
+** param Description
+** ---------------------- --------------------------------
+** MT2260_SRO_FREQ crystal frequency
+** MT2260_STEPSIZE minimum tuning step size
+** MT2260_INPUT_FREQ Center of input channel
+** MT2260_OUTPUT_BW Output channel bandwidth
+** MT2260_RF_ATTN RF attenuation (0-255)
+** MT2260_RF_EXT External control of RF atten
+** MT2260_LNA_GAIN LNA gain setting (0-15)
+** MT2260_LNA_GAIN_DECR Decrement LNA Gain (arg=min)
+** MT2260_LNA_GAIN_INCR Increment LNA Gain (arg=max)
+** MT2260_BB_ATTN Baseband attenuation (0-255)
+** MT2260_BB_EXT External control of BB atten
+** MT2260_UHF_MAXSENS Set for UHF max sensitivity mode
+** MT2260_UHF_NORMAL Set for UHF normal mode
+**
+** Usage: status |= MT2260_SetParam(hMT2260,
+** MT2260_STEPSIZE,
+** 50000);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_RANGE - Invalid parameter requested
+** or set value out of range
+** or non-writable parameter
+**
+** Dependencies: USERS MUST CALL MT2260_Open() FIRST!
+**
+** See Also: MT2260_GetParam, MT2260_Open
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+** N/A 04-26-2006 DAD Ver 1.01: Add support for 8-38.4 MHz crystals
+**
+****************************************************************************/
+UData_t MT2260_SetParam(Handle_t h,
+ MT2260_Param param,
+ UData_t nValue)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ U8Data tmpreg;
+ MT2260_Info_t* pInfo = (MT2260_Info_t*) h;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ status |= MT_INV_HANDLE;
+
+ if (MT_NO_ERROR(status))
+ {
+ switch (param)
+ {
+ /* crystal frequency */
+ case MT2260_SRO_FREQ:
+ pInfo->f_Ref = nValue;
+ if (pInfo->f_Ref < 22000000)
+ {
+ /* Turn off f_SRO divide by 2 */
+ status |= UncheckedSet(pInfo,
+ MT2260_SRO_CTRL,
+ (U8Data) (pInfo->reg[MT2260_SRO_CTRL] &= 0xFE));
+ }
+ else
+ {
+ /* Turn on f_SRO divide by 2 */
+ status |= UncheckedSet(pInfo,
+ MT2260_SRO_CTRL,
+ (U8Data) (pInfo->reg[MT2260_SRO_CTRL] |= 0x01));
+ }
+ status |= Run_BB_RC_Cal2(h);
+ if (MT_NO_ERROR(status))
+ status |= Set_BBFilt(h);
+ break;
+
+ /* minimum tuning step size */
+ case MT2260_STEPSIZE:
+ pInfo->f_Step = nValue;
+ break;
+
+ /* Width of output channel */
+ case MT2260_OUTPUT_BW:
+ pInfo->f_bw = nValue;
+ status |= Set_BBFilt(h);
+ break;
+
+ /* BB attenuation (0-255) */
+ case MT2260_BB_ATTN:
+ if (nValue > 255)
+ status |= MT_ARG_RANGE;
+ else
+ {
+ UData_t BBA_Stage1;
+ UData_t BBA_Stage2;
+ UData_t BBA_Stage3;
+
+ BBA_Stage3 = (nValue > 102) ? 103 : nValue + 1;
+ BBA_Stage2 = (nValue > 175) ? 75 : nValue + 2 - BBA_Stage3;
+ BBA_Stage1 = (nValue > 176) ? nValue - 175 : 1;
+ pInfo->reg[MT2260_RSVD_2C] = (U8Data) BBA_Stage1;
+ pInfo->reg[MT2260_RSVD_2D] = (U8Data) BBA_Stage2;
+ pInfo->reg[MT2260_RSVD_2E] = (U8Data) BBA_Stage3;
+ pInfo->reg[MT2260_RSVD_2F] = (U8Data) BBA_Stage1;
+ pInfo->reg[MT2260_RSVD_30] = (U8Data) BBA_Stage2;
+ pInfo->reg[MT2260_RSVD_31] = (U8Data) BBA_Stage3;
+ status |= MT2260_WriteSub(pInfo->hUserData,
+ pInfo->address,
+ MT2260_RSVD_2C,
+ &pInfo->reg[MT2260_RSVD_2C],
+ 6);
+ }
+ break;
+
+ /* RF attenuation (0-255) */
+ case MT2260_RF_ATTN:
+ if (nValue > 255)
+ status |= MT_ARG_RANGE;
+ else
+ status |= UncheckedSet(pInfo, MT2260_RSVD_1F, (U8Data) nValue);
+ break;
+
+ /* RF external / internal atten control */
+ case MT2260_RF_EXT:
+ if (nValue == 0)
+ tmpreg = pInfo->reg[MT2260_GPO] &= ~0x40;
+ else
+ tmpreg = pInfo->reg[MT2260_GPO] |= 0x40;
+ status |= UncheckedSet(pInfo, MT2260_GPO, tmpreg);
+ break;
+
+ /* LNA gain setting (0-15) */
+ case MT2260_LNA_GAIN:
+ if (nValue > 15)
+ status |= MT_ARG_RANGE;
+ else
+ {
+ tmpreg = (pInfo->reg[MT2260_IGAIN] & 0xC3) | ((U8Data)nValue << 2);
+ status |= UncheckedSet(pInfo, MT2260_IGAIN, tmpreg);
+ }
+ break;
+
+ /* Decrement LNA Gain setting, argument is min LNA Gain setting */
+ case MT2260_LNA_GAIN_DECR:
+ if (nValue > 15)
+ status |= MT_ARG_RANGE;
+ else
+ {
+ PREFETCH(MT2260_IGAIN, 1);
+ if (MT_NO_ERROR(status) && ((U8Data) ((pInfo->reg[MT2260_IGAIN] & 0x3C) >> 2) > (U8Data) nValue))
+ status |= UncheckedSet(pInfo, MT2260_IGAIN, pInfo->reg[MT2260_IGAIN] - 0x04);
+ }
+ break;
+
+ /* Increment LNA Gain setting, argument is max LNA Gain setting */
+ case MT2260_LNA_GAIN_INCR:
+ if (nValue > 15)
+ status |= MT_ARG_RANGE;
+ else
+ {
+ PREFETCH(MT2260_IGAIN, 1);
+ if (MT_NO_ERROR(status) && ((U8Data) ((pInfo->reg[MT2260_IGAIN] & 0x3C) >> 2) < (U8Data) nValue))
+ status |= UncheckedSet(pInfo, MT2260_IGAIN, pInfo->reg[MT2260_IGAIN] + 0x04);
+ }
+ break;
+
+ /* BB external / internal atten control */
+ case MT2260_BB_EXT:
+ if (nValue == 0)
+ /* tmpreg = pInfo->reg[MT2260_RSVD_33] &= ~0x08; */
+ tmpreg = pInfo->reg[MT2260_RSVD_33] &= ~0x10;
+ else
+ /* tmpreg = pInfo->reg[MT2260_RSVD_33] |= 0x08; */
+ tmpreg = pInfo->reg[MT2260_RSVD_33] |= 0x10;
+ status |= UncheckedSet(pInfo, MT2260_RSVD_33, tmpreg);
+ break;
+
+ /* Set for UHF max sensitivity mode */
+ case MT2260_UHF_MAXSENS:
+ PREFETCH(MT2260_BAND_CTRL, 1);
+ if (MT_NO_ERROR(status) && ((pInfo->reg[MT2260_BAND_CTRL] ^ 0x30) == 0x10))
+ status |= UncheckedSet(pInfo, MT2260_BAND_CTRL, pInfo->reg[MT2260_BAND_CTRL] ^ 0x30);
+ break;
+
+ /* Set for UHF normal mode */
+ case MT2260_UHF_NORMAL:
+ if (MT_NO_ERROR(status) && ((pInfo->reg[MT2260_BAND_CTRL] ^ 0x30) == 0x20))
+ status |= UncheckedSet(pInfo, MT2260_BAND_CTRL, pInfo->reg[MT2260_BAND_CTRL] ^ 0x30);
+ break;
+
+ /* These parameters are read-only */
+ case MT2260_IC_ADDR:
+ case MT2260_MAX_OPEN:
+ case MT2260_NUM_OPEN:
+ case MT2260_NUM_REGS:
+ case MT2260_INPUT_FREQ:
+ case MT2260_LO_FREQ:
+ case MT2260_RC2_VALUE:
+ case MT2260_RF_ADC:
+ case MT2260_BB_ADC:
+ case MT2260_EOP:
+ default:
+ status |= MT_ARG_RANGE;
+ }
+ }
+ return (status);
+}
+
+
+/****************************************************************************
+**
+** Name: MT2260_SetPowerModes
+**
+** Description: Sets the bits in the MT2260_ENABLES register and the
+** SROsd bit in the MT2260_SROADC_CTRL register.
+**
+** Parameters: h - Tuner handle (returned by MT2260_Open)
+** flags - Bit mask of flags to indicate enabled
+** bits.
+**
+** Usage: status = MT2260_SetPowerModes(hMT2260, flags);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: USERS MUST CALL MT2260_Open() FIRST!
+**
+** The bits in the MT2260_ENABLES register and the
+** SROsd bit are set according to the supplied flags.
+**
+** The pre-defined flags are as follows:
+** MT2260_SROen
+** MT2260_LOen
+** MT2260_ADCen
+** MT2260_PDen
+** MT2260_DCOCen
+** MT2260_BBen
+** MT2260_MIXen
+** MT2260_LNAen
+** MT2260_ALL_ENABLES
+** MT2260_NO_ENABLES
+** MT2260_SROsd
+** MT2260_SRO_NOT_sd
+**
+** ONLY the enable bits (or SROsd bit) specified in the
+** flags parameter will be set. Any flag which is not
+** included, will cause that bit to be disabled.
+**
+** The ALL_ENABLES, NO_ENABLES, and SRO_NOT_sd constants
+** are for convenience. The NO_ENABLES and SRO_NOT_sd
+** do not actually have to be included, but are provided
+** for clarity.
+**
+** See Also: MT2260_Open
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2260_SetPowerModes(Handle_t h,
+ UData_t flags)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ MT2260_Info_t* pInfo = (MT2260_Info_t*) h;
+ U8Data tmpreg;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ status |= MT_INV_HANDLE;
+
+ PREFETCH(MT2260_SRO_CTRL, 1); /* Fetch register(s) if __NO_CACHE__ defined */
+ if (MT_NO_ERROR(status))
+ {
+ if (flags & MT2260_SROsd)
+ tmpreg = pInfo->reg[MT2260_SRO_CTRL] |= 0x10; /* set the SROsd bit */
+ else
+ tmpreg = pInfo->reg[MT2260_SRO_CTRL] &= 0xEF; /* clear the SROsd bit */
+ status |= UncheckedSet(pInfo, MT2260_SRO_CTRL, tmpreg);
+ }
+
+ PREFETCH(MT2260_ENABLES, 1); /* Fetch register(s) if __NO_CACHE__ defined */
+
+ if (MT_NO_ERROR(status))
+ {
+ status |= UncheckedSet(pInfo, MT2260_ENABLES, (U8Data)(flags & 0xff));
+ }
+
+ return status;
+}
+
+
+/****************************************************************************
+** LOCAL FUNCTION - DO NOT USE OUTSIDE OF mt2260.c
+**
+** Name: UncheckedSet
+**
+** Description: Sets an MT2260 register.
+**
+** NOTE: This is a local function that performs the same
+** steps as the MT2260_SetReg function that is available
+** in the external API. It does not do any of the standard
+** error checking that the API function provides and should
+** not be called from outside this file.
+**
+** Parameters: *pInfo - Tuner control structure
+** reg - MT2260 register/subaddress location
+** val - MT2260 register/subaddress value
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_RANGE - Argument out of range
+**
+** Dependencies: USERS MUST CALL MT2260_Open() FIRST!
+**
+** Sets a register value without any preliminary checking for
+** valid handles or register numbers.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+static UData_t UncheckedSet(MT2260_Info_t* pInfo,
+ U8Data reg,
+ U8Data val)
+{
+ UData_t status; /* Status to be returned */
+
+#if defined(_DEBUG)
+ status = MT_OK;
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ status |= MT_INV_HANDLE;
+
+ if (reg >= END_REGS)
+ status |= MT_ARG_RANGE;
+
+ if (MT_IS_ERROR(status))
+ return (status);
+#endif
+
+ status = MT2260_WriteSub(pInfo->hUserData, pInfo->address, reg, &val, 1);
+
+ if (MT_NO_ERROR(status))
+ pInfo->reg[reg] = val;
+
+ return (status);
+}
+
+
+/****************************************************************************
+**
+** Name: MT2260_SetReg
+**
+** Description: Sets an MT2260 register.
+**
+** Parameters: h - Tuner handle (returned by MT2260_Open)
+** reg - MT2260 register/subaddress location
+** val - MT2260 register/subaddress value
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_RANGE - Argument out of range
+**
+** Dependencies: USERS MUST CALL MT2260_Open() FIRST!
+**
+** Use this function if you need to override a default
+** register value
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2260_SetReg(Handle_t h,
+ U8Data reg,
+ U8Data val)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ MT2260_Info_t* pInfo = (MT2260_Info_t*) h;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ status |= MT_INV_HANDLE;
+
+ if (reg >= END_REGS)
+ status |= MT_ARG_RANGE;
+
+ if (MT_NO_ERROR(status))
+ status |= UncheckedSet(pInfo, reg, val);
+
+ return (status);
+}
+
+
+/****************************************************************************
+** LOCAL FUNCTION
+**
+** Name: RoundToStep
+**
+** Description: Rounds the given frequency to the closes f_Step value
+** given the tuner ref frequency..
+**
+**
+** Parameters: freq - Frequency to be rounded (in Hz).
+** f_Step - Step size for the frequency (in Hz).
+** f_Ref - SRO frequency (in Hz).
+**
+** Returns: Rounded frequency.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-01-2006 JWS Original
+**
+****************************************************************************/
+static UData_t RoundToStep(UData_t freq, UData_t f_Step, UData_t f_ref)
+{
+ return f_ref * (freq / f_ref)
+ + f_Step * (((freq % f_ref) + (f_Step / 2)) / f_Step);
+}
+
+
+/****************************************************************************
+** LOCAL FUNCTION
+**
+** Name: CalcLOMult
+**
+** Description: Calculates Integer divider value and the numerator
+** value for LO's FracN PLL.
+**
+** This function assumes that the f_LO and f_Ref are
+** evenly divisible by f_LO_Step.
+**
+** Parameters: Div - OUTPUT: Whole number portion of the multiplier
+** FracN - OUTPUT: Fractional portion of the multiplier
+** f_LO - desired LO frequency.
+** denom - LO FracN denominator value
+** f_Ref - SRO frequency.
+**
+** Returns: Recalculated LO frequency.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-01-2006 JWS Original
+**
+****************************************************************************/
+static UData_t CalcLOMult(UData_t *Div,
+ UData_t *FracN,
+ UData_t f_LO,
+ UData_t denom,
+ UData_t f_Ref)
+{
+ UData_t a, b, i;
+ const SData_t TwoNShift = 13; /* bits to shift to obtain 2^n qty */
+ const SData_t RoundShift = 18; /* bits to shift before rounding */
+ const UData_t FracN_Scale = (f_Ref / (MAX_UDATA >> TwoNShift)) + 1;
+
+ /* Calculate the whole number portion of the divider */
+ *Div = f_LO / f_Ref;
+
+ /*
+ ** Calculate the FracN numerator 1 bit at a time. This keeps the
+ ** integer values from overflowing when large values are multiplied.
+ ** This loop calculates the fractional portion of F/20MHz accurate
+ ** to 32 bits. The 2^n factor is represented by the placement of
+ ** the value in the 32-bit word. Since we want as much accuracy
+ ** as possible, we'll leave it at the top of the word.
+ */
+ *FracN = 0;
+ a = f_LO;
+ for (i=32; i>0; --i)
+ {
+ b = 2*(a % f_Ref);
+ *FracN = (*FracN * 2) + (b >= f_Ref);
+ a = b;
+ }
+
+ /*
+ ** If the denominator is a 2^n - 1 value (the usual case) then the
+ ** value we really need is (F/20) * 2^n - (F/20). Shifting the
+ ** calculated (F/20) value to the right and subtracting produces
+ ** the desired result -- still accurate to 32 bits.
+ */
+ if ((denom & 0x01) != 0)
+ *FracN -= (*FracN >> TwoNShift);
+
+ /*
+ ** Now shift the result so that it is 1 bit bigger than we need,
+ ** use the low-order bit to round the remaining bits, and shift
+ ** to make the answer the desired size.
+ */
+ *FracN >>= RoundShift;
+ *FracN = (*FracN & 0x01) + (*FracN >> 1);
+
+ /* Check for rollover (cannot happen with 50 kHz step size) */
+ if (*FracN == (denom | 1))
+ {
+ *FracN = 0;
+ ++Div;
+ }
+
+
+ return (f_Ref * (*Div))
+ + FracN_Scale * (((f_Ref / FracN_Scale) * (*FracN)) / denom);
+}
+
+
+/****************************************************************************
+**
+** Name: MT2260_ChangeFreq
+**
+** Description: Change the tuner's tuned frequency to f_in.
+**
+** Parameters: h - Open handle to the tuner (from MT2260_Open).
+** f_in - RF input center frequency (in Hz).
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_DNC_UNLOCK - Downconverter PLL unlocked
+** MT_COMM_ERR - Serial bus communications error
+** MT_FIN_RANGE - Input freq out of range
+** MT_DNC_RANGE - Downconverter freq out of range
+**
+** Dependencies: MUST CALL MT2260_Open BEFORE MT2260_ChangeFreq!
+**
+** MT2260_ReadSub - Read byte(s) of data from the two-wire-bus
+** MT2260_WriteSub - Write byte(s) of data to the two-wire-bus
+** MT2260_Sleep - Delay execution for x milliseconds
+** MT2260_GetLocked - Checks to see if the PLL is locked
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+** N/A 04-26-2006 DAD Ver 1.01: Add support for 8-38.4 MHz crystals
+**
+****************************************************************************/
+UData_t MT2260_ChangeFreq(Handle_t h,
+ UData_t f_in) /* RF input center frequency */
+{
+ MT2260_Info_t* pInfo = (MT2260_Info_t*) h;
+
+ UData_t status = MT_OK; /* status of operation */
+ UData_t LO; /* LO register value */
+ UData_t Num; /* Numerator for LO reg. value */
+ UData_t ofLO; /* last time's LO frequency */
+ UData_t ofin; /* last time's input frequency */
+ U8Data LO_Band; /* LO Mode bits */
+ UData_t s_fRef; /* Ref Freq scaled for LO Band */
+ UData_t this_band; /* Band for the requested freq */
+ UData_t SROx2; /* SRO times 2 */
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ return MT_INV_HANDLE;
+
+ /*
+ ** Save original input and LO value
+ */
+ ofLO = pInfo->f_LO;
+ ofin = pInfo->f_in;
+
+ /*
+ ** Assign in the requested input value
+ */
+ pInfo->f_in = f_in;
+
+ /*
+ ** Get the SRO multiplier value
+ */
+ SROx2 = (2 - (pInfo->reg[MT2260_SRO_CTRL] & 0x01));
+
+ /* Request an LO that is on a step size boundary */
+ pInfo->f_LO = RoundToStep(f_in, pInfo->f_Step, pInfo->f_Ref);
+
+ if (pInfo->f_LO < MIN_UHF_FREQ)
+ {
+ status |= MT_FIN_RANGE | MT_ARG_RANGE | MT_DNC_RANGE;
+ return status; /* Does not support frequencies below MIN_UHF_FREQ */
+ }
+ else if (pInfo->f_LO <= MAX_UHF_FREQ)
+ {
+ /* UHF Band */
+ s_fRef = pInfo->f_Ref * SROx2 / 2;
+ LO_Band = 1;
+ this_band = MT2260_UHF_BAND;
+ }
+ else
+ {
+ /* L-Band */
+ s_fRef = pInfo->f_Ref * SROx2;
+ LO_Band = 3;
+ this_band = MT2260_L_BAND;
+
+ /*
+ ** Check the LO frequency range
+ */
+ if ((pInfo->f_LO < MIN_LBAND_FREQ) || (pInfo->f_LO > MAX_LBAND_FREQ))
+ status |= MT_FIN_RANGE | MT_DNC_RANGE;
+ }
+
+ /*
+ ** Calculate the LO frequencies and the values to be placed
+ ** in the tuning registers.
+ */
+ pInfo->f_LO = CalcLOMult(&LO, &Num, pInfo->f_LO, 8191, s_fRef);
+
+ /*
+ ** If we have the same LO frequencies and we're already locked,
+ ** then just return without writing any registers.
+ */
+ if ((ofLO == pInfo->f_LO)
+ && ((pInfo->reg[MT2260_STATUS_1] & 0x40) == 0x40))
+ {
+ return (status);
+ }
+
+ /*
+ ** Reset defaults here if we're tuning into a new band
+ */
+ if (MT_NO_ERROR(status))
+ {
+ if (this_band != pInfo->band)
+ {
+ MT2260_DefaultsEntry *defaults = NULL;
+ switch (this_band)
+ {
+ case MT2260_L_BAND:
+ defaults = &MT2260_LBAND_defaults[0];
+ break;
+ case MT2260_UHF_BAND:
+ defaults = &MT2260_UHF_defaults[0];
+ break;
+ default:
+ status |= MT_ARG_RANGE;
+ }
+ if ( MT_NO_ERROR(status))
+ {
+ while (defaults->data && MT_NO_ERROR(status))
+ {
+ status |= MT2260_WriteSub(pInfo->hUserData, pInfo->address, defaults->data[0], &defaults->data[1], defaults->cnt);
+ defaults++;
+ }
+ /* re-read the new registers into the cached values */
+ status |= MT2260_ReadSub(pInfo->hUserData, pInfo->address, 0, &pInfo->reg[0], END_REGS);
+ pInfo->band = this_band;
+ }
+ }
+ }
+
+ /*
+ ** Place all of the calculated values into the local tuner
+ ** register fields.
+ */
+ if (MT_NO_ERROR(status))
+ {
+ pInfo->reg[MT2260_LO_CTRL_1] = (U8Data)(Num >> 8);
+ pInfo->reg[MT2260_LO_CTRL_2] = (U8Data)(Num & 0xFF);
+ pInfo->reg[MT2260_LO_CTRL_3] = (U8Data)(LO & 0xFF);
+
+ /*
+ ** Now write out the computed register values
+ */
+ status |= MT2260_WriteSub(pInfo->hUserData, pInfo->address, MT2260_LO_CTRL_1, &pInfo->reg[MT2260_LO_CTRL_1], 3);
+
+ if (pInfo->band == MT2260_UHF_BAND)
+ {
+ U8Data CapSel = 0; /* def when f_in > all */
+ U8Data idx;
+ UData_t* XFreq;
+ SData_t ClearTune_Fuse;
+ SData_t f_offset;
+ UData_t f_in_;
+
+ PREFETCH(MT2260_BAND_CTRL, 2); /* Fetch register(s) if __NO_CACHE__ defined */
+ PREFETCH(MT2260_STATUS_5, 1); /* Fetch register(s) if __NO_CACHE__ defined */
+
+ XFreq = (pInfo->reg[MT2260_BAND_CTRL] & 0x10) ? MT2260_UHFA_XFreq : MT2260_UHF_XFreq;
+ ClearTune_Fuse = pInfo->reg[MT2260_STATUS_5] & 0x07;
+ f_offset = (10000000) * ((ClearTune_Fuse > 3) ? (ClearTune_Fuse - 8) : ClearTune_Fuse);
+ f_in_ = (f_in - f_offset) / 1000 / TUNE_STEP_SIZE;
+
+ for (idx=0; idx<16; ++idx)
+ {
+ if (XFreq[idx] >= f_in_)
+ {
+ CapSel = 16 - idx;
+ break;
+ }
+ }
+ /* If CapSel == 16, set UBANDen and set CapSel = 15 */
+ if (CapSel == 16)
+ {
+ pInfo->reg[MT2260_BAND_CTRL] |= 0x01;
+ CapSel = 15;
+ }
+ else
+ pInfo->reg[MT2260_BAND_CTRL] &= ~(0x01);
+
+ pInfo->reg[MT2260_BAND_CTRL] =
+ (pInfo->reg[MT2260_BAND_CTRL] & 0x3F) | (LO_Band << 6);
+ pInfo->reg[MT2260_CLEARTUNE] = (CapSel << 4) | CapSel;
+ /* Write UBANDsel[05] & ClearTune[06] */
+ status |= MT2260_WriteSub(pInfo->hUserData, pInfo->address, MT2260_BAND_CTRL, &pInfo->reg[MT2260_BAND_CTRL], 2);
+ }
+ }
+
+ /*
+ ** Check for LO lock
+ */
+ if (MT_NO_ERROR(status))
+ {
+ status |= MT2260_GetLocked(h);
+ }
+
+ return (status);
+}
diff --git a/api/mt2260.h b/api/mt2260.h
new file mode 100644
index 0000000..c588f63
--- /dev/null
+++ b/api/mt2260.h
@@ -0,0 +1,611 @@
+/*****************************************************************************
+**
+** Name: mt2260.h
+**
+** Description: Microtune MT2260 Tuner software interface.
+** Supports tuners with Part/Rev code: 0x85.
+**
+** Functions
+** Implemented: UData_t MT2260_Open
+** UData_t MT2260_Close
+** UData_t MT2260_ChangeFreq
+** UData_t MT2260_GetLocked
+** UData_t MT2260_GetParam
+** UData_t MT2260_GetReg
+** UData_t MT2260_GetUserData
+** UData_t MT2260_ReInit
+** UData_t MT2260_SetParam
+** UData_t MT2260_SetPowerModes
+** UData_t MT2260_SetReg
+**
+** References: AN-00010: MicroTuner Serial Interface Application Note
+** MicroTune, Inc.
+**
+** Exports: None
+**
+** Dependencies: MT_ReadSub(hUserData, IC_Addr, subAddress, *pData, cnt);
+** - Read byte(s) of data from the two-wire bus.
+**
+** MT_WriteSub(hUserData, IC_Addr, subAddress, *pData, cnt);
+** - Write byte(s) of data to the two-wire bus.
+**
+** MT_Sleep(hUserData, nMinDelayTime);
+** - Delay execution for x milliseconds
+**
+** CVS ID: $Id: mt2260.h,v 1.1 2006/05/08 22:05:01 software Exp $
+** CVS Source: $Source: /export/home/cvsroot/web05/html/software/tuners/MT2260/MT2260B0/mt2260.h,v $
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+*****************************************************************************/
+#if !defined( __MT2260_H )
+#define __MT2260_H
+
+#include "mt2260_userdef.h"
+
+#if defined( __cplusplus )
+extern "C" /* Use "C" external linkage */
+{
+#endif
+
+/*
+** Parameter for function MT2260_GetParam & MT2260_SetParam that
+** specifies the tuning algorithm parameter to be read/written.
+*/
+typedef enum
+{
+ /* tuner address set by MT2260_Open() */
+ MT2260_IC_ADDR,
+
+ /* max number of MT2260 tuners set by MT2260_CNT in mt_userdef.h */
+ MT2260_MAX_OPEN,
+
+ /* current number of open MT2260 tuners set by MT2260_Open() */
+ MT2260_NUM_OPEN,
+
+ /* Number of tuner registers */
+ MT2260_NUM_REGS,
+
+ /* crystal frequency (default: 18000000 Hz) */
+ MT2260_SRO_FREQ,
+
+ /* min tuning step size (default: 50000 Hz) */
+ MT2260_STEPSIZE,
+
+ /* input center frequency set by MT2260_ChangeFreq() */
+ MT2260_INPUT_FREQ,
+
+ /* LO Frequency set by MT2260_ChangeFreq() */
+ MT2260_LO_FREQ,
+
+ /* output channel bandwidth (default: 8000000 Hz) */
+ MT2260_OUTPUT_BW,
+
+ /* Base band filter calibration RC code (default: N/A) */
+ MT2260_RC2_VALUE,
+
+ /* Base band filter nominal cal RC code (default: N/A) */
+ MT2260_RC2_NOMINAL,
+
+ /* RF attenuator A/D readback (read-only) */
+ MT2260_RF_ADC,
+
+ /* BB attenuator A/D readback (read-only) */
+ MT2260_BB_ADC,
+
+ /* RF attenuator setting (default: varies) */
+ MT2260_RF_ATTN,
+
+ /* BB attenuator setting (default: varies) */
+ MT2260_BB_ATTN,
+
+ /* RF external / internal atten control (default: varies) */
+ MT2260_RF_EXT,
+
+ /* BB external / internal atten control (default: 1) */
+ MT2260_BB_EXT,
+
+ /* LNA gain setting (0-15) (default: varies) */
+ MT2260_LNA_GAIN,
+
+ /* Decrement LNA Gain (where arg=min LNA Gain value) */
+ MT2260_LNA_GAIN_DECR,
+
+ /* Increment LNA Gain (where arg=max LNA Gain value) */
+ MT2260_LNA_GAIN_INCR,
+
+ /* Set for UHF max sensitivity mode */
+ MT2260_UHF_MAXSENS,
+
+ /* Set for UHF normal mode */
+ MT2260_UHF_NORMAL,
+
+ MT2260_EOP /* last entry in enumerated list */
+} MT2260_Param;
+
+/*
+** Constants for Specifying Operating Band of the Tuner
+*/
+#define MT2260_VHF_BAND (0)
+#define MT2260_UHF_BAND (1)
+#define MT2260_L_BAND (2)
+
+/*
+** Constants for specifying power modes these values
+** are bit-mapped and can be added/OR'ed to indicate
+** multiple settings. Examples:
+** MT2260_SetPowerModes(h, MT2260_NO_ENABLES + MT22260_SROsd);
+** MT2260_SetPowerModes(h, MT2260_ALL_ENABLES | MT22260_SRO_NOT_sd);
+** MT2260_SetPowerModes(h, MT2260_NO_ENABLES + MT22260_SROsd);
+** MT2260_SetPowerModes(h, MT2260_SROen + MT22260_LOen + MT2260_ADCen);
+*/
+#define MT2260_SROen (0x01)
+#define MT2260_LOen (0x02)
+#define MT2260_ADCen (0x04)
+#define MT2260_PDen (0x08)
+#define MT2260_DCOCen (0x10)
+#define MT2260_BBen (0x20)
+#define MT2260_MIXen (0x40)
+#define MT2260_LNAen (0x80)
+#define MT2260_ALL_ENABLES (0xFF)
+#define MT2260_NO_ENABLES (0x00)
+#define MT2260_SROsd (0x100)
+#define MT2260_SRO_NOT_sd (0x000)
+
+/* ====== Functions which are declared in mt2260.c File ======= */
+
+/******************************************************************************
+**
+** Name: MT2260_Open
+**
+** Description: Initialize the tuner's register values.
+**
+** Usage: status = MT2260_Open(0xC0, &hMT2260, NULL);
+** if (MT_IS_ERROR(status))
+** // Check error codes for reason
+**
+** Parameters: MT2260_Addr - Serial bus address of the tuner.
+** hMT2260 - Tuner handle passed back.
+** hUserData - User-defined data, if needed for the
+** MT_ReadSub() & MT_WriteSub functions.
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_TUNER_ID_ERR - Tuner Part/Rev code mismatch
+** MT_TUNER_INIT_ERR - Tuner initialization failed
+** MT_COMM_ERR - Serial bus communications error
+** MT_ARG_NULL - Null pointer argument passed
+** MT_TUNER_CNT_ERR - Too many tuners open
+**
+** Dependencies: MT_ReadSub - Read byte(s) of data from the two-wire bus
+** MT_WriteSub - Write byte(s) of data to the two-wire bus
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+******************************************************************************/
+UData_t MT2260_Open(UData_t MT2260_Addr,
+ Handle_t* hMT2260,
+ Handle_t hUserData);
+
+
+/******************************************************************************
+**
+** Name: MT2260_Close
+**
+** Description: Release the handle to the tuner.
+**
+** Parameters: hMT2260 - Handle to the MT2260 tuner
+**
+** Usage: status = MT2260_Close(hMT2260);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: mt_errordef.h - definition of error codes
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+******************************************************************************/
+UData_t MT2260_Close(Handle_t hMT2260);
+
+
+/****************************************************************************
+**
+** Name: MT2260_ChangeFreq
+**
+** Description: Change the tuner's tuned frequency to f_in.
+**
+** Parameters: h - Open handle to the tuner (from MT2260_Open).
+** f_in - RF input center frequency (in Hz).
+**
+** Usage: status = MT2260_ChangeFreq(hMT2260, f_in);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_DNC_UNLOCK - Downconverter PLL unlocked
+** MT_COMM_ERR - Serial bus communications error
+** MT_FIN_RANGE - Input freq out of range
+** MT_DNC_RANGE - Downconverter freq out of range
+**
+** Dependencies: MUST CALL MT2260_Open BEFORE MT2260_ChangeFreq!
+**
+** MT_ReadSub - Read byte(s) of data from the two-wire-bus
+** MT_WriteSub - Write byte(s) of data to the two-wire-bus
+** MT_Sleep - Delay execution for x milliseconds
+** MT2260_GetLocked - Checks to see if the PLL is locked
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+******************************************************************************/
+UData_t MT2260_ChangeFreq(Handle_t h,
+ UData_t f_in);
+
+
+/****************************************************************************
+**
+** Name: MT2260_GetLocked
+**
+** Description: Checks to see if the PLL is locked.
+**
+** Parameters: h - Open handle to the tuner (from MT2260_Open).
+**
+** Usage: status = MT2260_GetLocked(hMT2260);
+** if (status & MT_DNC_UNLOCK)
+** // error!, PLL is unlocked
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_DNC_UNLOCK - Downconverter PLL unlocked
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: MT_ReadSub - Read byte(s) of data from the serial bus
+** MT_Sleep - Delay execution for x milliseconds
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2260_GetLocked(Handle_t h);
+
+
+/****************************************************************************
+**
+** Name: MT2260_GetParam
+**
+** Description: Gets a tuning algorithm parameter.
+**
+** This function provides access to the internals of the
+** tuning algorithm - mostly for testing purposes.
+**
+** Parameters: h - Tuner handle (returned by MT2260_Open)
+** param - Tuning algorithm parameter
+** (see enum MT2260_Param)
+** pValue - ptr to returned value
+**
+** param Description
+** ---------------------- --------------------------------
+** MT2260_IC_ADDR Serial Bus address of this tuner
+** MT2260_MAX_OPEN Max number of MT2260's that can be open
+** MT2260_NUM_OPEN Number of MT2260's currently open
+** MT2260_NUM_REGS Number of tuner registers
+** MT2260_SRO_FREQ crystal frequency
+** MT2260_STEPSIZE minimum tuning step size
+** MT2260_INPUT_FREQ input center frequency
+** MT2260_LO_FREQ LO Frequency
+** MT2260_OUTPUT_BW Output channel bandwidth
+** MT2260_RC2_VALUE Base band filter cal RC code (method 2)
+** MT2260_RF_ADC RF attenuator A/D readback
+** MT2260_RF_ATTN RF attenuation (0-255)
+** MT2260_RF_EXT External control of RF atten
+** MT2260_LNA_GAIN LNA gain setting (0-15)
+** MT2260_BB_ADC BB attenuator A/D readback
+** MT2260_BB_ATTN Baseband attenuation (0-255)
+** MT2260_BB_EXT External control of BB atten
+**
+** Usage: status |= MT2260_GetParam(hMT2260,
+** MT2260_OUTPUT_BW,
+** &f_bw);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_NULL - Null pointer argument passed
+** MT_ARG_RANGE - Invalid parameter requested
+**
+** Dependencies: USERS MUST CALL MT2260_Open() FIRST!
+**
+** See Also: MT2260_SetParam, MT2260_Open
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2260_GetParam(Handle_t h,
+ MT2260_Param param,
+ UData_t* pValue);
+
+
+/****************************************************************************
+**
+** Name: MT2260_GetReg
+**
+** Description: Gets an MT2260 register.
+**
+** Parameters: h - Tuner handle (returned by MT2260_Open)
+** reg - MT2260 register/subaddress location
+** *val - MT2260 register/subaddress value
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_NULL - Null pointer argument passed
+** MT_ARG_RANGE - Argument out of range
+**
+** Dependencies: USERS MUST CALL MT2260_Open() FIRST!
+**
+** Use this function if you need to read a register from
+** the MT2260.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2260_GetReg(Handle_t h,
+ U8Data reg,
+ U8Data* val);
+
+
+/****************************************************************************
+**
+** Name: MT2260_GetUserData
+**
+** Description: Gets the user-defined data item.
+**
+** Parameters: h - Tuner handle (returned by MT2260_Open)
+**
+** Usage: status = MT2260_GetUserData(hMT2260, &hUserData);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_NULL - Null pointer argument passed
+**
+** Dependencies: USERS MUST CALL MT2260_Open() FIRST!
+**
+** The hUserData parameter is a user-specific argument
+** that is stored internally with the other tuner-
+** specific information.
+**
+** For example, if additional arguments are needed
+** for the user to identify the device communicating
+** with the tuner, this argument can be used to supply
+** the necessary information.
+**
+** The hUserData parameter is initialized in the tuner's
+** Open function to NULL.
+**
+** See Also: MT2260_SetUserData, MT2260_Open
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2260_GetUserData(Handle_t h,
+ Handle_t* hUserData);
+
+
+/******************************************************************************
+**
+** Name: MT2260_ReInit
+**
+** Description: Initialize the tuner's register values.
+**
+** Parameters: h - Tuner handle (returned by MT2260_Open)
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_TUNER_ID_ERR - Tuner Part/Rev code mismatch
+** MT_TUNER_INIT_ERR - Tuner initialization failed
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_COMM_ERR - Serial bus communications error
+**
+** Dependencies: MT_ReadSub - Read byte(s) of data from the two-wire bus
+** MT_WriteSub - Write byte(s) of data to the two-wire bus
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+******************************************************************************/
+UData_t MT2260_ReInit(Handle_t h);
+
+
+/****************************************************************************
+**
+** Name: MT2260_SetParam
+**
+** Description: Sets a tuning algorithm parameter.
+**
+** This function provides access to the internals of the
+** tuning algorithm. You can override many of the tuning
+** algorithm defaults using this function.
+**
+** Parameters: h - Tuner handle (returned by MT2260_Open)
+** param - Tuning algorithm parameter
+** (see enum MT2260_Param)
+** nValue - value to be set
+**
+** param Description
+** ---------------------- --------------------------------
+** MT2260_SRO_FREQ crystal frequency
+** MT2260_STEPSIZE minimum tuning step size
+** MT2260_INPUT_FREQ Center of input channel
+** MT2260_OUTPUT_BW Output channel bandwidth
+** MT2260_RF_ATTN RF attenuation (0-255)
+** MT2260_RF_EXT External control of RF atten
+** MT2260_LNA_GAIN LNA gain setting (0-15)
+** MT2260_LNA_GAIN_DECR Decrement LNA Gain (arg=min)
+** MT2260_LNA_GAIN_INCR Increment LNA Gain (arg=max)
+** MT2260_BB_ATTN Baseband attenuation (0-255)
+** MT2260_BB_EXT External control of BB atten
+** MT2260_UHF_MAXSENS Set for UHF max sensitivity mode
+** MT2260_UHF_NORMAL Set for UHF normal mode
+**
+** Usage: status |= MT2260_SetParam(hMT2260,
+** MT2260_STEPSIZE,
+** 50000);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_NULL - Null pointer argument passed
+** MT_ARG_RANGE - Invalid parameter requested
+** or set value out of range
+** or non-writable parameter
+**
+** Dependencies: USERS MUST CALL MT2260_Open() FIRST!
+**
+** See Also: MT2260_GetParam, MT2260_Open
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2260_SetParam(Handle_t h,
+ MT2260_Param param,
+ UData_t nValue);
+
+
+/****************************************************************************
+**
+** Name: MT2260_SetPowerModes
+**
+** Description: Sets the bits in the MT2260_ENABLES register and the
+** SROsd bit in the MT2260_SROADC_CTRL register.
+**
+** Parameters: h - Tuner handle (returned by MT2260_Open)
+** flags - Bit mask of flags to indicate enabled
+** bits.
+**
+** Usage: status = MT2260_SetPowerModes(hMT2260, flags);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: USERS MUST CALL MT2260_Open() FIRST!
+**
+** The bits in the MT2260_ENABLES register and the
+** SROsd bit are set according to the supplied flags.
+**
+** The pre-defined flags are as follows:
+** MT2260_SROen
+** MT2260_LOen
+** MT2260_ADCen
+** MT2260_PDen
+** MT2260_DCOCen
+** MT2260_BBen
+** MT2260_MIXen
+** MT2260_LNAen
+** MT2260_ALL_ENABLES
+** MT2260_NO_ENABLES
+** MT2260_SROsd
+** MT2260_SRO_NOT_sd
+**
+** ONLY the enable bits (or SROsd bit) specified in the
+** flags parameter will be set. Any flag which is not
+** included, will cause that bit to be disabled.
+**
+** The ALL_ENABLES, NO_ENABLES, and SRO_NOT_sd constants
+** are for convenience. The NO_ENABLES and SRO_NOT_sd
+** do not actually have to be included, but are provided
+** for clarity.
+**
+** See Also: MT2260_Open
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2260_SetPowerModes(Handle_t h,
+ UData_t flags);
+
+
+/****************************************************************************
+**
+** Name: MT2260_SetReg
+**
+** Description: Sets an MT2260 register.
+**
+** Parameters: h - Tuner handle (returned by MT2260_Open)
+** reg - MT2260 register/subaddress location
+** val - MT2260 register/subaddress value
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_RANGE - Argument out of range
+**
+** Dependencies: USERS MUST CALL MT2260_Open() FIRST!
+**
+** Use this function if you need to override a default
+** register value
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2260_SetReg(Handle_t h,
+ U8Data reg,
+ U8Data val);
+
+
+#if defined( __cplusplus )
+}
+#endif
+
+#endif \ No newline at end of file
diff --git a/api/mt2260_userdef.c b/api/mt2260_userdef.c
new file mode 100644
index 0000000..cf7e534
--- /dev/null
+++ b/api/mt2260_userdef.c
@@ -0,0 +1,221 @@
+/*****************************************************************************
+**
+** Name: mt_userdef.c
+**
+** Description: User-defined MicroTuner software interface
+**
+** Functions
+** Requiring
+** Implementation: MT_WriteSub
+** MT_ReadSub
+** MT_Sleep
+**
+** References: None
+**
+** Exports: None
+**
+** CVS ID: $Id: mt_userdef.c,v 1.1 2006/05/08 22:05:01 software Exp $
+** CVS Source: $Source: /export/home/cvsroot/web05/html/software/tuners/MT2260/MT2260B0/mt_userdef.c,v $
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 03-25-2004 DAD Original
+** N/A 12-06-2004 JWS Multi-tuner support
+**
+*****************************************************************************/
+#include "mt2260_userdef.h"
+
+
+/*****************************************************************************
+**
+** Name: MT_WriteSub
+**
+** Description: Write values to device using a two-wire serial bus.
+**
+** Parameters: handle - User-specific I/O parameter that was
+** passed to tuner's Open function.
+** addr - device serial bus address (value passed
+** as parameter to MTxxxx_Open)
+** subAddress - serial bus sub-address (Register Address)
+** data - pointer to the Data to be written to the
+** device
+** cnt - number of bytes/registers to be written
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** user-defined
+**
+** Notes: This is a callback function that is called from the
+** the tuning algorithm. You MUST provide code for this
+** function to write data using the tuner's 2-wire serial
+** bus.
+**
+** The handle parameter is a user-specific argument.
+** If additional arguments are needed for the user's
+** serial bus read/write functions, this argument can be
+** used to supply the necessary information.
+** The handle parameter is initialized in the tuner's Open
+** function.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 03-25-2004 DAD Original
+**
+*****************************************************************************/
+UData_t MT2260_WriteSub(Handle_t handle,
+ UData_t addr,
+ U8Data subAddress,
+ U8Data *data,
+ UData_t cnt)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ /*
+ ** ToDo: Add code here to implement a serial-bus write
+ ** operation to the MTxxxx tuner. If successful,
+ ** return MT_OK.
+ */
+ PUserData userData;
+ U8Data * buffer;
+ U8Data i;
+ U8Data blocks;
+ U8Data remains;
+
+ blocks = (U8Data) (cnt / 17);
+ remains = (U8Data) (cnt % 17);
+
+ userData = (PUserData) handle;
+
+ buffer = data;
+ for (i = 0; i < blocks; i++) {
+ status = Standard_writeTunerRegisters (userData->demodulator, userData->chip, (unsigned short)subAddress + (unsigned short)i * 17, 17, buffer);
+ if (status) goto exit;
+
+ buffer += 17;
+ }
+
+ if (remains)
+ {
+ status = Standard_writeTunerRegisters (userData->demodulator, userData->chip, (unsigned short)subAddress + (unsigned short)i * 17, remains, buffer);
+ if (status) goto exit;
+ }
+
+exit:
+ return (status);
+}
+
+
+/*****************************************************************************
+**
+** Name: MT_ReadSub
+**
+** Description: Read values from device using a two-wire serial bus.
+**
+** Parameters: handle - User-specific I/O parameter that was
+** passed to tuner's Open function.
+** addr - device serial bus address (value passed
+** as parameter to MTxxxx_Open)
+** subAddress - serial bus sub-address (Register Address)
+** data - pointer to the Data to be written to the
+** device
+** cnt - number of bytes/registers to be written
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** user-defined
+**
+** Notes: This is a callback function that is called from the
+** the tuning algorithm. You MUST provide code for this
+** function to read data using the tuner's 2-wire serial
+** bus.
+**
+** The handle parameter is a user-specific argument.
+** If additional arguments are needed for the user's
+** serial bus read/write functions, this argument can be
+** used to supply the necessary information.
+** The handle parameter is initialized in the tuner's Open
+** function.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 03-25-2004 DAD Original
+**
+*****************************************************************************/
+UData_t MT2260_ReadSub(Handle_t handle,
+ UData_t addr,
+ U8Data subAddress,
+ U8Data *data,
+ UData_t cnt)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+
+ /*
+ ** ToDo: Add code here to implement a serial-bus read
+ ** operation to the MTxxxx tuner. If successful,
+ ** return MT_OK.
+ */
+ PUserData userData;
+ U8Data buffer[8];
+ U8Data i;
+
+ /*
+ ** ToDo: Add code here to implement a serial-bus read
+ ** operation to the MTxxxx tuner. If successful,
+ ** return true.
+ */
+ userData = (PUserData)handle;
+
+ for (i = 0; i < cnt; i++)
+ {
+ status = Standard_readTunerRegisters (userData->demodulator, userData->chip, subAddress + i, (U8Data)1, &buffer[0]);
+ if (status) goto exit;
+ *(data + i) = buffer[0];
+ }
+
+exit:
+ return (status);
+}
+
+
+/*****************************************************************************
+**
+** Name: MT_Sleep
+**
+** Description: Delay execution for "nMinDelayTime" milliseconds
+**
+** Parameters: handle - User-specific I/O parameter that was
+** passed to tuner's Open function.
+** nMinDelayTime - Delay time in milliseconds
+**
+** Returns: None.
+**
+** Notes: This is a callback function that is called from the
+** the tuning algorithm. You MUST provide code that
+** blocks execution for the specified period of time.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 03-25-2004 DAD Original
+**
+*****************************************************************************/
+void MT2260_Sleep(Handle_t handle,
+ UData_t nMinDelayTime)
+{
+ PUserData userData;
+ /*
+ ** ToDo: Add code here to implement a OS blocking
+ ** for a period of "nMinDelayTime" milliseconds.
+ */
+ userData = (PUserData)handle;
+
+ User_delay (userData->demodulator, (unsigned long) nMinDelayTime);
+}
diff --git a/api/mt2260_userdef.h b/api/mt2260_userdef.h
new file mode 100644
index 0000000..1a1029a
--- /dev/null
+++ b/api/mt2260_userdef.h
@@ -0,0 +1,250 @@
+/*****************************************************************************
+**
+** Name: mt_userdef.h
+**
+** Description: User-defined data types needed by MicroTuner source code.
+**
+** Customers must provide the code for these functions
+** in the file "mt_userdef.c".
+**
+** Customers must verify that the typedef's in the
+** "Data Types" section are correct for their platform.
+**
+** Functions
+** Requiring
+** Implementation: MT_WriteSub
+** MT_ReadSub
+** MT_Sleep
+**
+** References: None
+**
+** Exports: None
+**
+** CVS ID: $Id: mt_userdef.h,v 1.1 2006/05/08 22:05:01 software Exp $
+** CVS Source: $Source: /export/home/cvsroot/web05/html/software/tuners/MT2260/MT2260B0/mt_userdef.h,v $
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 03-25-2004 DAD Original
+** 082 12-06-2004 JWS Multi-tuner support - requires MTxxxx_CNT
+** declarations
+**
+*****************************************************************************/
+#if !defined( __MT_USERDEF_H )
+#define __MT_USERDEF_H
+
+#include "mt_errordef.h"
+#include "standard.h"
+
+#if defined( __cplusplus )
+extern "C" /* Use "C" external linkage */
+{
+#endif
+
+/*
+** Data Types
+*/
+typedef unsigned char U8Data; /* type corresponds to 8 bits */
+typedef unsigned long UData_t; /* type must be at least 32 bits */
+typedef int SData_t; /* type must be at least 32 bits */
+typedef void * Handle_t; /* memory pointer type */
+typedef double FData_t; /* floating point data type */
+
+typedef struct {
+ Byte chip;
+ Demodulator* demodulator;
+} UserData, *PUserData;
+
+#define AF901X_CAN_TUNER 0x1
+#define AF901X_SILICON_TUNER 0x2
+
+#define MAX_UDATA (4294967295) /* max value storable in UData_t */
+
+/*
+** Define an MTxxxx_CNT macro for each type of tuner that will be built
+** into your application (e.g., MT2121, MT2060). MT_TUNER_CNT
+** must be set to the SUM of all of the MTxxxx_CNT macros.
+**
+** #define MT2050_CNT (1)
+** #define MT2060_CNT (2)
+** #define MT2111_CNT (1)
+** #define MT2121_CNT (3)
+*/
+
+#define MT2260_CNT (2)
+#if !defined( MT_TUNER_CNT )
+#define MT_TUNER_CNT (2) /* total num of MicroTuner tuners */
+#endif
+
+/*
+** Optional user-defined Error/Info Codes (examples below)
+**
+** This is the area where you can define user-specific error/info return
+** codes to be returned by any of the functions you are responsible for
+** writing such as MT_WriteSub() and MT_ReadSub. There are four bits
+** available in the status field for your use. When set, these
+** bits will be returned in the status word returned by any tuner driver
+** call. If you OR in the MT_ERROR bit as well, the tuner driver code
+** will treat the code as an error.
+**
+** The following are a few examples of errors you can provide.
+**
+** Example 1:
+** You might check to see the hUserData handle is correct and issue
+** MY_USERDATA_INVALID which would be defined like this:
+**
+** #define MY_USERDATA_INVALID (MT_USER_ERROR | MT_USER_DEFINED1)
+**
+**
+** Example 2:
+** You might be able to provide more descriptive two-wire bus errors:
+**
+** #define NO_ACK (MT_USER_ERROR | MT_USER_DEFINED1)
+** #define NO_NACK (MT_USER_ERROR | MT_USER_DEFINED2)
+** #define BUS_BUSY (MT_USER_ERROR | MT_USER_DEFINED3)
+**
+**
+** Example 3:
+** You can also provide information (non-error) feedback:
+**
+** #define MY_INFO_1 (MT_USER_DEFINED1)
+**
+**
+** Example 4:
+** You can combine the fields together to make a multi-bit field.
+** This one can provide the tuner number based off of the addr
+** passed to MT_WriteSub or MT_ReadSub. It assumes that
+** MT_USER_DEFINED4 through MT_USER_DEFINED1 are contiguously. If
+** TUNER_NUM were OR'ed into the status word on an error, you could
+** use this to identify which tuner had the problem (and whether it
+** was during a read or write operation).
+**
+** #define TUNER_NUM ((addr & 0x07) >> 1) << MT_USER_SHIFT
+**
+*/
+
+/*****************************************************************************
+**
+** Name: MT_WriteSub
+**
+** Description: Write values to device using a two-wire serial bus.
+**
+** Parameters: hUserData - User-specific I/O parameter that was
+** passed to tuner's Open function.
+** addr - device serial bus address (value passed
+** as parameter to MTxxxx_Open)
+** subAddress - serial bus sub-address (Register Address)
+** pData - pointer to the Data to be written to the
+** device
+** cnt - number of bytes/registers to be written
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** user-defined
+**
+** Notes: This is a callback function that is called from the
+** the tuning algorithm. You MUST provide code for this
+** function to write data using the tuner's 2-wire serial
+** bus.
+**
+** The hUserData parameter is a user-specific argument.
+** If additional arguments are needed for the user's
+** serial bus read/write functions, this argument can be
+** used to supply the necessary information.
+** The hUserData parameter is initialized in the tuner's Open
+** function.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 03-25-2004 DAD Original
+**
+*****************************************************************************/
+UData_t MT2260_WriteSub(Handle_t hUserData,
+ UData_t addr,
+ U8Data subAddress,
+ U8Data *pData,
+ UData_t cnt);
+
+
+/*****************************************************************************
+**
+** Name: MT_ReadSub
+**
+** Description: Read values from device using a two-wire serial bus.
+**
+** Parameters: hUserData - User-specific I/O parameter that was
+** passed to tuner's Open function.
+** addr - device serial bus address (value passed
+** as parameter to MTxxxx_Open)
+** subAddress - serial bus sub-address (Register Address)
+** pData - pointer to the Data to be written to the
+** device
+** cnt - number of bytes/registers to be written
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** user-defined
+**
+** Notes: This is a callback function that is called from the
+** the tuning algorithm. You MUST provide code for this
+** function to read data using the tuner's 2-wire serial
+** bus.
+**
+** The hUserData parameter is a user-specific argument.
+** If additional arguments are needed for the user's
+** serial bus read/write functions, this argument can be
+** used to supply the necessary information.
+** The hUserData parameter is initialized in the tuner's Open
+** function.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 03-25-2004 DAD Original
+**
+*****************************************************************************/
+UData_t MT2260_ReadSub(Handle_t hUserData,
+ UData_t addr,
+ U8Data subAddress,
+ U8Data *pData,
+ UData_t cnt);
+
+
+/*****************************************************************************
+**
+** Name: MT_Sleep
+**
+** Description: Delay execution for "nMinDelayTime" milliseconds
+**
+** Parameters: hUserData - User-specific I/O parameter that was
+** passed to tuner's Open function.
+** nMinDelayTime - Delay time in milliseconds
+**
+** Returns: None.
+**
+** Notes: This is a callback function that is called from the
+** the tuning algorithm. You MUST provide code that
+** blocks execution for the specified period of time.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 03-25-2004 DAD Original
+**
+*****************************************************************************/
+void MT2260_Sleep(Handle_t hUserData,
+ UData_t nMinDelayTime);
+
+#if defined( __cplusplus )
+}
+#endif
+
+#endif \ No newline at end of file
diff --git a/api/mt2266.c b/api/mt2266.c
new file mode 100644
index 0000000..4cdc225
--- /dev/null
+++ b/api/mt2266.c
@@ -0,0 +1,2368 @@
+/*****************************************************************************
+**
+** Name: mt2266.c
+**
+** Copyright 2007 Microtune, Inc. All Rights Reserved
+**
+** This source code file contains confidential information and/or trade
+** secrets of Microtune, Inc. or its affiliates and is subject to the
+** terms of your confidentiality agreement with Microtune, Inc. or one of
+** its affiliates, as applicable.
+**
+*****************************************************************************/
+
+/*****************************************************************************
+**
+** Name: mt2266.c
+**
+** Description: Microtune MT2266 Tuner software interface.
+** Supports tuners with Part/Rev code: 0x85.
+**
+** Functions
+** Implemented: UData_t MT2266_Open
+** UData_t MT2266_Close
+** UData_t MT2266_ChangeFreq
+** UData_t MT2266_GetLocked
+** UData_t MT2266_GetParam
+** UData_t MT2266_GetReg
+** UData_t MT2266_GetUHFXFreqs
+** UData_t MT2266_GetUserData
+** UData_t MT2266_ReInit
+** UData_t MT2266_SetParam
+** UData_t MT2266_SetPowerModes
+** UData_t MT2266_SetReg
+** UData_t MT2266_SetUHFXFreqs
+**
+** References: AN-00010: MicroTuner Serial Interface Application Note
+** MicroTune, Inc.
+**
+** Exports: None
+**
+** Dependencies: MT2266_ReadSub(hUserData, IC_Addr, subAddress, *pData, cnt);
+** - Read byte(s) of data from the two-wire bus.
+**
+** MT2266_WriteSub(hUserData, IC_Addr, subAddress, *pData, cnt);
+** - Write byte(s) of data to the two-wire bus.
+**
+** MT_Sleep(hUserData, nMinDelayTime);
+** - Delay execution for x milliseconds
+**
+** CVS ID: $Id: mt2266.c,v 1.5 2007/10/02 18:43:17 software Exp $
+** CVS Source: $Source: /export/home/cvsroot/software/tuners/MT2266/mt2266.c,v $
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+** N/A 06-08-2006 JWS Ver 1.01: Corrected problem with tuner ID check
+** N/A 11-01-2006 RSK Ver 1.02: Adding multiple-filter support
+** as well as Get/Set functions.
+** N/A 11-29-2006 DAD Ver 1.03: Parenthesis clarification for gcc
+** N/A 12-20-2006 RSK Ver 1.04: Adding fLO_FractionalTerm() usage.
+** 118 05-09-2007 RSK Ver 1.05: Adding Standard MTxxxx_Tune() API.
+**
+*****************************************************************************/
+#include "mt2266.h"
+//#include <stdlib.h> /* for NULL */ // for Linux
+
+/* Version of this module */
+#define VERSION 10005 /* Version 01.05 */
+
+
+#ifndef MT2266_CNT
+#error You must define MT2266_CNT in the "mt_userdef.h" file
+#endif
+
+/*
+** Normally, the "reg" array in the tuner structure is used as a cache
+** containing the current value of the tuner registers. If the user's
+** application MUST change tuner registers without using the MT2266_SetReg
+** routine provided, he may compile this code with the __NO_CACHE__
+** variable defined.
+** The PREFETCH macro will insert code code to re-read tuner registers if
+** __NO_CACHE__ is defined. If it is not defined (normal) then PREFETCH
+** does nothing.
+*/
+
+#if defined(__NO_CACHE__)
+#define PREFETCH(var, cnt) \
+ if (MT_NO_ERROR(status)) \
+ status |= MT2266_ReadSub(pInfo->hUserData, pInfo->address, (var), &pInfo->reg[(var)], (cnt));
+#else
+#define PREFETCH(var, cnt)
+#endif
+
+
+
+/*
+** Two-wire serial bus subaddresses of the tuner registers.
+** Also known as the tuner's register addresses.
+*/
+static enum MT2266_Register_Offsets
+{
+ MT2266_PART_REV = 0, /* 0x00 */
+ MT2266_LO_CTRL_1, /* 0x01 */
+ MT2266_LO_CTRL_2, /* 0x02 */
+ MT2266_LO_CTRL_3, /* 0x03 */
+ MT2266_SMART_ANT, /* 0x04 */
+ MT2266_BAND_CTRL, /* 0x05 */
+ MT2266_CLEARTUNE, /* 0x06 */
+ MT2266_IGAIN, /* 0x07 */
+ MT2266_BBFILT_1, /* 0x08 */
+ MT2266_BBFILT_2, /* 0x09 */
+ MT2266_BBFILT_3, /* 0x0A */
+ MT2266_BBFILT_4, /* 0x0B */
+ MT2266_BBFILT_5, /* 0x0C */
+ MT2266_BBFILT_6, /* 0x0D */
+ MT2266_BBFILT_7, /* 0x0E */
+ MT2266_BBFILT_8, /* 0x0F */
+ MT2266_RCC_CTRL, /* 0x10 */
+ MT2266_RSVD_11, /* 0x11 */
+ MT2266_STATUS_1, /* 0x12 */
+ MT2266_STATUS_2, /* 0x13 */
+ MT2266_STATUS_3, /* 0x14 */
+ MT2266_STATUS_4, /* 0x15 */
+ MT2266_STATUS_5, /* 0x16 */
+ MT2266_SRO_CTRL, /* 0x17 */
+ MT2266_RSVD_18, /* 0x18 */
+ MT2266_RSVD_19, /* 0x19 */
+ MT2266_RSVD_1A, /* 0x1A */
+ MT2266_RSVD_1B, /* 0x1B */
+ MT2266_ENABLES, /* 0x1C */
+ MT2266_RSVD_1D, /* 0x1D */
+ MT2266_RSVD_1E, /* 0x1E */
+ MT2266_RSVD_1F, /* 0x1F */
+ MT2266_GPO, /* 0x20 */
+ MT2266_RSVD_21, /* 0x21 */
+ MT2266_RSVD_22, /* 0x22 */
+ MT2266_RSVD_23, /* 0x23 */
+ MT2266_RSVD_24, /* 0x24 */
+ MT2266_RSVD_25, /* 0x25 */
+ MT2266_RSVD_26, /* 0x26 */
+ MT2266_RSVD_27, /* 0x27 */
+ MT2266_RSVD_28, /* 0x28 */
+ MT2266_RSVD_29, /* 0x29 */
+ MT2266_RSVD_2A, /* 0x2A */
+ MT2266_RSVD_2B, /* 0x2B */
+ MT2266_RSVD_2C, /* 0x2C */
+ MT2266_RSVD_2D, /* 0x2D */
+ MT2266_RSVD_2E, /* 0x2E */
+ MT2266_RSVD_2F, /* 0x2F */
+ MT2266_RSVD_30, /* 0x30 */
+ MT2266_RSVD_31, /* 0x31 */
+ MT2266_RSVD_32, /* 0x32 */
+ MT2266_RSVD_33, /* 0x33 */
+ MT2266_RSVD_34, /* 0x34 */
+ MT2266_RSVD_35, /* 0x35 */
+ MT2266_RSVD_36, /* 0x36 */
+ MT2266_RSVD_37, /* 0x37 */
+ MT2266_RSVD_38, /* 0x38 */
+ MT2266_RSVD_39, /* 0x39 */
+ MT2266_RSVD_3A, /* 0x3A */
+ MT2266_RSVD_3B, /* 0x3B */
+ MT2266_RSVD_3C, /* 0x3C */
+ END_REGS
+};
+
+/*
+** DefaultsEntry points to an array of U8Data used to initialize
+** various registers (the first byte is the starting subaddress)
+** and a count of the bytes (including subaddress) in the array.
+**
+** DefaultsList is an array of DefaultsEntry elements terminated
+** by an entry with a NULL pointer for the data array.
+*/
+typedef struct MT2266_DefaultsEntryTag
+{
+ U8Data *data;
+ UData_t cnt;
+} MT2266_DefaultsEntry;
+
+typedef MT2266_DefaultsEntry MT2266_DefaultsList[];
+
+#define DEF_LIST_ENTRY(a) {a, sizeof(a)/sizeof(U8Data) - 1}
+#define END_DEF_LIST {0,0}
+
+/*
+** Constants used by the tuning algorithm
+*/
+ /* REF_FREQ is now the actual crystal frequency */
+#define REF_FREQ (30000000UL) /* Reference oscillator Frequency (in Hz) */
+#define TUNE_STEP_SIZE (50UL) /* Tune in steps of 50 kHz */
+#define MIN_UHF_FREQ (350000000UL) /* Minimum UHF frequency (in Hz) */
+#define MAX_UHF_FREQ (900000000UL) /* Maximum UHF frequency (in Hz) */
+#define MIN_VHF_FREQ (174000000UL) /* Minimum VHF frequency (in Hz) */
+#define MAX_VHF_FREQ (230000000UL) /* Maximum VHF frequency (in Hz) */
+#define OUTPUT_BW (8000000UL) /* Output channel bandwidth (in Hz) */
+#define UHF_DEFAULT_FREQ (600000000UL) /* Default UHF input frequency (in Hz) */
+
+
+/*
+** The number of Tuner Registers
+*/
+static const UData_t Num_Registers = END_REGS;
+
+/*
+** Crossover Frequency sets for 2 filters, without and with attenuation.
+*/
+typedef struct
+{
+ MT2266_XFreq_Set xfreq[ MT2266_NUMBER_OF_XFREQ_SETS ];
+
+} MT2266_XFreqs_t;
+
+
+MT2266_XFreqs_t MT2266_default_XFreqs =
+{
+ /* xfreq */
+ {
+ /* uhf0 */
+ { /* < 0 MHz: 15+1 */
+ 0UL, /* 0 .. 0 MHz: 15 */
+ 0UL, /* 0 .. 443 MHz: 14 */
+ 443000 / TUNE_STEP_SIZE, /* 443 .. 470 MHz: 13 */
+ 470000 / TUNE_STEP_SIZE, /* 470 .. 496 MHz: 12 */
+ 496000 / TUNE_STEP_SIZE, /* 496 .. 525 MHz: 11 */
+ 525000 / TUNE_STEP_SIZE, /* 525 .. 552 MHz: 10 */
+ 552000 / TUNE_STEP_SIZE, /* 552 .. 580 MHz: 9 */
+ 580000 / TUNE_STEP_SIZE, /* 580 .. 657 MHz: 8 */
+ 657000 / TUNE_STEP_SIZE, /* 657 .. 682 MHz: 7 */
+ 682000 / TUNE_STEP_SIZE, /* 682 .. 710 MHz: 6 */
+ 710000 / TUNE_STEP_SIZE, /* 710 .. 735 MHz: 5 */
+ 735000 / TUNE_STEP_SIZE, /* 735 .. 763 MHz: 4 */
+ 763000 / TUNE_STEP_SIZE, /* 763 .. 802 MHz: 3 */
+ 802000 / TUNE_STEP_SIZE, /* 802 .. 840 MHz: 2 */
+ 840000 / TUNE_STEP_SIZE, /* 840 .. 877 MHz: 1 */
+ 877000 / TUNE_STEP_SIZE /* 877+ MHz: 0 */
+ },
+
+ /* uhf1 */
+ { /* < 443 MHz: 15+1 */
+ 443000 / TUNE_STEP_SIZE, /* 443 .. 470 MHz: 15 */
+ 470000 / TUNE_STEP_SIZE, /* 470 .. 496 MHz: 14 */
+ 496000 / TUNE_STEP_SIZE, /* 496 .. 525 MHz: 13 */
+ 525000 / TUNE_STEP_SIZE, /* 525 .. 552 MHz: 12 */
+ 552000 / TUNE_STEP_SIZE, /* 552 .. 580 MHz: 11 */
+ 580000 / TUNE_STEP_SIZE, /* 580 .. 605 MHz: 10 */
+ 605000 / TUNE_STEP_SIZE, /* 605 .. 632 MHz: 9 */
+ 632000 / TUNE_STEP_SIZE, /* 632 .. 657 MHz: 8 */
+ 657000 / TUNE_STEP_SIZE, /* 657 .. 682 MHz: 7 */
+ 682000 / TUNE_STEP_SIZE, /* 682 .. 710 MHz: 6 */
+ 710000 / TUNE_STEP_SIZE, /* 710 .. 735 MHz: 5 */
+ 735000 / TUNE_STEP_SIZE, /* 735 .. 763 MHz: 4 */
+ 763000 / TUNE_STEP_SIZE, /* 763 .. 802 MHz: 3 */
+ 802000 / TUNE_STEP_SIZE, /* 802 .. 840 MHz: 2 */
+ 840000 / TUNE_STEP_SIZE, /* 840 .. 877 MHz: 1 */
+ 877000 / TUNE_STEP_SIZE /* 877+ MHz: 0 */
+ },
+
+ /* uhf0_a */
+ { /* < 0 MHz: 15+1 */
+ 0UL, /* 0 .. 0 MHz: 15 */
+ 0UL, /* 0 .. 442 MHz: 14 */
+ 442000 / TUNE_STEP_SIZE, /* 442 .. 472 MHz: 13 */
+ 472000 / TUNE_STEP_SIZE, /* 472 .. 505 MHz: 12 */
+ 505000 / TUNE_STEP_SIZE, /* 505 .. 535 MHz: 11 */
+ 535000 / TUNE_STEP_SIZE, /* 535 .. 560 MHz: 10 */
+ 560000 / TUNE_STEP_SIZE, /* 560 .. 593 MHz: 9 */
+ 593000 / TUNE_STEP_SIZE, /* 593 .. 673 MHz: 8 */
+ 673000 / TUNE_STEP_SIZE, /* 673 .. 700 MHz: 7 */
+ 700000 / TUNE_STEP_SIZE, /* 700 .. 727 MHz: 6 */
+ 727000 / TUNE_STEP_SIZE, /* 727 .. 752 MHz: 5 */
+ 752000 / TUNE_STEP_SIZE, /* 752 .. 783 MHz: 4 */
+ 783000 / TUNE_STEP_SIZE, /* 783 .. 825 MHz: 3 */
+ 825000 / TUNE_STEP_SIZE, /* 825 .. 865 MHz: 2 */
+ 865000 / TUNE_STEP_SIZE, /* 865 .. 905 MHz: 1 */
+ 905000 / TUNE_STEP_SIZE /* 905+ MHz: 0 */
+ },
+
+ /* uhf1_a */
+ { /* < 442 MHz: 15+1 */
+ 442000 / TUNE_STEP_SIZE, /* 442 .. 472 MHz: 15 */
+ 472000 / TUNE_STEP_SIZE, /* 472 .. 505 MHz: 14 */
+ 505000 / TUNE_STEP_SIZE, /* 505 .. 535 MHz: 13 */
+ 535000 / TUNE_STEP_SIZE, /* 535 .. 560 MHz: 12 */
+ 560000 / TUNE_STEP_SIZE, /* 560 .. 593 MHz: 11 */
+ 593000 / TUNE_STEP_SIZE, /* 593 .. 620 MHz: 10 */
+ 620000 / TUNE_STEP_SIZE, /* 620 .. 647 MHz: 9 */
+ 647000 / TUNE_STEP_SIZE, /* 647 .. 673 MHz: 8 */
+ 673000 / TUNE_STEP_SIZE, /* 673 .. 700 MHz: 7 */
+ 700000 / TUNE_STEP_SIZE, /* 700 .. 727 MHz: 6 */
+ 727000 / TUNE_STEP_SIZE, /* 727 .. 752 MHz: 5 */
+ 752000 / TUNE_STEP_SIZE, /* 752 .. 783 MHz: 4 */
+ 783000 / TUNE_STEP_SIZE, /* 783 .. 825 MHz: 3 */
+ 825000 / TUNE_STEP_SIZE, /* 825 .. 865 MHz: 2 */
+ 865000 / TUNE_STEP_SIZE, /* 865 .. 905 MHz: 1 */
+ 905000 / TUNE_STEP_SIZE /* 905+ MHz: 0 */
+ }
+ }
+};
+
+typedef struct
+{
+ Handle_t handle;
+ Handle_t hUserData;
+ UData_t address;
+ UData_t version;
+ UData_t tuner_id;
+ UData_t f_Ref;
+ UData_t f_Step;
+ UData_t f_in;
+ UData_t f_LO;
+ UData_t f_bw;
+ UData_t band;
+ UData_t num_regs;
+ U8Data RC2_Value;
+ U8Data RC2_Nominal;
+ U8Data reg[END_REGS];
+
+ MT2266_XFreqs_t xfreqs;
+
+} MT2266_Info_t;
+
+static UData_t nMaxTuners = MT2266_CNT;
+static MT2266_Info_t MT2266_Info[MT2266_CNT];
+static MT2266_Info_t *Avail[MT2266_CNT];
+static UData_t nOpenTuners = 0;
+
+/*
+** Constants used to write a minimal set of registers when changing bands.
+** If the user wants a total reset, they should call MT2266_Open() again.
+** Skip 01, 02, 03, 04 (get overwritten anyways)
+** Write 05
+** Skip 06 - 18
+** Write 19 (diff for L-Band)
+** Skip 1A 1B 1C
+** Write 1D - 2B
+** Skip 2C - 3C
+*/
+
+static U8Data MT2266_VHF_defaults1[] =
+{
+ 0x05, /* address 0xC0, reg 0x05 */
+ 0x04, /* Reg 0x05 LBANDen = 1 (that's right)*/
+};
+static U8Data MT2266_VHF_defaults2[] =
+{
+ 0x19, /* address 0xC0, reg 0x19 */
+ 0x61, /* Reg 0x19 CAPto = 3*/
+};
+static U8Data MT2266_VHF_defaults3[] =
+{
+ 0x1D, /* address 0xC0, reg 0x1D */
+ 0xFE, /* reg 0x1D */
+ 0x00, /* reg 0x1E */
+ 0x00, /* reg 0x1F */
+ 0xB4, /* Reg 0x20 GPO = 1*/
+ 0x03, /* Reg 0x21 LBIASen = 1, UBIASen = 1*/
+ 0xA5, /* Reg 0x22 */
+ 0xA5, /* Reg 0x23 */
+ 0xA5, /* Reg 0x24 */
+ 0xA5, /* Reg 0x25 */
+ 0x82, /* Reg 0x26 CASCM = b0001 (bits reversed)*/
+ 0xAA, /* Reg 0x27 */
+ 0xF1, /* Reg 0x28 */
+ 0x17, /* Reg 0x29 */
+ 0x80, /* Reg 0x2A MIXbiasen = 1*/
+ 0x1F, /* Reg 0x2B */
+};
+
+static MT2266_DefaultsList MT2266_VHF_defaults = {
+ DEF_LIST_ENTRY(MT2266_VHF_defaults1),
+ DEF_LIST_ENTRY(MT2266_VHF_defaults2),
+ DEF_LIST_ENTRY(MT2266_VHF_defaults3),
+ END_DEF_LIST
+};
+
+static U8Data MT2266_UHF_defaults1[] =
+{
+ 0x05, /* address 0xC0, reg 0x05 */
+ 0x52, /* Reg 0x05 */
+};
+static U8Data MT2266_UHF_defaults2[] =
+{
+ 0x19, /* address 0xC0, reg 0x19 */
+ 0x61, /* Reg 0x19 CAPto = 3*/
+};
+static U8Data MT2266_UHF_defaults3[] =
+{
+ 0x1D, /* address 0xC0, reg 0x1D */
+ 0xDC, /* Reg 0x1D */
+ 0x00, /* Reg 0x1E */
+ 0x0A, /* Reg 0x1F */
+ 0xD4, /* Reg 0x20 GPO = 1*/
+ 0x03, /* Reg 0x21 LBIASen = 1, UBIASen = 1*/
+ 0x64, /* Reg 0x22 */
+ 0x64, /* Reg 0x23 */
+ 0x64, /* Reg 0x24 */
+ 0x64, /* Reg 0x25 */
+ 0x22, /* Reg 0x26 CASCM = b0100 (bits reversed)*/
+ 0xAA, /* Reg 0x27 */
+ 0xF2, /* Reg 0x28 */
+ 0x1E, /* Reg 0x29 */
+ 0x80, /* Reg 0x2A MIXbiasen = 1*/
+ 0x14, /* Reg 0x2B */
+};
+
+static MT2266_DefaultsList MT2266_UHF_defaults = {
+ DEF_LIST_ENTRY(MT2266_UHF_defaults1),
+ DEF_LIST_ENTRY(MT2266_UHF_defaults2),
+ DEF_LIST_ENTRY(MT2266_UHF_defaults3),
+ END_DEF_LIST
+};
+
+
+static UData_t UncheckedSet(MT2266_Info_t* pInfo,
+ U8Data reg,
+ U8Data val);
+
+static UData_t UncheckedGet(MT2266_Info_t* pInfo,
+ U8Data reg,
+ U8Data* val);
+
+
+/******************************************************************************
+**
+** Name: MT2266_Open
+**
+** Description: Initialize the tuner's register values.
+**
+** Parameters: MT2266_Addr - Serial bus address of the tuner.
+** hMT2266 - Tuner handle passed back.
+** hUserData - User-defined data, if needed for the
+** MT2266_ReadSub() & MT2266_WriteSub functions.
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_TUNER_ID_ERR - Tuner Part/Rev code mismatch
+** MT_TUNER_INIT_ERR - Tuner initialization failed
+** MT_COMM_ERR - Serial bus communications error
+** MT_ARG_NULL - Null pointer argument passed
+** MT_TUNER_CNT_ERR - Too many tuners open
+**
+** Dependencies: MT2266_ReadSub - Read byte(s) of data from the two-wire bus
+** MT2266_WriteSub - Write byte(s) of data to the two-wire bus
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+** N/A 11-01-2006 RSK Ver 1.02: Initialize Crossover Tables to Default
+**
+******************************************************************************/
+UData_t MT2266_Open(UData_t MT2266_Addr,
+ Handle_t* hMT2266,
+ Handle_t hUserData)
+{
+ UData_t status = MT_OK; /* Status to be returned. */
+ SData_t i, j;
+ MT2266_Info_t* pInfo = NULL;
+
+ /* Check the argument before using */
+ if (hMT2266 == NULL)
+ return MT_ARG_NULL;
+ *hMT2266 = NULL;
+
+ /*
+ ** If this is our first tuner, initialize the address fields and
+ ** the list of available control blocks.
+ */
+ if (nOpenTuners == 0)
+ {
+ for (i=MT2266_CNT-1; i>=0; i--)
+ {
+ MT2266_Info[i].handle = NULL;
+ MT2266_Info[i].address = MAX_UDATA;
+ MT2266_Info[i].hUserData = NULL;
+
+ /* Reset the UHF Crossover Frequency tables on open/init. */
+ for (j=0; j< MT2266_NUM_XFREQS; j++ )
+ {
+ MT2266_Info[i].xfreqs.xfreq[MT2266_UHF0][j] = MT2266_default_XFreqs.xfreq[MT2266_UHF0][j];
+ MT2266_Info[i].xfreqs.xfreq[MT2266_UHF1][j] = MT2266_default_XFreqs.xfreq[MT2266_UHF1][j];
+ MT2266_Info[i].xfreqs.xfreq[MT2266_UHF0_ATTEN][j] = MT2266_default_XFreqs.xfreq[MT2266_UHF0_ATTEN][j];
+ MT2266_Info[i].xfreqs.xfreq[MT2266_UHF1_ATTEN][j] = MT2266_default_XFreqs.xfreq[MT2266_UHF1_ATTEN][j];
+ }
+
+ Avail[i] = &MT2266_Info[i];
+ }
+ }
+
+ /*
+ ** Look for an existing MT2266_State_t entry with this address.
+ */
+ for (i=MT2266_CNT-1; i>=0; i--)
+ {
+ /*
+ ** If an open'ed handle provided, we'll re-initialize that structure.
+ **
+ ** We recognize an open tuner because the address and hUserData are
+ ** the same as one that has already been opened
+ */
+ if ((MT2266_Info[i].address == MT2266_Addr) &&
+ (MT2266_Info[i].hUserData == hUserData))
+ {
+ pInfo = &MT2266_Info[i];
+ break;
+ }
+ }
+
+ /* If not found, choose an empty spot. */
+ if (pInfo == NULL)
+ {
+ /* Check to see that we're not over-allocating. */
+ if (nOpenTuners == MT2266_CNT)
+ return MT_TUNER_CNT_ERR;
+
+ /* Use the next available block from the list */
+ pInfo = Avail[nOpenTuners];
+ nOpenTuners++;
+ }
+
+ pInfo->handle = (Handle_t) pInfo;
+ pInfo->hUserData = hUserData;
+ pInfo->address = MT2266_Addr;
+
+ status |= MT2266_ReInit((Handle_t) pInfo);
+
+ if (MT_IS_ERROR(status))
+ MT2266_Close((Handle_t) pInfo);
+ else
+ *hMT2266 = pInfo->handle;
+
+ return (status);
+}
+
+
+static UData_t IsValidHandle(MT2266_Info_t* handle)
+{
+ return ((handle != NULL) && (handle->handle == handle)) ? 1 : 0;
+}
+
+
+/******************************************************************************
+**
+** Name: MT2266_Close
+**
+** Description: Release the handle to the tuner.
+**
+** Parameters: hMT2266 - Handle to the MT2266 tuner
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: mt_errordef.h - definition of error codes
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+**
+******************************************************************************/
+UData_t MT2266_Close(Handle_t hMT2266)
+{
+ MT2266_Info_t* pInfo = (MT2266_Info_t*) hMT2266;
+
+ if (IsValidHandle(pInfo) == 0)
+ return (MT_INV_HANDLE);
+
+ /* Remove the tuner from our list of tuners */
+ pInfo->handle = NULL;
+ pInfo->address = MAX_UDATA;
+ pInfo->hUserData = NULL;
+ nOpenTuners--;
+ Avail[nOpenTuners] = pInfo; /* Return control block to available list */
+
+ return MT_OK;
+}
+
+
+/******************************************************************************
+**
+** Name: Run_BB_RC_Cal2
+**
+** Description: Run Base Band RC Calibration (Method 2)
+** MT2266 B0 only, others return MT_OK
+**
+** Parameters: hMT2266 - Handle to the MT2266 tuner
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: mt_errordef.h - definition of error codes
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+**
+******************************************************************************/
+static UData_t Run_BB_RC_Cal2(Handle_t h)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ U8Data tmp_rcc;
+ U8Data dumy;
+
+ MT2266_Info_t* pInfo = (MT2266_Info_t*) h;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ return (MT_INV_HANDLE);
+
+ /*
+ ** Set the crystal frequency in the calibration register
+ ** and enable RC calibration #2
+ */
+ PREFETCH(MT2266_RCC_CTRL, 1); /* Fetch register(s) if __NO_CACHE__ defined */
+ tmp_rcc = pInfo->reg[MT2266_RCC_CTRL];
+ if (pInfo->f_Ref < (36000000 /*/ TUNE_STEP_SIZE*/))
+ tmp_rcc = (tmp_rcc & 0xDF) | 0x10;
+ else
+ tmp_rcc |= 0x30;
+ status |= UncheckedSet(pInfo, MT2266_RCC_CTRL, tmp_rcc);
+
+ /* Read RC Calibration value */
+ status |= UncheckedGet(pInfo, MT2266_STATUS_4, &dumy);
+
+ /* Disable RC Cal 2 */
+ status |= UncheckedSet(pInfo, MT2266_RCC_CTRL, pInfo->reg[MT2266_RCC_CTRL] & 0xEF);
+
+ /* Store RC Cal 2 value */
+ pInfo->RC2_Value = pInfo->reg[MT2266_STATUS_4];
+
+ if (pInfo->f_Ref < (36000000 /*/ TUNE_STEP_SIZE*/))
+ pInfo->RC2_Nominal = (U8Data) ((pInfo->f_Ref + 77570) / 155139);
+ else
+ pInfo->RC2_Nominal = (U8Data) ((pInfo->f_Ref + 93077) / 186154);
+
+ return (status);
+}
+
+
+/******************************************************************************
+**
+** Name: Set_BBFilt
+**
+** Description: Set Base Band Filter bandwidth
+** Based on SRO frequency & BB RC Calibration
+** User stores channel bw as 5-8 MHz. This routine
+** calculates a 3 dB corner bw based on 1/2 the bandwidth
+** and a bandwidth related constant.
+**
+** Parameters: hMT2266 - Handle to the MT2266 tuner
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: mt_errordef.h - definition of error codes
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+**
+******************************************************************************/
+static UData_t Set_BBFilt(Handle_t h)
+{
+ UData_t f_3dB_bw;
+ U8Data BBFilt = 0;
+ U8Data Sel = 0;
+ SData_t TmpFilt;
+ SData_t i;
+ UData_t status = MT_OK; /* Status to be returned */
+
+ MT2266_Info_t* pInfo = (MT2266_Info_t*) h;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ return (MT_INV_HANDLE);
+
+ if (pInfo->RC2_Value == 0)
+ return (MT_COMM_ERR);
+
+ /*
+ ** Convert the channel bandwidth into a 3 dB bw by dividing it by 2
+ ** and subtracting 300, 250, 200, or 0 kHz based on 8, 7, 6, 5 MHz
+ ** channel bandwidth.
+ */
+ f_3dB_bw = (pInfo->f_bw / 2); /* bw -> bw/2 */
+ if (pInfo->f_bw > 7500000)
+ {
+ /* >3.75 MHz corner */
+ f_3dB_bw -= 300000;
+ Sel = 0x00;
+ TmpFilt = ((429916107 / pInfo->RC2_Value) * pInfo->RC2_Nominal) / f_3dB_bw - 81;
+ }
+ else if (pInfo->f_bw > 6500000)
+ {
+ /* >3.25 MHz .. 3.75 MHz corner */
+ f_3dB_bw -= 250000;
+ Sel = 0x00;
+ TmpFilt = ((429916107 / pInfo->RC2_Value) * pInfo->RC2_Nominal) / f_3dB_bw - 81;
+ }
+ else if (pInfo->f_bw > 5500000)
+ {
+ /* >2.75 MHz .. 3.25 MHz corner */
+ f_3dB_bw -= 200000;
+ Sel = 0x80;
+ TmpFilt = ((429916107 / pInfo->RC2_Value) * pInfo->RC2_Nominal) / f_3dB_bw - 113;
+ }
+ else
+ {
+ /* <= 2.75 MHz corner */
+ Sel = 0xC0;
+ TmpFilt = ((429916107 / pInfo->RC2_Value) * pInfo->RC2_Nominal) / f_3dB_bw - 129;
+ }
+
+ if (TmpFilt > 63)
+ TmpFilt = 63;
+ else if (TmpFilt < 0)
+ TmpFilt = 0;
+ BBFilt = ((U8Data) TmpFilt) | Sel;
+
+ for ( i = MT2266_BBFILT_1; i <= MT2266_BBFILT_8; i++ )
+ pInfo->reg[i] = BBFilt;
+
+ if (MT_NO_ERROR(status))
+ status |= MT2266_WriteSub(pInfo->hUserData,
+ pInfo->address,
+ MT2266_BBFILT_1,
+ &pInfo->reg[MT2266_BBFILT_1],
+ 8);
+
+ return (status);
+}
+
+
+/****************************************************************************
+**
+** Name: MT2266_GetLocked
+**
+** Description: Checks to see if the PLL is locked.
+**
+** Parameters: h - Open handle to the tuner (from MT2266_Open).
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_DNC_UNLOCK - Downconverter PLL unlocked
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: MT2266_ReadSub - Read byte(s) of data from the serial bus
+** MT_Sleep - Delay execution for x milliseconds
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+**
+****************************************************************************/
+UData_t MT2266_GetLocked(Handle_t h)
+{
+ const UData_t nMaxWait = 200; /* wait a maximum of 200 msec */
+ const UData_t nPollRate = 2; /* poll status bits every 2 ms */
+ const UData_t nMaxLoops = nMaxWait / nPollRate;
+ UData_t status = MT_OK; /* Status to be returned */
+ UData_t nDelays = 0;
+ U8Data statreg;
+ MT2266_Info_t* pInfo = (MT2266_Info_t*) h;
+
+ if (IsValidHandle(pInfo) == 0)
+ return (MT_INV_HANDLE);
+
+ do
+ {
+ status |= UncheckedGet(pInfo, MT2266_STATUS_1, &statreg);
+
+ if ((MT_IS_ERROR(status)) || ((statreg & 0x40) == 0x40))
+ return (status);
+
+ MT2266_Sleep(pInfo->hUserData, nPollRate); /* Wait between retries */
+ }
+ while (++nDelays < nMaxLoops);
+
+ if ((statreg & 0x40) != 0x40)
+ status |= MT_DNC_UNLOCK;
+
+ return (status);
+}
+
+
+/****************************************************************************
+**
+** Name: MT2266_GetParam
+**
+** Description: Gets a tuning algorithm parameter.
+**
+** This function provides access to the internals of the
+** tuning algorithm - mostly for testing purposes.
+**
+** Parameters: h - Tuner handle (returned by MT2266_Open)
+** param - Tuning algorithm parameter
+** (see enum MT2266_Param)
+** pValue - ptr to returned value
+**
+** param Description
+** ---------------------- --------------------------------
+** MT2266_IC_ADDR Serial Bus address of this tuner
+** MT2266_MAX_OPEN Max number of MT2266's that can be open
+** MT2266_NUM_OPEN Number of MT2266's currently open
+** MT2266_NUM_REGS Number of tuner registers
+** MT2266_SRO_FREQ crystal frequency
+** MT2266_STEPSIZE minimum tuning step size
+** MT2266_INPUT_FREQ input center frequency
+** MT2266_LO_FREQ LO Frequency
+** MT2266_OUTPUT_BW Output channel bandwidth
+** MT2266_RC2_VALUE Base band filter cal RC code (method 2)
+** MT2266_RC2_NOMINAL Base band filter nominal cal RC code
+** MT2266_RF_ADC RF attenuator A/D readback
+** MT2266_RF_ATTN RF attenuation (0-255)
+** MT2266_RF_EXT External control of RF atten
+** MT2266_LNA_GAIN LNA gain setting (0-15)
+** MT2266_BB_ADC BB attenuator A/D readback
+** MT2266_BB_ATTN Baseband attenuation (0-255)
+** MT2266_BB_EXT External control of BB atten
+**
+** Usage: status |= MT2266_GetParam(hMT2266,
+** MT2266_OUTPUT_BW,
+** &f_bw);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_NULL - Null pointer argument passed
+** MT_ARG_RANGE - Invalid parameter requested
+**
+** Dependencies: USERS MUST CALL MT2266_Open() FIRST!
+**
+** See Also: MT2266_SetParam, MT2266_Open
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+**
+****************************************************************************/
+UData_t MT2266_GetParam(Handle_t h,
+ MT2266_Param param,
+ UData_t* pValue)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ U8Data tmp;
+ MT2266_Info_t* pInfo = (MT2266_Info_t*) h;
+
+ if (pValue == NULL)
+ status |= MT_ARG_NULL;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ return (MT_INV_HANDLE);
+
+ if (MT_NO_ERROR(status))
+ {
+ switch (param)
+ {
+ /* Serial Bus address of this tuner */
+ case MT2266_IC_ADDR:
+ *pValue = pInfo->address;
+ break;
+
+ /* Max # of MT2266's allowed to be open */
+ case MT2266_MAX_OPEN:
+ *pValue = nMaxTuners;
+ break;
+
+ /* # of MT2266's open */
+ case MT2266_NUM_OPEN:
+ *pValue = nOpenTuners;
+ break;
+
+ /* Number of tuner registers */
+ case MT2266_NUM_REGS:
+ *pValue = Num_Registers;
+ break;
+
+ /* crystal frequency */
+ case MT2266_SRO_FREQ:
+ *pValue = pInfo->f_Ref;
+ break;
+
+ /* minimum tuning step size */
+ case MT2266_STEPSIZE:
+ *pValue = pInfo->f_Step;
+ break;
+
+ /* input center frequency */
+ case MT2266_INPUT_FREQ:
+ *pValue = pInfo->f_in;
+ break;
+
+ /* LO Frequency */
+ case MT2266_LO_FREQ:
+ *pValue = pInfo->f_LO;
+ break;
+
+ /* Output Channel Bandwidth */
+ case MT2266_OUTPUT_BW:
+ *pValue = pInfo->f_bw;
+ break;
+
+ /* Base band filter cal RC code */
+ case MT2266_RC2_VALUE:
+ *pValue = (UData_t) pInfo->RC2_Value;
+ break;
+
+ /* Base band filter nominal cal RC code */
+ case MT2266_RC2_NOMINAL:
+ *pValue = (UData_t) pInfo->RC2_Nominal;
+ break;
+
+ /* RF attenuator A/D readback */
+ case MT2266_RF_ADC:
+ status |= UncheckedGet(pInfo, MT2266_STATUS_2, &tmp);
+ if (MT_NO_ERROR(status))
+ *pValue = (UData_t) tmp;
+ break;
+
+ /* BB attenuator A/D readback */
+ case MT2266_BB_ADC:
+ status |= UncheckedGet(pInfo, MT2266_STATUS_3, &tmp);
+ if (MT_NO_ERROR(status))
+ *pValue = (UData_t) tmp;
+ break;
+
+ /* RF attenuator setting */
+ case MT2266_RF_ATTN:
+ PREFETCH(MT2266_RSVD_1F, 1); /* Fetch register(s) if __NO_CACHE__ defined */
+ if (MT_NO_ERROR(status))
+ *pValue = pInfo->reg[MT2266_RSVD_1F];
+ break;
+
+ /* BB attenuator setting */
+ case MT2266_BB_ATTN:
+ PREFETCH(MT2266_RSVD_2C, 3); /* Fetch register(s) if __NO_CACHE__ defined */
+ *pValue = pInfo->reg[MT2266_RSVD_2C]
+ + pInfo->reg[MT2266_RSVD_2D]
+ + pInfo->reg[MT2266_RSVD_2E] - 3;
+ break;
+
+ /* RF external / internal atten control */
+ case MT2266_RF_EXT:
+ PREFETCH(MT2266_GPO, 1); /* Fetch register(s) if __NO_CACHE__ defined */
+ *pValue = ((pInfo->reg[MT2266_GPO] & 0x40) != 0x00);
+ break;
+
+ /* BB external / internal atten control */
+ case MT2266_BB_EXT:
+ PREFETCH(MT2266_RSVD_33, 1); /* Fetch register(s) if __NO_CACHE__ defined */
+ *pValue = ((pInfo->reg[MT2266_RSVD_33] & 0x10) != 0x00);
+ break;
+
+ /* LNA gain setting (0-15) */
+ case MT2266_LNA_GAIN:
+ PREFETCH(MT2266_IGAIN, 1); /* Fetch register(s) if __NO_CACHE__ defined */
+ *pValue = ((pInfo->reg[MT2266_IGAIN] & 0x3C) >> 2);
+ break;
+
+ case MT2266_EOP:
+ default:
+ status |= MT_ARG_RANGE;
+ }
+ }
+ return (status);
+}
+
+
+/****************************************************************************
+** LOCAL FUNCTION - DO NOT USE OUTSIDE OF mt2266.c
+**
+** Name: UncheckedGet
+**
+** Description: Gets an MT2266 register with minimal checking
+**
+** NOTE: This is a local function that performs the same
+** steps as the MT2266_GetReg function that is available
+** in the external API. It does not do any of the standard
+** error checking that the API function provides and should
+** not be called from outside this file.
+**
+** Parameters: *pInfo - Tuner control structure
+** reg - MT2266 register/subaddress location
+** *val - MT2266 register/subaddress value
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_NULL - Null pointer argument passed
+** MT_ARG_RANGE - Argument out of range
+**
+** Dependencies: USERS MUST CALL MT2266_Open() FIRST!
+**
+** Use this function if you need to read a register from
+** the MT2266.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+**
+****************************************************************************/
+static UData_t UncheckedGet(MT2266_Info_t* pInfo,
+ U8Data reg,
+ U8Data* val)
+{
+ UData_t status; /* Status to be returned */
+
+#if defined(_DEBUG)
+ status = MT_OK;
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ return (MT_INV_HANDLE);
+
+ if (val == NULL)
+ status |= MT_ARG_NULL;
+
+ if (reg >= END_REGS)
+ status |= MT_ARG_RANGE;
+
+ if (MT_IS_ERROR(status))
+ return(status);
+#endif
+
+ status = MT2266_ReadSub(pInfo->hUserData, pInfo->address, reg, &pInfo->reg[reg], 1);
+
+ if (MT_NO_ERROR(status))
+ *val = pInfo->reg[reg];
+
+ return (status);
+}
+
+
+/****************************************************************************
+**
+** Name: MT2266_GetReg
+**
+** Description: Gets an MT2266 register.
+**
+** Parameters: h - Tuner handle (returned by MT2266_Open)
+** reg - MT2266 register/subaddress location
+** *val - MT2266 register/subaddress value
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_NULL - Null pointer argument passed
+** MT_ARG_RANGE - Argument out of range
+**
+** Dependencies: USERS MUST CALL MT2266_Open() FIRST!
+**
+** Use this function if you need to read a register from
+** the MT2266.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+**
+****************************************************************************/
+UData_t MT2266_GetReg(Handle_t h,
+ U8Data reg,
+ U8Data* val)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ MT2266_Info_t* pInfo = (MT2266_Info_t*) h;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ return (MT_INV_HANDLE);
+
+ if (val == NULL)
+ status |= MT_ARG_NULL;
+
+ if (reg >= END_REGS)
+ status |= MT_ARG_RANGE;
+
+ if (MT_NO_ERROR(status))
+ status |= UncheckedGet(pInfo, reg, val);
+
+ return (status);
+}
+
+
+/****************************************************************************
+**
+** Name: MT2266_GetUHFXFreqs
+**
+** Description: Retrieves the specified set of UHF Crossover Frequencies
+**
+** Parameters: h - Open handle to the tuner (from MT2266_Open).
+**
+** Usage: MT2266_Freq_Set tmpFreqs;
+** status = MT2266_GetUHFXFreqs(hMT2266,
+** MT2266_UHF1_WITH_ATTENUATION,
+** tmpFreqs );
+** if (status & MT_ARG_RANGE)
+** // error, Invalid UHF Crossover Frequency Set requested.
+** else
+** for( int i = 0; i < MT2266_NUM_XFREQS; i++ )
+** . . .
+**
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_ARG_RANGE - freq_type is out of range.
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: freqs_buffer *must* be defined of type MT2266_Freq_Set
+** to assure sufficient space allocation!
+**
+** USERS MUST CALL MT2266_Open() FIRST!
+**
+** See Also: MT2266_SetUHFXFreqs
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 10-26-2006 RSK Original.
+**
+****************************************************************************/
+UData_t MT2266_GetUHFXFreqs(Handle_t h,
+ MT2266_UHFXFreq_Type freq_type,
+ MT2266_XFreq_Set freqs_buffer)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ MT2266_Info_t* pInfo = (MT2266_Info_t*) h;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ return (MT_INV_HANDLE);
+
+ if (freq_type >= MT2266_NUMBER_OF_XFREQ_SETS)
+ status |= MT_ARG_RANGE;
+
+ if (MT_NO_ERROR(status))
+ {
+ int i;
+
+ for( i = 0; i < MT2266_NUM_XFREQS; i++ )
+ {
+ freqs_buffer[i] = pInfo->xfreqs.xfreq[ freq_type ][i] * TUNE_STEP_SIZE / 1000;
+ }
+ }
+
+ return (status);
+}
+
+
+/****************************************************************************
+**
+** Name: MT2266_GetUserData
+**
+** Description: Gets the user-defined data item.
+**
+** Parameters: h - Tuner handle (returned by MT2266_Open)
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_NULL - Null pointer argument passed
+**
+** Dependencies: USERS MUST CALL MT2266_Open() FIRST!
+**
+** The hUserData parameter is a user-specific argument
+** that is stored internally with the other tuner-
+** specific information.
+**
+** For example, if additional arguments are needed
+** for the user to identify the device communicating
+** with the tuner, this argument can be used to supply
+** the necessary information.
+**
+** The hUserData parameter is initialized in the tuner's
+** Open function to NULL.
+**
+** See Also: MT2266_SetUserData, MT2266_Open
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+**
+****************************************************************************/
+UData_t MT2266_GetUserData(Handle_t h,
+ Handle_t* hUserData)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ MT2266_Info_t* pInfo = (MT2266_Info_t*) h;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ return (MT_INV_HANDLE);
+
+ if (hUserData == NULL)
+ status |= MT_ARG_NULL;
+
+ if (MT_NO_ERROR(status))
+ *hUserData = pInfo->hUserData;
+
+ return (status);
+}
+
+
+/******************************************************************************
+**
+** Name: MT2266_ReInit
+**
+** Description: Initialize the tuner's register values.
+**
+** Parameters: h - Tuner handle (returned by MT2266_Open)
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_TUNER_ID_ERR - Tuner Part/Rev code mismatch
+** MT_TUNER_INIT_ERR - Tuner initialization failed
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_COMM_ERR - Serial bus communications error
+**
+** Dependencies: MT2266_ReadSub - Read byte(s) of data from the two-wire bus
+** MT2266_WriteSub - Write byte(s) of data to the two-wire bus
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+** N/A 06-08-2006 JWS Ver 1.01: Corrected problem with tuner ID check
+** N/A 11-01-2006 RSK Ver 1.02: Initialize XFreq Tables to Default
+** N/A 11-29-2006 DAD Ver 1.03: Parenthesis clarification
+**
+******************************************************************************/
+UData_t MT2266_ReInit(Handle_t h)
+{
+ int j;
+
+ U8Data MT2266_Init_Defaults1[] =
+ {
+ 0x01, /* Start w/register 0x01 */
+ 0x00, /* Reg 0x01 */
+ 0x00, /* Reg 0x02 */
+ 0x28, /* Reg 0x03 */
+ 0x00, /* Reg 0x04 */
+ 0x52, /* Reg 0x05 */
+ 0x99, /* Reg 0x06 */
+ 0x3F, /* Reg 0x07 */
+ };
+
+ U8Data MT2266_Init_Defaults2[] =
+ {
+ 0x17, /* Start w/register 0x17 */
+ 0x6D, /* Reg 0x17 */
+ 0x71, /* Reg 0x18 */
+ 0x61, /* Reg 0x19 */
+ 0xC0, /* Reg 0x1A */
+ 0xBF, /* Reg 0x1B */
+ 0xFF, /* Reg 0x1C */
+ 0xDC, /* Reg 0x1D */
+ 0x00, /* Reg 0x1E */
+ 0x0A, /* Reg 0x1F */
+ 0xD4, /* Reg 0x20 */
+ 0x03, /* Reg 0x21 */
+ 0x64, /* Reg 0x22 */
+ 0x64, /* Reg 0x23 */
+ 0x64, /* Reg 0x24 */
+ 0x64, /* Reg 0x25 */
+ 0x22, /* Reg 0x26 */
+ 0xAA, /* Reg 0x27 */
+ 0xF2, /* Reg 0x28 */
+ 0x1E, /* Reg 0x29 */
+ 0x80, /* Reg 0x2A */
+ 0x14, /* Reg 0x2B */
+ 0x01, /* Reg 0x2C */
+ 0x01, /* Reg 0x2D */
+ 0x01, /* Reg 0x2E */
+ 0x01, /* Reg 0x2F */
+ 0x01, /* Reg 0x30 */
+ 0x01, /* Reg 0x31 */
+ 0x7F, /* Reg 0x32 */
+ 0x5E, /* Reg 0x33 */
+ 0x3F, /* Reg 0x34 */
+ 0xFF, /* Reg 0x35 */
+ 0xFF, /* Reg 0x36 */
+ 0xFF, /* Reg 0x37 */
+ 0x00, /* Reg 0x38 */
+ 0x77, /* Reg 0x39 */
+ 0x0F, /* Reg 0x3A */
+ 0x2D, /* Reg 0x3B */
+ };
+
+ UData_t status = MT_OK; /* Status to be returned */
+ MT2266_Info_t* pInfo = (MT2266_Info_t*) h;
+ U8Data BBVref;
+ U8Data tmpreg = 0;
+ U8Data statusreg = 0;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ return (MT_INV_HANDLE);
+
+ /* Read the Part/Rev code from the tuner */
+ if (MT_NO_ERROR(status))
+ status |= UncheckedGet(pInfo, MT2266_PART_REV, &tmpreg);
+ if (MT_NO_ERROR(status) && (tmpreg != 0x85)) /* MT226? B0 */
+ status |= MT_TUNER_ID_ERR;
+ else
+ {
+ /*
+ ** Read the status register 5
+ */
+ tmpreg = pInfo->reg[MT2266_RSVD_11] |= 0x03;
+ if (MT_NO_ERROR(status))
+ status |= UncheckedSet(pInfo, MT2266_RSVD_11, tmpreg);
+ tmpreg &= ~(0x02);
+ if (MT_NO_ERROR(status))
+ status |= UncheckedSet(pInfo, MT2266_RSVD_11, tmpreg);
+
+ /* Get and store the status 5 register value */
+ if (MT_NO_ERROR(status))
+ status |= UncheckedGet(pInfo, MT2266_STATUS_5, &statusreg);
+
+ /* MT2266 */
+ if (MT_IS_ERROR(status) || ((statusreg & 0x30) != 0x30))
+ status |= MT_TUNER_ID_ERR; /* Wrong tuner Part/Rev code */
+ }
+
+ if (MT_NO_ERROR(status))
+ {
+ /* Initialize the tuner state. Hold off on f_in and f_LO */
+ pInfo->version = VERSION;
+ pInfo->tuner_id = pInfo->reg[MT2266_PART_REV];
+ pInfo->f_Ref = REF_FREQ;
+ pInfo->f_Step = TUNE_STEP_SIZE * 1000; /* kHz -> Hz */
+ pInfo->f_in = UHF_DEFAULT_FREQ;
+ pInfo->f_LO = UHF_DEFAULT_FREQ;
+ pInfo->f_bw = OUTPUT_BW;
+ pInfo->band = MT2266_UHF_BAND;
+ pInfo->num_regs = END_REGS;
+
+ /* Reset the UHF Crossover Frequency tables on open/init. */
+ for (j=0; j< MT2266_NUM_XFREQS; j++ )
+ {
+ pInfo->xfreqs.xfreq[MT2266_UHF0][j] = MT2266_default_XFreqs.xfreq[MT2266_UHF0][j];
+ pInfo->xfreqs.xfreq[MT2266_UHF1][j] = MT2266_default_XFreqs.xfreq[MT2266_UHF1][j];
+ pInfo->xfreqs.xfreq[MT2266_UHF0_ATTEN][j] = MT2266_default_XFreqs.xfreq[MT2266_UHF0_ATTEN][j];
+ pInfo->xfreqs.xfreq[MT2266_UHF1_ATTEN][j] = MT2266_default_XFreqs.xfreq[MT2266_UHF1_ATTEN][j];
+ }
+
+ /* Write the default values to the tuner registers. Default mode is UHF */
+ status |= MT2266_WriteSub(pInfo->hUserData,
+ pInfo->address,
+ MT2266_Init_Defaults1[0],
+ &MT2266_Init_Defaults1[1],
+ sizeof(MT2266_Init_Defaults1)/sizeof(U8Data)-1);
+ if (MT_NO_ERROR(status))
+ {
+ status |= MT2266_WriteSub(pInfo->hUserData,
+ pInfo->address,
+ MT2266_Init_Defaults2[0],
+ &MT2266_Init_Defaults2[1],
+ sizeof(MT2266_Init_Defaults2)/sizeof(U8Data)-1);
+ }
+ }
+
+ /* Read back all the registers from the tuner */
+ if (MT_NO_ERROR(status))
+ {
+ status |= MT2266_ReadSub(pInfo->hUserData, pInfo->address, 0, &pInfo->reg[0], END_REGS);
+ }
+
+ /*
+ ** Set reg[0x33] based on statusreg
+ */
+ if (MT_NO_ERROR(status))
+ {
+ BBVref = (((statusreg >> 6) + 2) & 0x03);
+ tmpreg = (pInfo->reg[MT2266_RSVD_33] & ~(0x60)) | (BBVref << 5);
+ status |= UncheckedSet(pInfo, MT2266_RSVD_33, tmpreg);
+ }
+
+ /* Run the baseband filter calibration */
+ if (MT_NO_ERROR(status))
+ status |= Run_BB_RC_Cal2(h);
+
+ /* Set the baseband filter bandwidth to the default */
+ if (MT_NO_ERROR(status))
+ status |= Set_BBFilt(h);
+
+ return (status);
+}
+
+
+/****************************************************************************
+**
+** Name: MT2266_SetParam
+**
+** Description: Sets a tuning algorithm parameter.
+**
+** This function provides access to the internals of the
+** tuning algorithm. You can override many of the tuning
+** algorithm defaults using this function.
+**
+** Parameters: h - Tuner handle (returned by MT2266_Open)
+** param - Tuning algorithm parameter
+** (see enum MT2266_Param)
+** nValue - value to be set
+**
+** param Description
+** ---------------------- --------------------------------
+** MT2266_SRO_FREQ crystal frequency
+** MT2266_STEPSIZE minimum tuning step size
+** MT2266_INPUT_FREQ Center of input channel
+** MT2266_OUTPUT_BW Output channel bandwidth
+** MT2266_RF_ATTN RF attenuation (0-255)
+** MT2266_RF_EXT External control of RF atten
+** MT2266_LNA_GAIN LNA gain setting (0-15)
+** MT2266_LNA_GAIN_DECR Decrement LNA Gain (arg=min)
+** MT2266_LNA_GAIN_INCR Increment LNA Gain (arg=max)
+** MT2266_BB_ATTN Baseband attenuation (0-255)
+** MT2266_BB_EXT External control of BB atten
+** MT2266_UHF_MAXSENS Set for UHF max sensitivity mode
+** MT2266_UHF_NORMAL Set for UHF normal mode
+**
+** Usage: status |= MT2266_SetParam(hMT2266,
+** MT2266_STEPSIZE,
+** 50000);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_RANGE - Invalid parameter requested
+** or set value out of range
+** or non-writable parameter
+**
+** Dependencies: USERS MUST CALL MT2266_Open() FIRST!
+**
+** See Also: MT2266_GetParam, MT2266_Open
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+** N/A 11-29-2006 DAD Ver 1.03: Parenthesis clarification for gcc
+**
+****************************************************************************/
+UData_t MT2266_SetParam(Handle_t h,
+ MT2266_Param param,
+ UData_t nValue)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ U8Data tmpreg;
+ MT2266_Info_t* pInfo = (MT2266_Info_t*) h;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ return (MT_INV_HANDLE);
+
+ if (MT_NO_ERROR(status))
+ {
+ switch (param)
+ {
+ /* crystal frequency */
+ case MT2266_SRO_FREQ:
+ pInfo->f_Ref = nValue;
+ if (pInfo->f_Ref < 22000000)
+ {
+ /* Turn off f_SRO divide by 2 */
+ status |= UncheckedSet(pInfo,
+ MT2266_SRO_CTRL,
+ (U8Data) (pInfo->reg[MT2266_SRO_CTRL] &= 0xFE));
+ }
+ else
+ {
+ /* Turn on f_SRO divide by 2 */
+ status |= UncheckedSet(pInfo,
+ MT2266_SRO_CTRL,
+ (U8Data) (pInfo->reg[MT2266_SRO_CTRL] |= 0x01));
+ }
+ status |= Run_BB_RC_Cal2(h);
+ if (MT_NO_ERROR(status))
+ status |= Set_BBFilt(h);
+ break;
+
+ /* minimum tuning step size */
+ case MT2266_STEPSIZE:
+ pInfo->f_Step = nValue;
+ break;
+
+ /* Width of output channel */
+ case MT2266_OUTPUT_BW:
+ pInfo->f_bw = nValue;
+ status |= Set_BBFilt(h);
+ break;
+
+ /* BB attenuation (0-255) */
+ case MT2266_BB_ATTN:
+ if (nValue > 255)
+ status |= MT_ARG_RANGE;
+ else
+ {
+ UData_t BBA_Stage1;
+ UData_t BBA_Stage2;
+ UData_t BBA_Stage3;
+
+ BBA_Stage3 = (nValue > 102) ? 103 : nValue + 1;
+ BBA_Stage2 = (nValue > 175) ? 75 : nValue + 2 - BBA_Stage3;
+ BBA_Stage1 = (nValue > 176) ? nValue - 175 : 1;
+ pInfo->reg[MT2266_RSVD_2C] = (U8Data) BBA_Stage1;
+ pInfo->reg[MT2266_RSVD_2D] = (U8Data) BBA_Stage2;
+ pInfo->reg[MT2266_RSVD_2E] = (U8Data) BBA_Stage3;
+ pInfo->reg[MT2266_RSVD_2F] = (U8Data) BBA_Stage1;
+ pInfo->reg[MT2266_RSVD_30] = (U8Data) BBA_Stage2;
+ pInfo->reg[MT2266_RSVD_31] = (U8Data) BBA_Stage3;
+ status |= MT2266_WriteSub(pInfo->hUserData,
+ pInfo->address,
+ MT2266_RSVD_2C,
+ &pInfo->reg[MT2266_RSVD_2C],
+ 6);
+ }
+ break;
+
+ /* RF attenuation (0-255) */
+ case MT2266_RF_ATTN:
+ if (nValue > 255)
+ status |= MT_ARG_RANGE;
+ else
+ status |= UncheckedSet(pInfo, MT2266_RSVD_1F, (U8Data) nValue);
+ break;
+
+ /* RF external / internal atten control */
+ case MT2266_RF_EXT:
+ if (nValue == 0)
+ tmpreg = pInfo->reg[MT2266_GPO] &= ~0x40;
+ else
+ tmpreg = pInfo->reg[MT2266_GPO] |= 0x40;
+ status |= UncheckedSet(pInfo, MT2266_GPO, tmpreg);
+ break;
+
+ /* LNA gain setting (0-15) */
+ case MT2266_LNA_GAIN:
+ if (nValue > 15)
+ status |= MT_ARG_RANGE;
+ else
+ {
+ tmpreg = (pInfo->reg[MT2266_IGAIN] & 0xC3) | ((U8Data)nValue << 2);
+ status |= UncheckedSet(pInfo, MT2266_IGAIN, tmpreg);
+ }
+ break;
+
+ /* Decrement LNA Gain setting, argument is min LNA Gain setting */
+ case MT2266_LNA_GAIN_DECR:
+ if (nValue > 15)
+ status |= MT_ARG_RANGE;
+ else
+ {
+ PREFETCH(MT2266_IGAIN, 1);
+ if (MT_NO_ERROR(status) && ((U8Data) ((pInfo->reg[MT2266_IGAIN] & 0x3C) >> 2) > (U8Data) nValue))
+ status |= UncheckedSet(pInfo, MT2266_IGAIN, pInfo->reg[MT2266_IGAIN] - 0x04);
+ }
+ break;
+
+ /* Increment LNA Gain setting, argument is max LNA Gain setting */
+ case MT2266_LNA_GAIN_INCR:
+ if (nValue > 15)
+ status |= MT_ARG_RANGE;
+ else
+ {
+ PREFETCH(MT2266_IGAIN, 1);
+ if (MT_NO_ERROR(status) && ((U8Data) ((pInfo->reg[MT2266_IGAIN] & 0x3C) >> 2) < (U8Data) nValue))
+ status |= UncheckedSet(pInfo, MT2266_IGAIN, pInfo->reg[MT2266_IGAIN] + 0x04);
+ }
+ break;
+
+ /* BB external / internal atten control */
+ case MT2266_BB_EXT:
+ if (nValue == 0)
+ tmpreg = pInfo->reg[MT2266_RSVD_33] &= ~0x08;
+ else
+ tmpreg = pInfo->reg[MT2266_RSVD_33] |= 0x08;
+ status |= UncheckedSet(pInfo, MT2266_RSVD_33, tmpreg);
+ break;
+
+ /* Set for UHF max sensitivity mode */
+ case MT2266_UHF_MAXSENS:
+ PREFETCH(MT2266_BAND_CTRL, 1);
+ if (MT_NO_ERROR(status) && ((pInfo->reg[MT2266_BAND_CTRL] & 0x30) == 0x10))
+ status |= UncheckedSet(pInfo, MT2266_BAND_CTRL, pInfo->reg[MT2266_BAND_CTRL] ^ 0x30);
+ break;
+
+ /* Set for UHF normal mode */
+ case MT2266_UHF_NORMAL:
+ if (MT_NO_ERROR(status) && ((pInfo->reg[MT2266_BAND_CTRL] & 0x30) == 0x20))
+ status |= UncheckedSet(pInfo, MT2266_BAND_CTRL, pInfo->reg[MT2266_BAND_CTRL] ^ 0x30);
+ break;
+
+ /* These parameters are read-only */
+ case MT2266_IC_ADDR:
+ case MT2266_MAX_OPEN:
+ case MT2266_NUM_OPEN:
+ case MT2266_NUM_REGS:
+ case MT2266_INPUT_FREQ:
+ case MT2266_LO_FREQ:
+ case MT2266_RC2_VALUE:
+ case MT2266_RF_ADC:
+ case MT2266_BB_ADC:
+ case MT2266_EOP:
+ default:
+ status |= MT_ARG_RANGE;
+ }
+ }
+ return (status);
+}
+
+
+/****************************************************************************
+**
+** Name: MT2266_SetPowerModes
+**
+** Description: Sets the bits in the MT2266_ENABLES register and the
+** SROsd bit in the MT2266_SROADC_CTRL register.
+**
+** Parameters: h - Tuner handle (returned by MT2266_Open)
+** flags - Bit mask of flags to indicate enabled
+** bits.
+**
+** Usage: status = MT2266_SetPowerModes(hMT2266, flags);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: USERS MUST CALL MT2266_Open() FIRST!
+**
+** The bits in the MT2266_ENABLES register and the
+** SROsd bit are set according to the supplied flags.
+**
+** The pre-defined flags are as follows:
+** MT2266_SROen
+** MT2266_LOen
+** MT2266_ADCen
+** MT2266_PDen
+** MT2266_DCOCen
+** MT2266_BBen
+** MT2266_MIXen
+** MT2266_LNAen
+** MT2266_ALL_ENABLES
+** MT2266_NO_ENABLES
+** MT2266_SROsd
+** MT2266_SRO_NOT_sd
+**
+** ONLY the enable bits (or SROsd bit) specified in the
+** flags parameter will be set. Any flag which is not
+** included, will cause that bit to be disabled.
+**
+** The ALL_ENABLES, NO_ENABLES, and SRO_NOT_sd constants
+** are for convenience. The NO_ENABLES and SRO_NOT_sd
+** do not actually have to be included, but are provided
+** for clarity.
+**
+** See Also: MT2266_Open
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+**
+****************************************************************************/
+UData_t MT2266_SetPowerModes(Handle_t h,
+ UData_t flags)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ MT2266_Info_t* pInfo = (MT2266_Info_t*) h;
+ U8Data tmpreg;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ return (MT_INV_HANDLE);
+
+ PREFETCH(MT2266_SRO_CTRL, 1); /* Fetch register(s) if __NO_CACHE__ defined */
+ if (MT_NO_ERROR(status))
+ {
+ if (flags & MT2266_SROsd)
+ tmpreg = pInfo->reg[MT2266_SRO_CTRL] |= 0x10; /* set the SROsd bit */
+ else
+ tmpreg = pInfo->reg[MT2266_SRO_CTRL] &= 0xEF; /* clear the SROsd bit */
+ status |= UncheckedSet(pInfo, MT2266_SRO_CTRL, tmpreg);
+ }
+
+ PREFETCH(MT2266_ENABLES, 1); /* Fetch register(s) if __NO_CACHE__ defined */
+
+ if (MT_NO_ERROR(status))
+ {
+ status |= UncheckedSet(pInfo, MT2266_ENABLES, (U8Data)(flags & 0xff));
+ }
+
+ return status;
+}
+
+
+/****************************************************************************
+** LOCAL FUNCTION - DO NOT USE OUTSIDE OF mt2266.c
+**
+** Name: UncheckedSet
+**
+** Description: Sets an MT2266 register.
+**
+** NOTE: This is a local function that performs the same
+** steps as the MT2266_SetReg function that is available
+** in the external API. It does not do any of the standard
+** error checking that the API function provides and should
+** not be called from outside this file.
+**
+** Parameters: *pInfo - Tuner control structure
+** reg - MT2266 register/subaddress location
+** val - MT2266 register/subaddress value
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_RANGE - Argument out of range
+**
+** Dependencies: USERS MUST CALL MT2266_Open() FIRST!
+**
+** Sets a register value without any preliminary checking for
+** valid handles or register numbers.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+**
+****************************************************************************/
+static UData_t UncheckedSet(MT2266_Info_t* pInfo,
+ U8Data reg,
+ U8Data val)
+{
+ UData_t status; /* Status to be returned */
+
+#if defined(_DEBUG)
+ status = MT_OK;
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ return (MT_INV_HANDLE);
+
+ if (reg >= END_REGS)
+ status |= MT_ARG_RANGE;
+
+ if (MT_IS_ERROR(status))
+ return (status);
+#endif
+
+ status = MT2266_WriteSub(pInfo->hUserData, pInfo->address, reg, &val, 1);
+
+ if (MT_NO_ERROR(status))
+ pInfo->reg[reg] = val;
+
+ return (status);
+}
+
+
+/****************************************************************************
+**
+** Name: MT2266_SetReg
+**
+** Description: Sets an MT2266 register.
+**
+** Parameters: h - Tuner handle (returned by MT2266_Open)
+** reg - MT2266 register/subaddress location
+** val - MT2266 register/subaddress value
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_RANGE - Argument out of range
+**
+** Dependencies: USERS MUST CALL MT2266_Open() FIRST!
+**
+** Use this function if you need to override a default
+** register value
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+**
+****************************************************************************/
+UData_t MT2266_SetReg(Handle_t h,
+ U8Data reg,
+ U8Data val)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ MT2266_Info_t* pInfo = (MT2266_Info_t*) h;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ return (MT_INV_HANDLE);
+
+ if (reg >= END_REGS)
+ status |= MT_ARG_RANGE;
+
+ if (MT_NO_ERROR(status))
+ status |= UncheckedSet(pInfo, reg, val);
+
+ return (status);
+}
+
+
+/****************************************************************************
+**
+** Name: MT2266_SetUHFXFreqs
+**
+** Description: Assigns the specified set of UHF Crossover Frequencies
+**
+** Parameters: h - Open handle to the tuner (from MT2266_Open).
+**
+** Usage: MT2266_Freq_Set tmpFreqs;
+** status = MT2266_GetUHFXFreqs(hMT2266,
+** MT2266_UHF1_WITH_ATTENUATION,
+** tmpFreqs );
+** ...
+** tmpFreqs[i] = <desired value>
+** ...
+** status = MT2266_SetUHFXFreqs(hMT2266,
+** MT2266_UHF1_WITH_ATTENUATION,
+** tmpFreqs );
+**
+** if (status & MT_ARG_RANGE)
+** // error, Invalid UHF Crossover Frequency Set requested.
+** else
+** for( int i = 0; i < MT2266_NUM_XFREQS; i++ )
+** . . .
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_ARG_RANGE - freq_type is out of range.
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: freqs_buffer *must* be defined of type MT2266_Freq_Set
+** to assure sufficient space allocation!
+**
+** USERS MUST CALL MT2266_Open() FIRST!
+**
+** See Also: MT2266_SetUHFXFreqs
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 10-26-2006 RSK Original.
+**
+****************************************************************************/
+UData_t MT2266_SetUHFXFreqs(Handle_t h,
+ MT2266_UHFXFreq_Type freq_type,
+ MT2266_XFreq_Set freqs_buffer)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ MT2266_Info_t* pInfo = (MT2266_Info_t*) h;
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ return (MT_INV_HANDLE);
+
+ if (freq_type >= MT2266_NUMBER_OF_XFREQ_SETS)
+ status |= MT_ARG_RANGE;
+
+ if (MT_NO_ERROR(status))
+ {
+ int i;
+
+ for( i = 0; i < MT2266_NUM_XFREQS; i++ )
+ {
+ pInfo->xfreqs.xfreq[ freq_type ][i] = freqs_buffer[i] * 1000 / TUNE_STEP_SIZE;
+ }
+ }
+
+ return (status);
+}
+
+
+/****************************************************************************
+** LOCAL FUNCTION
+**
+** Name: RoundToStep
+**
+** Description: Rounds the given frequency to the closes f_Step value
+** given the tuner ref frequency..
+**
+**
+** Parameters: freq - Frequency to be rounded (in Hz).
+** f_Step - Step size for the frequency (in Hz).
+** f_Ref - SRO frequency (in Hz).
+**
+** Returns: Rounded frequency.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+**
+****************************************************************************/
+static UData_t RoundToStep(UData_t freq, UData_t f_Step, UData_t f_ref)
+{
+ return f_ref * (freq / f_ref)
+ + f_Step * (((freq % f_ref) + (f_Step / 2)) / f_Step);
+}
+
+
+/****************************************************************************
+**
+** Name: fLO_FractionalTerm
+**
+** Description: Calculates the portion contributed by FracN / denom.
+**
+** This function preserves maximum precision without
+** risk of overflow. It accurately calculates
+** f_ref * num / denom to within 1 HZ with fixed math.
+**
+** Parameters: num - Fractional portion of the multiplier
+** denom - denominator portion of the ratio
+** This routine successfully handles denom values
+** up to and including 2^18.
+** f_Ref - SRO frequency. This calculation handles
+** f_ref as two separate 14-bit fields.
+** Therefore, a maximum value of 2^28-1
+** may safely be used for f_ref. This is
+** the genesis of the magic number "14" and the
+** magic mask value of 0x03FFF.
+**
+** Returns: f_ref * num / denom
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 12-20-2006 RSK Ver 1.04: Adding fLO_FractionalTerm() usage.
+**
+****************************************************************************/
+static UData_t fLO_FractionalTerm( UData_t f_ref,
+ UData_t num,
+ UData_t denom )
+{
+ UData_t t1 = (f_ref >> 14) * num;
+ UData_t term1 = t1 / denom;
+ UData_t loss = t1 % denom;
+ UData_t term2 = ( ((f_ref & 0x00003FFF) * num + (loss<<14)) + (denom/2) ) / denom;
+ return ((term1 << 14) + term2);
+}
+
+
+/****************************************************************************
+** LOCAL FUNCTION
+**
+** Name: CalcLOMult
+**
+** Description: Calculates Integer divider value and the numerator
+** value for LO's FracN PLL.
+**
+** This function assumes that the f_LO and f_Ref are
+** evenly divisible by f_LO_Step.
+**
+** Parameters: Div - OUTPUT: Whole number portion of the multiplier
+** FracN - OUTPUT: Fractional portion of the multiplier
+** f_LO - desired LO frequency.
+** denom - LO FracN denominator value
+** f_Ref - SRO frequency.
+**
+** Returns: Recalculated LO frequency.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+** N/A 12-20-2006 RSK Ver 1.04: Adding fLO_FractionalTerm() usage.
+**
+****************************************************************************/
+static UData_t CalcLOMult(UData_t *Div,
+ UData_t *FracN,
+ UData_t f_LO,
+ UData_t denom,
+ UData_t f_Ref)
+{
+ UData_t a, b, i;
+ const SData_t TwoNShift = 13; /* bits to shift to obtain 2^n qty */
+ const SData_t RoundShift = 18; /* bits to shift before rounding */
+
+ /* Calculate the whole number portion of the divider */
+ *Div = f_LO / f_Ref;
+
+ /*
+ ** Calculate the FracN numerator 1 bit at a time. This keeps the
+ ** integer values from overflowing when large values are multiplied.
+ ** This loop calculates the fractional portion of F/20MHz accurate
+ ** to 32 bits. The 2^n factor is represented by the placement of
+ ** the value in the 32-bit word. Since we want as much accuracy
+ ** as possible, we'll leave it at the top of the word.
+ */
+ *FracN = 0;
+ a = f_LO;
+ for (i=32; i>0; --i)
+ {
+ b = 2*(a % f_Ref);
+ *FracN = (*FracN * 2) + (b >= f_Ref);
+ a = b;
+ }
+
+ /*
+ ** If the denominator is a 2^n - 1 value (the usual case) then the
+ ** value we really need is (F/20) * 2^n - (F/20). Shifting the
+ ** calculated (F/20) value to the right and subtracting produces
+ ** the desired result -- still accurate to 32 bits.
+ */
+ if ((denom & 0x01) != 0)
+ *FracN -= (*FracN >> TwoNShift);
+
+ /*
+ ** Now shift the result so that it is 1 bit bigger than we need,
+ ** use the low-order bit to round the remaining bits, and shift
+ ** to make the answer the desired size.
+ */
+ *FracN >>= RoundShift;
+ *FracN = (*FracN & 0x01) + (*FracN >> 1);
+
+ /* Check for rollover (cannot happen with 50 kHz step size) */
+ if (*FracN == (denom | 1))
+ {
+ *FracN = 0;
+ ++Div;
+ }
+
+
+ return (f_Ref * (*Div)) + fLO_FractionalTerm( f_Ref, *FracN, denom );
+}
+
+
+/****************************************************************************
+** LOCAL FUNCTION
+**
+** Name: GetCrossover
+**
+** Description: Determines the appropriate value in the set of
+** crossover frequencies.
+**
+** This function assumes that the crossover frequency table
+** ias been properly initialized in descending order.
+**
+** Parameters: f_in - The input frequency to use.
+** freqs - The array of crossover frequency entries.
+**
+** Returns: Index of crossover frequency band to use.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 10-27-2006 RSK Original
+**
+****************************************************************************/
+static U8Data GetCrossover( UData_t f_in, UData_t* freqs )
+{
+ U8Data idx;
+ U8Data retVal = 0;
+
+ for (idx=0; idx< (U8Data)MT2266_NUM_XFREQS; idx++)
+ {
+ if ( freqs[idx] >= f_in)
+ {
+ retVal = (U8Data)MT2266_NUM_XFREQS - idx;
+ break;
+ }
+ }
+
+ return retVal;
+}
+
+
+/****************************************************************************
+**
+** Name: MT2266_ChangeFreq
+**
+** Description: Change the tuner's tuned frequency to f_in.
+**
+** Parameters: h - Open handle to the tuner (from MT2266_Open).
+** f_in - RF input center frequency (in Hz).
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_DNC_UNLOCK - Downconverter PLL unlocked
+** MT_COMM_ERR - Serial bus communications error
+** MT_FIN_RANGE - Input freq out of range
+** MT_DNC_RANGE - Downconverter freq out of range
+**
+** Dependencies: MUST CALL MT2266_Open BEFORE MT2266_ChangeFreq!
+**
+** MT2266_ReadSub - Read byte(s) of data from the two-wire-bus
+** MT2266_WriteSub - Write byte(s) of data to the two-wire-bus
+** MT_Sleep - Delay execution for x milliseconds
+** MT2266_GetLocked - Checks to see if the PLL is locked
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+** N/A 11-01-2006 RSK Ver 1.02: Added usage of UFILT0 and UFILT1.
+** N/A 11-29-2006 DAD Ver 1.03: Parenthesis clarification
+** 118 05-09-2007 RSK Ver 1.05: Refactored to call _Tune() API.
+**
+****************************************************************************/
+UData_t MT2266_ChangeFreq(Handle_t h,
+ UData_t f_in) /* RF input center frequency */
+{
+ return (MT2266_Tune(h, f_in));
+}
+
+
+/****************************************************************************
+**
+** Name: MT2266_Tune
+**
+** Description: Change the tuner's tuned frequency to f_in.
+**
+** Parameters: h - Open handle to the tuner (from MT2266_Open).
+** f_in - RF input center frequency (in Hz).
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_DNC_UNLOCK - Downconverter PLL unlocked
+** MT_COMM_ERR - Serial bus communications error
+** MT_FIN_RANGE - Input freq out of range
+** MT_DNC_RANGE - Downconverter freq out of range
+**
+** Dependencies: MUST CALL MT2266_Open BEFORE MT2266_Tune!
+**
+** MT_ReadSub - Read byte(s) of data from the two-wire-bus
+** MT_WriteSub - Write byte(s) of data to the two-wire-bus
+** MT_Sleep - Delay execution for x milliseconds
+** MT2266_GetLocked - Checks to see if the PLL is locked
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+** N/A 11-01-2006 RSK Ver 1.02: Added usage of UFILT0 and UFILT1.
+** N/A 11-29-2006 DAD Ver 1.03: Parenthesis clarification
+** 118 05-09-2007 RSK Ver 1.05: Adding Standard MTxxxx_Tune() API.
+**
+****************************************************************************/
+UData_t MT2266_Tune(Handle_t h,
+ UData_t f_in) /* RF input center frequency */
+{
+ MT2266_Info_t* pInfo = (MT2266_Info_t*) h;
+
+ UData_t status = MT_OK; /* status of operation */
+ UData_t LO; /* LO register value */
+ UData_t Num; /* Numerator for LO reg. value */
+ UData_t ofLO; /* last time's LO frequency */
+ UData_t ofin; /* last time's input frequency */
+ U8Data LO_Band; /* LO Mode bits */
+ UData_t s_fRef; /* Ref Freq scaled for LO Band */
+ UData_t this_band; /* Band for the requested freq */
+ UData_t SROx2; /* SRO times 2 */
+
+ /* Verify that the handle passed points to a valid tuner */
+ if (IsValidHandle(pInfo) == 0)
+ return (MT_INV_HANDLE);
+
+ /*
+ ** Save original input and LO value
+ */
+ ofLO = pInfo->f_LO;
+ ofin = pInfo->f_in;
+
+ /*
+ ** Assign in the requested input value
+ */
+ pInfo->f_in = f_in;
+
+ /*
+ ** Get the SRO multiplier value
+ */
+ SROx2 = (2 - (pInfo->reg[MT2266_SRO_CTRL] & 0x01));
+
+ /* Request an LO that is on a step size boundary */
+ pInfo->f_LO = RoundToStep(f_in, pInfo->f_Step, pInfo->f_Ref);
+
+ if (pInfo->f_LO < MIN_VHF_FREQ)
+ {
+ status |= MT_FIN_RANGE | MT_ARG_RANGE | MT_DNC_RANGE;
+ return status; /* Does not support frequencies below MIN_VHF_FREQ */
+ }
+ else if (pInfo->f_LO <= MAX_VHF_FREQ)
+ {
+ /* VHF Band */
+ s_fRef = pInfo->f_Ref * SROx2 / 4;
+ LO_Band = 0;
+ this_band = MT2266_VHF_BAND;
+ }
+ else if (pInfo->f_LO < MIN_UHF_FREQ)
+ {
+ status |= MT_FIN_RANGE | MT_ARG_RANGE | MT_DNC_RANGE;
+ return status; /* Does not support frequencies between MAX_VHF_FREQ & MIN_UHF_FREQ */
+ }
+ else if (pInfo->f_LO <= MAX_UHF_FREQ)
+ {
+ /* UHF Band */
+ s_fRef = pInfo->f_Ref * SROx2 / 2;
+ LO_Band = 1;
+ this_band = MT2266_UHF_BAND;
+ }
+ else
+ {
+ status |= MT_FIN_RANGE | MT_ARG_RANGE | MT_DNC_RANGE;
+ return status; /* Does not support frequencies above MAX_UHF_FREQ */
+ }
+
+ /*
+ ** Calculate the LO frequencies and the values to be placed
+ ** in the tuning registers.
+ */
+ pInfo->f_LO = CalcLOMult(&LO, &Num, pInfo->f_LO, 8191, s_fRef);
+
+ /*
+ ** If we have the same LO frequencies and we're already locked,
+ ** then just return without writing any registers.
+ */
+ if ((ofLO == pInfo->f_LO)
+ && ((pInfo->reg[MT2266_STATUS_1] & 0x40) == 0x40))
+ {
+ return (status);
+ }
+
+ /*
+ ** Reset defaults here if we're tuning into a new band
+ */
+ if (MT_NO_ERROR(status))
+ {
+ if (this_band != pInfo->band)
+ {
+ MT2266_DefaultsEntry *defaults = NULL;
+ switch (this_band)
+ {
+ case MT2266_VHF_BAND:
+ defaults = &MT2266_VHF_defaults[0];
+ break;
+ case MT2266_UHF_BAND:
+ defaults = &MT2266_UHF_defaults[0];
+ break;
+ default:
+ status |= MT_ARG_RANGE;
+ }
+ if ( MT_NO_ERROR(status))
+ {
+ while (defaults->data && MT_NO_ERROR(status))
+ {
+ status |= MT2266_WriteSub(pInfo->hUserData, pInfo->address, defaults->data[0], &defaults->data[1], defaults->cnt);
+ defaults++;
+ }
+ /* re-read the new registers into the cached values */
+ status |= MT2266_ReadSub(pInfo->hUserData, pInfo->address, 0, &pInfo->reg[0], END_REGS);
+ pInfo->band = this_band;
+ }
+ }
+ }
+
+ /*
+ ** Place all of the calculated values into the local tuner
+ ** register fields.
+ */
+ if (MT_NO_ERROR(status))
+ {
+ pInfo->reg[MT2266_LO_CTRL_1] = (U8Data)(Num >> 8);
+ pInfo->reg[MT2266_LO_CTRL_2] = (U8Data)(Num & 0xFF);
+ pInfo->reg[MT2266_LO_CTRL_3] = (U8Data)(LO & 0xFF);
+
+ /*
+ ** Now write out the computed register values
+ */
+ status |= MT2266_WriteSub(pInfo->hUserData, pInfo->address, MT2266_LO_CTRL_1, &pInfo->reg[MT2266_LO_CTRL_1], 3);
+
+ if (pInfo->band == MT2266_UHF_BAND)
+ {
+ U8Data UFilt0 = 0; /* def when f_in > all */
+ U8Data UFilt1 = 0; /* def when f_in > all */
+ UData_t* XFreq0;
+ UData_t* XFreq1;
+ SData_t ClearTune_Fuse;
+ SData_t f_offset;
+ UData_t f_in_;
+
+ PREFETCH(MT2266_BAND_CTRL, 2); /* Fetch register(s) if __NO_CACHE__ defined */
+ PREFETCH(MT2266_STATUS_5, 1); /* Fetch register(s) if __NO_CACHE__ defined */
+
+ XFreq0 = (pInfo->reg[MT2266_BAND_CTRL] & 0x10) ? pInfo->xfreqs.xfreq[ MT2266_UHF0_ATTEN ] : pInfo->xfreqs.xfreq[ MT2266_UHF0 ];
+ XFreq1 = (pInfo->reg[MT2266_BAND_CTRL] & 0x10) ? pInfo->xfreqs.xfreq[ MT2266_UHF1_ATTEN ] : pInfo->xfreqs.xfreq[ MT2266_UHF1 ];
+
+ ClearTune_Fuse = pInfo->reg[MT2266_STATUS_5] & 0x07;
+ f_offset = (10000000) * ((ClearTune_Fuse > 3) ? (ClearTune_Fuse - 8) : ClearTune_Fuse);
+ f_in_ = (f_in - f_offset) / 1000 / TUNE_STEP_SIZE;
+
+ UFilt0 = GetCrossover( f_in_, XFreq0 );
+ UFilt1 = GetCrossover( f_in_, XFreq1 );
+
+ /* If UFilt == 16, set UBANDen and set UFilt = 15 */
+ if ( (UFilt0 == 16) || (UFilt1 == 16) )
+ {
+ pInfo->reg[MT2266_BAND_CTRL] |= 0x01;
+ if( UFilt0 > 0 ) UFilt0--;
+ if( UFilt1 > 0 ) UFilt1--;
+ }
+ else
+ pInfo->reg[MT2266_BAND_CTRL] &= ~(0x01);
+
+ pInfo->reg[MT2266_BAND_CTRL] =
+ (pInfo->reg[MT2266_BAND_CTRL] & 0x3F) | (LO_Band << 6);
+
+ pInfo->reg[MT2266_CLEARTUNE] = (UFilt1 << 4) | UFilt0;
+ /* Write UBANDsel [05] & ClearTune [06] */
+ status |= MT2266_WriteSub(pInfo->hUserData, pInfo->address, MT2266_BAND_CTRL, &pInfo->reg[MT2266_BAND_CTRL], 2);
+ }
+ }
+
+ /*
+ ** Check for LO lock
+ */
+ if (MT_NO_ERROR(status))
+ {
+ status |= MT2266_GetLocked(h);
+ }
+
+ return (status);
+}
+
diff --git a/api/mt2266.h b/api/mt2266.h
new file mode 100644
index 0000000..11bc038
--- /dev/null
+++ b/api/mt2266.h
@@ -0,0 +1,780 @@
+/*****************************************************************************
+**
+** Name: mt2266.h
+**
+** Copyright 2007 Microtune, Inc. All Rights Reserved
+**
+** This source code file contains confidential information and/or trade
+** secrets of Microtune, Inc. or its affiliates and is subject to the
+** terms of your confidentiality agreement with Microtune, Inc. or one of
+** its affiliates, as applicable.
+**
+*****************************************************************************/
+
+/*****************************************************************************
+**
+** Name: mt2266.h
+**
+** Description: Microtune MT2266 Tuner software interface.
+** Supports tuners with Part/Rev code: 0x85.
+**
+** Functions
+** Implemented: UData_t MT2266_Open
+** UData_t MT2266_Close
+** UData_t MT2266_ChangeFreq
+** UData_t MT2266_GetLocked
+** UData_t MT2266_GetParam
+** UData_t MT2266_GetReg
+** UData_t MT2266_GetUHFXFreqs
+** UData_t MT2266_GetUserData
+** UData_t MT2266_ReInit
+** UData_t MT2266_SetParam
+** UData_t MT2266_SetPowerModes
+** UData_t MT2266_SetReg
+** UData_t MT2266_SetUHFXFreqs
+** UData_t MT2266_Tune
+**
+** References: AN-00010: MicroTuner Serial Interface Application Note
+** MicroTune, Inc.
+**
+** Exports: None
+**
+** Dependencies: MT_ReadSub(hUserData, IC_Addr, subAddress, *pData, cnt);
+** - Read byte(s) of data from the two-wire bus.
+**
+** MT_WriteSub(hUserData, IC_Addr, subAddress, *pData, cnt);
+** - Write byte(s) of data to the two-wire bus.
+**
+** MT_Sleep(hUserData, nMinDelayTime);
+** - Delay execution for x milliseconds
+**
+** CVS ID: $Id: mt2266.h,v 1.3 2007/10/02 18:43:17 software Exp $
+** CVS Source: $Source: /export/home/cvsroot/software/tuners/MT2266/mt2266.h,v $
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 05-30-2006 DAD Ver 1.0: Modified version of mt2260.c (Ver 1.01).
+** N/A 11-01-2006 RSK Ver 1.02: Adding Get/Set UHFXFreq access functions.
+** 118 05-09-2007 RSK Ver 1.05: Adding Standard MTxxxx_Tune() API.
+**
+*****************************************************************************/
+#if !defined( __MT2266_H )
+#define __MT2266_H
+
+#include "mt2266_userdef.h"
+
+#if defined( __cplusplus )
+extern "C" /* Use "C" external linkage */
+{
+#endif
+
+/*
+** Parameter for function MT2266_GetParam & MT2266_SetParam that
+** specifies the tuning algorithm parameter to be read/written.
+*/
+typedef enum
+{
+ /* tuner address set by MT2266_Open() */
+ MT2266_IC_ADDR,
+
+ /* max number of MT2266 tuners set by MT2266_CNT in mt_userdef.h */
+ MT2266_MAX_OPEN,
+
+ /* current number of open MT2266 tuners set by MT2266_Open() */
+ MT2266_NUM_OPEN,
+
+ /* Number of tuner registers */
+ MT2266_NUM_REGS,
+
+ /* crystal frequency (default: 18000000 Hz) */
+ MT2266_SRO_FREQ,
+
+ /* min tuning step size (default: 50000 Hz) */
+ MT2266_STEPSIZE,
+
+ /* input center frequency set by MT2266_ChangeFreq() */
+ MT2266_INPUT_FREQ,
+
+ /* LO Frequency set by MT2266_ChangeFreq() */
+ MT2266_LO_FREQ,
+
+ /* output channel bandwidth (default: 8000000 Hz) */
+ MT2266_OUTPUT_BW,
+
+ /* Base band filter calibration RC code (default: N/A) */
+ MT2266_RC2_VALUE,
+
+ /* Base band filter nominal cal RC code (default: N/A) */
+ MT2266_RC2_NOMINAL,
+
+ /* RF attenuator A/D readback (read-only) */
+ MT2266_RF_ADC,
+
+ /* BB attenuator A/D readback (read-only) */
+ MT2266_BB_ADC,
+
+ /* RF attenuator setting (default: varies) */
+ MT2266_RF_ATTN,
+
+ /* BB attenuator setting (default: varies) */
+ MT2266_BB_ATTN,
+
+ /* RF external / internal atten control (default: varies) */
+ MT2266_RF_EXT,
+
+ /* BB external / internal atten control (default: 1) */
+ MT2266_BB_EXT,
+
+ /* LNA gain setting (0-15) (default: varies) */
+ MT2266_LNA_GAIN,
+
+ /* Decrement LNA Gain (where arg=min LNA Gain value) */
+ MT2266_LNA_GAIN_DECR,
+
+ /* Increment LNA Gain (where arg=max LNA Gain value) */
+ MT2266_LNA_GAIN_INCR,
+
+ /* Set for UHF max sensitivity mode */
+ MT2266_UHF_MAXSENS,
+
+ /* Set for UHF normal mode */
+ MT2266_UHF_NORMAL,
+
+ MT2266_EOP /* last entry in enumerated list */
+} MT2266_Param;
+
+
+/*
+** Parameter for function MT2266_GetUHFXFreqs & MT2266_SetUHFXFreqs that
+** specifies the particular frequency crossover table to be read/written.
+*/
+typedef enum
+{
+ /* Reference the UHF 0 filter, without any attenuation */
+ MT2266_UHF0,
+
+ /* Reference the UHF 1 filter, without any attenuation */
+ MT2266_UHF1,
+
+ /* Reference the UHF 0 filter, with attenuation */
+ MT2266_UHF0_ATTEN,
+
+ /* Reference the UHF 1 filter, with attenuation */
+ MT2266_UHF1_ATTEN,
+
+ MT2266_NUMBER_OF_XFREQ_SETS /* last entry in enumerated list */
+
+} MT2266_UHFXFreq_Type;
+
+
+#define MT2266_NUM_XFREQS (16)
+
+typedef UData_t MT2266_XFreq_Set[ MT2266_NUM_XFREQS ];
+
+/*
+** Constants for Specifying Operating Band of the Tuner
+*/
+#define MT2266_VHF_BAND (0)
+#define MT2266_UHF_BAND (1)
+#define MT2266_L_BAND (2)
+
+/*
+** Constants for specifying power modes these values
+** are bit-mapped and can be added/OR'ed to indicate
+** multiple settings. Examples:
+** MT2266_SetPowerModes(h, MT2266_NO_ENABLES + MT22266_SROsd);
+** MT2266_SetPowerModes(h, MT2266_ALL_ENABLES | MT22266_SRO_NOT_sd);
+** MT2266_SetPowerModes(h, MT2266_NO_ENABLES + MT22266_SROsd);
+** MT2266_SetPowerModes(h, MT2266_SROen + MT22266_LOen + MT2266_ADCen);
+*/
+#define MT2266_SROen (0x01)
+#define MT2266_LOen (0x02)
+#define MT2266_ADCen (0x04)
+#define MT2266_PDen (0x08)
+#define MT2266_DCOCen (0x10)
+#define MT2266_BBen (0x20)
+#define MT2266_MIXen (0x40)
+#define MT2266_LNAen (0x80)
+#define MT2266_ALL_ENABLES (0xFF)
+#define MT2266_NO_ENABLES (0x00)
+#define MT2266_SROsd (0x100)
+#define MT2266_SRO_NOT_sd (0x000)
+
+/* ====== Functions which are declared in mt2266.c File ======= */
+
+/******************************************************************************
+**
+** Name: MT2266_Open
+**
+** Description: Initialize the tuner's register values.
+**
+** Usage: status = MT2266_Open(0xC0, &hMT2266, NULL);
+** if (MT_IS_ERROR(status))
+** // Check error codes for reason
+**
+** Parameters: MT2266_Addr - Serial bus address of the tuner.
+** hMT2266 - Tuner handle passed back.
+** hUserData - User-defined data, if needed for the
+** MT_ReadSub() & MT_WriteSub functions.
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_TUNER_ID_ERR - Tuner Part/Rev code mismatch
+** MT_TUNER_INIT_ERR - Tuner initialization failed
+** MT_COMM_ERR - Serial bus communications error
+** MT_ARG_NULL - Null pointer argument passed
+** MT_TUNER_CNT_ERR - Too many tuners open
+**
+** Dependencies: MT_ReadSub - Read byte(s) of data from the two-wire bus
+** MT_WriteSub - Write byte(s) of data to the two-wire bus
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+******************************************************************************/
+UData_t MT2266_Open(UData_t MT2266_Addr,
+ Handle_t* hMT2266,
+ Handle_t hUserData);
+
+
+/******************************************************************************
+**
+** Name: MT2266_Close
+**
+** Description: Release the handle to the tuner.
+**
+** Parameters: hMT2266 - Handle to the MT2266 tuner
+**
+** Usage: status = MT2266_Close(hMT2266);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: mt_errordef.h - definition of error codes
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+******************************************************************************/
+UData_t MT2266_Close(Handle_t hMT2266);
+
+
+/****************************************************************************
+**
+** Name: MT2266_ChangeFreq
+**
+** Description: Change the tuner's tuned frequency to f_in.
+**
+** Parameters: h - Open handle to the tuner (from MT2266_Open).
+** f_in - RF input center frequency (in Hz).
+**
+** Usage: status = MT2266_ChangeFreq(hMT2266, f_in);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_DNC_UNLOCK - Downconverter PLL unlocked
+** MT_COMM_ERR - Serial bus communications error
+** MT_FIN_RANGE - Input freq out of range
+** MT_DNC_RANGE - Downconverter freq out of range
+**
+** Dependencies: MUST CALL MT2266_Open BEFORE MT2266_ChangeFreq!
+**
+** MT_ReadSub - Read byte(s) of data from the two-wire-bus
+** MT_WriteSub - Write byte(s) of data to the two-wire-bus
+** MT_Sleep - Delay execution for x milliseconds
+** MT2266_GetLocked - Checks to see if the PLL is locked
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+******************************************************************************/
+UData_t MT2266_ChangeFreq(Handle_t h,
+ UData_t f_in);
+
+
+/****************************************************************************
+**
+** Name: MT2266_GetLocked
+**
+** Description: Checks to see if the PLL is locked.
+**
+** Parameters: h - Open handle to the tuner (from MT2266_Open).
+**
+** Usage: status = MT2266_GetLocked(hMT2266);
+** if (status & MT_DNC_UNLOCK)
+** // error!, PLL is unlocked
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_DNC_UNLOCK - Downconverter PLL unlocked
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: MT_ReadSub - Read byte(s) of data from the serial bus
+** MT_Sleep - Delay execution for x milliseconds
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2266_GetLocked(Handle_t h);
+
+
+/****************************************************************************
+**
+** Name: MT2266_GetParam
+**
+** Description: Gets a tuning algorithm parameter.
+**
+** This function provides access to the internals of the
+** tuning algorithm - mostly for testing purposes.
+**
+** Parameters: h - Tuner handle (returned by MT2266_Open)
+** param - Tuning algorithm parameter
+** (see enum MT2266_Param)
+** pValue - ptr to returned value
+**
+** param Description
+** ---------------------- --------------------------------
+** MT2266_IC_ADDR Serial Bus address of this tuner
+** MT2266_MAX_OPEN Max number of MT2266's that can be open
+** MT2266_NUM_OPEN Number of MT2266's currently open
+** MT2266_NUM_REGS Number of tuner registers
+** MT2266_SRO_FREQ crystal frequency
+** MT2266_STEPSIZE minimum tuning step size
+** MT2266_INPUT_FREQ input center frequency
+** MT2266_LO_FREQ LO Frequency
+** MT2266_OUTPUT_BW Output channel bandwidth
+** MT2266_RC2_VALUE Base band filter cal RC code (method 2)
+** MT2266_RF_ADC RF attenuator A/D readback
+** MT2266_RF_ATTN RF attenuation (0-255)
+** MT2266_RF_EXT External control of RF atten
+** MT2266_LNA_GAIN LNA gain setting (0-15)
+** MT2266_BB_ADC BB attenuator A/D readback
+** MT2266_BB_ATTN Baseband attenuation (0-255)
+** MT2266_BB_EXT External control of BB atten
+**
+** Usage: status |= MT2266_GetParam(hMT2266,
+** MT2266_OUTPUT_BW,
+** &f_bw);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_NULL - Null pointer argument passed
+** MT_ARG_RANGE - Invalid parameter requested
+**
+** Dependencies: USERS MUST CALL MT2266_Open() FIRST!
+**
+** See Also: MT2266_SetParam, MT2266_Open
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2266_GetParam(Handle_t h,
+ MT2266_Param param,
+ UData_t* pValue);
+
+
+/****************************************************************************
+**
+** Name: MT2266_GetReg
+**
+** Description: Gets an MT2266 register.
+**
+** Parameters: h - Tuner handle (returned by MT2266_Open)
+** reg - MT2266 register/subaddress location
+** *val - MT2266 register/subaddress value
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_NULL - Null pointer argument passed
+** MT_ARG_RANGE - Argument out of range
+**
+** Dependencies: USERS MUST CALL MT2266_Open() FIRST!
+**
+** Use this function if you need to read a register from
+** the MT2266.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2266_GetReg(Handle_t h,
+ U8Data reg,
+ U8Data* val);
+
+
+/****************************************************************************
+**
+** Name: MT2266_GetUHFXFreqs
+**
+** Description: Retrieves the specified set of UHF Crossover Frequencies
+**
+** Parameters: h - Open handle to the tuner (from MT2266_Open).
+**
+** Usage: MT2266_Freq_Set tmpFreqs;
+** status = MT2266_GetUHFXFreqs(hMT2266,
+** MT2266_UHF1_WITH_ATTENUATION,
+** tmpFreqs );
+** if (status & MT_ARG_RANGE)
+** // error, Invalid UHF Crossover Frequency Set requested.
+** else
+** for( int i = 0; i < MT2266_NUM_XFREQS; i++ )
+** . . .
+**
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_ARG_RANGE - freq_type is out of range.
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: freqs_buffer *must* be defined of type MT2266_Freq_Set
+** to assure sufficient space allocation!
+**
+** USERS MUST CALL MT2266_Open() FIRST!
+**
+** See Also: MT2266_SetUHFXFreqs
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 11-01-2006 RSK Original.
+**
+****************************************************************************/
+UData_t MT2266_GetUHFXFreqs(Handle_t h,
+ MT2266_UHFXFreq_Type freq_type,
+ MT2266_XFreq_Set freqs_buffer);
+
+
+/****************************************************************************
+**
+** Name: MT2266_GetUserData
+**
+** Description: Gets the user-defined data item.
+**
+** Parameters: h - Tuner handle (returned by MT2266_Open)
+**
+** Usage: status = MT2266_GetUserData(hMT2266, &hUserData);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_NULL - Null pointer argument passed
+**
+** Dependencies: USERS MUST CALL MT2266_Open() FIRST!
+**
+** The hUserData parameter is a user-specific argument
+** that is stored internally with the other tuner-
+** specific information.
+**
+** For example, if additional arguments are needed
+** for the user to identify the device communicating
+** with the tuner, this argument can be used to supply
+** the necessary information.
+**
+** The hUserData parameter is initialized in the tuner's
+** Open function to NULL.
+**
+** See Also: MT2266_SetUserData, MT2266_Open
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2266_GetUserData(Handle_t h,
+ Handle_t* hUserData);
+
+
+/******************************************************************************
+**
+** Name: MT2266_ReInit
+**
+** Description: Initialize the tuner's register values.
+**
+** Parameters: h - Tuner handle (returned by MT2266_Open)
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_TUNER_ID_ERR - Tuner Part/Rev code mismatch
+** MT_TUNER_INIT_ERR - Tuner initialization failed
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_COMM_ERR - Serial bus communications error
+**
+** Dependencies: MT_ReadSub - Read byte(s) of data from the two-wire bus
+** MT_WriteSub - Write byte(s) of data to the two-wire bus
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+******************************************************************************/
+UData_t MT2266_ReInit(Handle_t h);
+
+
+/****************************************************************************
+**
+** Name: MT2266_SetParam
+**
+** Description: Sets a tuning algorithm parameter.
+**
+** This function provides access to the internals of the
+** tuning algorithm. You can override many of the tuning
+** algorithm defaults using this function.
+**
+** Parameters: h - Tuner handle (returned by MT2266_Open)
+** param - Tuning algorithm parameter
+** (see enum MT2266_Param)
+** nValue - value to be set
+**
+** param Description
+** ---------------------- --------------------------------
+** MT2266_SRO_FREQ crystal frequency
+** MT2266_STEPSIZE minimum tuning step size
+** MT2266_INPUT_FREQ Center of input channel
+** MT2266_OUTPUT_BW Output channel bandwidth
+** MT2266_RF_ATTN RF attenuation (0-255)
+** MT2266_RF_EXT External control of RF atten
+** MT2266_LNA_GAIN LNA gain setting (0-15)
+** MT2266_LNA_GAIN_DECR Decrement LNA Gain (arg=min)
+** MT2266_LNA_GAIN_INCR Increment LNA Gain (arg=max)
+** MT2266_BB_ATTN Baseband attenuation (0-255)
+** MT2266_BB_EXT External control of BB atten
+** MT2266_UHF_MAXSENS Set for UHF max sensitivity mode
+** MT2266_UHF_NORMAL Set for UHF normal mode
+**
+** Usage: status |= MT2266_SetParam(hMT2266,
+** MT2266_STEPSIZE,
+** 50000);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_NULL - Null pointer argument passed
+** MT_ARG_RANGE - Invalid parameter requested
+** or set value out of range
+** or non-writable parameter
+**
+** Dependencies: USERS MUST CALL MT2266_Open() FIRST!
+**
+** See Also: MT2266_GetParam, MT2266_Open
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2266_SetParam(Handle_t h,
+ MT2266_Param param,
+ UData_t nValue);
+
+
+/****************************************************************************
+**
+** Name: MT2266_SetPowerModes
+**
+** Description: Sets the bits in the MT2266_ENABLES register and the
+** SROsd bit in the MT2266_SROADC_CTRL register.
+**
+** Parameters: h - Tuner handle (returned by MT2266_Open)
+** flags - Bit mask of flags to indicate enabled
+** bits.
+**
+** Usage: status = MT2266_SetPowerModes(hMT2266, flags);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: USERS MUST CALL MT2266_Open() FIRST!
+**
+** The bits in the MT2266_ENABLES register and the
+** SROsd bit are set according to the supplied flags.
+**
+** The pre-defined flags are as follows:
+** MT2266_SROen
+** MT2266_LOen
+** MT2266_ADCen
+** MT2266_PDen
+** MT2266_DCOCen
+** MT2266_BBen
+** MT2266_MIXen
+** MT2266_LNAen
+** MT2266_ALL_ENABLES
+** MT2266_NO_ENABLES
+** MT2266_SROsd
+** MT2266_SRO_NOT_sd
+**
+** ONLY the enable bits (or SROsd bit) specified in the
+** flags parameter will be set. Any flag which is not
+** included, will cause that bit to be disabled.
+**
+** The ALL_ENABLES, NO_ENABLES, and SRO_NOT_sd constants
+** are for convenience. The NO_ENABLES and SRO_NOT_sd
+** do not actually have to be included, but are provided
+** for clarity.
+**
+** See Also: MT2266_Open
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2266_SetPowerModes(Handle_t h,
+ UData_t flags);
+
+
+/****************************************************************************
+**
+** Name: MT2266_SetReg
+**
+** Description: Sets an MT2266 register.
+**
+** Parameters: h - Tuner handle (returned by MT2266_Open)
+** reg - MT2266 register/subaddress location
+** val - MT2266 register/subaddress value
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_ARG_RANGE - Argument out of range
+**
+** Dependencies: USERS MUST CALL MT2266_Open() FIRST!
+**
+** Use this function if you need to override a default
+** register value
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 02-03-2006 DAD/JWS Original.
+**
+****************************************************************************/
+UData_t MT2266_SetReg(Handle_t h,
+ U8Data reg,
+ U8Data val);
+
+
+/****************************************************************************
+**
+** Name: MT2266_SetUHFXFreqs
+**
+** Description: Retrieves the specified set of UHF Crossover Frequencies
+**
+** Parameters: h - Open handle to the tuner (from MT2266_Open).
+**
+** Usage: MT2266_Freq_Set tmpFreqs;
+** status = MT2266_SetUHFXFreqs(hMT2266,
+** MT2266_UHF1_WITH_ATTENUATION,
+** tmpFreqs );
+** if (status & MT_ARG_RANGE)
+** // error, Invalid UHF Crossover Frequency Set requested.
+** else
+** for( int i = 0; i < MT2266_NUM_XFREQS; i++ )
+** . . .
+**
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_ARG_RANGE - freq_type is out of range.
+** MT_INV_HANDLE - Invalid tuner handle
+**
+** Dependencies: freqs_buffer *must* be defined of type MT2266_Freq_Set
+** to assure sufficient space allocation!
+**
+** USERS MUST CALL MT2266_Open() FIRST!
+**
+** See Also: MT2266_SetUHFXFreqs
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 11_01-2006 RSK Original.
+**
+****************************************************************************/
+UData_t MT2266_SetUHFXFreqs(Handle_t h,
+ MT2266_UHFXFreq_Type freq_type,
+ MT2266_XFreq_Set freqs_buffer);
+
+
+/****************************************************************************
+**
+** Name: MT2266_Tune
+**
+** Description: Change the tuner's tuned frequency to f_in.
+**
+** Parameters: h - Open handle to the tuner (from MT2266_Open).
+** f_in - RF input center frequency (in Hz).
+**
+** Usage: status = MT2266_Tune(hMT2266, f_in);
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_INV_HANDLE - Invalid tuner handle
+** MT_DNC_UNLOCK - Downconverter PLL unlocked
+** MT_COMM_ERR - Serial bus communications error
+** MT_FIN_RANGE - Input freq out of range
+** MT_DNC_RANGE - Downconverter freq out of range
+**
+** Dependencies: MUST CALL MT2266_Open BEFORE MT2266_Tune!
+**
+** MT_ReadSub - Read byte(s) of data from the two-wire-bus
+** MT_WriteSub - Write byte(s) of data to the two-wire-bus
+** MT_Sleep - Delay execution for x milliseconds
+** MT2266_GetLocked - Checks to see if the PLL is locked
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** 118 05-09-2007 RSK Original API Introduction (was ChangeFreq).
+**
+******************************************************************************/
+UData_t MT2266_Tune(Handle_t h,
+ UData_t f_in);
+
+
+#if defined( __cplusplus )
+}
+#endif
+
+#endif \ No newline at end of file
diff --git a/api/mt2266_userdef.c b/api/mt2266_userdef.c
new file mode 100644
index 0000000..cd325ac
--- /dev/null
+++ b/api/mt2266_userdef.c
@@ -0,0 +1,545 @@
+/*****************************************************************************
+**
+** Name: mt_userdef.c
+**
+** Description: User-defined MicroTuner software interface
+**
+** Functions
+** Requiring
+** Implementation: MT_WriteSub
+** MT_ReadSub
+** MT_Sleep
+**
+** References: None
+**
+** Exports: None
+**
+** CVS ID: $Id: mt_userdef.c,v 1.2 2006/10/26 16:39:18 software Exp $
+** CVS Source: $Source: /export/home/cvsroot/software/tuners/MT2266/mt_userdef.c,v $
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 03-25-2004 DAD Original
+**
+*****************************************************************************/
+#include "mt2266_userdef.h"
+
+
+/*****************************************************************************
+**
+** Name: MT_WriteSub
+**
+** Description: Write values to device using a two-wire serial bus.
+**
+** Parameters: handle - User-specific I/O parameter that was
+** passed to tuner's Open function.
+** addr - device serial bus address (value passed
+** as parameter to MTxxxx_Open)
+** subAddress - serial bus sub-address (Register Address)
+** data - pointer to the Data to be written to the
+** device
+** cnt - number of bytes/registers to be written
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** user-defined
+**
+** Notes: This is a callback function that is called from the
+** the tuning algorithm. You MUST provide code for this
+** function to write data using the tuner's 2-wire serial
+** bus.
+**
+** The handle parameter is a user-specific argument.
+** If additional arguments are needed for the user's
+** serial bus read/write functions, this argument can be
+** used to supply the necessary information.
+** The handle parameter is initialized in the tuner's Open
+** function.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 03-25-2004 DAD Original
+**
+*****************************************************************************/
+UData_t MT2266_WriteSub(Handle_t handle,
+ UData_t addr,
+ U8Data subAddress,
+ U8Data *data,
+ UData_t cnt)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ /*
+ ** ToDo: Add code here to implement a serial-bus write
+ ** operation to the MTxxxx tuner. If successful,
+ ** return MT_OK.
+ */
+ PUserData userData;
+ U8Data * buffer;
+ U8Data i;
+ U8Data blocks;
+ U8Data remains;
+
+ blocks = (U8Data) (cnt / 17);
+ remains = (U8Data) (cnt % 17);
+
+ userData = (PUserData) handle;
+
+ buffer = data;
+ for (i = 0; i < blocks; i++) {
+ status = Standard_writeTunerRegisters (userData->demodulator, userData->chip, (unsigned short)subAddress + (unsigned short)i * 17, 17, buffer);
+ if (status) goto exit;
+
+ buffer += 17;
+ }
+
+ if (remains)
+ {
+ status = Standard_writeTunerRegisters (userData->demodulator, userData->chip, (unsigned short)subAddress + (unsigned short)i * 17, remains, buffer);
+ if (status) goto exit;
+ }
+
+exit:
+ return (status);
+}
+
+
+/*****************************************************************************
+**
+** Name: MT_ReadSub
+**
+** Description: Read values from device using a two-wire serial bus.
+**
+** Parameters: handle - User-specific I/O parameter that was
+** passed to tuner's Open function.
+** addr - device serial bus address (value passed
+** as parameter to MTxxxx_Open)
+** subAddress - serial bus sub-address (Register Address)
+** data - pointer to the Data to be written to the
+** device
+** cnt - number of bytes/registers to be written
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** user-defined
+**
+** Notes: This is a callback function that is called from the
+** the tuning algorithm. You MUST provide code for this
+** function to read data using the tuner's 2-wire serial
+** bus.
+**
+** The handle parameter is a user-specific argument.
+** If additional arguments are needed for the user's
+** serial bus read/write functions, this argument can be
+** used to supply the necessary information.
+** The handle parameter is initialized in the tuner's Open
+** function.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 03-25-2004 DAD Original
+**
+*****************************************************************************/
+UData_t MT2266_ReadSub(Handle_t handle,
+ UData_t addr,
+ U8Data subAddress,
+ U8Data *data,
+ UData_t cnt)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+
+ /*
+ ** ToDo: Add code here to implement a serial-bus read
+ ** operation to the MTxxxx tuner. If successful,
+ ** return MT_OK.
+ */
+ PUserData userData;
+ U8Data buffer[8];
+ U8Data i;
+
+ /*
+ ** ToDo: Add code here to implement a serial-bus read
+ ** operation to the MTxxxx tuner. If successful,
+ ** return true.
+ */
+ userData = (PUserData)handle;
+
+ for (i = 0; i < cnt; i++)
+ {
+ status = Standard_readTunerRegisters (userData->demodulator, userData->chip, subAddress + i, (U8Data)1, &buffer[0]);
+ if (status) goto exit;
+ *(data + i) = buffer[0];
+ }
+
+exit:
+ return (status);
+}
+
+
+/*****************************************************************************
+**
+** Name: MT_Sleep
+**
+** Description: Delay execution for "nMinDelayTime" milliseconds
+**
+** Parameters: handle - User-specific I/O parameter that was
+** passed to tuner's Open function.
+** nMinDelayTime - Delay time in milliseconds
+**
+** Returns: None.
+**
+** Notes: This is a callback function that is called from the
+** the tuning algorithm. You MUST provide code that
+** blocks execution for the specified period of time.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 03-25-2004 DAD Original
+**
+*****************************************************************************/
+void MT2266_Sleep(Handle_t handle,
+ UData_t nMinDelayTime)
+{
+ PUserData userData;
+ /*
+ ** ToDo: Add code here to implement a OS blocking
+ ** for a period of "nMinDelayTime" milliseconds.
+ */
+ userData = (PUserData)handle;
+
+ User_delay (userData->demodulator, (unsigned long) nMinDelayTime);
+}
+
+
+#if defined(MT2060_CNT)
+#if MT2060_CNT > 0
+/*****************************************************************************
+**
+** Name: MT_TunerGain (MT2060 only)
+**
+** Description: Measure the relative tuner gain using the demodulator
+**
+** Parameters: handle - User-specific I/O parameter that was
+** passed to tuner's Open function.
+** pMeas - Tuner gain (1/100 of dB scale).
+** ie. 1234 = 12.34 (dB)
+**
+** Returns: status:
+** MT_OK - No errors
+** user-defined errors could be set
+**
+** Notes: This is a callback function that is called from the
+** the 1st IF location routine. You MUST provide
+** code that measures the relative tuner gain in a dB
+** (not linear) scale. The return value is an integer
+** value scaled to 1/100 of a dB.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 06-16-2004 DAD Original
+** N/A 11-30-2004 DAD Renamed from MT_DemodInputPower. This name
+** better describes what this function does.
+**
+*****************************************************************************/
+int IfGainTable[256] = {
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 6000,
+ 5993,
+ 5987,
+ 5981,
+ 5975,
+ 5968,
+ 5962,
+ 5956,
+ 5950,
+ 5949,
+ 5948,
+ 5947,
+ 5946,
+ 5945,
+ 5944,
+ 5943,
+ 5942,
+ 5941,
+ 5940,
+ 5939,
+ 5938,
+ 5937,
+ 5937,
+ 5936,
+ 5935,
+ 5934,
+ 5933,
+ 5932,
+ 5931,
+ 5930,
+ 5929,
+ 5928,
+ 5927,
+ 5926,
+ 5925,
+ 5925,
+ 5924,
+ 5923,
+ 5922,
+ 5921,
+ 5920,
+ 5919,
+ 5918,
+ 5917,
+ 5916,
+ 5915,
+ 5914,
+ 5913,
+ 5912,
+ 5912,
+ 5911,
+ 5910,
+ 5909,
+ 5908,
+ 5907,
+ 5906,
+ 5905,
+ 5904,
+ 5903,
+ 5902,
+ 5901,
+ 5900,
+ 5900,
+ 5885,
+ 5871,
+ 5857,
+ 5842,
+ 5828,
+ 5814,
+ 5800,
+ 5785,
+ 5771,
+ 5757,
+ 5742,
+ 5728,
+ 5714,
+ 5700,
+ 5685,
+ 5671,
+ 5657,
+ 5642,
+ 5628,
+ 5614,
+ 5600,
+ 5585,
+ 5571,
+ 5557,
+ 5542,
+ 5528,
+ 5514,
+ 5500,
+ 5485,
+ 5471,
+ 5457,
+ 5442,
+ 5428,
+ 5414,
+ 5400,
+ 5381,
+ 5362,
+ 5344,
+ 5325,
+ 5307,
+ 5288,
+ 5270,
+ 5251,
+ 5233,
+ 5214,
+ 5196,
+ 5177,
+ 5159,
+ 5140,
+ 5122,
+ 5103,
+ 5085,
+ 5066,
+ 5048,
+ 5029,
+ 5011,
+ 4992,
+ 4974,
+ 4955,
+ 4937,
+ 4918,
+ 4900,
+ 4871,
+ 4842,
+ 4813,
+ 4784,
+ 4755,
+ 4726,
+ 4697,
+ 4668,
+ 4639,
+ 4610,
+ 4581,
+ 4552,
+ 4523,
+ 4494,
+ 4465,
+ 4436,
+ 4407,
+ 4378,
+ 4350,
+ 4318,
+ 4287,
+ 4256,
+ 4225,
+ 4193,
+ 4162,
+ 4131,
+ 4100,
+ 4068,
+ 4037,
+ 4006,
+ 3975,
+ 3943,
+ 3912,
+ 3881,
+ 3850,
+ 3809,
+ 3768,
+ 3727,
+ 3686,
+ 3645,
+ 3604,
+ 3563,
+ 3522,
+ 3481,
+ 3440,
+ 3400,
+ 3358,
+ 3316,
+ 3275,
+ 3233,
+ 3191,
+ 3150,
+ 3108,
+ 3066,
+ 3025,
+ 2983,
+ 2941,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900,
+ 2900
+};
+
+UData_t MT2266_TunerGain(Handle_t handle,
+ SData_t* pMeas)
+{
+ UData_t status = MT_OK; /* Status to be returned */
+ U8Data rfAgc;
+ U8Data ifAgc;
+ PUserData userData;
+
+ /*
+ ** ToDo: Add code here to return the gain / power level measured
+ ** at the input to the demodulator.
+ */
+
+
+ /*
+ ** ToDo: Add code here to return the gain / power level measured
+ ** at the input to the demodulator.
+ */
+ userData = (PUserData)handle;
+
+ MT2060_Sleep(handle, 100);
+
+ status = Standard_getIfAgcGain (userData->demodulator, userData->chip, &rfAgc, &ifAgc);
+ if (status) goto exit;
+
+ *pMeas = IfGainTable[ifAgc];
+
+exit:
+ return (status);
+}
+#endif
+#endif \ No newline at end of file
diff --git a/api/mt2266_userdef.h b/api/mt2266_userdef.h
new file mode 100644
index 0000000..bca161f
--- /dev/null
+++ b/api/mt2266_userdef.h
@@ -0,0 +1,288 @@
+/*****************************************************************************
+**
+** Name: mt_userdef.h
+**
+** Description: User-defined data types needed by MicroTuner source code.
+**
+** Customers must provide the code for these functions
+** in the file "mt_userdef.c".
+**
+** Customers must verify that the typedef's in the
+** "Data Types" section are correct for their platform.
+**
+** Functions
+** Requiring
+** Implementation: MT_WriteSub
+** MT_ReadSub
+** MT_Sleep
+**
+** References: None
+**
+** Exports: None
+**
+** CVS ID: $Id: mt_userdef.h,v 1.1 2006/06/22 20:18:12 software Exp $
+** CVS Source: $Source: /export/home/cvsroot/software/tuners/MT2266/mt_userdef.h,v $
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 03-25-2004 DAD Original
+** 082 12-06-2004 JWS Multi-tuner support - requires MTxxxx_CNT
+** declarations
+**
+*****************************************************************************/
+#if !defined( __MT_USERDEF_H )
+#define __MT_USERDEF_H
+
+#include "mt_errordef.h"
+#include "standard.h"
+
+#if defined( __cplusplus )
+extern "C" /* Use "C" external linkage */
+{
+#endif
+
+/*
+** Data Types
+*/
+typedef unsigned char U8Data; /* type corresponds to 8 bits */
+typedef unsigned long UData_t; /* type must be at least 32 bits */
+typedef int SData_t; /* type must be at least 32 bits */
+typedef void * Handle_t; /* memory pointer type */
+typedef double FData_t; /* floating point data type */
+
+typedef struct {
+ Byte chip;
+ Demodulator* demodulator;
+}UserData, *PUserData;
+
+#define AF901X_CAN_TUNER 0x1
+#define AF901X_SILICON_TUNER 0x2
+
+#define MAX_UDATA (4294967295) /* max value storable in UData_t */
+
+/*
+** Define an MTxxxx_CNT macro for each type of tuner that will be built
+** into your application (e.g., MT2121, MT2060). MT_TUNER_CNT
+** must be set to the SUM of all of the MTxxxx_CNT macros.
+**
+** #define MT2050_CNT (1)
+** #define MT2060_CNT (2)
+** #define MT2111_CNT (1)
+** #define MT2121_CNT (3)
+*/
+
+#define MT2266_CNT (2)
+#if !defined( MT_TUNER_CNT )
+#define MT_TUNER_CNT (2) /* total num of MicroTuner tuners */
+#endif
+
+/*
+** Optional user-defined Error/Info Codes (examples below)
+**
+** This is the area where you can define user-specific error/info return
+** codes to be returned by any of the functions you are responsible for
+** writing such as MT_WriteSub() and MT_ReadSub. There are four bits
+** available in the status field for your use. When set, these
+** bits will be returned in the status word returned by any tuner driver
+** call. If you OR in the MT_ERROR bit as well, the tuner driver code
+** will treat the code as an error.
+**
+** The following are a few examples of errors you can provide.
+**
+** Example 1:
+** You might check to see the hUserData handle is correct and issue
+** MY_USERDATA_INVALID which would be defined like this:
+**
+** #define MY_USERDATA_INVALID (MT_USER_ERROR | MT_USER_DEFINED1)
+**
+**
+** Example 2:
+** You might be able to provide more descriptive two-wire bus errors:
+**
+** #define NO_ACK (MT_USER_ERROR | MT_USER_DEFINED1)
+** #define NO_NACK (MT_USER_ERROR | MT_USER_DEFINED2)
+** #define BUS_BUSY (MT_USER_ERROR | MT_USER_DEFINED3)
+**
+**
+** Example 3:
+** You can also provide information (non-error) feedback:
+**
+** #define MY_INFO_1 (MT_USER_DEFINED1)
+**
+**
+** Example 4:
+** You can combine the fields together to make a multi-bit field.
+** This one can provide the tuner number based off of the addr
+** passed to MT_WriteSub or MT_ReadSub. It assumes that
+** MT_USER_DEFINED4 through MT_USER_DEFINED1 are contiguously. If
+** TUNER_NUM were OR'ed into the status word on an error, you could
+** use this to identify which tuner had the problem (and whether it
+** was during a read or write operation).
+**
+** #define TUNER_NUM ((addr & 0x07) >> 1) << MT_USER_SHIFT
+**
+*/
+
+/*****************************************************************************
+**
+** Name: MT_WriteSub
+**
+** Description: Write values to device using a two-wire serial bus.
+**
+** Parameters: hUserData - User-specific I/O parameter that was
+** passed to tuner's Open function.
+** addr - device serial bus address (value passed
+** as parameter to MTxxxx_Open)
+** subAddress - serial bus sub-address (Register Address)
+** pData - pointer to the Data to be written to the
+** device
+** cnt - number of bytes/registers to be written
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** user-defined
+**
+** Notes: This is a callback function that is called from the
+** the tuning algorithm. You MUST provide code for this
+** function to write data using the tuner's 2-wire serial
+** bus.
+**
+** The hUserData parameter is a user-specific argument.
+** If additional arguments are needed for the user's
+** serial bus read/write functions, this argument can be
+** used to supply the necessary information.
+** The hUserData parameter is initialized in the tuner's Open
+** function.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 03-25-2004 DAD Original
+**
+*****************************************************************************/
+UData_t MT2266_WriteSub(Handle_t hUserData,
+ UData_t addr,
+ U8Data subAddress,
+ U8Data *pData,
+ UData_t cnt);
+
+
+/*****************************************************************************
+**
+** Name: MT_ReadSub
+**
+** Description: Read values from device using a two-wire serial bus.
+**
+** Parameters: hUserData - User-specific I/O parameter that was
+** passed to tuner's Open function.
+** addr - device serial bus address (value passed
+** as parameter to MTxxxx_Open)
+** subAddress - serial bus sub-address (Register Address)
+** pData - pointer to the Data to be written to the
+** device
+** cnt - number of bytes/registers to be written
+**
+** Returns: status:
+** MT_OK - No errors
+** MT_COMM_ERR - Serial bus communications error
+** user-defined
+**
+** Notes: This is a callback function that is called from the
+** the tuning algorithm. You MUST provide code for this
+** function to read data using the tuner's 2-wire serial
+** bus.
+**
+** The hUserData parameter is a user-specific argument.
+** If additional arguments are needed for the user's
+** serial bus read/write functions, this argument can be
+** used to supply the necessary information.
+** The hUserData parameter is initialized in the tuner's Open
+** function.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 03-25-2004 DAD Original
+**
+*****************************************************************************/
+UData_t MT2266_ReadSub(Handle_t hUserData,
+ UData_t addr,
+ U8Data subAddress,
+ U8Data *pData,
+ UData_t cnt);
+
+
+/*****************************************************************************
+**
+** Name: MT_Sleep
+**
+** Description: Delay execution for "nMinDelayTime" milliseconds
+**
+** Parameters: hUserData - User-specific I/O parameter that was
+** passed to tuner's Open function.
+** nMinDelayTime - Delay time in milliseconds
+**
+** Returns: None.
+**
+** Notes: This is a callback function that is called from the
+** the tuning algorithm. You MUST provide code that
+** blocks execution for the specified period of time.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 03-25-2004 DAD Original
+**
+*****************************************************************************/
+void MT2266_Sleep(Handle_t hUserData,
+ UData_t nMinDelayTime);
+
+
+#if defined(MT2060_CNT)
+#if MT2060_CNT > 0
+/*****************************************************************************
+**
+** Name: MT_TunerGain (for MT2060 only)
+**
+** Description: Measure the relative tuner gain using the demodulator
+**
+** Parameters: hUserData - User-specific I/O parameter that was
+** passed to tuner's Open function.
+** pMeas - Tuner gain (1/100 of dB scale).
+** ie. 1234 = 12.34 (dB)
+**
+** Returns: status:
+** MT_OK - No errors
+** user-defined errors could be set
+**
+** Notes: This is a callback function that is called from the
+** the 1st IF location routine. You MUST provide
+** code that measures the relative tuner gain in a dB
+** (not linear) scale. The return value is an integer
+** value scaled to 1/100 of a dB.
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 06-16-2004 DAD Original
+** N/A 11-30-2004 DAD Renamed from MT_DemodInputPower. This name
+** better describes what this function does.
+**
+*****************************************************************************/
+UData_t MT2266_TunerGain(Handle_t hUserData,
+ SData_t* pMeas);
+#endif
+#endif
+
+#if defined( __cplusplus )
+}
+#endif
+
+#endif \ No newline at end of file
diff --git a/api/mt_errordef.h b/api/mt_errordef.h
new file mode 100644
index 0000000..99fb85b
--- /dev/null
+++ b/api/mt_errordef.h
@@ -0,0 +1,143 @@
+/*****************************************************************************
+**
+** Name: mt_errordef.h
+**
+** Description: Definition of bits in status/error word used by various
+** MicroTuner control programs.
+**
+** References: None
+**
+** Exports: None
+**
+** CVS ID: $Id: mt_errordef.h,v 1.1 2006/06/22 20:18:12 software Exp $
+** CVS Source: $Source: /export/home/cvsroot/software/tuners/MT2266/mt_errordef.h,v $
+**
+** Revision History:
+**
+** SCR Date Author Description
+** -------------------------------------------------------------------------
+** N/A 09-09-2004 JWS Original
+** 088 01-26-2005 DAD Added MT_TUNER_INIT_ERR.
+** N/A 12-09-2005 DAD Added MT_TUNER_TIMEOUT (info).
+**
+*****************************************************************************/
+
+/*
+** Note to users: DO NOT EDIT THIS FILE
+**
+** If you wish to rename any of the "user defined" bits,
+** it should be done in the user file that includes this
+** source file (e.g. mt_userdef.h)
+**
+*/
+
+
+
+/*
+** 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
+** 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+** M U <- Info Codes --> <# Spurs> < User> <----- Err Codes ----->
+**
+** 31 = MT_ERROR - Master Error Flag. If set, check Err Codes for reason.
+** 30 = MT_USER_ERROR - User-declared error flag.
+** 29 = Unused
+** 28 = Unused
+** 27 = MT_DNC_RANGE
+** 26 = MT_UPC_RANGE
+** 25 = MT_FOUT_RANGE
+** 24 = MT_FIN_OUT_OF_RANGE
+** 23 = MT_SPUR_PRESENT - Unavoidable spur in output
+** 22 = MT_TUNER_TIMEOUT
+** 21 = Unused
+** 20 = Unused
+** 19 = MT_SPUR_CNT_MASK (MSB) - Count of avoided spurs
+** 18 = MT_SPUR_CNT_MASK
+** 17 = MT_SPUR_CNT_MASK
+** 16 = MT_SPUR_CNT_MASK
+** 15 = MT_SPUR_CNT_MASK (LSB)
+** 14 = MT_USER_DEFINED4 - User-definable bit (see MT_Userdef.h)
+** 13 = MT_USER_DEFINED3 - User-definable bit (see MT_Userdef.h)
+** 12 = MT_USER_DEFINED2 - User-definable bit (see MT_Userdef.h)
+** 11 = MT_USER_DEFINED1 - User-definable bit (see MT_Userdef.h)
+** 10 = Unused
+** 9 = MT_TUNER_INIT_ERR - Tuner initialization error
+** 8 = MT_TUNER_ID_ERR - Tuner Part Code / Rev Code mismatches expected value
+** 7 = MT_TUNER_CNT_ERR - Attempt to open more than MT_TUNER_CNT tuners
+** 6 = MT_ARG_NULL - Null pointer passed as argument
+** 5 = MT_ARG_RANGE - Argument value out of range
+** 4 = MT_INV_HANDLE - Tuner handle is invalid
+** 3 = MT_COMM_ERR - Serial bus communications error
+** 2 = MT_DNC_UNLOCK - Downconverter PLL is unlocked
+** 1 = MT_UPC_UNLOCK - Upconverter PLL is unlocked
+** 0 = MT_UNKNOWN - Unknown error
+*/
+#define MT_ERROR (1 << 31)
+#define MT_USER_ERROR (1 << 30)
+
+/* Macro to be used to check for errors */
+#define MT_IS_ERROR(s) (((s) >> 30) != 0)
+#define MT_NO_ERROR(s) (((s) >> 30) == 0)
+
+
+#define MT_OK (0x00000000)
+
+/* Unknown error */
+#define MT_UNKNOWN (0x80000001)
+
+/* Error: Upconverter PLL is not locked */
+#define MT_UPC_UNLOCK (0x80000002)
+
+/* Error: Downconverter PLL is not locked */
+#define MT_DNC_UNLOCK (0x80000004)
+
+/* Error: Two-wire serial bus communications error */
+#define MT_COMM_ERR (0x80000008)
+
+/* Error: Tuner handle passed to function was invalid */
+#define MT_INV_HANDLE (0x80000010)
+
+/* Error: Function argument is invalid (out of range) */
+#define MT_ARG_RANGE (0x80000020)
+
+/* Error: Function argument (ptr to return value) was NULL */
+#define MT_ARG_NULL (0x80000040)
+
+/* Error: Attempt to open more than MT_TUNER_CNT tuners */
+#define MT_TUNER_CNT_ERR (0x80000080)
+
+/* Error: Tuner Part Code / Rev Code mismatches expected value */
+#define MT_TUNER_ID_ERR (0x80000100)
+
+/* Error: Tuner Initialization failure */
+#define MT_TUNER_INIT_ERR (0x80000200)
+
+/* User-definable fields (see mt_userdef.h) */
+#define MT_USER_DEFINED1 (0x00001000)
+#define MT_USER_DEFINED2 (0x00002000)
+#define MT_USER_DEFINED3 (0x00004000)
+#define MT_USER_DEFINED4 (0x00008000)
+#define MT_USER_MASK (0x4000f000)
+#define MT_USER_SHIFT (12)
+
+/* Info: Mask of bits used for # of LO-related spurs that were avoided during tuning */
+#define MT_SPUR_CNT_MASK (0x001f0000)
+#define MT_SPUR_SHIFT (16)
+
+/* Info: Tuner timeout waiting for condition */
+#define MT_TUNER_TIMEOUT (0x00400000)
+
+/* Info: Unavoidable LO-related spur may be present in the output */
+#define MT_SPUR_PRESENT (0x00800000)
+
+/* Info: Tuner input frequency is out of range */
+#define MT_FIN_RANGE (0x01000000)
+
+/* Info: Tuner output frequency is out of range */
+#define MT_FOUT_RANGE (0x02000000)
+
+/* Info: Upconverter frequency is out of range (may be reason for MT_UPC_UNLOCK) */
+#define MT_UPC_RANGE (0x04000000)
+
+/* Info: Downconverter frequency is out of range (may be reason for MT_DPC_UNLOCK) */
+#define MT_DNC_RANGE (0x08000000)
+
diff --git a/api/register.h b/api/register.h
new file mode 100644
index 0000000..76e4795
--- /dev/null
+++ b/api/register.h
@@ -0,0 +1,13519 @@
+#ifndef _TD_BIU_REG_H_
+#define _TD_BIU_REG_H_
+// biu_reg.h 6-27-2007
+// gen_biu Ver 1.0 generated by
+#define xd_p_reg_p_aagc_log_2_acc (*(volatile byte xdata *) 0xF000)
+#define p_reg_p_aagc_log_2_acc 0xF000
+#define reg_p_aagc_log_2_acc_pos 0
+#define reg_p_aagc_log_2_acc_len 4
+#define reg_p_aagc_log_2_acc_lsb 0
+#define xd_p_reg_p_aagc_signal_level_rdy (*(volatile byte xdata *) 0xF001)
+#define p_reg_p_aagc_signal_level_rdy 0xF001
+#define reg_p_aagc_signal_level_rdy_pos 0
+#define reg_p_aagc_signal_level_rdy_len 1
+#define reg_p_aagc_signal_level_rdy_lsb 0
+#define xd_r_reg_r_aagc_signal_level_7_0 (*(volatile byte xdata *) 0xF002)
+#define r_reg_r_aagc_signal_level_7_0 0xF002
+#define reg_r_aagc_signal_level_7_0_pos 0
+#define reg_r_aagc_signal_level_7_0_len 8
+#define reg_r_aagc_signal_level_7_0_lsb 0
+#define xd_r_reg_r_aagc_signal_level_9_8 (*(volatile byte xdata *) 0xF003)
+#define r_reg_r_aagc_signal_level_9_8 0xF003
+#define reg_r_aagc_signal_level_9_8_pos 0
+#define reg_r_aagc_signal_level_9_8_len 2
+#define reg_r_aagc_signal_level_9_8_lsb 8
+#define xd_p_reg_p_aagc_rf_if_swap (*(volatile byte xdata *) 0xF004)
+#define p_reg_p_aagc_rf_if_swap 0xF004
+#define reg_p_aagc_rf_if_swap_pos 0
+#define reg_p_aagc_rf_if_swap_len 1
+#define reg_p_aagc_rf_if_swap_lsb 0
+#define xd_p_reg_p_pwm_rf_if_from_hw (*(volatile byte xdata *) 0xF006)
+#define p_reg_p_pwm_rf_if_from_hw 0xF006
+#define reg_p_pwm_rf_if_from_hw_pos 0
+#define reg_p_pwm_rf_if_from_hw_len 1
+#define reg_p_pwm_rf_if_from_hw_lsb 0
+#define xd_p_reg_aagc_out_if_inv (*(volatile byte xdata *) 0xF007)
+#define p_reg_aagc_out_if_inv 0xF007
+#define reg_aagc_out_if_inv_pos 0
+#define reg_aagc_out_if_inv_len 1
+#define reg_aagc_out_if_inv_lsb 0
+#define xd_p_reg_aagc_int_en (*(volatile byte xdata *) 0xF008)
+#define p_reg_aagc_int_en 0xF008
+#define reg_aagc_int_en_pos 0
+#define reg_aagc_int_en_len 1
+#define reg_aagc_int_en_lsb 0
+#define xd_p_reg_aagc_lock_change_flag (*(volatile byte xdata *) 0xF009)
+#define p_reg_aagc_lock_change_flag 0xF009
+#define reg_aagc_lock_change_flag_pos 0
+#define reg_aagc_lock_change_flag_len 1
+#define reg_aagc_lock_change_flag_lsb 0
+#define xd_p_reg_aagc_rf_loop_bw_scale_acquire (*(volatile byte xdata *) 0xF00A)
+#define p_reg_aagc_rf_loop_bw_scale_acquire 0xF00A
+#define reg_aagc_rf_loop_bw_scale_acquire_pos 0
+#define reg_aagc_rf_loop_bw_scale_acquire_len 5
+#define reg_aagc_rf_loop_bw_scale_acquire_lsb 0
+#define xd_p_reg_aagc_rf_loop_bw_scale_track (*(volatile byte xdata *) 0xF00B)
+#define p_reg_aagc_rf_loop_bw_scale_track 0xF00B
+#define reg_aagc_rf_loop_bw_scale_track_pos 0
+#define reg_aagc_rf_loop_bw_scale_track_len 5
+#define reg_aagc_rf_loop_bw_scale_track_lsb 0
+#define xd_p_reg_aagc_if_loop_bw_scale_acquire (*(volatile byte xdata *) 0xF00C)
+#define p_reg_aagc_if_loop_bw_scale_acquire 0xF00C
+#define reg_aagc_if_loop_bw_scale_acquire_pos 0
+#define reg_aagc_if_loop_bw_scale_acquire_len 5
+#define reg_aagc_if_loop_bw_scale_acquire_lsb 0
+#define xd_p_reg_aagc_if_loop_bw_scale_track (*(volatile byte xdata *) 0xF00D)
+#define p_reg_aagc_if_loop_bw_scale_track 0xF00D
+#define reg_aagc_if_loop_bw_scale_track_pos 0
+#define reg_aagc_if_loop_bw_scale_track_len 5
+#define reg_aagc_if_loop_bw_scale_track_lsb 0
+#define xd_p_reg_aagc_max_rf_agc_7_0 (*(volatile byte xdata *) 0xF00E)
+#define p_reg_aagc_max_rf_agc_7_0 0xF00E
+#define reg_aagc_max_rf_agc_7_0_pos 0
+#define reg_aagc_max_rf_agc_7_0_len 8
+#define reg_aagc_max_rf_agc_7_0_lsb 0
+#define xd_p_reg_aagc_max_rf_agc_9_8 (*(volatile byte xdata *) 0xF00F)
+#define p_reg_aagc_max_rf_agc_9_8 0xF00F
+#define reg_aagc_max_rf_agc_9_8_pos 0
+#define reg_aagc_max_rf_agc_9_8_len 2
+#define reg_aagc_max_rf_agc_9_8_lsb 8
+#define xd_p_reg_aagc_min_rf_agc_7_0 (*(volatile byte xdata *) 0xF010)
+#define p_reg_aagc_min_rf_agc_7_0 0xF010
+#define reg_aagc_min_rf_agc_7_0_pos 0
+#define reg_aagc_min_rf_agc_7_0_len 8
+#define reg_aagc_min_rf_agc_7_0_lsb 0
+#define xd_p_reg_aagc_min_rf_agc_9_8 (*(volatile byte xdata *) 0xF011)
+#define p_reg_aagc_min_rf_agc_9_8 0xF011
+#define reg_aagc_min_rf_agc_9_8_pos 0
+#define reg_aagc_min_rf_agc_9_8_len 2
+#define reg_aagc_min_rf_agc_9_8_lsb 8
+#define xd_p_reg_aagc_max_if_agc_7_0 (*(volatile byte xdata *) 0xF012)
+#define p_reg_aagc_max_if_agc_7_0 0xF012
+#define reg_aagc_max_if_agc_7_0_pos 0
+#define reg_aagc_max_if_agc_7_0_len 8
+#define reg_aagc_max_if_agc_7_0_lsb 0
+#define xd_p_reg_aagc_max_if_agc_9_8 (*(volatile byte xdata *) 0xF013)
+#define p_reg_aagc_max_if_agc_9_8 0xF013
+#define reg_aagc_max_if_agc_9_8_pos 0
+#define reg_aagc_max_if_agc_9_8_len 2
+#define reg_aagc_max_if_agc_9_8_lsb 8
+#define xd_p_reg_aagc_min_if_agc_7_0 (*(volatile byte xdata *) 0xF014)
+#define p_reg_aagc_min_if_agc_7_0 0xF014
+#define reg_aagc_min_if_agc_7_0_pos 0
+#define reg_aagc_min_if_agc_7_0_len 8
+#define reg_aagc_min_if_agc_7_0_lsb 0
+#define xd_p_reg_aagc_min_if_agc_9_8 (*(volatile byte xdata *) 0xF015)
+#define p_reg_aagc_min_if_agc_9_8 0xF015
+#define reg_aagc_min_if_agc_9_8_pos 0
+#define reg_aagc_min_if_agc_9_8_len 2
+#define reg_aagc_min_if_agc_9_8_lsb 8
+#define xd_p_reg_aagc_lock_sample_scale (*(volatile byte xdata *) 0xF016)
+#define p_reg_aagc_lock_sample_scale 0xF016
+#define reg_aagc_lock_sample_scale_pos 0
+#define reg_aagc_lock_sample_scale_len 5
+#define reg_aagc_lock_sample_scale_lsb 0
+#define xd_p_reg_aagc_rf_agc_lock_scale_acquire (*(volatile byte xdata *) 0xF017)
+#define p_reg_aagc_rf_agc_lock_scale_acquire 0xF017
+#define reg_aagc_rf_agc_lock_scale_acquire_pos 0
+#define reg_aagc_rf_agc_lock_scale_acquire_len 3
+#define reg_aagc_rf_agc_lock_scale_acquire_lsb 0
+#define xd_p_reg_aagc_rf_agc_lock_scale_track (*(volatile byte xdata *) 0xF018)
+#define p_reg_aagc_rf_agc_lock_scale_track 0xF018
+#define reg_aagc_rf_agc_lock_scale_track_pos 0
+#define reg_aagc_rf_agc_lock_scale_track_len 3
+#define reg_aagc_rf_agc_lock_scale_track_lsb 0
+#define xd_p_reg_aagc_if_agc_lock_scale_acquire (*(volatile byte xdata *) 0xF019)
+#define p_reg_aagc_if_agc_lock_scale_acquire 0xF019
+#define reg_aagc_if_agc_lock_scale_acquire_pos 0
+#define reg_aagc_if_agc_lock_scale_acquire_len 3
+#define reg_aagc_if_agc_lock_scale_acquire_lsb 0
+#define xd_p_reg_aagc_if_agc_lock_scale_track (*(volatile byte xdata *) 0xF01A)
+#define p_reg_aagc_if_agc_lock_scale_track 0xF01A
+#define reg_aagc_if_agc_lock_scale_track_pos 0
+#define reg_aagc_if_agc_lock_scale_track_len 3
+#define reg_aagc_if_agc_lock_scale_track_lsb 0
+#define xd_p_reg_aagc_rf_top_numerator_s_7_0 (*(volatile byte xdata *) 0xF01B)
+#define p_reg_aagc_rf_top_numerator_s_7_0 0xF01B
+#define reg_aagc_rf_top_numerator_s_7_0_pos 0
+#define reg_aagc_rf_top_numerator_s_7_0_len 8
+#define reg_aagc_rf_top_numerator_s_7_0_lsb 0
+#define xd_p_reg_aagc_rf_top_numerator_s_9_8 (*(volatile byte xdata *) 0xF01C)
+#define p_reg_aagc_rf_top_numerator_s_9_8 0xF01C
+#define reg_aagc_rf_top_numerator_s_9_8_pos 0
+#define reg_aagc_rf_top_numerator_s_9_8_len 2
+#define reg_aagc_rf_top_numerator_s_9_8_lsb 8
+#define xd_p_reg_aagc_if_top_numerator_s_7_0 (*(volatile byte xdata *) 0xF01D)
+#define p_reg_aagc_if_top_numerator_s_7_0 0xF01D
+#define reg_aagc_if_top_numerator_s_7_0_pos 0
+#define reg_aagc_if_top_numerator_s_7_0_len 8
+#define reg_aagc_if_top_numerator_s_7_0_lsb 0
+#define xd_p_reg_aagc_if_top_numerator_s_9_8 (*(volatile byte xdata *) 0xF01E)
+#define p_reg_aagc_if_top_numerator_s_9_8 0xF01E
+#define reg_aagc_if_top_numerator_s_9_8_pos 0
+#define reg_aagc_if_top_numerator_s_9_8_len 2
+#define reg_aagc_if_top_numerator_s_9_8_lsb 8
+#define xd_p_reg_aagc_adc_out_desired_s_7_0 (*(volatile byte xdata *) 0xF01F)
+#define p_reg_aagc_adc_out_desired_s_7_0 0xF01F
+#define reg_aagc_adc_out_desired_s_7_0_pos 0
+#define reg_aagc_adc_out_desired_s_7_0_len 8
+#define reg_aagc_adc_out_desired_s_7_0_lsb 0
+#define xd_p_reg_aagc_adc_out_desired_s_8 (*(volatile byte xdata *) 0xF020)
+#define p_reg_aagc_adc_out_desired_s_8 0xF020
+#define reg_aagc_adc_out_desired_s_8_pos 0
+#define reg_aagc_adc_out_desired_s_8_len 1
+#define reg_aagc_adc_out_desired_s_8_lsb 8
+#define xd_p_reg_aagc_lock_count_th (*(volatile byte xdata *) 0xF021)
+#define p_reg_aagc_lock_count_th 0xF021
+#define reg_aagc_lock_count_th_pos 0
+#define reg_aagc_lock_count_th_len 4
+#define reg_aagc_lock_count_th_lsb 0
+#define xd_p_reg_aagc_rf_agc_unlock_numerator (*(volatile byte xdata *) 0xF022)
+#define p_reg_aagc_rf_agc_unlock_numerator 0xF022
+#define reg_aagc_rf_agc_unlock_numerator_pos 0
+#define reg_aagc_rf_agc_unlock_numerator_len 6
+#define reg_aagc_rf_agc_unlock_numerator_lsb 0
+#define xd_p_reg_aagc_if_agc_unlock_numerator (*(volatile byte xdata *) 0xF023)
+#define p_reg_aagc_if_agc_unlock_numerator 0xF023
+#define reg_aagc_if_agc_unlock_numerator_pos 0
+#define reg_aagc_if_agc_unlock_numerator_len 6
+#define reg_aagc_if_agc_unlock_numerator_lsb 0
+#define xd_p_reg_aagc_rf_top_numerator_m_7_0 (*(volatile byte xdata *) 0xF025)
+#define p_reg_aagc_rf_top_numerator_m_7_0 0xF025
+#define reg_aagc_rf_top_numerator_m_7_0_pos 0
+#define reg_aagc_rf_top_numerator_m_7_0_len 8
+#define reg_aagc_rf_top_numerator_m_7_0_lsb 0
+#define xd_p_reg_aagc_rf_top_numerator_m_9_8 (*(volatile byte xdata *) 0xF026)
+#define p_reg_aagc_rf_top_numerator_m_9_8 0xF026
+#define reg_aagc_rf_top_numerator_m_9_8_pos 0
+#define reg_aagc_rf_top_numerator_m_9_8_len 2
+#define reg_aagc_rf_top_numerator_m_9_8_lsb 8
+#define xd_p_reg_aagc_if_top_numerator_m_7_0 (*(volatile byte xdata *) 0xF027)
+#define p_reg_aagc_if_top_numerator_m_7_0 0xF027
+#define reg_aagc_if_top_numerator_m_7_0_pos 0
+#define reg_aagc_if_top_numerator_m_7_0_len 8
+#define reg_aagc_if_top_numerator_m_7_0_lsb 0
+#define xd_p_reg_aagc_if_top_numerator_m_9_8 (*(volatile byte xdata *) 0xF028)
+#define p_reg_aagc_if_top_numerator_m_9_8 0xF028
+#define reg_aagc_if_top_numerator_m_9_8_pos 0
+#define reg_aagc_if_top_numerator_m_9_8_len 2
+#define reg_aagc_if_top_numerator_m_9_8_lsb 8
+#define xd_p_reg_aagc_adc_out_desired_m_7_0 (*(volatile byte xdata *) 0xF029)
+#define p_reg_aagc_adc_out_desired_m_7_0 0xF029
+#define reg_aagc_adc_out_desired_m_7_0_pos 0
+#define reg_aagc_adc_out_desired_m_7_0_len 8
+#define reg_aagc_adc_out_desired_m_7_0_lsb 0
+#define xd_p_reg_aagc_adc_out_desired_m_8 (*(volatile byte xdata *) 0xF02A)
+#define p_reg_aagc_adc_out_desired_m_8 0xF02A
+#define reg_aagc_adc_out_desired_m_8_pos 0
+#define reg_aagc_adc_out_desired_m_8_len 1
+#define reg_aagc_adc_out_desired_m_8_lsb 8
+#define xd_p_reg_aagc_mobile_sel (*(volatile byte xdata *) 0xF02B)
+#define p_reg_aagc_mobile_sel 0xF02B
+#define reg_aagc_mobile_sel_pos 0
+#define reg_aagc_mobile_sel_len 1
+#define reg_aagc_mobile_sel_lsb 0
+#define xd_p_reg_aagc_top_reload (*(volatile byte xdata *) 0xF02C)
+#define p_reg_aagc_top_reload 0xF02C
+#define reg_aagc_top_reload_pos 0
+#define reg_aagc_top_reload_len 1
+#define reg_aagc_top_reload_lsb 0
+#define xd_p_reg_aagc_rf_delta_voltage_en (*(volatile byte xdata *) 0xF02D)
+#define p_reg_aagc_rf_delta_voltage_en 0xF02D
+#define reg_aagc_rf_delta_voltage_en_pos 0
+#define reg_aagc_rf_delta_voltage_en_len 1
+#define reg_aagc_rf_delta_voltage_en_lsb 0
+#define xd_p_reg_aagc_rf_voltage_inc (*(volatile byte xdata *) 0xF02E)
+#define p_reg_aagc_rf_voltage_inc 0xF02E
+#define reg_aagc_rf_voltage_inc_pos 0
+#define reg_aagc_rf_voltage_inc_len 1
+#define reg_aagc_rf_voltage_inc_lsb 0
+#define xd_p_reg_aagc_if_delta_voltage_en (*(volatile byte xdata *) 0xF02F)
+#define p_reg_aagc_if_delta_voltage_en 0xF02F
+#define reg_aagc_if_delta_voltage_en_pos 0
+#define reg_aagc_if_delta_voltage_en_len 1
+#define reg_aagc_if_delta_voltage_en_lsb 0
+#define xd_p_reg_aagc_if_voltage_inc (*(volatile byte xdata *) 0xF030)
+#define p_reg_aagc_if_voltage_inc 0xF030
+#define reg_aagc_if_voltage_inc_pos 0
+#define reg_aagc_if_voltage_inc_len 1
+#define reg_aagc_if_voltage_inc_lsb 0
+#define xd_p_reg_aagc_rf_delta_voltage_7_0 (*(volatile byte xdata *) 0xF032)
+#define p_reg_aagc_rf_delta_voltage_7_0 0xF032
+#define reg_aagc_rf_delta_voltage_7_0_pos 0
+#define reg_aagc_rf_delta_voltage_7_0_len 8
+#define reg_aagc_rf_delta_voltage_7_0_lsb 0
+#define xd_p_reg_aagc_rf_delta_voltage_15_8 (*(volatile byte xdata *) 0xF033)
+#define p_reg_aagc_rf_delta_voltage_15_8 0xF033
+#define reg_aagc_rf_delta_voltage_15_8_pos 0
+#define reg_aagc_rf_delta_voltage_15_8_len 8
+#define reg_aagc_rf_delta_voltage_15_8_lsb 8
+#define xd_p_reg_aagc_rf_delta_voltage_23_16 (*(volatile byte xdata *) 0xF034)
+#define p_reg_aagc_rf_delta_voltage_23_16 0xF034
+#define reg_aagc_rf_delta_voltage_23_16_pos 0
+#define reg_aagc_rf_delta_voltage_23_16_len 8
+#define reg_aagc_rf_delta_voltage_23_16_lsb 16
+#define xd_p_reg_aagc_rf_delta_voltage_29_24 (*(volatile byte xdata *) 0xF035)
+#define p_reg_aagc_rf_delta_voltage_29_24 0xF035
+#define reg_aagc_rf_delta_voltage_29_24_pos 0
+#define reg_aagc_rf_delta_voltage_29_24_len 6
+#define reg_aagc_rf_delta_voltage_29_24_lsb 24
+#define xd_p_reg_aagc_if_delta_voltage_7_0 (*(volatile byte xdata *) 0xF036)
+#define p_reg_aagc_if_delta_voltage_7_0 0xF036
+#define reg_aagc_if_delta_voltage_7_0_pos 0
+#define reg_aagc_if_delta_voltage_7_0_len 8
+#define reg_aagc_if_delta_voltage_7_0_lsb 0
+#define xd_p_reg_aagc_if_delta_voltage_15_8 (*(volatile byte xdata *) 0xF037)
+#define p_reg_aagc_if_delta_voltage_15_8 0xF037
+#define reg_aagc_if_delta_voltage_15_8_pos 0
+#define reg_aagc_if_delta_voltage_15_8_len 8
+#define reg_aagc_if_delta_voltage_15_8_lsb 8
+#define xd_p_reg_aagc_if_delta_voltage_23_16 (*(volatile byte xdata *) 0xF038)
+#define p_reg_aagc_if_delta_voltage_23_16 0xF038
+#define reg_aagc_if_delta_voltage_23_16_pos 0
+#define reg_aagc_if_delta_voltage_23_16_len 8
+#define reg_aagc_if_delta_voltage_23_16_lsb 16
+#define xd_p_reg_aagc_if_delta_voltage_29_24 (*(volatile byte xdata *) 0xF039)
+#define p_reg_aagc_if_delta_voltage_29_24 0xF039
+#define reg_aagc_if_delta_voltage_29_24_pos 0
+#define reg_aagc_if_delta_voltage_29_24_len 6
+#define reg_aagc_if_delta_voltage_29_24_lsb 24
+#define xd_p_reg_aagc_delta_voltage_hold_time (*(volatile byte xdata *) 0xF03A)
+#define p_reg_aagc_delta_voltage_hold_time 0xF03A
+#define reg_aagc_delta_voltage_hold_time_pos 0
+#define reg_aagc_delta_voltage_hold_time_len 8
+#define reg_aagc_delta_voltage_hold_time_lsb 0
+#define xd_p_reg_aagc_top_th_dis (*(volatile byte xdata *) 0xF041)
+#define p_reg_aagc_top_th_dis 0xF041
+#define reg_aagc_top_th_dis_pos 0
+#define reg_aagc_top_th_dis_len 1
+#define reg_aagc_top_th_dis_lsb 0
+#define xd_p_reg_p_aagc_rf_floor_dca (*(volatile byte xdata *) 0xF042)
+#define p_reg_p_aagc_rf_floor_dca 0xF042
+#define reg_p_aagc_rf_floor_dca_pos 0
+#define reg_p_aagc_rf_floor_dca_len 8
+#define reg_p_aagc_rf_floor_dca_lsb 0
+#define xd_p_reg_p_aagc_if_floor_dca (*(volatile byte xdata *) 0xF043)
+#define p_reg_p_aagc_if_floor_dca 0xF043
+#define reg_p_aagc_if_floor_dca_pos 0
+#define reg_p_aagc_if_floor_dca_len 8
+#define reg_p_aagc_if_floor_dca_lsb 0
+#define xd_p_reg_p_aagc_rf_gain_scale_dca (*(volatile byte xdata *) 0xF044)
+#define p_reg_p_aagc_rf_gain_scale_dca 0xF044
+#define reg_p_aagc_rf_gain_scale_dca_pos 0
+#define reg_p_aagc_rf_gain_scale_dca_len 3
+#define reg_p_aagc_rf_gain_scale_dca_lsb 0
+#define xd_p_reg_p_aagc_if_gain_scale_dca (*(volatile byte xdata *) 0xF045)
+#define p_reg_p_aagc_if_gain_scale_dca 0xF045
+#define reg_p_aagc_if_gain_scale_dca_pos 0
+#define reg_p_aagc_if_gain_scale_dca_len 3
+#define reg_p_aagc_if_gain_scale_dca_lsb 0
+#define xd_r_reg_r_aagc_ufl_gain (*(volatile byte xdata *) 0xF046)
+#define r_reg_r_aagc_ufl_gain 0xF046
+#define reg_r_aagc_ufl_gain_pos 0
+#define reg_r_aagc_ufl_gain_len 8
+#define reg_r_aagc_ufl_gain_lsb 0
+#define xd_p_reg_aagc_out_rf_inv (*(volatile byte xdata *) 0xF047)
+#define p_reg_aagc_out_rf_inv 0xF047
+#define reg_aagc_out_rf_inv_pos 0
+#define reg_aagc_out_rf_inv_len 1
+#define reg_aagc_out_rf_inv_lsb 0
+#define xd_p_reg_p_aagc_save_agc_control (*(volatile byte xdata *) 0xF048)
+#define p_reg_p_aagc_save_agc_control 0xF048
+#define reg_p_aagc_save_agc_control_pos 0
+#define reg_p_aagc_save_agc_control_len 1
+#define reg_p_aagc_save_agc_control_lsb 0
+#define xd_p_reg_aagc_fw_sel (*(volatile byte xdata *) 0xF049)
+#define p_reg_aagc_fw_sel 0xF049
+#define reg_aagc_fw_sel_pos 0
+#define reg_aagc_fw_sel_len 1
+#define reg_aagc_fw_sel_lsb 0
+#define xd_r_reg_r_aagc_rf_control_7_0 (*(volatile byte xdata *) 0xF04A)
+#define r_reg_r_aagc_rf_control_7_0 0xF04A
+#define reg_r_aagc_rf_control_7_0_pos 0
+#define reg_r_aagc_rf_control_7_0_len 8
+#define reg_r_aagc_rf_control_7_0_lsb 0
+#define xd_r_reg_r_aagc_rf_control_9_8 (*(volatile byte xdata *) 0xF04B)
+#define r_reg_r_aagc_rf_control_9_8 0xF04B
+#define reg_r_aagc_rf_control_9_8_pos 0
+#define reg_r_aagc_rf_control_9_8_len 2
+#define reg_r_aagc_rf_control_9_8_lsb 8
+#define xd_r_reg_r_aagc_if_control_7_0 (*(volatile byte xdata *) 0xF04C)
+#define r_reg_r_aagc_if_control_7_0 0xF04C
+#define reg_r_aagc_if_control_7_0_pos 0
+#define reg_r_aagc_if_control_7_0_len 8
+#define reg_r_aagc_if_control_7_0_lsb 0
+#define xd_r_reg_r_aagc_if_control_9_8 (*(volatile byte xdata *) 0xF04D)
+#define r_reg_r_aagc_if_control_9_8 0xF04D
+#define reg_r_aagc_if_control_9_8_pos 0
+#define reg_r_aagc_if_control_9_8_len 2
+#define reg_r_aagc_if_control_9_8_lsb 8
+#define xd_p_reg_aagc_adc_out_desired_from_fw_7_0 (*(volatile byte xdata *) 0xF04E)
+#define p_reg_aagc_adc_out_desired_from_fw_7_0 0xF04E
+#define reg_aagc_adc_out_desired_from_fw_7_0_pos 0
+#define reg_aagc_adc_out_desired_from_fw_7_0_len 8
+#define reg_aagc_adc_out_desired_from_fw_7_0_lsb 0
+#define xd_p_reg_aagc_adc_out_desired_from_fw_8 (*(volatile byte xdata *) 0xF04F)
+#define p_reg_aagc_adc_out_desired_from_fw_8 0xF04F
+#define reg_aagc_adc_out_desired_from_fw_8_pos 0
+#define reg_aagc_adc_out_desired_from_fw_8_len 1
+#define reg_aagc_adc_out_desired_from_fw_8_lsb 8
+#define xd_p_reg_aagc_init_rf_agc_7_0 (*(volatile byte xdata *) 0xF050)
+#define p_reg_aagc_init_rf_agc_7_0 0xF050
+#define reg_aagc_init_rf_agc_7_0_pos 0
+#define reg_aagc_init_rf_agc_7_0_len 8
+#define reg_aagc_init_rf_agc_7_0_lsb 0
+#define xd_p_reg_aagc_init_rf_agc_9_8 (*(volatile byte xdata *) 0xF051)
+#define p_reg_aagc_init_rf_agc_9_8 0xF051
+#define reg_aagc_init_rf_agc_9_8_pos 0
+#define reg_aagc_init_rf_agc_9_8_len 2
+#define reg_aagc_init_rf_agc_9_8_lsb 8
+#define xd_p_reg_aagc_init_if_agc_7_0 (*(volatile byte xdata *) 0xF052)
+#define p_reg_aagc_init_if_agc_7_0 0xF052
+#define reg_aagc_init_if_agc_7_0_pos 0
+#define reg_aagc_init_if_agc_7_0_len 8
+#define reg_aagc_init_if_agc_7_0_lsb 0
+#define xd_p_reg_aagc_init_if_agc_9_8 (*(volatile byte xdata *) 0xF053)
+#define p_reg_aagc_init_if_agc_9_8 0xF053
+#define reg_aagc_init_if_agc_9_8_pos 0
+#define reg_aagc_init_if_agc_9_8_len 2
+#define reg_aagc_init_if_agc_9_8_lsb 8
+#define xd_p_reg_p_pwm_if_high_unit_num (*(volatile byte xdata *) 0xF054)
+#define p_reg_p_pwm_if_high_unit_num 0xF054
+#define reg_p_pwm_if_high_unit_num_pos 0
+#define reg_p_pwm_if_high_unit_num_len 8
+#define reg_p_pwm_if_high_unit_num_lsb 0
+#define xd_p_reg_p_pwm_rf_high_unit_num (*(volatile byte xdata *) 0xF055)
+#define p_reg_p_pwm_rf_high_unit_num 0xF055
+#define reg_p_pwm_rf_high_unit_num_pos 0
+#define reg_p_pwm_rf_high_unit_num_len 8
+#define reg_p_pwm_rf_high_unit_num_lsb 0
+#define xd_p_reg_p_pwm_rf_gpio (*(volatile byte xdata *) 0xF058)
+#define p_reg_p_pwm_rf_gpio 0xF058
+#define reg_p_pwm_rf_gpio_pos 0
+#define reg_p_pwm_rf_gpio_len 1
+#define reg_p_pwm_rf_gpio_lsb 0
+#define xd_p_reg_p_pwm_if_gpio (*(volatile byte xdata *) 0xF058)
+#define p_reg_p_pwm_if_gpio 0xF058
+#define reg_p_pwm_if_gpio_pos 1
+#define reg_p_pwm_if_gpio_len 1
+#define reg_p_pwm_if_gpio_lsb 0
+#define xd_p_reg_aagc_in_sat_cnt_7_0 (*(volatile byte xdata *) 0xF05A)
+#define p_reg_aagc_in_sat_cnt_7_0 0xF05A
+#define reg_aagc_in_sat_cnt_7_0_pos 0
+#define reg_aagc_in_sat_cnt_7_0_len 8
+#define reg_aagc_in_sat_cnt_7_0_lsb 0
+#define xd_p_reg_aagc_in_sat_cnt_15_8 (*(volatile byte xdata *) 0xF05B)
+#define p_reg_aagc_in_sat_cnt_15_8 0xF05B
+#define reg_aagc_in_sat_cnt_15_8_pos 0
+#define reg_aagc_in_sat_cnt_15_8_len 8
+#define reg_aagc_in_sat_cnt_15_8_lsb 8
+#define xd_p_reg_aagc_in_sat_cnt_23_16 (*(volatile byte xdata *) 0xF05C)
+#define p_reg_aagc_in_sat_cnt_23_16 0xF05C
+#define reg_aagc_in_sat_cnt_23_16_pos 0
+#define reg_aagc_in_sat_cnt_23_16_len 8
+#define reg_aagc_in_sat_cnt_23_16_lsb 16
+#define xd_p_reg_aagc_in_sat_cnt_31_24 (*(volatile byte xdata *) 0xF05D)
+#define p_reg_aagc_in_sat_cnt_31_24 0xF05D
+#define reg_aagc_in_sat_cnt_31_24_pos 0
+#define reg_aagc_in_sat_cnt_31_24_len 8
+#define reg_aagc_in_sat_cnt_31_24_lsb 24
+#define xd_p_reg_p_pwm_cycle_unit (*(volatile byte xdata *) 0xF05E)
+#define p_reg_p_pwm_cycle_unit 0xF05E
+#define reg_p_pwm_cycle_unit_pos 0
+#define reg_p_pwm_cycle_unit_len 4
+#define reg_p_pwm_cycle_unit_lsb 0
+#define xd_p_reg_p_pwm_en (*(volatile byte xdata *) 0xF05F)
+#define p_reg_p_pwm_en 0xF05F
+#define reg_p_pwm_en_pos 0
+#define reg_p_pwm_en_len 1
+#define reg_p_pwm_en_lsb 0
+#define xd_r_reg_aagc_rf_gain (*(volatile byte xdata *) 0xF060)
+#define r_reg_aagc_rf_gain 0xF060
+#define reg_aagc_rf_gain_pos 0
+#define reg_aagc_rf_gain_len 8
+#define reg_aagc_rf_gain_lsb 0
+#define xd_r_reg_aagc_if_gain (*(volatile byte xdata *) 0xF061)
+#define r_reg_aagc_if_gain 0xF061
+#define reg_aagc_if_gain_pos 0
+#define reg_aagc_if_gain_len 8
+#define reg_aagc_if_gain_lsb 0
+#define xd_r_reg_aagc_current_desired_level_7_0 (*(volatile byte xdata *) 0xF062)
+#define r_reg_aagc_current_desired_level_7_0 0xF062
+#define reg_aagc_current_desired_level_7_0_pos 0
+#define reg_aagc_current_desired_level_7_0_len 8
+#define reg_aagc_current_desired_level_7_0_lsb 0
+#define xd_r_reg_aagc_current_desired_level_8 (*(volatile byte xdata *) 0xF063)
+#define r_reg_aagc_current_desired_level_8 0xF063
+#define reg_aagc_current_desired_level_8_pos 0
+#define reg_aagc_current_desired_level_8_len 1
+#define reg_aagc_current_desired_level_8_lsb 8
+#define xd_p_reg_tinr_fifo_size (*(volatile byte xdata *) 0xF064)
+#define p_reg_tinr_fifo_size 0xF064
+#define reg_tinr_fifo_size_pos 0
+#define reg_tinr_fifo_size_len 5
+#define reg_tinr_fifo_size_lsb 0
+#define xd_p_reg_tinr_saturation_th_7_0 (*(volatile byte xdata *) 0xF065)
+#define p_reg_tinr_saturation_th_7_0 0xF065
+#define reg_tinr_saturation_th_7_0_pos 0
+#define reg_tinr_saturation_th_7_0_len 8
+#define reg_tinr_saturation_th_7_0_lsb 0
+#define xd_p_reg_tinr_saturation_th_9_8 (*(volatile byte xdata *) 0xF066)
+#define p_reg_tinr_saturation_th_9_8 0xF066
+#define reg_tinr_saturation_th_9_8_pos 0
+#define reg_tinr_saturation_th_9_8_len 2
+#define reg_tinr_saturation_th_9_8_lsb 8
+#define xd_p_reg_tinr_saturation_cnt_th (*(volatile byte xdata *) 0xF067)
+#define p_reg_tinr_saturation_cnt_th 0xF067
+#define reg_tinr_saturation_cnt_th_pos 0
+#define reg_tinr_saturation_cnt_th_len 4
+#define reg_tinr_saturation_cnt_th_lsb 0
+#define xd_r_reg_tinr_counter_7_0 (*(volatile byte xdata *) 0xF068)
+#define r_reg_tinr_counter_7_0 0xF068
+#define reg_tinr_counter_7_0_pos 0
+#define reg_tinr_counter_7_0_len 8
+#define reg_tinr_counter_7_0_lsb 0
+#define xd_r_reg_tinr_counter_15_8 (*(volatile byte xdata *) 0xF069)
+#define r_reg_tinr_counter_15_8 0xF069
+#define reg_tinr_counter_15_8_pos 0
+#define reg_tinr_counter_15_8_len 8
+#define reg_tinr_counter_15_8_lsb 8
+#define xd_p_reg_tinr_counter_rst (*(volatile byte xdata *) 0xF06C)
+#define p_reg_tinr_counter_rst 0xF06C
+#define reg_tinr_counter_rst_pos 0
+#define reg_tinr_counter_rst_len 1
+#define reg_tinr_counter_rst_lsb 0
+#define xd_p_reg_tinr_ins_th_7_0 (*(volatile byte xdata *) 0xF06F)
+#define p_reg_tinr_ins_th_7_0 0xF06F
+#define reg_tinr_ins_th_7_0_pos 0
+#define reg_tinr_ins_th_7_0_len 8
+#define reg_tinr_ins_th_7_0_lsb 0
+#define xd_p_reg_tinr_ins_th_9_8 (*(volatile byte xdata *) 0xF070)
+#define p_reg_tinr_ins_th_9_8 0xF070
+#define reg_tinr_ins_th_9_8_pos 0
+#define reg_tinr_ins_th_9_8_len 2
+#define reg_tinr_ins_th_9_8_lsb 8
+#define xd_p_reg_tinr_ins_en (*(volatile byte xdata *) 0xF071)
+#define p_reg_tinr_ins_en 0xF071
+#define reg_tinr_ins_en_pos 0
+#define reg_tinr_ins_en_len 1
+#define reg_tinr_ins_en_lsb 0
+#define xd_p_reg_tinr_ins_size (*(volatile byte xdata *) 0xF072)
+#define p_reg_tinr_ins_size 0xF072
+#define reg_tinr_ins_size_pos 0
+#define reg_tinr_ins_size_len 4
+#define reg_tinr_ins_size_lsb 0
+#define xd_p_reg_tinr_ins_hnum (*(volatile byte xdata *) 0xF073)
+#define p_reg_tinr_ins_hnum 0xF073
+#define reg_tinr_ins_hnum_pos 0
+#define reg_tinr_ins_hnum_len 4
+#define reg_tinr_ins_hnum_lsb 0
+#define xd_r_reg_tinr_ins_hcnt_7_0 (*(volatile byte xdata *) 0xF074)
+#define r_reg_tinr_ins_hcnt_7_0 0xF074
+#define reg_tinr_ins_hcnt_7_0_pos 0
+#define reg_tinr_ins_hcnt_7_0_len 8
+#define reg_tinr_ins_hcnt_7_0_lsb 0
+#define xd_r_reg_tinr_ins_hcnt_15_8 (*(volatile byte xdata *) 0xF075)
+#define r_reg_tinr_ins_hcnt_15_8 0xF075
+#define reg_tinr_ins_hcnt_15_8_pos 0
+#define reg_tinr_ins_hcnt_15_8_len 8
+#define reg_tinr_ins_hcnt_15_8_lsb 8
+#define xd_p_reg_tinr_in_conj (*(volatile byte xdata *) 0xF076)
+#define p_reg_tinr_in_conj 0xF076
+#define reg_tinr_in_conj_pos 0
+#define reg_tinr_in_conj_len 1
+#define reg_tinr_in_conj_lsb 0
+#define xd_p_reg_tinr_in_zero_if (*(volatile byte xdata *) 0xF077)
+#define p_reg_tinr_in_zero_if 0xF077
+#define reg_tinr_in_zero_if_pos 0
+#define reg_tinr_in_zero_if_len 2
+#define reg_tinr_in_zero_if_lsb 0
+#define xd_p_reg_tinr_in_shift (*(volatile byte xdata *) 0xF078)
+#define p_reg_tinr_in_shift 0xF078
+#define reg_tinr_in_shift_pos 0
+#define reg_tinr_in_shift_len 1
+#define reg_tinr_in_shift_lsb 0
+#define xd_p_reg_tinr_in_conj_sat_counter_rst (*(volatile byte xdata *) 0xF079)
+#define p_reg_tinr_in_conj_sat_counter_rst 0xF079
+#define reg_tinr_in_conj_sat_counter_rst_pos 0
+#define reg_tinr_in_conj_sat_counter_rst_len 1
+#define reg_tinr_in_conj_sat_counter_rst_lsb 0
+#define xd_r_reg_tinr_in_conj_sat_counter_7_0 (*(volatile byte xdata *) 0xF07A)
+#define r_reg_tinr_in_conj_sat_counter_7_0 0xF07A
+#define reg_tinr_in_conj_sat_counter_7_0_pos 0
+#define reg_tinr_in_conj_sat_counter_7_0_len 8
+#define reg_tinr_in_conj_sat_counter_7_0_lsb 0
+#define xd_r_reg_tinr_in_conj_sat_counter_14_8 (*(volatile byte xdata *) 0xF07B)
+#define r_reg_tinr_in_conj_sat_counter_14_8 0xF07B
+#define reg_tinr_in_conj_sat_counter_14_8_pos 0
+#define reg_tinr_in_conj_sat_counter_14_8_len 7
+#define reg_tinr_in_conj_sat_counter_14_8_lsb 8
+#define xd_p_reg_p_antif_en (*(volatile byte xdata *) 0xF07C)
+#define p_reg_p_antif_en 0xF07C
+#define reg_p_antif_en_pos 0
+#define reg_p_antif_en_len 1
+#define reg_p_antif_en_lsb 0
+#define xd_p_reg_p_antif_rst (*(volatile byte xdata *) 0xF07D)
+#define p_reg_p_antif_rst 0xF07D
+#define reg_p_antif_rst_pos 0
+#define reg_p_antif_rst_len 1
+#define reg_p_antif_rst_lsb 0
+#define xd_p_reg_p_antif_byp (*(volatile byte xdata *) 0xF07E)
+#define p_reg_p_antif_byp 0xF07E
+#define reg_p_antif_byp_pos 0
+#define reg_p_antif_byp_len 1
+#define reg_p_antif_byp_lsb 0
+#define xd_p_reg_p_antif_mode (*(volatile byte xdata *) 0xF07F)
+#define p_reg_p_antif_mode 0xF07F
+#define reg_p_antif_mode_pos 0
+#define reg_p_antif_mode_len 1
+#define reg_p_antif_mode_lsb 0
+#define xd_p_reg_p_ds_byp (*(volatile byte xdata *) 0xF080)
+#define p_reg_p_ds_byp 0xF080
+#define reg_p_ds_byp_pos 0
+#define reg_p_ds_byp_len 1
+#define reg_p_ds_byp_lsb 0
+#define xd_p_reg_p_antif_dagc5_mode (*(volatile byte xdata *) 0xF081)
+#define p_reg_p_antif_dagc5_mode 0xF081
+#define reg_p_antif_dagc5_mode_pos 0
+#define reg_p_antif_dagc5_mode_len 2
+#define reg_p_antif_dagc5_mode_lsb 0
+#define xd_p_reg_p_antif_dagc5_desired_level_7_0 (*(volatile byte xdata *) 0xF082)
+#define p_reg_p_antif_dagc5_desired_level_7_0 0xF082
+#define reg_p_antif_dagc5_desired_level_7_0_pos 0
+#define reg_p_antif_dagc5_desired_level_7_0_len 8
+#define reg_p_antif_dagc5_desired_level_7_0_lsb 0
+#define xd_p_reg_p_antif_dagc5_desired_level_8 (*(volatile byte xdata *) 0xF083)
+#define p_reg_p_antif_dagc5_desired_level_8 0xF083
+#define reg_p_antif_dagc5_desired_level_8_pos 0
+#define reg_p_antif_dagc5_desired_level_8_len 1
+#define reg_p_antif_dagc5_desired_level_8_lsb 8
+#define xd_p_reg_p_antif_dagc5_apply_delay (*(volatile byte xdata *) 0xF084)
+#define p_reg_p_antif_dagc5_apply_delay 0xF084
+#define reg_p_antif_dagc5_apply_delay_pos 0
+#define reg_p_antif_dagc5_apply_delay_len 7
+#define reg_p_antif_dagc5_apply_delay_lsb 0
+#define xd_p_reg_p_antif_dagc5_fixed_gain_7_0 (*(volatile byte xdata *) 0xF085)
+#define p_reg_p_antif_dagc5_fixed_gain_7_0 0xF085
+#define reg_p_antif_dagc5_fixed_gain_7_0_pos 0
+#define reg_p_antif_dagc5_fixed_gain_7_0_len 8
+#define reg_p_antif_dagc5_fixed_gain_7_0_lsb 0
+#define xd_p_reg_p_antif_dagc5_fixed_gain_11_8 (*(volatile byte xdata *) 0xF086)
+#define p_reg_p_antif_dagc5_fixed_gain_11_8 0xF086
+#define reg_p_antif_dagc5_fixed_gain_11_8_pos 0
+#define reg_p_antif_dagc5_fixed_gain_11_8_len 4
+#define reg_p_antif_dagc5_fixed_gain_11_8_lsb 8
+#define xd_p_reg_p_antif_dagc5_use_despow (*(volatile byte xdata *) 0xF087)
+#define p_reg_p_antif_dagc5_use_despow 0xF087
+#define reg_p_antif_dagc5_use_despow_pos 0
+#define reg_p_antif_dagc5_use_despow_len 1
+#define reg_p_antif_dagc5_use_despow_lsb 0
+#define xd_p_reg_p_antif_dagc5_log_2_accumulate_num (*(volatile byte xdata *) 0xF088)
+#define p_reg_p_antif_dagc5_log_2_accumulate_num 0xF088
+#define reg_p_antif_dagc5_log_2_accumulate_num_pos 0
+#define reg_p_antif_dagc5_log_2_accumulate_num_len 5
+#define reg_p_antif_dagc5_log_2_accumulate_num_lsb 0
+#define xd_p_reg_p_antif_dagc5_in_sat_cnt_7_0 (*(volatile byte xdata *) 0xF089)
+#define p_reg_p_antif_dagc5_in_sat_cnt_7_0 0xF089
+#define reg_p_antif_dagc5_in_sat_cnt_7_0_pos 0
+#define reg_p_antif_dagc5_in_sat_cnt_7_0_len 8
+#define reg_p_antif_dagc5_in_sat_cnt_7_0_lsb 0
+#define xd_p_reg_p_antif_dagc5_in_sat_cnt_15_8 (*(volatile byte xdata *) 0xF08A)
+#define p_reg_p_antif_dagc5_in_sat_cnt_15_8 0xF08A
+#define reg_p_antif_dagc5_in_sat_cnt_15_8_pos 0
+#define reg_p_antif_dagc5_in_sat_cnt_15_8_len 8
+#define reg_p_antif_dagc5_in_sat_cnt_15_8_lsb 8
+#define xd_p_reg_p_antif_dagc5_in_sat_cnt_23_16 (*(volatile byte xdata *) 0xF08B)
+#define p_reg_p_antif_dagc5_in_sat_cnt_23_16 0xF08B
+#define reg_p_antif_dagc5_in_sat_cnt_23_16_pos 0
+#define reg_p_antif_dagc5_in_sat_cnt_23_16_len 8
+#define reg_p_antif_dagc5_in_sat_cnt_23_16_lsb 16
+#define xd_p_reg_p_antif_dagc5_in_sat_cnt_31_24 (*(volatile byte xdata *) 0xF08C)
+#define p_reg_p_antif_dagc5_in_sat_cnt_31_24 0xF08C
+#define reg_p_antif_dagc5_in_sat_cnt_31_24_pos 0
+#define reg_p_antif_dagc5_in_sat_cnt_31_24_len 8
+#define reg_p_antif_dagc5_in_sat_cnt_31_24_lsb 24
+#define xd_p_reg_p_antif_dagc5_out_sat_cnt_7_0 (*(volatile byte xdata *) 0xF08D)
+#define p_reg_p_antif_dagc5_out_sat_cnt_7_0 0xF08D
+#define reg_p_antif_dagc5_out_sat_cnt_7_0_pos 0
+#define reg_p_antif_dagc5_out_sat_cnt_7_0_len 8
+#define reg_p_antif_dagc5_out_sat_cnt_7_0_lsb 0
+#define xd_p_reg_p_antif_dagc5_out_sat_cnt_15_8 (*(volatile byte xdata *) 0xF08E)
+#define p_reg_p_antif_dagc5_out_sat_cnt_15_8 0xF08E
+#define reg_p_antif_dagc5_out_sat_cnt_15_8_pos 0
+#define reg_p_antif_dagc5_out_sat_cnt_15_8_len 8
+#define reg_p_antif_dagc5_out_sat_cnt_15_8_lsb 8
+#define xd_p_reg_p_antif_dagc5_out_sat_cnt_23_16 (*(volatile byte xdata *) 0xF08F)
+#define p_reg_p_antif_dagc5_out_sat_cnt_23_16 0xF08F
+#define reg_p_antif_dagc5_out_sat_cnt_23_16_pos 0
+#define reg_p_antif_dagc5_out_sat_cnt_23_16_len 8
+#define reg_p_antif_dagc5_out_sat_cnt_23_16_lsb 16
+#define xd_p_reg_p_antif_dagc5_out_sat_cnt_31_24 (*(volatile byte xdata *) 0xF090)
+#define p_reg_p_antif_dagc5_out_sat_cnt_31_24 0xF090
+#define reg_p_antif_dagc5_out_sat_cnt_31_24_pos 0
+#define reg_p_antif_dagc5_out_sat_cnt_31_24_len 8
+#define reg_p_antif_dagc5_out_sat_cnt_31_24_lsb 24
+#define xd_p_reg_p_antif_dagc5_rst (*(volatile byte xdata *) 0xF091)
+#define p_reg_p_antif_dagc5_rst 0xF091
+#define reg_p_antif_dagc5_rst_pos 0
+#define reg_p_antif_dagc5_rst_len 1
+#define reg_p_antif_dagc5_rst_lsb 0
+#define xd_p_reg_p_antif_dagc5_en (*(volatile byte xdata *) 0xF092)
+#define p_reg_p_antif_dagc5_en 0xF092
+#define reg_p_antif_dagc5_en_pos 0
+#define reg_p_antif_dagc5_en_len 1
+#define reg_p_antif_dagc5_en_lsb 0
+#define xd_p_reg_p_antif_sc_mode (*(volatile byte xdata *) 0xF093)
+#define p_reg_p_antif_sc_mode 0xF093
+#define reg_p_antif_sc_mode_pos 0
+#define reg_p_antif_sc_mode_len 4
+#define reg_p_antif_sc_mode_lsb 0
+#define xd_p_reg_p_antif_dagc5_done (*(volatile byte xdata *) 0xF094)
+#define p_reg_p_antif_dagc5_done 0xF094
+#define reg_p_antif_dagc5_done_pos 0
+#define reg_p_antif_dagc5_done_len 1
+#define reg_p_antif_dagc5_done_lsb 0
+#define xd_r_reg_r_antif_sc_7_0 (*(volatile byte xdata *) 0xF095)
+#define r_reg_r_antif_sc_7_0 0xF095
+#define reg_r_antif_sc_7_0_pos 0
+#define reg_r_antif_sc_7_0_len 8
+#define reg_r_antif_sc_7_0_lsb 0
+#define xd_r_reg_r_antif_sc_15_8 (*(volatile byte xdata *) 0xF096)
+#define r_reg_r_antif_sc_15_8 0xF096
+#define reg_r_antif_sc_15_8_pos 0
+#define reg_r_antif_sc_15_8_len 8
+#define reg_r_antif_sc_15_8_lsb 8
+#define xd_r_reg_r_antif_dagc5_multiplier_7_0 (*(volatile byte xdata *) 0xF097)
+#define r_reg_r_antif_dagc5_multiplier_7_0 0xF097
+#define reg_r_antif_dagc5_multiplier_7_0_pos 0
+#define reg_r_antif_dagc5_multiplier_7_0_len 8
+#define reg_r_antif_dagc5_multiplier_7_0_lsb 0
+#define xd_r_reg_r_antif_dagc5_multiplier_15_8 (*(volatile byte xdata *) 0xF098)
+#define r_reg_r_antif_dagc5_multiplier_15_8 0xF098
+#define reg_r_antif_dagc5_multiplier_15_8_pos 0
+#define reg_r_antif_dagc5_multiplier_15_8_len 8
+#define reg_r_antif_dagc5_multiplier_15_8_lsb 8
+#define xd_r_reg_r_antif_dagc5_right_shift_bits (*(volatile byte xdata *) 0xF099)
+#define r_reg_r_antif_dagc5_right_shift_bits 0xF099
+#define reg_r_antif_dagc5_right_shift_bits_pos 0
+#define reg_r_antif_dagc5_right_shift_bits_len 4
+#define reg_r_antif_dagc5_right_shift_bits_lsb 0
+#define xd_p_reg_p_antif_dagc5_bypass_scale_ctl (*(volatile byte xdata *) 0xF09A)
+#define p_reg_p_antif_dagc5_bypass_scale_ctl 0xF09A
+#define reg_p_antif_dagc5_bypass_scale_ctl_pos 0
+#define reg_p_antif_dagc5_bypass_scale_ctl_len 3
+#define reg_p_antif_dagc5_bypass_scale_ctl_lsb 0
+#define xd_p_reg_mccid_ccirunno_7_0 (*(volatile byte xdata *) 0xF09B)
+#define p_reg_mccid_ccirunno_7_0 0xF09B
+#define reg_mccid_ccirunno_7_0_pos 0
+#define reg_mccid_ccirunno_7_0_len 8
+#define reg_mccid_ccirunno_7_0_lsb 0
+#define xd_p_reg_mccid_ccirunno_8 (*(volatile byte xdata *) 0xF09C)
+#define p_reg_mccid_ccirunno_8 0xF09C
+#define reg_mccid_ccirunno_8_pos 0
+#define reg_mccid_ccirunno_8_len 1
+#define reg_mccid_ccirunno_8_lsb 8
+#define xd_p_reg_mccid_acirunno_7_0 (*(volatile byte xdata *) 0xF09D)
+#define p_reg_mccid_acirunno_7_0 0xF09D
+#define reg_mccid_acirunno_7_0_pos 0
+#define reg_mccid_acirunno_7_0_len 8
+#define reg_mccid_acirunno_7_0_lsb 0
+#define xd_p_reg_mccid_acirunno_8 (*(volatile byte xdata *) 0xF09E)
+#define p_reg_mccid_acirunno_8 0xF09E
+#define reg_mccid_acirunno_8_pos 0
+#define reg_mccid_acirunno_8_len 1
+#define reg_mccid_acirunno_8_lsb 8
+#define xd_p_reg_mccid_maxtonenearrange_7_0 (*(volatile byte xdata *) 0xF09F)
+#define p_reg_mccid_maxtonenearrange_7_0 0xF09F
+#define reg_mccid_maxtonenearrange_7_0_pos 0
+#define reg_mccid_maxtonenearrange_7_0_len 8
+#define reg_mccid_maxtonenearrange_7_0_lsb 0
+#define xd_p_reg_mccid_maxtonenearrange_8 (*(volatile byte xdata *) 0xF0A0)
+#define p_reg_mccid_maxtonenearrange_8 0xF0A0
+#define reg_mccid_maxtonenearrange_8_pos 0
+#define reg_mccid_maxtonenearrange_8_len 1
+#define reg_mccid_maxtonenearrange_8_lsb 8
+#define xd_r_reg_mccid_maxacipower_7_0 (*(volatile byte xdata *) 0xF0A1)
+#define r_reg_mccid_maxacipower_7_0 0xF0A1
+#define reg_mccid_maxacipower_7_0_pos 0
+#define reg_mccid_maxacipower_7_0_len 8
+#define reg_mccid_maxacipower_7_0_lsb 0
+#define xd_r_reg_mccid_maxacipower_15_8 (*(volatile byte xdata *) 0xF0A2)
+#define r_reg_mccid_maxacipower_15_8 0xF0A2
+#define reg_mccid_maxacipower_15_8_pos 0
+#define reg_mccid_maxacipower_15_8_len 8
+#define reg_mccid_maxacipower_15_8_lsb 8
+#define xd_r_reg_mccid_maxacipower_19_16 (*(volatile byte xdata *) 0xF0A3)
+#define r_reg_mccid_maxacipower_19_16 0xF0A3
+#define reg_mccid_maxacipower_19_16_pos 0
+#define reg_mccid_maxacipower_19_16_len 4
+#define reg_mccid_maxacipower_19_16_lsb 16
+#define xd_p_reg_p_dcoe_en (*(volatile byte xdata *) 0xF0D5)
+#define p_reg_p_dcoe_en 0xF0D5
+#define reg_p_dcoe_en_pos 0
+#define reg_p_dcoe_en_len 1
+#define reg_p_dcoe_en_lsb 0
+#define xd_p_reg_p_dcoe_rst (*(volatile byte xdata *) 0xF0D6)
+#define p_reg_p_dcoe_rst 0xF0D6
+#define reg_p_dcoe_rst_pos 0
+#define reg_p_dcoe_rst_len 1
+#define reg_p_dcoe_rst_lsb 0
+#define xd_p_reg_p_dcoe_clear (*(volatile byte xdata *) 0xF0D7)
+#define p_reg_p_dcoe_clear 0xF0D7
+#define reg_p_dcoe_clear_pos 0
+#define reg_p_dcoe_clear_len 1
+#define reg_p_dcoe_clear_lsb 0
+#define xd_p_reg_p_dcoe_applyloc_7_0 (*(volatile byte xdata *) 0xF0D8)
+#define p_reg_p_dcoe_applyloc_7_0 0xF0D8
+#define reg_p_dcoe_applyloc_7_0_pos 0
+#define reg_p_dcoe_applyloc_7_0_len 8
+#define reg_p_dcoe_applyloc_7_0_lsb 0
+#define xd_p_reg_p_dcoe_applyloc_12_8 (*(volatile byte xdata *) 0xF0D9)
+#define p_reg_p_dcoe_applyloc_12_8 0xF0D9
+#define reg_p_dcoe_applyloc_12_8_pos 0
+#define reg_p_dcoe_applyloc_12_8_len 5
+#define reg_p_dcoe_applyloc_12_8_lsb 8
+#define xd_p_reg_p_dcoe_accnums (*(volatile byte xdata *) 0xF0DA)
+#define p_reg_p_dcoe_accnums 0xF0DA
+#define reg_p_dcoe_accnums_pos 0
+#define reg_p_dcoe_accnums_len 3
+#define reg_p_dcoe_accnums_lsb 0
+#define xd_p_reg_p_dcoe_accweightsum_sh (*(volatile byte xdata *) 0xF0DB)
+#define p_reg_p_dcoe_accweightsum_sh 0xF0DB
+#define reg_p_dcoe_accweightsum_sh_pos 0
+#define reg_p_dcoe_accweightsum_sh_len 3
+#define reg_p_dcoe_accweightsum_sh_lsb 0
+#define xd_p_reg_p_dcoe_accweightcurr (*(volatile byte xdata *) 0xF0DC)
+#define p_reg_p_dcoe_accweightcurr 0xF0DC
+#define reg_p_dcoe_accweightcurr_pos 0
+#define reg_p_dcoe_accweightcurr_len 8
+#define reg_p_dcoe_accweightcurr_lsb 0
+#define xd_p_reg_dcoe_apply_rd (*(volatile byte xdata *) 0xF0DF)
+#define p_reg_dcoe_apply_rd 0xF0DF
+#define reg_dcoe_apply_rd_pos 0
+#define reg_dcoe_apply_rd_len 1
+#define reg_dcoe_apply_rd_lsb 0
+#define xd_r_reg_dcoe_apply_i (*(volatile byte xdata *) 0xF0E0)
+#define r_reg_dcoe_apply_i 0xF0E0
+#define reg_dcoe_apply_i_pos 0
+#define reg_dcoe_apply_i_len 8
+#define reg_dcoe_apply_i_lsb 0
+#define xd_r_reg_dcoe_apply_q (*(volatile byte xdata *) 0xF0E1)
+#define r_reg_dcoe_apply_q 0xF0E1
+#define reg_dcoe_apply_q_pos 0
+#define reg_dcoe_apply_q_len 8
+#define reg_dcoe_apply_q_lsb 0
+#define xd_p_reg_p_dcrm_en (*(volatile byte xdata *) 0xF0E2)
+#define p_reg_p_dcrm_en 0xF0E2
+#define reg_p_dcrm_en_pos 0
+#define reg_p_dcrm_en_len 1
+#define reg_p_dcrm_en_lsb 0
+#define xd_p_reg_p_dcrm_fir (*(volatile byte xdata *) 0xF0E3)
+#define p_reg_p_dcrm_fir 0xF0E3
+#define reg_p_dcrm_fir_pos 0
+#define reg_p_dcrm_fir_len 1
+#define reg_p_dcrm_fir_lsb 0
+#define xd_p_reg_p_dcrm_log2_firlen (*(volatile byte xdata *) 0xF0E4)
+#define p_reg_p_dcrm_log2_firlen 0xF0E4
+#define reg_p_dcrm_log2_firlen_pos 0
+#define reg_p_dcrm_log2_firlen_len 3
+#define reg_p_dcrm_log2_firlen_lsb 0
+#define xd_r_reg_dcoe_apply_fir_i (*(volatile byte xdata *) 0xF0E5)
+#define r_reg_dcoe_apply_fir_i 0xF0E5
+#define reg_dcoe_apply_fir_i_pos 0
+#define reg_dcoe_apply_fir_i_len 8
+#define reg_dcoe_apply_fir_i_lsb 0
+#define xd_r_reg_dcoe_apply_fir_q (*(volatile byte xdata *) 0xF0E6)
+#define r_reg_dcoe_apply_fir_q 0xF0E6
+#define reg_dcoe_apply_fir_q_pos 0
+#define reg_dcoe_apply_fir_q_len 8
+#define reg_dcoe_apply_fir_q_lsb 0
+#define xd_p_reg_p_dcrm_force_en (*(volatile byte xdata *) 0xF0E7)
+#define p_reg_p_dcrm_force_en 0xF0E7
+#define reg_p_dcrm_force_en_pos 0
+#define reg_p_dcrm_force_en_len 1
+#define reg_p_dcrm_force_en_lsb 0
+#define xd_p_reg_p_dcrm_force_value_i (*(volatile byte xdata *) 0xF0E8)
+#define p_reg_p_dcrm_force_value_i 0xF0E8
+#define reg_p_dcrm_force_value_i_pos 0
+#define reg_p_dcrm_force_value_i_len 8
+#define reg_p_dcrm_force_value_i_lsb 0
+#define xd_p_reg_p_dcrm_force_value_q (*(volatile byte xdata *) 0xF0E9)
+#define p_reg_p_dcrm_force_value_q 0xF0E9
+#define reg_p_dcrm_force_value_q_pos 0
+#define reg_p_dcrm_force_value_q_len 8
+#define reg_p_dcrm_force_value_q_lsb 0
+#define xd_p_reg_p_iqip_en (*(volatile byte xdata *) 0xF0EA)
+#define p_reg_p_iqip_en 0xF0EA
+#define reg_p_iqip_en_pos 0
+#define reg_p_iqip_en_len 1
+#define reg_p_iqip_en_lsb 0
+#define xd_p_reg_p_iqip_rst (*(volatile byte xdata *) 0xF0EB)
+#define p_reg_p_iqip_rst 0xF0EB
+#define reg_p_iqip_rst_pos 0
+#define reg_p_iqip_rst_len 1
+#define reg_p_iqip_rst_lsb 0
+#define xd_p_reg_iqip_mu_ld (*(volatile byte xdata *) 0xF0EC)
+#define p_reg_iqip_mu_ld 0xF0EC
+#define reg_iqip_mu_ld_pos 0
+#define reg_iqip_mu_ld_len 1
+#define reg_iqip_mu_ld_lsb 0
+#define xd_p_reg_p_iqip_mu_7_0 (*(volatile byte xdata *) 0xF0ED)
+#define p_reg_p_iqip_mu_7_0 0xF0ED
+#define reg_p_iqip_mu_7_0_pos 0
+#define reg_p_iqip_mu_7_0_len 8
+#define reg_p_iqip_mu_7_0_lsb 0
+#define xd_p_reg_p_iqip_mu_11_8 (*(volatile byte xdata *) 0xF0EE)
+#define p_reg_p_iqip_mu_11_8 0xF0EE
+#define reg_p_iqip_mu_11_8_pos 0
+#define reg_p_iqip_mu_11_8_len 4
+#define reg_p_iqip_mu_11_8_lsb 8
+#define xd_p_reg_iqip_gs_ld (*(volatile byte xdata *) 0xF0EF)
+#define p_reg_iqip_gs_ld 0xF0EF
+#define reg_iqip_gs_ld_pos 0
+#define reg_iqip_gs_ld_len 1
+#define reg_iqip_gs_ld_lsb 0
+#define xd_p_reg_p_iqip_gsnums (*(volatile byte xdata *) 0xF0F0)
+#define p_reg_p_iqip_gsnums 0xF0F0
+#define reg_p_iqip_gsnums_pos 0
+#define reg_p_iqip_gsnums_len 4
+#define reg_p_iqip_gsnums_lsb 0
+#define xd_p_reg_p_iqip_gsites_7_0 (*(volatile byte xdata *) 0xF0F1)
+#define p_reg_p_iqip_gsites_7_0 0xF0F1
+#define reg_p_iqip_gsites_7_0_pos 0
+#define reg_p_iqip_gsites_7_0_len 8
+#define reg_p_iqip_gsites_7_0_lsb 0
+#define xd_p_reg_p_iqip_gsites_15_8 (*(volatile byte xdata *) 0xF0F2)
+#define p_reg_p_iqip_gsites_15_8 0xF0F2
+#define reg_p_iqip_gsites_15_8_pos 0
+#define reg_p_iqip_gsites_15_8_len 8
+#define reg_p_iqip_gsites_15_8_lsb 8
+#define xd_p_reg_iqip_w_ld (*(volatile byte xdata *) 0xF0F3)
+#define p_reg_iqip_w_ld 0xF0F3
+#define reg_iqip_w_ld_pos 0
+#define reg_iqip_w_ld_len 1
+#define reg_iqip_w_ld_lsb 0
+#define xd_p_reg_p_iqip_w_re_7_0 (*(volatile byte xdata *) 0xF0F4)
+#define p_reg_p_iqip_w_re_7_0 0xF0F4
+#define reg_p_iqip_w_re_7_0_pos 0
+#define reg_p_iqip_w_re_7_0_len 8
+#define reg_p_iqip_w_re_7_0_lsb 0
+#define xd_p_reg_p_iqip_w_re_15_8 (*(volatile byte xdata *) 0xF0F5)
+#define p_reg_p_iqip_w_re_15_8 0xF0F5
+#define reg_p_iqip_w_re_15_8_pos 0
+#define reg_p_iqip_w_re_15_8_len 8
+#define reg_p_iqip_w_re_15_8_lsb 8
+#define xd_p_reg_p_iqip_w_re_16 (*(volatile byte xdata *) 0xF0F6)
+#define p_reg_p_iqip_w_re_16 0xF0F6
+#define reg_p_iqip_w_re_16_pos 0
+#define reg_p_iqip_w_re_16_len 1
+#define reg_p_iqip_w_re_16_lsb 16
+#define xd_p_reg_p_iqip_w_im_7_0 (*(volatile byte xdata *) 0xF0F7)
+#define p_reg_p_iqip_w_im_7_0 0xF0F7
+#define reg_p_iqip_w_im_7_0_pos 0
+#define reg_p_iqip_w_im_7_0_len 8
+#define reg_p_iqip_w_im_7_0_lsb 0
+#define xd_p_reg_p_iqip_w_im_15_8 (*(volatile byte xdata *) 0xF0F8)
+#define p_reg_p_iqip_w_im_15_8 0xF0F8
+#define reg_p_iqip_w_im_15_8_pos 0
+#define reg_p_iqip_w_im_15_8_len 8
+#define reg_p_iqip_w_im_15_8_lsb 8
+#define xd_p_reg_p_iqip_w_im_16 (*(volatile byte xdata *) 0xF0F9)
+#define p_reg_p_iqip_w_im_16 0xF0F9
+#define reg_p_iqip_w_im_16_pos 0
+#define reg_p_iqip_w_im_16_len 1
+#define reg_p_iqip_w_im_16_lsb 16
+#define xd_p_reg_iqip_accnums_rd (*(volatile byte xdata *) 0xF0FA)
+#define p_reg_iqip_accnums_rd 0xF0FA
+#define reg_iqip_accnums_rd_pos 0
+#define reg_iqip_accnums_rd_len 1
+#define reg_iqip_accnums_rd_lsb 0
+#define xd_p_reg_p_iqip_accnums (*(volatile byte xdata *) 0xF0FB)
+#define p_reg_p_iqip_accnums 0xF0FB
+#define reg_p_iqip_accnums_pos 0
+#define reg_p_iqip_accnums_len 2
+#define reg_p_iqip_accnums_lsb 0
+#define xd_p_reg_iqip_accnums_rdy (*(volatile byte xdata *) 0xF0FC)
+#define p_reg_iqip_accnums_rdy 0xF0FC
+#define reg_iqip_accnums_rdy_pos 0
+#define reg_iqip_accnums_rdy_len 1
+#define reg_iqip_accnums_rdy_lsb 0
+#define xd_r_reg_r_iqip_wacc_re_7_0 (*(volatile byte xdata *) 0xF0FD)
+#define r_reg_r_iqip_wacc_re_7_0 0xF0FD
+#define reg_r_iqip_wacc_re_7_0_pos 0
+#define reg_r_iqip_wacc_re_7_0_len 8
+#define reg_r_iqip_wacc_re_7_0_lsb 0
+#define xd_r_reg_r_iqip_wacc_re_15_8 (*(volatile byte xdata *) 0xF0FE)
+#define r_reg_r_iqip_wacc_re_15_8 0xF0FE
+#define reg_r_iqip_wacc_re_15_8_pos 0
+#define reg_r_iqip_wacc_re_15_8_len 8
+#define reg_r_iqip_wacc_re_15_8_lsb 8
+#define xd_r_reg_r_iqip_wacc_re_16 (*(volatile byte xdata *) 0xF0FF)
+#define r_reg_r_iqip_wacc_re_16 0xF0FF
+#define reg_r_iqip_wacc_re_16_pos 0
+#define reg_r_iqip_wacc_re_16_len 1
+#define reg_r_iqip_wacc_re_16_lsb 16
+#define xd_r_reg_r_iqip_wacc_im_7_0 (*(volatile byte xdata *) 0xF100)
+#define r_reg_r_iqip_wacc_im_7_0 0xF100
+#define reg_r_iqip_wacc_im_7_0_pos 0
+#define reg_r_iqip_wacc_im_7_0_len 8
+#define reg_r_iqip_wacc_im_7_0_lsb 0
+#define xd_r_reg_r_iqip_wacc_im_15_8 (*(volatile byte xdata *) 0xF101)
+#define r_reg_r_iqip_wacc_im_15_8 0xF101
+#define reg_r_iqip_wacc_im_15_8_pos 0
+#define reg_r_iqip_wacc_im_15_8_len 8
+#define reg_r_iqip_wacc_im_15_8_lsb 8
+#define xd_r_reg_r_iqip_wacc_im_16 (*(volatile byte xdata *) 0xF102)
+#define r_reg_r_iqip_wacc_im_16 0xF102
+#define reg_r_iqip_wacc_im_16_pos 0
+#define reg_r_iqip_wacc_im_16_len 1
+#define reg_r_iqip_wacc_im_16_lsb 16
+#define xd_r_reg_r_iqip_out2cacc_re_7_0 (*(volatile byte xdata *) 0xF103)
+#define r_reg_r_iqip_out2cacc_re_7_0 0xF103
+#define reg_r_iqip_out2cacc_re_7_0_pos 0
+#define reg_r_iqip_out2cacc_re_7_0_len 8
+#define reg_r_iqip_out2cacc_re_7_0_lsb 0
+#define xd_r_reg_r_iqip_out2cacc_re_15_8 (*(volatile byte xdata *) 0xF104)
+#define r_reg_r_iqip_out2cacc_re_15_8 0xF104
+#define reg_r_iqip_out2cacc_re_15_8_pos 0
+#define reg_r_iqip_out2cacc_re_15_8_len 8
+#define reg_r_iqip_out2cacc_re_15_8_lsb 8
+#define xd_r_reg_r_iqip_out2cacc_re_21_16 (*(volatile byte xdata *) 0xF105)
+#define r_reg_r_iqip_out2cacc_re_21_16 0xF105
+#define reg_r_iqip_out2cacc_re_21_16_pos 0
+#define reg_r_iqip_out2cacc_re_21_16_len 6
+#define reg_r_iqip_out2cacc_re_21_16_lsb 16
+#define xd_r_reg_r_iqip_out2cacc_im_7_0 (*(volatile byte xdata *) 0xF106)
+#define r_reg_r_iqip_out2cacc_im_7_0 0xF106
+#define reg_r_iqip_out2cacc_im_7_0_pos 0
+#define reg_r_iqip_out2cacc_im_7_0_len 8
+#define reg_r_iqip_out2cacc_im_7_0_lsb 0
+#define xd_r_reg_r_iqip_out2cacc_im_15_8 (*(volatile byte xdata *) 0xF107)
+#define r_reg_r_iqip_out2cacc_im_15_8 0xF107
+#define reg_r_iqip_out2cacc_im_15_8_pos 0
+#define reg_r_iqip_out2cacc_im_15_8_len 8
+#define reg_r_iqip_out2cacc_im_15_8_lsb 8
+#define xd_r_reg_r_iqip_out2cacc_im_21_16 (*(volatile byte xdata *) 0xF108)
+#define r_reg_r_iqip_out2cacc_im_21_16 0xF108
+#define reg_r_iqip_out2cacc_im_21_16_pos 0
+#define reg_r_iqip_out2cacc_im_21_16_len 6
+#define reg_r_iqip_out2cacc_im_21_16_lsb 16
+#define xd_p_reg_mccid_ccif0_scstrobe (*(volatile byte xdata *) 0xF109)
+#define p_reg_mccid_ccif0_scstrobe 0xF109
+#define reg_mccid_ccif0_scstrobe_pos 0
+#define reg_mccid_ccif0_scstrobe_len 7
+#define reg_mccid_ccif0_scstrobe_lsb 0
+#define xd_p_reg_mccid_cciftrigger (*(volatile byte xdata *) 0xF10A)
+#define p_reg_mccid_cciftrigger 0xF10A
+#define reg_mccid_cciftrigger_pos 0
+#define reg_mccid_cciftrigger_len 1
+#define reg_mccid_cciftrigger_lsb 0
+#define xd_p_reg_mccid_ccif1_scstrobe (*(volatile byte xdata *) 0xF10B)
+#define p_reg_mccid_ccif1_scstrobe 0xF10B
+#define reg_mccid_ccif1_scstrobe_pos 0
+#define reg_mccid_ccif1_scstrobe_len 7
+#define reg_mccid_ccif1_scstrobe_lsb 0
+#define xd_p_reg_mccid_ccif0_fcwccif_7_0 (*(volatile byte xdata *) 0xF10E)
+#define p_reg_mccid_ccif0_fcwccif_7_0 0xF10E
+#define reg_mccid_ccif0_fcwccif_7_0_pos 0
+#define reg_mccid_ccif0_fcwccif_7_0_len 8
+#define reg_mccid_ccif0_fcwccif_7_0_lsb 0
+#define xd_p_reg_mccid_ccif0_fcwccif_13_8 (*(volatile byte xdata *) 0xF10F)
+#define p_reg_mccid_ccif0_fcwccif_13_8 0xF10F
+#define reg_mccid_ccif0_fcwccif_13_8_pos 0
+#define reg_mccid_ccif0_fcwccif_13_8_len 6
+#define reg_mccid_ccif0_fcwccif_13_8_lsb 8
+#define xd_p_reg_mccid_ccif0_state (*(volatile byte xdata *) 0xF110)
+#define p_reg_mccid_ccif0_state 0xF110
+#define reg_mccid_ccif0_state_pos 0
+#define reg_mccid_ccif0_state_len 1
+#define reg_mccid_ccif0_state_lsb 0
+#define xd_p_reg_mccid_ccif0_acistate (*(volatile byte xdata *) 0xF111)
+#define p_reg_mccid_ccif0_acistate 0xF111
+#define reg_mccid_ccif0_acistate_pos 0
+#define reg_mccid_ccif0_acistate_len 1
+#define reg_mccid_ccif0_acistate_lsb 0
+#define xd_p_reg_mccid_ccif1_fcwccif_7_0 (*(volatile byte xdata *) 0xF112)
+#define p_reg_mccid_ccif1_fcwccif_7_0 0xF112
+#define reg_mccid_ccif1_fcwccif_7_0_pos 0
+#define reg_mccid_ccif1_fcwccif_7_0_len 8
+#define reg_mccid_ccif1_fcwccif_7_0_lsb 0
+#define xd_p_reg_mccid_ccif1_fcwccif_13_8 (*(volatile byte xdata *) 0xF113)
+#define p_reg_mccid_ccif1_fcwccif_13_8 0xF113
+#define reg_mccid_ccif1_fcwccif_13_8_pos 0
+#define reg_mccid_ccif1_fcwccif_13_8_len 6
+#define reg_mccid_ccif1_fcwccif_13_8_lsb 8
+#define xd_p_reg_mccid_ccif1_state (*(volatile byte xdata *) 0xF114)
+#define p_reg_mccid_ccif1_state 0xF114
+#define reg_mccid_ccif1_state_pos 0
+#define reg_mccid_ccif1_state_len 1
+#define reg_mccid_ccif1_state_lsb 0
+#define xd_p_reg_mccid_ccif1_acistate (*(volatile byte xdata *) 0xF115)
+#define p_reg_mccid_ccif1_acistate 0xF115
+#define reg_mccid_ccif1_acistate_pos 0
+#define reg_mccid_ccif1_acistate_len 1
+#define reg_mccid_ccif1_acistate_lsb 0
+#define xd_r_reg_r_acif_saturate (*(volatile byte xdata *) 0xF117)
+#define r_reg_r_acif_saturate 0xF117
+#define reg_r_acif_saturate_pos 0
+#define reg_r_acif_saturate_len 8
+#define reg_r_acif_saturate_lsb 0
+#define xd_p_reg_tmr_timer0_threshold_7_0 (*(volatile byte xdata *) 0xF118)
+#define p_reg_tmr_timer0_threshold_7_0 0xF118
+#define reg_tmr_timer0_threshold_7_0_pos 0
+#define reg_tmr_timer0_threshold_7_0_len 8
+#define reg_tmr_timer0_threshold_7_0_lsb 0
+#define xd_p_reg_tmr_timer0_threshold_15_8 (*(volatile byte xdata *) 0xF119)
+#define p_reg_tmr_timer0_threshold_15_8 0xF119
+#define reg_tmr_timer0_threshold_15_8_pos 0
+#define reg_tmr_timer0_threshold_15_8_len 8
+#define reg_tmr_timer0_threshold_15_8_lsb 8
+#define xd_p_reg_tmr_timer0_enable (*(volatile byte xdata *) 0xF11A)
+#define p_reg_tmr_timer0_enable 0xF11A
+#define reg_tmr_timer0_enable_pos 0
+#define reg_tmr_timer0_enable_len 1
+#define reg_tmr_timer0_enable_lsb 0
+#define xd_p_reg_tmr_timer0_clk_sel (*(volatile byte xdata *) 0xF11B)
+#define p_reg_tmr_timer0_clk_sel 0xF11B
+#define reg_tmr_timer0_clk_sel_pos 0
+#define reg_tmr_timer0_clk_sel_len 1
+#define reg_tmr_timer0_clk_sel_lsb 0
+#define xd_p_reg_tmr_timer0_int (*(volatile byte xdata *) 0xF11C)
+#define p_reg_tmr_timer0_int 0xF11C
+#define reg_tmr_timer0_int_pos 0
+#define reg_tmr_timer0_int_len 1
+#define reg_tmr_timer0_int_lsb 0
+#define xd_p_reg_tmr_timer0_rst (*(volatile byte xdata *) 0xF11D)
+#define p_reg_tmr_timer0_rst 0xF11D
+#define reg_tmr_timer0_rst_pos 0
+#define reg_tmr_timer0_rst_len 1
+#define reg_tmr_timer0_rst_lsb 0
+#define xd_r_reg_tmr_timer0_count_7_0 (*(volatile byte xdata *) 0xF11E)
+#define r_reg_tmr_timer0_count_7_0 0xF11E
+#define reg_tmr_timer0_count_7_0_pos 0
+#define reg_tmr_timer0_count_7_0_len 8
+#define reg_tmr_timer0_count_7_0_lsb 0
+#define xd_r_reg_tmr_timer0_count_15_8 (*(volatile byte xdata *) 0xF11F)
+#define r_reg_tmr_timer0_count_15_8 0xF11F
+#define reg_tmr_timer0_count_15_8_pos 0
+#define reg_tmr_timer0_count_15_8_len 8
+#define reg_tmr_timer0_count_15_8_lsb 8
+#define xd_p_reg_suspend (*(volatile byte xdata *) 0xF120)
+#define p_reg_suspend 0xF120
+#define reg_suspend_pos 0
+#define reg_suspend_len 1
+#define reg_suspend_lsb 0
+#define xd_p_reg_suspend_rdy (*(volatile byte xdata *) 0xF121)
+#define p_reg_suspend_rdy 0xF121
+#define reg_suspend_rdy_pos 0
+#define reg_suspend_rdy_len 1
+#define reg_suspend_rdy_lsb 0
+#define xd_p_reg_resume (*(volatile byte xdata *) 0xF122)
+#define p_reg_resume 0xF122
+#define reg_resume_pos 0
+#define reg_resume_len 1
+#define reg_resume_lsb 0
+#define xd_p_reg_resume_rdy (*(volatile byte xdata *) 0xF123)
+#define p_reg_resume_rdy 0xF123
+#define reg_resume_rdy_pos 0
+#define reg_resume_rdy_len 1
+#define reg_resume_rdy_lsb 0
+#define xd_p_reg_gp_trigger (*(volatile byte xdata *) 0xF124)
+#define p_reg_gp_trigger 0xF124
+#define reg_gp_trigger_pos 0
+#define reg_gp_trigger_len 1
+#define reg_gp_trigger_lsb 0
+#define xd_p_reg_trigger_sel (*(volatile byte xdata *) 0xF125)
+#define p_reg_trigger_sel 0xF125
+#define reg_trigger_sel_pos 0
+#define reg_trigger_sel_len 2
+#define reg_trigger_sel_lsb 0
+#define xd_p_reg_debug_ofdm (*(volatile byte xdata *) 0xF126)
+#define p_reg_debug_ofdm 0xF126
+#define reg_debug_ofdm_pos 0
+#define reg_debug_ofdm_len 2
+#define reg_debug_ofdm_lsb 0
+#define xd_p_reg_trigger_module_sel (*(volatile byte xdata *) 0xF127)
+#define p_reg_trigger_module_sel 0xF127
+#define reg_trigger_module_sel_pos 0
+#define reg_trigger_module_sel_len 6
+#define reg_trigger_module_sel_lsb 0
+#define xd_p_reg_trigger_set_sel (*(volatile byte xdata *) 0xF128)
+#define p_reg_trigger_set_sel 0xF128
+#define reg_trigger_set_sel_pos 0
+#define reg_trigger_set_sel_len 6
+#define reg_trigger_set_sel_lsb 0
+#define xd_p_reg_fw_int_mask_n (*(volatile byte xdata *) 0xF129)
+#define p_reg_fw_int_mask_n 0xF129
+#define reg_fw_int_mask_n_pos 0
+#define reg_fw_int_mask_n_len 1
+#define reg_fw_int_mask_n_lsb 0
+#define xd_p_reg_dioif_rst (*(volatile byte xdata *) 0xF12A)
+#define p_reg_dioif_rst 0xF12A
+#define reg_dioif_rst_pos 0
+#define reg_dioif_rst_len 1
+#define reg_dioif_rst_lsb 0
+#define xd_p_reg_debug_group (*(volatile byte xdata *) 0xF12B)
+#define p_reg_debug_group 0xF12B
+#define reg_debug_group_pos 0
+#define reg_debug_group_len 4
+#define reg_debug_group_lsb 0
+#define xd_p_reg_odbg_clk_sel (*(volatile byte xdata *) 0xF12C)
+#define p_reg_odbg_clk_sel 0xF12C
+#define reg_odbg_clk_sel_pos 0
+#define reg_odbg_clk_sel_len 3
+#define reg_odbg_clk_sel_lsb 0
+#define xd_p_reg_p_ccif_shift_fre (*(volatile byte xdata *) 0xF12F)
+#define p_reg_p_ccif_shift_fre 0xF12F
+#define reg_p_ccif_shift_fre_pos 0
+#define reg_p_ccif_shift_fre_len 1
+#define reg_p_ccif_shift_fre_lsb 0
+#define xd_p_reg_p_ccif_bandwidth_factor (*(volatile byte xdata *) 0xF130)
+#define p_reg_p_ccif_bandwidth_factor 0xF130
+#define reg_p_ccif_bandwidth_factor_pos 0
+#define reg_p_ccif_bandwidth_factor_len 3
+#define reg_p_ccif_bandwidth_factor_lsb 0
+#define xd_p_reg_ccif_rst (*(volatile byte xdata *) 0xF131)
+#define p_reg_ccif_rst 0xF131
+#define reg_ccif_rst_pos 0
+#define reg_ccif_rst_len 1
+#define reg_ccif_rst_lsb 0
+#define xd_p_reg_p_ccif_min_bandwidth (*(volatile byte xdata *) 0xF132)
+#define p_reg_p_ccif_min_bandwidth 0xF132
+#define reg_p_ccif_min_bandwidth_pos 0
+#define reg_p_ccif_min_bandwidth_len 7
+#define reg_p_ccif_min_bandwidth_lsb 0
+#define xd_p_reg_ccif_bq0_state (*(volatile byte xdata *) 0xF133)
+#define p_reg_ccif_bq0_state 0xF133
+#define reg_ccif_bq0_state_pos 0
+#define reg_ccif_bq0_state_len 1
+#define reg_ccif_bq0_state_lsb 0
+#define xd_p_reg_ccif_bq0_outputscaling (*(volatile byte xdata *) 0xF134)
+#define p_reg_ccif_bq0_outputscaling 0xF134
+#define reg_ccif_bq0_outputscaling_pos 0
+#define reg_ccif_bq0_outputscaling_len 5
+#define reg_ccif_bq0_outputscaling_lsb 0
+#define xd_p_reg_ccif_bq1_state (*(volatile byte xdata *) 0xF135)
+#define p_reg_ccif_bq1_state 0xF135
+#define reg_ccif_bq1_state_pos 0
+#define reg_ccif_bq1_state_len 1
+#define reg_ccif_bq1_state_lsb 0
+#define xd_p_reg_ccif_bq1_outputscaling (*(volatile byte xdata *) 0xF136)
+#define p_reg_ccif_bq1_outputscaling 0xF136
+#define reg_ccif_bq1_outputscaling_pos 0
+#define reg_ccif_bq1_outputscaling_len 5
+#define reg_ccif_bq1_outputscaling_lsb 0
+#define xd_p_reg_ccif_bq0_a1_7_0 (*(volatile byte xdata *) 0xF137)
+#define p_reg_ccif_bq0_a1_7_0 0xF137
+#define reg_ccif_bq0_a1_7_0_pos 0
+#define reg_ccif_bq0_a1_7_0_len 8
+#define reg_ccif_bq0_a1_7_0_lsb 0
+#define xd_p_reg_ccif_bq0_a1_13_8 (*(volatile byte xdata *) 0xF138)
+#define p_reg_ccif_bq0_a1_13_8 0xF138
+#define reg_ccif_bq0_a1_13_8_pos 0
+#define reg_ccif_bq0_a1_13_8_len 6
+#define reg_ccif_bq0_a1_13_8_lsb 8
+#define xd_p_reg_ccif_bq1_a1_7_0 (*(volatile byte xdata *) 0xF139)
+#define p_reg_ccif_bq1_a1_7_0 0xF139
+#define reg_ccif_bq1_a1_7_0_pos 0
+#define reg_ccif_bq1_a1_7_0_len 8
+#define reg_ccif_bq1_a1_7_0_lsb 0
+#define xd_p_reg_ccif_bq1_a1_13_8 (*(volatile byte xdata *) 0xF13A)
+#define p_reg_ccif_bq1_a1_13_8 0xF13A
+#define reg_ccif_bq1_a1_13_8_pos 0
+#define reg_ccif_bq1_a1_13_8_len 6
+#define reg_ccif_bq1_a1_13_8_lsb 8
+#define xd_p_reg_ccif_bq0_b1_7_0 (*(volatile byte xdata *) 0xF13B)
+#define p_reg_ccif_bq0_b1_7_0 0xF13B
+#define reg_ccif_bq0_b1_7_0_pos 0
+#define reg_ccif_bq0_b1_7_0_len 8
+#define reg_ccif_bq0_b1_7_0_lsb 0
+#define xd_p_reg_ccif_bq0_b1_13_8 (*(volatile byte xdata *) 0xF13C)
+#define p_reg_ccif_bq0_b1_13_8 0xF13C
+#define reg_ccif_bq0_b1_13_8_pos 0
+#define reg_ccif_bq0_b1_13_8_len 6
+#define reg_ccif_bq0_b1_13_8_lsb 8
+#define xd_p_reg_ccif_bq1_b1_7_0 (*(volatile byte xdata *) 0xF13D)
+#define p_reg_ccif_bq1_b1_7_0 0xF13D
+#define reg_ccif_bq1_b1_7_0_pos 0
+#define reg_ccif_bq1_b1_7_0_len 8
+#define reg_ccif_bq1_b1_7_0_lsb 0
+#define xd_p_reg_ccif_bq1_b1_13_8 (*(volatile byte xdata *) 0xF13E)
+#define p_reg_ccif_bq1_b1_13_8 0xF13E
+#define reg_ccif_bq1_b1_13_8_pos 0
+#define reg_ccif_bq1_b1_13_8_len 6
+#define reg_ccif_bq1_b1_13_8_lsb 8
+#define xd_p_reg_ccif_bq0_b2_7_0 (*(volatile byte xdata *) 0xF13F)
+#define p_reg_ccif_bq0_b2_7_0 0xF13F
+#define reg_ccif_bq0_b2_7_0_pos 0
+#define reg_ccif_bq0_b2_7_0_len 8
+#define reg_ccif_bq0_b2_7_0_lsb 0
+#define xd_p_reg_ccif_bq0_b2_13_8 (*(volatile byte xdata *) 0xF140)
+#define p_reg_ccif_bq0_b2_13_8 0xF140
+#define reg_ccif_bq0_b2_13_8_pos 0
+#define reg_ccif_bq0_b2_13_8_len 6
+#define reg_ccif_bq0_b2_13_8_lsb 8
+#define xd_p_reg_ccif_bq1_b2_7_0 (*(volatile byte xdata *) 0xF141)
+#define p_reg_ccif_bq1_b2_7_0 0xF141
+#define reg_ccif_bq1_b2_7_0_pos 0
+#define reg_ccif_bq1_b2_7_0_len 8
+#define reg_ccif_bq1_b2_7_0_lsb 0
+#define xd_p_reg_ccif_bq1_b2_13_8 (*(volatile byte xdata *) 0xF142)
+#define p_reg_ccif_bq1_b2_13_8 0xF142
+#define reg_ccif_bq1_b2_13_8_pos 0
+#define reg_ccif_bq1_b2_13_8_len 6
+#define reg_ccif_bq1_b2_13_8_lsb 8
+#define xd_p_reg_ccif_debug_rst (*(volatile byte xdata *) 0xF143)
+#define p_reg_ccif_debug_rst 0xF143
+#define reg_ccif_debug_rst_pos 0
+#define reg_ccif_debug_rst_len 1
+#define reg_ccif_debug_rst_lsb 0
+#define xd_p_reg_mccid_defaultccifscstrobe (*(volatile byte xdata *) 0xF144)
+#define p_reg_mccid_defaultccifscstrobe 0xF144
+#define reg_mccid_defaultccifscstrobe_pos 0
+#define reg_mccid_defaultccifscstrobe_len 7
+#define reg_mccid_defaultccifscstrobe_lsb 0
+#define xd_p_reg_mccid_monitoringaci (*(volatile byte xdata *) 0xF145)
+#define p_reg_mccid_monitoringaci 0xF145
+#define reg_mccid_monitoringaci_pos 0
+#define reg_mccid_monitoringaci_len 1
+#define reg_mccid_monitoringaci_lsb 0
+#define xd_p_reg_mccid_ispassmode (*(volatile byte xdata *) 0xF146)
+#define p_reg_mccid_ispassmode 0xF146
+#define reg_mccid_ispassmode_pos 0
+#define reg_mccid_ispassmode_len 1
+#define reg_mccid_ispassmode_lsb 0
+#define xd_p_reg_mccid_issteadystatemode (*(volatile byte xdata *) 0xF147)
+#define p_reg_mccid_issteadystatemode 0xF147
+#define reg_mccid_issteadystatemode_pos 0
+#define reg_mccid_issteadystatemode_len 1
+#define reg_mccid_issteadystatemode_lsb 0
+#define xd_p_reg_mccid_fixedgaincmp (*(volatile byte xdata *) 0xF148)
+#define p_reg_mccid_fixedgaincmp 0xF148
+#define reg_mccid_fixedgaincmp_pos 0
+#define reg_mccid_fixedgaincmp_len 1
+#define reg_mccid_fixedgaincmp_lsb 0
+#define xd_p_reg_mccid_misscounter_reset (*(volatile byte xdata *) 0xF149)
+#define p_reg_mccid_misscounter_reset 0xF149
+#define reg_mccid_misscounter_reset_pos 0
+#define reg_mccid_misscounter_reset_len 1
+#define reg_mccid_misscounter_reset_lsb 0
+#define xd_p_reg_mccid_acwgcheckcciexist (*(volatile byte xdata *) 0xF14A)
+#define p_reg_mccid_acwgcheckcciexist 0xF14A
+#define reg_mccid_acwgcheckcciexist_pos 0
+#define reg_mccid_acwgcheckcciexist_len 1
+#define reg_mccid_acwgcheckcciexist_lsb 0
+#define xd_p_reg_mccid_acidone (*(volatile byte xdata *) 0xF14B)
+#define p_reg_mccid_acidone 0xF14B
+#define reg_mccid_acidone_pos 0
+#define reg_mccid_acidone_len 1
+#define reg_mccid_acidone_lsb 0
+#define xd_p_reg_mccid_sxdesiredpower_7_0 (*(volatile byte xdata *) 0xF14C)
+#define p_reg_mccid_sxdesiredpower_7_0 0xF14C
+#define reg_mccid_sxdesiredpower_7_0_pos 0
+#define reg_mccid_sxdesiredpower_7_0_len 8
+#define reg_mccid_sxdesiredpower_7_0_lsb 0
+#define xd_p_reg_mccid_sxdesiredpower_9_8 (*(volatile byte xdata *) 0xF14D)
+#define p_reg_mccid_sxdesiredpower_9_8 0xF14D
+#define reg_mccid_sxdesiredpower_9_8_pos 0
+#define reg_mccid_sxdesiredpower_9_8_len 2
+#define reg_mccid_sxdesiredpower_9_8_lsb 8
+#define xd_p_reg_mccid_defaultccitimertriggerno (*(volatile byte xdata *) 0xF14E)
+#define p_reg_mccid_defaultccitimertriggerno 0xF14E
+#define reg_mccid_defaultccitimertriggerno_pos 0
+#define reg_mccid_defaultccitimertriggerno_len 8
+#define reg_mccid_defaultccitimertriggerno_lsb 0
+#define xd_p_reg_mccid_detectedmaxtonecountshift (*(volatile byte xdata *) 0xF14F)
+#define p_reg_mccid_detectedmaxtonecountshift 0xF14F
+#define reg_mccid_detectedmaxtonecountshift_pos 0
+#define reg_mccid_detectedmaxtonecountshift_len 3
+#define reg_mccid_detectedmaxtonecountshift_lsb 0
+#define xd_p_reg_mccid_moveffttoccif_en (*(volatile byte xdata *) 0xF151)
+#define p_reg_mccid_moveffttoccif_en 0xF151
+#define reg_mccid_moveffttoccif_en_pos 0
+#define reg_mccid_moveffttoccif_en_len 1
+#define reg_mccid_moveffttoccif_en_lsb 0
+#define xd_p_reg_mccid_fftindextobfsfcwfactor_7_0 (*(volatile byte xdata *) 0xF152)
+#define p_reg_mccid_fftindextobfsfcwfactor_7_0 0xF152
+#define reg_mccid_fftindextobfsfcwfactor_7_0_pos 0
+#define reg_mccid_fftindextobfsfcwfactor_7_0_len 8
+#define reg_mccid_fftindextobfsfcwfactor_7_0_lsb 0
+#define xd_p_reg_mccid_fftindextobfsfcwfactor_9_8 (*(volatile byte xdata *) 0xF153)
+#define p_reg_mccid_fftindextobfsfcwfactor_9_8 0xF153
+#define reg_mccid_fftindextobfsfcwfactor_9_8_pos 0
+#define reg_mccid_fftindextobfsfcwfactor_9_8_len 2
+#define reg_mccid_fftindextobfsfcwfactor_9_8_lsb 8
+#define xd_p_reg_mccid_bfsfcwffttoindexfactor_7_0 (*(volatile byte xdata *) 0xF154)
+#define p_reg_mccid_bfsfcwffttoindexfactor_7_0 0xF154
+#define reg_mccid_bfsfcwffttoindexfactor_7_0_pos 0
+#define reg_mccid_bfsfcwffttoindexfactor_7_0_len 8
+#define reg_mccid_bfsfcwffttoindexfactor_7_0_lsb 0
+#define xd_p_reg_mccid_bfsfcwffttoindexfactor_10_8 (*(volatile byte xdata *) 0xF155)
+#define p_reg_mccid_bfsfcwffttoindexfactor_10_8 0xF155
+#define reg_mccid_bfsfcwffttoindexfactor_10_8_pos 0
+#define reg_mccid_bfsfcwffttoindexfactor_10_8_len 3
+#define reg_mccid_bfsfcwffttoindexfactor_10_8_lsb 8
+#define xd_p_reg_mccid_detectedaci (*(volatile byte xdata *) 0xF156)
+#define p_reg_mccid_detectedaci 0xF156
+#define reg_mccid_detectedaci_pos 0
+#define reg_mccid_detectedaci_len 1
+#define reg_mccid_detectedaci_lsb 0
+#define xd_r_reg_mccid_filter_enable (*(volatile byte xdata *) 0xF157)
+#define r_reg_mccid_filter_enable 0xF157
+#define reg_mccid_filter_enable_pos 0
+#define reg_mccid_filter_enable_len 1
+#define reg_mccid_filter_enable_lsb 0
+#define xd_p_reg_mccid_aciscstrobe (*(volatile byte xdata *) 0xF158)
+#define p_reg_mccid_aciscstrobe 0xF158
+#define reg_mccid_aciscstrobe_pos 0
+#define reg_mccid_aciscstrobe_len 7
+#define reg_mccid_aciscstrobe_lsb 0
+#define xd_p_reg_mccid_scanningaci (*(volatile byte xdata *) 0xF159)
+#define p_reg_mccid_scanningaci 0xF159
+#define reg_mccid_scanningaci_pos 0
+#define reg_mccid_scanningaci_len 1
+#define reg_mccid_scanningaci_lsb 0
+#define xd_p_reg_mccid_windowsizeacciwdcount_7_0 (*(volatile byte xdata *) 0xF15A)
+#define p_reg_mccid_windowsizeacciwdcount_7_0 0xF15A
+#define reg_mccid_windowsizeacciwdcount_7_0_pos 0
+#define reg_mccid_windowsizeacciwdcount_7_0_len 8
+#define reg_mccid_windowsizeacciwdcount_7_0_lsb 0
+#define xd_p_reg_mccid_windowsizeacciwdcount_12_8 (*(volatile byte xdata *) 0xF15B)
+#define p_reg_mccid_windowsizeacciwdcount_12_8 0xF15B
+#define reg_mccid_windowsizeacciwdcount_12_8_pos 0
+#define reg_mccid_windowsizeacciwdcount_12_8_len 5
+#define reg_mccid_windowsizeacciwdcount_12_8_lsb 8
+#define xd_p_reg_mccid_scannedacionly (*(volatile byte xdata *) 0xF15C)
+#define p_reg_mccid_scannedacionly 0xF15C
+#define reg_mccid_scannedacionly_pos 0
+#define reg_mccid_scannedacionly_len 1
+#define reg_mccid_scannedacionly_lsb 0
+#define xd_p_reg_mccid_scfactor (*(volatile byte xdata *) 0xF15D)
+#define p_reg_mccid_scfactor 0xF15D
+#define reg_mccid_scfactor_pos 0
+#define reg_mccid_scfactor_len 5
+#define reg_mccid_scfactor_lsb 0
+#define xd_p_reg_mccid_defaultevaluatingbandwidthfactor (*(volatile byte xdata *) 0xF15E)
+#define p_reg_mccid_defaultevaluatingbandwidthfactor 0xF15E
+#define reg_mccid_defaultevaluatingbandwidthfactor_pos 0
+#define reg_mccid_defaultevaluatingbandwidthfactor_len 3
+#define reg_mccid_defaultevaluatingbandwidthfactor_lsb 0
+#define xd_p_reg_mccid_defaultacipowerlevel (*(volatile byte xdata *) 0xF15F)
+#define p_reg_mccid_defaultacipowerlevel 0xF15F
+#define reg_mccid_defaultacipowerlevel_pos 0
+#define reg_mccid_defaultacipowerlevel_len 3
+#define reg_mccid_defaultacipowerlevel_lsb 0
+#define xd_r_reg_mccid_outputdagc1gain_7_0 (*(volatile byte xdata *) 0xF160)
+#define r_reg_mccid_outputdagc1gain_7_0 0xF160
+#define reg_mccid_outputdagc1gain_7_0_pos 0
+#define reg_mccid_outputdagc1gain_7_0_len 8
+#define reg_mccid_outputdagc1gain_7_0_lsb 0
+#define xd_r_reg_mccid_outputdagc1gain_9_8 (*(volatile byte xdata *) 0xF161)
+#define r_reg_mccid_outputdagc1gain_9_8 0xF161
+#define reg_mccid_outputdagc1gain_9_8_pos 0
+#define reg_mccid_outputdagc1gain_9_8_len 2
+#define reg_mccid_outputdagc1gain_9_8_lsb 8
+#define xd_r_reg_mccid_outputdagc1gainshift (*(volatile byte xdata *) 0xF162)
+#define r_reg_mccid_outputdagc1gainshift 0xF162
+#define reg_mccid_outputdagc1gainshift_pos 0
+#define reg_mccid_outputdagc1gainshift_len 4
+#define reg_mccid_outputdagc1gainshift_lsb 0
+#define xd_p_reg_mccid_defaultacwgcheckccipowerlevel (*(volatile byte xdata *) 0xF163)
+#define p_reg_mccid_defaultacwgcheckccipowerlevel 0xF163
+#define reg_mccid_defaultacwgcheckccipowerlevel_pos 0
+#define reg_mccid_defaultacwgcheckccipowerlevel_len 3
+#define reg_mccid_defaultacwgcheckccipowerlevel_lsb 0
+#define xd_p_reg_mccid_ccipowerlevelfactor (*(volatile byte xdata *) 0xF166)
+#define p_reg_mccid_ccipowerlevelfactor 0xF166
+#define reg_mccid_ccipowerlevelfactor_pos 0
+#define reg_mccid_ccipowerlevelfactor_len 3
+#define reg_mccid_ccipowerlevelfactor_lsb 0
+#define xd_p_reg_mccid_scstrobesearchingrange (*(volatile byte xdata *) 0xF167)
+#define p_reg_mccid_scstrobesearchingrange 0xF167
+#define reg_mccid_scstrobesearchingrange_pos 0
+#define reg_mccid_scstrobesearchingrange_len 8
+#define reg_mccid_scstrobesearchingrange_lsb 0
+#define xd_p_reg_mccid_searchingno (*(volatile byte xdata *) 0xF168)
+#define p_reg_mccid_searchingno 0xF168
+#define reg_mccid_searchingno_pos 0
+#define reg_mccid_searchingno_len 6
+#define reg_mccid_searchingno_lsb 0
+#define xd_p_reg_mccid_scannedacifrequencyresolution (*(volatile byte xdata *) 0xF169)
+#define p_reg_mccid_scannedacifrequencyresolution 0xF169
+#define reg_mccid_scannedacifrequencyresolution_pos 0
+#define reg_mccid_scannedacifrequencyresolution_len 4
+#define reg_mccid_scannedacifrequencyresolution_lsb 0
+#define xd_p_reg_mccid_fft0_maskmaxtoneindex_7_0 (*(volatile byte xdata *) 0xF16A)
+#define p_reg_mccid_fft0_maskmaxtoneindex_7_0 0xF16A
+#define reg_mccid_fft0_maskmaxtoneindex_7_0_pos 0
+#define reg_mccid_fft0_maskmaxtoneindex_7_0_len 8
+#define reg_mccid_fft0_maskmaxtoneindex_7_0_lsb 0
+#define xd_p_reg_mccid_fft0_maskmaxtoneindex_12_8 (*(volatile byte xdata *) 0xF16B)
+#define p_reg_mccid_fft0_maskmaxtoneindex_12_8 0xF16B
+#define reg_mccid_fft0_maskmaxtoneindex_12_8_pos 0
+#define reg_mccid_fft0_maskmaxtoneindex_12_8_len 5
+#define reg_mccid_fft0_maskmaxtoneindex_12_8_lsb 8
+#define xd_p_reg_mccid_fft0_state (*(volatile byte xdata *) 0xF16C)
+#define p_reg_mccid_fft0_state 0xF16C
+#define reg_mccid_fft0_state_pos 0
+#define reg_mccid_fft0_state_len 1
+#define reg_mccid_fft0_state_lsb 0
+#define xd_p_reg_mccid_fft1_state (*(volatile byte xdata *) 0xF16D)
+#define p_reg_mccid_fft1_state 0xF16D
+#define reg_mccid_fft1_state_pos 0
+#define reg_mccid_fft1_state_len 1
+#define reg_mccid_fft1_state_lsb 0
+#define xd_p_reg_mccid_fft0_maskmintoneindex_7_0 (*(volatile byte xdata *) 0xF16E)
+#define p_reg_mccid_fft0_maskmintoneindex_7_0 0xF16E
+#define reg_mccid_fft0_maskmintoneindex_7_0_pos 0
+#define reg_mccid_fft0_maskmintoneindex_7_0_len 8
+#define reg_mccid_fft0_maskmintoneindex_7_0_lsb 0
+#define xd_p_reg_mccid_fft0_maskmintoneindex_12_8 (*(volatile byte xdata *) 0xF16F)
+#define p_reg_mccid_fft0_maskmintoneindex_12_8 0xF16F
+#define reg_mccid_fft0_maskmintoneindex_12_8_pos 0
+#define reg_mccid_fft0_maskmintoneindex_12_8_len 5
+#define reg_mccid_fft0_maskmintoneindex_12_8_lsb 8
+#define xd_p_reg_mccid_acipowerlevelfactor (*(volatile byte xdata *) 0xF170)
+#define p_reg_mccid_acipowerlevelfactor 0xF170
+#define reg_mccid_acipowerlevelfactor_pos 0
+#define reg_mccid_acipowerlevelfactor_len 3
+#define reg_mccid_acipowerlevelfactor_lsb 0
+#define xd_p_reg_mccid_fft1_maskmaxtoneindex_7_0 (*(volatile byte xdata *) 0xF171)
+#define p_reg_mccid_fft1_maskmaxtoneindex_7_0 0xF171
+#define reg_mccid_fft1_maskmaxtoneindex_7_0_pos 0
+#define reg_mccid_fft1_maskmaxtoneindex_7_0_len 8
+#define reg_mccid_fft1_maskmaxtoneindex_7_0_lsb 0
+#define xd_p_reg_mccid_fft1_maskmaxtoneindex_12_8 (*(volatile byte xdata *) 0xF172)
+#define p_reg_mccid_fft1_maskmaxtoneindex_12_8 0xF172
+#define reg_mccid_fft1_maskmaxtoneindex_12_8_pos 0
+#define reg_mccid_fft1_maskmaxtoneindex_12_8_len 5
+#define reg_mccid_fft1_maskmaxtoneindex_12_8_lsb 8
+#define xd_p_reg_mccid_fft1_maskmintoneindex_7_0 (*(volatile byte xdata *) 0xF173)
+#define p_reg_mccid_fft1_maskmintoneindex_7_0 0xF173
+#define reg_mccid_fft1_maskmintoneindex_7_0_pos 0
+#define reg_mccid_fft1_maskmintoneindex_7_0_len 8
+#define reg_mccid_fft1_maskmintoneindex_7_0_lsb 0
+#define xd_p_reg_mccid_fft1_maskmintoneindex_12_8 (*(volatile byte xdata *) 0xF174)
+#define p_reg_mccid_fft1_maskmintoneindex_12_8 0xF174
+#define reg_mccid_fft1_maskmintoneindex_12_8_pos 0
+#define reg_mccid_fft1_maskmintoneindex_12_8_len 5
+#define reg_mccid_fft1_maskmintoneindex_12_8_lsb 8
+#define xd_p_reg_mccid_reset (*(volatile byte xdata *) 0xF175)
+#define p_reg_mccid_reset 0xF175
+#define reg_mccid_reset_pos 0
+#define reg_mccid_reset_len 1
+#define reg_mccid_reset_lsb 0
+#define xd_p_reg_mccid_gaincmpreset (*(volatile byte xdata *) 0xF176)
+#define p_reg_mccid_gaincmpreset 0xF176
+#define reg_mccid_gaincmpreset_pos 0
+#define reg_mccid_gaincmpreset_len 1
+#define reg_mccid_gaincmpreset_lsb 0
+#define xd_p_reg_mccid_acwgreset (*(volatile byte xdata *) 0xF177)
+#define p_reg_mccid_acwgreset 0xF177
+#define reg_mccid_acwgreset_pos 0
+#define reg_mccid_acwgreset_len 1
+#define reg_mccid_acwgreset_lsb 0
+#define xd_p_reg_mccid_ccif0_ofsmstateenable (*(volatile byte xdata *) 0xF178)
+#define p_reg_mccid_ccif0_ofsmstateenable 0xF178
+#define reg_mccid_ccif0_ofsmstateenable_pos 0
+#define reg_mccid_ccif0_ofsmstateenable_len 1
+#define reg_mccid_ccif0_ofsmstateenable_lsb 0
+#define xd_p_reg_mccid_ccif1_ofsmstateenable (*(volatile byte xdata *) 0xF179)
+#define p_reg_mccid_ccif1_ofsmstateenable 0xF179
+#define reg_mccid_ccif1_ofsmstateenable_pos 0
+#define reg_mccid_ccif1_ofsmstateenable_len 1
+#define reg_mccid_ccif1_ofsmstateenable_lsb 0
+#define xd_p_reg_mccid_fft0_ofsmstateenable (*(volatile byte xdata *) 0xF17A)
+#define p_reg_mccid_fft0_ofsmstateenable 0xF17A
+#define reg_mccid_fft0_ofsmstateenable_pos 0
+#define reg_mccid_fft0_ofsmstateenable_len 1
+#define reg_mccid_fft0_ofsmstateenable_lsb 0
+#define xd_p_reg_mccid_fft1_ofsmstateenable (*(volatile byte xdata *) 0xF17B)
+#define p_reg_mccid_fft1_ofsmstateenable 0xF17B
+#define reg_mccid_fft1_ofsmstateenable_pos 0
+#define reg_mccid_fft1_ofsmstateenable_len 1
+#define reg_mccid_fft1_ofsmstateenable_lsb 0
+#define xd_p_reg_mccid_fftfiltermaskchange (*(volatile byte xdata *) 0xF17C)
+#define p_reg_mccid_fftfiltermaskchange 0xF17C
+#define reg_mccid_fftfiltermaskchange_pos 0
+#define reg_mccid_fftfiltermaskchange_len 1
+#define reg_mccid_fftfiltermaskchange_lsb 0
+#define xd_r_reg_mccid_maxacipowertone_7_0 (*(volatile byte xdata *) 0xF17D)
+#define r_reg_mccid_maxacipowertone_7_0 0xF17D
+#define reg_mccid_maxacipowertone_7_0_pos 0
+#define reg_mccid_maxacipowertone_7_0_len 8
+#define reg_mccid_maxacipowertone_7_0_lsb 0
+#define xd_r_reg_mccid_maxacipowertone_12_8 (*(volatile byte xdata *) 0xF17E)
+#define r_reg_mccid_maxacipowertone_12_8 0xF17E
+#define reg_mccid_maxacipowertone_12_8_pos 0
+#define reg_mccid_maxacipowertone_12_8_len 5
+#define reg_mccid_maxacipowertone_12_8_lsb 8
+#define xd_r_reg_mccid_ccidisappear (*(volatile byte xdata *) 0xF17F)
+#define r_reg_mccid_ccidisappear 0xF17F
+#define reg_mccid_ccidisappear_pos 0
+#define reg_mccid_ccidisappear_len 1
+#define reg_mccid_ccidisappear_lsb 0
+#define xd_r_reg_mccid_ccilocatordone (*(volatile byte xdata *) 0xF182)
+#define r_reg_mccid_ccilocatordone 0xF182
+#define reg_mccid_ccilocatordone_pos 0
+#define reg_mccid_ccilocatordone_len 1
+#define reg_mccid_ccilocatordone_lsb 0
+#define xd_p_reg_mccid_enablecciftrigger (*(volatile byte xdata *) 0xF183)
+#define p_reg_mccid_enablecciftrigger 0xF183
+#define reg_mccid_enablecciftrigger_pos 0
+#define reg_mccid_enablecciftrigger_len 1
+#define reg_mccid_enablecciftrigger_lsb 0
+#define xd_p_reg_mccid_disableacwglaunchevaluationbandwidthtrigger (*(volatile byte xdata *) 0xF184)
+#define p_reg_mccid_disableacwglaunchevaluationbandwidthtrigger 0xF184
+#define reg_mccid_disableacwglaunchevaluationbandwidthtrigger_pos 0
+#define reg_mccid_disableacwglaunchevaluationbandwidthtrigger_len 1
+#define reg_mccid_disableacwglaunchevaluationbandwidthtrigger_lsb 0
+#define xd_p_reg_mccid_control_by_ofsm (*(volatile byte xdata *) 0xF185)
+#define p_reg_mccid_control_by_ofsm 0xF185
+#define reg_mccid_control_by_ofsm_pos 0
+#define reg_mccid_control_by_ofsm_len 1
+#define reg_mccid_control_by_ofsm_lsb 0
+#define xd_p_reg_mccid_ofsmcontrolccilocator (*(volatile byte xdata *) 0xF186)
+#define p_reg_mccid_ofsmcontrolccilocator 0xF186
+#define reg_mccid_ofsmcontrolccilocator_pos 0
+#define reg_mccid_ofsmcontrolccilocator_len 1
+#define reg_mccid_ofsmcontrolccilocator_lsb 0
+#define xd_p_reg_mccid_disablepotentialccitriggerccilocator (*(volatile byte xdata *) 0xF187)
+#define p_reg_mccid_disablepotentialccitriggerccilocator 0xF187
+#define reg_mccid_disablepotentialccitriggerccilocator_pos 0
+#define reg_mccid_disablepotentialccitriggerccilocator_len 1
+#define reg_mccid_disablepotentialccitriggerccilocator_lsb 0
+#define xd_p_reg_mccid_ofsmcontrolccitesting (*(volatile byte xdata *) 0xF188)
+#define p_reg_mccid_ofsmcontrolccitesting 0xF188
+#define reg_mccid_ofsmcontrolccitesting_pos 0
+#define reg_mccid_ofsmcontrolccitesting_len 1
+#define reg_mccid_ofsmcontrolccitesting_lsb 0
+#define xd_p_reg_mccid_disableccitestingtriggercheckcci (*(volatile byte xdata *) 0xF189)
+#define p_reg_mccid_disableccitestingtriggercheckcci 0xF189
+#define reg_mccid_disableccitestingtriggercheckcci_pos 0
+#define reg_mccid_disableccitestingtriggercheckcci_len 1
+#define reg_mccid_disableccitestingtriggercheckcci_lsb 0
+#define xd_p_reg_mccid_ofsmcontrolacwgsetccifscstrobe (*(volatile byte xdata *) 0xF18A)
+#define p_reg_mccid_ofsmcontrolacwgsetccifscstrobe 0xF18A
+#define reg_mccid_ofsmcontrolacwgsetccifscstrobe_pos 0
+#define reg_mccid_ofsmcontrolacwgsetccifscstrobe_len 1
+#define reg_mccid_ofsmcontrolacwgsetccifscstrobe_lsb 0
+#define xd_p_reg_mccid_disableacwgevaluatingbandwidthtrigger (*(volatile byte xdata *) 0xF18B)
+#define p_reg_mccid_disableacwgevaluatingbandwidthtrigger 0xF18B
+#define reg_mccid_disableacwgevaluatingbandwidthtrigger_pos 0
+#define reg_mccid_disableacwgevaluatingbandwidthtrigger_len 1
+#define reg_mccid_disableacwgevaluatingbandwidthtrigger_lsb 0
+#define xd_p_reg_mccid_ofsmcontrolevaluatingbandwidth (*(volatile byte xdata *) 0xF18C)
+#define p_reg_mccid_ofsmcontrolevaluatingbandwidth 0xF18C
+#define reg_mccid_ofsmcontrolevaluatingbandwidth_pos 0
+#define reg_mccid_ofsmcontrolevaluatingbandwidth_len 1
+#define reg_mccid_ofsmcontrolevaluatingbandwidth_lsb 0
+#define xd_p_reg_mccid_ofsmcontrolscanningaci (*(volatile byte xdata *) 0xF18D)
+#define p_reg_mccid_ofsmcontrolscanningaci 0xF18D
+#define reg_mccid_ofsmcontrolscanningaci_pos 0
+#define reg_mccid_ofsmcontrolscanningaci_len 1
+#define reg_mccid_ofsmcontrolscanningaci_lsb 0
+#define xd_p_reg_mccid_disablescanningaci (*(volatile byte xdata *) 0xF18E)
+#define p_reg_mccid_disablescanningaci 0xF18E
+#define reg_mccid_disablescanningaci_pos 0
+#define reg_mccid_disablescanningaci_len 1
+#define reg_mccid_disablescanningaci_lsb 0
+#define xd_p_reg_mccid_disableacwgccidetecting (*(volatile byte xdata *) 0xF18F)
+#define p_reg_mccid_disableacwgccidetecting 0xF18F
+#define reg_mccid_disableacwgccidetecting_pos 0
+#define reg_mccid_disableacwgccidetecting_len 1
+#define reg_mccid_disableacwgccidetecting_lsb 0
+#define xd_p_reg_mccid_ofsmcontrolccitimertrigger (*(volatile byte xdata *) 0xF190)
+#define p_reg_mccid_ofsmcontrolccitimertrigger 0xF190
+#define reg_mccid_ofsmcontrolccitimertrigger_pos 0
+#define reg_mccid_ofsmcontrolccitimertrigger_len 1
+#define reg_mccid_ofsmcontrolccitimertrigger_lsb 0
+#define xd_p_reg_mccid_disableccitimertrigger (*(volatile byte xdata *) 0xF191)
+#define p_reg_mccid_disableccitimertrigger 0xF191
+#define reg_mccid_disableccitimertrigger_pos 0
+#define reg_mccid_disableccitimertrigger_len 1
+#define reg_mccid_disableccitimertrigger_lsb 0
+#define xd_p_reg_mccid_ofsmdisableccitriggercounting (*(volatile byte xdata *) 0xF192)
+#define p_reg_mccid_ofsmdisableccitriggercounting 0xF192
+#define reg_mccid_ofsmdisableccitriggercounting_pos 0
+#define reg_mccid_ofsmdisableccitriggercounting_len 1
+#define reg_mccid_ofsmdisableccitriggercounting_lsb 0
+#define xd_p_reg_mccid_enableccifilteraci (*(volatile byte xdata *) 0xF193)
+#define p_reg_mccid_enableccifilteraci 0xF193
+#define reg_mccid_enableccifilteraci_pos 0
+#define reg_mccid_enableccifilteraci_len 1
+#define reg_mccid_enableccifilteraci_lsb 0
+#define xd_p_reg_mccid_scannedfcwbfs_7_0 (*(volatile byte xdata *) 0xF194)
+#define p_reg_mccid_scannedfcwbfs_7_0 0xF194
+#define reg_mccid_scannedfcwbfs_7_0_pos 0
+#define reg_mccid_scannedfcwbfs_7_0_len 8
+#define reg_mccid_scannedfcwbfs_7_0_lsb 0
+#define xd_p_reg_mccid_scannedfcwbfs_13_8 (*(volatile byte xdata *) 0xF195)
+#define p_reg_mccid_scannedfcwbfs_13_8 0xF195
+#define reg_mccid_scannedfcwbfs_13_8_pos 0
+#define reg_mccid_scannedfcwbfs_13_8_len 6
+#define reg_mccid_scannedfcwbfs_13_8_lsb 8
+#define xd_p_reg_mccid_acwgevaluatingbandwidth (*(volatile byte xdata *) 0xF196)
+#define p_reg_mccid_acwgevaluatingbandwidth 0xF196
+#define reg_mccid_acwgevaluatingbandwidth_pos 0
+#define reg_mccid_acwgevaluatingbandwidth_len 1
+#define reg_mccid_acwgevaluatingbandwidth_lsb 0
+#define xd_p_reg_mccid_acwglaunchevaluationbandwidth (*(volatile byte xdata *) 0xF197)
+#define p_reg_mccid_acwglaunchevaluationbandwidth 0xF197
+#define reg_mccid_acwglaunchevaluationbandwidth_pos 0
+#define reg_mccid_acwglaunchevaluationbandwidth_len 1
+#define reg_mccid_acwglaunchevaluationbandwidth_lsb 0
+#define xd_p_reg_mccid_scannedcandidate (*(volatile byte xdata *) 0xF198)
+#define p_reg_mccid_scannedcandidate 0xF198
+#define reg_mccid_scannedcandidate_pos 0
+#define reg_mccid_scannedcandidate_len 3
+#define reg_mccid_scannedcandidate_lsb 0
+#define xd_p_reg_mccid_scstrobesearchingcandidate (*(volatile byte xdata *) 0xF199)
+#define p_reg_mccid_scstrobesearchingcandidate 0xF199
+#define reg_mccid_scstrobesearchingcandidate_pos 0
+#define reg_mccid_scstrobesearchingcandidate_len 2
+#define reg_mccid_scstrobesearchingcandidate_lsb 0
+#define xd_p_reg_mccid_potentialcci (*(volatile byte xdata *) 0xF19A)
+#define p_reg_mccid_potentialcci 0xF19A
+#define reg_mccid_potentialcci_pos 0
+#define reg_mccid_potentialcci_len 1
+#define reg_mccid_potentialcci_lsb 0
+#define xd_p_reg_mccid_cciftimertrigger (*(volatile byte xdata *) 0xF19B)
+#define p_reg_mccid_cciftimertrigger 0xF19B
+#define reg_mccid_cciftimertrigger_pos 0
+#define reg_mccid_cciftimertrigger_len 1
+#define reg_mccid_cciftimertrigger_lsb 0
+#define xd_p_reg_mccid_ccitesting (*(volatile byte xdata *) 0xF19C)
+#define p_reg_mccid_ccitesting 0xF19C
+#define reg_mccid_ccitesting_pos 0
+#define reg_mccid_ccitesting_len 1
+#define reg_mccid_ccitesting_lsb 0
+#define xd_p_reg_mccid_defaultccilocatormissno (*(volatile byte xdata *) 0xF19D)
+#define p_reg_mccid_defaultccilocatormissno 0xF19D
+#define reg_mccid_defaultccilocatormissno_pos 0
+#define reg_mccid_defaultccilocatormissno_len 8
+#define reg_mccid_defaultccilocatormissno_lsb 0
+#define xd_p_reg_mccid_dagc1_use_despow (*(volatile byte xdata *) 0xF19E)
+#define p_reg_mccid_dagc1_use_despow 0xF19E
+#define reg_mccid_dagc1_use_despow_pos 0
+#define reg_mccid_dagc1_use_despow_len 1
+#define reg_mccid_dagc1_use_despow_lsb 0
+#define xd_p_reg_mccid_scannedacifrequencybegin_7_0 (*(volatile byte xdata *) 0xF19F)
+#define p_reg_mccid_scannedacifrequencybegin_7_0 0xF19F
+#define reg_mccid_scannedacifrequencybegin_7_0_pos 0
+#define reg_mccid_scannedacifrequencybegin_7_0_len 8
+#define reg_mccid_scannedacifrequencybegin_7_0_lsb 0
+#define xd_p_reg_mccid_scannedacifrequencybegin_13_8 (*(volatile byte xdata *) 0xF1A0)
+#define p_reg_mccid_scannedacifrequencybegin_13_8 0xF1A0
+#define reg_mccid_scannedacifrequencybegin_13_8_pos 0
+#define reg_mccid_scannedacifrequencybegin_13_8_len 6
+#define reg_mccid_scannedacifrequencybegin_13_8_lsb 8
+#define xd_p_reg_mccid_scannedacifrequencyend_7_0 (*(volatile byte xdata *) 0xF1A1)
+#define p_reg_mccid_scannedacifrequencyend_7_0 0xF1A1
+#define reg_mccid_scannedacifrequencyend_7_0_pos 0
+#define reg_mccid_scannedacifrequencyend_7_0_len 8
+#define reg_mccid_scannedacifrequencyend_7_0_lsb 0
+#define xd_p_reg_mccid_scannedacifrequencyend_13_8 (*(volatile byte xdata *) 0xF1A2)
+#define p_reg_mccid_scannedacifrequencyend_13_8 0xF1A2
+#define reg_mccid_scannedacifrequencyend_13_8_pos 0
+#define reg_mccid_scannedacifrequencyend_13_8_len 6
+#define reg_mccid_scannedacifrequencyend_13_8_lsb 8
+#define xd_p_reg_bfs_fcw_7_0 (*(volatile byte xdata *) 0xF1A3)
+#define p_reg_bfs_fcw_7_0 0xF1A3
+#define reg_bfs_fcw_7_0_pos 0
+#define reg_bfs_fcw_7_0_len 8
+#define reg_bfs_fcw_7_0_lsb 0
+#define xd_p_reg_bfs_fcw_15_8 (*(volatile byte xdata *) 0xF1A4)
+#define p_reg_bfs_fcw_15_8 0xF1A4
+#define reg_bfs_fcw_15_8_pos 0
+#define reg_bfs_fcw_15_8_len 8
+#define reg_bfs_fcw_15_8_lsb 8
+#define xd_p_reg_bfs_fcw_22_16 (*(volatile byte xdata *) 0xF1A5)
+#define p_reg_bfs_fcw_22_16 0xF1A5
+#define reg_bfs_fcw_22_16_pos 0
+#define reg_bfs_fcw_22_16_len 7
+#define reg_bfs_fcw_22_16_lsb 16
+#define xd_p_reg_cfoe_fcw_inv (*(volatile byte xdata *) 0xF1A6)
+#define p_reg_cfoe_fcw_inv 0xF1A6
+#define reg_cfoe_fcw_inv_pos 0
+#define reg_cfoe_fcw_inv_len 1
+#define reg_cfoe_fcw_inv_lsb 0
+#define xd_p_reg_bfs_0if (*(volatile byte xdata *) 0xF1A7)
+#define p_reg_bfs_0if 0xF1A7
+#define reg_bfs_0if_pos 0
+#define reg_bfs_0if_len 1
+#define reg_bfs_0if_lsb 0
+#define xd_p_reg_sadc_clk (*(volatile byte xdata *) 0xF1A9)
+#define p_reg_sadc_clk 0xF1A9
+#define reg_sadc_clk_pos 0
+#define reg_sadc_clk_len 1
+#define reg_sadc_clk_lsb 0
+#define xd_p_reg_sadc_tx (*(volatile byte xdata *) 0xF1AA)
+#define p_reg_sadc_tx 0xF1AA
+#define reg_sadc_tx_pos 0
+#define reg_sadc_tx_len 1
+#define reg_sadc_tx_lsb 0
+#define xd_p_reg_sadc_rx (*(volatile byte xdata *) 0xF1AB)
+#define p_reg_sadc_rx 0xF1AB
+#define reg_sadc_rx_pos 0
+#define reg_sadc_rx_len 1
+#define reg_sadc_rx_lsb 0
+#define xd_p_reg_sadc_cs (*(volatile byte xdata *) 0xF1AC)
+#define p_reg_sadc_cs 0xF1AC
+#define reg_sadc_cs_pos 0
+#define reg_sadc_cs_len 1
+#define reg_sadc_cs_lsb 0
+#define xd_p_reg_fix_fcw_7_0 (*(volatile byte xdata *) 0xF1AD)
+#define p_reg_fix_fcw_7_0 0xF1AD
+#define reg_fix_fcw_7_0_pos 0
+#define reg_fix_fcw_7_0_len 8
+#define reg_fix_fcw_7_0_lsb 0
+#define xd_p_reg_fix_fcw_15_8 (*(volatile byte xdata *) 0xF1AE)
+#define p_reg_fix_fcw_15_8 0xF1AE
+#define reg_fix_fcw_15_8_pos 0
+#define reg_fix_fcw_15_8_len 8
+#define reg_fix_fcw_15_8_lsb 8
+#define xd_p_reg_fix_fcw_22_16 (*(volatile byte xdata *) 0xF1AF)
+#define p_reg_fix_fcw_22_16 0xF1AF
+#define reg_fix_fcw_22_16_pos 0
+#define reg_fix_fcw_22_16_len 7
+#define reg_fix_fcw_22_16_lsb 16
+#define xd_r_reg_bfs_fcw_offset_7_0 (*(volatile byte xdata *) 0xF1B0)
+#define r_reg_bfs_fcw_offset_7_0 0xF1B0
+#define reg_bfs_fcw_offset_7_0_pos 0
+#define reg_bfs_fcw_offset_7_0_len 8
+#define reg_bfs_fcw_offset_7_0_lsb 0
+#define xd_r_reg_bfs_fcw_offset_15_8 (*(volatile byte xdata *) 0xF1B1)
+#define r_reg_bfs_fcw_offset_15_8 0xF1B1
+#define reg_bfs_fcw_offset_15_8_pos 0
+#define reg_bfs_fcw_offset_15_8_len 8
+#define reg_bfs_fcw_offset_15_8_lsb 8
+#define xd_r_reg_bfs_fcw_offset_22_16 (*(volatile byte xdata *) 0xF1B2)
+#define r_reg_bfs_fcw_offset_22_16 0xF1B2
+#define reg_bfs_fcw_offset_22_16_pos 0
+#define reg_bfs_fcw_offset_22_16_len 7
+#define reg_bfs_fcw_offset_22_16_lsb 16
+#define xd_r_bfs_fcw_q_7_0 (*(volatile byte xdata *) 0xF1B3)
+#define r_bfs_fcw_q_7_0 0xF1B3
+#define bfs_fcw_q_7_0_pos 0
+#define bfs_fcw_q_7_0_len 8
+#define bfs_fcw_q_7_0_lsb 0
+#define xd_r_bfs_fcw_q_15_8 (*(volatile byte xdata *) 0xF1B4)
+#define r_bfs_fcw_q_15_8 0xF1B4
+#define bfs_fcw_q_15_8_pos 0
+#define bfs_fcw_q_15_8_len 8
+#define bfs_fcw_q_15_8_lsb 8
+#define xd_r_bfs_fcw_q_22_16 (*(volatile byte xdata *) 0xF1B5)
+#define r_bfs_fcw_q_22_16 0xF1B5
+#define bfs_fcw_q_22_16_pos 0
+#define bfs_fcw_q_22_16_len 7
+#define bfs_fcw_q_22_16_lsb 16
+#define xd_p_reg_dagc3_use_despow (*(volatile byte xdata *) 0xF1B6)
+#define p_reg_dagc3_use_despow 0xF1B6
+#define reg_dagc3_use_despow_pos 0
+#define reg_dagc3_use_despow_len 1
+#define reg_dagc3_use_despow_lsb 0
+#define xd_p_reg_dagc3_log_2_accumulate (*(volatile byte xdata *) 0xF1B7)
+#define p_reg_dagc3_log_2_accumulate 0xF1B7
+#define reg_dagc3_log_2_accumulate_pos 0
+#define reg_dagc3_log_2_accumulate_len 5
+#define reg_dagc3_log_2_accumulate_lsb 0
+#define xd_p_reg_dagc3_desired_level_7_0 (*(volatile byte xdata *) 0xF1BC)
+#define p_reg_dagc3_desired_level_7_0 0xF1BC
+#define reg_dagc3_desired_level_7_0_pos 0
+#define reg_dagc3_desired_level_7_0_len 8
+#define reg_dagc3_desired_level_7_0_lsb 0
+#define xd_p_reg_dagc3_desired_level_8 (*(volatile byte xdata *) 0xF1BD)
+#define p_reg_dagc3_desired_level_8 0xF1BD
+#define reg_dagc3_desired_level_8_pos 0
+#define reg_dagc3_desired_level_8_len 1
+#define reg_dagc3_desired_level_8_lsb 8
+#define xd_p_reg_dagc3_apply_delay (*(volatile byte xdata *) 0xF1BE)
+#define p_reg_dagc3_apply_delay 0xF1BE
+#define reg_dagc3_apply_delay_pos 0
+#define reg_dagc3_apply_delay_len 7
+#define reg_dagc3_apply_delay_lsb 0
+#define xd_p_reg_dagc3_bp_scale (*(volatile byte xdata *) 0xF1BF)
+#define p_reg_dagc3_bp_scale 0xF1BF
+#define reg_dagc3_bp_scale_pos 0
+#define reg_dagc3_bp_scale_len 3
+#define reg_dagc3_bp_scale_lsb 0
+#define xd_p_reg_dagc3_in_sat_cnt_7_0 (*(volatile byte xdata *) 0xF1C0)
+#define p_reg_dagc3_in_sat_cnt_7_0 0xF1C0
+#define reg_dagc3_in_sat_cnt_7_0_pos 0
+#define reg_dagc3_in_sat_cnt_7_0_len 8
+#define reg_dagc3_in_sat_cnt_7_0_lsb 0
+#define xd_p_reg_dagc3_in_sat_cnt_15_8 (*(volatile byte xdata *) 0xF1C1)
+#define p_reg_dagc3_in_sat_cnt_15_8 0xF1C1
+#define reg_dagc3_in_sat_cnt_15_8_pos 0
+#define reg_dagc3_in_sat_cnt_15_8_len 8
+#define reg_dagc3_in_sat_cnt_15_8_lsb 8
+#define xd_p_reg_dagc3_in_sat_cnt_23_16 (*(volatile byte xdata *) 0xF1C2)
+#define p_reg_dagc3_in_sat_cnt_23_16 0xF1C2
+#define reg_dagc3_in_sat_cnt_23_16_pos 0
+#define reg_dagc3_in_sat_cnt_23_16_len 8
+#define reg_dagc3_in_sat_cnt_23_16_lsb 16
+#define xd_p_reg_dagc3_in_sat_cnt_31_24 (*(volatile byte xdata *) 0xF1C3)
+#define p_reg_dagc3_in_sat_cnt_31_24 0xF1C3
+#define reg_dagc3_in_sat_cnt_31_24_pos 0
+#define reg_dagc3_in_sat_cnt_31_24_len 8
+#define reg_dagc3_in_sat_cnt_31_24_lsb 24
+#define xd_p_reg_dagc3_out_sat_cnt_7_0 (*(volatile byte xdata *) 0xF1C4)
+#define p_reg_dagc3_out_sat_cnt_7_0 0xF1C4
+#define reg_dagc3_out_sat_cnt_7_0_pos 0
+#define reg_dagc3_out_sat_cnt_7_0_len 8
+#define reg_dagc3_out_sat_cnt_7_0_lsb 0
+#define xd_p_reg_dagc3_out_sat_cnt_15_8 (*(volatile byte xdata *) 0xF1C5)
+#define p_reg_dagc3_out_sat_cnt_15_8 0xF1C5
+#define reg_dagc3_out_sat_cnt_15_8_pos 0
+#define reg_dagc3_out_sat_cnt_15_8_len 8
+#define reg_dagc3_out_sat_cnt_15_8_lsb 8
+#define xd_p_reg_dagc3_out_sat_cnt_23_16 (*(volatile byte xdata *) 0xF1C6)
+#define p_reg_dagc3_out_sat_cnt_23_16 0xF1C6
+#define reg_dagc3_out_sat_cnt_23_16_pos 0
+#define reg_dagc3_out_sat_cnt_23_16_len 8
+#define reg_dagc3_out_sat_cnt_23_16_lsb 16
+#define xd_p_reg_dagc3_out_sat_cnt_31_24 (*(volatile byte xdata *) 0xF1C7)
+#define p_reg_dagc3_out_sat_cnt_31_24 0xF1C7
+#define reg_dagc3_out_sat_cnt_31_24_pos 0
+#define reg_dagc3_out_sat_cnt_31_24_len 8
+#define reg_dagc3_out_sat_cnt_31_24_lsb 24
+#define xd_r_bfs_dagc3_multiplier_7_0 (*(volatile byte xdata *) 0xF1C8)
+#define r_bfs_dagc3_multiplier_7_0 0xF1C8
+#define bfs_dagc3_multiplier_7_0_pos 0
+#define bfs_dagc3_multiplier_7_0_len 8
+#define bfs_dagc3_multiplier_7_0_lsb 0
+#define xd_r_bfs_dagc3_multiplier_15_8 (*(volatile byte xdata *) 0xF1C9)
+#define r_bfs_dagc3_multiplier_15_8 0xF1C9
+#define bfs_dagc3_multiplier_15_8_pos 0
+#define bfs_dagc3_multiplier_15_8_len 8
+#define bfs_dagc3_multiplier_15_8_lsb 8
+#define xd_r_bfs_dagc3_right_shift_bits (*(volatile byte xdata *) 0xF1CA)
+#define r_bfs_dagc3_right_shift_bits 0xF1CA
+#define bfs_dagc3_right_shift_bits_pos 0
+#define bfs_dagc3_right_shift_bits_len 4
+#define bfs_dagc3_right_shift_bits_lsb 0
+#define xd_p_reg_dagc3_fixed_gain_7_0 (*(volatile byte xdata *) 0xF1CB)
+#define p_reg_dagc3_fixed_gain_7_0 0xF1CB
+#define reg_dagc3_fixed_gain_7_0_pos 0
+#define reg_dagc3_fixed_gain_7_0_len 8
+#define reg_dagc3_fixed_gain_7_0_lsb 0
+#define xd_p_reg_dagc3_fixed_gain_11_8 (*(volatile byte xdata *) 0xF1CC)
+#define p_reg_dagc3_fixed_gain_11_8 0xF1CC
+#define reg_dagc3_fixed_gain_11_8_pos 0
+#define reg_dagc3_fixed_gain_11_8_len 4
+#define reg_dagc3_fixed_gain_11_8_lsb 8
+#define xd_p_reg_f_adc_7_0 (*(volatile byte xdata *) 0xF1CD)
+#define p_reg_f_adc_7_0 0xF1CD
+#define reg_f_adc_7_0_pos 0
+#define reg_f_adc_7_0_len 8
+#define reg_f_adc_7_0_lsb 0
+#define xd_p_reg_f_adc_15_8 (*(volatile byte xdata *) 0xF1CE)
+#define p_reg_f_adc_15_8 0xF1CE
+#define reg_f_adc_15_8_pos 0
+#define reg_f_adc_15_8_len 8
+#define reg_f_adc_15_8_lsb 8
+#define xd_p_reg_f_adc_23_16 (*(volatile byte xdata *) 0xF1CF)
+#define p_reg_f_adc_23_16 0xF1CF
+#define reg_f_adc_23_16_pos 0
+#define reg_f_adc_23_16_len 8
+#define reg_f_adc_23_16_lsb 16
+#define xd_p_reg_fste_frac_step_size_7_0 (*(volatile byte xdata *) 0xF1D0)
+#define p_reg_fste_frac_step_size_7_0 0xF1D0
+#define reg_fste_frac_step_size_7_0_pos 0
+#define reg_fste_frac_step_size_7_0_len 8
+#define reg_fste_frac_step_size_7_0_lsb 0
+#define xd_p_reg_fste_frac_step_size_15_8 (*(volatile byte xdata *) 0xF1D1)
+#define p_reg_fste_frac_step_size_15_8 0xF1D1
+#define reg_fste_frac_step_size_15_8_pos 0
+#define reg_fste_frac_step_size_15_8_len 8
+#define reg_fste_frac_step_size_15_8_lsb 8
+#define xd_p_reg_fste_frac_step_size_19_16 (*(volatile byte xdata *) 0xF1D2)
+#define p_reg_fste_frac_step_size_19_16 0xF1D2
+#define reg_fste_frac_step_size_19_16_pos 0
+#define reg_fste_frac_step_size_19_16_len 4
+#define reg_fste_frac_step_size_19_16_lsb 16
+#define xd_r_intp_mu_7_0 (*(volatile byte xdata *) 0xF1D3)
+#define r_intp_mu_7_0 0xF1D3
+#define intp_mu_7_0_pos 0
+#define intp_mu_7_0_len 8
+#define intp_mu_7_0_lsb 0
+#define xd_r_intp_mu_15_8 (*(volatile byte xdata *) 0xF1D4)
+#define r_intp_mu_15_8 0xF1D4
+#define intp_mu_15_8_pos 0
+#define intp_mu_15_8_len 8
+#define intp_mu_15_8_lsb 8
+#define xd_r_intp_mu_23_16 (*(volatile byte xdata *) 0xF1D5)
+#define r_intp_mu_23_16 0xF1D5
+#define intp_mu_23_16_pos 0
+#define intp_mu_23_16_len 8
+#define intp_mu_23_16_lsb 16
+#define xd_r_intp_mu_25_24 (*(volatile byte xdata *) 0xF1D6)
+#define r_intp_mu_25_24 0xF1D6
+#define intp_mu_25_24_pos 0
+#define intp_mu_25_24_len 2
+#define intp_mu_25_24_lsb 24
+#define xd_p_intp_muq_7_0 (*(volatile byte xdata *) 0xF1D7)
+#define p_intp_muq_7_0 0xF1D7
+#define intp_muq_7_0_pos 0
+#define intp_muq_7_0_len 8
+#define intp_muq_7_0_lsb 0
+#define xd_p_intp_muq_15_8 (*(volatile byte xdata *) 0xF1D8)
+#define p_intp_muq_15_8 0xF1D8
+#define intp_muq_15_8_pos 0
+#define intp_muq_15_8_len 8
+#define intp_muq_15_8_lsb 8
+#define xd_p_intp_muq_23_16 (*(volatile byte xdata *) 0xF1D9)
+#define p_intp_muq_23_16 0xF1D9
+#define intp_muq_23_16_pos 0
+#define intp_muq_23_16_len 8
+#define intp_muq_23_16_lsb 16
+#define xd_p_reg_sfoe_inv (*(volatile byte xdata *) 0xF1DA)
+#define p_reg_sfoe_inv 0xF1DA
+#define reg_sfoe_inv_pos 0
+#define reg_sfoe_inv_len 1
+#define reg_sfoe_inv_lsb 0
+#define xd_p_intp_ext_en (*(volatile byte xdata *) 0xF1DB)
+#define p_intp_ext_en 0xF1DB
+#define intp_ext_en_pos 0
+#define intp_ext_en_len 1
+#define intp_ext_en_lsb 0
+#define xd_r_intp_ext_done (*(volatile byte xdata *) 0xF1DC)
+#define r_intp_ext_done 0xF1DC
+#define intp_ext_done_pos 0
+#define intp_ext_done_len 1
+#define intp_ext_done_lsb 0
+#define xd_p_intp_ext_in_7_0 (*(volatile byte xdata *) 0xF1DD)
+#define p_intp_ext_in_7_0 0xF1DD
+#define intp_ext_in_7_0_pos 0
+#define intp_ext_in_7_0_len 8
+#define intp_ext_in_7_0_lsb 0
+#define xd_p_intp_ext_in_15_8 (*(volatile byte xdata *) 0xF1DE)
+#define p_intp_ext_in_15_8 0xF1DE
+#define intp_ext_in_15_8_pos 0
+#define intp_ext_in_15_8_len 8
+#define intp_ext_in_15_8_lsb 8
+#define xd_p_intp_ext_in_23_16 (*(volatile byte xdata *) 0xF1DF)
+#define p_intp_ext_in_23_16 0xF1DF
+#define intp_ext_in_23_16_pos 0
+#define intp_ext_in_23_16_len 8
+#define intp_ext_in_23_16_lsb 16
+#define xd_p_intp_ext_in_25_24 (*(volatile byte xdata *) 0xF1E0)
+#define p_intp_ext_in_25_24 0xF1E0
+#define intp_ext_in_25_24_pos 0
+#define intp_ext_in_25_24_len 2
+#define intp_ext_in_25_24_lsb 24
+#define xd_r_intp_ext_out_7_0 (*(volatile byte xdata *) 0xF1E1)
+#define r_intp_ext_out_7_0 0xF1E1
+#define intp_ext_out_7_0_pos 0
+#define intp_ext_out_7_0_len 8
+#define intp_ext_out_7_0_lsb 0
+#define xd_r_intp_ext_out_15_8 (*(volatile byte xdata *) 0xF1E2)
+#define r_intp_ext_out_15_8 0xF1E2
+#define intp_ext_out_15_8_pos 0
+#define intp_ext_out_15_8_len 8
+#define intp_ext_out_15_8_lsb 8
+#define xd_r_intp_ext_out_23_16 (*(volatile byte xdata *) 0xF1E3)
+#define r_intp_ext_out_23_16 0xF1E3
+#define intp_ext_out_23_16_pos 0
+#define intp_ext_out_23_16_len 8
+#define intp_ext_out_23_16_lsb 16
+#define xd_r_intp_ext_out_28_24 (*(volatile byte xdata *) 0xF1E4)
+#define r_intp_ext_out_28_24 0xF1E4
+#define intp_ext_out_28_24_pos 0
+#define intp_ext_out_28_24_len 5
+#define intp_ext_out_28_24_lsb 24
+#define xd_p_reg_agc_rst (*(volatile byte xdata *) 0xF1E5)
+#define p_reg_agc_rst 0xF1E5
+#define reg_agc_rst_pos 0
+#define reg_agc_rst_len 1
+#define reg_agc_rst_lsb 0
+#define xd_p_rf_agc_en (*(volatile byte xdata *) 0xF1E6)
+#define p_rf_agc_en 0xF1E6
+#define rf_agc_en_pos 0
+#define rf_agc_en_len 1
+#define rf_agc_en_lsb 0
+#define xd_p_agc_lock (*(volatile byte xdata *) 0xF1E7)
+#define p_agc_lock 0xF1E7
+#define agc_lock_pos 0
+#define agc_lock_len 1
+#define agc_lock_lsb 0
+#define xd_p_reg_tinr_rst (*(volatile byte xdata *) 0xF1E8)
+#define p_reg_tinr_rst 0xF1E8
+#define reg_tinr_rst_pos 0
+#define reg_tinr_rst_len 1
+#define reg_tinr_rst_lsb 0
+#define xd_p_reg_tinr_en (*(volatile byte xdata *) 0xF1E9)
+#define p_reg_tinr_en 0xF1E9
+#define reg_tinr_en_pos 0
+#define reg_tinr_en_len 1
+#define reg_tinr_en_lsb 0
+#define xd_p_reg_bfs_en (*(volatile byte xdata *) 0xF1EA)
+#define p_reg_bfs_en 0xF1EA
+#define reg_bfs_en_pos 0
+#define reg_bfs_en_len 1
+#define reg_bfs_en_lsb 0
+#define xd_p_reg_bfs_rst (*(volatile byte xdata *) 0xF1EB)
+#define p_reg_bfs_rst 0xF1EB
+#define reg_bfs_rst_pos 0
+#define reg_bfs_rst_len 1
+#define reg_bfs_rst_lsb 0
+#define xd_p_reg_bfs_byp (*(volatile byte xdata *) 0xF1EC)
+#define p_reg_bfs_byp 0xF1EC
+#define reg_bfs_byp_pos 0
+#define reg_bfs_byp_len 1
+#define reg_bfs_byp_lsb 0
+#define xd_p_intp_en (*(volatile byte xdata *) 0xF1EF)
+#define p_intp_en 0xF1EF
+#define intp_en_pos 0
+#define intp_en_len 1
+#define intp_en_lsb 0
+#define xd_p_intp_rst (*(volatile byte xdata *) 0xF1F0)
+#define p_intp_rst 0xF1F0
+#define intp_rst_pos 0
+#define intp_rst_len 1
+#define intp_rst_lsb 0
+#define xd_p_reg_p_acif_en (*(volatile byte xdata *) 0xF1F2)
+#define p_reg_p_acif_en 0xF1F2
+#define reg_p_acif_en_pos 0
+#define reg_p_acif_en_len 1
+#define reg_p_acif_en_lsb 0
+#define xd_p_reg_p_acif_rst (*(volatile byte xdata *) 0xF1F3)
+#define p_reg_p_acif_rst 0xF1F3
+#define reg_p_acif_rst_pos 0
+#define reg_p_acif_rst_len 1
+#define reg_p_acif_rst_lsb 0
+#define xd_p_reg_p_acif_byp (*(volatile byte xdata *) 0xF1F4)
+#define p_reg_p_acif_byp 0xF1F4
+#define reg_p_acif_byp_pos 0
+#define reg_p_acif_byp_len 1
+#define reg_p_acif_byp_lsb 0
+#define xd_p_dagc2_rst (*(volatile byte xdata *) 0xF1F6)
+#define p_dagc2_rst 0xF1F6
+#define dagc2_rst_pos 0
+#define dagc2_rst_len 1
+#define dagc2_rst_lsb 0
+#define xd_p_dagc2_en (*(volatile byte xdata *) 0xF1F7)
+#define p_dagc2_en 0xF1F7
+#define dagc2_en_pos 0
+#define dagc2_en_len 1
+#define dagc2_en_lsb 0
+#define xd_p_dagc2_mode (*(volatile byte xdata *) 0xF1F8)
+#define p_dagc2_mode 0xF1F8
+#define dagc2_mode_pos 0
+#define dagc2_mode_len 2
+#define dagc2_mode_lsb 0
+#define xd_p_dagc2_done (*(volatile byte xdata *) 0xF1F9)
+#define p_dagc2_done 0xF1F9
+#define dagc2_done_pos 0
+#define dagc2_done_len 1
+#define dagc2_done_lsb 0
+#define xd_p_dagc3_rst (*(volatile byte xdata *) 0xF1FA)
+#define p_dagc3_rst 0xF1FA
+#define dagc3_rst_pos 0
+#define dagc3_rst_len 1
+#define dagc3_rst_lsb 0
+#define xd_p_dagc3_en (*(volatile byte xdata *) 0xF1FB)
+#define p_dagc3_en 0xF1FB
+#define dagc3_en_pos 0
+#define dagc3_en_len 1
+#define dagc3_en_lsb 0
+#define xd_p_dagc3_mode (*(volatile byte xdata *) 0xF1FC)
+#define p_dagc3_mode 0xF1FC
+#define dagc3_mode_pos 0
+#define dagc3_mode_len 2
+#define dagc3_mode_lsb 0
+#define xd_p_dagc3_done (*(volatile byte xdata *) 0xF1FD)
+#define p_dagc3_done 0xF1FD
+#define dagc3_done_pos 0
+#define dagc3_done_len 1
+#define dagc3_done_lsb 0
+#define xd_p_reg_dagc2_desired_level_7_0 (*(volatile byte xdata *) 0xF202)
+#define p_reg_dagc2_desired_level_7_0 0xF202
+#define reg_dagc2_desired_level_7_0_pos 0
+#define reg_dagc2_desired_level_7_0_len 8
+#define reg_dagc2_desired_level_7_0_lsb 0
+#define xd_p_reg_dagc2_desired_level_8 (*(volatile byte xdata *) 0xF203)
+#define p_reg_dagc2_desired_level_8 0xF203
+#define reg_dagc2_desired_level_8_pos 0
+#define reg_dagc2_desired_level_8_len 1
+#define reg_dagc2_desired_level_8_lsb 8
+#define xd_p_reg_dagc2_apply_delay (*(volatile byte xdata *) 0xF204)
+#define p_reg_dagc2_apply_delay 0xF204
+#define reg_dagc2_apply_delay_pos 0
+#define reg_dagc2_apply_delay_len 7
+#define reg_dagc2_apply_delay_lsb 0
+#define xd_p_reg_dagc2_bypass_scale_ctl (*(volatile byte xdata *) 0xF205)
+#define p_reg_dagc2_bypass_scale_ctl 0xF205
+#define reg_dagc2_bypass_scale_ctl_pos 0
+#define reg_dagc2_bypass_scale_ctl_len 3
+#define reg_dagc2_bypass_scale_ctl_lsb 0
+#define xd_p_reg_dagc2_programmable_shift2 (*(volatile byte xdata *) 0xF206)
+#define p_reg_dagc2_programmable_shift2 0xF206
+#define reg_dagc2_programmable_shift2_pos 0
+#define reg_dagc2_programmable_shift2_len 8
+#define reg_dagc2_programmable_shift2_lsb 0
+#define xd_p_reg_dagc2_in_sat_cnt_7_0 (*(volatile byte xdata *) 0xF207)
+#define p_reg_dagc2_in_sat_cnt_7_0 0xF207
+#define reg_dagc2_in_sat_cnt_7_0_pos 0
+#define reg_dagc2_in_sat_cnt_7_0_len 8
+#define reg_dagc2_in_sat_cnt_7_0_lsb 0
+#define xd_p_reg_dagc2_in_sat_cnt_15_8 (*(volatile byte xdata *) 0xF208)
+#define p_reg_dagc2_in_sat_cnt_15_8 0xF208
+#define reg_dagc2_in_sat_cnt_15_8_pos 0
+#define reg_dagc2_in_sat_cnt_15_8_len 8
+#define reg_dagc2_in_sat_cnt_15_8_lsb 8
+#define xd_p_reg_dagc2_in_sat_cnt_23_16 (*(volatile byte xdata *) 0xF209)
+#define p_reg_dagc2_in_sat_cnt_23_16 0xF209
+#define reg_dagc2_in_sat_cnt_23_16_pos 0
+#define reg_dagc2_in_sat_cnt_23_16_len 8
+#define reg_dagc2_in_sat_cnt_23_16_lsb 16
+#define xd_p_reg_dagc2_in_sat_cnt_31_24 (*(volatile byte xdata *) 0xF20A)
+#define p_reg_dagc2_in_sat_cnt_31_24 0xF20A
+#define reg_dagc2_in_sat_cnt_31_24_pos 0
+#define reg_dagc2_in_sat_cnt_31_24_len 8
+#define reg_dagc2_in_sat_cnt_31_24_lsb 24
+#define xd_p_reg_dagc2_out_sat_cnt_7_0 (*(volatile byte xdata *) 0xF20B)
+#define p_reg_dagc2_out_sat_cnt_7_0 0xF20B
+#define reg_dagc2_out_sat_cnt_7_0_pos 0
+#define reg_dagc2_out_sat_cnt_7_0_len 8
+#define reg_dagc2_out_sat_cnt_7_0_lsb 0
+#define xd_p_reg_dagc2_out_sat_cnt_15_8 (*(volatile byte xdata *) 0xF20C)
+#define p_reg_dagc2_out_sat_cnt_15_8 0xF20C
+#define reg_dagc2_out_sat_cnt_15_8_pos 0
+#define reg_dagc2_out_sat_cnt_15_8_len 8
+#define reg_dagc2_out_sat_cnt_15_8_lsb 8
+#define xd_p_reg_dagc2_out_sat_cnt_23_16 (*(volatile byte xdata *) 0xF20D)
+#define p_reg_dagc2_out_sat_cnt_23_16 0xF20D
+#define reg_dagc2_out_sat_cnt_23_16_pos 0
+#define reg_dagc2_out_sat_cnt_23_16_len 8
+#define reg_dagc2_out_sat_cnt_23_16_lsb 16
+#define xd_p_reg_dagc2_out_sat_cnt_31_24 (*(volatile byte xdata *) 0xF20E)
+#define p_reg_dagc2_out_sat_cnt_31_24 0xF20E
+#define reg_dagc2_out_sat_cnt_31_24_pos 0
+#define reg_dagc2_out_sat_cnt_31_24_len 8
+#define reg_dagc2_out_sat_cnt_31_24_lsb 24
+#define xd_r_reg_dagc2_multiplier_7_0 (*(volatile byte xdata *) 0xF20F)
+#define r_reg_dagc2_multiplier_7_0 0xF20F
+#define reg_dagc2_multiplier_7_0_pos 0
+#define reg_dagc2_multiplier_7_0_len 8
+#define reg_dagc2_multiplier_7_0_lsb 0
+#define xd_r_reg_dagc2_multiplier_15_8 (*(volatile byte xdata *) 0xF210)
+#define r_reg_dagc2_multiplier_15_8 0xF210
+#define reg_dagc2_multiplier_15_8_pos 0
+#define reg_dagc2_multiplier_15_8_len 8
+#define reg_dagc2_multiplier_15_8_lsb 8
+#define xd_r_reg_dagc2_right_shift_bits (*(volatile byte xdata *) 0xF211)
+#define r_reg_dagc2_right_shift_bits 0xF211
+#define reg_dagc2_right_shift_bits_pos 0
+#define reg_dagc2_right_shift_bits_len 4
+#define reg_dagc2_right_shift_bits_lsb 0
+#define xd_p_reg_dagc2_smbuf_err (*(volatile byte xdata *) 0xF212)
+#define p_reg_dagc2_smbuf_err 0xF212
+#define reg_dagc2_smbuf_err_pos 0
+#define reg_dagc2_smbuf_err_len 1
+#define reg_dagc2_smbuf_err_lsb 0
+#define xd_p_reg_dagc2_cplxconj (*(volatile byte xdata *) 0xF213)
+#define p_reg_dagc2_cplxconj 0xF213
+#define reg_dagc2_cplxconj_pos 0
+#define reg_dagc2_cplxconj_len 1
+#define reg_dagc2_cplxconj_lsb 0
+#define xd_p_reg_dagc2_use_despow (*(volatile byte xdata *) 0xF214)
+#define p_reg_dagc2_use_despow 0xF214
+#define reg_dagc2_use_despow_pos 0
+#define reg_dagc2_use_despow_len 1
+#define reg_dagc2_use_despow_lsb 0
+#define xd_p_reg_dagc2_log_2_accumulate (*(volatile byte xdata *) 0xF215)
+#define p_reg_dagc2_log_2_accumulate 0xF215
+#define reg_dagc2_log_2_accumulate_pos 0
+#define reg_dagc2_log_2_accumulate_len 5
+#define reg_dagc2_log_2_accumulate_lsb 0
+#define xd_r_dagc2_dca_gain (*(volatile byte xdata *) 0xF216)
+#define r_dagc2_dca_gain 0xF216
+#define dagc2_dca_gain_pos 0
+#define dagc2_dca_gain_len 8
+#define dagc2_dca_gain_lsb 0
+#define xd_p_reg_dca_gain_offset (*(volatile byte xdata *) 0xF217)
+#define p_reg_dca_gain_offset 0xF217
+#define reg_dca_gain_offset_pos 0
+#define reg_dca_gain_offset_len 8
+#define reg_dca_gain_offset_lsb 0
+#define xd_p_reg_dagc2_FG_mode (*(volatile byte xdata *) 0xF218)
+#define p_reg_dagc2_FG_mode 0xF218
+#define reg_dagc2_FG_mode_pos 0
+#define reg_dagc2_FG_mode_len 1
+#define reg_dagc2_FG_mode_lsb 0
+#define xd_p_reg_dagc2_fixed_gain_7_0 (*(volatile byte xdata *) 0xF219)
+#define p_reg_dagc2_fixed_gain_7_0 0xF219
+#define reg_dagc2_fixed_gain_7_0_pos 0
+#define reg_dagc2_fixed_gain_7_0_len 8
+#define reg_dagc2_fixed_gain_7_0_lsb 0
+#define xd_p_reg_dagc2_fixed_gain_11_8 (*(volatile byte xdata *) 0xF21A)
+#define p_reg_dagc2_fixed_gain_11_8 0xF21A
+#define reg_dagc2_fixed_gain_11_8_pos 0
+#define reg_dagc2_fixed_gain_11_8_len 4
+#define reg_dagc2_fixed_gain_11_8_lsb 8
+#define xd_p_reg_td_debug_7_0 (*(volatile byte xdata *) 0xF21B)
+#define p_reg_td_debug_7_0 0xF21B
+#define reg_td_debug_7_0_pos 0
+#define reg_td_debug_7_0_len 8
+#define reg_td_debug_7_0_lsb 0
+#define xd_p_reg_td_debug_15_8 (*(volatile byte xdata *) 0xF21C)
+#define p_reg_td_debug_15_8 0xF21C
+#define reg_td_debug_15_8_pos 0
+#define reg_td_debug_15_8_len 8
+#define reg_td_debug_15_8_lsb 8
+#define xd_p_reg_td_debug_23_16 (*(volatile byte xdata *) 0xF21D)
+#define p_reg_td_debug_23_16 0xF21D
+#define reg_td_debug_23_16_pos 0
+#define reg_td_debug_23_16_len 8
+#define reg_td_debug_23_16_lsb 16
+#define xd_p_reg_td_debug_30_24 (*(volatile byte xdata *) 0xF21E)
+#define p_reg_td_debug_30_24 0xF21E
+#define reg_td_debug_30_24_pos 0
+#define reg_td_debug_30_24_len 7
+#define reg_td_debug_30_24_lsb 24
+#define xd_g_reg_tpsd_txmod (*(volatile byte xdata *) 0xF900)
+#define g_reg_tpsd_txmod 0xF900
+#define reg_tpsd_txmod_pos 0
+#define reg_tpsd_txmod_len 2
+#define reg_tpsd_txmod_lsb 0
+#define xd_g_reg_tpsd_gi (*(volatile byte xdata *) 0xF901)
+#define g_reg_tpsd_gi 0xF901
+#define reg_tpsd_gi_pos 0
+#define reg_tpsd_gi_len 2
+#define reg_tpsd_gi_lsb 0
+#define xd_g_reg_tpsd_hier (*(volatile byte xdata *) 0xF902)
+#define g_reg_tpsd_hier 0xF902
+#define reg_tpsd_hier_pos 0
+#define reg_tpsd_hier_len 3
+#define reg_tpsd_hier_lsb 0
+#define xd_g_reg_tpsd_const (*(volatile byte xdata *) 0xF903)
+#define g_reg_tpsd_const 0xF903
+#define reg_tpsd_const_pos 0
+#define reg_tpsd_const_len 2
+#define reg_tpsd_const_lsb 0
+#define xd_g_reg_bw (*(volatile byte xdata *) 0xF904)
+#define g_reg_bw 0xF904
+#define reg_bw_pos 0
+#define reg_bw_len 2
+#define reg_bw_lsb 0
+#define xd_g_reg_dec_pri (*(volatile byte xdata *) 0xF905)
+#define g_reg_dec_pri 0xF905
+#define reg_dec_pri_pos 0
+#define reg_dec_pri_len 1
+#define reg_dec_pri_lsb 0
+#define xd_g_reg_tpsd_hpcr (*(volatile byte xdata *) 0xF906)
+#define g_reg_tpsd_hpcr 0xF906
+#define reg_tpsd_hpcr_pos 0
+#define reg_tpsd_hpcr_len 3
+#define reg_tpsd_hpcr_lsb 0
+#define xd_g_reg_tpsd_lpcr (*(volatile byte xdata *) 0xF907)
+#define g_reg_tpsd_lpcr 0xF907
+#define reg_tpsd_lpcr_pos 0
+#define reg_tpsd_lpcr_len 3
+#define reg_tpsd_lpcr_lsb 0
+#define xd_g_reg_tpsd_indep (*(volatile byte xdata *) 0xF908)
+#define g_reg_tpsd_indep 0xF908
+#define reg_tpsd_indep_pos 0
+#define reg_tpsd_indep_len 1
+#define reg_tpsd_indep_lsb 0
+#define xd_g_reg_tpsd_tslice (*(volatile byte xdata *) 0xF909)
+#define g_reg_tpsd_tslice 0xF909
+#define reg_tpsd_tslice_pos 0
+#define reg_tpsd_tslice_len 1
+#define reg_tpsd_tslice_lsb 0
+#define xd_g_reg_tpsd_mpefec (*(volatile byte xdata *) 0xF90A)
+#define g_reg_tpsd_mpefec 0xF90A
+#define reg_tpsd_mpefec_pos 0
+#define reg_tpsd_mpefec_len 1
+#define reg_tpsd_mpefec_lsb 0
+#define xd_g_reg_sntc_en (*(volatile byte xdata *) 0xF90B)
+#define g_reg_sntc_en 0xF90B
+#define reg_sntc_en_pos 0
+#define reg_sntc_en_len 1
+#define reg_sntc_en_lsb 0
+#define xd_g_reg_intp_sys_div (*(volatile byte xdata *) 0xF90C)
+#define g_reg_intp_sys_div 0xF90C
+#define reg_intp_sys_div_pos 0
+#define reg_intp_sys_div_len 1
+#define reg_intp_sys_div_lsb 0
+#define xd_g_reg_clk_sntc_sel (*(volatile byte xdata *) 0xF90D)
+#define g_reg_clk_sntc_sel 0xF90D
+#define reg_clk_sntc_sel_pos 0
+#define reg_clk_sntc_sel_len 3
+#define reg_clk_sntc_sel_lsb 0
+#define xd_g_reg_clk_sys40 (*(volatile byte xdata *) 0xF90E)
+#define g_reg_clk_sys40 0xF90E
+#define reg_clk_sys40_pos 0
+#define reg_clk_sys40_len 1
+#define reg_clk_sys40_lsb 0
+#define xd_g_reg_intp_sys_polarity (*(volatile byte xdata *) 0xF90F)
+#define g_reg_intp_sys_polarity 0xF90F
+#define reg_intp_sys_polarity_pos 0
+#define reg_intp_sys_polarity_len 1
+#define reg_intp_sys_polarity_lsb 0
+#define xd_g_reg_intp_sys_sc_7_0 (*(volatile byte xdata *) 0xF910)
+#define g_reg_intp_sys_sc_7_0 0xF910
+#define reg_intp_sys_sc_7_0_pos 0
+#define reg_intp_sys_sc_7_0_len 8
+#define reg_intp_sys_sc_7_0_lsb 0
+#define xd_g_reg_intp_sys_sc_15_8 (*(volatile byte xdata *) 0xF911)
+#define g_reg_intp_sys_sc_15_8 0xF911
+#define reg_intp_sys_sc_15_8_pos 0
+#define reg_intp_sys_sc_15_8_len 8
+#define reg_intp_sys_sc_15_8_lsb 8
+#define xd_g_reg_intp_sys_sc_23_16 (*(volatile byte xdata *) 0xF912)
+#define g_reg_intp_sys_sc_23_16 0xF912
+#define reg_intp_sys_sc_23_16_pos 0
+#define reg_intp_sys_sc_23_16_len 8
+#define reg_intp_sys_sc_23_16_lsb 16
+#define xd_g_reg_intp_sys_sc_26_24 (*(volatile byte xdata *) 0xF913)
+#define g_reg_intp_sys_sc_26_24 0xF913
+#define reg_intp_sys_sc_26_24_pos 0
+#define reg_intp_sys_sc_26_24_len 3
+#define reg_intp_sys_sc_26_24_lsb 24
+#define xd_g_reg_ofsm_clk (*(volatile byte xdata *) 0xF914)
+#define g_reg_ofsm_clk 0xF914
+#define reg_ofsm_clk_pos 0
+#define reg_ofsm_clk_len 3
+#define reg_ofsm_clk_lsb 0
+#define xd_g_reg_fclk_cfg (*(volatile byte xdata *) 0xF915)
+#define g_reg_fclk_cfg 0xF915
+#define reg_fclk_cfg_pos 0
+#define reg_fclk_cfg_len 1
+#define reg_fclk_cfg_lsb 0
+#define xd_g_reg_fclk_idi (*(volatile byte xdata *) 0xF916)
+#define g_reg_fclk_idi 0xF916
+#define reg_fclk_idi_pos 0
+#define reg_fclk_idi_len 1
+#define reg_fclk_idi_lsb 0
+#define xd_g_reg_fclk_odi (*(volatile byte xdata *) 0xF917)
+#define g_reg_fclk_odi 0xF917
+#define reg_fclk_odi_pos 0
+#define reg_fclk_odi_len 1
+#define reg_fclk_odi_lsb 0
+#define xd_g_reg_fclk_rsd (*(volatile byte xdata *) 0xF918)
+#define g_reg_fclk_rsd 0xF918
+#define reg_fclk_rsd_pos 0
+#define reg_fclk_rsd_len 1
+#define reg_fclk_rsd_lsb 0
+#define xd_g_reg_fclk_vtb (*(volatile byte xdata *) 0xF919)
+#define g_reg_fclk_vtb 0xF919
+#define reg_fclk_vtb_pos 0
+#define reg_fclk_vtb_len 1
+#define reg_fclk_vtb_lsb 0
+#define xd_g_reg_fclk_cste (*(volatile byte xdata *) 0xF91A)
+#define g_reg_fclk_cste 0xF91A
+#define reg_fclk_cste_pos 0
+#define reg_fclk_cste_len 1
+#define reg_fclk_cste_lsb 0
+#define xd_g_reg_fclk_mp2if (*(volatile byte xdata *) 0xF91B)
+#define g_reg_fclk_mp2if 0xF91B
+#define reg_fclk_mp2if_pos 0
+#define reg_fclk_mp2if_len 1
+#define reg_fclk_mp2if_lsb 0
+#define xd_p_reg_adcout_sync (*(volatile byte xdata *) 0xFA00)
+#define p_reg_adcout_sync 0xFA00
+#define reg_adcout_sync_pos 0
+#define reg_adcout_sync_len 1
+#define reg_adcout_sync_lsb 0
+#define xd_p_reg_dagc2o_edge1 (*(volatile byte xdata *) 0xFA01)
+#define p_reg_dagc2o_edge1 0xFA01
+#define reg_dagc2o_edge1_pos 0
+#define reg_dagc2o_edge1_len 1
+#define reg_dagc2o_edge1_lsb 0
+#define xd_p_reg_dagc2o_edge0 (*(volatile byte xdata *) 0xFA02)
+#define p_reg_dagc2o_edge0 0xFA02
+#define reg_dagc2o_edge0_pos 0
+#define reg_dagc2o_edge0_len 1
+#define reg_dagc2o_edge0_lsb 0
+#define xd_p_reg_second_rom_on (*(volatile byte xdata *) 0xFA03)
+#define p_reg_second_rom_on 0xFA03
+#define reg_second_rom_on_pos 0
+#define reg_second_rom_on_len 1
+#define reg_second_rom_on_lsb 0
+#define xd_p_reg_bypass_host2tuner (*(volatile byte xdata *) 0xFA04)
+#define p_reg_bypass_host2tuner 0xFA04
+#define reg_bypass_host2tuner_pos 0
+#define reg_bypass_host2tuner_len 1
+#define reg_bypass_host2tuner_lsb 0
+#endif
+// biu_reg.h 6-27-2007
+// gen_biu Ver 1.0 generated by tienchi
+#define xd_p_cfoe_NS_coeff1_7_0 (*(volatile byte xdata *) 0xF400)
+#define p_cfoe_NS_coeff1_7_0 0xF400
+#define cfoe_NS_coeff1_7_0_pos 0
+#define cfoe_NS_coeff1_7_0_len 8
+#define cfoe_NS_coeff1_7_0_lsb 0
+#define xd_p_cfoe_NS_coeff1_15_8 (*(volatile byte xdata *) 0xF401)
+#define p_cfoe_NS_coeff1_15_8 0xF401
+#define cfoe_NS_coeff1_15_8_pos 0
+#define cfoe_NS_coeff1_15_8_len 8
+#define cfoe_NS_coeff1_15_8_lsb 8
+#define xd_p_cfoe_NS_coeff1_23_16 (*(volatile byte xdata *) 0xF402)
+#define p_cfoe_NS_coeff1_23_16 0xF402
+#define cfoe_NS_coeff1_23_16_pos 0
+#define cfoe_NS_coeff1_23_16_len 8
+#define cfoe_NS_coeff1_23_16_lsb 16
+#define xd_p_cfoe_NS_coeff1_25_24 (*(volatile byte xdata *) 0xF403)
+#define p_cfoe_NS_coeff1_25_24 0xF403
+#define cfoe_NS_coeff1_25_24_pos 0
+#define cfoe_NS_coeff1_25_24_len 2
+#define cfoe_NS_coeff1_25_24_lsb 24
+#define xd_p_cfoe_NS_coeff2_7_0 (*(volatile byte xdata *) 0xF404)
+#define p_cfoe_NS_coeff2_7_0 0xF404
+#define cfoe_NS_coeff2_7_0_pos 0
+#define cfoe_NS_coeff2_7_0_len 8
+#define cfoe_NS_coeff2_7_0_lsb 0
+#define xd_p_cfoe_NS_coeff2_15_8 (*(volatile byte xdata *) 0xF405)
+#define p_cfoe_NS_coeff2_15_8 0xF405
+#define cfoe_NS_coeff2_15_8_pos 0
+#define cfoe_NS_coeff2_15_8_len 8
+#define cfoe_NS_coeff2_15_8_lsb 8
+#define xd_p_cfoe_NS_coeff2_23_16 (*(volatile byte xdata *) 0xF406)
+#define p_cfoe_NS_coeff2_23_16 0xF406
+#define cfoe_NS_coeff2_23_16_pos 0
+#define cfoe_NS_coeff2_23_16_len 8
+#define cfoe_NS_coeff2_23_16_lsb 16
+#define xd_p_cfoe_NS_coeff2_24 (*(volatile byte xdata *) 0xF407)
+#define p_cfoe_NS_coeff2_24 0xF407
+#define cfoe_NS_coeff2_24_pos 0
+#define cfoe_NS_coeff2_24_len 1
+#define cfoe_NS_coeff2_24_lsb 24
+#define xd_p_cfoe_lf_c1_7_0 (*(volatile byte xdata *) 0xF408)
+#define p_cfoe_lf_c1_7_0 0xF408
+#define cfoe_lf_c1_7_0_pos 0
+#define cfoe_lf_c1_7_0_len 8
+#define cfoe_lf_c1_7_0_lsb 0
+#define xd_p_cfoe_lf_c1_9_8 (*(volatile byte xdata *) 0xF409)
+#define p_cfoe_lf_c1_9_8 0xF409
+#define cfoe_lf_c1_9_8_pos 0
+#define cfoe_lf_c1_9_8_len 2
+#define cfoe_lf_c1_9_8_lsb 8
+#define xd_p_cfoe_lf_c2_7_0 (*(volatile byte xdata *) 0xF40A)
+#define p_cfoe_lf_c2_7_0 0xF40A
+#define cfoe_lf_c2_7_0_pos 0
+#define cfoe_lf_c2_7_0_len 8
+#define cfoe_lf_c2_7_0_lsb 0
+#define xd_p_cfoe_lf_c2_9_8 (*(volatile byte xdata *) 0xF40B)
+#define p_cfoe_lf_c2_9_8 0xF40B
+#define cfoe_lf_c2_9_8_pos 0
+#define cfoe_lf_c2_9_8_len 2
+#define cfoe_lf_c2_9_8_lsb 8
+#define xd_p_cfoe_ifod_7_0 (*(volatile byte xdata *) 0xF40C)
+#define p_cfoe_ifod_7_0 0xF40C
+#define cfoe_ifod_7_0_pos 0
+#define cfoe_ifod_7_0_len 8
+#define cfoe_ifod_7_0_lsb 0
+#define xd_p_cfoe_ifod_10_8 (*(volatile byte xdata *) 0xF40D)
+#define p_cfoe_ifod_10_8 0xF40D
+#define cfoe_ifod_10_8_pos 0
+#define cfoe_ifod_10_8_len 3
+#define cfoe_ifod_10_8_lsb 8
+#define xd_p_cfoe_Divg_ctr_th (*(volatile byte xdata *) 0xF40E)
+#define p_cfoe_Divg_ctr_th 0xF40E
+#define cfoe_Divg_ctr_th_pos 0
+#define cfoe_Divg_ctr_th_len 4
+#define cfoe_Divg_ctr_th_lsb 0
+#define xd_p_cfoe_FOT_divg_th (*(volatile byte xdata *) 0xF40F)
+#define p_cfoe_FOT_divg_th 0xF40F
+#define cfoe_FOT_divg_th_pos 0
+#define cfoe_FOT_divg_th_len 8
+#define cfoe_FOT_divg_th_lsb 0
+#define xd_p_cfoe_FOT_cnvg_th (*(volatile byte xdata *) 0xF410)
+#define p_cfoe_FOT_cnvg_th 0xF410
+#define cfoe_FOT_cnvg_th_pos 0
+#define cfoe_FOT_cnvg_th_len 8
+#define cfoe_FOT_cnvg_th_lsb 0
+#define xd_p_reg_cfoe_offset_7_0 (*(volatile byte xdata *) 0xF411)
+#define p_reg_cfoe_offset_7_0 0xF411
+#define reg_cfoe_offset_7_0_pos 0
+#define reg_cfoe_offset_7_0_len 8
+#define reg_cfoe_offset_7_0_lsb 0
+#define xd_p_reg_cfoe_offset_10_8 (*(volatile byte xdata *) 0xF412)
+#define p_reg_cfoe_offset_10_8 0xF412
+#define reg_cfoe_offset_10_8_pos 0
+#define reg_cfoe_offset_10_8_len 3
+#define reg_cfoe_offset_10_8_lsb 8
+#define xd_p_reg_cfoe_ifoe_sign_corr (*(volatile byte xdata *) 0xF413)
+#define p_reg_cfoe_ifoe_sign_corr 0xF413
+#define reg_cfoe_ifoe_sign_corr_pos 0
+#define reg_cfoe_ifoe_sign_corr_len 1
+#define reg_cfoe_ifoe_sign_corr_lsb 0
+#define xd_p_cfoe_FOT_pullin_cnt_clr (*(volatile byte xdata *) 0xF414)
+#define p_cfoe_FOT_pullin_cnt_clr 0xF414
+#define cfoe_FOT_pullin_cnt_clr_pos 0
+#define cfoe_FOT_pullin_cnt_clr_len 1
+#define cfoe_FOT_pullin_cnt_clr_lsb 0
+#define xd_p_cfoe_FOT_spec_inv (*(volatile byte xdata *) 0xF415)
+#define p_cfoe_FOT_spec_inv 0xF415
+#define cfoe_FOT_spec_inv_pos 0
+#define cfoe_FOT_spec_inv_len 1
+#define cfoe_FOT_spec_inv_lsb 0
+#define xd_p_cfoe_FOT_pullin_ctr_th (*(volatile byte xdata *) 0xF416)
+#define p_cfoe_FOT_pullin_ctr_th 0xF416
+#define cfoe_FOT_pullin_ctr_th_pos 0
+#define cfoe_FOT_pullin_ctr_th_len 4
+#define cfoe_FOT_pullin_ctr_th_lsb 0
+#define xd_p_cfoe_FOT_sf_ctr_th (*(volatile byte xdata *) 0xF417)
+#define p_cfoe_FOT_sf_ctr_th 0xF417
+#define cfoe_FOT_sf_ctr_th_pos 0
+#define cfoe_FOT_sf_ctr_th_len 4
+#define cfoe_FOT_sf_ctr_th_lsb 0
+#define xd_p_cfoe_FOT_pullin_th (*(volatile byte xdata *) 0xF418)
+#define p_cfoe_FOT_pullin_th 0xF418
+#define cfoe_FOT_pullin_th_pos 0
+#define cfoe_FOT_pullin_th_len 8
+#define cfoe_FOT_pullin_th_lsb 0
+#define xd_p_cfoe_FOT_kalman_cnt (*(volatile byte xdata *) 0xF419)
+#define p_cfoe_FOT_kalman_cnt 0xF419
+#define cfoe_FOT_kalman_cnt_pos 0
+#define cfoe_FOT_kalman_cnt_len 4
+#define cfoe_FOT_kalman_cnt_lsb 0
+#define xd_p_cfoe_FOT_fsm_info (*(volatile byte xdata *) 0xF41A)
+#define p_cfoe_FOT_fsm_info 0xF41A
+#define cfoe_FOT_fsm_info_pos 0
+#define cfoe_FOT_fsm_info_len 4
+#define cfoe_FOT_fsm_info_lsb 0
+#define xd_r_cfoe_FOT_pullin_cnt (*(volatile byte xdata *) 0xF41B)
+#define r_cfoe_FOT_pullin_cnt 0xF41B
+#define cfoe_FOT_pullin_cnt_pos 0
+#define cfoe_FOT_pullin_cnt_len 4
+#define cfoe_FOT_pullin_cnt_lsb 0
+#define xd_r_cfoe_FOT_sf_cnt (*(volatile byte xdata *) 0xF41C)
+#define r_cfoe_FOT_sf_cnt 0xF41C
+#define cfoe_FOT_sf_cnt_pos 0
+#define cfoe_FOT_sf_cnt_len 4
+#define cfoe_FOT_sf_cnt_lsb 0
+#define xd_r_reg_r_cfoe_ifoe_ifo_metric (*(volatile byte xdata *) 0xF41D)
+#define r_reg_r_cfoe_ifoe_ifo_metric 0xF41D
+#define reg_r_cfoe_ifoe_ifo_metric_pos 0
+#define reg_r_cfoe_ifoe_ifo_metric_len 8
+#define reg_r_cfoe_ifoe_ifo_metric_lsb 0
+#define xd_r_reg_r_cfoe_ifoe_cos2num_7_0 (*(volatile byte xdata *) 0xF41E)
+#define r_reg_r_cfoe_ifoe_cos2num_7_0 0xF41E
+#define reg_r_cfoe_ifoe_cos2num_7_0_pos 0
+#define reg_r_cfoe_ifoe_cos2num_7_0_len 8
+#define reg_r_cfoe_ifoe_cos2num_7_0_lsb 0
+#define xd_r_reg_r_cfoe_ifoe_cos2num_15_8 (*(volatile byte xdata *) 0xF41F)
+#define r_reg_r_cfoe_ifoe_cos2num_15_8 0xF41F
+#define reg_r_cfoe_ifoe_cos2num_15_8_pos 0
+#define reg_r_cfoe_ifoe_cos2num_15_8_len 8
+#define reg_r_cfoe_ifoe_cos2num_15_8_lsb 8
+#define xd_r_reg_r_cfoe_ifoe_cos2num_19_16 (*(volatile byte xdata *) 0xF420)
+#define r_reg_r_cfoe_ifoe_cos2num_19_16 0xF420
+#define reg_r_cfoe_ifoe_cos2num_19_16_pos 0
+#define reg_r_cfoe_ifoe_cos2num_19_16_len 4
+#define reg_r_cfoe_ifoe_cos2num_19_16_lsb 16
+#define xd_p_ste_Nu (*(volatile byte xdata *) 0xF460)
+#define p_ste_Nu 0xF460
+#define ste_Nu_pos 0
+#define ste_Nu_len 3
+#define ste_Nu_lsb 0
+#define xd_p_ste_GI (*(volatile byte xdata *) 0xF461)
+#define p_ste_GI 0xF461
+#define ste_GI_pos 0
+#define ste_GI_len 3
+#define ste_GI_lsb 0
+#define xd_p_ste_symbol_num (*(volatile byte xdata *) 0xF463)
+#define p_ste_symbol_num 0xF463
+#define ste_symbol_num_pos 0
+#define ste_symbol_num_len 3
+#define ste_symbol_num_lsb 0
+#define xd_p_ste_sample_num (*(volatile byte xdata *) 0xF464)
+#define p_ste_sample_num 0xF464
+#define ste_sample_num_pos 0
+#define ste_sample_num_len 2
+#define ste_sample_num_lsb 0
+#define xd_p_ste_symbol_num_4K (*(volatile byte xdata *) 0xF465)
+#define p_ste_symbol_num_4K 0xF465
+#define ste_symbol_num_4K_pos 0
+#define ste_symbol_num_4K_len 3
+#define ste_symbol_num_4K_lsb 0
+#define xd_p_ste_FFT_offset_7_0 (*(volatile byte xdata *) 0xF466)
+#define p_ste_FFT_offset_7_0 0xF466
+#define ste_FFT_offset_7_0_pos 0
+#define ste_FFT_offset_7_0_len 8
+#define ste_FFT_offset_7_0_lsb 0
+#define xd_p_ste_FFT_offset_13_8 (*(volatile byte xdata *) 0xF467)
+#define p_ste_FFT_offset_13_8 0xF467
+#define ste_FFT_offset_13_8_pos 0
+#define ste_FFT_offset_13_8_len 6
+#define ste_FFT_offset_13_8_lsb 8
+#define xd_p_ste_sample_num_4K (*(volatile byte xdata *) 0xF468)
+#define p_ste_sample_num_4K 0xF468
+#define ste_sample_num_4K_pos 0
+#define ste_sample_num_4K_len 2
+#define ste_sample_num_4K_lsb 0
+#define xd_p_ste_adv_start_7_0 (*(volatile byte xdata *) 0xF469)
+#define p_ste_adv_start_7_0 0xF469
+#define ste_adv_start_7_0_pos 0
+#define ste_adv_start_7_0_len 8
+#define ste_adv_start_7_0_lsb 0
+#define xd_p_ste_adv_start_10_8 (*(volatile byte xdata *) 0xF46A)
+#define p_ste_adv_start_10_8 0xF46A
+#define ste_adv_start_10_8_pos 0
+#define ste_adv_start_10_8_len 3
+#define ste_adv_start_10_8_lsb 8
+#define xd_p_ste_symbol_num_8K (*(volatile byte xdata *) 0xF46B)
+#define p_ste_symbol_num_8K 0xF46B
+#define ste_symbol_num_8K_pos 0
+#define ste_symbol_num_8K_len 3
+#define ste_symbol_num_8K_lsb 0
+#define xd_p_ste_sample_num_8K (*(volatile byte xdata *) 0xF46C)
+#define p_ste_sample_num_8K 0xF46C
+#define ste_sample_num_8K_pos 0
+#define ste_sample_num_8K_len 2
+#define ste_sample_num_8K_lsb 0
+#define xd_p_ste_adv_stop (*(volatile byte xdata *) 0xF46D)
+#define p_ste_adv_stop 0xF46D
+#define ste_adv_stop_pos 0
+#define ste_adv_stop_len 8
+#define ste_adv_stop_lsb 0
+#define xd_r_ste_P_value_7_0 (*(volatile byte xdata *) 0xF46E)
+#define r_ste_P_value_7_0 0xF46E
+#define ste_P_value_7_0_pos 0
+#define ste_P_value_7_0_len 8
+#define ste_P_value_7_0_lsb 0
+#define xd_r_ste_P_value_10_8 (*(volatile byte xdata *) 0xF46F)
+#define r_ste_P_value_10_8 0xF46F
+#define ste_P_value_10_8_pos 0
+#define ste_P_value_10_8_len 3
+#define ste_P_value_10_8_lsb 8
+#define xd_p_reg_ste_tstmod (*(volatile byte xdata *) 0xF470)
+#define p_reg_ste_tstmod 0xF470
+#define reg_ste_tstmod_pos 0
+#define reg_ste_tstmod_len 1
+#define reg_ste_tstmod_lsb 0
+#define xd_p_reg_ste_buf_en (*(volatile byte xdata *) 0xF471)
+#define p_reg_ste_buf_en 0xF471
+#define reg_ste_buf_en_pos 0
+#define reg_ste_buf_en_len 1
+#define reg_ste_buf_en_lsb 0
+#define xd_r_ste_M_value_7_0 (*(volatile byte xdata *) 0xF472)
+#define r_ste_M_value_7_0 0xF472
+#define ste_M_value_7_0_pos 0
+#define ste_M_value_7_0_len 8
+#define ste_M_value_7_0_lsb 0
+#define xd_r_ste_M_value_10_8 (*(volatile byte xdata *) 0xF473)
+#define r_ste_M_value_10_8 0xF473
+#define ste_M_value_10_8_pos 0
+#define ste_M_value_10_8_len 3
+#define ste_M_value_10_8_lsb 8
+#define xd_r_ste_H1 (*(volatile byte xdata *) 0xF474)
+#define r_ste_H1 0xF474
+#define ste_H1_pos 0
+#define ste_H1_len 7
+#define ste_H1_lsb 0
+#define xd_r_ste_H2 (*(volatile byte xdata *) 0xF475)
+#define r_ste_H2 0xF475
+#define ste_H2_pos 0
+#define ste_H2_len 7
+#define ste_H2_lsb 0
+#define xd_r_ste_H3 (*(volatile byte xdata *) 0xF476)
+#define r_ste_H3 0xF476
+#define ste_H3_pos 0
+#define ste_H3_len 7
+#define ste_H3_lsb 0
+#define xd_r_ste_H4 (*(volatile byte xdata *) 0xF477)
+#define r_ste_H4 0xF477
+#define ste_H4_pos 0
+#define ste_H4_len 7
+#define ste_H4_lsb 0
+#define xd_r_ste_Corr_value_I_7_0 (*(volatile byte xdata *) 0xF478)
+#define r_ste_Corr_value_I_7_0 0xF478
+#define ste_Corr_value_I_7_0_pos 0
+#define ste_Corr_value_I_7_0_len 8
+#define ste_Corr_value_I_7_0_lsb 0
+#define xd_r_ste_Corr_value_I_15_8 (*(volatile byte xdata *) 0xF479)
+#define r_ste_Corr_value_I_15_8 0xF479
+#define ste_Corr_value_I_15_8_pos 0
+#define ste_Corr_value_I_15_8_len 8
+#define ste_Corr_value_I_15_8_lsb 8
+#define xd_r_ste_Corr_value_I_23_16 (*(volatile byte xdata *) 0xF47A)
+#define r_ste_Corr_value_I_23_16 0xF47A
+#define ste_Corr_value_I_23_16_pos 0
+#define ste_Corr_value_I_23_16_len 8
+#define ste_Corr_value_I_23_16_lsb 16
+#define xd_r_ste_Corr_value_I_27_24 (*(volatile byte xdata *) 0xF47B)
+#define r_ste_Corr_value_I_27_24 0xF47B
+#define ste_Corr_value_I_27_24_pos 0
+#define ste_Corr_value_I_27_24_len 4
+#define ste_Corr_value_I_27_24_lsb 24
+#define xd_r_ste_Corr_value_Q_7_0 (*(volatile byte xdata *) 0xF47C)
+#define r_ste_Corr_value_Q_7_0 0xF47C
+#define ste_Corr_value_Q_7_0_pos 0
+#define ste_Corr_value_Q_7_0_len 8
+#define ste_Corr_value_Q_7_0_lsb 0
+#define xd_r_ste_Corr_value_Q_15_8 (*(volatile byte xdata *) 0xF47D)
+#define r_ste_Corr_value_Q_15_8 0xF47D
+#define ste_Corr_value_Q_15_8_pos 0
+#define ste_Corr_value_Q_15_8_len 8
+#define ste_Corr_value_Q_15_8_lsb 8
+#define xd_r_ste_Corr_value_Q_23_16 (*(volatile byte xdata *) 0xF47E)
+#define r_ste_Corr_value_Q_23_16 0xF47E
+#define ste_Corr_value_Q_23_16_pos 0
+#define ste_Corr_value_Q_23_16_len 8
+#define ste_Corr_value_Q_23_16_lsb 16
+#define xd_r_ste_Corr_value_Q_27_24 (*(volatile byte xdata *) 0xF47F)
+#define r_ste_Corr_value_Q_27_24 0xF47F
+#define ste_Corr_value_Q_27_24_pos 0
+#define ste_Corr_value_Q_27_24_len 4
+#define ste_Corr_value_Q_27_24_lsb 24
+#define xd_r_ste_J_num_7_0 (*(volatile byte xdata *) 0xF480)
+#define r_ste_J_num_7_0 0xF480
+#define ste_J_num_7_0_pos 0
+#define ste_J_num_7_0_len 8
+#define ste_J_num_7_0_lsb 0
+#define xd_r_ste_J_num_15_8 (*(volatile byte xdata *) 0xF481)
+#define r_ste_J_num_15_8 0xF481
+#define ste_J_num_15_8_pos 0
+#define ste_J_num_15_8_len 8
+#define ste_J_num_15_8_lsb 8
+#define xd_r_ste_J_num_23_16 (*(volatile byte xdata *) 0xF482)
+#define r_ste_J_num_23_16 0xF482
+#define ste_J_num_23_16_pos 0
+#define ste_J_num_23_16_len 8
+#define ste_J_num_23_16_lsb 16
+#define xd_r_ste_J_num_31_24 (*(volatile byte xdata *) 0xF483)
+#define r_ste_J_num_31_24 0xF483
+#define ste_J_num_31_24_pos 0
+#define ste_J_num_31_24_len 8
+#define ste_J_num_31_24_lsb 24
+#define xd_r_ste_J_den_7_0 (*(volatile byte xdata *) 0xF484)
+#define r_ste_J_den_7_0 0xF484
+#define ste_J_den_7_0_pos 0
+#define ste_J_den_7_0_len 8
+#define ste_J_den_7_0_lsb 0
+#define xd_r_ste_J_den_15_8 (*(volatile byte xdata *) 0xF485)
+#define r_ste_J_den_15_8 0xF485
+#define ste_J_den_15_8_pos 0
+#define ste_J_den_15_8_len 8
+#define ste_J_den_15_8_lsb 8
+#define xd_r_ste_J_den_18_16 (*(volatile byte xdata *) 0xF486)
+#define r_ste_J_den_18_16 0xF486
+#define ste_J_den_18_16_pos 0
+#define ste_J_den_18_16_len 3
+#define ste_J_den_18_16_lsb 16
+#define xd_r_ste_Beacon_Indicator (*(volatile byte xdata *) 0xF488)
+#define r_ste_Beacon_Indicator 0xF488
+#define ste_Beacon_Indicator_pos 0
+#define ste_Beacon_Indicator_len 1
+#define ste_Beacon_Indicator_lsb 0
+#define xd_p_ste_got_sntc_bcn (*(volatile byte xdata *) 0xF48B)
+#define p_ste_got_sntc_bcn 0xF48B
+#define ste_got_sntc_bcn_pos 0
+#define ste_got_sntc_bcn_len 1
+#define ste_got_sntc_bcn_lsb 0
+#define xd_r_tpsd_Frame_Num (*(volatile byte xdata *) 0xF4C0)
+#define r_tpsd_Frame_Num 0xF4C0
+#define tpsd_Frame_Num_pos 0
+#define tpsd_Frame_Num_len 2
+#define tpsd_Frame_Num_lsb 0
+#define xd_r_tpsd_Constel (*(volatile byte xdata *) 0xF4C1)
+#define r_tpsd_Constel 0xF4C1
+#define tpsd_Constel_pos 0
+#define tpsd_Constel_len 2
+#define tpsd_Constel_lsb 0
+#define xd_r_tpsd_GI (*(volatile byte xdata *) 0xF4C2)
+#define r_tpsd_GI 0xF4C2
+#define tpsd_GI_pos 0
+#define tpsd_GI_len 2
+#define tpsd_GI_lsb 0
+#define xd_r_tpsd_Mode (*(volatile byte xdata *) 0xF4C3)
+#define r_tpsd_Mode 0xF4C3
+#define tpsd_Mode_pos 0
+#define tpsd_Mode_len 2
+#define tpsd_Mode_lsb 0
+#define xd_r_tpsd_CR_HP (*(volatile byte xdata *) 0xF4C4)
+#define r_tpsd_CR_HP 0xF4C4
+#define tpsd_CR_HP_pos 0
+#define tpsd_CR_HP_len 3
+#define tpsd_CR_HP_lsb 0
+#define xd_r_tpsd_CR_LP (*(volatile byte xdata *) 0xF4C5)
+#define r_tpsd_CR_LP 0xF4C5
+#define tpsd_CR_LP_pos 0
+#define tpsd_CR_LP_len 3
+#define tpsd_CR_LP_lsb 0
+#define xd_r_tpsd_Hie (*(volatile byte xdata *) 0xF4C6)
+#define r_tpsd_Hie 0xF4C6
+#define tpsd_Hie_pos 0
+#define tpsd_Hie_len 3
+#define tpsd_Hie_lsb 0
+#define xd_r_tpsd_Res_Bits (*(volatile byte xdata *) 0xF4C7)
+#define r_tpsd_Res_Bits 0xF4C7
+#define tpsd_Res_Bits_pos 0
+#define tpsd_Res_Bits_len 5
+#define tpsd_Res_Bits_lsb 0
+#define xd_r_tpsd_Res_Bits_0 (*(volatile byte xdata *) 0xF4C8)
+#define r_tpsd_Res_Bits_0 0xF4C8
+#define tpsd_Res_Bits_0_pos 0
+#define tpsd_Res_Bits_0_len 1
+#define tpsd_Res_Bits_0_lsb 0
+#define xd_r_tpsd_LengthInd (*(volatile byte xdata *) 0xF4C9)
+#define r_tpsd_LengthInd 0xF4C9
+#define tpsd_LengthInd_pos 0
+#define tpsd_LengthInd_len 6
+#define tpsd_LengthInd_lsb 0
+#define xd_r_tpsd_Cell_Id_7_0 (*(volatile byte xdata *) 0xF4CA)
+#define r_tpsd_Cell_Id_7_0 0xF4CA
+#define tpsd_Cell_Id_7_0_pos 0
+#define tpsd_Cell_Id_7_0_len 8
+#define tpsd_Cell_Id_7_0_lsb 0
+#define xd_r_tpsd_Cell_Id_15_8 (*(volatile byte xdata *) 0xF4CB)
+#define r_tpsd_Cell_Id_15_8 0xF4CB
+#define tpsd_Cell_Id_15_8_pos 0
+#define tpsd_Cell_Id_15_8_len 8
+#define tpsd_Cell_Id_15_8_lsb 0
+#define xd_r_tpsd_use_InDepthInt (*(volatile byte xdata *) 0xF4CC)
+#define r_tpsd_use_InDepthInt 0xF4CC
+#define tpsd_use_InDepthInt_pos 0
+#define tpsd_use_InDepthInt_len 1
+#define tpsd_use_InDepthInt_lsb 0
+#define xd_r_tpsd_use_TimeSlicing_HP (*(volatile byte xdata *) 0xF4CD)
+#define r_tpsd_use_TimeSlicing_HP 0xF4CD
+#define tpsd_use_TimeSlicing_HP_pos 0
+#define tpsd_use_TimeSlicing_HP_len 1
+#define tpsd_use_TimeSlicing_HP_lsb 0
+#define xd_r_tpsd_use_mpe_fec_HP (*(volatile byte xdata *) 0xF4CE)
+#define r_tpsd_use_mpe_fec_HP 0xF4CE
+#define tpsd_use_mpe_fec_HP_pos 0
+#define tpsd_use_mpe_fec_HP_len 1
+#define tpsd_use_mpe_fec_HP_lsb 0
+#define xd_r_tpsd_use_TimeSlicing_LP (*(volatile byte xdata *) 0xF4CF)
+#define r_tpsd_use_TimeSlicing_LP 0xF4CF
+#define tpsd_use_TimeSlicing_LP_pos 0
+#define tpsd_use_TimeSlicing_LP_len 1
+#define tpsd_use_TimeSlicing_LP_lsb 0
+#define xd_r_tpsd_use_mpe_fec_LP (*(volatile byte xdata *) 0xF4D0)
+#define r_tpsd_use_mpe_fec_LP 0xF4D0
+#define tpsd_use_mpe_fec_LP_pos 0
+#define tpsd_use_mpe_fec_LP_len 1
+#define tpsd_use_mpe_fec_LP_lsb 0
+#define xd_r_tpsd_leng23_ind_return (*(volatile byte xdata *) 0xF4D1)
+#define r_tpsd_leng23_ind_return 0xF4D1
+#define tpsd_leng23_ind_return_pos 0
+#define tpsd_leng23_ind_return_len 1
+#define tpsd_leng23_ind_return_lsb 0
+#define xd_p_reg_fft_re_exp (*(volatile byte xdata *) 0xF500)
+#define p_reg_fft_re_exp 0xF500
+#define reg_fft_re_exp_pos 0
+#define reg_fft_re_exp_len 4
+#define reg_fft_re_exp_lsb 0
+#define xd_p_reg_fft_re_mts (*(volatile byte xdata *) 0xF501)
+#define p_reg_fft_re_mts 0xF501
+#define reg_fft_re_mts_pos 0
+#define reg_fft_re_mts_len 8
+#define reg_fft_re_mts_lsb 0
+#define xd_p_reg_fft_im_exp (*(volatile byte xdata *) 0xF502)
+#define p_reg_fft_im_exp 0xF502
+#define reg_fft_im_exp_pos 0
+#define reg_fft_im_exp_len 4
+#define reg_fft_im_exp_lsb 0
+#define xd_p_reg_fft_im_mts (*(volatile byte xdata *) 0xF503)
+#define p_reg_fft_im_mts 0xF503
+#define reg_fft_im_mts_pos 0
+#define reg_fft_im_mts_len 8
+#define reg_fft_im_mts_lsb 0
+#define xd_p_reg_fft_conjugate (*(volatile byte xdata *) 0xF504)
+#define p_reg_fft_conjugate 0xF504
+#define reg_fft_conjugate_pos 0
+#define reg_fft_conjugate_len 1
+#define reg_fft_conjugate_lsb 0
+#define xd_p_reg_fft_power_en (*(volatile byte xdata *) 0xF505)
+#define p_reg_fft_power_en 0xF505
+#define reg_fft_power_en_pos 0
+#define reg_fft_power_en_len 1
+#define reg_fft_power_en_lsb 0
+#define xd_p_reg_fft_power_factor (*(volatile byte xdata *) 0xF506)
+#define p_reg_fft_power_factor 0xF506
+#define reg_fft_power_factor_pos 0
+#define reg_fft_power_factor_len 6
+#define reg_fft_power_factor_lsb 0
+#define xd_p_reg_fft_power_in (*(volatile byte xdata *) 0xF507)
+#define p_reg_fft_power_in 0xF507
+#define reg_fft_power_in_pos 0
+#define reg_fft_power_in_len 8
+#define reg_fft_power_in_lsb 0
+#define xd_p_reg_fft_mask_from0_7_0 (*(volatile byte xdata *) 0xF508)
+#define p_reg_fft_mask_from0_7_0 0xF508
+#define reg_fft_mask_from0_7_0_pos 0
+#define reg_fft_mask_from0_7_0_len 8
+#define reg_fft_mask_from0_7_0_lsb 0
+#define xd_p_reg_fft_mask_from0_12_8 (*(volatile byte xdata *) 0xF509)
+#define p_reg_fft_mask_from0_12_8 0xF509
+#define reg_fft_mask_from0_12_8_pos 0
+#define reg_fft_mask_from0_12_8_len 5
+#define reg_fft_mask_from0_12_8_lsb 8
+#define xd_p_reg_fft_mask_to0_7_0 (*(volatile byte xdata *) 0xF50A)
+#define p_reg_fft_mask_to0_7_0 0xF50A
+#define reg_fft_mask_to0_7_0_pos 0
+#define reg_fft_mask_to0_7_0_len 8
+#define reg_fft_mask_to0_7_0_lsb 0
+#define xd_p_reg_fft_mask_to0_12_8 (*(volatile byte xdata *) 0xF50B)
+#define p_reg_fft_mask_to0_12_8 0xF50B
+#define reg_fft_mask_to0_12_8_pos 0
+#define reg_fft_mask_to0_12_8_len 5
+#define reg_fft_mask_to0_12_8_lsb 8
+#define xd_p_reg_fft_mask_from1_7_0 (*(volatile byte xdata *) 0xF50C)
+#define p_reg_fft_mask_from1_7_0 0xF50C
+#define reg_fft_mask_from1_7_0_pos 0
+#define reg_fft_mask_from1_7_0_len 8
+#define reg_fft_mask_from1_7_0_lsb 0
+#define xd_p_reg_fft_mask_from1_12_8 (*(volatile byte xdata *) 0xF50D)
+#define p_reg_fft_mask_from1_12_8 0xF50D
+#define reg_fft_mask_from1_12_8_pos 0
+#define reg_fft_mask_from1_12_8_len 5
+#define reg_fft_mask_from1_12_8_lsb 8
+#define xd_p_reg_fft_mask_to1_7_0 (*(volatile byte xdata *) 0xF50E)
+#define p_reg_fft_mask_to1_7_0 0xF50E
+#define reg_fft_mask_to1_7_0_pos 0
+#define reg_fft_mask_to1_7_0_len 8
+#define reg_fft_mask_to1_7_0_lsb 0
+#define xd_p_reg_fft_mask_to1_12_8 (*(volatile byte xdata *) 0xF50F)
+#define p_reg_fft_mask_to1_12_8 0xF50F
+#define reg_fft_mask_to1_12_8_pos 0
+#define reg_fft_mask_to1_12_8_len 5
+#define reg_fft_mask_to1_12_8_lsb 8
+#define xd_p_reg_fft_mask_from2_7_0 (*(volatile byte xdata *) 0xF510)
+#define p_reg_fft_mask_from2_7_0 0xF510
+#define reg_fft_mask_from2_7_0_pos 0
+#define reg_fft_mask_from2_7_0_len 8
+#define reg_fft_mask_from2_7_0_lsb 0
+#define xd_p_reg_fft_mask_from2_12_8 (*(volatile byte xdata *) 0xF511)
+#define p_reg_fft_mask_from2_12_8 0xF511
+#define reg_fft_mask_from2_12_8_pos 0
+#define reg_fft_mask_from2_12_8_len 5
+#define reg_fft_mask_from2_12_8_lsb 8
+#define xd_p_reg_fft_mask_to2_7_0 (*(volatile byte xdata *) 0xF512)
+#define p_reg_fft_mask_to2_7_0 0xF512
+#define reg_fft_mask_to2_7_0_pos 0
+#define reg_fft_mask_to2_7_0_len 8
+#define reg_fft_mask_to2_7_0_lsb 0
+#define xd_p_reg_fft_mask_to2_12_8 (*(volatile byte xdata *) 0xF513)
+#define p_reg_fft_mask_to2_12_8 0xF513
+#define reg_fft_mask_to2_12_8_pos 0
+#define reg_fft_mask_to2_12_8_len 5
+#define reg_fft_mask_to2_12_8_lsb 8
+#define xd_p_reg_fft_mask_from3_7_0 (*(volatile byte xdata *) 0xF514)
+#define p_reg_fft_mask_from3_7_0 0xF514
+#define reg_fft_mask_from3_7_0_pos 0
+#define reg_fft_mask_from3_7_0_len 8
+#define reg_fft_mask_from3_7_0_lsb 0
+#define xd_p_reg_fft_mask_from3_12_8 (*(volatile byte xdata *) 0xF515)
+#define p_reg_fft_mask_from3_12_8 0xF515
+#define reg_fft_mask_from3_12_8_pos 0
+#define reg_fft_mask_from3_12_8_len 5
+#define reg_fft_mask_from3_12_8_lsb 8
+#define xd_p_reg_fft_mask_to3_7_0 (*(volatile byte xdata *) 0xF516)
+#define p_reg_fft_mask_to3_7_0 0xF516
+#define reg_fft_mask_to3_7_0_pos 0
+#define reg_fft_mask_to3_7_0_len 8
+#define reg_fft_mask_to3_7_0_lsb 0
+#define xd_p_reg_fft_mask_to3_12_8 (*(volatile byte xdata *) 0xF517)
+#define p_reg_fft_mask_to3_12_8 0xF517
+#define reg_fft_mask_to3_12_8_pos 0
+#define reg_fft_mask_to3_12_8_len 5
+#define reg_fft_mask_to3_12_8_lsb 8
+#define xd_r_fd_sntc_frame_num (*(volatile byte xdata *) 0xF518)
+#define r_fd_sntc_frame_num 0xF518
+#define fd_sntc_frame_num_pos 0
+#define fd_sntc_frame_num_len 2
+#define fd_sntc_frame_num_lsb 0
+#define xd_r_fd_sntc_symbol_count (*(volatile byte xdata *) 0xF519)
+#define r_fd_sntc_symbol_count 0xF519
+#define fd_sntc_symbol_count_pos 0
+#define fd_sntc_symbol_count_len 7
+#define fd_sntc_symbol_count_lsb 0
+#define xd_p_reg_sntc_cnt_lo (*(volatile byte xdata *) 0xF51A)
+#define p_reg_sntc_cnt_lo 0xF51A
+#define reg_sntc_cnt_lo_pos 0
+#define reg_sntc_cnt_lo_len 8
+#define reg_sntc_cnt_lo_lsb 0
+#define xd_p_reg_sntc_cnt_hi (*(volatile byte xdata *) 0xF51B)
+#define p_reg_sntc_cnt_hi 0xF51B
+#define reg_sntc_cnt_hi_pos 0
+#define reg_sntc_cnt_hi_len 7
+#define reg_sntc_cnt_hi_lsb 0
+#define xd_p_reg_sntc_fft_in (*(volatile byte xdata *) 0xF51C)
+#define p_reg_sntc_fft_in 0xF51C
+#define reg_sntc_fft_in_pos 0
+#define reg_sntc_fft_in_len 1
+#define reg_sntc_fft_in_lsb 0
+#define xd_r_fd_sntc_en (*(volatile byte xdata *) 0xF51D)
+#define r_fd_sntc_en 0xF51D
+#define fd_sntc_en_pos 0
+#define fd_sntc_en_len 1
+#define fd_sntc_en_lsb 0
+#define xd_p_reg_sntc_x2 (*(volatile byte xdata *) 0xF51E)
+#define p_reg_sntc_x2 0xF51E
+#define reg_sntc_x2_pos 0
+#define reg_sntc_x2_len 1
+#define reg_sntc_x2_lsb 0
+#define xd_p_reg_cge_en_7_0 (*(volatile byte xdata *) 0xF51F)
+#define p_reg_cge_en_7_0 0xF51F
+#define reg_cge_en_7_0_pos 0
+#define reg_cge_en_7_0_len 8
+#define reg_cge_en_7_0_lsb 0
+#define xd_p_reg_cge_en_15_8 (*(volatile byte xdata *) 0xF520)
+#define p_reg_cge_en_15_8 0xF520
+#define reg_cge_en_15_8_pos 0
+#define reg_cge_en_15_8_len 8
+#define reg_cge_en_15_8_lsb 8
+#define xd_p_reg_cge_en_23_16 (*(volatile byte xdata *) 0xF521)
+#define p_reg_cge_en_23_16 0xF521
+#define reg_cge_en_23_16_pos 0
+#define reg_cge_en_23_16_len 8
+#define reg_cge_en_23_16_lsb 16
+#define xd_p_reg_cge_en_31_24 (*(volatile byte xdata *) 0xF522)
+#define p_reg_cge_en_31_24 0xF522
+#define reg_cge_en_31_24_pos 0
+#define reg_cge_en_31_24_len 8
+#define reg_cge_en_31_24_lsb 24
+#define xd_p_reg_cge_en_39_32 (*(volatile byte xdata *) 0xF523)
+#define p_reg_cge_en_39_32 0xF523
+#define reg_cge_en_39_32_pos 0
+#define reg_cge_en_39_32_len 8
+#define reg_cge_en_39_32_lsb 32
+#define xd_p_reg_cge_en_43_40 (*(volatile byte xdata *) 0xF524)
+#define p_reg_cge_en_43_40 0xF524
+#define reg_cge_en_43_40_pos 0
+#define reg_cge_en_43_40_len 4
+#define reg_cge_en_43_40_lsb 40
+#define xd_p_reg_fft_sat_en (*(volatile byte xdata *) 0xF525)
+#define p_reg_fft_sat_en 0xF525
+#define reg_fft_sat_en_pos 0
+#define reg_fft_sat_en_len 1
+#define reg_fft_sat_en_lsb 0
+#define xd_p_reg_fft_sat_count_clr (*(volatile byte xdata *) 0xF526)
+#define p_reg_fft_sat_count_clr 0xF526
+#define reg_fft_sat_count_clr_pos 0
+#define reg_fft_sat_count_clr_len 1
+#define reg_fft_sat_count_clr_lsb 0
+#define xd_p_reg_fft_rescale_round (*(volatile byte xdata *) 0xF527)
+#define p_reg_fft_rescale_round 0xF527
+#define reg_fft_rescale_round_pos 0
+#define reg_fft_rescale_round_len 1
+#define reg_fft_rescale_round_lsb 0
+#define xd_r_reg_fft_sat_count_12_7_0 (*(volatile byte xdata *) 0xF528)
+#define r_reg_fft_sat_count_12_7_0 0xF528
+#define reg_fft_sat_count_12_7_0_pos 0
+#define reg_fft_sat_count_12_7_0_len 8
+#define reg_fft_sat_count_12_7_0_lsb 0
+#define xd_r_reg_fft_sat_count_12_15_8 (*(volatile byte xdata *) 0xF529)
+#define r_reg_fft_sat_count_12_15_8 0xF529
+#define reg_fft_sat_count_12_15_8_pos 0
+#define reg_fft_sat_count_12_15_8_len 8
+#define reg_fft_sat_count_12_15_8_lsb 8
+#define xd_r_reg_fft_sat_count_10_7_0 (*(volatile byte xdata *) 0xF52A)
+#define r_reg_fft_sat_count_10_7_0 0xF52A
+#define reg_fft_sat_count_10_7_0_pos 0
+#define reg_fft_sat_count_10_7_0_len 8
+#define reg_fft_sat_count_10_7_0_lsb 0
+#define xd_r_reg_fft_sat_count_10_15_8 (*(volatile byte xdata *) 0xF52B)
+#define r_reg_fft_sat_count_10_15_8 0xF52B
+#define reg_fft_sat_count_10_15_8_pos 0
+#define reg_fft_sat_count_10_15_8_len 8
+#define reg_fft_sat_count_10_15_8_lsb 8
+#define xd_p_reg_fft_capture_idx_7_0 (*(volatile byte xdata *) 0xF52C)
+#define p_reg_fft_capture_idx_7_0 0xF52C
+#define reg_fft_capture_idx_7_0_pos 0
+#define reg_fft_capture_idx_7_0_len 8
+#define reg_fft_capture_idx_7_0_lsb 0
+#define xd_p_reg_fft_capture_idx_12_8 (*(volatile byte xdata *) 0xF52D)
+#define p_reg_fft_capture_idx_12_8 0xF52D
+#define reg_fft_capture_idx_12_8_pos 0
+#define reg_fft_capture_idx_12_8_len 5
+#define reg_fft_capture_idx_12_8_lsb 8
+#define xd_p_reg_fft_capture (*(volatile byte xdata *) 0xF52E)
+#define p_reg_fft_capture 0xF52E
+#define reg_fft_capture_pos 0
+#define reg_fft_capture_len 1
+#define reg_fft_capture_lsb 0
+#define xd_p_reg_gp_trigger_fd (*(volatile byte xdata *) 0xF52F)
+#define p_reg_gp_trigger_fd 0xF52F
+#define reg_gp_trigger_fd_pos 0
+#define reg_gp_trigger_fd_len 1
+#define reg_gp_trigger_fd_lsb 0
+#define xd_p_reg_trigger_sel_fd (*(volatile byte xdata *) 0xF530)
+#define p_reg_trigger_sel_fd 0xF530
+#define reg_trigger_sel_fd_pos 0
+#define reg_trigger_sel_fd_len 2
+#define reg_trigger_sel_fd_lsb 0
+#define xd_p_reg_trigger_module_sel_fd (*(volatile byte xdata *) 0xF531)
+#define p_reg_trigger_module_sel_fd 0xF531
+#define reg_trigger_module_sel_fd_pos 0
+#define reg_trigger_module_sel_fd_len 6
+#define reg_trigger_module_sel_fd_lsb 0
+#define xd_p_reg_trigger_set_sel_fd (*(volatile byte xdata *) 0xF532)
+#define p_reg_trigger_set_sel_fd 0xF532
+#define reg_trigger_set_sel_fd_pos 0
+#define reg_trigger_set_sel_fd_len 6
+#define reg_trigger_set_sel_fd_lsb 0
+#define xd_r_reg_fft_idx_pre_max_7_0 (*(volatile byte xdata *) 0xF533)
+#define r_reg_fft_idx_pre_max_7_0 0xF533
+#define reg_fft_idx_pre_max_7_0_pos 0
+#define reg_fft_idx_pre_max_7_0_len 8
+#define reg_fft_idx_pre_max_7_0_lsb 0
+#define xd_r_reg_fft_idx_pre_max_12_8 (*(volatile byte xdata *) 0xF534)
+#define r_reg_fft_idx_pre_max_12_8 0xF534
+#define reg_fft_idx_pre_max_12_8_pos 0
+#define reg_fft_idx_pre_max_12_8_len 5
+#define reg_fft_idx_pre_max_12_8_lsb 8
+#define xd_r_reg_fft_crc (*(volatile byte xdata *) 0xF535)
+#define r_reg_fft_crc 0xF535
+#define reg_fft_crc_pos 0
+#define reg_fft_crc_len 8
+#define reg_fft_crc_lsb 0
+#define xd_p_fd_fft_shift_max (*(volatile byte xdata *) 0xF536)
+#define p_fd_fft_shift_max 0xF536
+#define fd_fft_shift_max_pos 0
+#define fd_fft_shift_max_len 4
+#define fd_fft_shift_max_lsb 0
+#define xd_p_fd_fft_frame_num (*(volatile byte xdata *) 0xF537)
+#define p_fd_fft_frame_num 0xF537
+#define fd_fft_frame_num_pos 0
+#define fd_fft_frame_num_len 2
+#define fd_fft_frame_num_lsb 0
+#define xd_p_fd_fft_symbol_count (*(volatile byte xdata *) 0xF538)
+#define p_fd_fft_symbol_count 0xF538
+#define fd_fft_symbol_count_pos 0
+#define fd_fft_symbol_count_len 7
+#define fd_fft_symbol_count_lsb 0
+#define xd_r_reg_fft_idx_max_7_0 (*(volatile byte xdata *) 0xF539)
+#define r_reg_fft_idx_max_7_0 0xF539
+#define reg_fft_idx_max_7_0_pos 0
+#define reg_fft_idx_max_7_0_len 8
+#define reg_fft_idx_max_7_0_lsb 0
+#define xd_r_reg_fft_idx_max_12_8 (*(volatile byte xdata *) 0xF53A)
+#define r_reg_fft_idx_max_12_8 0xF53A
+#define reg_fft_idx_max_12_8_pos 0
+#define reg_fft_idx_max_12_8_len 5
+#define reg_fft_idx_max_12_8_lsb 8
+#define xd_p_reg_fft_rotate_en (*(volatile byte xdata *) 0xF53B)
+#define p_reg_fft_rotate_en 0xF53B
+#define reg_fft_rotate_en_pos 0
+#define reg_fft_rotate_en_len 1
+#define reg_fft_rotate_en_lsb 0
+#define xd_p_reg_fft_rotate_base_7_0 (*(volatile byte xdata *) 0xF53C)
+#define p_reg_fft_rotate_base_7_0 0xF53C
+#define reg_fft_rotate_base_7_0_pos 0
+#define reg_fft_rotate_base_7_0_len 8
+#define reg_fft_rotate_base_7_0_lsb 0
+#define xd_p_reg_fft_rotate_base_12_8 (*(volatile byte xdata *) 0xF53D)
+#define p_reg_fft_rotate_base_12_8 0xF53D
+#define reg_fft_rotate_base_12_8_pos 0
+#define reg_fft_rotate_base_12_8_len 5
+#define reg_fft_rotate_base_12_8_lsb 8
+#define xd_r_fd_fpcc_cp_corr_signn (*(volatile byte xdata *) 0xF53E)
+#define r_fd_fpcc_cp_corr_signn 0xF53E
+#define fd_fpcc_cp_corr_signn_pos 0
+#define fd_fpcc_cp_corr_signn_len 8
+#define fd_fpcc_cp_corr_signn_lsb 0
+#define xd_p_reg_feq_s1 (*(volatile byte xdata *) 0xF53F)
+#define p_reg_feq_s1 0xF53F
+#define reg_feq_s1_pos 0
+#define reg_feq_s1_len 5
+#define reg_feq_s1_lsb 0
+#define xd_p_reg_feq_sat_ind (*(volatile byte xdata *) 0xF540)
+#define p_reg_feq_sat_ind 0xF540
+#define reg_feq_sat_ind_pos 0
+#define reg_feq_sat_ind_len 3
+#define reg_feq_sat_ind_lsb 0
+#define xd_p_reg_p_csi_cal_en (*(volatile byte xdata *) 0xF541)
+#define p_reg_p_csi_cal_en 0xF541
+#define reg_p_csi_cal_en_pos 0
+#define reg_p_csi_cal_en_len 1
+#define reg_p_csi_cal_en_lsb 0
+#define xd_p_reg_p_csi_ar_mode (*(volatile byte xdata *) 0xF542)
+#define p_reg_p_csi_ar_mode 0xF542
+#define reg_p_csi_ar_mode_pos 0
+#define reg_p_csi_ar_mode_len 2
+#define reg_p_csi_ar_mode_lsb 0
+#define xd_p_reg_p_csi_accu_sym_num (*(volatile byte xdata *) 0xF543)
+#define p_reg_p_csi_accu_sym_num 0xF543
+#define reg_p_csi_accu_sym_num_pos 0
+#define reg_p_csi_accu_sym_num_len 8
+#define reg_p_csi_accu_sym_num_lsb 0
+#define xd_p_reg_p_csi_eh2_shift_thr (*(volatile byte xdata *) 0xF544)
+#define p_reg_p_csi_eh2_shift_thr 0xF544
+#define reg_p_csi_eh2_shift_thr_pos 0
+#define reg_p_csi_eh2_shift_thr_len 4
+#define reg_p_csi_eh2_shift_thr_lsb 0
+#define xd_p_reg_p_feq_protect_eh2_shift_thr (*(volatile byte xdata *) 0xF545)
+#define p_reg_p_feq_protect_eh2_shift_thr 0xF545
+#define reg_p_feq_protect_eh2_shift_thr_pos 0
+#define reg_p_feq_protect_eh2_shift_thr_len 4
+#define reg_p_feq_protect_eh2_shift_thr_lsb 0
+#define xd_p_reg_p_csi_error_accu_s1 (*(volatile byte xdata *) 0xF546)
+#define p_reg_p_csi_error_accu_s1 0xF546
+#define reg_p_csi_error_accu_s1_pos 0
+#define reg_p_csi_error_accu_s1_len 6
+#define reg_p_csi_error_accu_s1_lsb 0
+#define xd_p_reg_p_csi_shift2 (*(volatile byte xdata *) 0xF547)
+#define p_reg_p_csi_shift2 0xF547
+#define reg_p_csi_shift2_pos 0
+#define reg_p_csi_shift2_len 4
+#define reg_p_csi_shift2_lsb 0
+#define xd_p_reg_p_csi_mul2 (*(volatile byte xdata *) 0xF548)
+#define p_reg_p_csi_mul2 0xF548
+#define reg_p_csi_mul2_pos 0
+#define reg_p_csi_mul2_len 8
+#define reg_p_csi_mul2_lsb 0
+#define xd_p_reg_p_csi_level2_7_0 (*(volatile byte xdata *) 0xF549)
+#define p_reg_p_csi_level2_7_0 0xF549
+#define reg_p_csi_level2_7_0_pos 0
+#define reg_p_csi_level2_7_0_len 8
+#define reg_p_csi_level2_7_0_lsb 0
+#define xd_p_reg_p_csi_level2_8 (*(volatile byte xdata *) 0xF54A)
+#define p_reg_p_csi_level2_8 0xF54A
+#define reg_p_csi_level2_8_pos 0
+#define reg_p_csi_level2_8_len 1
+#define reg_p_csi_level2_8_lsb 8
+#define xd_p_reg_p_feq_protect_ratio (*(volatile byte xdata *) 0xF54B)
+#define p_reg_p_feq_protect_ratio 0xF54B
+#define reg_p_feq_protect_ratio_pos 0
+#define reg_p_feq_protect_ratio_len 8
+#define reg_p_feq_protect_ratio_lsb 0
+#define xd_r_reg_csi_rdy (*(volatile byte xdata *) 0xF54C)
+#define r_reg_csi_rdy 0xF54C
+#define reg_csi_rdy_pos 0
+#define reg_csi_rdy_len 1
+#define reg_csi_rdy_lsb 0
+#define xd_p_reg_p_feq_h2protect_en (*(volatile byte xdata *) 0xF54D)
+#define p_reg_p_feq_h2protect_en 0xF54D
+#define reg_p_feq_h2protect_en_pos 0
+#define reg_p_feq_h2protect_en_len 1
+#define reg_p_feq_h2protect_en_lsb 0
+#define xd_r_reg_tpsd_lock_f0 (*(volatile byte xdata *) 0xF54E)
+#define r_reg_tpsd_lock_f0 0xF54E
+#define reg_tpsd_lock_f0_pos 0
+#define reg_tpsd_lock_f0_len 1
+#define reg_tpsd_lock_f0_lsb 0
+#define xd_r_reg_tpsd_lock_f1 (*(volatile byte xdata *) 0xF54F)
+#define r_reg_tpsd_lock_f1 0xF54F
+#define reg_tpsd_lock_f1_pos 0
+#define reg_tpsd_lock_f1_len 1
+#define reg_tpsd_lock_f1_lsb 0
+#define xd_p_reg_p_csi_sp_idx_7_0 (*(volatile byte xdata *) 0xF550)
+#define p_reg_p_csi_sp_idx_7_0 0xF550
+#define reg_p_csi_sp_idx_7_0_pos 0
+#define reg_p_csi_sp_idx_7_0_len 8
+#define reg_p_csi_sp_idx_7_0_lsb 0
+#define xd_p_reg_p_csi_sp_idx_11_8 (*(volatile byte xdata *) 0xF551)
+#define p_reg_p_csi_sp_idx_11_8 0xF551
+#define reg_p_csi_sp_idx_11_8_pos 0
+#define reg_p_csi_sp_idx_11_8_len 4
+#define reg_p_csi_sp_idx_11_8_lsb 8
+#define xd_p_fd_fpcc_cp_corr_tone_th (*(volatile byte xdata *) 0xF552)
+#define p_fd_fpcc_cp_corr_tone_th 0xF552
+#define fd_fpcc_cp_corr_tone_th_pos 0
+#define fd_fpcc_cp_corr_tone_th_len 6
+#define fd_fpcc_cp_corr_tone_th_lsb 0
+#define xd_p_fd_fpcc_cp_corr_symbol_log_th (*(volatile byte xdata *) 0xF553)
+#define p_fd_fpcc_cp_corr_symbol_log_th 0xF553
+#define fd_fpcc_cp_corr_symbol_log_th_pos 0
+#define fd_fpcc_cp_corr_symbol_log_th_len 4
+#define fd_fpcc_cp_corr_symbol_log_th_lsb 0
+#define xd_p_fd_fpcc_cp_corr_int (*(volatile byte xdata *) 0xF554)
+#define p_fd_fpcc_cp_corr_int 0xF554
+#define fd_fpcc_cp_corr_int_pos 0
+#define fd_fpcc_cp_corr_int_len 1
+#define fd_fpcc_cp_corr_int_lsb 0
+#define xd_p_reg_fpcc_cp_memidx (*(volatile byte xdata *) 0xF555)
+#define p_reg_fpcc_cp_memidx 0xF555
+#define reg_fpcc_cp_memidx_pos 0
+#define reg_fpcc_cp_memidx_len 8
+#define reg_fpcc_cp_memidx_lsb 0
+#define xd_p_reg_fpcc_cpmask_en (*(volatile byte xdata *) 0xF556)
+#define p_reg_fpcc_cpmask_en 0xF556
+#define reg_fpcc_cpmask_en_pos 0
+#define reg_fpcc_cpmask_en_len 1
+#define reg_fpcc_cpmask_en_lsb 0
+#define xd_p_reg_fpcc_cp_grpidx (*(volatile byte xdata *) 0xF557)
+#define p_reg_fpcc_cp_grpidx 0xF557
+#define reg_fpcc_cp_grpidx_pos 0
+#define reg_fpcc_cp_grpidx_len 5
+#define reg_fpcc_cp_grpidx_lsb 0
+#define xd_r_reg_fpcc_cp_sts (*(volatile byte xdata *) 0xF558)
+#define r_reg_fpcc_cp_sts 0xF558
+#define reg_fpcc_cp_sts_pos 0
+#define reg_fpcc_cp_sts_len 1
+#define reg_fpcc_cp_sts_lsb 0
+#define xd_p_reg_sfoe_ns_7_0 (*(volatile byte xdata *) 0xF559)
+#define p_reg_sfoe_ns_7_0 0xF559
+#define reg_sfoe_ns_7_0_pos 0
+#define reg_sfoe_ns_7_0_len 8
+#define reg_sfoe_ns_7_0_lsb 0
+#define xd_p_reg_sfoe_ns_14_8 (*(volatile byte xdata *) 0xF55A)
+#define p_reg_sfoe_ns_14_8 0xF55A
+#define reg_sfoe_ns_14_8_pos 0
+#define reg_sfoe_ns_14_8_len 7
+#define reg_sfoe_ns_14_8_lsb 8
+#define xd_p_reg_sfoe_c1_7_0 (*(volatile byte xdata *) 0xF55B)
+#define p_reg_sfoe_c1_7_0 0xF55B
+#define reg_sfoe_c1_7_0_pos 0
+#define reg_sfoe_c1_7_0_len 8
+#define reg_sfoe_c1_7_0_lsb 0
+#define xd_p_reg_sfoe_c1_9_8 (*(volatile byte xdata *) 0xF55C)
+#define p_reg_sfoe_c1_9_8 0xF55C
+#define reg_sfoe_c1_9_8_pos 0
+#define reg_sfoe_c1_9_8_len 2
+#define reg_sfoe_c1_9_8_lsb 8
+#define xd_p_reg_sfoe_c2_7_0 (*(volatile byte xdata *) 0xF55D)
+#define p_reg_sfoe_c2_7_0 0xF55D
+#define reg_sfoe_c2_7_0_pos 0
+#define reg_sfoe_c2_7_0_len 8
+#define reg_sfoe_c2_7_0_lsb 0
+#define xd_p_reg_sfoe_c2_9_8 (*(volatile byte xdata *) 0xF55E)
+#define p_reg_sfoe_c2_9_8 0xF55E
+#define reg_sfoe_c2_9_8_pos 0
+#define reg_sfoe_c2_9_8_len 2
+#define reg_sfoe_c2_9_8_lsb 8
+#define xd_p_reg_sfoe_lm_counter_th (*(volatile byte xdata *) 0xF55F)
+#define p_reg_sfoe_lm_counter_th 0xF55F
+#define reg_sfoe_lm_counter_th_pos 0
+#define reg_sfoe_lm_counter_th_len 4
+#define reg_sfoe_lm_counter_th_lsb 0
+#define xd_p_reg_sfoe_spec_inv (*(volatile byte xdata *) 0xF560)
+#define p_reg_sfoe_spec_inv 0xF560
+#define reg_sfoe_spec_inv_pos 0
+#define reg_sfoe_spec_inv_len 1
+#define reg_sfoe_spec_inv_lsb 0
+#define xd_p_reg_sfoe_convg_th (*(volatile byte xdata *) 0xF561)
+#define p_reg_sfoe_convg_th 0xF561
+#define reg_sfoe_convg_th_pos 0
+#define reg_sfoe_convg_th_len 8
+#define reg_sfoe_convg_th_lsb 0
+#define xd_p_reg_sfoe_divg_th (*(volatile byte xdata *) 0xF562)
+#define p_reg_sfoe_divg_th 0xF562
+#define reg_sfoe_divg_th_pos 0
+#define reg_sfoe_divg_th_len 8
+#define reg_sfoe_divg_th_lsb 0
+#define xd_p_reg_sfoe_pullin_ctr_th (*(volatile byte xdata *) 0xF563)
+#define p_reg_sfoe_pullin_ctr_th 0xF563
+#define reg_sfoe_pullin_ctr_th_pos 0
+#define reg_sfoe_pullin_ctr_th_len 4
+#define reg_sfoe_pullin_ctr_th_lsb 0
+#define xd_p_reg_sfoe_sf_ctr_th (*(volatile byte xdata *) 0xF564)
+#define p_reg_sfoe_sf_ctr_th 0xF564
+#define reg_sfoe_sf_ctr_th_pos 0
+#define reg_sfoe_sf_ctr_th_len 4
+#define reg_sfoe_sf_ctr_th_lsb 0
+#define xd_p_reg_sfoe_pullin_th (*(volatile byte xdata *) 0xF565)
+#define p_reg_sfoe_pullin_th 0xF565
+#define reg_sfoe_pullin_th_pos 0
+#define reg_sfoe_pullin_th_len 8
+#define reg_sfoe_pullin_th_lsb 0
+#define xd_p_reg_sfoe_kalman_cnt (*(volatile byte xdata *) 0xF566)
+#define p_reg_sfoe_kalman_cnt 0xF566
+#define reg_sfoe_kalman_cnt_pos 0
+#define reg_sfoe_kalman_cnt_len 4
+#define reg_sfoe_kalman_cnt_lsb 0
+#define xd_p_reg_sfoe_fsm_info (*(volatile byte xdata *) 0xF567)
+#define p_reg_sfoe_fsm_info 0xF567
+#define reg_sfoe_fsm_info_pos 0
+#define reg_sfoe_fsm_info_len 4
+#define reg_sfoe_fsm_info_lsb 0
+#define xd_r_reg_sfoe_pullin_cnt (*(volatile byte xdata *) 0xF568)
+#define r_reg_sfoe_pullin_cnt 0xF568
+#define reg_sfoe_pullin_cnt_pos 0
+#define reg_sfoe_pullin_cnt_len 4
+#define reg_sfoe_pullin_cnt_lsb 0
+#define xd_r_reg_sfoe_sf_cnt (*(volatile byte xdata *) 0xF569)
+#define r_reg_sfoe_sf_cnt 0xF569
+#define reg_sfoe_sf_cnt_pos 0
+#define reg_sfoe_sf_cnt_len 4
+#define reg_sfoe_sf_cnt_lsb 0
+#define xd_p_reg_fste_phase_ini_7_0 (*(volatile byte xdata *) 0xF56A)
+#define p_reg_fste_phase_ini_7_0 0xF56A
+#define reg_fste_phase_ini_7_0_pos 0
+#define reg_fste_phase_ini_7_0_len 8
+#define reg_fste_phase_ini_7_0_lsb 0
+#define xd_p_reg_fste_phase_ini_11_8 (*(volatile byte xdata *) 0xF56B)
+#define p_reg_fste_phase_ini_11_8 0xF56B
+#define reg_fste_phase_ini_11_8_pos 0
+#define reg_fste_phase_ini_11_8_len 4
+#define reg_fste_phase_ini_11_8_lsb 8
+#define xd_p_reg_fste_phase_inc_7_0 (*(volatile byte xdata *) 0xF56C)
+#define p_reg_fste_phase_inc_7_0 0xF56C
+#define reg_fste_phase_inc_7_0_pos 0
+#define reg_fste_phase_inc_7_0_len 8
+#define reg_fste_phase_inc_7_0_lsb 0
+#define xd_p_reg_fste_phase_inc_11_8 (*(volatile byte xdata *) 0xF56D)
+#define p_reg_fste_phase_inc_11_8 0xF56D
+#define reg_fste_phase_inc_11_8_pos 0
+#define reg_fste_phase_inc_11_8_len 4
+#define reg_fste_phase_inc_11_8_lsb 8
+#define xd_p_reg_fste_acum_cost_cnt_max (*(volatile byte xdata *) 0xF56E)
+#define p_reg_fste_acum_cost_cnt_max 0xF56E
+#define reg_fste_acum_cost_cnt_max_pos 0
+#define reg_fste_acum_cost_cnt_max_len 4
+#define reg_fste_acum_cost_cnt_max_lsb 0
+#define xd_p_reg_fste_step_size_std (*(volatile byte xdata *) 0xF56F)
+#define p_reg_fste_step_size_std 0xF56F
+#define reg_fste_step_size_std_pos 0
+#define reg_fste_step_size_std_len 4
+#define reg_fste_step_size_std_lsb 0
+#define xd_p_reg_fste_step_size_max (*(volatile byte xdata *) 0xF570)
+#define p_reg_fste_step_size_max 0xF570
+#define reg_fste_step_size_max_pos 0
+#define reg_fste_step_size_max_len 4
+#define reg_fste_step_size_max_lsb 0
+#define xd_p_reg_fste_rpd_dir_cnt_max (*(volatile byte xdata *) 0xF571)
+#define p_reg_fste_rpd_dir_cnt_max 0xF571
+#define reg_fste_rpd_dir_cnt_max_pos 0
+#define reg_fste_rpd_dir_cnt_max_len 4
+#define reg_fste_rpd_dir_cnt_max_lsb 0
+#define xd_p_reg_fste_frac_cost_cnt_max_7_0 (*(volatile byte xdata *) 0xF572)
+#define p_reg_fste_frac_cost_cnt_max_7_0 0xF572
+#define reg_fste_frac_cost_cnt_max_7_0_pos 0
+#define reg_fste_frac_cost_cnt_max_7_0_len 8
+#define reg_fste_frac_cost_cnt_max_7_0_lsb 0
+#define xd_p_reg_fste_frac_cost_cnt_max_9_8 (*(volatile byte xdata *) 0xF573)
+#define p_reg_fste_frac_cost_cnt_max_9_8 0xF573
+#define reg_fste_frac_cost_cnt_max_9_8_pos 0
+#define reg_fste_frac_cost_cnt_max_9_8_len 2
+#define reg_fste_frac_cost_cnt_max_9_8_lsb 8
+#define xd_p_reg_fste_isLongWeakTail (*(volatile byte xdata *) 0xF574)
+#define p_reg_fste_isLongWeakTail 0xF574
+#define reg_fste_isLongWeakTail_pos 0
+#define reg_fste_isLongWeakTail_len 1
+#define reg_fste_isLongWeakTail_lsb 0
+#define xd_p_reg_fste_isLongWeakHead (*(volatile byte xdata *) 0xF575)
+#define p_reg_fste_isLongWeakHead 0xF575
+#define reg_fste_isLongWeakHead_pos 0
+#define reg_fste_isLongWeakHead_len 1
+#define reg_fste_isLongWeakHead_lsb 0
+#define xd_p_reg_fste_w0_7_0 (*(volatile byte xdata *) 0xF576)
+#define p_reg_fste_w0_7_0 0xF576
+#define reg_fste_w0_7_0_pos 0
+#define reg_fste_w0_7_0_len 8
+#define reg_fste_w0_7_0_lsb 0
+#define xd_p_reg_fste_w0_9_8 (*(volatile byte xdata *) 0xF577)
+#define p_reg_fste_w0_9_8 0xF577
+#define reg_fste_w0_9_8_pos 0
+#define reg_fste_w0_9_8_len 2
+#define reg_fste_w0_9_8_lsb 8
+#define xd_p_reg_fste_w1_7_0 (*(volatile byte xdata *) 0xF578)
+#define p_reg_fste_w1_7_0 0xF578
+#define reg_fste_w1_7_0_pos 0
+#define reg_fste_w1_7_0_len 8
+#define reg_fste_w1_7_0_lsb 0
+#define xd_p_reg_fste_w1_9_8 (*(volatile byte xdata *) 0xF579)
+#define p_reg_fste_w1_9_8 0xF579
+#define reg_fste_w1_9_8_pos 0
+#define reg_fste_w1_9_8_len 2
+#define reg_fste_w1_9_8_lsb 8
+#define xd_p_reg_fste_w2_7_0 (*(volatile byte xdata *) 0xF57A)
+#define p_reg_fste_w2_7_0 0xF57A
+#define reg_fste_w2_7_0_pos 0
+#define reg_fste_w2_7_0_len 8
+#define reg_fste_w2_7_0_lsb 0
+#define xd_p_reg_fste_w2_9_8 (*(volatile byte xdata *) 0xF57B)
+#define p_reg_fste_w2_9_8 0xF57B
+#define reg_fste_w2_9_8_pos 0
+#define reg_fste_w2_9_8_len 2
+#define reg_fste_w2_9_8_lsb 8
+#define xd_p_reg_fste_w3_7_0 (*(volatile byte xdata *) 0xF57C)
+#define p_reg_fste_w3_7_0 0xF57C
+#define reg_fste_w3_7_0_pos 0
+#define reg_fste_w3_7_0_len 8
+#define reg_fste_w3_7_0_lsb 0
+#define xd_p_reg_fste_w3_9_8 (*(volatile byte xdata *) 0xF57D)
+#define p_reg_fste_w3_9_8 0xF57D
+#define reg_fste_w3_9_8_pos 0
+#define reg_fste_w3_9_8_len 2
+#define reg_fste_w3_9_8_lsb 8
+#define xd_p_reg_fste_w4_7_0 (*(volatile byte xdata *) 0xF57E)
+#define p_reg_fste_w4_7_0 0xF57E
+#define reg_fste_w4_7_0_pos 0
+#define reg_fste_w4_7_0_len 8
+#define reg_fste_w4_7_0_lsb 0
+#define xd_p_reg_fste_w4_9_8 (*(volatile byte xdata *) 0xF57F)
+#define p_reg_fste_w4_9_8 0xF57F
+#define reg_fste_w4_9_8_pos 0
+#define reg_fste_w4_9_8_len 2
+#define reg_fste_w4_9_8_lsb 8
+#define xd_p_reg_fste_w5_7_0 (*(volatile byte xdata *) 0xF580)
+#define p_reg_fste_w5_7_0 0xF580
+#define reg_fste_w5_7_0_pos 0
+#define reg_fste_w5_7_0_len 8
+#define reg_fste_w5_7_0_lsb 0
+#define xd_p_reg_fste_w5_9_8 (*(volatile byte xdata *) 0xF581)
+#define p_reg_fste_w5_9_8 0xF581
+#define reg_fste_w5_9_8_pos 0
+#define reg_fste_w5_9_8_len 2
+#define reg_fste_w5_9_8_lsb 8
+#define xd_p_reg_fste_w6_7_0 (*(volatile byte xdata *) 0xF582)
+#define p_reg_fste_w6_7_0 0xF582
+#define reg_fste_w6_7_0_pos 0
+#define reg_fste_w6_7_0_len 8
+#define reg_fste_w6_7_0_lsb 0
+#define xd_p_reg_fste_w6_9_8 (*(volatile byte xdata *) 0xF583)
+#define p_reg_fste_w6_9_8 0xF583
+#define reg_fste_w6_9_8_pos 0
+#define reg_fste_w6_9_8_len 2
+#define reg_fste_w6_9_8_lsb 8
+#define xd_p_reg_fste_w7_7_0 (*(volatile byte xdata *) 0xF584)
+#define p_reg_fste_w7_7_0 0xF584
+#define reg_fste_w7_7_0_pos 0
+#define reg_fste_w7_7_0_len 8
+#define reg_fste_w7_7_0_lsb 0
+#define xd_p_reg_fste_w7_9_8 (*(volatile byte xdata *) 0xF585)
+#define p_reg_fste_w7_9_8 0xF585
+#define reg_fste_w7_9_8_pos 0
+#define reg_fste_w7_9_8_len 2
+#define reg_fste_w7_9_8_lsb 8
+#define xd_p_reg_fste_w8_7_0 (*(volatile byte xdata *) 0xF586)
+#define p_reg_fste_w8_7_0 0xF586
+#define reg_fste_w8_7_0_pos 0
+#define reg_fste_w8_7_0_len 8
+#define reg_fste_w8_7_0_lsb 0
+#define xd_p_reg_fste_w8_9_8 (*(volatile byte xdata *) 0xF587)
+#define p_reg_fste_w8_9_8 0xF587
+#define reg_fste_w8_9_8_pos 0
+#define reg_fste_w8_9_8_len 2
+#define reg_fste_w8_9_8_lsb 8
+#define xd_p_reg_fste_w9_7_0 (*(volatile byte xdata *) 0xF588)
+#define p_reg_fste_w9_7_0 0xF588
+#define reg_fste_w9_7_0_pos 0
+#define reg_fste_w9_7_0_len 8
+#define reg_fste_w9_7_0_lsb 0
+#define xd_p_reg_fste_w9_9_8 (*(volatile byte xdata *) 0xF589)
+#define p_reg_fste_w9_9_8 0xF589
+#define reg_fste_w9_9_8_pos 0
+#define reg_fste_w9_9_8_len 2
+#define reg_fste_w9_9_8_lsb 8
+#define xd_p_reg_fste_wa_7_0 (*(volatile byte xdata *) 0xF58A)
+#define p_reg_fste_wa_7_0 0xF58A
+#define reg_fste_wa_7_0_pos 0
+#define reg_fste_wa_7_0_len 8
+#define reg_fste_wa_7_0_lsb 0
+#define xd_p_reg_fste_wa_9_8 (*(volatile byte xdata *) 0xF58B)
+#define p_reg_fste_wa_9_8 0xF58B
+#define reg_fste_wa_9_8_pos 0
+#define reg_fste_wa_9_8_len 2
+#define reg_fste_wa_9_8_lsb 8
+#define xd_p_reg_fste_wb_7_0 (*(volatile byte xdata *) 0xF58C)
+#define p_reg_fste_wb_7_0 0xF58C
+#define reg_fste_wb_7_0_pos 0
+#define reg_fste_wb_7_0_len 8
+#define reg_fste_wb_7_0_lsb 0
+#define xd_p_reg_fste_wb_9_8 (*(volatile byte xdata *) 0xF58D)
+#define p_reg_fste_wb_9_8 0xF58D
+#define reg_fste_wb_9_8_pos 0
+#define reg_fste_wb_9_8_len 2
+#define reg_fste_wb_9_8_lsb 8
+#define xd_p_reg_fste_wc_7_0 (*(volatile byte xdata *) 0xF58E)
+#define p_reg_fste_wc_7_0 0xF58E
+#define reg_fste_wc_7_0_pos 0
+#define reg_fste_wc_7_0_len 8
+#define reg_fste_wc_7_0_lsb 0
+#define xd_p_reg_fste_wc_9_8 (*(volatile byte xdata *) 0xF58F)
+#define p_reg_fste_wc_9_8 0xF58F
+#define reg_fste_wc_9_8_pos 0
+#define reg_fste_wc_9_8_len 2
+#define reg_fste_wc_9_8_lsb 8
+#define xd_p_reg_fste_wd_7_0 (*(volatile byte xdata *) 0xF590)
+#define p_reg_fste_wd_7_0 0xF590
+#define reg_fste_wd_7_0_pos 0
+#define reg_fste_wd_7_0_len 8
+#define reg_fste_wd_7_0_lsb 0
+#define xd_p_reg_fste_wd_9_8 (*(volatile byte xdata *) 0xF591)
+#define p_reg_fste_wd_9_8 0xF591
+#define reg_fste_wd_9_8_pos 0
+#define reg_fste_wd_9_8_len 2
+#define reg_fste_wd_9_8_lsb 8
+#define xd_p_reg_fste_we_7_0 (*(volatile byte xdata *) 0xF592)
+#define p_reg_fste_we_7_0 0xF592
+#define reg_fste_we_7_0_pos 0
+#define reg_fste_we_7_0_len 8
+#define reg_fste_we_7_0_lsb 0
+#define xd_p_reg_fste_we_9_8 (*(volatile byte xdata *) 0xF593)
+#define p_reg_fste_we_9_8 0xF593
+#define reg_fste_we_9_8_pos 0
+#define reg_fste_we_9_8_len 2
+#define reg_fste_we_9_8_lsb 8
+#define xd_p_reg_fste_wf_7_0 (*(volatile byte xdata *) 0xF594)
+#define p_reg_fste_wf_7_0 0xF594
+#define reg_fste_wf_7_0_pos 0
+#define reg_fste_wf_7_0_len 8
+#define reg_fste_wf_7_0_lsb 0
+#define xd_p_reg_fste_wf_9_8 (*(volatile byte xdata *) 0xF595)
+#define p_reg_fste_wf_9_8 0xF595
+#define reg_fste_wf_9_8_pos 0
+#define reg_fste_wf_9_8_len 2
+#define reg_fste_wf_9_8_lsb 8
+#define xd_p_reg_fste_wg_7_0 (*(volatile byte xdata *) 0xF596)
+#define p_reg_fste_wg_7_0 0xF596
+#define reg_fste_wg_7_0_pos 0
+#define reg_fste_wg_7_0_len 8
+#define reg_fste_wg_7_0_lsb 0
+#define xd_p_reg_fste_wg_9_8 (*(volatile byte xdata *) 0xF597)
+#define p_reg_fste_wg_9_8 0xF597
+#define reg_fste_wg_9_8_pos 0
+#define reg_fste_wg_9_8_len 2
+#define reg_fste_wg_9_8_lsb 8
+#define xd_p_reg_fste_wh_7_0 (*(volatile byte xdata *) 0xF598)
+#define p_reg_fste_wh_7_0 0xF598
+#define reg_fste_wh_7_0_pos 0
+#define reg_fste_wh_7_0_len 8
+#define reg_fste_wh_7_0_lsb 0
+#define xd_p_reg_fste_wh_9_8 (*(volatile byte xdata *) 0xF599)
+#define p_reg_fste_wh_9_8 0xF599
+#define reg_fste_wh_9_8_pos 0
+#define reg_fste_wh_9_8_len 2
+#define reg_fste_wh_9_8_lsb 8
+#define xd_r_fd_fste_i_adj_org (*(volatile byte xdata *) 0xF59A)
+#define r_fd_fste_i_adj_org 0xF59A
+#define fd_fste_i_adj_org_pos 0
+#define fd_fste_i_adj_org_len 5
+#define fd_fste_i_adj_org_lsb 0
+#define xd_r_fd_fste_f_adj_7_0 (*(volatile byte xdata *) 0xF59B)
+#define r_fd_fste_f_adj_7_0 0xF59B
+#define fd_fste_f_adj_7_0_pos 0
+#define fd_fste_f_adj_7_0_len 8
+#define fd_fste_f_adj_7_0_lsb 0
+#define xd_r_fd_fste_f_adj_15_8 (*(volatile byte xdata *) 0xF59C)
+#define r_fd_fste_f_adj_15_8 0xF59C
+#define fd_fste_f_adj_15_8_pos 0
+#define fd_fste_f_adj_15_8_len 8
+#define fd_fste_f_adj_15_8_lsb 8
+#define xd_r_fd_fste_f_adj_19_16 (*(volatile byte xdata *) 0xF59D)
+#define r_fd_fste_f_adj_19_16 0xF59D
+#define fd_fste_f_adj_19_16_pos 0
+#define fd_fste_f_adj_19_16_len 4
+#define fd_fste_f_adj_19_16_lsb 16
+#define xd_p_reg_fste_ehw_7_0 (*(volatile byte xdata *) 0xF59E)
+#define p_reg_fste_ehw_7_0 0xF59E
+#define reg_fste_ehw_7_0_pos 0
+#define reg_fste_ehw_7_0_len 8
+#define reg_fste_ehw_7_0_lsb 0
+#define xd_p_reg_fste_ehw_12_8 (*(volatile byte xdata *) 0xF59F)
+#define p_reg_fste_ehw_12_8 0xF59F
+#define reg_fste_ehw_12_8_pos 0
+#define reg_fste_ehw_12_8_len 5
+#define reg_fste_ehw_12_8_lsb 8
+#define xd_p_reg_fste_i_adj_vld (*(volatile byte xdata *) 0xF5A0)
+#define p_reg_fste_i_adj_vld 0xF5A0
+#define reg_fste_i_adj_vld_pos 0
+#define reg_fste_i_adj_vld_len 1
+#define reg_fste_i_adj_vld_lsb 0
+#define xd_p_reg_fste_ceTimesPhasor_real (*(volatile byte xdata *) 0xF5A1)
+#define p_reg_fste_ceTimesPhasor_real 0xF5A1
+#define reg_fste_ceTimesPhasor_real_pos 0
+#define reg_fste_ceTimesPhasor_real_len 1
+#define reg_fste_ceTimesPhasor_real_lsb 0
+#define xd_p_reg_fste_ceTimesPhasor_imag (*(volatile byte xdata *) 0xF5A2)
+#define p_reg_fste_ceTimesPhasor_imag 0xF5A2
+#define reg_fste_ceTimesPhasor_imag_pos 0
+#define reg_fste_ceTimesPhasor_imag_len 1
+#define reg_fste_ceTimesPhasor_imag_lsb 0
+#define xd_p_reg_fste_cerTimesW_real (*(volatile byte xdata *) 0xF5A3)
+#define p_reg_fste_cerTimesW_real 0xF5A3
+#define reg_fste_cerTimesW_real_pos 0
+#define reg_fste_cerTimesW_real_len 1
+#define reg_fste_cerTimesW_real_lsb 0
+#define xd_p_reg_fste_cerTimesW_imag (*(volatile byte xdata *) 0xF5A4)
+#define p_reg_fste_cerTimesW_imag 0xF5A4
+#define reg_fste_cerTimesW_imag_pos 0
+#define reg_fste_cerTimesW_imag_len 1
+#define reg_fste_cerTimesW_imag_lsb 0
+#define xd_p_reg_fste_cerTimesWAccum_real (*(volatile byte xdata *) 0xF5A5)
+#define p_reg_fste_cerTimesWAccum_real 0xF5A5
+#define reg_fste_cerTimesWAccum_real_pos 0
+#define reg_fste_cerTimesWAccum_real_len 1
+#define reg_fste_cerTimesWAccum_real_lsb 0
+#define xd_p_reg_fste_cerTimesWAccum_imag (*(volatile byte xdata *) 0xF5A6)
+#define p_reg_fste_cerTimesWAccum_imag 0xF5A6
+#define reg_fste_cerTimesWAccum_imag_pos 0
+#define reg_fste_cerTimesWAccum_imag_len 1
+#define reg_fste_cerTimesWAccum_imag_lsb 0
+#define xd_p_reg_fste_cost (*(volatile byte xdata *) 0xF5A7)
+#define p_reg_fste_cost 0xF5A7
+#define reg_fste_cost_pos 0
+#define reg_fste_cost_len 1
+#define reg_fste_cost_lsb 0
+#define xd_p_fd_tpsd_en (*(volatile byte xdata *) 0xF5A8)
+#define p_fd_tpsd_en 0xF5A8
+#define fd_tpsd_en_pos 0
+#define fd_tpsd_en_len 1
+#define fd_tpsd_en_lsb 0
+#define xd_p_fd_tpsd_lock (*(volatile byte xdata *) 0xF5A9)
+#define p_fd_tpsd_lock 0xF5A9
+#define fd_tpsd_lock_pos 0
+#define fd_tpsd_lock_len 1
+#define fd_tpsd_lock_lsb 0
+#define xd_r_fd_tpsd_s19 (*(volatile byte xdata *) 0xF5AA)
+#define r_fd_tpsd_s19 0xF5AA
+#define fd_tpsd_s19_pos 0
+#define fd_tpsd_s19_len 1
+#define fd_tpsd_s19_lsb 0
+#define xd_r_fd_tpsd_s17 (*(volatile byte xdata *) 0xF5AB)
+#define r_fd_tpsd_s17 0xF5AB
+#define fd_tpsd_s17_pos 0
+#define fd_tpsd_s17_len 1
+#define fd_tpsd_s17_lsb 0
+#define xd_p_fd_sfr_ste_en (*(volatile byte xdata *) 0xF5AC)
+#define p_fd_sfr_ste_en 0xF5AC
+#define fd_sfr_ste_en_pos 0
+#define fd_sfr_ste_en_len 1
+#define fd_sfr_ste_en_lsb 0
+#define xd_p_fd_sfr_ste_mode (*(volatile byte xdata *) 0xF5AD)
+#define p_fd_sfr_ste_mode 0xF5AD
+#define fd_sfr_ste_mode_pos 0
+#define fd_sfr_ste_mode_len 2
+#define fd_sfr_ste_mode_lsb 0
+#define xd_p_fd_sfr_ste_done (*(volatile byte xdata *) 0xF5AE)
+#define p_fd_sfr_ste_done 0xF5AE
+#define fd_sfr_ste_done_pos 0
+#define fd_sfr_ste_done_len 1
+#define fd_sfr_ste_done_lsb 0
+#define xd_p_reg_cfoe_ffoe_en (*(volatile byte xdata *) 0xF5AF)
+#define p_reg_cfoe_ffoe_en 0xF5AF
+#define reg_cfoe_ffoe_en_pos 0
+#define reg_cfoe_ffoe_en_len 1
+#define reg_cfoe_ffoe_en_lsb 0
+#define xd_p_reg_cfoe_ifoe_en (*(volatile byte xdata *) 0xF5B0)
+#define p_reg_cfoe_ifoe_en 0xF5B0
+#define reg_cfoe_ifoe_en_pos 0
+#define reg_cfoe_ifoe_en_len 1
+#define reg_cfoe_ifoe_en_lsb 0
+#define xd_p_reg_cfoe_fot_en (*(volatile byte xdata *) 0xF5B1)
+#define p_reg_cfoe_fot_en 0xF5B1
+#define reg_cfoe_fot_en_pos 0
+#define reg_cfoe_fot_en_len 1
+#define reg_cfoe_fot_en_lsb 0
+#define xd_p_reg_cfoe_fot_lm_en (*(volatile byte xdata *) 0xF5B2)
+#define p_reg_cfoe_fot_lm_en 0xF5B2
+#define reg_cfoe_fot_lm_en_pos 0
+#define reg_cfoe_fot_lm_en_len 1
+#define reg_cfoe_fot_lm_en_lsb 0
+#define xd_p_reg_cfoe_fot_rst (*(volatile byte xdata *) 0xF5B3)
+#define p_reg_cfoe_fot_rst 0xF5B3
+#define reg_cfoe_fot_rst_pos 0
+#define reg_cfoe_fot_rst_len 1
+#define reg_cfoe_fot_rst_lsb 0
+#define xd_r_fd_cfoe_ffoe_done (*(volatile byte xdata *) 0xF5B4)
+#define r_fd_cfoe_ffoe_done 0xF5B4
+#define fd_cfoe_ffoe_done_pos 0
+#define fd_cfoe_ffoe_done_len 1
+#define fd_cfoe_ffoe_done_lsb 0
+#define xd_p_fd_cfoe_metric_vld (*(volatile byte xdata *) 0xF5B5)
+#define p_fd_cfoe_metric_vld 0xF5B5
+#define fd_cfoe_metric_vld_pos 0
+#define fd_cfoe_metric_vld_len 1
+#define fd_cfoe_metric_vld_lsb 0
+#define xd_p_reg_cfoe_ifod_vld (*(volatile byte xdata *) 0xF5B6)
+#define p_reg_cfoe_ifod_vld 0xF5B6
+#define reg_cfoe_ifod_vld_pos 0
+#define reg_cfoe_ifod_vld_len 1
+#define reg_cfoe_ifod_vld_lsb 0
+#define xd_r_fd_cfoe_ifoe_done (*(volatile byte xdata *) 0xF5B7)
+#define r_fd_cfoe_ifoe_done 0xF5B7
+#define fd_cfoe_ifoe_done_pos 0
+#define fd_cfoe_ifoe_done_len 1
+#define fd_cfoe_ifoe_done_lsb 0
+#define xd_p_reg_cfoe_ifoe_spec_inv (*(volatile byte xdata *) 0xF5B8)
+#define p_reg_cfoe_ifoe_spec_inv 0xF5B8
+#define reg_cfoe_ifoe_spec_inv_pos 0
+#define reg_cfoe_ifoe_spec_inv_len 1
+#define reg_cfoe_ifoe_spec_inv_lsb 0
+#define xd_p_reg_cfoe_divg_int (*(volatile byte xdata *) 0xF5B9)
+#define p_reg_cfoe_divg_int 0xF5B9
+#define reg_cfoe_divg_int_pos 0
+#define reg_cfoe_divg_int_len 1
+#define reg_cfoe_divg_int_lsb 0
+#define xd_r_reg_cfoe_divg_flag (*(volatile byte xdata *) 0xF5BA)
+#define r_reg_cfoe_divg_flag 0xF5BA
+#define reg_cfoe_divg_flag_pos 0
+#define reg_cfoe_divg_flag_len 1
+#define reg_cfoe_divg_flag_lsb 0
+#define xd_p_reg_sfoe_en (*(volatile byte xdata *) 0xF5BB)
+#define p_reg_sfoe_en 0xF5BB
+#define reg_sfoe_en_pos 0
+#define reg_sfoe_en_len 1
+#define reg_sfoe_en_lsb 0
+#define xd_p_reg_sfoe_dis (*(volatile byte xdata *) 0xF5BC)
+#define p_reg_sfoe_dis 0xF5BC
+#define reg_sfoe_dis_pos 0
+#define reg_sfoe_dis_len 1
+#define reg_sfoe_dis_lsb 0
+#define xd_p_reg_sfoe_rst (*(volatile byte xdata *) 0xF5BD)
+#define p_reg_sfoe_rst 0xF5BD
+#define reg_sfoe_rst_pos 0
+#define reg_sfoe_rst_len 1
+#define reg_sfoe_rst_lsb 0
+#define xd_p_reg_sfoe_vld_int (*(volatile byte xdata *) 0xF5BE)
+#define p_reg_sfoe_vld_int 0xF5BE
+#define reg_sfoe_vld_int_pos 0
+#define reg_sfoe_vld_int_len 1
+#define reg_sfoe_vld_int_lsb 0
+#define xd_p_reg_sfoe_lm_en (*(volatile byte xdata *) 0xF5BF)
+#define p_reg_sfoe_lm_en 0xF5BF
+#define reg_sfoe_lm_en_pos 0
+#define reg_sfoe_lm_en_len 1
+#define reg_sfoe_lm_en_lsb 0
+#define xd_p_reg_sfoe_divg_int (*(volatile byte xdata *) 0xF5C0)
+#define p_reg_sfoe_divg_int 0xF5C0
+#define reg_sfoe_divg_int_pos 0
+#define reg_sfoe_divg_int_len 1
+#define reg_sfoe_divg_int_lsb 0
+#define xd_r_reg_sfoe_divg_flag (*(volatile byte xdata *) 0xF5C1)
+#define r_reg_sfoe_divg_flag 0xF5C1
+#define reg_sfoe_divg_flag_pos 0
+#define reg_sfoe_divg_flag_len 1
+#define reg_sfoe_divg_flag_lsb 0
+#define xd_p_reg_fft_rst (*(volatile byte xdata *) 0xF5C2)
+#define p_reg_fft_rst 0xF5C2
+#define reg_fft_rst_pos 0
+#define reg_fft_rst_len 1
+#define reg_fft_rst_lsb 0
+#define xd_p_reg_fft_mask2_en (*(volatile byte xdata *) 0xF5C3)
+#define p_reg_fft_mask2_en 0xF5C3
+#define reg_fft_mask2_en_pos 0
+#define reg_fft_mask2_en_len 1
+#define reg_fft_mask2_en_lsb 0
+#define xd_p_reg_fft_mask3_en (*(volatile byte xdata *) 0xF5C4)
+#define p_reg_fft_mask3_en 0xF5C4
+#define reg_fft_mask3_en_pos 0
+#define reg_fft_mask3_en_len 1
+#define reg_fft_mask3_en_lsb 0
+#define xd_p_reg_fft_crc_en (*(volatile byte xdata *) 0xF5C5)
+#define p_reg_fft_crc_en 0xF5C5
+#define reg_fft_crc_en_pos 0
+#define reg_fft_crc_en_len 1
+#define reg_fft_crc_en_lsb 0
+#define xd_p_reg_fft_mask0_en (*(volatile byte xdata *) 0xF5C6)
+#define p_reg_fft_mask0_en 0xF5C6
+#define reg_fft_mask0_en_pos 0
+#define reg_fft_mask0_en_len 1
+#define reg_fft_mask0_en_lsb 0
+#define xd_p_reg_fft_mask1_en (*(volatile byte xdata *) 0xF5C7)
+#define p_reg_fft_mask1_en 0xF5C7
+#define reg_fft_mask1_en_pos 0
+#define reg_fft_mask1_en_len 1
+#define reg_fft_mask1_en_lsb 0
+#define xd_p_fd_fste_en (*(volatile byte xdata *) 0xF5C8)
+#define p_fd_fste_en 0xF5C8
+#define fd_fste_en_pos 0
+#define fd_fste_en_len 1
+#define fd_fste_en_lsb 0
+#define xd_p_reg_feq_eh2_comp_en (*(volatile byte xdata *) 0xF5C9)
+#define p_reg_feq_eh2_comp_en 0xF5C9
+#define reg_feq_eh2_comp_en_pos 0
+#define reg_feq_eh2_comp_en_len 1
+#define reg_feq_eh2_comp_en_lsb 0
+#define xd_p_reg_feq_read_update (*(volatile byte xdata *) 0xF5CA)
+#define p_reg_feq_read_update 0xF5CA
+#define reg_feq_read_update_pos 0
+#define reg_feq_read_update_len 1
+#define reg_feq_read_update_lsb 0
+#define xd_p_reg_feq_data_vld (*(volatile byte xdata *) 0xF5CB)
+#define p_reg_feq_data_vld 0xF5CB
+#define reg_feq_data_vld_pos 0
+#define reg_feq_data_vld_len 1
+#define reg_feq_data_vld_lsb 0
+#define xd_p_reg_feq_tone_idx_7_0 (*(volatile byte xdata *) 0xF5CC)
+#define p_reg_feq_tone_idx_7_0 0xF5CC
+#define reg_feq_tone_idx_7_0_pos 0
+#define reg_feq_tone_idx_7_0_len 8
+#define reg_feq_tone_idx_7_0_lsb 0
+#define xd_p_reg_feq_tone_idx_12_8 (*(volatile byte xdata *) 0xF5CD)
+#define p_reg_feq_tone_idx_12_8 0xF5CD
+#define reg_feq_tone_idx_12_8_pos 0
+#define reg_feq_tone_idx_12_8_len 5
+#define reg_feq_tone_idx_12_8_lsb 8
+#define xd_r_reg_feq_data_re_7_0 (*(volatile byte xdata *) 0xF5CE)
+#define r_reg_feq_data_re_7_0 0xF5CE
+#define reg_feq_data_re_7_0_pos 0
+#define reg_feq_data_re_7_0_len 8
+#define reg_feq_data_re_7_0_lsb 0
+#define xd_r_reg_feq_data_re_15_8 (*(volatile byte xdata *) 0xF5CF)
+#define r_reg_feq_data_re_15_8 0xF5CF
+#define reg_feq_data_re_15_8_pos 0
+#define reg_feq_data_re_15_8_len 8
+#define reg_feq_data_re_15_8_lsb 8
+#define xd_r_reg_feq_data_re_21_16 (*(volatile byte xdata *) 0xF5D0)
+#define r_reg_feq_data_re_21_16 0xF5D0
+#define reg_feq_data_re_21_16_pos 0
+#define reg_feq_data_re_21_16_len 6
+#define reg_feq_data_re_21_16_lsb 16
+#define xd_r_reg_feq_data_im_7_0 (*(volatile byte xdata *) 0xF5D1)
+#define r_reg_feq_data_im_7_0 0xF5D1
+#define reg_feq_data_im_7_0_pos 0
+#define reg_feq_data_im_7_0_len 8
+#define reg_feq_data_im_7_0_lsb 0
+#define xd_r_reg_feq_data_im_15_8 (*(volatile byte xdata *) 0xF5D2)
+#define r_reg_feq_data_im_15_8 0xF5D2
+#define reg_feq_data_im_15_8_pos 0
+#define reg_feq_data_im_15_8_len 8
+#define reg_feq_data_im_15_8_lsb 8
+#define xd_r_reg_feq_data_im_21_16 (*(volatile byte xdata *) 0xF5D3)
+#define r_reg_feq_data_im_21_16 0xF5D3
+#define reg_feq_data_im_21_16_pos 0
+#define reg_feq_data_im_21_16_len 6
+#define reg_feq_data_im_21_16_lsb 16
+#define xd_r_reg_feq_data_h2_7_0 (*(volatile byte xdata *) 0xF5D4)
+#define r_reg_feq_data_h2_7_0 0xF5D4
+#define reg_feq_data_h2_7_0_pos 0
+#define reg_feq_data_h2_7_0_len 8
+#define reg_feq_data_h2_7_0_lsb 0
+#define xd_r_reg_feq_data_h2_15_8 (*(volatile byte xdata *) 0xF5D5)
+#define r_reg_feq_data_h2_15_8 0xF5D5
+#define reg_feq_data_h2_15_8_pos 0
+#define reg_feq_data_h2_15_8_len 8
+#define reg_feq_data_h2_15_8_lsb 8
+#define xd_r_reg_feq_data_h2_18_16 (*(volatile byte xdata *) 0xF5D6)
+#define r_reg_feq_data_h2_18_16 0xF5D6
+#define reg_feq_data_h2_18_16_pos 0
+#define reg_feq_data_h2_18_16_len 3
+#define reg_feq_data_h2_18_16_lsb 16
+#define xd_p_reg_fs_en (*(volatile byte xdata *) 0xF5D7)
+#define p_reg_fs_en 0xF5D7
+#define reg_fs_en_pos 0
+#define reg_fs_en_len 1
+#define reg_fs_en_lsb 0
+#define xd_p_reg_fs_offset (*(volatile byte xdata *) 0xF5D8)
+#define p_reg_fs_offset 0xF5D8
+#define reg_fs_offset_pos 0
+#define reg_fs_offset_len 3
+#define reg_fs_offset_lsb 0
+#define xd_p_reg_fs_debug (*(volatile byte xdata *) 0xF5D9)
+#define p_reg_fs_debug 0xF5D9
+#define reg_fs_debug_pos 0
+#define reg_fs_debug_len 1
+#define reg_fs_debug_lsb 0
+#define xd_p_reg_fs_half_inv (*(volatile byte xdata *) 0xF5DA)
+#define p_reg_fs_half_inv 0xF5DA
+#define reg_fs_half_inv_pos 0
+#define reg_fs_half_inv_len 1
+#define reg_fs_half_inv_lsb 0
+#define xd_p_reg_cdpf_currentfftposition_7_0 (*(volatile byte xdata *) 0xF5DB)
+#define p_reg_cdpf_currentfftposition_7_0 0xF5DB
+#define reg_cdpf_currentfftposition_7_0_pos 0
+#define reg_cdpf_currentfftposition_7_0_len 8
+#define reg_cdpf_currentfftposition_7_0_lsb 0
+#define xd_p_reg_cdpf_currentfftposition_14_8 (*(volatile byte xdata *) 0xF5DC)
+#define p_reg_cdpf_currentfftposition_14_8 0xF5DC
+#define reg_cdpf_currentfftposition_14_8_pos 0
+#define reg_cdpf_currentfftposition_14_8_len 7
+#define reg_cdpf_currentfftposition_14_8_lsb 8
+#define xd_r_reg_cdpf_fftshift_7_0 (*(volatile byte xdata *) 0xF5DD)
+#define r_reg_cdpf_fftshift_7_0 0xF5DD
+#define reg_cdpf_fftshift_7_0_pos 0
+#define reg_cdpf_fftshift_7_0_len 8
+#define reg_cdpf_fftshift_7_0_lsb 0
+#define xd_r_reg_cdpf_fftshift_13_8 (*(volatile byte xdata *) 0xF5DE)
+#define r_reg_cdpf_fftshift_13_8 0xF5DE
+#define reg_cdpf_fftshift_13_8_pos 0
+#define reg_cdpf_fftshift_13_8_len 6
+#define reg_cdpf_fftshift_13_8_lsb 8
+#define xd_p_reg_cdpf_channelpowerdown_7_0 (*(volatile byte xdata *) 0xF5DF)
+#define p_reg_cdpf_channelpowerdown_7_0 0xF5DF
+#define reg_cdpf_channelpowerdown_7_0_pos 0
+#define reg_cdpf_channelpowerdown_7_0_len 8
+#define reg_cdpf_channelpowerdown_7_0_lsb 0
+#define xd_p_reg_cdpf_channelpowerdown_10_8 (*(volatile byte xdata *) 0xF5E0)
+#define p_reg_cdpf_channelpowerdown_10_8 0xF5E0
+#define reg_cdpf_channelpowerdown_10_8_pos 0
+#define reg_cdpf_channelpowerdown_10_8_len 3
+#define reg_cdpf_channelpowerdown_10_8_lsb 8
+#define xd_p_reg_cdpf_state (*(volatile byte xdata *) 0xF5E1)
+#define p_reg_cdpf_state 0xF5E1
+#define reg_cdpf_state_pos 0
+#define reg_cdpf_state_len 4
+#define reg_cdpf_state_lsb 0
+#define xd_p_reg_cdpf_echotestsearchingrange (*(volatile byte xdata *) 0xF5E2)
+#define p_reg_cdpf_echotestsearchingrange 0xF5E2
+#define reg_cdpf_echotestsearchingrange_pos 0
+#define reg_cdpf_echotestsearchingrange_len 8
+#define reg_cdpf_echotestsearchingrange_lsb 0
+#define xd_p_reg_cdpf_rxsymboldelay (*(volatile byte xdata *) 0xF5E3)
+#define p_reg_cdpf_rxsymboldelay 0xF5E3
+#define reg_cdpf_rxsymboldelay_pos 0
+#define reg_cdpf_rxsymboldelay_len 4
+#define reg_cdpf_rxsymboldelay_lsb 0
+#define xd_p_reg_cdpf_ceavesymbolno (*(volatile byte xdata *) 0xF5E4)
+#define p_reg_cdpf_ceavesymbolno 0xF5E4
+#define reg_cdpf_ceavesymbolno_pos 0
+#define reg_cdpf_ceavesymbolno_len 4
+#define reg_cdpf_ceavesymbolno_lsb 0
+#define xd_p_reg_cdpf_ceshift (*(volatile byte xdata *) 0xF5E5)
+#define p_reg_cdpf_ceshift 0xF5E5
+#define reg_cdpf_ceshift_pos 0
+#define reg_cdpf_ceshift_len 3
+#define reg_cdpf_ceshift_lsb 0
+#define xd_p_reg_cdpf_postpreechotry (*(volatile byte xdata *) 0xF5E6)
+#define p_reg_cdpf_postpreechotry 0xF5E6
+#define reg_cdpf_postpreechotry_pos 0
+#define reg_cdpf_postpreechotry_len 2
+#define reg_cdpf_postpreechotry_lsb 0
+#define xd_p_reg_cdpf_en (*(volatile byte xdata *) 0xF5E7)
+#define p_reg_cdpf_en 0xF5E7
+#define reg_cdpf_en_pos 0
+#define reg_cdpf_en_len 1
+#define reg_cdpf_en_lsb 0
+#define xd_p_reg_cdpf_stateready (*(volatile byte xdata *) 0xF5E8)
+#define p_reg_cdpf_stateready 0xF5E8
+#define reg_cdpf_stateready_pos 0
+#define reg_cdpf_stateready_len 1
+#define reg_cdpf_stateready_lsb 0
+#define xd_r_reg_cdpf_prepostpowercompare (*(volatile byte xdata *) 0xF5E9)
+#define r_reg_cdpf_prepostpowercompare 0xF5E9
+#define reg_cdpf_prepostpowercompare_pos 0
+#define reg_cdpf_prepostpowercompare_len 1
+#define reg_cdpf_prepostpowercompare_lsb 0
+#define xd_r_reg_cdpf_candidateno (*(volatile byte xdata *) 0xF5EA)
+#define r_reg_cdpf_candidateno 0xF5EA
+#define reg_cdpf_candidateno_pos 0
+#define reg_cdpf_candidateno_len 6
+#define reg_cdpf_candidateno_lsb 0
+#define xd_p_reg_cdpf_preechopower_7_0 (*(volatile byte xdata *) 0xF5EB)
+#define p_reg_cdpf_preechopower_7_0 0xF5EB
+#define reg_cdpf_preechopower_7_0_pos 0
+#define reg_cdpf_preechopower_7_0_len 8
+#define reg_cdpf_preechopower_7_0_lsb 0
+#define xd_p_reg_cdpf_preechopower_15_8 (*(volatile byte xdata *) 0xF5EC)
+#define p_reg_cdpf_preechopower_15_8 0xF5EC
+#define reg_cdpf_preechopower_15_8_pos 0
+#define reg_cdpf_preechopower_15_8_len 8
+#define reg_cdpf_preechopower_15_8_lsb 8
+#define xd_p_reg_cdpf_postechopower_7_0 (*(volatile byte xdata *) 0xF5ED)
+#define p_reg_cdpf_postechopower_7_0 0xF5ED
+#define reg_cdpf_postechopower_7_0_pos 0
+#define reg_cdpf_postechopower_7_0_len 8
+#define reg_cdpf_postechopower_7_0_lsb 0
+#define xd_p_reg_cdpf_postechopower_15_8 (*(volatile byte xdata *) 0xF5EE)
+#define p_reg_cdpf_postechopower_15_8 0xF5EE
+#define reg_cdpf_postechopower_15_8_pos 0
+#define reg_cdpf_postechopower_15_8_len 8
+#define reg_cdpf_postechopower_15_8_lsb 8
+#define xd_p_reg_cdpf_searchingend (*(volatile byte xdata *) 0xF5EF)
+#define p_reg_cdpf_searchingend 0xF5EF
+#define reg_cdpf_searchingend_pos 0
+#define reg_cdpf_searchingend_len 8
+#define reg_cdpf_searchingend_lsb 0
+#define xd_r_reg_cdpf_candidate_7_0 (*(volatile byte xdata *) 0xF5F0)
+#define r_reg_cdpf_candidate_7_0 0xF5F0
+#define reg_cdpf_candidate_7_0_pos 0
+#define reg_cdpf_candidate_7_0_len 8
+#define reg_cdpf_candidate_7_0_lsb 0
+#define xd_r_reg_cdpf_candidate_15_8 (*(volatile byte xdata *) 0xF5F1)
+#define r_reg_cdpf_candidate_15_8 0xF5F1
+#define reg_cdpf_candidate_15_8_pos 0
+#define reg_cdpf_candidate_15_8_len 8
+#define reg_cdpf_candidate_15_8_lsb 8
+#define xd_p_reg_cdpf_candidate_rptr (*(volatile byte xdata *) 0xF5F2)
+#define p_reg_cdpf_candidate_rptr 0xF5F2
+#define reg_cdpf_candidate_rptr_pos 0
+#define reg_cdpf_candidate_rptr_len 7
+#define reg_cdpf_candidate_rptr_lsb 0
+#define xd_p_reg_cdpf_candidate_rptr_force (*(volatile byte xdata *) 0xF5F3)
+#define p_reg_cdpf_candidate_rptr_force 0xF5F3
+#define reg_cdpf_candidate_rptr_force_pos 0
+#define reg_cdpf_candidate_rptr_force_len 1
+#define reg_cdpf_candidate_rptr_force_lsb 0
+#define xd_p_reg_cdpf_trialshiftoffset_7_0 (*(volatile byte xdata *) 0xF5F4)
+#define p_reg_cdpf_trialshiftoffset_7_0 0xF5F4
+#define reg_cdpf_trialshiftoffset_7_0_pos 0
+#define reg_cdpf_trialshiftoffset_7_0_len 8
+#define reg_cdpf_trialshiftoffset_7_0_lsb 0
+#define xd_p_reg_cdpf_trialshiftoffset_13_8 (*(volatile byte xdata *) 0xF5F5)
+#define p_reg_cdpf_trialshiftoffset_13_8 0xF5F5
+#define reg_cdpf_trialshiftoffset_13_8_pos 0
+#define reg_cdpf_trialshiftoffset_13_8_len 6
+#define reg_cdpf_trialshiftoffset_13_8_lsb 8
+#define xd_p_reg_cdpf_channellength_7_0 (*(volatile byte xdata *) 0xF5F6)
+#define p_reg_cdpf_channellength_7_0 0xF5F6
+#define reg_cdpf_channellength_7_0_pos 0
+#define reg_cdpf_channellength_7_0_len 8
+#define reg_cdpf_channellength_7_0_lsb 0
+#define xd_p_reg_cdpf_channellength_12_8 (*(volatile byte xdata *) 0xF5F7)
+#define p_reg_cdpf_channellength_12_8 0xF5F7
+#define reg_cdpf_channellength_12_8_pos 0
+#define reg_cdpf_channellength_12_8_len 5
+#define reg_cdpf_channellength_12_8_lsb 8
+#define xd_p_reg_cdpf_hardwaresort (*(volatile byte xdata *) 0xF5F8)
+#define p_reg_cdpf_hardwaresort 0xF5F8
+#define reg_cdpf_hardwaresort_pos 0
+#define reg_cdpf_hardwaresort_len 1
+#define reg_cdpf_hardwaresort_lsb 0
+#define xd_p_reg_cdpf_maxcandidateno (*(volatile byte xdata *) 0xF5F9)
+#define p_reg_cdpf_maxcandidateno 0xF5F9
+#define reg_cdpf_maxcandidateno_pos 0
+#define reg_cdpf_maxcandidateno_len 3
+#define reg_cdpf_maxcandidateno_lsb 0
+#define xd_p_reg_cdpf_channelleftindex (*(volatile byte xdata *) 0xF5FA)
+#define p_reg_cdpf_channelleftindex 0xF5FA
+#define reg_cdpf_channelleftindex_pos 0
+#define reg_cdpf_channelleftindex_len 4
+#define reg_cdpf_channelleftindex_lsb 0
+#define xd_r_reg_cdpf_fdishift_7_0 (*(volatile byte xdata *) 0xF5FB)
+#define r_reg_cdpf_fdishift_7_0 0xF5FB
+#define reg_cdpf_fdishift_7_0_pos 0
+#define reg_cdpf_fdishift_7_0_len 8
+#define reg_cdpf_fdishift_7_0_lsb 0
+#define xd_r_reg_cdpf_fdishift_15_8 (*(volatile byte xdata *) 0xF5FC)
+#define r_reg_cdpf_fdishift_15_8 0xF5FC
+#define reg_cdpf_fdishift_15_8_pos 0
+#define reg_cdpf_fdishift_15_8_len 8
+#define reg_cdpf_fdishift_15_8_lsb 8
+#define xd_p_reg_cdpf_guardband (*(volatile byte xdata *) 0xF5FD)
+#define p_reg_cdpf_guardband 0xF5FD
+#define reg_cdpf_guardband_pos 0
+#define reg_cdpf_guardband_len 5
+#define reg_cdpf_guardband_lsb 0
+#define xd_p_reg_cdpf_maxtonemaxindex_7_0 (*(volatile byte xdata *) 0xF5FE)
+#define p_reg_cdpf_maxtonemaxindex_7_0 0xF5FE
+#define reg_cdpf_maxtonemaxindex_7_0_pos 0
+#define reg_cdpf_maxtonemaxindex_7_0_len 8
+#define reg_cdpf_maxtonemaxindex_7_0_lsb 0
+#define xd_p_reg_cdpf_maxtonemaxindex_12_8 (*(volatile byte xdata *) 0xF5FF)
+#define p_reg_cdpf_maxtonemaxindex_12_8 0xF5FF
+#define reg_cdpf_maxtonemaxindex_12_8_pos 0
+#define reg_cdpf_maxtonemaxindex_12_8_len 5
+#define reg_cdpf_maxtonemaxindex_12_8_lsb 8
+#define xd_p_reg_cdpf_fdiw0 (*(volatile byte xdata *) 0xF600)
+#define p_reg_cdpf_fdiw0 0xF600
+#define reg_cdpf_fdiw0_pos 0
+#define reg_cdpf_fdiw0_len 7
+#define reg_cdpf_fdiw0_lsb 0
+#define xd_p_reg_cdpf_fdiw1 (*(volatile byte xdata *) 0xF601)
+#define p_reg_cdpf_fdiw1 0xF601
+#define reg_cdpf_fdiw1_pos 0
+#define reg_cdpf_fdiw1_len 7
+#define reg_cdpf_fdiw1_lsb 0
+#define xd_p_reg_cdpf_fdiw2 (*(volatile byte xdata *) 0xF602)
+#define p_reg_cdpf_fdiw2 0xF602
+#define reg_cdpf_fdiw2_pos 0
+#define reg_cdpf_fdiw2_len 7
+#define reg_cdpf_fdiw2_lsb 0
+#define xd_p_reg_cdpf_fdiw3 (*(volatile byte xdata *) 0xF603)
+#define p_reg_cdpf_fdiw3 0xF603
+#define reg_cdpf_fdiw3_pos 0
+#define reg_cdpf_fdiw3_len 7
+#define reg_cdpf_fdiw3_lsb 0
+#define xd_p_reg_cdpf_fdiw4 (*(volatile byte xdata *) 0xF604)
+#define p_reg_cdpf_fdiw4 0xF604
+#define reg_cdpf_fdiw4_pos 0
+#define reg_cdpf_fdiw4_len 7
+#define reg_cdpf_fdiw4_lsb 0
+#define xd_p_reg_cdpf_fdiw5 (*(volatile byte xdata *) 0xF605)
+#define p_reg_cdpf_fdiw5 0xF605
+#define reg_cdpf_fdiw5_pos 0
+#define reg_cdpf_fdiw5_len 7
+#define reg_cdpf_fdiw5_lsb 0
+#define xd_p_reg_cdpf_fdiw6 (*(volatile byte xdata *) 0xF606)
+#define p_reg_cdpf_fdiw6 0xF606
+#define reg_cdpf_fdiw6_pos 0
+#define reg_cdpf_fdiw6_len 7
+#define reg_cdpf_fdiw6_lsb 0
+#define xd_p_reg_cdpf_fdiw7 (*(volatile byte xdata *) 0xF607)
+#define p_reg_cdpf_fdiw7 0xF607
+#define reg_cdpf_fdiw7_pos 0
+#define reg_cdpf_fdiw7_len 7
+#define reg_cdpf_fdiw7_lsb 0
+#define xd_r_reg_cdpf_fdiwindowsize (*(volatile byte xdata *) 0xF608)
+#define r_reg_cdpf_fdiwindowsize 0xF608
+#define reg_cdpf_fdiwindowsize_pos 0
+#define reg_cdpf_fdiwindowsize_len 4
+#define reg_cdpf_fdiwindowsize_lsb 0
+#define xd_p_reg_stes_mode (*(volatile byte xdata *) 0xF609)
+#define p_reg_stes_mode 0xF609
+#define reg_stes_mode_pos 0
+#define reg_stes_mode_len 1
+#define reg_stes_mode_lsb 0
+#define xd_p_reg_stes_done_st (*(volatile byte xdata *) 0xF60A)
+#define p_reg_stes_done_st 0xF60A
+#define reg_stes_done_st_pos 0
+#define reg_stes_done_st_len 2
+#define reg_stes_done_st_lsb 0
+#define xd_p_reg_stes_done (*(volatile byte xdata *) 0xF60B)
+#define p_reg_stes_done 0xF60B
+#define reg_stes_done_pos 0
+#define reg_stes_done_len 1
+#define reg_stes_done_lsb 0
+#define xd_p_reg_stes_timing_7_0 (*(volatile byte xdata *) 0xF60C)
+#define p_reg_stes_timing_7_0 0xF60C
+#define reg_stes_timing_7_0_pos 0
+#define reg_stes_timing_7_0_len 8
+#define reg_stes_timing_7_0_lsb 0
+#define xd_p_reg_stes_timing_15_8 (*(volatile byte xdata *) 0xF60D)
+#define p_reg_stes_timing_15_8 0xF60D
+#define reg_stes_timing_15_8_pos 0
+#define reg_stes_timing_15_8_len 8
+#define reg_stes_timing_15_8_lsb 8
+#define xd_p_reg_stes_sym_tot_adj_thre_7_0 (*(volatile byte xdata *) 0xF60E)
+#define p_reg_stes_sym_tot_adj_thre_7_0 0xF60E
+#define reg_stes_sym_tot_adj_thre_7_0_pos 0
+#define reg_stes_sym_tot_adj_thre_7_0_len 8
+#define reg_stes_sym_tot_adj_thre_7_0_lsb 0
+#define xd_p_reg_stes_sym_tot_adj_thre_15_8 (*(volatile byte xdata *) 0xF60F)
+#define p_reg_stes_sym_tot_adj_thre_15_8 0xF60F
+#define reg_stes_sym_tot_adj_thre_15_8_pos 0
+#define reg_stes_sym_tot_adj_thre_15_8_len 8
+#define reg_stes_sym_tot_adj_thre_15_8_lsb 8
+#define xd_p_reg_stes_sym_thre_9_2 (*(volatile byte xdata *) 0xF610)
+#define p_reg_stes_sym_thre_9_2 0xF610
+#define reg_stes_sym_thre_9_2_pos 0
+#define reg_stes_sym_thre_9_2_len 8
+#define reg_stes_sym_thre_9_2_lsb 0
+#define xd_p_reg_stes_sym_wo_adj_thre_9_2 (*(volatile byte xdata *) 0xF611)
+#define p_reg_stes_sym_wo_adj_thre_9_2 0xF611
+#define reg_stes_sym_wo_adj_thre_9_2_pos 0
+#define reg_stes_sym_wo_adj_thre_9_2_len 8
+#define reg_stes_sym_wo_adj_thre_9_2_lsb 0
+#define xd_p_reg_fste_i_adj_7_0 (*(volatile byte xdata *) 0xF612)
+#define p_reg_fste_i_adj_7_0 0xF612
+#define reg_fste_i_adj_7_0_pos 0
+#define reg_fste_i_adj_7_0_len 8
+#define reg_fste_i_adj_7_0_lsb 0
+#define xd_p_reg_fste_i_adj_15_8 (*(volatile byte xdata *) 0xF613)
+#define p_reg_fste_i_adj_15_8 0xF613
+#define reg_fste_i_adj_15_8_pos 0
+#define reg_fste_i_adj_15_8_len 8
+#define reg_fste_i_adj_15_8_lsb 8
+#define xd_r_fd_stes_iadj_val_7_0 (*(volatile byte xdata *) 0xF614)
+#define r_fd_stes_iadj_val_7_0 0xF614
+#define fd_stes_iadj_val_7_0_pos 0
+#define fd_stes_iadj_val_7_0_len 8
+#define fd_stes_iadj_val_7_0_lsb 0
+#define xd_r_fd_stes_iadj_val_15_8 (*(volatile byte xdata *) 0xF615)
+#define r_fd_stes_iadj_val_15_8 0xF615
+#define fd_stes_iadj_val_15_8_pos 0
+#define fd_stes_iadj_val_15_8_len 8
+#define fd_stes_iadj_val_15_8_lsb 8
+#define xd_r_fd_stes_symb_cnt_9_2 (*(volatile byte xdata *) 0xF616)
+#define r_fd_stes_symb_cnt_9_2 0xF616
+#define fd_stes_symb_cnt_9_2_pos 0
+#define fd_stes_symb_cnt_9_2_len 8
+#define fd_stes_symb_cnt_9_2_lsb 0
+#define xd_r_fd_stes_snoi_cnt_9_2 (*(volatile byte xdata *) 0xF617)
+#define r_fd_stes_snoi_cnt_9_2 0xF617
+#define fd_stes_snoi_cnt_9_2_pos 0
+#define fd_stes_snoi_cnt_9_2_len 8
+#define fd_stes_snoi_cnt_9_2_lsb 0
+#define xd_r_fd_last_iadj_val_7_0 (*(volatile byte xdata *) 0xF618)
+#define r_fd_last_iadj_val_7_0 0xF618
+#define fd_last_iadj_val_7_0_pos 0
+#define fd_last_iadj_val_7_0_len 8
+#define fd_last_iadj_val_7_0_lsb 0
+#define xd_r_fd_last_iadj_val_15_8 (*(volatile byte xdata *) 0xF619)
+#define r_fd_last_iadj_val_15_8 0xF619
+#define fd_last_iadj_val_15_8_pos 0
+#define fd_last_iadj_val_15_8_len 8
+#define fd_last_iadj_val_15_8_lsb 8
+#define xd_p_reg_stes_bypass (*(volatile byte xdata *) 0xF61A)
+#define p_reg_stes_bypass 0xF61A
+#define reg_stes_bypass_pos 0
+#define reg_stes_bypass_len 1
+#define reg_stes_bypass_lsb 0
+#define xd_p_reg_stes_best_timing_idx (*(volatile byte xdata *) 0xF61B)
+#define p_reg_stes_best_timing_idx 0xF61B
+#define reg_stes_best_timing_idx_pos 0
+#define reg_stes_best_timing_idx_len 4
+#define reg_stes_best_timing_idx_lsb 0
+#define xd_p_reg_stes_iadj_val_7_0 (*(volatile byte xdata *) 0xF61C)
+#define p_reg_stes_iadj_val_7_0 0xF61C
+#define reg_stes_iadj_val_7_0_pos 0
+#define reg_stes_iadj_val_7_0_len 8
+#define reg_stes_iadj_val_7_0_lsb 0
+#define xd_p_reg_stes_iadj_val_15_8 (*(volatile byte xdata *) 0xF61D)
+#define p_reg_stes_iadj_val_15_8 0xF61D
+#define reg_stes_iadj_val_15_8_pos 0
+#define reg_stes_iadj_val_15_8_len 8
+#define reg_stes_iadj_val_15_8_lsb 8
+#define xd_p_reg_p_ste_start_guard_7_0 (*(volatile byte xdata *) 0xF620)
+#define p_reg_p_ste_start_guard_7_0 0xF620
+#define reg_p_ste_start_guard_7_0_pos 0
+#define reg_p_ste_start_guard_7_0_len 8
+#define reg_p_ste_start_guard_7_0_lsb 0
+#define xd_p_reg_p_ste_start_guard_9_8 (*(volatile byte xdata *) 0xF621)
+#define p_reg_p_ste_start_guard_9_8 0xF621
+#define reg_p_ste_start_guard_9_8_pos 0
+#define reg_p_ste_start_guard_9_8_len 2
+#define reg_p_ste_start_guard_9_8_lsb 8
+#define xd_p_reg_p_ste_end_guard_7_0 (*(volatile byte xdata *) 0xF622)
+#define p_reg_p_ste_end_guard_7_0 0xF622
+#define reg_p_ste_end_guard_7_0_pos 0
+#define reg_p_ste_end_guard_7_0_len 8
+#define reg_p_ste_end_guard_7_0_lsb 0
+#define xd_p_reg_p_ste_end_guard_9_8 (*(volatile byte xdata *) 0xF623)
+#define p_reg_p_ste_end_guard_9_8 0xF623
+#define reg_p_ste_end_guard_9_8_pos 0
+#define reg_p_ste_end_guard_9_8_len 2
+#define reg_p_ste_end_guard_9_8_lsb 8
+#define xd_r_reg_r_ste_wrong_beacon_count (*(volatile byte xdata *) 0xF624)
+#define r_reg_r_ste_wrong_beacon_count 0xF624
+#define reg_r_ste_wrong_beacon_count_pos 0
+#define reg_r_ste_wrong_beacon_count_len 7
+#define reg_r_ste_wrong_beacon_count_lsb 0
+#define xd_p_reg_p_fccid_en (*(volatile byte xdata *) 0xF625)
+#define p_reg_p_fccid_en 0xF625
+#define reg_p_fccid_en_pos 0
+#define reg_p_fccid_en_len 1
+#define reg_p_fccid_en_lsb 0
+#define xd_p_reg_p_fccid_fft_ave_symbol_num (*(volatile byte xdata *) 0xF626)
+#define p_reg_p_fccid_fft_ave_symbol_num 0xF626
+#define reg_p_fccid_fft_ave_symbol_num_pos 0
+#define reg_p_fccid_fft_ave_symbol_num_len 6
+#define reg_p_fccid_fft_ave_symbol_num_lsb 0
+#define xd_p_reg_p_fccid_fft_work_start_tone_7_0 (*(volatile byte xdata *) 0xF627)
+#define p_reg_p_fccid_fft_work_start_tone_7_0 0xF627
+#define reg_p_fccid_fft_work_start_tone_7_0_pos 0
+#define reg_p_fccid_fft_work_start_tone_7_0_len 8
+#define reg_p_fccid_fft_work_start_tone_7_0_lsb 0
+#define xd_p_reg_p_fccid_fft_work_start_tone_12_8 (*(volatile byte xdata *) 0xF628)
+#define p_reg_p_fccid_fft_work_start_tone_12_8 0xF628
+#define reg_p_fccid_fft_work_start_tone_12_8_pos 0
+#define reg_p_fccid_fft_work_start_tone_12_8_len 5
+#define reg_p_fccid_fft_work_start_tone_12_8_lsb 8
+#define xd_p_reg_p_fccid_fft_work_end_tone_7_0 (*(volatile byte xdata *) 0xF629)
+#define p_reg_p_fccid_fft_work_end_tone_7_0 0xF629
+#define reg_p_fccid_fft_work_end_tone_7_0_pos 0
+#define reg_p_fccid_fft_work_end_tone_7_0_len 8
+#define reg_p_fccid_fft_work_end_tone_7_0_lsb 0
+#define xd_p_reg_p_fccid_fft_work_end_tone_12_8 (*(volatile byte xdata *) 0xF62A)
+#define p_reg_p_fccid_fft_work_end_tone_12_8 0xF62A
+#define reg_p_fccid_fft_work_end_tone_12_8_pos 0
+#define reg_p_fccid_fft_work_end_tone_12_8_len 5
+#define reg_p_fccid_fft_work_end_tone_12_8_lsb 8
+#define xd_p_reg_p_fccid_peak_to_th_divider (*(volatile byte xdata *) 0xF62B)
+#define p_reg_p_fccid_peak_to_th_divider 0xF62B
+#define reg_p_fccid_peak_to_th_divider_pos 0
+#define reg_p_fccid_peak_to_th_divider_len 4
+#define reg_p_fccid_peak_to_th_divider_lsb 0
+#define xd_p_reg_p_fccid_peak_to_th_mode (*(volatile byte xdata *) 0xF62C)
+#define p_reg_p_fccid_peak_to_th_mode 0xF62C
+#define reg_p_fccid_peak_to_th_mode_pos 0
+#define reg_p_fccid_peak_to_th_mode_len 2
+#define reg_p_fccid_peak_to_th_mode_lsb 0
+#define xd_p_reg_p_fccid_search_mode (*(volatile byte xdata *) 0xF62D)
+#define p_reg_p_fccid_search_mode 0xF62D
+#define reg_p_fccid_search_mode_pos 0
+#define reg_p_fccid_search_mode_len 1
+#define reg_p_fccid_search_mode_lsb 0
+#define xd_p_reg_p_fccid_group_th (*(volatile byte xdata *) 0xF62E)
+#define p_reg_p_fccid_group_th 0xF62E
+#define reg_p_fccid_group_th_pos 0
+#define reg_p_fccid_group_th_len 7
+#define reg_p_fccid_group_th_lsb 0
+#define xd_p_reg_p_fccid_search_rdy (*(volatile byte xdata *) 0xF62F)
+#define p_reg_p_fccid_search_rdy 0xF62F
+#define reg_p_fccid_search_rdy_pos 0
+#define reg_p_fccid_search_rdy_len 1
+#define reg_p_fccid_search_rdy_lsb 0
+#define xd_r_reg_r_fccid_fft_ave_read_out_7_0 (*(volatile byte xdata *) 0xF630)
+#define r_reg_r_fccid_fft_ave_read_out_7_0 0xF630
+#define reg_r_fccid_fft_ave_read_out_7_0_pos 0
+#define reg_r_fccid_fft_ave_read_out_7_0_len 8
+#define reg_r_fccid_fft_ave_read_out_7_0_lsb 0
+#define xd_r_reg_r_fccid_fft_ave_read_out_15_8 (*(volatile byte xdata *) 0xF631)
+#define r_reg_r_fccid_fft_ave_read_out_15_8 0xF631
+#define reg_r_fccid_fft_ave_read_out_15_8_pos 0
+#define reg_r_fccid_fft_ave_read_out_15_8_len 8
+#define reg_r_fccid_fft_ave_read_out_15_8_lsb 8
+#define xd_r_reg_r_fccid_large_tone_num_7_0 (*(volatile byte xdata *) 0xF632)
+#define r_reg_r_fccid_large_tone_num_7_0 0xF632
+#define reg_r_fccid_large_tone_num_7_0_pos 0
+#define reg_r_fccid_large_tone_num_7_0_len 8
+#define reg_r_fccid_large_tone_num_7_0_lsb 0
+#define xd_r_reg_r_fccid_large_tone_num_12_8 (*(volatile byte xdata *) 0xF633)
+#define r_reg_r_fccid_large_tone_num_12_8 0xF633
+#define reg_r_fccid_large_tone_num_12_8_pos 0
+#define reg_r_fccid_large_tone_num_12_8_len 5
+#define reg_r_fccid_large_tone_num_12_8_lsb 8
+#define xd_r_reg_r_fccid_cci1_start_tone_7_0 (*(volatile byte xdata *) 0xF634)
+#define r_reg_r_fccid_cci1_start_tone_7_0 0xF634
+#define reg_r_fccid_cci1_start_tone_7_0_pos 0
+#define reg_r_fccid_cci1_start_tone_7_0_len 8
+#define reg_r_fccid_cci1_start_tone_7_0_lsb 0
+#define xd_r_reg_r_fccid_cci1_start_tone_12_8 (*(volatile byte xdata *) 0xF635)
+#define r_reg_r_fccid_cci1_start_tone_12_8 0xF635
+#define reg_r_fccid_cci1_start_tone_12_8_pos 0
+#define reg_r_fccid_cci1_start_tone_12_8_len 5
+#define reg_r_fccid_cci1_start_tone_12_8_lsb 8
+#define xd_r_reg_r_fccid_cci1_end_tone_7_0 (*(volatile byte xdata *) 0xF636)
+#define r_reg_r_fccid_cci1_end_tone_7_0 0xF636
+#define reg_r_fccid_cci1_end_tone_7_0_pos 0
+#define reg_r_fccid_cci1_end_tone_7_0_len 8
+#define reg_r_fccid_cci1_end_tone_7_0_lsb 0
+#define xd_r_reg_r_fccid_cci1_end_tone_12_8 (*(volatile byte xdata *) 0xF637)
+#define r_reg_r_fccid_cci1_end_tone_12_8 0xF637
+#define reg_r_fccid_cci1_end_tone_12_8_pos 0
+#define reg_r_fccid_cci1_end_tone_12_8_len 5
+#define reg_r_fccid_cci1_end_tone_12_8_lsb 8
+#define xd_r_reg_r_fccid_cci1_peak_7_0 (*(volatile byte xdata *) 0xF638)
+#define r_reg_r_fccid_cci1_peak_7_0 0xF638
+#define reg_r_fccid_cci1_peak_7_0_pos 0
+#define reg_r_fccid_cci1_peak_7_0_len 8
+#define reg_r_fccid_cci1_peak_7_0_lsb 0
+#define xd_r_reg_r_fccid_cci1_peak_15_8 (*(volatile byte xdata *) 0xF639)
+#define r_reg_r_fccid_cci1_peak_15_8 0xF639
+#define reg_r_fccid_cci1_peak_15_8_pos 0
+#define reg_r_fccid_cci1_peak_15_8_len 8
+#define reg_r_fccid_cci1_peak_15_8_lsb 8
+#define xd_r_reg_r_fccid_cci2_start_tone_7_0 (*(volatile byte xdata *) 0xF63A)
+#define r_reg_r_fccid_cci2_start_tone_7_0 0xF63A
+#define reg_r_fccid_cci2_start_tone_7_0_pos 0
+#define reg_r_fccid_cci2_start_tone_7_0_len 8
+#define reg_r_fccid_cci2_start_tone_7_0_lsb 0
+#define xd_r_reg_r_fccid_cci2_start_tone_12_8 (*(volatile byte xdata *) 0xF63B)
+#define r_reg_r_fccid_cci2_start_tone_12_8 0xF63B
+#define reg_r_fccid_cci2_start_tone_12_8_pos 0
+#define reg_r_fccid_cci2_start_tone_12_8_len 5
+#define reg_r_fccid_cci2_start_tone_12_8_lsb 8
+#define xd_r_reg_r_fccid_cci2_end_tone_7_0 (*(volatile byte xdata *) 0xF63C)
+#define r_reg_r_fccid_cci2_end_tone_7_0 0xF63C
+#define reg_r_fccid_cci2_end_tone_7_0_pos 0
+#define reg_r_fccid_cci2_end_tone_7_0_len 8
+#define reg_r_fccid_cci2_end_tone_7_0_lsb 0
+#define xd_r_reg_r_fccid_cci2_end_tone_12_8 (*(volatile byte xdata *) 0xF63D)
+#define r_reg_r_fccid_cci2_end_tone_12_8 0xF63D
+#define reg_r_fccid_cci2_end_tone_12_8_pos 0
+#define reg_r_fccid_cci2_end_tone_12_8_len 5
+#define reg_r_fccid_cci2_end_tone_12_8_lsb 8
+#define xd_r_reg_r_fccid_cci2_peak_7_0 (*(volatile byte xdata *) 0xF63E)
+#define r_reg_r_fccid_cci2_peak_7_0 0xF63E
+#define reg_r_fccid_cci2_peak_7_0_pos 0
+#define reg_r_fccid_cci2_peak_7_0_len 8
+#define reg_r_fccid_cci2_peak_7_0_lsb 0
+#define xd_r_reg_r_fccid_cci2_peak_15_8 (*(volatile byte xdata *) 0xF63F)
+#define r_reg_r_fccid_cci2_peak_15_8 0xF63F
+#define reg_r_fccid_cci2_peak_15_8_pos 0
+#define reg_r_fccid_cci2_peak_15_8_len 8
+#define reg_r_fccid_cci2_peak_15_8_lsb 8
+#define xd_r_reg_r_fccid_cci3_start_tone_7_0 (*(volatile byte xdata *) 0xF640)
+#define r_reg_r_fccid_cci3_start_tone_7_0 0xF640
+#define reg_r_fccid_cci3_start_tone_7_0_pos 0
+#define reg_r_fccid_cci3_start_tone_7_0_len 8
+#define reg_r_fccid_cci3_start_tone_7_0_lsb 0
+#define xd_r_reg_r_fccid_cci3_start_tone_12_8 (*(volatile byte xdata *) 0xF641)
+#define r_reg_r_fccid_cci3_start_tone_12_8 0xF641
+#define reg_r_fccid_cci3_start_tone_12_8_pos 0
+#define reg_r_fccid_cci3_start_tone_12_8_len 5
+#define reg_r_fccid_cci3_start_tone_12_8_lsb 8
+#define xd_r_reg_r_fccid_cci3_end_tone_7_0 (*(volatile byte xdata *) 0xF642)
+#define r_reg_r_fccid_cci3_end_tone_7_0 0xF642
+#define reg_r_fccid_cci3_end_tone_7_0_pos 0
+#define reg_r_fccid_cci3_end_tone_7_0_len 8
+#define reg_r_fccid_cci3_end_tone_7_0_lsb 0
+#define xd_r_reg_r_fccid_cci3_end_tone_12_8 (*(volatile byte xdata *) 0xF643)
+#define r_reg_r_fccid_cci3_end_tone_12_8 0xF643
+#define reg_r_fccid_cci3_end_tone_12_8_pos 0
+#define reg_r_fccid_cci3_end_tone_12_8_len 5
+#define reg_r_fccid_cci3_end_tone_12_8_lsb 8
+#define xd_r_reg_r_fccid_cci3_peak_7_0 (*(volatile byte xdata *) 0xF644)
+#define r_reg_r_fccid_cci3_peak_7_0 0xF644
+#define reg_r_fccid_cci3_peak_7_0_pos 0
+#define reg_r_fccid_cci3_peak_7_0_len 8
+#define reg_r_fccid_cci3_peak_7_0_lsb 0
+#define xd_r_reg_r_fccid_cci3_peak_15_8 (*(volatile byte xdata *) 0xF645)
+#define r_reg_r_fccid_cci3_peak_15_8 0xF645
+#define reg_r_fccid_cci3_peak_15_8_pos 0
+#define reg_r_fccid_cci3_peak_15_8_len 8
+#define reg_r_fccid_cci3_peak_15_8_lsb 8
+#define xd_r_reg_r_fccid_cci4_start_tone_7_0 (*(volatile byte xdata *) 0xF646)
+#define r_reg_r_fccid_cci4_start_tone_7_0 0xF646
+#define reg_r_fccid_cci4_start_tone_7_0_pos 0
+#define reg_r_fccid_cci4_start_tone_7_0_len 8
+#define reg_r_fccid_cci4_start_tone_7_0_lsb 0
+#define xd_r_reg_r_fccid_cci4_start_tone_12_8 (*(volatile byte xdata *) 0xF647)
+#define r_reg_r_fccid_cci4_start_tone_12_8 0xF647
+#define reg_r_fccid_cci4_start_tone_12_8_pos 0
+#define reg_r_fccid_cci4_start_tone_12_8_len 5
+#define reg_r_fccid_cci4_start_tone_12_8_lsb 8
+#define xd_r_reg_r_fccid_cci4_end_tone_7_0 (*(volatile byte xdata *) 0xF648)
+#define r_reg_r_fccid_cci4_end_tone_7_0 0xF648
+#define reg_r_fccid_cci4_end_tone_7_0_pos 0
+#define reg_r_fccid_cci4_end_tone_7_0_len 8
+#define reg_r_fccid_cci4_end_tone_7_0_lsb 0
+#define xd_r_reg_r_fccid_cci4_end_tone_12_8 (*(volatile byte xdata *) 0xF649)
+#define r_reg_r_fccid_cci4_end_tone_12_8 0xF649
+#define reg_r_fccid_cci4_end_tone_12_8_pos 0
+#define reg_r_fccid_cci4_end_tone_12_8_len 5
+#define reg_r_fccid_cci4_end_tone_12_8_lsb 8
+#define xd_r_reg_r_fccid_cci4_peak_7_0 (*(volatile byte xdata *) 0xF64A)
+#define r_reg_r_fccid_cci4_peak_7_0 0xF64A
+#define reg_r_fccid_cci4_peak_7_0_pos 0
+#define reg_r_fccid_cci4_peak_7_0_len 8
+#define reg_r_fccid_cci4_peak_7_0_lsb 0
+#define xd_r_reg_r_fccid_cci4_peak_15_8 (*(volatile byte xdata *) 0xF64B)
+#define r_reg_r_fccid_cci4_peak_15_8 0xF64B
+#define reg_r_fccid_cci4_peak_15_8_pos 0
+#define reg_r_fccid_cci4_peak_15_8_len 8
+#define reg_r_fccid_cci4_peak_15_8_lsb 8
+#define xd_r_reg_r_fccid_cci1_rank (*(volatile byte xdata *) 0xF64C)
+#define r_reg_r_fccid_cci1_rank 0xF64C
+#define reg_r_fccid_cci1_rank_pos 0
+#define reg_r_fccid_cci1_rank_len 3
+#define reg_r_fccid_cci1_rank_lsb 0
+#define xd_r_reg_r_fccid_cci2_rank (*(volatile byte xdata *) 0xF64D)
+#define r_reg_r_fccid_cci2_rank 0xF64D
+#define reg_r_fccid_cci2_rank_pos 0
+#define reg_r_fccid_cci2_rank_len 3
+#define reg_r_fccid_cci2_rank_lsb 0
+#define xd_r_reg_r_fccid_cci3_rank (*(volatile byte xdata *) 0xF64E)
+#define r_reg_r_fccid_cci3_rank 0xF64E
+#define reg_r_fccid_cci3_rank_pos 0
+#define reg_r_fccid_cci3_rank_len 3
+#define reg_r_fccid_cci3_rank_lsb 0
+#define xd_r_reg_r_fccid_cci4_rank (*(volatile byte xdata *) 0xF64F)
+#define r_reg_r_fccid_cci4_rank 0xF64F
+#define reg_r_fccid_cci4_rank_pos 0
+#define reg_r_fccid_cci4_rank_len 3
+#define reg_r_fccid_cci4_rank_lsb 0
+#define xd_p_reg_p_csi_shift3 (*(volatile byte xdata *) 0xF650)
+#define p_reg_p_csi_shift3 0xF650
+#define reg_p_csi_shift3_pos 0
+#define reg_p_csi_shift3_len 4
+#define reg_p_csi_shift3_lsb 0
+#define xd_p_reg_p_csi_mul3 (*(volatile byte xdata *) 0xF651)
+#define p_reg_p_csi_mul3 0xF651
+#define reg_p_csi_mul3_pos 0
+#define reg_p_csi_mul3_len 8
+#define reg_p_csi_mul3_lsb 0
+#define xd_p_reg_p_csi_level3_7_0 (*(volatile byte xdata *) 0xF652)
+#define p_reg_p_csi_level3_7_0 0xF652
+#define reg_p_csi_level3_7_0_pos 0
+#define reg_p_csi_level3_7_0_len 8
+#define reg_p_csi_level3_7_0_lsb 0
+#define xd_p_reg_p_csi_level3_8 (*(volatile byte xdata *) 0xF653)
+#define p_reg_p_csi_level3_8 0xF653
+#define reg_p_csi_level3_8_pos 0
+#define reg_p_csi_level3_8_len 1
+#define reg_p_csi_level3_8_lsb 8
+#define xd_p_reg_p_csi_fftout_shift_fix_value (*(volatile byte xdata *) 0xF654)
+#define p_reg_p_csi_fftout_shift_fix_value 0xF654
+#define reg_p_csi_fftout_shift_fix_value_pos 0
+#define reg_p_csi_fftout_shift_fix_value_len 4
+#define reg_p_csi_fftout_shift_fix_value_lsb 0
+#define xd_p_reg_p_feq_scale_pow (*(volatile byte xdata *) 0xF655)
+#define p_reg_p_feq_scale_pow 0xF655
+#define reg_p_feq_scale_pow_pos 0
+#define reg_p_feq_scale_pow_len 6
+#define reg_p_feq_scale_pow_lsb 0
+#define xd_p_reg_p_csi_cp_idx (*(volatile byte xdata *) 0xF656)
+#define p_reg_p_csi_cp_idx 0xF656
+#define reg_p_csi_cp_idx_pos 0
+#define reg_p_csi_cp_idx_len 8
+#define reg_p_csi_cp_idx_lsb 0
+#define xd_p_reg_p_csi_outsh_zero_th_7_0 (*(volatile byte xdata *) 0xF657)
+#define p_reg_p_csi_outsh_zero_th_7_0 0xF657
+#define reg_p_csi_outsh_zero_th_7_0_pos 0
+#define reg_p_csi_outsh_zero_th_7_0_len 8
+#define reg_p_csi_outsh_zero_th_7_0_lsb 0
+#define xd_p_reg_p_csi_outsh_zero_th_10_8 (*(volatile byte xdata *) 0xF658)
+#define p_reg_p_csi_outsh_zero_th_10_8 0xF658
+#define reg_p_csi_outsh_zero_th_10_8_pos 0
+#define reg_p_csi_outsh_zero_th_10_8_len 3
+#define reg_p_csi_outsh_zero_th_10_8_lsb 8
+#define xd_p_reg_p_csi_ar_ratio (*(volatile byte xdata *) 0xF659)
+#define p_reg_p_csi_ar_ratio 0xF659
+#define reg_p_csi_ar_ratio_pos 0
+#define reg_p_csi_ar_ratio_len 8
+#define reg_p_csi_ar_ratio_lsb 0
+#define xd_p_reg_r_csi_cp_vld (*(volatile byte xdata *) 0xF65A)
+#define p_reg_r_csi_cp_vld 0xF65A
+#define reg_r_csi_cp_vld_pos 0
+#define reg_r_csi_cp_vld_len 1
+#define reg_r_csi_cp_vld_lsb 0
+#define xd_p_reg_r_csi_sp_vld (*(volatile byte xdata *) 0xF65B)
+#define p_reg_r_csi_sp_vld 0xF65B
+#define reg_r_csi_sp_vld_pos 0
+#define reg_r_csi_sp_vld_len 1
+#define reg_r_csi_sp_vld_lsb 0
+#define xd_p_reg_p_csi_fft_out_shift_en (*(volatile byte xdata *) 0xF65C)
+#define p_reg_p_csi_fft_out_shift_en 0xF65C
+#define reg_p_csi_fft_out_shift_en_pos 0
+#define reg_p_csi_fft_out_shift_en_len 1
+#define reg_p_csi_fft_out_shift_en_lsb 0
+#define xd_p_reg_p_csi_feq_out_shift_en (*(volatile byte xdata *) 0xF65D)
+#define p_reg_p_csi_feq_out_shift_en 0xF65D
+#define reg_p_csi_feq_out_shift_en_pos 0
+#define reg_p_csi_feq_out_shift_en_len 1
+#define reg_p_csi_feq_out_shift_en_lsb 0
+#define xd_p_reg_r_csi_cp_fft_out (*(volatile byte xdata *) 0xF65E)
+#define p_reg_r_csi_cp_fft_out 0xF65E
+#define reg_r_csi_cp_fft_out_pos 0
+#define reg_r_csi_cp_fft_out_len 1
+#define reg_r_csi_cp_fft_out_lsb 0
+#define xd_p_reg_r_csi_sp_feq_log2_out (*(volatile byte xdata *) 0xF65F)
+#define p_reg_r_csi_sp_feq_log2_out 0xF65F
+#define reg_r_csi_sp_feq_log2_out_pos 0
+#define reg_r_csi_sp_feq_log2_out_len 8
+#define reg_r_csi_sp_feq_log2_out_lsb 0
+#define xd_p_reg_r_csi_sp_fft_out (*(volatile byte xdata *) 0xF660)
+#define p_reg_r_csi_sp_fft_out 0xF660
+#define reg_r_csi_sp_fft_out_pos 0
+#define reg_r_csi_sp_fft_out_len 1
+#define reg_r_csi_sp_fft_out_lsb 0
+#define xd_p_reg_p_feq_eh2_from_fpcc_en (*(volatile byte xdata *) 0xF661)
+#define p_reg_p_feq_eh2_from_fpcc_en 0xF661
+#define reg_p_feq_eh2_from_fpcc_en_pos 0
+#define reg_p_feq_eh2_from_fpcc_en_len 1
+#define reg_p_feq_eh2_from_fpcc_en_lsb 0
+#define xd_r_reg_r_fccid_fft_ave_peak_7_0 (*(volatile byte xdata *) 0xF662)
+#define r_reg_r_fccid_fft_ave_peak_7_0 0xF662
+#define reg_r_fccid_fft_ave_peak_7_0_pos 0
+#define reg_r_fccid_fft_ave_peak_7_0_len 8
+#define reg_r_fccid_fft_ave_peak_7_0_lsb 0
+#define xd_r_reg_r_fccid_fft_ave_peak_15_8 (*(volatile byte xdata *) 0xF663)
+#define r_reg_r_fccid_fft_ave_peak_15_8 0xF663
+#define reg_r_fccid_fft_ave_peak_15_8_pos 0
+#define reg_r_fccid_fft_ave_peak_15_8_len 8
+#define reg_r_fccid_fft_ave_peak_15_8_lsb 8
+#define xd_r_reg_r_fccid_fft_ave_peak_23_16 (*(volatile byte xdata *) 0xF664)
+#define r_reg_r_fccid_fft_ave_peak_23_16 0xF664
+#define reg_r_fccid_fft_ave_peak_23_16_pos 0
+#define reg_r_fccid_fft_ave_peak_23_16_len 8
+#define reg_r_fccid_fft_ave_peak_23_16_lsb 16
+#define xd_r_reg_r_fccid_fft_ave_peak_26_24 (*(volatile byte xdata *) 0xF665)
+#define r_reg_r_fccid_fft_ave_peak_26_24 0xF665
+#define reg_r_fccid_fft_ave_peak_26_24_pos 0
+#define reg_r_fccid_fft_ave_peak_26_24_len 3
+#define reg_r_fccid_fft_ave_peak_26_24_lsb 24
+#define xd_p_reg_p_fccid_fft_ave_read_rdy (*(volatile byte xdata *) 0xF666)
+#define p_reg_p_fccid_fft_ave_read_rdy 0xF666
+#define reg_p_fccid_fft_ave_read_rdy_pos 0
+#define reg_p_fccid_fft_ave_read_rdy_len 1
+#define reg_p_fccid_fft_ave_read_rdy_lsb 0
+#define xd_p_reg_p_fccid_fft_ave_read_index_7_0 (*(volatile byte xdata *) 0xF667)
+#define p_reg_p_fccid_fft_ave_read_index_7_0 0xF667
+#define reg_p_fccid_fft_ave_read_index_7_0_pos 0
+#define reg_p_fccid_fft_ave_read_index_7_0_len 8
+#define reg_p_fccid_fft_ave_read_index_7_0_lsb 0
+#define xd_p_reg_p_fccid_fft_ave_read_index_12_8 (*(volatile byte xdata *) 0xF668)
+#define p_reg_p_fccid_fft_ave_read_index_12_8 0xF668
+#define reg_p_fccid_fft_ave_read_index_12_8_pos 0
+#define reg_p_fccid_fft_ave_read_index_12_8_len 5
+#define reg_p_fccid_fft_ave_read_index_12_8_lsb 8
+#define xd_p_reg_cdpf_candidate_rw (*(volatile byte xdata *) 0xF669)
+#define p_reg_cdpf_candidate_rw 0xF669
+#define reg_cdpf_candidate_rw_pos 0
+#define reg_cdpf_candidate_rw_len 1
+#define reg_cdpf_candidate_rw_lsb 0
+#define xd_p_reg_cdpf_candidate_prog_7_0 (*(volatile byte xdata *) 0xF66A)
+#define p_reg_cdpf_candidate_prog_7_0 0xF66A
+#define reg_cdpf_candidate_prog_7_0_pos 0
+#define reg_cdpf_candidate_prog_7_0_len 8
+#define reg_cdpf_candidate_prog_7_0_lsb 0
+#define xd_p_reg_cdpf_candidate_prog_15_8 (*(volatile byte xdata *) 0xF66B)
+#define p_reg_cdpf_candidate_prog_15_8 0xF66B
+#define reg_cdpf_candidate_prog_15_8_pos 0
+#define reg_cdpf_candidate_prog_15_8_len 8
+#define reg_cdpf_candidate_prog_15_8_lsb 8
+#define xd_p_reg_cdpf_candidateno_prog (*(volatile byte xdata *) 0xF66C)
+#define p_reg_cdpf_candidateno_prog 0xF66C
+#define reg_cdpf_candidateno_prog_pos 0
+#define reg_cdpf_candidateno_prog_len 6
+#define reg_cdpf_candidateno_prog_lsb 0
+#define xd_p_reg_cdpf_candidateno_switch (*(volatile byte xdata *) 0xF66D)
+#define p_reg_cdpf_candidateno_switch 0xF66D
+#define reg_cdpf_candidateno_switch_pos 0
+#define reg_cdpf_candidateno_switch_len 1
+#define reg_cdpf_candidateno_switch_lsb 0
+#define xd_g_reg_tpsd_txmod (*(volatile byte xdata *) 0xF900)
+#define g_reg_tpsd_txmod 0xF900
+#define reg_tpsd_txmod_pos 0
+#define reg_tpsd_txmod_len 2
+#define reg_tpsd_txmod_lsb 0
+#define xd_g_reg_tpsd_gi (*(volatile byte xdata *) 0xF901)
+#define g_reg_tpsd_gi 0xF901
+#define reg_tpsd_gi_pos 0
+#define reg_tpsd_gi_len 2
+#define reg_tpsd_gi_lsb 0
+#define xd_g_reg_tpsd_hier (*(volatile byte xdata *) 0xF902)
+#define g_reg_tpsd_hier 0xF902
+#define reg_tpsd_hier_pos 0
+#define reg_tpsd_hier_len 3
+#define reg_tpsd_hier_lsb 0
+#define xd_g_reg_tpsd_const (*(volatile byte xdata *) 0xF903)
+#define g_reg_tpsd_const 0xF903
+#define reg_tpsd_const_pos 0
+#define reg_tpsd_const_len 2
+#define reg_tpsd_const_lsb 0
+#define xd_g_reg_bw (*(volatile byte xdata *) 0xF904)
+#define g_reg_bw 0xF904
+#define reg_bw_pos 0
+#define reg_bw_len 2
+#define reg_bw_lsb 0
+#define xd_g_reg_dec_pri (*(volatile byte xdata *) 0xF905)
+#define g_reg_dec_pri 0xF905
+#define reg_dec_pri_pos 0
+#define reg_dec_pri_len 1
+#define reg_dec_pri_lsb 0
+#define xd_g_reg_tpsd_hpcr (*(volatile byte xdata *) 0xF906)
+#define g_reg_tpsd_hpcr 0xF906
+#define reg_tpsd_hpcr_pos 0
+#define reg_tpsd_hpcr_len 3
+#define reg_tpsd_hpcr_lsb 0
+#define xd_g_reg_tpsd_lpcr (*(volatile byte xdata *) 0xF907)
+#define g_reg_tpsd_lpcr 0xF907
+#define reg_tpsd_lpcr_pos 0
+#define reg_tpsd_lpcr_len 3
+#define reg_tpsd_lpcr_lsb 0
+#define xd_g_reg_tpsd_indep (*(volatile byte xdata *) 0xF908)
+#define g_reg_tpsd_indep 0xF908
+#define reg_tpsd_indep_pos 0
+#define reg_tpsd_indep_len 1
+#define reg_tpsd_indep_lsb 0
+#define xd_g_reg_tpsd_tslice (*(volatile byte xdata *) 0xF909)
+#define g_reg_tpsd_tslice 0xF909
+#define reg_tpsd_tslice_pos 0
+#define reg_tpsd_tslice_len 1
+#define reg_tpsd_tslice_lsb 0
+#define xd_g_reg_tpsd_mpefec (*(volatile byte xdata *) 0xF90A)
+#define g_reg_tpsd_mpefec 0xF90A
+#define reg_tpsd_mpefec_pos 0
+#define reg_tpsd_mpefec_len 1
+#define reg_tpsd_mpefec_lsb 0
+#define xd_g_reg_sntc_en (*(volatile byte xdata *) 0xF90B)
+#define g_reg_sntc_en 0xF90B
+#define reg_sntc_en_pos 0
+#define reg_sntc_en_len 1
+#define reg_sntc_en_lsb 0
+#define xd_g_reg_intp_sys_div (*(volatile byte xdata *) 0xF90C)
+#define g_reg_intp_sys_div 0xF90C
+#define reg_intp_sys_div_pos 0
+#define reg_intp_sys_div_len 1
+#define reg_intp_sys_div_lsb 0
+#define xd_g_reg_clk_sntc_sel (*(volatile byte xdata *) 0xF90D)
+#define g_reg_clk_sntc_sel 0xF90D
+#define reg_clk_sntc_sel_pos 0
+#define reg_clk_sntc_sel_len 3
+#define reg_clk_sntc_sel_lsb 0
+#define xd_p_reg_ce_gs_force (*(volatile byte xdata *) 0xFD00)
+#define p_reg_ce_gs_force 0xFD00
+#define reg_ce_gs_force_pos 0
+#define reg_ce_gs_force_len 1
+#define reg_ce_gs_force_lsb 0
+#define xd_p_reg_ce_dagcgain_delay (*(volatile byte xdata *) 0xFD01)
+#define p_reg_ce_dagcgain_delay 0xFD01
+#define reg_ce_dagcgain_delay_pos 0
+#define reg_ce_dagcgain_delay_len 2
+#define reg_ce_dagcgain_delay_lsb 0
+#define xd_p_reg_ce_derot_en (*(volatile byte xdata *) 0xFD02)
+#define p_reg_ce_derot_en 0xFD02
+#define reg_ce_derot_en_pos 0
+#define reg_ce_derot_en_len 1
+#define reg_ce_derot_en_lsb 0
+#define xd_p_reg_ce_fctrl_en (*(volatile byte xdata *) 0xFD05)
+#define p_reg_ce_fctrl_en 0xFD05
+#define reg_ce_fctrl_en_pos 0
+#define reg_ce_fctrl_en_len 1
+#define reg_ce_fctrl_en_lsb 0
+#define xd_p_reg_ce_en (*(volatile byte xdata *) 0xFD06)
+#define p_reg_ce_en 0xFD06
+#define reg_ce_en_pos 0
+#define reg_ce_en_len 1
+#define reg_ce_en_lsb 0
+#define xd_p_reg_ce_sat_wes (*(volatile byte xdata *) 0xFD07)
+#define p_reg_ce_sat_wes 0xFD07
+#define reg_ce_sat_wes_pos 0
+#define reg_ce_sat_wes_len 1
+#define reg_ce_sat_wes_lsb 0
+#define xd_p_reg_ce_sat_sigma2 (*(volatile byte xdata *) 0xFD08)
+#define p_reg_ce_sat_sigma2 0xFD08
+#define reg_ce_sat_sigma2_pos 0
+#define reg_ce_sat_sigma2_len 1
+#define reg_ce_sat_sigma2_lsb 0
+#define xd_p_reg_ce_sat_tdi_br_re (*(volatile byte xdata *) 0xFD09)
+#define p_reg_ce_sat_tdi_br_re 0xFD09
+#define reg_ce_sat_tdi_br_re_pos 0
+#define reg_ce_sat_tdi_br_re_len 1
+#define reg_ce_sat_tdi_br_re_lsb 0
+#define xd_p_reg_ce_sat_tdi_br_im (*(volatile byte xdata *) 0xFD0A)
+#define p_reg_ce_sat_tdi_br_im 0xFD0A
+#define reg_ce_sat_tdi_br_im_pos 0
+#define reg_ce_sat_tdi_br_im_len 1
+#define reg_ce_sat_tdi_br_im_lsb 0
+#define xd_p_reg_ce_sat_tdi_ar_re (*(volatile byte xdata *) 0xFD0B)
+#define p_reg_ce_sat_tdi_ar_re 0xFD0B
+#define reg_ce_sat_tdi_ar_re_pos 0
+#define reg_ce_sat_tdi_ar_re_len 1
+#define reg_ce_sat_tdi_ar_re_lsb 0
+#define xd_p_reg_ce_sat_tdi_ar_im (*(volatile byte xdata *) 0xFD0C)
+#define p_reg_ce_sat_tdi_ar_im 0xFD0C
+#define reg_ce_sat_tdi_ar_im_pos 0
+#define reg_ce_sat_tdi_ar_im_len 1
+#define reg_ce_sat_tdi_ar_im_lsb 0
+#define xd_p_reg_ce_sat_fdi_br_re (*(volatile byte xdata *) 0xFD0D)
+#define p_reg_ce_sat_fdi_br_re 0xFD0D
+#define reg_ce_sat_fdi_br_re_pos 0
+#define reg_ce_sat_fdi_br_re_len 1
+#define reg_ce_sat_fdi_br_re_lsb 0
+#define xd_p_reg_ce_sat_fdi_br_im (*(volatile byte xdata *) 0xFD0E)
+#define p_reg_ce_sat_fdi_br_im 0xFD0E
+#define reg_ce_sat_fdi_br_im_pos 0
+#define reg_ce_sat_fdi_br_im_len 1
+#define reg_ce_sat_fdi_br_im_lsb 0
+#define xd_p_reg_ce_var_forced_value (*(volatile byte xdata *) 0xFD0F)
+#define p_reg_ce_var_forced_value 0xFD0F
+#define reg_ce_var_forced_value_pos 0
+#define reg_ce_var_forced_value_len 3
+#define reg_ce_var_forced_value_lsb 0
+#define xd_p_reg_ce_s1 (*(volatile byte xdata *) 0xFD10)
+#define p_reg_ce_s1 0xFD10
+#define reg_ce_s1_pos 0
+#define reg_ce_s1_len 5
+#define reg_ce_s1_lsb 0
+#define xd_r_reg_ce_tdi_flatness_7_0 (*(volatile byte xdata *) 0xFD11)
+#define r_reg_ce_tdi_flatness_7_0 0xFD11
+#define reg_ce_tdi_flatness_7_0_pos 0
+#define reg_ce_tdi_flatness_7_0_len 8
+#define reg_ce_tdi_flatness_7_0_lsb 0
+#define xd_r_reg_ce_tdi_flatness_8 (*(volatile byte xdata *) 0xFD12)
+#define r_reg_ce_tdi_flatness_8 0xFD12
+#define reg_ce_tdi_flatness_8_pos 0
+#define reg_ce_tdi_flatness_8_len 1
+#define reg_ce_tdi_flatness_8_lsb 8
+#define xd_r_reg_ce_tone_7_0 (*(volatile byte xdata *) 0xFD13)
+#define r_reg_ce_tone_7_0 0xFD13
+#define reg_ce_tone_7_0_pos 0
+#define reg_ce_tone_7_0_len 8
+#define reg_ce_tone_7_0_lsb 0
+#define xd_r_reg_ce_tone_12_8 (*(volatile byte xdata *) 0xFD14)
+#define r_reg_ce_tone_12_8 0xFD14
+#define reg_ce_tone_12_8_pos 0
+#define reg_ce_tone_12_8_len 5
+#define reg_ce_tone_12_8_lsb 8
+#define xd_p_reg_ce_centroid_drift_th (*(volatile byte xdata *) 0xFD15)
+#define p_reg_ce_centroid_drift_th 0xFD15
+#define reg_ce_centroid_drift_th_pos 0
+#define reg_ce_centroid_drift_th_len 8
+#define reg_ce_centroid_drift_th_lsb 0
+#define xd_p_reg_ce_centroid_bias_inc_7_0 (*(volatile byte xdata *) 0xFD16)
+#define p_reg_ce_centroid_bias_inc_7_0 0xFD16
+#define reg_ce_centroid_bias_inc_7_0_pos 0
+#define reg_ce_centroid_bias_inc_7_0_len 8
+#define reg_ce_centroid_bias_inc_7_0_lsb 0
+#define xd_p_reg_ce_centroid_bias_inc_8 (*(volatile byte xdata *) 0xFD17)
+#define p_reg_ce_centroid_bias_inc_8 0xFD17
+#define reg_ce_centroid_bias_inc_8_pos 0
+#define reg_ce_centroid_bias_inc_8_len 1
+#define reg_ce_centroid_bias_inc_8_lsb 8
+#define xd_p_reg_ce_centroid_count_max (*(volatile byte xdata *) 0xFD18)
+#define p_reg_ce_centroid_count_max 0xFD18
+#define reg_ce_centroid_count_max_pos 0
+#define reg_ce_centroid_count_max_len 4
+#define reg_ce_centroid_count_max_lsb 0
+#define xd_p_reg_ce_var_th0_7_0 (*(volatile byte xdata *) 0xFD19)
+#define p_reg_ce_var_th0_7_0 0xFD19
+#define reg_ce_var_th0_7_0_pos 0
+#define reg_ce_var_th0_7_0_len 8
+#define reg_ce_var_th0_7_0_lsb 0
+#define xd_p_reg_ce_var_th0_15_8 (*(volatile byte xdata *) 0xFD1A)
+#define p_reg_ce_var_th0_15_8 0xFD1A
+#define reg_ce_var_th0_15_8_pos 0
+#define reg_ce_var_th0_15_8_len 8
+#define reg_ce_var_th0_15_8_lsb 8
+#define xd_p_reg_ce_var_th1_7_0 (*(volatile byte xdata *) 0xFD1B)
+#define p_reg_ce_var_th1_7_0 0xFD1B
+#define reg_ce_var_th1_7_0_pos 0
+#define reg_ce_var_th1_7_0_len 8
+#define reg_ce_var_th1_7_0_lsb 0
+#define xd_p_reg_ce_var_th1_15_8 (*(volatile byte xdata *) 0xFD1C)
+#define p_reg_ce_var_th1_15_8 0xFD1C
+#define reg_ce_var_th1_15_8_pos 0
+#define reg_ce_var_th1_15_8_len 8
+#define reg_ce_var_th1_15_8_lsb 8
+#define xd_p_reg_ce_var_th2_7_0 (*(volatile byte xdata *) 0xFD1D)
+#define p_reg_ce_var_th2_7_0 0xFD1D
+#define reg_ce_var_th2_7_0_pos 0
+#define reg_ce_var_th2_7_0_len 8
+#define reg_ce_var_th2_7_0_lsb 0
+#define xd_p_reg_ce_var_th2_15_8 (*(volatile byte xdata *) 0xFD1E)
+#define p_reg_ce_var_th2_15_8 0xFD1E
+#define reg_ce_var_th2_15_8_pos 0
+#define reg_ce_var_th2_15_8_len 8
+#define reg_ce_var_th2_15_8_lsb 8
+#define xd_p_reg_ce_var_th3_7_0 (*(volatile byte xdata *) 0xFD1F)
+#define p_reg_ce_var_th3_7_0 0xFD1F
+#define reg_ce_var_th3_7_0_pos 0
+#define reg_ce_var_th3_7_0_len 8
+#define reg_ce_var_th3_7_0_lsb 0
+#define xd_p_reg_ce_var_th3_15_8 (*(volatile byte xdata *) 0xFD20)
+#define p_reg_ce_var_th3_15_8 0xFD20
+#define reg_ce_var_th3_15_8_pos 0
+#define reg_ce_var_th3_15_8_len 8
+#define reg_ce_var_th3_15_8_lsb 8
+#define xd_p_reg_ce_var_th4_7_0 (*(volatile byte xdata *) 0xFD21)
+#define p_reg_ce_var_th4_7_0 0xFD21
+#define reg_ce_var_th4_7_0_pos 0
+#define reg_ce_var_th4_7_0_len 8
+#define reg_ce_var_th4_7_0_lsb 0
+#define xd_p_reg_ce_var_th4_15_8 (*(volatile byte xdata *) 0xFD22)
+#define p_reg_ce_var_th4_15_8 0xFD22
+#define reg_ce_var_th4_15_8_pos 0
+#define reg_ce_var_th4_15_8_len 8
+#define reg_ce_var_th4_15_8_lsb 8
+#define xd_p_reg_ce_var_th5_7_0 (*(volatile byte xdata *) 0xFD23)
+#define p_reg_ce_var_th5_7_0 0xFD23
+#define reg_ce_var_th5_7_0_pos 0
+#define reg_ce_var_th5_7_0_len 8
+#define reg_ce_var_th5_7_0_lsb 0
+#define xd_p_reg_ce_var_th5_15_8 (*(volatile byte xdata *) 0xFD24)
+#define p_reg_ce_var_th5_15_8 0xFD24
+#define reg_ce_var_th5_15_8_pos 0
+#define reg_ce_var_th5_15_8_len 8
+#define reg_ce_var_th5_15_8_lsb 8
+#define xd_p_reg_ce_var_th6_7_0 (*(volatile byte xdata *) 0xFD25)
+#define p_reg_ce_var_th6_7_0 0xFD25
+#define reg_ce_var_th6_7_0_pos 0
+#define reg_ce_var_th6_7_0_len 8
+#define reg_ce_var_th6_7_0_lsb 0
+#define xd_p_reg_ce_var_th6_15_8 (*(volatile byte xdata *) 0xFD26)
+#define p_reg_ce_var_th6_15_8 0xFD26
+#define reg_ce_var_th6_15_8_pos 0
+#define reg_ce_var_th6_15_8_len 8
+#define reg_ce_var_th6_15_8_lsb 8
+#define xd_p_reg_ce_var_max (*(volatile byte xdata *) 0xFD27)
+#define p_reg_ce_var_max 0xFD27
+#define reg_ce_var_max_pos 0
+#define reg_ce_var_max_len 3
+#define reg_ce_var_max_lsb 0
+#define xd_p_reg_ce_cent_forced_en (*(volatile byte xdata *) 0xFD28)
+#define p_reg_ce_cent_forced_en 0xFD28
+#define reg_ce_cent_forced_en_pos 0
+#define reg_ce_cent_forced_en_len 1
+#define reg_ce_cent_forced_en_lsb 0
+#define xd_p_reg_ce_var_forced_en (*(volatile byte xdata *) 0xFD29)
+#define p_reg_ce_var_forced_en 0xFD29
+#define reg_ce_var_forced_en_pos 0
+#define reg_ce_var_forced_en_len 1
+#define reg_ce_var_forced_en_lsb 0
+#define xd_p_reg_ce_fctrl_auto_reset_en (*(volatile byte xdata *) 0xFD2A)
+#define p_reg_ce_fctrl_auto_reset_en 0xFD2A
+#define reg_ce_fctrl_auto_reset_en_pos 0
+#define reg_ce_fctrl_auto_reset_en_len 1
+#define reg_ce_fctrl_auto_reset_en_lsb 0
+#define xd_p_reg_ce_cent_auto_clr_en (*(volatile byte xdata *) 0xFD2B)
+#define p_reg_ce_cent_auto_clr_en 0xFD2B
+#define reg_ce_cent_auto_clr_en_pos 0
+#define reg_ce_cent_auto_clr_en_len 1
+#define reg_ce_cent_auto_clr_en_lsb 0
+#define xd_p_reg_ce_fctrl_reset (*(volatile byte xdata *) 0xFD2C)
+#define p_reg_ce_fctrl_reset 0xFD2C
+#define reg_ce_fctrl_reset_pos 0
+#define reg_ce_fctrl_reset_len 1
+#define reg_ce_fctrl_reset_lsb 0
+#define xd_p_reg_ce_cent_forced_value_7_0 (*(volatile byte xdata *) 0xFD2D)
+#define p_reg_ce_cent_forced_value_7_0 0xFD2D
+#define reg_ce_cent_forced_value_7_0_pos 0
+#define reg_ce_cent_forced_value_7_0_len 8
+#define reg_ce_cent_forced_value_7_0_lsb 0
+#define xd_p_reg_ce_cent_forced_value_11_8 (*(volatile byte xdata *) 0xFD2E)
+#define p_reg_ce_cent_forced_value_11_8 0xFD2E
+#define reg_ce_cent_forced_value_11_8_pos 0
+#define reg_ce_cent_forced_value_11_8_len 4
+#define reg_ce_cent_forced_value_11_8_lsb 8
+#define xd_p_reg_ce_cent_auto_clr_value_7_0 (*(volatile byte xdata *) 0xFD2F)
+#define p_reg_ce_cent_auto_clr_value_7_0 0xFD2F
+#define reg_ce_cent_auto_clr_value_7_0_pos 0
+#define reg_ce_cent_auto_clr_value_7_0_len 8
+#define reg_ce_cent_auto_clr_value_7_0_lsb 0
+#define xd_p_reg_ce_cent_auto_clr_value_11_8 (*(volatile byte xdata *) 0xFD30)
+#define p_reg_ce_cent_auto_clr_value_11_8 0xFD30
+#define reg_ce_cent_auto_clr_value_11_8_pos 0
+#define reg_ce_cent_auto_clr_value_11_8_len 4
+#define reg_ce_cent_auto_clr_value_11_8_lsb 8
+#define xd_p_reg_ce_centroid_max_7_0 (*(volatile byte xdata *) 0xFD31)
+#define p_reg_ce_centroid_max_7_0 0xFD31
+#define reg_ce_centroid_max_7_0_pos 0
+#define reg_ce_centroid_max_7_0_len 8
+#define reg_ce_centroid_max_7_0_lsb 0
+#define xd_p_reg_ce_centroid_max_11_8 (*(volatile byte xdata *) 0xFD32)
+#define p_reg_ce_centroid_max_11_8 0xFD32
+#define reg_ce_centroid_max_11_8_pos 0
+#define reg_ce_centroid_max_11_8_len 4
+#define reg_ce_centroid_max_11_8_lsb 8
+#define xd_p_reg_ce_fctrl_rd (*(volatile byte xdata *) 0xFD33)
+#define p_reg_ce_fctrl_rd 0xFD33
+#define reg_ce_fctrl_rd_pos 0
+#define reg_ce_fctrl_rd_len 1
+#define reg_ce_fctrl_rd_lsb 0
+#define xd_r_reg_ce_centroid_out_7_0 (*(volatile byte xdata *) 0xFD34)
+#define r_reg_ce_centroid_out_7_0 0xFD34
+#define reg_ce_centroid_out_7_0_pos 0
+#define reg_ce_centroid_out_7_0_len 8
+#define reg_ce_centroid_out_7_0_lsb 0
+#define xd_r_reg_ce_centroid_out_11_8 (*(volatile byte xdata *) 0xFD35)
+#define r_reg_ce_centroid_out_11_8 0xFD35
+#define reg_ce_centroid_out_11_8_pos 0
+#define reg_ce_centroid_out_11_8_len 4
+#define reg_ce_centroid_out_11_8_lsb 8
+#define xd_r_reg_ce_fctrl_rdy (*(volatile byte xdata *) 0xFD36)
+#define r_reg_ce_fctrl_rdy 0xFD36
+#define reg_ce_fctrl_rdy_pos 0
+#define reg_ce_fctrl_rdy_len 1
+#define reg_ce_fctrl_rdy_lsb 0
+#define xd_r_reg_ce_var (*(volatile byte xdata *) 0xFD37)
+#define r_reg_ce_var 0xFD37
+#define reg_ce_var_pos 0
+#define reg_ce_var_len 3
+#define reg_ce_var_lsb 0
+#define xd_r_reg_ce_bias_7_0 (*(volatile byte xdata *) 0xFD38)
+#define r_reg_ce_bias_7_0 0xFD38
+#define reg_ce_bias_7_0_pos 0
+#define reg_ce_bias_7_0_len 8
+#define reg_ce_bias_7_0_lsb 0
+#define xd_r_reg_ce_bias_11_8 (*(volatile byte xdata *) 0xFD39)
+#define r_reg_ce_bias_11_8 0xFD39
+#define reg_ce_bias_11_8_pos 0
+#define reg_ce_bias_11_8_len 4
+#define reg_ce_bias_11_8_lsb 8
+#define xd_r_reg_ce_m1_7_0 (*(volatile byte xdata *) 0xFD3A)
+#define r_reg_ce_m1_7_0 0xFD3A
+#define reg_ce_m1_7_0_pos 0
+#define reg_ce_m1_7_0_len 8
+#define reg_ce_m1_7_0_lsb 0
+#define xd_r_reg_ce_m1_11_8 (*(volatile byte xdata *) 0xFD3B)
+#define r_reg_ce_m1_11_8 0xFD3B
+#define reg_ce_m1_11_8_pos 0
+#define reg_ce_m1_11_8_len 4
+#define reg_ce_m1_11_8_lsb 8
+#define xd_r_reg_ce_rh0_7_0 (*(volatile byte xdata *) 0xFD3C)
+#define r_reg_ce_rh0_7_0 0xFD3C
+#define reg_ce_rh0_7_0_pos 0
+#define reg_ce_rh0_7_0_len 8
+#define reg_ce_rh0_7_0_lsb 0
+#define xd_r_reg_ce_rh0_15_8 (*(volatile byte xdata *) 0xFD3D)
+#define r_reg_ce_rh0_15_8 0xFD3D
+#define reg_ce_rh0_15_8_pos 0
+#define reg_ce_rh0_15_8_len 8
+#define reg_ce_rh0_15_8_lsb 8
+#define xd_r_reg_ce_rh0_23_16 (*(volatile byte xdata *) 0xFD3E)
+#define r_reg_ce_rh0_23_16 0xFD3E
+#define reg_ce_rh0_23_16_pos 0
+#define reg_ce_rh0_23_16_len 8
+#define reg_ce_rh0_23_16_lsb 16
+#define xd_r_reg_ce_rh0_31_24 (*(volatile byte xdata *) 0xFD3F)
+#define r_reg_ce_rh0_31_24 0xFD3F
+#define reg_ce_rh0_31_24_pos 0
+#define reg_ce_rh0_31_24_len 8
+#define reg_ce_rh0_31_24_lsb 24
+#define xd_p_reg_ce_tdi_delta (*(volatile byte xdata *) 0xFD40)
+#define p_reg_ce_tdi_delta 0xFD40
+#define reg_ce_tdi_delta_pos 0
+#define reg_ce_tdi_delta_len 3
+#define reg_ce_tdi_delta_lsb 0
+#define xd_p_reg_ce_fdi_delta (*(volatile byte xdata *) 0xFD41)
+#define p_reg_ce_fdi_delta 0xFD41
+#define reg_ce_fdi_delta_pos 0
+#define reg_ce_fdi_delta_len 3
+#define reg_ce_fdi_delta_lsb 0
+#define xd_p_reg_ce_fste_delta (*(volatile byte xdata *) 0xFD42)
+#define p_reg_ce_fste_delta 0xFD42
+#define reg_ce_fste_delta_pos 0
+#define reg_ce_fste_delta_len 3
+#define reg_ce_fste_delta_lsb 0
+#define xd_r_reg_ce_fft_s1 (*(volatile byte xdata *) 0xFD43)
+#define r_reg_ce_fft_s1 0xFD43
+#define reg_ce_fft_s1_pos 0
+#define reg_ce_fft_s1_len 4
+#define reg_ce_fft_s1_lsb 0
+#define xd_r_reg_feq_fix_eh2_7_0 (*(volatile byte xdata *) 0xFD44)
+#define r_reg_feq_fix_eh2_7_0 0xFD44
+#define reg_feq_fix_eh2_7_0_pos 0
+#define reg_feq_fix_eh2_7_0_len 8
+#define reg_feq_fix_eh2_7_0_lsb 0
+#define xd_r_reg_feq_fix_eh2_15_8 (*(volatile byte xdata *) 0xFD45)
+#define r_reg_feq_fix_eh2_15_8 0xFD45
+#define reg_feq_fix_eh2_15_8_pos 0
+#define reg_feq_fix_eh2_15_8_len 8
+#define reg_feq_fix_eh2_15_8_lsb 8
+#define xd_r_reg_feq_fix_eh2_23_16 (*(volatile byte xdata *) 0xFD46)
+#define r_reg_feq_fix_eh2_23_16 0xFD46
+#define reg_feq_fix_eh2_23_16_pos 0
+#define reg_feq_fix_eh2_23_16_len 8
+#define reg_feq_fix_eh2_23_16_lsb 16
+#define xd_r_reg_feq_fix_eh2_31_24 (*(volatile byte xdata *) 0xFD47)
+#define r_reg_feq_fix_eh2_31_24 0xFD47
+#define reg_feq_fix_eh2_31_24_pos 0
+#define reg_feq_fix_eh2_31_24_len 8
+#define reg_feq_fix_eh2_31_24_lsb 24
+#define xd_r_reg_ce_m2_central_7_0 (*(volatile byte xdata *) 0xFD48)
+#define r_reg_ce_m2_central_7_0 0xFD48
+#define reg_ce_m2_central_7_0_pos 0
+#define reg_ce_m2_central_7_0_len 8
+#define reg_ce_m2_central_7_0_lsb 0
+#define xd_r_reg_ce_m2_central_15_8 (*(volatile byte xdata *) 0xFD49)
+#define r_reg_ce_m2_central_15_8 0xFD49
+#define reg_ce_m2_central_15_8_pos 0
+#define reg_ce_m2_central_15_8_len 8
+#define reg_ce_m2_central_15_8_lsb 8
+#define xd_r_reg_ce_sigma2_7_0 (*(volatile byte xdata *) 0xFD4A)
+#define r_reg_ce_sigma2_7_0 0xFD4A
+#define reg_ce_sigma2_7_0_pos 0
+#define reg_ce_sigma2_7_0_len 8
+#define reg_ce_sigma2_7_0_lsb 0
+#define xd_r_reg_ce_sigma2_15_8 (*(volatile byte xdata *) 0xFD4B)
+#define r_reg_ce_sigma2_15_8 0xFD4B
+#define reg_ce_sigma2_15_8_pos 0
+#define reg_ce_sigma2_15_8_len 8
+#define reg_ce_sigma2_15_8_lsb 8
+#define xd_r_reg_ce_sigma2_19_16 (*(volatile byte xdata *) 0xFD4C)
+#define r_reg_ce_sigma2_19_16 0xFD4C
+#define reg_ce_sigma2_19_16_pos 0
+#define reg_ce_sigma2_19_16_len 4
+#define reg_ce_sigma2_19_16_lsb 16
+#define xd_r_reg_ce_data_im_7_0 (*(volatile byte xdata *) 0xFD4D)
+#define r_reg_ce_data_im_7_0 0xFD4D
+#define reg_ce_data_im_7_0_pos 0
+#define reg_ce_data_im_7_0_len 8
+#define reg_ce_data_im_7_0_lsb 0
+#define xd_r_reg_ce_data_im_14_8 (*(volatile byte xdata *) 0xFD4E)
+#define r_reg_ce_data_im_14_8 0xFD4E
+#define reg_ce_data_im_14_8_pos 0
+#define reg_ce_data_im_14_8_len 7
+#define reg_ce_data_im_14_8_lsb 8
+#define xd_r_reg_ce_data_re_7_0 (*(volatile byte xdata *) 0xFD4F)
+#define r_reg_ce_data_re_7_0 0xFD4F
+#define reg_ce_data_re_7_0_pos 0
+#define reg_ce_data_re_7_0_len 8
+#define reg_ce_data_re_7_0_lsb 0
+#define xd_r_reg_ce_data_re_14_8 (*(volatile byte xdata *) 0xFD50)
+#define r_reg_ce_data_re_14_8 0xFD50
+#define reg_ce_data_re_14_8_pos 0
+#define reg_ce_data_re_14_8_len 7
+#define reg_ce_data_re_14_8_lsb 8
+#define xd_p_reg_ce_var_default_value (*(volatile byte xdata *) 0xFD51)
+#define p_reg_ce_var_default_value 0xFD51
+#define reg_ce_var_default_value_pos 0
+#define reg_ce_var_default_value_len 3
+#define reg_ce_var_default_value_lsb 0
+#define xd_p_reg_ce_cent_default_value_7_0 (*(volatile byte xdata *) 0xFD52)
+#define p_reg_ce_cent_default_value_7_0 0xFD52
+#define reg_ce_cent_default_value_7_0_pos 0
+#define reg_ce_cent_default_value_7_0_len 8
+#define reg_ce_cent_default_value_7_0_lsb 0
+#define xd_p_reg_ce_cent_default_value_11_8 (*(volatile byte xdata *) 0xFD53)
+#define p_reg_ce_cent_default_value_11_8 0xFD53
+#define reg_ce_cent_default_value_11_8_pos 0
+#define reg_ce_cent_default_value_11_8_len 4
+#define reg_ce_cent_default_value_11_8_lsb 8
+#define xd_r_reg_ce_var_hw (*(volatile byte xdata *) 0xFD54)
+#define r_reg_ce_var_hw 0xFD54
+#define reg_ce_var_hw_pos 0
+#define reg_ce_var_hw_len 3
+#define reg_ce_var_hw_lsb 0
+#define xd_r_reg_ce_cent_hw_7_0 (*(volatile byte xdata *) 0xFD55)
+#define r_reg_ce_cent_hw_7_0 0xFD55
+#define reg_ce_cent_hw_7_0_pos 0
+#define reg_ce_cent_hw_7_0_len 8
+#define reg_ce_cent_hw_7_0_lsb 0
+#define xd_r_reg_ce_cent_hw_11_8 (*(volatile byte xdata *) 0xFD56)
+#define r_reg_ce_cent_hw_11_8 0xFD56
+#define reg_ce_cent_hw_11_8_pos 0
+#define reg_ce_cent_hw_11_8_len 4
+#define reg_ce_cent_hw_11_8_lsb 8
+#define xd_p_reg_ce_fdi_cp_test_en (*(volatile byte xdata *) 0xFD57)
+#define p_reg_ce_fdi_cp_test_en 0xFD57
+#define reg_ce_fdi_cp_test_en_pos 0
+#define reg_ce_fdi_cp_test_en_len 1
+#define reg_ce_fdi_cp_test_en_lsb 0
+#define xd_p_reg_ce_cptestindex0_7_0 (*(volatile byte xdata *) 0xFD58)
+#define p_reg_ce_cptestindex0_7_0 0xFD58
+#define reg_ce_cptestindex0_7_0_pos 0
+#define reg_ce_cptestindex0_7_0_len 8
+#define reg_ce_cptestindex0_7_0_lsb 0
+#define xd_p_reg_ce_cptestindex0_12_8 (*(volatile byte xdata *) 0xFD59)
+#define p_reg_ce_cptestindex0_12_8 0xFD59
+#define reg_ce_cptestindex0_12_8_pos 0
+#define reg_ce_cptestindex0_12_8_len 5
+#define reg_ce_cptestindex0_12_8_lsb 8
+#define xd_p_reg_ce_cptestfdi0 (*(volatile byte xdata *) 0xFD5A)
+#define p_reg_ce_cptestfdi0 0xFD5A
+#define reg_ce_cptestfdi0_pos 0
+#define reg_ce_cptestfdi0_len 3
+#define reg_ce_cptestfdi0_lsb 0
+#define xd_p_reg_ce_cptestindex1_7_0 (*(volatile byte xdata *) 0xFD5B)
+#define p_reg_ce_cptestindex1_7_0 0xFD5B
+#define reg_ce_cptestindex1_7_0_pos 0
+#define reg_ce_cptestindex1_7_0_len 8
+#define reg_ce_cptestindex1_7_0_lsb 0
+#define xd_p_reg_ce_cptestindex1_12_8 (*(volatile byte xdata *) 0xFD5C)
+#define p_reg_ce_cptestindex1_12_8 0xFD5C
+#define reg_ce_cptestindex1_12_8_pos 0
+#define reg_ce_cptestindex1_12_8_len 5
+#define reg_ce_cptestindex1_12_8_lsb 8
+#define xd_p_reg_ce_cptestfdi1 (*(volatile byte xdata *) 0xFD5D)
+#define p_reg_ce_cptestfdi1 0xFD5D
+#define reg_ce_cptestfdi1_pos 0
+#define reg_ce_cptestfdi1_len 3
+#define reg_ce_cptestfdi1_lsb 0
+#define xd_p_reg_ce_cptestindex2_7_0 (*(volatile byte xdata *) 0xFD5E)
+#define p_reg_ce_cptestindex2_7_0 0xFD5E
+#define reg_ce_cptestindex2_7_0_pos 0
+#define reg_ce_cptestindex2_7_0_len 8
+#define reg_ce_cptestindex2_7_0_lsb 0
+#define xd_p_reg_ce_cptestindex2_12_8 (*(volatile byte xdata *) 0xFD5F)
+#define p_reg_ce_cptestindex2_12_8 0xFD5F
+#define reg_ce_cptestindex2_12_8_pos 0
+#define reg_ce_cptestindex2_12_8_len 5
+#define reg_ce_cptestindex2_12_8_lsb 8
+#define xd_p_reg_ce_cptestfdi2 (*(volatile byte xdata *) 0xFD60)
+#define p_reg_ce_cptestfdi2 0xFD60
+#define reg_ce_cptestfdi2_pos 0
+#define reg_ce_cptestfdi2_len 3
+#define reg_ce_cptestfdi2_lsb 0
+#define xd_p_reg_ce_cptestindex3_7_0 (*(volatile byte xdata *) 0xFD61)
+#define p_reg_ce_cptestindex3_7_0 0xFD61
+#define reg_ce_cptestindex3_7_0_pos 0
+#define reg_ce_cptestindex3_7_0_len 8
+#define reg_ce_cptestindex3_7_0_lsb 0
+#define xd_p_reg_ce_cptestindex3_12_8 (*(volatile byte xdata *) 0xFD62)
+#define p_reg_ce_cptestindex3_12_8 0xFD62
+#define reg_ce_cptestindex3_12_8_pos 0
+#define reg_ce_cptestindex3_12_8_len 5
+#define reg_ce_cptestindex3_12_8_lsb 8
+#define xd_p_reg_ce_cptestfdi3 (*(volatile byte xdata *) 0xFD63)
+#define p_reg_ce_cptestfdi3 0xFD63
+#define reg_ce_cptestfdi3_pos 0
+#define reg_ce_cptestfdi3_len 3
+#define reg_ce_cptestfdi3_lsb 0
+#define xd_p_reg_ce_cptestindex4_7_0 (*(volatile byte xdata *) 0xFD64)
+#define p_reg_ce_cptestindex4_7_0 0xFD64
+#define reg_ce_cptestindex4_7_0_pos 0
+#define reg_ce_cptestindex4_7_0_len 8
+#define reg_ce_cptestindex4_7_0_lsb 0
+#define xd_p_reg_ce_cptestindex4_12_8 (*(volatile byte xdata *) 0xFD65)
+#define p_reg_ce_cptestindex4_12_8 0xFD65
+#define reg_ce_cptestindex4_12_8_pos 0
+#define reg_ce_cptestindex4_12_8_len 5
+#define reg_ce_cptestindex4_12_8_lsb 8
+#define xd_p_reg_ce_cptestfdi4 (*(volatile byte xdata *) 0xFD66)
+#define p_reg_ce_cptestfdi4 0xFD66
+#define reg_ce_cptestfdi4_pos 0
+#define reg_ce_cptestfdi4_len 3
+#define reg_ce_cptestfdi4_lsb 0
+#define xd_p_reg_ce_cptestindex5_7_0 (*(volatile byte xdata *) 0xFD67)
+#define p_reg_ce_cptestindex5_7_0 0xFD67
+#define reg_ce_cptestindex5_7_0_pos 0
+#define reg_ce_cptestindex5_7_0_len 8
+#define reg_ce_cptestindex5_7_0_lsb 0
+#define xd_p_reg_ce_cptestindex5_12_8 (*(volatile byte xdata *) 0xFD68)
+#define p_reg_ce_cptestindex5_12_8 0xFD68
+#define reg_ce_cptestindex5_12_8_pos 0
+#define reg_ce_cptestindex5_12_8_len 5
+#define reg_ce_cptestindex5_12_8_lsb 8
+#define xd_p_reg_ce_cptestfdi5 (*(volatile byte xdata *) 0xFD69)
+#define p_reg_ce_cptestfdi5 0xFD69
+#define reg_ce_cptestfdi5_pos 0
+#define reg_ce_cptestfdi5_len 3
+#define reg_ce_cptestfdi5_lsb 0
+#define xd_p_reg_ce_cptestindex6_7_0 (*(volatile byte xdata *) 0xFD6A)
+#define p_reg_ce_cptestindex6_7_0 0xFD6A
+#define reg_ce_cptestindex6_7_0_pos 0
+#define reg_ce_cptestindex6_7_0_len 8
+#define reg_ce_cptestindex6_7_0_lsb 0
+#define xd_p_reg_ce_cptestindex6_12_8 (*(volatile byte xdata *) 0xFD6B)
+#define p_reg_ce_cptestindex6_12_8 0xFD6B
+#define reg_ce_cptestindex6_12_8_pos 0
+#define reg_ce_cptestindex6_12_8_len 5
+#define reg_ce_cptestindex6_12_8_lsb 8
+#define xd_p_reg_ce_cptestfdi6 (*(volatile byte xdata *) 0xFD6C)
+#define p_reg_ce_cptestfdi6 0xFD6C
+#define reg_ce_cptestfdi6_pos 0
+#define reg_ce_cptestfdi6_len 3
+#define reg_ce_cptestfdi6_lsb 0
+#define xd_p_reg_ce_cptestindex7_7_0 (*(volatile byte xdata *) 0xFD6D)
+#define p_reg_ce_cptestindex7_7_0 0xFD6D
+#define reg_ce_cptestindex7_7_0_pos 0
+#define reg_ce_cptestindex7_7_0_len 8
+#define reg_ce_cptestindex7_7_0_lsb 0
+#define xd_p_reg_ce_cptestindex7_12_8 (*(volatile byte xdata *) 0xFD6E)
+#define p_reg_ce_cptestindex7_12_8 0xFD6E
+#define reg_ce_cptestindex7_12_8_pos 0
+#define reg_ce_cptestindex7_12_8_len 5
+#define reg_ce_cptestindex7_12_8_lsb 8
+#define xd_p_reg_ce_cptestfdi7 (*(volatile byte xdata *) 0xFD6F)
+#define p_reg_ce_cptestfdi7 0xFD6F
+#define reg_ce_cptestfdi7_pos 0
+#define reg_ce_cptestfdi7_len 3
+#define reg_ce_cptestfdi7_lsb 0
+#define xd_p_reg_ce_cp_replace_tdiout_en (*(volatile byte xdata *) 0xFD74)
+#define p_reg_ce_cp_replace_tdiout_en 0xFD74
+#define reg_ce_cp_replace_tdiout_en_pos 0
+#define reg_ce_cp_replace_tdiout_en_len 1
+#define reg_ce_cp_replace_tdiout_en_lsb 0
+#define xd_p_reg_ce_tdi_mask0_en (*(volatile byte xdata *) 0xFD7D)
+#define p_reg_ce_tdi_mask0_en 0xFD7D
+#define reg_ce_tdi_mask0_en_pos 0
+#define reg_ce_tdi_mask0_en_len 1
+#define reg_ce_tdi_mask0_en_lsb 0
+#define xd_p_reg_ce_tdi_mask_from0_7_0 (*(volatile byte xdata *) 0xFD7E)
+#define p_reg_ce_tdi_mask_from0_7_0 0xFD7E
+#define reg_ce_tdi_mask_from0_7_0_pos 0
+#define reg_ce_tdi_mask_from0_7_0_len 8
+#define reg_ce_tdi_mask_from0_7_0_lsb 0
+#define xd_p_reg_ce_tdi_mask_from0_12_8 (*(volatile byte xdata *) 0xFD7F)
+#define p_reg_ce_tdi_mask_from0_12_8 0xFD7F
+#define reg_ce_tdi_mask_from0_12_8_pos 0
+#define reg_ce_tdi_mask_from0_12_8_len 5
+#define reg_ce_tdi_mask_from0_12_8_lsb 8
+#define xd_p_reg_ce_tdi_mask_to0_7_0 (*(volatile byte xdata *) 0xFD80)
+#define p_reg_ce_tdi_mask_to0_7_0 0xFD80
+#define reg_ce_tdi_mask_to0_7_0_pos 0
+#define reg_ce_tdi_mask_to0_7_0_len 8
+#define reg_ce_tdi_mask_to0_7_0_lsb 0
+#define xd_p_reg_ce_tdi_mask_to0_12_8 (*(volatile byte xdata *) 0xFD81)
+#define p_reg_ce_tdi_mask_to0_12_8 0xFD81
+#define reg_ce_tdi_mask_to0_12_8_pos 0
+#define reg_ce_tdi_mask_to0_12_8_len 5
+#define reg_ce_tdi_mask_to0_12_8_lsb 8
+#define xd_p_reg_ce_tdi_mask1_en (*(volatile byte xdata *) 0xFD82)
+#define p_reg_ce_tdi_mask1_en 0xFD82
+#define reg_ce_tdi_mask1_en_pos 0
+#define reg_ce_tdi_mask1_en_len 1
+#define reg_ce_tdi_mask1_en_lsb 0
+#define xd_p_reg_ce_tdi_mask_from1_7_0 (*(volatile byte xdata *) 0xFD83)
+#define p_reg_ce_tdi_mask_from1_7_0 0xFD83
+#define reg_ce_tdi_mask_from1_7_0_pos 0
+#define reg_ce_tdi_mask_from1_7_0_len 8
+#define reg_ce_tdi_mask_from1_7_0_lsb 0
+#define xd_p_reg_ce_tdi_mask_from1_12_8 (*(volatile byte xdata *) 0xFD84)
+#define p_reg_ce_tdi_mask_from1_12_8 0xFD84
+#define reg_ce_tdi_mask_from1_12_8_pos 0
+#define reg_ce_tdi_mask_from1_12_8_len 5
+#define reg_ce_tdi_mask_from1_12_8_lsb 8
+#define xd_p_reg_ce_tdi_mask_to1_7_0 (*(volatile byte xdata *) 0xFD85)
+#define p_reg_ce_tdi_mask_to1_7_0 0xFD85
+#define reg_ce_tdi_mask_to1_7_0_pos 0
+#define reg_ce_tdi_mask_to1_7_0_len 8
+#define reg_ce_tdi_mask_to1_7_0_lsb 0
+#define xd_p_reg_ce_tdi_mask_to1_12_8 (*(volatile byte xdata *) 0xFD86)
+#define p_reg_ce_tdi_mask_to1_12_8 0xFD86
+#define reg_ce_tdi_mask_to1_12_8_pos 0
+#define reg_ce_tdi_mask_to1_12_8_len 5
+#define reg_ce_tdi_mask_to1_12_8_lsb 8
+#define xd_p_reg_ce_2nd_var_max (*(volatile byte xdata *) 0xFD87)
+#define p_reg_ce_2nd_var_max 0xFD87
+#define reg_ce_2nd_var_max_pos 0
+#define reg_ce_2nd_var_max_len 3
+#define reg_ce_2nd_var_max_lsb 0
+#define xd_p_reg_ce_2nd_cent_forced_en (*(volatile byte xdata *) 0xFD88)
+#define p_reg_ce_2nd_cent_forced_en 0xFD88
+#define reg_ce_2nd_cent_forced_en_pos 0
+#define reg_ce_2nd_cent_forced_en_len 1
+#define reg_ce_2nd_cent_forced_en_lsb 0
+#define xd_p_reg_ce_2nd_var_forced_en (*(volatile byte xdata *) 0xFD89)
+#define p_reg_ce_2nd_var_forced_en 0xFD89
+#define reg_ce_2nd_var_forced_en_pos 0
+#define reg_ce_2nd_var_forced_en_len 1
+#define reg_ce_2nd_var_forced_en_lsb 0
+#define xd_p_reg_ce_2nd_fctrl_auto_reset_en (*(volatile byte xdata *) 0xFD8A)
+#define p_reg_ce_2nd_fctrl_auto_reset_en 0xFD8A
+#define reg_ce_2nd_fctrl_auto_reset_en_pos 0
+#define reg_ce_2nd_fctrl_auto_reset_en_len 1
+#define reg_ce_2nd_fctrl_auto_reset_en_lsb 0
+#define xd_p_reg_ce_2nd_cent_auto_clr_en (*(volatile byte xdata *) 0xFD8B)
+#define p_reg_ce_2nd_cent_auto_clr_en 0xFD8B
+#define reg_ce_2nd_cent_auto_clr_en_pos 0
+#define reg_ce_2nd_cent_auto_clr_en_len 1
+#define reg_ce_2nd_cent_auto_clr_en_lsb 0
+#define xd_p_reg_ce_2nd_cent_forced_value_7_0 (*(volatile byte xdata *) 0xFD8C)
+#define p_reg_ce_2nd_cent_forced_value_7_0 0xFD8C
+#define reg_ce_2nd_cent_forced_value_7_0_pos 0
+#define reg_ce_2nd_cent_forced_value_7_0_len 8
+#define reg_ce_2nd_cent_forced_value_7_0_lsb 0
+#define xd_p_reg_ce_2nd_cent_forced_value_11_8 (*(volatile byte xdata *) 0xFD8D)
+#define p_reg_ce_2nd_cent_forced_value_11_8 0xFD8D
+#define reg_ce_2nd_cent_forced_value_11_8_pos 0
+#define reg_ce_2nd_cent_forced_value_11_8_len 4
+#define reg_ce_2nd_cent_forced_value_11_8_lsb 8
+#define xd_p_reg_ce_2nd_cent_auto_clr_value_7_0 (*(volatile byte xdata *) 0xFD8E)
+#define p_reg_ce_2nd_cent_auto_clr_value_7_0 0xFD8E
+#define reg_ce_2nd_cent_auto_clr_value_7_0_pos 0
+#define reg_ce_2nd_cent_auto_clr_value_7_0_len 8
+#define reg_ce_2nd_cent_auto_clr_value_7_0_lsb 0
+#define xd_p_reg_ce_2nd_cent_auto_clr_value_11_8 (*(volatile byte xdata *) 0xFD8F)
+#define p_reg_ce_2nd_cent_auto_clr_value_11_8 0xFD8F
+#define reg_ce_2nd_cent_auto_clr_value_11_8_pos 0
+#define reg_ce_2nd_cent_auto_clr_value_11_8_len 4
+#define reg_ce_2nd_cent_auto_clr_value_11_8_lsb 8
+#define xd_p_reg_ce_gs_s1_var (*(volatile byte xdata *) 0xFD90)
+#define p_reg_ce_gs_s1_var 0xFD90
+#define reg_ce_gs_s1_var_pos 0
+#define reg_ce_gs_s1_var_len 4
+#define reg_ce_gs_s1_var_lsb 0
+#define xd_p_reg_ce_2nd_centroid_max_7_0 (*(volatile byte xdata *) 0xFD91)
+#define p_reg_ce_2nd_centroid_max_7_0 0xFD91
+#define reg_ce_2nd_centroid_max_7_0_pos 0
+#define reg_ce_2nd_centroid_max_7_0_len 8
+#define reg_ce_2nd_centroid_max_7_0_lsb 0
+#define xd_p_reg_ce_2nd_centroid_max_11_8 (*(volatile byte xdata *) 0xFD92)
+#define p_reg_ce_2nd_centroid_max_11_8 0xFD92
+#define reg_ce_2nd_centroid_max_11_8_pos 0
+#define reg_ce_2nd_centroid_max_11_8_len 4
+#define reg_ce_2nd_centroid_max_11_8_lsb 8
+#define xd_r_reg_ce_2nd_centroid_out_7_0 (*(volatile byte xdata *) 0xFD93)
+#define r_reg_ce_2nd_centroid_out_7_0 0xFD93
+#define reg_ce_2nd_centroid_out_7_0_pos 0
+#define reg_ce_2nd_centroid_out_7_0_len 8
+#define reg_ce_2nd_centroid_out_7_0_lsb 0
+#define xd_r_reg_ce_2nd_centroid_out_11_8 (*(volatile byte xdata *) 0xFD94)
+#define r_reg_ce_2nd_centroid_out_11_8 0xFD94
+#define reg_ce_2nd_centroid_out_11_8_pos 0
+#define reg_ce_2nd_centroid_out_11_8_len 4
+#define reg_ce_2nd_centroid_out_11_8_lsb 8
+#define xd_r_reg_ce_2nd_fctrl_rdy (*(volatile byte xdata *) 0xFD95)
+#define r_reg_ce_2nd_fctrl_rdy 0xFD95
+#define reg_ce_2nd_fctrl_rdy_pos 0
+#define reg_ce_2nd_fctrl_rdy_len 1
+#define reg_ce_2nd_fctrl_rdy_lsb 0
+#define xd_r_reg_ce_2nd_var (*(volatile byte xdata *) 0xFD96)
+#define r_reg_ce_2nd_var 0xFD96
+#define reg_ce_2nd_var_pos 0
+#define reg_ce_2nd_var_len 3
+#define reg_ce_2nd_var_lsb 0
+#define xd_r_reg_ce_2nd_bias_7_0 (*(volatile byte xdata *) 0xFD97)
+#define r_reg_ce_2nd_bias_7_0 0xFD97
+#define reg_ce_2nd_bias_7_0_pos 0
+#define reg_ce_2nd_bias_7_0_len 8
+#define reg_ce_2nd_bias_7_0_lsb 0
+#define xd_r_reg_ce_2nd_bias_11_8 (*(volatile byte xdata *) 0xFD98)
+#define r_reg_ce_2nd_bias_11_8 0xFD98
+#define reg_ce_2nd_bias_11_8_pos 0
+#define reg_ce_2nd_bias_11_8_len 4
+#define reg_ce_2nd_bias_11_8_lsb 8
+#define xd_r_reg_ce_2nd_m1_7_0 (*(volatile byte xdata *) 0xFD99)
+#define r_reg_ce_2nd_m1_7_0 0xFD99
+#define reg_ce_2nd_m1_7_0_pos 0
+#define reg_ce_2nd_m1_7_0_len 8
+#define reg_ce_2nd_m1_7_0_lsb 0
+#define xd_r_reg_ce_2nd_m1_11_8 (*(volatile byte xdata *) 0xFD9A)
+#define r_reg_ce_2nd_m1_11_8 0xFD9A
+#define reg_ce_2nd_m1_11_8_pos 0
+#define reg_ce_2nd_m1_11_8_len 4
+#define reg_ce_2nd_m1_11_8_lsb 8
+#define xd_p_reg_ce_2nd_var_forced_value (*(volatile byte xdata *) 0xFD9B)
+#define p_reg_ce_2nd_var_forced_value 0xFD9B
+#define reg_ce_2nd_var_forced_value_pos 0
+#define reg_ce_2nd_var_forced_value_len 3
+#define reg_ce_2nd_var_forced_value_lsb 0
+#define xd_r_reg_ce_2nd_m2_central_7_0 (*(volatile byte xdata *) 0xFD9C)
+#define r_reg_ce_2nd_m2_central_7_0 0xFD9C
+#define reg_ce_2nd_m2_central_7_0_pos 0
+#define reg_ce_2nd_m2_central_7_0_len 8
+#define reg_ce_2nd_m2_central_7_0_lsb 0
+#define xd_r_reg_ce_2nd_m2_central_15_8 (*(volatile byte xdata *) 0xFD9D)
+#define r_reg_ce_2nd_m2_central_15_8 0xFD9D
+#define reg_ce_2nd_m2_central_15_8_pos 0
+#define reg_ce_2nd_m2_central_15_8_len 8
+#define reg_ce_2nd_m2_central_15_8_lsb 8
+#define xd_p_reg_ce_2nd_var_default_value (*(volatile byte xdata *) 0xFD9E)
+#define p_reg_ce_2nd_var_default_value 0xFD9E
+#define reg_ce_2nd_var_default_value_pos 0
+#define reg_ce_2nd_var_default_value_len 3
+#define reg_ce_2nd_var_default_value_lsb 0
+#define xd_p_reg_ce_2nd_cent_default_value_7_0 (*(volatile byte xdata *) 0xFD9F)
+#define p_reg_ce_2nd_cent_default_value_7_0 0xFD9F
+#define reg_ce_2nd_cent_default_value_7_0_pos 0
+#define reg_ce_2nd_cent_default_value_7_0_len 8
+#define reg_ce_2nd_cent_default_value_7_0_lsb 0
+#define xd_p_reg_ce_2nd_cent_default_value_11_8 (*(volatile byte xdata *) 0xFDA0)
+#define p_reg_ce_2nd_cent_default_value_11_8 0xFDA0
+#define reg_ce_2nd_cent_default_value_11_8_pos 0
+#define reg_ce_2nd_cent_default_value_11_8_len 4
+#define reg_ce_2nd_cent_default_value_11_8_lsb 8
+#define xd_p_reg_ce_use_fdi_long (*(volatile byte xdata *) 0xFDA1)
+#define p_reg_ce_use_fdi_long 0xFDA1
+#define reg_ce_use_fdi_long_pos 0
+#define reg_ce_use_fdi_long_len 1
+#define reg_ce_use_fdi_long_lsb 0
+#define xd_p_reg_p_ce_tdi_lms_en (*(volatile byte xdata *) 0xFDA2)
+#define p_reg_p_ce_tdi_lms_en 0xFDA2
+#define reg_p_ce_tdi_lms_en_pos 0
+#define reg_p_ce_tdi_lms_en_len 1
+#define reg_p_ce_tdi_lms_en_lsb 0
+#define xd_p_reg_p_ce_tdi_lms_bufshift (*(volatile byte xdata *) 0xFDA3)
+#define p_reg_p_ce_tdi_lms_bufshift 0xFDA3
+#define reg_p_ce_tdi_lms_bufshift_pos 0
+#define reg_p_ce_tdi_lms_bufshift_len 2
+#define reg_p_ce_tdi_lms_bufshift_lsb 0
+#define xd_p_reg_p_ce_tdi_lms_ave_ratio (*(volatile byte xdata *) 0xFDA4)
+#define p_reg_p_ce_tdi_lms_ave_ratio 0xFDA4
+#define reg_p_ce_tdi_lms_ave_ratio_pos 0
+#define reg_p_ce_tdi_lms_ave_ratio_len 5
+#define reg_p_ce_tdi_lms_ave_ratio_lsb 0
+#define xd_p_reg_p_ce_conf2_in_con0_en (*(volatile byte xdata *) 0xFDA5)
+#define p_reg_p_ce_conf2_in_con0_en 0xFDA5
+#define reg_p_ce_conf2_in_con0_en_pos 0
+#define reg_p_ce_conf2_in_con0_en_len 1
+#define reg_p_ce_conf2_in_con0_en_lsb 0
+// biu_reg.h 7-6-2007
+// gen_biu Ver 1.0 generated by
+#define xd_p_fec_rsd_packet_unit_7_0 (*(volatile byte xdata *) 0xF700)
+#define p_fec_rsd_packet_unit_7_0 0xF700
+#define fec_rsd_packet_unit_7_0_pos 0
+#define fec_rsd_packet_unit_7_0_len 8
+#define fec_rsd_packet_unit_7_0_lsb 0
+#define xd_p_fec_rsd_packet_unit_15_8 (*(volatile byte xdata *) 0xF701)
+#define p_fec_rsd_packet_unit_15_8 0xF701
+#define fec_rsd_packet_unit_15_8_pos 0
+#define fec_rsd_packet_unit_15_8_len 8
+#define fec_rsd_packet_unit_15_8_lsb 8
+#define xd_r_reg_rsd_bit_err_cnt_7_0 (*(volatile byte xdata *) 0xF702)
+#define r_reg_rsd_bit_err_cnt_7_0 0xF702
+#define reg_rsd_bit_err_cnt_7_0_pos 0
+#define reg_rsd_bit_err_cnt_7_0_len 8
+#define reg_rsd_bit_err_cnt_7_0_lsb 0
+#define xd_r_reg_rsd_bit_err_cnt_15_8 (*(volatile byte xdata *) 0xF703)
+#define r_reg_rsd_bit_err_cnt_15_8 0xF703
+#define reg_rsd_bit_err_cnt_15_8_pos 0
+#define reg_rsd_bit_err_cnt_15_8_len 8
+#define reg_rsd_bit_err_cnt_15_8_lsb 8
+#define xd_r_reg_rsd_bit_err_cnt_23_16 (*(volatile byte xdata *) 0xF704)
+#define r_reg_rsd_bit_err_cnt_23_16 0xF704
+#define reg_rsd_bit_err_cnt_23_16_pos 0
+#define reg_rsd_bit_err_cnt_23_16_len 8
+#define reg_rsd_bit_err_cnt_23_16_lsb 16
+#define xd_r_reg_rsd_abort_packet_cnt_7_0 (*(volatile byte xdata *) 0xF705)
+#define r_reg_rsd_abort_packet_cnt_7_0 0xF705
+#define reg_rsd_abort_packet_cnt_7_0_pos 0
+#define reg_rsd_abort_packet_cnt_7_0_len 8
+#define reg_rsd_abort_packet_cnt_7_0_lsb 0
+#define xd_r_reg_rsd_abort_packet_cnt_15_8 (*(volatile byte xdata *) 0xF706)
+#define r_reg_rsd_abort_packet_cnt_15_8 0xF706
+#define reg_rsd_abort_packet_cnt_15_8_pos 0
+#define reg_rsd_abort_packet_cnt_15_8_len 8
+#define reg_rsd_abort_packet_cnt_15_8_lsb 8
+#define xd_p_fec_RSD_PKT_NUM_PER_UNIT_7_0 (*(volatile byte xdata *) 0xF707)
+#define p_fec_RSD_PKT_NUM_PER_UNIT_7_0 0xF707
+#define fec_RSD_PKT_NUM_PER_UNIT_7_0_pos 0
+#define fec_RSD_PKT_NUM_PER_UNIT_7_0_len 8
+#define fec_RSD_PKT_NUM_PER_UNIT_7_0_lsb 0
+#define xd_p_fec_RSD_PKT_NUM_PER_UNIT_15_8 (*(volatile byte xdata *) 0xF708)
+#define p_fec_RSD_PKT_NUM_PER_UNIT_15_8 0xF708
+#define fec_RSD_PKT_NUM_PER_UNIT_15_8_pos 0
+#define fec_RSD_PKT_NUM_PER_UNIT_15_8_len 8
+#define fec_RSD_PKT_NUM_PER_UNIT_15_8_lsb 8
+#define xd_p_fec_RS_TH_1_7_0 (*(volatile byte xdata *) 0xF709)
+#define p_fec_RS_TH_1_7_0 0xF709
+#define fec_RS_TH_1_7_0_pos 0
+#define fec_RS_TH_1_7_0_len 8
+#define fec_RS_TH_1_7_0_lsb 0
+#define xd_p_fec_RS_TH_1_15_8 (*(volatile byte xdata *) 0xF70A)
+#define p_fec_RS_TH_1_15_8 0xF70A
+#define fec_RS_TH_1_15_8_pos 0
+#define fec_RS_TH_1_15_8_len 8
+#define fec_RS_TH_1_15_8_lsb 8
+#define xd_p_fec_RS_TH_2 (*(volatile byte xdata *) 0xF70B)
+#define p_fec_RS_TH_2 0xF70B
+#define fec_RS_TH_2_pos 0
+#define fec_RS_TH_2_len 8
+#define fec_RS_TH_2_lsb 0
+#define xd_p_fec_rsd_ber_rst (*(volatile byte xdata *) 0xF70C)
+#define p_fec_rsd_ber_rst 0xF70C
+#define fec_rsd_ber_rst_pos 0
+#define fec_rsd_ber_rst_len 1
+#define fec_rsd_ber_rst_lsb 0
+#define xd_p_reg_rsd_ber_rdy (*(volatile byte xdata *) 0xF70D)
+#define p_reg_rsd_ber_rdy 0xF70D
+#define reg_rsd_ber_rdy_pos 0
+#define reg_rsd_ber_rdy_len 1
+#define reg_rsd_ber_rdy_lsb 0
+#define xd_p_reg_rsd_trigger_retrain (*(volatile byte xdata *) 0xF70E)
+#define p_reg_rsd_trigger_retrain 0xF70E
+#define reg_rsd_trigger_retrain_pos 0
+#define reg_rsd_trigger_retrain_len 1
+#define reg_rsd_trigger_retrain_lsb 0
+#define xd_p_reg_sync_recover (*(volatile byte xdata *) 0xF70F)
+#define p_reg_sync_recover 0xF70F
+#define reg_sync_recover_pos 0
+#define reg_sync_recover_len 1
+#define reg_sync_recover_lsb 0
+#define xd_p_fec_crc_en (*(volatile byte xdata *) 0xF710)
+#define p_fec_crc_en 0xF710
+#define fec_crc_en_pos 0
+#define fec_crc_en_len 1
+#define fec_crc_en_lsb 0
+#define xd_p_fec_mon_en (*(volatile byte xdata *) 0xF711)
+#define p_fec_mon_en 0xF711
+#define fec_mon_en_pos 0
+#define fec_mon_en_len 1
+#define fec_mon_en_lsb 0
+#define xd_p_reg_sync_chk (*(volatile byte xdata *) 0xF712)
+#define p_reg_sync_chk 0xF712
+#define reg_sync_chk_pos 0
+#define reg_sync_chk_len 1
+#define reg_sync_chk_lsb 0
+#define xd_p_fec_dummy_reg_2 (*(volatile byte xdata *) 0xF713)
+#define p_fec_dummy_reg_2 0xF713
+#define fec_dummy_reg_2_pos 0
+#define fec_dummy_reg_2_len 3
+#define fec_dummy_reg_2_lsb 0
+#define xd_p_reg_fec_data_en (*(volatile byte xdata *) 0xF714)
+#define p_reg_fec_data_en 0xF714
+#define reg_fec_data_en_pos 0
+#define reg_fec_data_en_len 1
+#define reg_fec_data_en_lsb 0
+#define xd_p_fec_vtb_rsd_mon_en (*(volatile byte xdata *) 0xF715)
+#define p_fec_vtb_rsd_mon_en 0xF715
+#define fec_vtb_rsd_mon_en_pos 0
+#define fec_vtb_rsd_mon_en_len 1
+#define fec_vtb_rsd_mon_en_lsb 0
+#define xd_p_reg_fec_sw_rst (*(volatile byte xdata *) 0xF716)
+#define p_reg_fec_sw_rst 0xF716
+#define reg_fec_sw_rst_pos 0
+#define reg_fec_sw_rst_len 1
+#define reg_fec_sw_rst_lsb 0
+#define xd_r_fec_vtb_pm_crc (*(volatile byte xdata *) 0xF717)
+#define r_fec_vtb_pm_crc 0xF717
+#define fec_vtb_pm_crc_pos 0
+#define fec_vtb_pm_crc_len 8
+#define fec_vtb_pm_crc_lsb 0
+#define xd_r_fec_vtb_tb_7_crc (*(volatile byte xdata *) 0xF718)
+#define r_fec_vtb_tb_7_crc 0xF718
+#define fec_vtb_tb_7_crc_pos 0
+#define fec_vtb_tb_7_crc_len 8
+#define fec_vtb_tb_7_crc_lsb 0
+#define xd_r_fec_vtb_tb_6_crc (*(volatile byte xdata *) 0xF719)
+#define r_fec_vtb_tb_6_crc 0xF719
+#define fec_vtb_tb_6_crc_pos 0
+#define fec_vtb_tb_6_crc_len 8
+#define fec_vtb_tb_6_crc_lsb 0
+#define xd_r_fec_vtb_tb_5_crc (*(volatile byte xdata *) 0xF71A)
+#define r_fec_vtb_tb_5_crc 0xF71A
+#define fec_vtb_tb_5_crc_pos 0
+#define fec_vtb_tb_5_crc_len 8
+#define fec_vtb_tb_5_crc_lsb 0
+#define xd_r_fec_vtb_tb_4_crc (*(volatile byte xdata *) 0xF71B)
+#define r_fec_vtb_tb_4_crc 0xF71B
+#define fec_vtb_tb_4_crc_pos 0
+#define fec_vtb_tb_4_crc_len 8
+#define fec_vtb_tb_4_crc_lsb 0
+#define xd_r_fec_vtb_tb_3_crc (*(volatile byte xdata *) 0xF71C)
+#define r_fec_vtb_tb_3_crc 0xF71C
+#define fec_vtb_tb_3_crc_pos 0
+#define fec_vtb_tb_3_crc_len 8
+#define fec_vtb_tb_3_crc_lsb 0
+#define xd_r_fec_vtb_tb_2_crc (*(volatile byte xdata *) 0xF71D)
+#define r_fec_vtb_tb_2_crc 0xF71D
+#define fec_vtb_tb_2_crc_pos 0
+#define fec_vtb_tb_2_crc_len 8
+#define fec_vtb_tb_2_crc_lsb 0
+#define xd_r_fec_vtb_tb_1_crc (*(volatile byte xdata *) 0xF71E)
+#define r_fec_vtb_tb_1_crc 0xF71E
+#define fec_vtb_tb_1_crc_pos 0
+#define fec_vtb_tb_1_crc_len 8
+#define fec_vtb_tb_1_crc_lsb 0
+#define xd_r_fec_vtb_tb_0_crc (*(volatile byte xdata *) 0xF71F)
+#define r_fec_vtb_tb_0_crc 0xF71F
+#define fec_vtb_tb_0_crc_pos 0
+#define fec_vtb_tb_0_crc_len 8
+#define fec_vtb_tb_0_crc_lsb 0
+#define xd_r_fec_rsd_bank0_crc (*(volatile byte xdata *) 0xF720)
+#define r_fec_rsd_bank0_crc 0xF720
+#define fec_rsd_bank0_crc_pos 0
+#define fec_rsd_bank0_crc_len 8
+#define fec_rsd_bank0_crc_lsb 0
+#define xd_r_fec_rsd_bank1_crc (*(volatile byte xdata *) 0xF721)
+#define r_fec_rsd_bank1_crc 0xF721
+#define fec_rsd_bank1_crc_pos 0
+#define fec_rsd_bank1_crc_len 8
+#define fec_rsd_bank1_crc_lsb 0
+#define xd_r_fec_idi_vtb_crc (*(volatile byte xdata *) 0xF722)
+#define r_fec_idi_vtb_crc 0xF722
+#define fec_idi_vtb_crc_pos 0
+#define fec_idi_vtb_crc_len 8
+#define fec_idi_vtb_crc_lsb 0
+#define xd_p_reg_fec_rsd_packet_unit_exp (*(volatile byte xdata *) 0xF723)
+#define p_reg_fec_rsd_packet_unit_exp 0xF723
+#define reg_fec_rsd_packet_unit_exp_pos 0
+#define reg_fec_rsd_packet_unit_exp_len 4
+#define reg_fec_rsd_packet_unit_exp_lsb 0
+#define xd_p_reg_rsd_bit_err_exp_rdy (*(volatile byte xdata *) 0xF724)
+#define p_reg_rsd_bit_err_exp_rdy 0xF724
+#define reg_rsd_bit_err_exp_rdy_pos 0
+#define reg_rsd_bit_err_exp_rdy_len 1
+#define reg_rsd_bit_err_exp_rdy_lsb 0
+#define xd_r_reg_rsd_bit_err_exp (*(volatile byte xdata *) 0xF725)
+#define r_reg_rsd_bit_err_exp 0xF725
+#define reg_rsd_bit_err_exp_pos 0
+#define reg_rsd_bit_err_exp_len 5
+#define reg_rsd_bit_err_exp_lsb 0
+#define xd_p_fec_rsd_packet_unit1_7_0 (*(volatile byte xdata *) 0xF726)
+#define p_fec_rsd_packet_unit1_7_0 0xF726
+#define fec_rsd_packet_unit1_7_0_pos 0
+#define fec_rsd_packet_unit1_7_0_len 8
+#define fec_rsd_packet_unit1_7_0_lsb 0
+#define xd_p_fec_rsd_packet_unit1_15_8 (*(volatile byte xdata *) 0xF727)
+#define p_fec_rsd_packet_unit1_15_8 0xF727
+#define fec_rsd_packet_unit1_15_8_pos 0
+#define fec_rsd_packet_unit1_15_8_len 8
+#define fec_rsd_packet_unit1_15_8_lsb 8
+#define xd_r_reg_rsd_bit_err_cnt1_7_0 (*(volatile byte xdata *) 0xF728)
+#define r_reg_rsd_bit_err_cnt1_7_0 0xF728
+#define reg_rsd_bit_err_cnt1_7_0_pos 0
+#define reg_rsd_bit_err_cnt1_7_0_len 8
+#define reg_rsd_bit_err_cnt1_7_0_lsb 0
+#define xd_r_reg_rsd_bit_err_cnt1_15_8 (*(volatile byte xdata *) 0xF729)
+#define r_reg_rsd_bit_err_cnt1_15_8 0xF729
+#define reg_rsd_bit_err_cnt1_15_8_pos 0
+#define reg_rsd_bit_err_cnt1_15_8_len 8
+#define reg_rsd_bit_err_cnt1_15_8_lsb 8
+#define xd_r_reg_rsd_bit_err_cnt1_23_16 (*(volatile byte xdata *) 0xF72A)
+#define r_reg_rsd_bit_err_cnt1_23_16 0xF72A
+#define reg_rsd_bit_err_cnt1_23_16_pos 0
+#define reg_rsd_bit_err_cnt1_23_16_len 8
+#define reg_rsd_bit_err_cnt1_23_16_lsb 16
+#define xd_r_reg_rsd_abort_packet_cnt1_7_0 (*(volatile byte xdata *) 0xF72B)
+#define r_reg_rsd_abort_packet_cnt1_7_0 0xF72B
+#define reg_rsd_abort_packet_cnt1_7_0_pos 0
+#define reg_rsd_abort_packet_cnt1_7_0_len 8
+#define reg_rsd_abort_packet_cnt1_7_0_lsb 0
+#define xd_r_reg_rsd_abort_packet_cnt1_15_8 (*(volatile byte xdata *) 0xF72C)
+#define r_reg_rsd_abort_packet_cnt1_15_8 0xF72C
+#define reg_rsd_abort_packet_cnt1_15_8_pos 0
+#define reg_rsd_abort_packet_cnt1_15_8_len 8
+#define reg_rsd_abort_packet_cnt1_15_8_lsb 8
+#define xd_p_fec_rsd_ber_rst1 (*(volatile byte xdata *) 0xF72D)
+#define p_fec_rsd_ber_rst1 0xF72D
+#define fec_rsd_ber_rst1_pos 0
+#define fec_rsd_ber_rst1_len 1
+#define fec_rsd_ber_rst1_lsb 0
+#define xd_p_reg_rsd_ber_rdy1 (*(volatile byte xdata *) 0xF72E)
+#define p_reg_rsd_ber_rdy1 0xF72E
+#define reg_rsd_ber_rdy1_pos 0
+#define reg_rsd_ber_rdy1_len 1
+#define reg_rsd_ber_rdy1_lsb 0
+#define xd_p_reg_dca_txmod_sel (*(volatile byte xdata *) 0xF72F)
+#define p_reg_dca_txmod_sel 0xF72F
+#define reg_dca_txmod_sel_pos 0
+#define reg_dca_txmod_sel_len 1
+#define reg_dca_txmod_sel_lsb 0
+#define xd_p_reg_dca_platch (*(volatile byte xdata *) 0xF730)
+#define p_reg_dca_platch 0xF730
+#define reg_dca_platch_pos 0
+#define reg_dca_platch_len 1
+#define reg_dca_platch_lsb 0
+#define xd_p_reg_dca_upper_chip (*(volatile byte xdata *) 0xF731)
+#define p_reg_dca_upper_chip 0xF731
+#define reg_dca_upper_chip_pos 0
+#define reg_dca_upper_chip_len 1
+#define reg_dca_upper_chip_lsb 0
+#define xd_p_reg_dca_lower_chip (*(volatile byte xdata *) 0xF732)
+#define p_reg_dca_lower_chip 0xF732
+#define reg_dca_lower_chip_pos 0
+#define reg_dca_lower_chip_len 1
+#define reg_dca_lower_chip_lsb 0
+#define xd_p_reg_dca_enl (*(volatile byte xdata *) 0xF733)
+#define p_reg_dca_enl 0xF733
+#define reg_dca_enl_pos 0
+#define reg_dca_enl_len 1
+#define reg_dca_enl_lsb 0
+#define xd_p_reg_dca_enu (*(volatile byte xdata *) 0xF734)
+#define p_reg_dca_enu 0xF734
+#define reg_dca_enu_pos 0
+#define reg_dca_enu_len 1
+#define reg_dca_enu_lsb 0
+#define xd_p_reg_dca_th (*(volatile byte xdata *) 0xF735)
+#define p_reg_dca_th 0xF735
+#define reg_dca_th_pos 0
+#define reg_dca_th_len 5
+#define reg_dca_th_lsb 0
+#define xd_p_reg_dca_scale (*(volatile byte xdata *) 0xF736)
+#define p_reg_dca_scale 0xF736
+#define reg_dca_scale_pos 0
+#define reg_dca_scale_len 4
+#define reg_dca_scale_lsb 0
+#define xd_p_reg_dca_tone_7_0 (*(volatile byte xdata *) 0xF737)
+#define p_reg_dca_tone_7_0 0xF737
+#define reg_dca_tone_7_0_pos 0
+#define reg_dca_tone_7_0_len 8
+#define reg_dca_tone_7_0_lsb 0
+#define xd_p_reg_dca_tone_12_8 (*(volatile byte xdata *) 0xF738)
+#define p_reg_dca_tone_12_8 0xF738
+#define reg_dca_tone_12_8_pos 0
+#define reg_dca_tone_12_8_len 5
+#define reg_dca_tone_12_8_lsb 8
+#define xd_p_reg_dca_time_7_0 (*(volatile byte xdata *) 0xF739)
+#define p_reg_dca_time_7_0 0xF739
+#define reg_dca_time_7_0_pos 0
+#define reg_dca_time_7_0_len 8
+#define reg_dca_time_7_0_lsb 0
+#define xd_p_reg_dca_time_15_8 (*(volatile byte xdata *) 0xF73A)
+#define p_reg_dca_time_15_8 0xF73A
+#define reg_dca_time_15_8_pos 0
+#define reg_dca_time_15_8_len 8
+#define reg_dca_time_15_8_lsb 8
+#define xd_r_fec_dcasm (*(volatile byte xdata *) 0xF73B)
+#define r_fec_dcasm 0xF73B
+#define fec_dcasm_pos 0
+#define fec_dcasm_len 3
+#define fec_dcasm_lsb 0
+#define xd_p_reg_dca_stand_alone (*(volatile byte xdata *) 0xF73C)
+#define p_reg_dca_stand_alone 0xF73C
+#define reg_dca_stand_alone_pos 0
+#define reg_dca_stand_alone_len 1
+#define reg_dca_stand_alone_lsb 0
+#define xd_p_reg_dca_upper_out_en (*(volatile byte xdata *) 0xF73D)
+#define p_reg_dca_upper_out_en 0xF73D
+#define reg_dca_upper_out_en_pos 0
+#define reg_dca_upper_out_en_len 1
+#define reg_dca_upper_out_en_lsb 0
+#define xd_p_reg_dca_rc_en (*(volatile byte xdata *) 0xF73E)
+#define p_reg_dca_rc_en 0xF73E
+#define reg_dca_rc_en_pos 0
+#define reg_dca_rc_en_len 1
+#define reg_dca_rc_en_lsb 0
+#define xd_p_reg_dca_retrain_send (*(volatile byte xdata *) 0xF73F)
+#define p_reg_dca_retrain_send 0xF73F
+#define reg_dca_retrain_send_pos 0
+#define reg_dca_retrain_send_len 1
+#define reg_dca_retrain_send_lsb 0
+#define xd_p_reg_dca_retrain_rec (*(volatile byte xdata *) 0xF740)
+#define p_reg_dca_retrain_rec 0xF740
+#define reg_dca_retrain_rec_pos 0
+#define reg_dca_retrain_rec_len 1
+#define reg_dca_retrain_rec_lsb 0
+#define xd_p_reg_dca_gi_gap (*(volatile byte xdata *) 0xF741)
+#define p_reg_dca_gi_gap 0xF741
+#define reg_dca_gi_gap_pos 0
+#define reg_dca_gi_gap_len 8
+#define reg_dca_gi_gap_lsb 0
+#define xd_r_reg_dca_rec_up_tpsd_txmod (*(volatile byte xdata *) 0xF742)
+#define r_reg_dca_rec_up_tpsd_txmod 0xF742
+#define reg_dca_rec_up_tpsd_txmod_pos 0
+#define reg_dca_rec_up_tpsd_txmod_len 2
+#define reg_dca_rec_up_tpsd_txmod_lsb 0
+#define xd_r_reg_dca_rec_up_tpsd_const (*(volatile byte xdata *) 0xF743)
+#define r_reg_dca_rec_up_tpsd_const 0xF743
+#define reg_dca_rec_up_tpsd_const_pos 0
+#define reg_dca_rec_up_tpsd_const_len 2
+#define reg_dca_rec_up_tpsd_const_lsb 0
+#define xd_r_reg_dca_rec_up_tpsd_indep (*(volatile byte xdata *) 0xF744)
+#define r_reg_dca_rec_up_tpsd_indep 0xF744
+#define reg_dca_rec_up_tpsd_indep_pos 0
+#define reg_dca_rec_up_tpsd_indep_len 1
+#define reg_dca_rec_up_tpsd_indep_lsb 0
+#define xd_r_reg_dca_rec_up_tpsd_hier (*(volatile byte xdata *) 0xF745)
+#define r_reg_dca_rec_up_tpsd_hier 0xF745
+#define reg_dca_rec_up_tpsd_hier_pos 0
+#define reg_dca_rec_up_tpsd_hier_len 2
+#define reg_dca_rec_up_tpsd_hier_lsb 0
+#define xd_r_reg_dca_rec_up_tpsd_hpcr (*(volatile byte xdata *) 0xF746)
+#define r_reg_dca_rec_up_tpsd_hpcr 0xF746
+#define reg_dca_rec_up_tpsd_hpcr_pos 0
+#define reg_dca_rec_up_tpsd_hpcr_len 3
+#define reg_dca_rec_up_tpsd_hpcr_lsb 0
+#define xd_r_reg_dca_rec_up_tpsd_lpcr (*(volatile byte xdata *) 0xF747)
+#define r_reg_dca_rec_up_tpsd_lpcr 0xF747
+#define reg_dca_rec_up_tpsd_lpcr_pos 0
+#define reg_dca_rec_up_tpsd_lpcr_len 3
+#define reg_dca_rec_up_tpsd_lpcr_lsb 0
+#define xd_r_reg_dca_rec_up_tpsd_lock (*(volatile byte xdata *) 0xF748)
+#define r_reg_dca_rec_up_tpsd_lock 0xF748
+#define reg_dca_rec_up_tpsd_lock_pos 0
+#define reg_dca_rec_up_tpsd_lock_len 1
+#define reg_dca_rec_up_tpsd_lock_lsb 0
+#define xd_r_reg_dca_rec_lo_tpsd_txmod (*(volatile byte xdata *) 0xF749)
+#define r_reg_dca_rec_lo_tpsd_txmod 0xF749
+#define reg_dca_rec_lo_tpsd_txmod_pos 0
+#define reg_dca_rec_lo_tpsd_txmod_len 2
+#define reg_dca_rec_lo_tpsd_txmod_lsb 0
+#define xd_r_reg_dca_rec_lo_tpsd_const (*(volatile byte xdata *) 0xF74A)
+#define r_reg_dca_rec_lo_tpsd_const 0xF74A
+#define reg_dca_rec_lo_tpsd_const_pos 0
+#define reg_dca_rec_lo_tpsd_const_len 2
+#define reg_dca_rec_lo_tpsd_const_lsb 0
+#define xd_r_reg_dca_rec_lo_tpsd_indep (*(volatile byte xdata *) 0xF74B)
+#define r_reg_dca_rec_lo_tpsd_indep 0xF74B
+#define reg_dca_rec_lo_tpsd_indep_pos 0
+#define reg_dca_rec_lo_tpsd_indep_len 1
+#define reg_dca_rec_lo_tpsd_indep_lsb 0
+#define xd_r_reg_dca_rec_lo_tpsd_hier (*(volatile byte xdata *) 0xF74C)
+#define r_reg_dca_rec_lo_tpsd_hier 0xF74C
+#define reg_dca_rec_lo_tpsd_hier_pos 0
+#define reg_dca_rec_lo_tpsd_hier_len 2
+#define reg_dca_rec_lo_tpsd_hier_lsb 0
+#define xd_r_reg_dca_rec_lo_tpsd_hpcr (*(volatile byte xdata *) 0xF74D)
+#define r_reg_dca_rec_lo_tpsd_hpcr 0xF74D
+#define reg_dca_rec_lo_tpsd_hpcr_pos 0
+#define reg_dca_rec_lo_tpsd_hpcr_len 3
+#define reg_dca_rec_lo_tpsd_hpcr_lsb 0
+#define xd_r_reg_dca_rec_lo_tpsd_lpcr (*(volatile byte xdata *) 0xF74E)
+#define r_reg_dca_rec_lo_tpsd_lpcr 0xF74E
+#define reg_dca_rec_lo_tpsd_lpcr_pos 0
+#define reg_dca_rec_lo_tpsd_lpcr_len 3
+#define reg_dca_rec_lo_tpsd_lpcr_lsb 0
+#define xd_r_reg_dca_rec_lo_tpsd_lock (*(volatile byte xdata *) 0xF74F)
+#define r_reg_dca_rec_lo_tpsd_lock 0xF74F
+#define reg_dca_rec_lo_tpsd_lock_pos 0
+#define reg_dca_rec_lo_tpsd_lock_len 1
+#define reg_dca_rec_lo_tpsd_lock_lsb 0
+#define xd_p_reg_dca_gpr_ctr_up_send (*(volatile byte xdata *) 0xF750)
+#define p_reg_dca_gpr_ctr_up_send 0xF750
+#define reg_dca_gpr_ctr_up_send_pos 0
+#define reg_dca_gpr_ctr_up_send_len 8
+#define reg_dca_gpr_ctr_up_send_lsb 0
+#define xd_p_reg_dca_gpr_dat_up_send_0 (*(volatile byte xdata *) 0xF751)
+#define p_reg_dca_gpr_dat_up_send_0 0xF751
+#define reg_dca_gpr_dat_up_send_0_pos 0
+#define reg_dca_gpr_dat_up_send_0_len 8
+#define reg_dca_gpr_dat_up_send_0_lsb 0
+#define xd_p_reg_dca_gpr_dat_up_send_1 (*(volatile byte xdata *) 0xF752)
+#define p_reg_dca_gpr_dat_up_send_1 0xF752
+#define reg_dca_gpr_dat_up_send_1_pos 0
+#define reg_dca_gpr_dat_up_send_1_len 8
+#define reg_dca_gpr_dat_up_send_1_lsb 0
+#define xd_p_reg_dca_gpr_dat_up_send_2 (*(volatile byte xdata *) 0xF753)
+#define p_reg_dca_gpr_dat_up_send_2 0xF753
+#define reg_dca_gpr_dat_up_send_2_pos 0
+#define reg_dca_gpr_dat_up_send_2_len 8
+#define reg_dca_gpr_dat_up_send_2_lsb 0
+#define xd_p_reg_dca_gpr_dat_up_send_3 (*(volatile byte xdata *) 0xF754)
+#define p_reg_dca_gpr_dat_up_send_3 0xF754
+#define reg_dca_gpr_dat_up_send_3_pos 0
+#define reg_dca_gpr_dat_up_send_3_len 8
+#define reg_dca_gpr_dat_up_send_3_lsb 0
+#define xd_p_reg_dca_gpr_dat_up_send_4 (*(volatile byte xdata *) 0xF755)
+#define p_reg_dca_gpr_dat_up_send_4 0xF755
+#define reg_dca_gpr_dat_up_send_4_pos 0
+#define reg_dca_gpr_dat_up_send_4_len 8
+#define reg_dca_gpr_dat_up_send_4_lsb 0
+#define xd_p_reg_dca_gpr_dat_up_send_5 (*(volatile byte xdata *) 0xF756)
+#define p_reg_dca_gpr_dat_up_send_5 0xF756
+#define reg_dca_gpr_dat_up_send_5_pos 0
+#define reg_dca_gpr_dat_up_send_5_len 8
+#define reg_dca_gpr_dat_up_send_5_lsb 0
+#define xd_p_reg_dca_over_wr_up_send (*(volatile byte xdata *) 0xF757)
+#define p_reg_dca_over_wr_up_send 0xF757
+#define reg_dca_over_wr_up_send_pos 0
+#define reg_dca_over_wr_up_send_len 1
+#define reg_dca_over_wr_up_send_lsb 0
+#define xd_p_reg_dca_int_up_send (*(volatile byte xdata *) 0xF758)
+#define p_reg_dca_int_up_send 0xF758
+#define reg_dca_int_up_send_pos 0
+#define reg_dca_int_up_send_len 1
+#define reg_dca_int_up_send_lsb 0
+#define xd_p_reg_dca_gpr_ctr_lo_send (*(volatile byte xdata *) 0xF759)
+#define p_reg_dca_gpr_ctr_lo_send 0xF759
+#define reg_dca_gpr_ctr_lo_send_pos 0
+#define reg_dca_gpr_ctr_lo_send_len 8
+#define reg_dca_gpr_ctr_lo_send_lsb 0
+#define xd_p_reg_dca_gpr_dat_lo_send_0 (*(volatile byte xdata *) 0xF75A)
+#define p_reg_dca_gpr_dat_lo_send_0 0xF75A
+#define reg_dca_gpr_dat_lo_send_0_pos 0
+#define reg_dca_gpr_dat_lo_send_0_len 8
+#define reg_dca_gpr_dat_lo_send_0_lsb 0
+#define xd_p_reg_dca_gpr_dat_lo_send_1 (*(volatile byte xdata *) 0xF75B)
+#define p_reg_dca_gpr_dat_lo_send_1 0xF75B
+#define reg_dca_gpr_dat_lo_send_1_pos 0
+#define reg_dca_gpr_dat_lo_send_1_len 8
+#define reg_dca_gpr_dat_lo_send_1_lsb 0
+#define xd_p_reg_dca_gpr_dat_lo_send_2 (*(volatile byte xdata *) 0xF75C)
+#define p_reg_dca_gpr_dat_lo_send_2 0xF75C
+#define reg_dca_gpr_dat_lo_send_2_pos 0
+#define reg_dca_gpr_dat_lo_send_2_len 8
+#define reg_dca_gpr_dat_lo_send_2_lsb 0
+#define xd_p_reg_dca_gpr_dat_lo_send_3 (*(volatile byte xdata *) 0xF75D)
+#define p_reg_dca_gpr_dat_lo_send_3 0xF75D
+#define reg_dca_gpr_dat_lo_send_3_pos 0
+#define reg_dca_gpr_dat_lo_send_3_len 8
+#define reg_dca_gpr_dat_lo_send_3_lsb 0
+#define xd_p_reg_dca_gpr_dat_lo_send_4 (*(volatile byte xdata *) 0xF75E)
+#define p_reg_dca_gpr_dat_lo_send_4 0xF75E
+#define reg_dca_gpr_dat_lo_send_4_pos 0
+#define reg_dca_gpr_dat_lo_send_4_len 8
+#define reg_dca_gpr_dat_lo_send_4_lsb 0
+#define xd_p_reg_dca_gpr_dat_lo_send_5 (*(volatile byte xdata *) 0xF75F)
+#define p_reg_dca_gpr_dat_lo_send_5 0xF75F
+#define reg_dca_gpr_dat_lo_send_5_pos 0
+#define reg_dca_gpr_dat_lo_send_5_len 8
+#define reg_dca_gpr_dat_lo_send_5_lsb 0
+#define xd_p_reg_dca_over_wr_lo_send (*(volatile byte xdata *) 0xF760)
+#define p_reg_dca_over_wr_lo_send 0xF760
+#define reg_dca_over_wr_lo_send_pos 0
+#define reg_dca_over_wr_lo_send_len 1
+#define reg_dca_over_wr_lo_send_lsb 0
+#define xd_p_reg_dca_int_lo_send (*(volatile byte xdata *) 0xF761)
+#define p_reg_dca_int_lo_send 0xF761
+#define reg_dca_int_lo_send_pos 0
+#define reg_dca_int_lo_send_len 1
+#define reg_dca_int_lo_send_lsb 0
+#define xd_r_reg_dca_gpr_ctr_up_rec (*(volatile byte xdata *) 0xF762)
+#define r_reg_dca_gpr_ctr_up_rec 0xF762
+#define reg_dca_gpr_ctr_up_rec_pos 0
+#define reg_dca_gpr_ctr_up_rec_len 8
+#define reg_dca_gpr_ctr_up_rec_lsb 0
+#define xd_r_reg_dca_gpr_dat_up_rec_0 (*(volatile byte xdata *) 0xF763)
+#define r_reg_dca_gpr_dat_up_rec_0 0xF763
+#define reg_dca_gpr_dat_up_rec_0_pos 0
+#define reg_dca_gpr_dat_up_rec_0_len 8
+#define reg_dca_gpr_dat_up_rec_0_lsb 0
+#define xd_r_reg_dca_gpr_dat_up_rec_1 (*(volatile byte xdata *) 0xF764)
+#define r_reg_dca_gpr_dat_up_rec_1 0xF764
+#define reg_dca_gpr_dat_up_rec_1_pos 0
+#define reg_dca_gpr_dat_up_rec_1_len 8
+#define reg_dca_gpr_dat_up_rec_1_lsb 0
+#define xd_r_reg_dca_gpr_dat_up_rec_2 (*(volatile byte xdata *) 0xF765)
+#define r_reg_dca_gpr_dat_up_rec_2 0xF765
+#define reg_dca_gpr_dat_up_rec_2_pos 0
+#define reg_dca_gpr_dat_up_rec_2_len 8
+#define reg_dca_gpr_dat_up_rec_2_lsb 0
+#define xd_r_reg_dca_gpr_dat_up_rec_3 (*(volatile byte xdata *) 0xF766)
+#define r_reg_dca_gpr_dat_up_rec_3 0xF766
+#define reg_dca_gpr_dat_up_rec_3_pos 0
+#define reg_dca_gpr_dat_up_rec_3_len 8
+#define reg_dca_gpr_dat_up_rec_3_lsb 0
+#define xd_r_reg_dca_gpr_dat_up_rec_4 (*(volatile byte xdata *) 0xF767)
+#define r_reg_dca_gpr_dat_up_rec_4 0xF767
+#define reg_dca_gpr_dat_up_rec_4_pos 0
+#define reg_dca_gpr_dat_up_rec_4_len 8
+#define reg_dca_gpr_dat_up_rec_4_lsb 0
+#define xd_r_reg_dca_gpr_dat_up_rec_5 (*(volatile byte xdata *) 0xF768)
+#define r_reg_dca_gpr_dat_up_rec_5 0xF768
+#define reg_dca_gpr_dat_up_rec_5_pos 0
+#define reg_dca_gpr_dat_up_rec_5_len 8
+#define reg_dca_gpr_dat_up_rec_5_lsb 0
+#define xd_r_reg_dca_over_wr_up_rec (*(volatile byte xdata *) 0xF769)
+#define r_reg_dca_over_wr_up_rec 0xF769
+#define reg_dca_over_wr_up_rec_pos 0
+#define reg_dca_over_wr_up_rec_len 1
+#define reg_dca_over_wr_up_rec_lsb 0
+#define xd_p_reg_dca_int_up_rec (*(volatile byte xdata *) 0xF76A)
+#define p_reg_dca_int_up_rec 0xF76A
+#define reg_dca_int_up_rec_pos 0
+#define reg_dca_int_up_rec_len 1
+#define reg_dca_int_up_rec_lsb 0
+#define xd_p_reg_dca_fw_read_yet_up (*(volatile byte xdata *) 0xF76B)
+#define p_reg_dca_fw_read_yet_up 0xF76B
+#define reg_dca_fw_read_yet_up_pos 0
+#define reg_dca_fw_read_yet_up_len 1
+#define reg_dca_fw_read_yet_up_lsb 0
+#define xd_r_reg_dca_gpr_ctr_lo_rec (*(volatile byte xdata *) 0xF76C)
+#define r_reg_dca_gpr_ctr_lo_rec 0xF76C
+#define reg_dca_gpr_ctr_lo_rec_pos 0
+#define reg_dca_gpr_ctr_lo_rec_len 8
+#define reg_dca_gpr_ctr_lo_rec_lsb 0
+#define xd_r_reg_dca_gpr_dat_lo_rec_0 (*(volatile byte xdata *) 0xF76D)
+#define r_reg_dca_gpr_dat_lo_rec_0 0xF76D
+#define reg_dca_gpr_dat_lo_rec_0_pos 0
+#define reg_dca_gpr_dat_lo_rec_0_len 8
+#define reg_dca_gpr_dat_lo_rec_0_lsb 0
+#define xd_r_reg_dca_gpr_dat_lo_rec_1 (*(volatile byte xdata *) 0xF76E)
+#define r_reg_dca_gpr_dat_lo_rec_1 0xF76E
+#define reg_dca_gpr_dat_lo_rec_1_pos 0
+#define reg_dca_gpr_dat_lo_rec_1_len 8
+#define reg_dca_gpr_dat_lo_rec_1_lsb 0
+#define xd_r_reg_dca_gpr_dat_lo_rec_2 (*(volatile byte xdata *) 0xF76F)
+#define r_reg_dca_gpr_dat_lo_rec_2 0xF76F
+#define reg_dca_gpr_dat_lo_rec_2_pos 0
+#define reg_dca_gpr_dat_lo_rec_2_len 8
+#define reg_dca_gpr_dat_lo_rec_2_lsb 0
+#define xd_r_reg_dca_gpr_dat_lo_rec_3 (*(volatile byte xdata *) 0xF770)
+#define r_reg_dca_gpr_dat_lo_rec_3 0xF770
+#define reg_dca_gpr_dat_lo_rec_3_pos 0
+#define reg_dca_gpr_dat_lo_rec_3_len 8
+#define reg_dca_gpr_dat_lo_rec_3_lsb 0
+#define xd_r_reg_dca_gpr_dat_lo_rec_4 (*(volatile byte xdata *) 0xF771)
+#define r_reg_dca_gpr_dat_lo_rec_4 0xF771
+#define reg_dca_gpr_dat_lo_rec_4_pos 0
+#define reg_dca_gpr_dat_lo_rec_4_len 8
+#define reg_dca_gpr_dat_lo_rec_4_lsb 0
+#define xd_r_reg_dca_gpr_dat_lo_rec_5 (*(volatile byte xdata *) 0xF772)
+#define r_reg_dca_gpr_dat_lo_rec_5 0xF772
+#define reg_dca_gpr_dat_lo_rec_5_pos 0
+#define reg_dca_gpr_dat_lo_rec_5_len 8
+#define reg_dca_gpr_dat_lo_rec_5_lsb 0
+#define xd_r_reg_dca_over_wr_lo_rec (*(volatile byte xdata *) 0xF773)
+#define r_reg_dca_over_wr_lo_rec 0xF773
+#define reg_dca_over_wr_lo_rec_pos 0
+#define reg_dca_over_wr_lo_rec_len 1
+#define reg_dca_over_wr_lo_rec_lsb 0
+#define xd_p_reg_dca_int_lo_rec (*(volatile byte xdata *) 0xF774)
+#define p_reg_dca_int_lo_rec 0xF774
+#define reg_dca_int_lo_rec_pos 0
+#define reg_dca_int_lo_rec_len 1
+#define reg_dca_int_lo_rec_lsb 0
+#define xd_p_reg_dca_fw_read_yet_lo (*(volatile byte xdata *) 0xF775)
+#define p_reg_dca_fw_read_yet_lo 0xF775
+#define reg_dca_fw_read_yet_lo_pos 0
+#define reg_dca_fw_read_yet_lo_len 1
+#define reg_dca_fw_read_yet_lo_lsb 0
+#define xd_p_reg_dca_en (*(volatile byte xdata *) 0xF776)
+#define p_reg_dca_en 0xF776
+#define reg_dca_en_pos 0
+#define reg_dca_en_len 1
+#define reg_dca_en_lsb 0
+#define xd_p_reg_dca_ulrdy_delay (*(volatile byte xdata *) 0xF777)
+#define p_reg_dca_ulrdy_delay 0xF777
+#define reg_dca_ulrdy_delay_pos 0
+#define reg_dca_ulrdy_delay_len 8
+#define reg_dca_ulrdy_delay_lsb 0
+#define xd_p_reg_dca_fpga_latch (*(volatile byte xdata *) 0xF778)
+#define p_reg_dca_fpga_latch 0xF778
+#define reg_dca_fpga_latch_pos 0
+#define reg_dca_fpga_latch_len 8
+#define reg_dca_fpga_latch_lsb 0
+#define xd_p_reg_dca_vldld_err (*(volatile byte xdata *) 0xF779)
+#define p_reg_dca_vldld_err 0xF779
+#define reg_dca_vldld_err_pos 0
+#define reg_dca_vldld_err_len 1
+#define reg_dca_vldld_err_lsb 0
+#define xd_p_reg_dca_vldud_err (*(volatile byte xdata *) 0xF77A)
+#define p_reg_dca_vldud_err 0xF77A
+#define reg_dca_vldud_err_pos 0
+#define reg_dca_vldud_err_len 1
+#define reg_dca_vldud_err_lsb 0
+#define xd_p_reg_dca_modeu_err (*(volatile byte xdata *) 0xF77B)
+#define p_reg_dca_modeu_err 0xF77B
+#define reg_dca_modeu_err_pos 0
+#define reg_dca_modeu_err_len 1
+#define reg_dca_modeu_err_lsb 0
+#define xd_p_reg_dca_model_err (*(volatile byte xdata *) 0xF77C)
+#define p_reg_dca_model_err 0xF77C
+#define reg_dca_model_err_pos 0
+#define reg_dca_model_err_len 1
+#define reg_dca_model_err_lsb 0
+#define xd_p_reg_dca_interrupt (*(volatile byte xdata *) 0xF77D)
+#define p_reg_dca_interrupt 0xF77D
+#define reg_dca_interrupt_pos 0
+#define reg_dca_interrupt_len 1
+#define reg_dca_interrupt_lsb 0
+#define xd_p_reg_dca_auto_reset_en (*(volatile byte xdata *) 0xF77E)
+#define p_reg_dca_auto_reset_en 0xF77E
+#define reg_dca_auto_reset_en_pos 0
+#define reg_dca_auto_reset_en_len 1
+#define reg_dca_auto_reset_en_lsb 0
+#define xd_p_reg_qnt_valuew_7_0 (*(volatile byte xdata *) 0xF77F)
+#define p_reg_qnt_valuew_7_0 0xF77F
+#define reg_qnt_valuew_7_0_pos 0
+#define reg_qnt_valuew_7_0_len 8
+#define reg_qnt_valuew_7_0_lsb 0
+#define xd_p_reg_qnt_valuew_10_8 (*(volatile byte xdata *) 0xF780)
+#define p_reg_qnt_valuew_10_8 0xF780
+#define reg_qnt_valuew_10_8_pos 0
+#define reg_qnt_valuew_10_8_len 3
+#define reg_qnt_valuew_10_8_lsb 8
+#define xd_p_reg_qnt_nfvaluew_7_0 (*(volatile byte xdata *) 0xF781)
+#define p_reg_qnt_nfvaluew_7_0 0xF781
+#define reg_qnt_nfvaluew_7_0_pos 0
+#define reg_qnt_nfvaluew_7_0_len 8
+#define reg_qnt_nfvaluew_7_0_lsb 0
+#define xd_p_reg_qnt_nfvaluew_10_8 (*(volatile byte xdata *) 0xF782)
+#define p_reg_qnt_nfvaluew_10_8 0xF782
+#define reg_qnt_nfvaluew_10_8_pos 0
+#define reg_qnt_nfvaluew_10_8_len 3
+#define reg_qnt_nfvaluew_10_8_lsb 8
+#define xd_p_reg_qnt_flatness_thr_7_0 (*(volatile byte xdata *) 0xF783)
+#define p_reg_qnt_flatness_thr_7_0 0xF783
+#define reg_qnt_flatness_thr_7_0_pos 0
+#define reg_qnt_flatness_thr_7_0_len 8
+#define reg_qnt_flatness_thr_7_0_lsb 0
+#define xd_p_reg_qnt_flatness_thr_8 (*(volatile byte xdata *) 0xF784)
+#define p_reg_qnt_flatness_thr_8 0xF784
+#define reg_qnt_flatness_thr_8_pos 0
+#define reg_qnt_flatness_thr_8_len 1
+#define reg_qnt_flatness_thr_8_lsb 8
+#define xd_p_reg_llr_to_be_monitor (*(volatile byte xdata *) 0xF785)
+#define p_reg_llr_to_be_monitor 0xF785
+#define reg_llr_to_be_monitor_pos 0
+#define reg_llr_to_be_monitor_len 1
+#define reg_llr_to_be_monitor_lsb 0
+#define xd_p_reg_qnt_vbc_rdy (*(volatile byte xdata *) 0xF786)
+#define p_reg_qnt_vbc_rdy 0xF786
+#define reg_qnt_vbc_rdy_pos 0
+#define reg_qnt_vbc_rdy_len 1
+#define reg_qnt_vbc_rdy_lsb 0
+#define xd_p_reg_qnt_noncmb_vbc_rdy (*(volatile byte xdata *) 0xF787)
+#define p_reg_qnt_noncmb_vbc_rdy 0xF787
+#define reg_qnt_noncmb_vbc_rdy_pos 0
+#define reg_qnt_noncmb_vbc_rdy_len 1
+#define reg_qnt_noncmb_vbc_rdy_lsb 0
+#define xd_p_reg_use_eh2_mean (*(volatile byte xdata *) 0xF788)
+#define p_reg_use_eh2_mean 0xF788
+#define reg_use_eh2_mean_pos 0
+#define reg_use_eh2_mean_len 1
+#define reg_use_eh2_mean_lsb 0
+#define xd_p_reg_qnt_vbc_ccid_mode (*(volatile byte xdata *) 0xF789)
+#define p_reg_qnt_vbc_ccid_mode 0xF789
+#define reg_qnt_vbc_ccid_mode_pos 0
+#define reg_qnt_vbc_ccid_mode_len 1
+#define reg_qnt_vbc_ccid_mode_lsb 0
+#define xd_p_reg_qnt_cci_bandsize (*(volatile byte xdata *) 0xF78A)
+#define p_reg_qnt_cci_bandsize 0xF78A
+#define reg_qnt_cci_bandsize_pos 0
+#define reg_qnt_cci_bandsize_len 4
+#define reg_qnt_cci_bandsize_lsb 0
+#define xd_p_reg_qnt_vbc_sframe_num (*(volatile byte xdata *) 0xF78B)
+#define p_reg_qnt_vbc_sframe_num 0xF78B
+#define reg_qnt_vbc_sframe_num_pos 0
+#define reg_qnt_vbc_sframe_num_len 8
+#define reg_qnt_vbc_sframe_num_lsb 0
+#define xd_p_reg_sbx_gain_diff_7_0 (*(volatile byte xdata *) 0xF78C)
+#define p_reg_sbx_gain_diff_7_0 0xF78C
+#define reg_sbx_gain_diff_7_0_pos 0
+#define reg_sbx_gain_diff_7_0_len 8
+#define reg_sbx_gain_diff_7_0_lsb 0
+#define xd_p_reg_sbx_gain_diff_8 (*(volatile byte xdata *) 0xF78D)
+#define p_reg_sbx_gain_diff_8 0xF78D
+#define reg_sbx_gain_diff_8_pos 0
+#define reg_sbx_gain_diff_8_len 1
+#define reg_sbx_gain_diff_8_lsb 8
+#define xd_p_reg_sbx_gain_diff_rdy (*(volatile byte xdata *) 0xF78E)
+#define p_reg_sbx_gain_diff_rdy 0xF78E
+#define reg_sbx_gain_diff_rdy_pos 0
+#define reg_sbx_gain_diff_rdy_len 1
+#define reg_sbx_gain_diff_rdy_lsb 0
+#define xd_p_reg_sbx_noncmb_gain_diff_7_0 (*(volatile byte xdata *) 0xF78F)
+#define p_reg_sbx_noncmb_gain_diff_7_0 0xF78F
+#define reg_sbx_noncmb_gain_diff_7_0_pos 0
+#define reg_sbx_noncmb_gain_diff_7_0_len 8
+#define reg_sbx_noncmb_gain_diff_7_0_lsb 0
+#define xd_p_reg_sbx_noncmb_gain_diff_8 (*(volatile byte xdata *) 0xF790)
+#define p_reg_sbx_noncmb_gain_diff_8 0xF790
+#define reg_sbx_noncmb_gain_diff_8_pos 0
+#define reg_sbx_noncmb_gain_diff_8_len 1
+#define reg_sbx_noncmb_gain_diff_8_lsb 8
+#define xd_p_reg_sbx_noncmb_gain_diff_rdy (*(volatile byte xdata *) 0xF791)
+#define p_reg_sbx_noncmb_gain_diff_rdy 0xF791
+#define reg_sbx_noncmb_gain_diff_rdy_pos 0
+#define reg_sbx_noncmb_gain_diff_rdy_len 1
+#define reg_sbx_noncmb_gain_diff_rdy_lsb 0
+#define xd_r_reg_qnt_vbc_err_7_0 (*(volatile byte xdata *) 0xF792)
+#define r_reg_qnt_vbc_err_7_0 0xF792
+#define reg_qnt_vbc_err_7_0_pos 0
+#define reg_qnt_vbc_err_7_0_len 8
+#define reg_qnt_vbc_err_7_0_lsb 0
+#define xd_r_reg_qnt_vbc_err_15_8 (*(volatile byte xdata *) 0xF793)
+#define r_reg_qnt_vbc_err_15_8 0xF793
+#define reg_qnt_vbc_err_15_8_pos 0
+#define reg_qnt_vbc_err_15_8_len 8
+#define reg_qnt_vbc_err_15_8_lsb 8
+#define xd_r_reg_qnt_vbc_err_23_16 (*(volatile byte xdata *) 0xF794)
+#define r_reg_qnt_vbc_err_23_16 0xF794
+#define reg_qnt_vbc_err_23_16_pos 0
+#define reg_qnt_vbc_err_23_16_len 8
+#define reg_qnt_vbc_err_23_16_lsb 16
+#define xd_r_reg_qnt_noncmb_vbc_err_7_0 (*(volatile byte xdata *) 0xF795)
+#define r_reg_qnt_noncmb_vbc_err_7_0 0xF795
+#define reg_qnt_noncmb_vbc_err_7_0_pos 0
+#define reg_qnt_noncmb_vbc_err_7_0_len 8
+#define reg_qnt_noncmb_vbc_err_7_0_lsb 0
+#define xd_r_reg_qnt_noncmb_vbc_err_15_8 (*(volatile byte xdata *) 0xF796)
+#define r_reg_qnt_noncmb_vbc_err_15_8 0xF796
+#define reg_qnt_noncmb_vbc_err_15_8_pos 0
+#define reg_qnt_noncmb_vbc_err_15_8_len 8
+#define reg_qnt_noncmb_vbc_err_15_8_lsb 8
+#define xd_r_reg_qnt_noncmb_vbc_err_23_16 (*(volatile byte xdata *) 0xF797)
+#define r_reg_qnt_noncmb_vbc_err_23_16 0xF797
+#define reg_qnt_noncmb_vbc_err_23_16_pos 0
+#define reg_qnt_noncmb_vbc_err_23_16_len 8
+#define reg_qnt_noncmb_vbc_err_23_16_lsb 16
+#define xd_p_reg_sbx_signalquality_threshold (*(volatile byte xdata *) 0xF798)
+#define p_reg_sbx_signalquality_threshold 0xF798
+#define reg_sbx_signalquality_threshold_pos 0
+#define reg_sbx_signalquality_threshold_len 4
+#define reg_sbx_signalquality_threshold_lsb 0
+#define xd_r_reg_sbx_signalquality_ind (*(volatile byte xdata *) 0xF799)
+#define r_reg_sbx_signalquality_ind 0xF799
+#define reg_sbx_signalquality_ind_pos 0
+#define reg_sbx_signalquality_ind_len 1
+#define reg_sbx_signalquality_ind_lsb 0
+#define xd_p_reg_p_sbxqnt_th1 (*(volatile byte xdata *) 0xF79A)
+#define p_reg_p_sbxqnt_th1 0xF79A
+#define reg_p_sbxqnt_th1_pos 0
+#define reg_p_sbxqnt_th1_len 8
+#define reg_p_sbxqnt_th1_lsb 0
+#define xd_p_reg_p_sbxqnt_th2 (*(volatile byte xdata *) 0xF79B)
+#define p_reg_p_sbxqnt_th2 0xF79B
+#define reg_p_sbxqnt_th2_pos 0
+#define reg_p_sbxqnt_th2_len 8
+#define reg_p_sbxqnt_th2_lsb 0
+#define xd_p_reg_p_sbxqnt_th3 (*(volatile byte xdata *) 0xF79C)
+#define p_reg_p_sbxqnt_th3 0xF79C
+#define reg_p_sbxqnt_th3_pos 0
+#define reg_p_sbxqnt_th3_len 8
+#define reg_p_sbxqnt_th3_lsb 0
+#define xd_p_reg_p_sbxqnt_th4 (*(volatile byte xdata *) 0xF79D)
+#define p_reg_p_sbxqnt_th4 0xF79D
+#define reg_p_sbxqnt_th4_pos 0
+#define reg_p_sbxqnt_th4_len 8
+#define reg_p_sbxqnt_th4_lsb 0
+#define xd_p_reg_p_sbxqnt_th5 (*(volatile byte xdata *) 0xF79E)
+#define p_reg_p_sbxqnt_th5 0xF79E
+#define reg_p_sbxqnt_th5_pos 0
+#define reg_p_sbxqnt_th5_len 8
+#define reg_p_sbxqnt_th5_lsb 0
+#define xd_p_reg_p_sbxqnt_th6 (*(volatile byte xdata *) 0xF79F)
+#define p_reg_p_sbxqnt_th6 0xF79F
+#define reg_p_sbxqnt_th6_pos 0
+#define reg_p_sbxqnt_th6_len 8
+#define reg_p_sbxqnt_th6_lsb 0
+#define xd_p_reg_p_sbxqnt_th7 (*(volatile byte xdata *) 0xF800)
+#define p_reg_p_sbxqnt_th7 0xF800
+#define reg_p_sbxqnt_th7_pos 0
+#define reg_p_sbxqnt_th7_len 8
+#define reg_p_sbxqnt_th7_lsb 0
+#define xd_p_reg_p_sbxqnt_th8 (*(volatile byte xdata *) 0xF801)
+#define p_reg_p_sbxqnt_th8 0xF801
+#define reg_p_sbxqnt_th8_pos 0
+#define reg_p_sbxqnt_th8_len 8
+#define reg_p_sbxqnt_th8_lsb 0
+#define xd_p_reg_p_sbxqnt_th9 (*(volatile byte xdata *) 0xF802)
+#define p_reg_p_sbxqnt_th9 0xF802
+#define reg_p_sbxqnt_th9_pos 0
+#define reg_p_sbxqnt_th9_len 8
+#define reg_p_sbxqnt_th9_lsb 0
+#define xd_p_reg_p_sbxqnt_th10 (*(volatile byte xdata *) 0xF803)
+#define p_reg_p_sbxqnt_th10 0xF803
+#define reg_p_sbxqnt_th10_pos 0
+#define reg_p_sbxqnt_th10_len 8
+#define reg_p_sbxqnt_th10_lsb 0
+#define xd_p_reg_p_sbxqnt_th11 (*(volatile byte xdata *) 0xF804)
+#define p_reg_p_sbxqnt_th11 0xF804
+#define reg_p_sbxqnt_th11_pos 0
+#define reg_p_sbxqnt_th11_len 8
+#define reg_p_sbxqnt_th11_lsb 0
+#define xd_p_reg_p_sbxqnt_th12 (*(volatile byte xdata *) 0xF805)
+#define p_reg_p_sbxqnt_th12 0xF805
+#define reg_p_sbxqnt_th12_pos 0
+#define reg_p_sbxqnt_th12_len 8
+#define reg_p_sbxqnt_th12_lsb 0
+#define xd_p_reg_p_sbxqnt_th13_7_0 (*(volatile byte xdata *) 0xF806)
+#define p_reg_p_sbxqnt_th13_7_0 0xF806
+#define reg_p_sbxqnt_th13_7_0_pos 0
+#define reg_p_sbxqnt_th13_7_0_len 8
+#define reg_p_sbxqnt_th13_7_0_lsb 0
+#define xd_p_reg_p_sbxqnt_th13_9_8 (*(volatile byte xdata *) 0xF807)
+#define p_reg_p_sbxqnt_th13_9_8 0xF807
+#define reg_p_sbxqnt_th13_9_8_pos 0
+#define reg_p_sbxqnt_th13_9_8_len 2
+#define reg_p_sbxqnt_th13_9_8_lsb 8
+#define xd_p_reg_p_sbxqnt_th14_7_0 (*(volatile byte xdata *) 0xF808)
+#define p_reg_p_sbxqnt_th14_7_0 0xF808
+#define reg_p_sbxqnt_th14_7_0_pos 0
+#define reg_p_sbxqnt_th14_7_0_len 8
+#define reg_p_sbxqnt_th14_7_0_lsb 0
+#define xd_p_reg_p_sbxqnt_th14_9_8 (*(volatile byte xdata *) 0xF809)
+#define p_reg_p_sbxqnt_th14_9_8 0xF809
+#define reg_p_sbxqnt_th14_9_8_pos 0
+#define reg_p_sbxqnt_th14_9_8_len 2
+#define reg_p_sbxqnt_th14_9_8_lsb 8
+#define xd_p_reg_p_sbxqnt_th15_7_0 (*(volatile byte xdata *) 0xF80A)
+#define p_reg_p_sbxqnt_th15_7_0 0xF80A
+#define reg_p_sbxqnt_th15_7_0_pos 0
+#define reg_p_sbxqnt_th15_7_0_len 8
+#define reg_p_sbxqnt_th15_7_0_lsb 0
+#define xd_p_reg_p_sbxqnt_th15_9_8 (*(volatile byte xdata *) 0xF80B)
+#define p_reg_p_sbxqnt_th15_9_8 0xF80B
+#define reg_p_sbxqnt_th15_9_8_pos 0
+#define reg_p_sbxqnt_th15_9_8_len 2
+#define reg_p_sbxqnt_th15_9_8_lsb 8
+#define xd_p_reg_p_sbxqnt_vzh2_th0 (*(volatile byte xdata *) 0xF80C)
+#define p_reg_p_sbxqnt_vzh2_th0 0xF80C
+#define reg_p_sbxqnt_vzh2_th0_pos 0
+#define reg_p_sbxqnt_vzh2_th0_len 8
+#define reg_p_sbxqnt_vzh2_th0_lsb 0
+#define xd_p_reg_p_sbxqnt_vzh2_th1 (*(volatile byte xdata *) 0xF80D)
+#define p_reg_p_sbxqnt_vzh2_th1 0xF80D
+#define reg_p_sbxqnt_vzh2_th1_pos 0
+#define reg_p_sbxqnt_vzh2_th1_len 8
+#define reg_p_sbxqnt_vzh2_th1_lsb 0
+#define xd_p_reg_p_sbxqnt_vzh2_th2 (*(volatile byte xdata *) 0xF80E)
+#define p_reg_p_sbxqnt_vzh2_th2 0xF80E
+#define reg_p_sbxqnt_vzh2_th2_pos 0
+#define reg_p_sbxqnt_vzh2_th2_len 8
+#define reg_p_sbxqnt_vzh2_th2_lsb 0
+#define xd_p_reg_p_qnt_w_comp1 (*(volatile byte xdata *) 0xF80F)
+#define p_reg_p_qnt_w_comp1 0xF80F
+#define reg_p_qnt_w_comp1_pos 0
+#define reg_p_qnt_w_comp1_len 8
+#define reg_p_qnt_w_comp1_lsb 0
+#define xd_p_reg_p_qnt_w_comp2 (*(volatile byte xdata *) 0xF810)
+#define p_reg_p_qnt_w_comp2 0xF810
+#define reg_p_qnt_w_comp2_pos 0
+#define reg_p_qnt_w_comp2_len 8
+#define reg_p_qnt_w_comp2_lsb 0
+#define xd_p_reg_p_qnt_w_comp3 (*(volatile byte xdata *) 0xF811)
+#define p_reg_p_qnt_w_comp3 0xF811
+#define reg_p_qnt_w_comp3_pos 0
+#define reg_p_qnt_w_comp3_len 8
+#define reg_p_qnt_w_comp3_lsb 0
+#define xd_p_reg_p_vtb_in_0 (*(volatile byte xdata *) 0xF821)
+#define p_reg_p_vtb_in_0 0xF821
+#define reg_p_vtb_in_0_pos 0
+#define reg_p_vtb_in_0_len 6
+#define reg_p_vtb_in_0_lsb 0
+#define xd_p_reg_p_vtb_in_1 (*(volatile byte xdata *) 0xF822)
+#define p_reg_p_vtb_in_1 0xF822
+#define reg_p_vtb_in_1_pos 0
+#define reg_p_vtb_in_1_len 6
+#define reg_p_vtb_in_1_lsb 0
+#define xd_p_reg_p_vtb_in_2 (*(volatile byte xdata *) 0xF823)
+#define p_reg_p_vtb_in_2 0xF823
+#define reg_p_vtb_in_2_pos 0
+#define reg_p_vtb_in_2_len 6
+#define reg_p_vtb_in_2_lsb 0
+#define xd_p_reg_p_vtb_in_3 (*(volatile byte xdata *) 0xF824)
+#define p_reg_p_vtb_in_3 0xF824
+#define reg_p_vtb_in_3_pos 0
+#define reg_p_vtb_in_3_len 6
+#define reg_p_vtb_in_3_lsb 0
+#define xd_p_reg_p_vtb_in_4 (*(volatile byte xdata *) 0xF825)
+#define p_reg_p_vtb_in_4 0xF825
+#define reg_p_vtb_in_4_pos 0
+#define reg_p_vtb_in_4_len 6
+#define reg_p_vtb_in_4_lsb 0
+#define xd_p_reg_p_vtb_in_5 (*(volatile byte xdata *) 0xF826)
+#define p_reg_p_vtb_in_5 0xF826
+#define reg_p_vtb_in_5_pos 0
+#define reg_p_vtb_in_5_len 6
+#define reg_p_vtb_in_5_lsb 0
+#define xd_p_reg_p_vtb_in_6 (*(volatile byte xdata *) 0xF827)
+#define p_reg_p_vtb_in_6 0xF827
+#define reg_p_vtb_in_6_pos 0
+#define reg_p_vtb_in_6_len 6
+#define reg_p_vtb_in_6_lsb 0
+#define xd_p_reg_p_vtb_in_7 (*(volatile byte xdata *) 0xF828)
+#define p_reg_p_vtb_in_7 0xF828
+#define reg_p_vtb_in_7_pos 0
+#define reg_p_vtb_in_7_len 6
+#define reg_p_vtb_in_7_lsb 0
+#define xd_p_reg_p_vtb_in_8 (*(volatile byte xdata *) 0xF829)
+#define p_reg_p_vtb_in_8 0xF829
+#define reg_p_vtb_in_8_pos 0
+#define reg_p_vtb_in_8_len 6
+#define reg_p_vtb_in_8_lsb 0
+#define xd_p_reg_p_vtb_in_9 (*(volatile byte xdata *) 0xF82A)
+#define p_reg_p_vtb_in_9 0xF82A
+#define reg_p_vtb_in_9_pos 0
+#define reg_p_vtb_in_9_len 6
+#define reg_p_vtb_in_9_lsb 0
+#define xd_p_reg_p_vtb_in_10 (*(volatile byte xdata *) 0xF82B)
+#define p_reg_p_vtb_in_10 0xF82B
+#define reg_p_vtb_in_10_pos 0
+#define reg_p_vtb_in_10_len 6
+#define reg_p_vtb_in_10_lsb 0
+#define xd_p_reg_p_vtb_in_11 (*(volatile byte xdata *) 0xF82C)
+#define p_reg_p_vtb_in_11 0xF82C
+#define reg_p_vtb_in_11_pos 0
+#define reg_p_vtb_in_11_len 6
+#define reg_p_vtb_in_11_lsb 0
+#define xd_p_reg_p_vtb_in_12 (*(volatile byte xdata *) 0xF82D)
+#define p_reg_p_vtb_in_12 0xF82D
+#define reg_p_vtb_in_12_pos 0
+#define reg_p_vtb_in_12_len 6
+#define reg_p_vtb_in_12_lsb 0
+#define xd_p_reg_p_vtb_in_13 (*(volatile byte xdata *) 0xF82E)
+#define p_reg_p_vtb_in_13 0xF82E
+#define reg_p_vtb_in_13_pos 0
+#define reg_p_vtb_in_13_len 6
+#define reg_p_vtb_in_13_lsb 0
+#define xd_p_reg_p_vtb_in_14 (*(volatile byte xdata *) 0xF82F)
+#define p_reg_p_vtb_in_14 0xF82F
+#define reg_p_vtb_in_14_pos 0
+#define reg_p_vtb_in_14_len 6
+#define reg_p_vtb_in_14_lsb 0
+#define xd_p_reg_p_vtb_in_15 (*(volatile byte xdata *) 0xF830)
+#define p_reg_p_vtb_in_15 0xF830
+#define reg_p_vtb_in_15_pos 0
+#define reg_p_vtb_in_15_len 6
+#define reg_p_vtb_in_15_lsb 0
+#define xd_I2C_i2c_m_slave_addr (*(volatile byte xdata *) 0xF940)
+#define I2C_i2c_m_slave_addr 0xF940
+#define i2c_m_slave_addr_pos 0
+#define i2c_m_slave_addr_len 8
+#define i2c_m_slave_addr_lsb 0
+#define xd_I2C_i2c_m_data1 (*(volatile byte xdata *) 0xF941)
+#define I2C_i2c_m_data1 0xF941
+#define i2c_m_data1_pos 0
+#define i2c_m_data1_len 8
+#define i2c_m_data1_lsb 0
+#define xd_I2C_i2c_m_data2 (*(volatile byte xdata *) 0xF942)
+#define I2C_i2c_m_data2 0xF942
+#define i2c_m_data2_pos 0
+#define i2c_m_data2_len 8
+#define i2c_m_data2_lsb 0
+#define xd_I2C_i2c_m_data3 (*(volatile byte xdata *) 0xF943)
+#define I2C_i2c_m_data3 0xF943
+#define i2c_m_data3_pos 0
+#define i2c_m_data3_len 8
+#define i2c_m_data3_lsb 0
+#define xd_I2C_i2c_m_data4 (*(volatile byte xdata *) 0xF944)
+#define I2C_i2c_m_data4 0xF944
+#define i2c_m_data4_pos 0
+#define i2c_m_data4_len 8
+#define i2c_m_data4_lsb 0
+#define xd_I2C_i2c_m_data5 (*(volatile byte xdata *) 0xF945)
+#define I2C_i2c_m_data5 0xF945
+#define i2c_m_data5_pos 0
+#define i2c_m_data5_len 8
+#define i2c_m_data5_lsb 0
+#define xd_I2C_i2c_m_data6 (*(volatile byte xdata *) 0xF946)
+#define I2C_i2c_m_data6 0xF946
+#define i2c_m_data6_pos 0
+#define i2c_m_data6_len 8
+#define i2c_m_data6_lsb 0
+#define xd_I2C_i2c_m_data7 (*(volatile byte xdata *) 0xF947)
+#define I2C_i2c_m_data7 0xF947
+#define i2c_m_data7_pos 0
+#define i2c_m_data7_len 8
+#define i2c_m_data7_lsb 0
+#define xd_I2C_i2c_m_data8 (*(volatile byte xdata *) 0xF948)
+#define I2C_i2c_m_data8 0xF948
+#define i2c_m_data8_pos 0
+#define i2c_m_data8_len 8
+#define i2c_m_data8_lsb 0
+#define xd_I2C_i2c_m_data9 (*(volatile byte xdata *) 0xF949)
+#define I2C_i2c_m_data9 0xF949
+#define i2c_m_data9_pos 0
+#define i2c_m_data9_len 8
+#define i2c_m_data9_lsb 0
+#define xd_I2C_i2c_m_data10 (*(volatile byte xdata *) 0xF94A)
+#define I2C_i2c_m_data10 0xF94A
+#define i2c_m_data10_pos 0
+#define i2c_m_data10_len 8
+#define i2c_m_data10_lsb 0
+#define xd_I2C_i2c_m_data11 (*(volatile byte xdata *) 0xF94B)
+#define I2C_i2c_m_data11 0xF94B
+#define i2c_m_data11_pos 0
+#define i2c_m_data11_len 8
+#define i2c_m_data11_lsb 0
+#define xd_I2C_i2c_m_data12 (*(volatile byte xdata *) 0xF94C)
+#define I2C_i2c_m_data12 0xF94C
+#define i2c_m_data12_pos 0
+#define i2c_m_data12_len 8
+#define i2c_m_data12_lsb 0
+#define xd_I2C_i2c_m_data13 (*(volatile byte xdata *) 0xF94D)
+#define I2C_i2c_m_data13 0xF94D
+#define i2c_m_data13_pos 0
+#define i2c_m_data13_len 8
+#define i2c_m_data13_lsb 0
+#define xd_I2C_i2c_m_data14 (*(volatile byte xdata *) 0xF94E)
+#define I2C_i2c_m_data14 0xF94E
+#define i2c_m_data14_pos 0
+#define i2c_m_data14_len 8
+#define i2c_m_data14_lsb 0
+#define xd_I2C_i2c_m_data15 (*(volatile byte xdata *) 0xF94F)
+#define I2C_i2c_m_data15 0xF94F
+#define i2c_m_data15_pos 0
+#define i2c_m_data15_len 8
+#define i2c_m_data15_lsb 0
+#define xd_I2C_i2c_m_data16 (*(volatile byte xdata *) 0xF950)
+#define I2C_i2c_m_data16 0xF950
+#define i2c_m_data16_pos 0
+#define i2c_m_data16_len 8
+#define i2c_m_data16_lsb 0
+#define xd_I2C_i2c_m_data17 (*(volatile byte xdata *) 0xF951)
+#define I2C_i2c_m_data17 0xF951
+#define i2c_m_data17_pos 0
+#define i2c_m_data17_len 8
+#define i2c_m_data17_lsb 0
+#define xd_I2C_i2c_m_data18 (*(volatile byte xdata *) 0xF952)
+#define I2C_i2c_m_data18 0xF952
+#define i2c_m_data18_pos 0
+#define i2c_m_data18_len 8
+#define i2c_m_data18_lsb 0
+#define xd_I2C_i2c_m_data19 (*(volatile byte xdata *) 0xF953)
+#define I2C_i2c_m_data19 0xF953
+#define i2c_m_data19_pos 0
+#define i2c_m_data19_len 8
+#define i2c_m_data19_lsb 0
+#define xd_I2C_i2c_m_cmd_rw (*(volatile byte xdata *) 0xF954)
+#define I2C_i2c_m_cmd_rw 0xF954
+#define i2c_m_cmd_rw_pos 0
+#define i2c_m_cmd_rw_len 1
+#define i2c_m_cmd_rw_lsb 0
+#define xd_I2C_i2c_m_cmd_rwlen (*(volatile byte xdata *) 0xF954)
+#define I2C_i2c_m_cmd_rwlen 0xF954
+#define i2c_m_cmd_rwlen_pos 3
+#define i2c_m_cmd_rwlen_len 4
+#define i2c_m_cmd_rwlen_lsb 0
+#define xd_I2C_i2c_m_status_cmd_exe (*(volatile byte xdata *) 0xF955)
+#define I2C_i2c_m_status_cmd_exe 0xF955
+#define i2c_m_status_cmd_exe_pos 0
+#define i2c_m_status_cmd_exe_len 1
+#define i2c_m_status_cmd_exe_lsb 0
+#define xd_I2C_i2c_m_status_wdat_done (*(volatile byte xdata *) 0xF955)
+#define I2C_i2c_m_status_wdat_done 0xF955
+#define i2c_m_status_wdat_done_pos 1
+#define i2c_m_status_wdat_done_len 1
+#define i2c_m_status_wdat_done_lsb 0
+#define xd_I2C_i2c_m_status_wdat_fail (*(volatile byte xdata *) 0xF955)
+#define I2C_i2c_m_status_wdat_fail 0xF955
+#define i2c_m_status_wdat_fail_pos 2
+#define i2c_m_status_wdat_fail_len 1
+#define i2c_m_status_wdat_fail_lsb 0
+#define xd_I2C_i2c_m_status_rdat_rdy (*(volatile byte xdata *) 0xF955)
+#define I2C_i2c_m_status_rdat_rdy 0xF955
+#define i2c_m_status_rdat_rdy_pos 3
+#define i2c_m_status_rdat_rdy_len 1
+#define i2c_m_status_rdat_rdy_lsb 0
+#define xd_I2C_i2c_m_period (*(volatile byte xdata *) 0xF956)
+#define I2C_i2c_m_period 0xF956
+#define i2c_m_period_pos 0
+#define i2c_m_period_len 8
+#define i2c_m_period_lsb 0
+#define xd_I2C_i2c_m_reg_msb_lsb (*(volatile byte xdata *) 0xF957)
+#define I2C_i2c_m_reg_msb_lsb 0xF957
+#define i2c_m_reg_msb_lsb_pos 0
+#define i2c_m_reg_msb_lsb_len 1
+#define i2c_m_reg_msb_lsb_lsb 0
+#define xd_I2C_reg_ofdm_rst (*(volatile byte xdata *) 0xF957)
+#define I2C_reg_ofdm_rst 0xF957
+#define reg_ofdm_rst_pos 1
+#define reg_ofdm_rst_len 1
+#define reg_ofdm_rst_lsb 0
+#define xd_I2C_reg_sample_period_on_tuner (*(volatile byte xdata *) 0xF957)
+#define I2C_reg_sample_period_on_tuner 0xF957
+#define reg_sample_period_on_tuner_pos 2
+#define reg_sample_period_on_tuner_len 1
+#define reg_sample_period_on_tuner_lsb 0
+#define xd_I2C_reg_sel_tuner (*(volatile byte xdata *) 0xF957)
+#define I2C_reg_sel_tuner 0xF957
+#define reg_sel_tuner_pos 3
+#define reg_sel_tuner_len 1
+#define reg_sel_tuner_lsb 0
+#define xd_I2C_reg_ofdm_rst_en (*(volatile byte xdata *) 0xF957)
+#define I2C_reg_ofdm_rst_en 0xF957
+#define reg_ofdm_rst_en_pos 4
+#define reg_ofdm_rst_en_len 1
+#define reg_ofdm_rst_en_lsb 0
+#define xd_p_mp2if_psb_overflow (*(volatile byte xdata *) 0xF980)
+#define p_mp2if_psb_overflow 0xF980
+#define mp2if_psb_overflow_pos 0
+#define mp2if_psb_overflow_len 1
+#define mp2if_psb_overflow_lsb 0
+#define xd_p_mp2if_no_modify_tei_bit (*(volatile byte xdata *) 0xF981)
+#define p_mp2if_no_modify_tei_bit 0xF981
+#define mp2if_no_modify_tei_bit_pos 0
+#define mp2if_no_modify_tei_bit_len 1
+#define mp2if_no_modify_tei_bit_lsb 0
+#define xd_p_mp2if_keep_sf_sync_byte (*(volatile byte xdata *) 0xF982)
+#define p_mp2if_keep_sf_sync_byte 0xF982
+#define mp2if_keep_sf_sync_byte_pos 0
+#define mp2if_keep_sf_sync_byte_len 1
+#define mp2if_keep_sf_sync_byte_lsb 0
+#define xd_p_mp2if_data_access_disable (*(volatile byte xdata *) 0xF983)
+#define p_mp2if_data_access_disable 0xF983
+#define mp2if_data_access_disable_pos 0
+#define mp2if_data_access_disable_len 1
+#define mp2if_data_access_disable_lsb 0
+#define xd_p_mp2if_mpeg_ser_do7 (*(volatile byte xdata *) 0xF984)
+#define p_mp2if_mpeg_ser_do7 0xF984
+#define mp2if_mpeg_ser_do7_pos 0
+#define mp2if_mpeg_ser_do7_len 1
+#define mp2if_mpeg_ser_do7_lsb 0
+#define xd_p_mp2if_mpeg_ser_mode (*(volatile byte xdata *) 0xF985)
+#define p_mp2if_mpeg_ser_mode 0xF985
+#define mp2if_mpeg_ser_mode_pos 0
+#define mp2if_mpeg_ser_mode_len 1
+#define mp2if_mpeg_ser_mode_lsb 0
+#define xd_p_mp2if_mpeg_par_mode (*(volatile byte xdata *) 0xF986)
+#define p_mp2if_mpeg_par_mode 0xF986
+#define mp2if_mpeg_par_mode_pos 0
+#define mp2if_mpeg_par_mode_len 1
+#define mp2if_mpeg_par_mode_lsb 0
+#define xd_r_mp2if_psb_empty (*(volatile byte xdata *) 0xF987)
+#define r_mp2if_psb_empty 0xF987
+#define mp2if_psb_empty_pos 0
+#define mp2if_psb_empty_len 1
+#define mp2if_psb_empty_lsb 0
+#define xd_r_mp2if_ts_not_188 (*(volatile byte xdata *) 0xF988)
+#define r_mp2if_ts_not_188 0xF988
+#define mp2if_ts_not_188_pos 0
+#define mp2if_ts_not_188_len 1
+#define mp2if_ts_not_188_lsb 0
+#define xd_p_mp2if_mssync_len (*(volatile byte xdata *) 0xF989)
+#define p_mp2if_mssync_len 0xF989
+#define mp2if_mssync_len_pos 0
+#define mp2if_mssync_len_len 1
+#define mp2if_mssync_len_lsb 0
+#define xd_p_mp2if_msdo_msb (*(volatile byte xdata *) 0xF98A)
+#define p_mp2if_msdo_msb 0xF98A
+#define mp2if_msdo_msb_pos 0
+#define mp2if_msdo_msb_len 1
+#define mp2if_msdo_msb_lsb 0
+#define xd_p_mp2if_mpeg_clk_gated (*(volatile byte xdata *) 0xF98B)
+#define p_mp2if_mpeg_clk_gated 0xF98B
+#define mp2if_mpeg_clk_gated_pos 0
+#define mp2if_mpeg_clk_gated_len 1
+#define mp2if_mpeg_clk_gated_lsb 0
+#define xd_p_mp2if_mpeg_err_pol (*(volatile byte xdata *) 0xF98C)
+#define p_mp2if_mpeg_err_pol 0xF98C
+#define mp2if_mpeg_err_pol_pos 0
+#define mp2if_mpeg_err_pol_len 1
+#define mp2if_mpeg_err_pol_lsb 0
+#define xd_p_mp2if_mpeg_sync_pol (*(volatile byte xdata *) 0xF98D)
+#define p_mp2if_mpeg_sync_pol 0xF98D
+#define mp2if_mpeg_sync_pol_pos 0
+#define mp2if_mpeg_sync_pol_len 1
+#define mp2if_mpeg_sync_pol_lsb 0
+#define xd_p_mp2if_mpeg_vld_pol (*(volatile byte xdata *) 0xF98E)
+#define p_mp2if_mpeg_vld_pol 0xF98E
+#define mp2if_mpeg_vld_pol_pos 0
+#define mp2if_mpeg_vld_pol_len 1
+#define mp2if_mpeg_vld_pol_lsb 0
+#define xd_p_mp2if_mpeg_clk_pol (*(volatile byte xdata *) 0xF98F)
+#define p_mp2if_mpeg_clk_pol 0xF98F
+#define mp2if_mpeg_clk_pol_pos 0
+#define mp2if_mpeg_clk_pol_len 1
+#define mp2if_mpeg_clk_pol_lsb 0
+#define xd_p_reg_mpeg_full_speed (*(volatile byte xdata *) 0xF990)
+#define p_reg_mpeg_full_speed 0xF990
+#define reg_mpeg_full_speed_pos 0
+#define reg_mpeg_full_speed_len 1
+#define reg_mpeg_full_speed_lsb 0
+#define xd_p_mp2if_pid_complement (*(volatile byte xdata *) 0xF991)
+#define p_mp2if_pid_complement 0xF991
+#define mp2if_pid_complement_pos 0
+#define mp2if_pid_complement_len 1
+#define mp2if_pid_complement_lsb 0
+#define xd_p_mp2if_pid_rst (*(volatile byte xdata *) 0xF992)
+#define p_mp2if_pid_rst 0xF992
+#define mp2if_pid_rst_pos 0
+#define mp2if_pid_rst_len 1
+#define mp2if_pid_rst_lsb 0
+#define xd_p_mp2if_pid_en (*(volatile byte xdata *) 0xF993)
+#define p_mp2if_pid_en 0xF993
+#define mp2if_pid_en_pos 0
+#define mp2if_pid_en_len 1
+#define mp2if_pid_en_lsb 0
+#define xd_p_mp2if_pid_index_en (*(volatile byte xdata *) 0xF994)
+#define p_mp2if_pid_index_en 0xF994
+#define mp2if_pid_index_en_pos 0
+#define mp2if_pid_index_en_len 1
+#define mp2if_pid_index_en_lsb 0
+#define xd_p_mp2if_pid_index (*(volatile byte xdata *) 0xF995)
+#define p_mp2if_pid_index 0xF995
+#define mp2if_pid_index_pos 0
+#define mp2if_pid_index_len 5
+#define mp2if_pid_index_lsb 0
+#define xd_p_mp2if_pid_dat_l (*(volatile byte xdata *) 0xF996)
+#define p_mp2if_pid_dat_l 0xF996
+#define mp2if_pid_dat_l_pos 0
+#define mp2if_pid_dat_l_len 8
+#define mp2if_pid_dat_l_lsb 0
+#define xd_p_mp2if_pid_dat_h (*(volatile byte xdata *) 0xF997)
+#define p_mp2if_pid_dat_h 0xF997
+#define mp2if_pid_dat_h_pos 0
+#define mp2if_pid_dat_h_len 5
+#define mp2if_pid_dat_h_lsb 0
+#define xd_p_reg_latch_clk (*(volatile byte xdata *) 0xF998)
+#define p_reg_latch_clk 0xF998
+#define reg_latch_clk_pos 0
+#define reg_latch_clk_len 1
+#define reg_latch_clk_lsb 0
+#define xd_r_mp2if_sync_byte_locked (*(volatile byte xdata *) 0xF999)
+#define r_mp2if_sync_byte_locked 0xF999
+#define mp2if_sync_byte_locked_pos 0
+#define mp2if_sync_byte_locked_len 1
+#define mp2if_sync_byte_locked_lsb 0
+#define xd_p_mp2if_ignore_sync_byte (*(volatile byte xdata *) 0xF99A)
+#define p_mp2if_ignore_sync_byte 0xF99A
+#define mp2if_ignore_sync_byte_pos 0
+#define mp2if_ignore_sync_byte_len 1
+#define mp2if_ignore_sync_byte_lsb 0
+#define xd_p_reg_mp2if_clk_en (*(volatile byte xdata *) 0xF99B)
+#define p_reg_mp2if_clk_en 0xF99B
+#define reg_mp2if_clk_en_pos 0
+#define reg_mp2if_clk_en_len 1
+#define reg_mp2if_clk_en_lsb 0
+#define xd_p_reg_mpeg_vld_tgl (*(volatile byte xdata *) 0xF99C)
+#define p_reg_mpeg_vld_tgl 0xF99C
+#define reg_mpeg_vld_tgl_pos 0
+#define reg_mpeg_vld_tgl_len 1
+#define reg_mpeg_vld_tgl_lsb 0
+#define xd_p_reg_mp2_sw_rst (*(volatile byte xdata *) 0xF99D)
+#define p_reg_mp2_sw_rst 0xF99D
+#define reg_mp2_sw_rst_pos 0
+#define reg_mp2_sw_rst_len 1
+#define reg_mp2_sw_rst_lsb 0
+#define xd_p_mp2if_psb_en (*(volatile byte xdata *) 0xF99E)
+#define p_mp2if_psb_en 0xF99E
+#define mp2if_psb_en_pos 0
+#define mp2if_psb_en_len 1
+#define mp2if_psb_en_lsb 0
+#define xd_r_mp2if_usb20_mode (*(volatile byte xdata *) 0xF99F)
+#define r_mp2if_usb20_mode 0xF99F
+#define mp2if_usb20_mode_pos 0
+#define mp2if_usb20_mode_len 1
+#define mp2if_usb20_mode_lsb 0
+#define xd_r_mp2if_strap_usb20_mode (*(volatile byte xdata *) 0xF9A0)
+#define r_mp2if_strap_usb20_mode 0xF9A0
+#define mp2if_strap_usb20_mode_pos 0
+#define mp2if_strap_usb20_mode_len 1
+#define mp2if_strap_usb20_mode_lsb 0
+#define xd_r_mp2if_lost_pkt_cnt_l (*(volatile byte xdata *) 0xF9A1)
+#define r_mp2if_lost_pkt_cnt_l 0xF9A1
+#define mp2if_lost_pkt_cnt_l_pos 0
+#define mp2if_lost_pkt_cnt_l_len 8
+#define mp2if_lost_pkt_cnt_l_lsb 0
+#define xd_r_mp2if_lost_pkt_cnt_h (*(volatile byte xdata *) 0xF9A2)
+#define r_mp2if_lost_pkt_cnt_h 0xF9A2
+#define mp2if_lost_pkt_cnt_h_pos 0
+#define mp2if_lost_pkt_cnt_h_len 8
+#define mp2if_lost_pkt_cnt_h_lsb 0
+#define xd_p_reg_mp2if2_en (*(volatile byte xdata *) 0xF9A3)
+#define p_reg_mp2if2_en 0xF9A3
+#define reg_mp2if2_en_pos 0
+#define reg_mp2if2_en_len 1
+#define reg_mp2if2_en_lsb 0
+#define xd_p_reg_mp2if2_sw_rst (*(volatile byte xdata *) 0xF9A4)
+#define p_reg_mp2if2_sw_rst 0xF9A4
+#define reg_mp2if2_sw_rst_pos 0
+#define reg_mp2if2_sw_rst_len 1
+#define reg_mp2if2_sw_rst_lsb 0
+#define xd_p_reg_mp2if2_half_psb (*(volatile byte xdata *) 0xF9A5)
+#define p_reg_mp2if2_half_psb 0xF9A5
+#define reg_mp2if2_half_psb_pos 0
+#define reg_mp2if2_half_psb_len 1
+#define reg_mp2if2_half_psb_lsb 0
+#define xd_p_reg_ts_byte_endian (*(volatile byte xdata *) 0xF9A6)
+#define p_reg_ts_byte_endian 0xF9A6
+#define reg_ts_byte_endian_pos 0
+#define reg_ts_byte_endian_len 1
+#define reg_ts_byte_endian_lsb 0
+#define xd_p_reg_mp2_dioif (*(volatile byte xdata *) 0xF9A7)
+#define p_reg_mp2_dioif 0xF9A7
+#define reg_mp2_dioif_pos 0
+#define reg_mp2_dioif_len 1
+#define reg_mp2_dioif_lsb 0
+#define xd_p_reg_mp2_dioif_fast (*(volatile byte xdata *) 0xF9A8)
+#define p_reg_mp2_dioif_fast 0xF9A8
+#define reg_mp2_dioif_fast_pos 0
+#define reg_mp2_dioif_fast_len 1
+#define reg_mp2_dioif_fast_lsb 0
+#define xd_p_reg_tpsd_bw_mp2if (*(volatile byte xdata *) 0xF9A9)
+#define p_reg_tpsd_bw_mp2if 0xF9A9
+#define reg_tpsd_bw_mp2if_pos 0
+#define reg_tpsd_bw_mp2if_len 2
+#define reg_tpsd_bw_mp2if_lsb 0
+#define xd_p_reg_tpsd_gi_mp2if (*(volatile byte xdata *) 0xF9AA)
+#define p_reg_tpsd_gi_mp2if 0xF9AA
+#define reg_tpsd_gi_mp2if_pos 0
+#define reg_tpsd_gi_mp2if_len 2
+#define reg_tpsd_gi_mp2if_lsb 0
+#define xd_p_reg_tpsd_cr_mp2if (*(volatile byte xdata *) 0xF9AB)
+#define p_reg_tpsd_cr_mp2if 0xF9AB
+#define reg_tpsd_cr_mp2if_pos 0
+#define reg_tpsd_cr_mp2if_len 3
+#define reg_tpsd_cr_mp2if_lsb 0
+#define xd_p_reg_tpsd_cons_mp2if (*(volatile byte xdata *) 0xF9AC)
+#define p_reg_tpsd_cons_mp2if 0xF9AC
+#define reg_tpsd_cons_mp2if_pos 0
+#define reg_tpsd_cons_mp2if_len 2
+#define reg_tpsd_cons_mp2if_lsb 0
+#define xd_p_reg_fw_table_en (*(volatile byte xdata *) 0xF9AD)
+#define p_reg_fw_table_en 0xF9AD
+#define reg_fw_table_en_pos 0
+#define reg_fw_table_en_len 1
+#define reg_fw_table_en_lsb 0
+#define xd_p_reg_p_aud_pk_gen_aud_pk_size (*(volatile byte xdata *) 0xF9AD)
+#define p_reg_p_aud_pk_gen_aud_pk_size 0xF9AD
+#define reg_p_aud_pk_gen_aud_pk_size_pos 1
+#define reg_p_aud_pk_gen_aud_pk_size_len 6
+#define reg_p_aud_pk_gen_aud_pk_size_lsb 0
+#define xd_p_mp2if_psb_num_blk (*(volatile byte xdata *) 0xF9AE)
+#define p_mp2if_psb_num_blk 0xF9AE
+#define mp2if_psb_num_blk_pos 0
+#define mp2if_psb_num_blk_len 6
+#define mp2if_psb_num_blk_lsb 0
+#define xd_p_reg_fec_fake (*(volatile byte xdata *) 0xF9AF)
+#define p_reg_fec_fake 0xF9AF
+#define reg_fec_fake_pos 0
+#define reg_fec_fake_len 1
+#define reg_fec_fake_lsb 0
+#define xd_p_reg_p_ccir_atv_en (*(volatile byte xdata *) 0xF9AF)
+#define p_reg_p_ccir_atv_en 0xF9AF
+#define reg_p_ccir_atv_en_pos 1
+#define reg_p_ccir_atv_en_len 1
+#define reg_p_ccir_atv_en_lsb 0
+#define xd_p_reg_video_stop_n (*(volatile byte xdata *) 0xF9AF)
+#define p_reg_video_stop_n 0xF9AF
+#define reg_video_stop_n_pos 2
+#define reg_video_stop_n_len 1
+#define reg_video_stop_n_lsb 0
+#define xd_p_reg_audio_stop_n (*(volatile byte xdata *) 0xF9AF)
+#define p_reg_audio_stop_n 0xF9AF
+#define reg_audio_stop_n_pos 3
+#define reg_audio_stop_n_len 1
+#define reg_audio_stop_n_lsb 0
+#define xd_p_mp2if_i2smode (*(volatile byte xdata *) 0xF9AF)
+#define p_mp2if_i2smode 0xF9AF
+#define mp2if_i2smode_pos 4
+#define mp2if_i2smode_len 2
+#define mp2if_i2smode_lsb 0
+#define xd_p_mp2if_word_size (*(volatile byte xdata *) 0xF9AF)
+#define p_mp2if_word_size 0xF9AF
+#define mp2if_word_size_pos 6
+#define mp2if_word_size_len 2
+#define mp2if_word_size_lsb 0
+#define xd_p_reg_packet_gap (*(volatile byte xdata *) 0xF9B0)
+#define p_reg_packet_gap 0xF9B0
+#define reg_packet_gap_pos 0
+#define reg_packet_gap_len 8
+#define reg_packet_gap_lsb 0
+#define xd_p_reg_ts_dat_inv (*(volatile byte xdata *) 0xF9B2)
+#define p_reg_ts_dat_inv 0xF9B2
+#define reg_ts_dat_inv_pos 0
+#define reg_ts_dat_inv_len 1
+#define reg_ts_dat_inv_lsb 0
+#define xd_p_reg_ts_lsb_1st (*(volatile byte xdata *) 0xF9B3)
+#define p_reg_ts_lsb_1st 0xF9B3
+#define reg_ts_lsb_1st_pos 0
+#define reg_ts_lsb_1st_len 1
+#define reg_ts_lsb_1st_lsb 0
+#define xd_p_reg_ts_capt_bg_sel (*(volatile byte xdata *) 0xF9B4)
+#define p_reg_ts_capt_bg_sel 0xF9B4
+#define reg_ts_capt_bg_sel_pos 0
+#define reg_ts_capt_bg_sel_len 1
+#define reg_ts_capt_bg_sel_lsb 0
+#define xd_p_reg_mp2if_stop_en (*(volatile byte xdata *) 0xF9B5)
+#define p_reg_mp2if_stop_en 0xF9B5
+#define reg_mp2if_stop_en_pos 0
+#define reg_mp2if_stop_en_len 1
+#define reg_mp2if_stop_en_lsb 0
+#define xd_p_reg_mp2if2_pes_base (*(volatile byte xdata *) 0xF9B6)
+#define p_reg_mp2if2_pes_base 0xF9B6
+#define reg_mp2if2_pes_base_pos 0
+#define reg_mp2if2_pes_base_len 1
+#define reg_mp2if2_pes_base_lsb 0
+#define xd_p_reg_ts_sync_inv (*(volatile byte xdata *) 0xF9B7)
+#define p_reg_ts_sync_inv 0xF9B7
+#define reg_ts_sync_inv_pos 0
+#define reg_ts_sync_inv_len 1
+#define reg_ts_sync_inv_lsb 0
+#define xd_p_reg_ts_vld_inv (*(volatile byte xdata *) 0xF9B8)
+#define p_reg_ts_vld_inv 0xF9B8
+#define reg_ts_vld_inv_pos 0
+#define reg_ts_vld_inv_len 1
+#define reg_ts_vld_inv_lsb 0
+#define xd_p_reg_sys_buf_overflow (*(volatile byte xdata *) 0xF9B9)
+#define p_reg_sys_buf_overflow 0xF9B9
+#define reg_sys_buf_overflow_pos 0
+#define reg_sys_buf_overflow_len 1
+#define reg_sys_buf_overflow_lsb 0
+#define xd_p_reg_top_dummy0 (*(volatile byte xdata *) 0xF9BB)
+#define p_reg_top_dummy0 0xF9BB
+#define reg_top_dummy0_pos 0
+#define reg_top_dummy0_len 8
+#define reg_top_dummy0_lsb 0
+#define xd_p_reg_top_dummy1 (*(volatile byte xdata *) 0xF9BC)
+#define p_reg_top_dummy1 0xF9BC
+#define reg_top_dummy1_pos 0
+#define reg_top_dummy1_len 8
+#define reg_top_dummy1_lsb 0
+#define xd_p_reg_top_dummy2 (*(volatile byte xdata *) 0xF9BD)
+#define p_reg_top_dummy2 0xF9BD
+#define reg_top_dummy2_pos 0
+#define reg_top_dummy2_len 8
+#define reg_top_dummy2_lsb 0
+#define xd_p_reg_top_dummy3 (*(volatile byte xdata *) 0xF9BE)
+#define p_reg_top_dummy3 0xF9BE
+#define reg_top_dummy3_pos 0
+#define reg_top_dummy3_len 8
+#define reg_top_dummy3_lsb 0
+#define xd_p_reg_top_dummy4 (*(volatile byte xdata *) 0xF9BF)
+#define p_reg_top_dummy4 0xF9BF
+#define reg_top_dummy4_pos 0
+#define reg_top_dummy4_len 8
+#define reg_top_dummy4_lsb 0
+#define xd_p_reg_top_dummy5 (*(volatile byte xdata *) 0xF9C0)
+#define p_reg_top_dummy5 0xF9C0
+#define reg_top_dummy5_pos 0
+#define reg_top_dummy5_len 8
+#define reg_top_dummy5_lsb 0
+#define xd_p_reg_top_dummy6 (*(volatile byte xdata *) 0xF9C1)
+#define p_reg_top_dummy6 0xF9C1
+#define reg_top_dummy6_pos 0
+#define reg_top_dummy6_len 8
+#define reg_top_dummy6_lsb 0
+#define xd_p_reg_top_dummy7 (*(volatile byte xdata *) 0xF9C2)
+#define p_reg_top_dummy7 0xF9C2
+#define reg_top_dummy7_pos 0
+#define reg_top_dummy7_len 8
+#define reg_top_dummy7_lsb 0
+#define xd_p_reg_top_dummy8 (*(volatile byte xdata *) 0xF9C3)
+#define p_reg_top_dummy8 0xF9C3
+#define reg_top_dummy8_pos 0
+#define reg_top_dummy8_len 8
+#define reg_top_dummy8_lsb 0
+#define xd_p_reg_top_dummy9 (*(volatile byte xdata *) 0xF9C4)
+#define p_reg_top_dummy9 0xF9C4
+#define reg_top_dummy9_pos 0
+#define reg_top_dummy9_len 8
+#define reg_top_dummy9_lsb 0
+#define xd_p_reg_top_dummyA (*(volatile byte xdata *) 0xF9C5)
+#define p_reg_top_dummyA 0xF9C5
+#define reg_top_dummyA_pos 0
+#define reg_top_dummyA_len 8
+#define reg_top_dummyA_lsb 0
+#define xd_p_reg_top_dummyB (*(volatile byte xdata *) 0xF9C6)
+#define p_reg_top_dummyB 0xF9C6
+#define reg_top_dummyB_pos 0
+#define reg_top_dummyB_len 8
+#define reg_top_dummyB_lsb 0
+#define xd_p_reg_top_dummyC (*(volatile byte xdata *) 0xF9C7)
+#define p_reg_top_dummyC 0xF9C7
+#define reg_top_dummyC_pos 0
+#define reg_top_dummyC_len 8
+#define reg_top_dummyC_lsb 0
+#define xd_p_reg_top_dummyD (*(volatile byte xdata *) 0xF9C8)
+#define p_reg_top_dummyD 0xF9C8
+#define reg_top_dummyD_pos 0
+#define reg_top_dummyD_len 8
+#define reg_top_dummyD_lsb 0
+#define xd_p_reg_top_dummyE (*(volatile byte xdata *) 0xF9C9)
+#define p_reg_top_dummyE 0xF9C9
+#define reg_top_dummyE_pos 0
+#define reg_top_dummyE_len 8
+#define reg_top_dummyE_lsb 0
+#define xd_p_reg_top_dummyF (*(volatile byte xdata *) 0xF9CA)
+#define p_reg_top_dummyF 0xF9CA
+#define reg_top_dummyF_pos 0
+#define reg_top_dummyF_len 8
+#define reg_top_dummyF_lsb 0
+#define xd_p_reg_mp2if_clk_coeff (*(volatile byte xdata *) 0xF9CB)
+#define p_reg_mp2if_clk_coeff 0xF9CB
+#define reg_mp2if_clk_coeff_pos 0
+#define reg_mp2if_clk_coeff_len 7
+#define reg_mp2if_clk_coeff_lsb 0
+#define xd_p_reg_tsip_en (*(volatile byte xdata *) 0xF9CC)
+#define p_reg_tsip_en 0xF9CC
+#define reg_tsip_en_pos 0
+#define reg_tsip_en_len 1
+#define reg_tsip_en_lsb 0
+#define xd_p_reg_tsis_en (*(volatile byte xdata *) 0xF9CD)
+#define p_reg_tsis_en 0xF9CD
+#define reg_tsis_en_pos 0
+#define reg_tsis_en_len 1
+#define reg_tsis_en_lsb 0
+#define xd_p_reg_tsip_br (*(volatile byte xdata *) 0xF9CE)
+#define p_reg_tsip_br 0xF9CE
+#define reg_tsip_br_pos 0
+#define reg_tsip_br_len 1
+#define reg_tsip_br_lsb 0
+#define xd_p_reg_tsip_frm_inv (*(volatile byte xdata *) 0xF9D0)
+#define p_reg_tsip_frm_inv 0xF9D0
+#define reg_tsip_frm_inv_pos 0
+#define reg_tsip_frm_inv_len 1
+#define reg_tsip_frm_inv_lsb 0
+#define xd_p_reg_tsip_str_inv (*(volatile byte xdata *) 0xF9D1)
+#define p_reg_tsip_str_inv 0xF9D1
+#define reg_tsip_str_inv_pos 0
+#define reg_tsip_str_inv_len 1
+#define reg_tsip_str_inv_lsb 0
+#define xd_p_reg_tsip_fail_inv (*(volatile byte xdata *) 0xF9D2)
+#define p_reg_tsip_fail_inv 0xF9D2
+#define reg_tsip_fail_inv_pos 0
+#define reg_tsip_fail_inv_len 1
+#define reg_tsip_fail_inv_lsb 0
+#define xd_p_reg_tsip_frm_ignore (*(volatile byte xdata *) 0xF9D3)
+#define p_reg_tsip_frm_ignore 0xF9D3
+#define reg_tsip_frm_ignore_pos 0
+#define reg_tsip_frm_ignore_len 1
+#define reg_tsip_frm_ignore_lsb 0
+#define xd_p_reg_tsip_str_ignore (*(volatile byte xdata *) 0xF9D4)
+#define p_reg_tsip_str_ignore 0xF9D4
+#define reg_tsip_str_ignore_pos 0
+#define reg_tsip_str_ignore_len 1
+#define reg_tsip_str_ignore_lsb 0
+#define xd_p_reg_tsip_fail_ignore (*(volatile byte xdata *) 0xF9D5)
+#define p_reg_tsip_fail_ignore 0xF9D5
+#define reg_tsip_fail_ignore_pos 0
+#define reg_tsip_fail_ignore_len 1
+#define reg_tsip_fail_ignore_lsb 0
+#define xd_p_reg_tsip_endian (*(volatile byte xdata *) 0xF9D6)
+#define p_reg_tsip_endian 0xF9D6
+#define reg_tsip_endian_pos 0
+#define reg_tsip_endian_len 1
+#define reg_tsip_endian_lsb 0
+#define xd_p_reg_tsip_overflow (*(volatile byte xdata *) 0xF9D7)
+#define p_reg_tsip_overflow 0xF9D7
+#define reg_tsip_overflow_pos 0
+#define reg_tsip_overflow_len 1
+#define reg_tsip_overflow_lsb 0
+#define xd_p_reg_ts_in_src (*(volatile byte xdata *) 0xF9D8)
+#define p_reg_ts_in_src 0xF9D8
+#define reg_ts_in_src_pos 0
+#define reg_ts_in_src_len 1
+#define reg_ts_in_src_lsb 0
+#define xd_r_reg_clk_sel (*(volatile byte xdata *) 0xF9D9)
+#define r_reg_clk_sel 0xF9D9
+#define reg_clk_sel_pos 0
+#define reg_clk_sel_len 2
+#define reg_clk_sel_lsb 0
+#define xd_r_reg_tog_sel (*(volatile byte xdata *) 0xF9DA)
+#define r_reg_tog_sel 0xF9DA
+#define reg_tog_sel_pos 0
+#define reg_tog_sel_len 2
+#define reg_tog_sel_lsb 0
+#define xd_p_reg_ts_str_ignore (*(volatile byte xdata *) 0xF9DB)
+#define p_reg_ts_str_ignore 0xF9DB
+#define reg_ts_str_ignore_pos 0
+#define reg_ts_str_ignore_len 1
+#define reg_ts_str_ignore_lsb 0
+#define xd_p_reg_ts_frm_ignore (*(volatile byte xdata *) 0xF9DC)
+#define p_reg_ts_frm_ignore 0xF9DC
+#define reg_ts_frm_ignore_pos 0
+#define reg_ts_frm_ignore_len 1
+#define reg_ts_frm_ignore_lsb 0
+#define xd_p_reg_clk_sel_fix (*(volatile byte xdata *) 0xF9DD)
+#define p_reg_clk_sel_fix 0xF9DD
+#define reg_clk_sel_fix_pos 0
+#define reg_clk_sel_fix_len 2
+#define reg_clk_sel_fix_lsb 0
+#define xd_p_reg_tog_sel_fix (*(volatile byte xdata *) 0xF9DE)
+#define p_reg_tog_sel_fix 0xF9DE
+#define reg_tog_sel_fix_pos 0
+#define reg_tog_sel_fix_len 2
+#define reg_tog_sel_fix_lsb 0
+#define xd_p_reg_en_fix (*(volatile byte xdata *) 0xF9DF)
+#define p_reg_en_fix 0xF9DF
+#define reg_en_fix_pos 0
+#define reg_en_fix_len 1
+#define reg_en_fix_lsb 0
+#define xd_p_reg_check_tpsd_hier (*(volatile byte xdata *) 0xF9E0)
+#define p_reg_check_tpsd_hier 0xF9E0
+#define reg_check_tpsd_hier_pos 0
+#define reg_check_tpsd_hier_len 1
+#define reg_check_tpsd_hier_lsb 0
+#define xd_p_reg_p_i2s_master_mode (*(volatile byte xdata *) 0xF9E1)
+#define p_reg_p_i2s_master_mode 0xF9E1
+#define reg_p_i2s_master_mode_pos 0
+#define reg_p_i2s_master_mode_len 1
+#define reg_p_i2s_master_mode_lsb 0
+#define xd_p_reg_p_sc_lr_ratio (*(volatile byte xdata *) 0xF9E2)
+#define p_reg_p_sc_lr_ratio 0xF9E2
+#define reg_p_sc_lr_ratio_pos 0
+#define reg_p_sc_lr_ratio_len 2
+#define reg_p_sc_lr_ratio_lsb 0
+#define xd_p_reg_p_i2s_fs_type (*(volatile byte xdata *) 0xF9E2)
+#define p_reg_p_i2s_fs_type 0xF9E2
+#define reg_p_i2s_fs_type_pos 2
+#define reg_p_i2s_fs_type_len 2
+#define reg_p_i2s_fs_type_lsb 0
+#define xd_r_reg_r_pp_fullq (*(volatile byte xdata *) 0xF9E3)
+#define r_reg_r_pp_fullq 0xF9E3
+#define reg_r_pp_fullq_pos 0
+#define reg_r_pp_fullq_len 1
+#define reg_r_pp_fullq_lsb 0
+#define xd_p_reg_r_ccir_rst (*(volatile byte xdata *) 0xF9E3)
+#define p_reg_r_ccir_rst 0xF9E3
+#define reg_r_ccir_rst_pos 1
+#define reg_r_ccir_rst_len 1
+#define reg_r_ccir_rst_lsb 0
+#define xd_p_reg_p_full_en (*(volatile byte xdata *) 0xF9E3)
+#define p_reg_p_full_en 0xF9E3
+#define reg_p_full_en_pos 2
+#define reg_p_full_en_len 1
+#define reg_p_full_en_lsb 0
+#define xd_p_reg_p_vbi_dis (*(volatile byte xdata *) 0xF9E3)
+#define p_reg_p_vbi_dis 0xF9E3
+#define reg_p_vbi_dis_pos 3
+#define reg_p_vbi_dis_len 1
+#define reg_p_vbi_dis_lsb 0
+#define xd_p_reg_p_ccir_all (*(volatile byte xdata *) 0xF9E3)
+#define p_reg_p_ccir_all 0xF9E3
+#define reg_p_ccir_all_pos 4
+#define reg_p_ccir_all_len 1
+#define reg_p_ccir_all_lsb 0
+#define xd_p_reg_p_ccir_vbi_raw_en (*(volatile byte xdata *) 0xF9E3)
+#define p_reg_p_ccir_vbi_raw_en 0xF9E3
+#define reg_p_ccir_vbi_raw_en_pos 5
+#define reg_p_ccir_vbi_raw_en_len 1
+#define reg_p_ccir_vbi_raw_en_lsb 0
+#define xd_p_reg_err_byte_en (*(volatile byte xdata *) 0xF9E4)
+#define p_reg_err_byte_en 0xF9E4
+#define reg_err_byte_en_pos 0
+#define reg_err_byte_en_len 1
+#define reg_err_byte_en_lsb 0
+#define xd_p_reg_mp2_f_adc_7_0 (*(volatile byte xdata *) 0xF9E5)
+#define p_reg_mp2_f_adc_7_0 0xF9E5
+#define reg_mp2_f_adc_7_0_pos 0
+#define reg_mp2_f_adc_7_0_len 8
+#define reg_mp2_f_adc_7_0_lsb 0
+#define xd_p_reg_mp2_f_adc_15_8 (*(volatile byte xdata *) 0xF9E6)
+#define p_reg_mp2_f_adc_15_8 0xF9E6
+#define reg_mp2_f_adc_15_8_pos 0
+#define reg_mp2_f_adc_15_8_len 8
+#define reg_mp2_f_adc_15_8_lsb 8
+#define xd_p_reg_mp2_f_adc_23_16 (*(volatile byte xdata *) 0xF9E7)
+#define p_reg_mp2_f_adc_23_16 0xF9E7
+#define reg_mp2_f_adc_23_16_pos 0
+#define reg_mp2_f_adc_23_16_len 8
+#define reg_mp2_f_adc_23_16_lsb 16
+#define xd_p_reg_set_util (*(volatile byte xdata *) 0xF9E8)
+#define p_reg_set_util 0xF9E8
+#define reg_set_util_pos 0
+#define reg_set_util_len 8
+#define reg_set_util_lsb 0
+#define xd_r_reg_err_byte (*(volatile byte xdata *) 0xF9E9)
+#define r_reg_err_byte 0xF9E9
+#define reg_err_byte_pos 0
+#define reg_err_byte_len 8
+#define reg_err_byte_lsb 0
+#define xd_p_reg_p_ln_num1 (*(volatile byte xdata *) 0xF9EA)
+#define p_reg_p_ln_num1 0xF9EA
+#define reg_p_ln_num1_pos 0
+#define reg_p_ln_num1_len 5
+#define reg_p_ln_num1_lsb 0
+#define xd_p_reg_p_ln_num2_2_0 (*(volatile byte xdata *) 0xF9EA)
+#define p_reg_p_ln_num2_2_0 0xF9EA
+#define reg_p_ln_num2_2_0_pos 5
+#define reg_p_ln_num2_2_0_len 3
+#define reg_p_ln_num2_2_0_lsb 0
+#define xd_p_reg_p_ln_num2_4_3 (*(volatile byte xdata *) 0xF9EB)
+#define p_reg_p_ln_num2_4_3 0xF9EB
+#define reg_p_ln_num2_4_3_pos 0
+#define reg_p_ln_num2_4_3_len 2
+#define reg_p_ln_num2_4_3_lsb 3
+#define xd_p_reg_p_ln_num3_5_0 (*(volatile byte xdata *) 0xF9EB)
+#define p_reg_p_ln_num3_5_0 0xF9EB
+#define reg_p_ln_num3_5_0_pos 2
+#define reg_p_ln_num3_5_0_len 6
+#define reg_p_ln_num3_5_0_lsb 0
+#define xd_p_reg_p_ln_num3_8_6 (*(volatile byte xdata *) 0xF9EC)
+#define p_reg_p_ln_num3_8_6 0xF9EC
+#define reg_p_ln_num3_8_6_pos 0
+#define reg_p_ln_num3_8_6_len 3
+#define reg_p_ln_num3_8_6_lsb 6
+#define xd_p_reg_p_ln_num4_4_0 (*(volatile byte xdata *) 0xF9EC)
+#define p_reg_p_ln_num4_4_0 0xF9EC
+#define reg_p_ln_num4_4_0_pos 3
+#define reg_p_ln_num4_4_0_len 5
+#define reg_p_ln_num4_4_0_lsb 0
+#define xd_p_reg_p_ln_num4_8_5 (*(volatile byte xdata *) 0xF9ED)
+#define p_reg_p_ln_num4_8_5 0xF9ED
+#define reg_p_ln_num4_8_5_pos 0
+#define reg_p_ln_num4_8_5_len 4
+#define reg_p_ln_num4_8_5_lsb 5
+#define xd_p_reg_p_ln_num5_3_0 (*(volatile byte xdata *) 0xF9ED)
+#define p_reg_p_ln_num5_3_0 0xF9ED
+#define reg_p_ln_num5_3_0_pos 4
+#define reg_p_ln_num5_3_0_len 4
+#define reg_p_ln_num5_3_0_lsb 0
+#define xd_p_reg_p_ln_num5_8_4 (*(volatile byte xdata *) 0xF9EE)
+#define p_reg_p_ln_num5_8_4 0xF9EE
+#define reg_p_ln_num5_8_4_pos 0
+#define reg_p_ln_num5_8_4_len 5
+#define reg_p_ln_num5_8_4_lsb 4
+#define xd_p_reg_p_ln_num6_2_0 (*(volatile byte xdata *) 0xF9EE)
+#define p_reg_p_ln_num6_2_0 0xF9EE
+#define reg_p_ln_num6_2_0_pos 5
+#define reg_p_ln_num6_2_0_len 3
+#define reg_p_ln_num6_2_0_lsb 0
+#define xd_p_reg_p_ln_num6_8_3 (*(volatile byte xdata *) 0xF9EF)
+#define p_reg_p_ln_num6_8_3 0xF9EF
+#define reg_p_ln_num6_8_3_pos 0
+#define reg_p_ln_num6_8_3_len 6
+#define reg_p_ln_num6_8_3_lsb 3
+#define xd_p_reg_p_pixel_num_7_0 (*(volatile byte xdata *) 0xF9F0)
+#define p_reg_p_pixel_num_7_0 0xF9F0
+#define reg_p_pixel_num_7_0_pos 0
+#define reg_p_pixel_num_7_0_len 8
+#define reg_p_pixel_num_7_0_lsb 0
+#define xd_p_reg_p_pixel_num_10_8 (*(volatile byte xdata *) 0xF9F1)
+#define p_reg_p_pixel_num_10_8 0xF9F1
+#define reg_p_pixel_num_10_8_pos 0
+#define reg_p_pixel_num_10_8_len 3
+#define reg_p_pixel_num_10_8_lsb 8
+#define xd_p_reg_p_ccir_yuv_en (*(volatile byte xdata *) 0xF9F1)
+#define p_reg_p_ccir_yuv_en 0xF9F1
+#define reg_p_ccir_yuv_en_pos 3
+#define reg_p_ccir_yuv_en_len 1
+#define reg_p_ccir_yuv_en_lsb 0
+#define xd_p_reg_p_ccir_size_sft (*(volatile byte xdata *) 0xF9F1)
+#define p_reg_p_ccir_size_sft 0xF9F1
+#define reg_p_ccir_size_sft_pos 4
+#define reg_p_ccir_size_sft_len 2
+#define reg_p_ccir_size_sft_lsb 0
+#define xd_p_reg_p_psb_cnt_sft (*(volatile byte xdata *) 0xF9F1)
+#define p_reg_p_psb_cnt_sft 0xF9F1
+#define reg_p_psb_cnt_sft_pos 6
+#define reg_p_psb_cnt_sft_len 2
+#define reg_p_psb_cnt_sft_lsb 0
+#define xd_p_reg_p_tpsd_lock_trigger (*(volatile byte xdata *) 0xF9F2)
+#define p_reg_p_tpsd_lock_trigger 0xF9F2
+#define reg_p_tpsd_lock_trigger_pos 0
+#define reg_p_tpsd_lock_trigger_len 1
+#define reg_p_tpsd_lock_trigger_lsb 0
+#define xd_p_reg_p_ccir_clk_sel (*(volatile byte xdata *) 0xF9F3)
+#define p_reg_p_ccir_clk_sel 0xF9F3
+#define reg_p_ccir_clk_sel_pos 0
+#define reg_p_ccir_clk_sel_len 1
+#define reg_p_ccir_clk_sel_lsb 0
+#define xd_p_reg_i2c_16_8_data_sel (*(volatile byte xdata *) 0xFB00)
+#define p_reg_i2c_16_8_data_sel 0xFB00
+#define reg_i2c_16_8_data_sel_pos 0
+#define reg_i2c_16_8_data_sel_len 1
+#define reg_i2c_16_8_data_sel_lsb 0
+#define xd_p_reg_i2c_slave_trigger_byte (*(volatile byte xdata *) 0xFB01)
+#define p_reg_i2c_slave_trigger_byte 0xFB01
+#define reg_i2c_slave_trigger_byte_pos 0
+#define reg_i2c_slave_trigger_byte_len 1
+#define reg_i2c_slave_trigger_byte_lsb 0
+#define xd_p_reg_wdti_level (*(volatile byte xdata *) 0xFB05)
+#define p_reg_wdti_level 0xFB05
+#define reg_wdti_level_pos 0
+#define reg_wdti_level_len 1
+#define reg_wdti_level_lsb 0
+#define xd_p_reg_rssi_avg_sel_lat (*(volatile byte xdata *) 0xFB06)
+#define p_reg_rssi_avg_sel_lat 0xFB06
+#define reg_rssi_avg_sel_lat_pos 0
+#define reg_rssi_avg_sel_lat_len 2
+#define reg_rssi_avg_sel_lat_lsb 0
+#define xd_r_ofsm_rssi_avg_7_0 (*(volatile byte xdata *) 0xFB07)
+#define r_ofsm_rssi_avg_7_0 0xFB07
+#define ofsm_rssi_avg_7_0_pos 0
+#define ofsm_rssi_avg_7_0_len 8
+#define ofsm_rssi_avg_7_0_lsb 0
+#define xd_r_ofsm_rssi_avg_9_8 (*(volatile byte xdata *) 0xFB08)
+#define r_ofsm_rssi_avg_9_8 0xFB08
+#define ofsm_rssi_avg_9_8_pos 0
+#define ofsm_rssi_avg_9_8_len 2
+#define ofsm_rssi_avg_9_8_lsb 8
+#define xd_r_ofsm_mbist_fail_mon51 (*(volatile byte xdata *) 0xFB09)
+#define r_ofsm_mbist_fail_mon51 0xFB09
+#define ofsm_mbist_fail_mon51_pos 0
+#define ofsm_mbist_fail_mon51_len 1
+#define ofsm_mbist_fail_mon51_lsb 0
+#define xd_r_ofsm_mbist_fail_com (*(volatile byte xdata *) 0xFB0A)
+#define r_ofsm_mbist_fail_com 0xFB0A
+#define ofsm_mbist_fail_com_pos 0
+#define ofsm_mbist_fail_com_len 1
+#define ofsm_mbist_fail_com_lsb 0
+#define xd_r_ofsm_mbist_fail_fft (*(volatile byte xdata *) 0xFB0B)
+#define r_ofsm_mbist_fail_fft 0xFB0B
+#define ofsm_mbist_fail_fft_pos 0
+#define ofsm_mbist_fail_fft_len 1
+#define ofsm_mbist_fail_fft_lsb 0
+#define xd_r_ofsm_mbist_fail_fd (*(volatile byte xdata *) 0xFB0C)
+#define r_ofsm_mbist_fail_fd 0xFB0C
+#define ofsm_mbist_fail_fd_pos 0
+#define ofsm_mbist_fail_fd_len 1
+#define ofsm_mbist_fail_fd_lsb 0
+#define xd_r_ofsm_mbist_fail_link (*(volatile byte xdata *) 0xFB0D)
+#define r_ofsm_mbist_fail_link 0xFB0D
+#define ofsm_mbist_fail_link_pos 0
+#define ofsm_mbist_fail_link_len 1
+#define ofsm_mbist_fail_link_lsb 0
+#define xd_r_ofsm_mbist_fail_mpe (*(volatile byte xdata *) 0xFB0E)
+#define r_ofsm_mbist_fail_mpe 0xFB0E
+#define ofsm_mbist_fail_mpe_pos 0
+#define ofsm_mbist_fail_mpe_len 1
+#define ofsm_mbist_fail_mpe_lsb 0
+#define xd_r_ofsm_mbist_done_mpe (*(volatile byte xdata *) 0xFB0F)
+#define r_ofsm_mbist_done_mpe 0xFB0F
+#define ofsm_mbist_done_mpe_pos 0
+#define ofsm_mbist_done_mpe_len 1
+#define ofsm_mbist_done_mpe_lsb 0
+#define xd_r_ofsm_mbist_mode_mpe (*(volatile byte xdata *) 0xFB10)
+#define r_ofsm_mbist_mode_mpe 0xFB10
+#define ofsm_mbist_mode_mpe_pos 0
+#define ofsm_mbist_mode_mpe_len 1
+#define ofsm_mbist_mode_mpe_lsb 0
+#define xd_p_ofsm_cmd_reg (*(volatile byte xdata *) 0xFB11)
+#define p_ofsm_cmd_reg 0xFB11
+#define ofsm_cmd_reg_pos 0
+#define ofsm_cmd_reg_len 8
+#define ofsm_cmd_reg_lsb 0
+#define xd_p_ofsm_addr_reg_h (*(volatile byte xdata *) 0xFB12)
+#define p_ofsm_addr_reg_h 0xFB12
+#define ofsm_addr_reg_h_pos 0
+#define ofsm_addr_reg_h_len 8
+#define ofsm_addr_reg_h_lsb 0
+#define xd_p_ofsm_addr_reg_l (*(volatile byte xdata *) 0xFB13)
+#define p_ofsm_addr_reg_l 0xFB13
+#define ofsm_addr_reg_l_pos 0
+#define ofsm_addr_reg_l_len 8
+#define ofsm_addr_reg_l_lsb 0
+#define xd_p_ofsm_data_reg_0 (*(volatile byte xdata *) 0xFB14)
+#define p_ofsm_data_reg_0 0xFB14
+#define ofsm_data_reg_0_pos 0
+#define ofsm_data_reg_0_len 8
+#define ofsm_data_reg_0_lsb 0
+#define xd_p_ofsm_data_reg_1 (*(volatile byte xdata *) 0xFB15)
+#define p_ofsm_data_reg_1 0xFB15
+#define ofsm_data_reg_1_pos 0
+#define ofsm_data_reg_1_len 8
+#define ofsm_data_reg_1_lsb 0
+#define xd_p_ofsm_data_reg_2 (*(volatile byte xdata *) 0xFB16)
+#define p_ofsm_data_reg_2 0xFB16
+#define ofsm_data_reg_2_pos 0
+#define ofsm_data_reg_2_len 8
+#define ofsm_data_reg_2_lsb 0
+#define xd_p_ofsm_data_reg_3 (*(volatile byte xdata *) 0xFB17)
+#define p_ofsm_data_reg_3 0xFB17
+#define ofsm_data_reg_3_pos 0
+#define ofsm_data_reg_3_len 8
+#define ofsm_data_reg_3_lsb 0
+#define xd_p_ofsm_data_reg_4 (*(volatile byte xdata *) 0xFB18)
+#define p_ofsm_data_reg_4 0xFB18
+#define ofsm_data_reg_4_pos 0
+#define ofsm_data_reg_4_len 8
+#define ofsm_data_reg_4_lsb 0
+#define xd_p_ofsm_data_reg_5 (*(volatile byte xdata *) 0xFB19)
+#define p_ofsm_data_reg_5 0xFB19
+#define ofsm_data_reg_5_pos 0
+#define ofsm_data_reg_5_len 8
+#define ofsm_data_reg_5_lsb 0
+#define xd_p_ofsm_data_reg_6 (*(volatile byte xdata *) 0xFB1A)
+#define p_ofsm_data_reg_6 0xFB1A
+#define ofsm_data_reg_6_pos 0
+#define ofsm_data_reg_6_len 8
+#define ofsm_data_reg_6_lsb 0
+#define xd_p_ofsm_data_reg_7 (*(volatile byte xdata *) 0xFB1B)
+#define p_ofsm_data_reg_7 0xFB1B
+#define ofsm_data_reg_7_pos 0
+#define ofsm_data_reg_7_len 8
+#define ofsm_data_reg_7_lsb 0
+#define xd_p_ofsm_data_reg_8 (*(volatile byte xdata *) 0xFB1C)
+#define p_ofsm_data_reg_8 0xFB1C
+#define ofsm_data_reg_8_pos 0
+#define ofsm_data_reg_8_len 8
+#define ofsm_data_reg_8_lsb 0
+#define xd_p_ofsm_data_reg_9 (*(volatile byte xdata *) 0xFB1D)
+#define p_ofsm_data_reg_9 0xFB1D
+#define ofsm_data_reg_9_pos 0
+#define ofsm_data_reg_9_len 8
+#define ofsm_data_reg_9_lsb 0
+#define xd_p_ofsm_data_reg_10 (*(volatile byte xdata *) 0xFB1E)
+#define p_ofsm_data_reg_10 0xFB1E
+#define ofsm_data_reg_10_pos 0
+#define ofsm_data_reg_10_len 8
+#define ofsm_data_reg_10_lsb 0
+#define xd_p_ofsm_data_reg_11 (*(volatile byte xdata *) 0xFB1F)
+#define p_ofsm_data_reg_11 0xFB1F
+#define ofsm_data_reg_11_pos 0
+#define ofsm_data_reg_11_len 8
+#define ofsm_data_reg_11_lsb 0
+#define xd_p_ofsm_data_reg_12 (*(volatile byte xdata *) 0xFB20)
+#define p_ofsm_data_reg_12 0xFB20
+#define ofsm_data_reg_12_pos 0
+#define ofsm_data_reg_12_len 8
+#define ofsm_data_reg_12_lsb 0
+#define xd_p_ofsm_data_reg_13 (*(volatile byte xdata *) 0xFB21)
+#define p_ofsm_data_reg_13 0xFB21
+#define ofsm_data_reg_13_pos 0
+#define ofsm_data_reg_13_len 8
+#define ofsm_data_reg_13_lsb 0
+#define xd_p_ofsm_data_reg_14 (*(volatile byte xdata *) 0xFB22)
+#define p_ofsm_data_reg_14 0xFB22
+#define ofsm_data_reg_14_pos 0
+#define ofsm_data_reg_14_len 8
+#define ofsm_data_reg_14_lsb 0
+#define xd_p_ofsm_data_reg_15 (*(volatile byte xdata *) 0xFB23)
+#define p_ofsm_data_reg_15 0xFB23
+#define ofsm_data_reg_15_pos 0
+#define ofsm_data_reg_15_len 8
+#define ofsm_data_reg_15_lsb 0
+#define xd_p_reg_afe_mem0 (*(volatile byte xdata *) 0xFB24)
+#define p_reg_afe_mem0 0xFB24
+#define reg_afe_mem0_pos 0
+#define reg_afe_mem0_len 8
+#define reg_afe_mem0_lsb 0
+#define xd_p_reg_afe_mem1 (*(volatile byte xdata *) 0xFB25)
+#define p_reg_afe_mem1 0xFB25
+#define reg_afe_mem1_pos 0
+#define reg_afe_mem1_len 8
+#define reg_afe_mem1_lsb 0
+#define xd_p_reg_afe_mem2 (*(volatile byte xdata *) 0xFB26)
+#define p_reg_afe_mem2 0xFB26
+#define reg_afe_mem2_pos 0
+#define reg_afe_mem2_len 8
+#define reg_afe_mem2_lsb 0
+#define xd_p_reg_afe_mem3 (*(volatile byte xdata *) 0xFB27)
+#define p_reg_afe_mem3 0xFB27
+#define reg_afe_mem3_pos 0
+#define reg_afe_mem3_len 8
+#define reg_afe_mem3_lsb 0
+#define xd_p_reg_afe_mem4 (*(volatile byte xdata *) 0xFB28)
+#define p_reg_afe_mem4 0xFB28
+#define reg_afe_mem4_pos 0
+#define reg_afe_mem4_len 8
+#define reg_afe_mem4_lsb 0
+#define xd_p_reg_afe_mem5 (*(volatile byte xdata *) 0xFB29)
+#define p_reg_afe_mem5 0xFB29
+#define reg_afe_mem5_pos 0
+#define reg_afe_mem5_len 8
+#define reg_afe_mem5_lsb 0
+#define xd_p_reg_afe_mem6 (*(volatile byte xdata *) 0xFB2A)
+#define p_reg_afe_mem6 0xFB2A
+#define reg_afe_mem6_pos 0
+#define reg_afe_mem6_len 8
+#define reg_afe_mem6_lsb 0
+#define xd_p_reg_afe_mem7 (*(volatile byte xdata *) 0xFB2B)
+#define p_reg_afe_mem7 0xFB2B
+#define reg_afe_mem7_pos 0
+#define reg_afe_mem7_len 8
+#define reg_afe_mem7_lsb 0
+#define xd_p_reg_i2cbootreq (*(volatile byte xdata *) 0xFB2C)
+#define p_reg_i2cbootreq 0xFB2C
+#define reg_i2cbootreq_pos 0
+#define reg_i2cbootreq_len 1
+#define reg_i2cbootreq_lsb 0
+#define xd_p_reg_rst_i2cm (*(volatile byte xdata *) 0xFB30)
+#define p_reg_rst_i2cm 0xFB30
+#define reg_rst_i2cm_pos 0
+#define reg_rst_i2cm_len 1
+#define reg_rst_i2cm_lsb 0
+#define xd_p_reg_rst_i2cs (*(volatile byte xdata *) 0xFB31)
+#define p_reg_rst_i2cs 0xFB31
+#define reg_rst_i2cs_pos 0
+#define reg_rst_i2cs_len 1
+#define reg_rst_i2cs_lsb 0
+#define xd_r_reg_top_gpioscli (*(volatile byte xdata *) 0xFB32)
+#define r_reg_top_gpioscli 0xFB32
+#define reg_top_gpioscli_pos 0
+#define reg_top_gpioscli_len 1
+#define reg_top_gpioscli_lsb 0
+#define xd_p_reg_top_gpiosclo (*(volatile byte xdata *) 0xFB33)
+#define p_reg_top_gpiosclo 0xFB33
+#define reg_top_gpiosclo_pos 0
+#define reg_top_gpiosclo_len 1
+#define reg_top_gpiosclo_lsb 0
+#define xd_p_reg_top_gpiosclen (*(volatile byte xdata *) 0xFB34)
+#define p_reg_top_gpiosclen 0xFB34
+#define reg_top_gpiosclen_pos 0
+#define reg_top_gpiosclen_len 1
+#define reg_top_gpiosclen_lsb 0
+#define xd_p_reg_top_gpiosclon (*(volatile byte xdata *) 0xFB35)
+#define p_reg_top_gpiosclon 0xFB35
+#define reg_top_gpiosclon_pos 0
+#define reg_top_gpiosclon_len 1
+#define reg_top_gpiosclon_lsb 0
+#define xd_r_reg_top_gpiosdai (*(volatile byte xdata *) 0xFB36)
+#define r_reg_top_gpiosdai 0xFB36
+#define reg_top_gpiosdai_pos 0
+#define reg_top_gpiosdai_len 1
+#define reg_top_gpiosdai_lsb 0
+#define xd_p_reg_top_gpiosdao (*(volatile byte xdata *) 0xFB37)
+#define p_reg_top_gpiosdao 0xFB37
+#define reg_top_gpiosdao_pos 0
+#define reg_top_gpiosdao_len 1
+#define reg_top_gpiosdao_lsb 0
+#define xd_p_reg_top_gpiosdaen (*(volatile byte xdata *) 0xFB38)
+#define p_reg_top_gpiosdaen 0xFB38
+#define reg_top_gpiosdaen_pos 0
+#define reg_top_gpiosdaen_len 1
+#define reg_top_gpiosdaen_lsb 0
+#define xd_p_reg_top_gpiosdaon (*(volatile byte xdata *) 0xFB39)
+#define p_reg_top_gpiosdaon 0xFB39
+#define reg_top_gpiosdaon_pos 0
+#define reg_top_gpiosdaon_len 1
+#define reg_top_gpiosdaon_lsb 0
+#define xd_p_reg_fix_rom_en (*(volatile byte xdata *) 0xFB3A)
+#define p_reg_fix_rom_en 0xFB3A
+#define reg_fix_rom_en_pos 0
+#define reg_fix_rom_en_len 1
+#define reg_fix_rom_en_lsb 0
+#define xd_p_reg_ofsm_bug_addh_0 (*(volatile byte xdata *) 0xFB3B)
+#define p_reg_ofsm_bug_addh_0 0xFB3B
+#define reg_ofsm_bug_addh_0_pos 0
+#define reg_ofsm_bug_addh_0_len 8
+#define reg_ofsm_bug_addh_0_lsb 0
+#define xd_p_reg_ofsm_bug_addl_0 (*(volatile byte xdata *) 0xFB3C)
+#define p_reg_ofsm_bug_addl_0 0xFB3C
+#define reg_ofsm_bug_addl_0_pos 0
+#define reg_ofsm_bug_addl_0_len 8
+#define reg_ofsm_bug_addl_0_lsb 0
+#define xd_p_reg_ofsm_bug_addh_1 (*(volatile byte xdata *) 0xFB3D)
+#define p_reg_ofsm_bug_addh_1 0xFB3D
+#define reg_ofsm_bug_addh_1_pos 0
+#define reg_ofsm_bug_addh_1_len 8
+#define reg_ofsm_bug_addh_1_lsb 0
+#define xd_p_reg_ofsm_bug_addl_1 (*(volatile byte xdata *) 0xFB3E)
+#define p_reg_ofsm_bug_addl_1 0xFB3E
+#define reg_ofsm_bug_addl_1_pos 0
+#define reg_ofsm_bug_addl_1_len 8
+#define reg_ofsm_bug_addl_1_lsb 0
+#define xd_p_reg_ofsm_bug_addh_2 (*(volatile byte xdata *) 0xFB3F)
+#define p_reg_ofsm_bug_addh_2 0xFB3F
+#define reg_ofsm_bug_addh_2_pos 0
+#define reg_ofsm_bug_addh_2_len 8
+#define reg_ofsm_bug_addh_2_lsb 0
+#define xd_p_reg_ofsm_bug_addl_2 (*(volatile byte xdata *) 0xFB40)
+#define p_reg_ofsm_bug_addl_2 0xFB40
+#define reg_ofsm_bug_addl_2_pos 0
+#define reg_ofsm_bug_addl_2_len 8
+#define reg_ofsm_bug_addl_2_lsb 0
+#define xd_p_reg_ofsm_bug_addh_3 (*(volatile byte xdata *) 0xFB41)
+#define p_reg_ofsm_bug_addh_3 0xFB41
+#define reg_ofsm_bug_addh_3_pos 0
+#define reg_ofsm_bug_addh_3_len 8
+#define reg_ofsm_bug_addh_3_lsb 0
+#define xd_p_reg_ofsm_bug_addl_3 (*(volatile byte xdata *) 0xFB42)
+#define p_reg_ofsm_bug_addl_3 0xFB42
+#define reg_ofsm_bug_addl_3_pos 0
+#define reg_ofsm_bug_addl_3_len 8
+#define reg_ofsm_bug_addl_3_lsb 0
+#define xd_p_reg_ofsm_bug_addh_4 (*(volatile byte xdata *) 0xFB43)
+#define p_reg_ofsm_bug_addh_4 0xFB43
+#define reg_ofsm_bug_addh_4_pos 0
+#define reg_ofsm_bug_addh_4_len 8
+#define reg_ofsm_bug_addh_4_lsb 0
+#define xd_p_reg_ofsm_bug_addl_4 (*(volatile byte xdata *) 0xFB44)
+#define p_reg_ofsm_bug_addl_4 0xFB44
+#define reg_ofsm_bug_addl_4_pos 0
+#define reg_ofsm_bug_addl_4_len 8
+#define reg_ofsm_bug_addl_4_lsb 0
+#define xd_p_reg_ofsm_bug_addh_5 (*(volatile byte xdata *) 0xFB45)
+#define p_reg_ofsm_bug_addh_5 0xFB45
+#define reg_ofsm_bug_addh_5_pos 0
+#define reg_ofsm_bug_addh_5_len 8
+#define reg_ofsm_bug_addh_5_lsb 0
+#define xd_p_reg_ofsm_bug_addl_5 (*(volatile byte xdata *) 0xFB46)
+#define p_reg_ofsm_bug_addl_5 0xFB46
+#define reg_ofsm_bug_addl_5_pos 0
+#define reg_ofsm_bug_addl_5_len 8
+#define reg_ofsm_bug_addl_5_lsb 0
+#define xd_p_reg_ofsm_bug_addh_6 (*(volatile byte xdata *) 0xFB47)
+#define p_reg_ofsm_bug_addh_6 0xFB47
+#define reg_ofsm_bug_addh_6_pos 0
+#define reg_ofsm_bug_addh_6_len 8
+#define reg_ofsm_bug_addh_6_lsb 0
+#define xd_p_reg_ofsm_bug_addl_6 (*(volatile byte xdata *) 0xFB48)
+#define p_reg_ofsm_bug_addl_6 0xFB48
+#define reg_ofsm_bug_addl_6_pos 0
+#define reg_ofsm_bug_addl_6_len 8
+#define reg_ofsm_bug_addl_6_lsb 0
+#define xd_p_reg_ofsm_bug_addh_7 (*(volatile byte xdata *) 0xFB49)
+#define p_reg_ofsm_bug_addh_7 0xFB49
+#define reg_ofsm_bug_addh_7_pos 0
+#define reg_ofsm_bug_addh_7_len 8
+#define reg_ofsm_bug_addh_7_lsb 0
+#define xd_p_reg_ofsm_bug_addl_7 (*(volatile byte xdata *) 0xFB4A)
+#define p_reg_ofsm_bug_addl_7 0xFB4A
+#define reg_ofsm_bug_addl_7_pos 0
+#define reg_ofsm_bug_addl_7_len 8
+#define reg_ofsm_bug_addl_7_lsb 0
+#define xd_p_reg_ofsm_bug_addh_8 (*(volatile byte xdata *) 0xFB4B)
+#define p_reg_ofsm_bug_addh_8 0xFB4B
+#define reg_ofsm_bug_addh_8_pos 0
+#define reg_ofsm_bug_addh_8_len 8
+#define reg_ofsm_bug_addh_8_lsb 0
+#define xd_p_reg_ofsm_bug_addl_8 (*(volatile byte xdata *) 0xFB4C)
+#define p_reg_ofsm_bug_addl_8 0xFB4C
+#define reg_ofsm_bug_addl_8_pos 0
+#define reg_ofsm_bug_addl_8_len 8
+#define reg_ofsm_bug_addl_8_lsb 0
+#define xd_p_reg_ofsm_bug_addh_9 (*(volatile byte xdata *) 0xFB4D)
+#define p_reg_ofsm_bug_addh_9 0xFB4D
+#define reg_ofsm_bug_addh_9_pos 0
+#define reg_ofsm_bug_addh_9_len 8
+#define reg_ofsm_bug_addh_9_lsb 0
+#define xd_p_reg_ofsm_bug_addl_9 (*(volatile byte xdata *) 0xFB4E)
+#define p_reg_ofsm_bug_addl_9 0xFB4E
+#define reg_ofsm_bug_addl_9_pos 0
+#define reg_ofsm_bug_addl_9_len 8
+#define reg_ofsm_bug_addl_9_lsb 0
+#define xd_p_reg_ofsm_bug_addh_10 (*(volatile byte xdata *) 0xFB4F)
+#define p_reg_ofsm_bug_addh_10 0xFB4F
+#define reg_ofsm_bug_addh_10_pos 0
+#define reg_ofsm_bug_addh_10_len 8
+#define reg_ofsm_bug_addh_10_lsb 0
+#define xd_p_reg_ofsm_bug_addl_10 (*(volatile byte xdata *) 0xFB50)
+#define p_reg_ofsm_bug_addl_10 0xFB50
+#define reg_ofsm_bug_addl_10_pos 0
+#define reg_ofsm_bug_addl_10_len 8
+#define reg_ofsm_bug_addl_10_lsb 0
+#define xd_p_reg_ofsm_bug_addh_11 (*(volatile byte xdata *) 0xFB51)
+#define p_reg_ofsm_bug_addh_11 0xFB51
+#define reg_ofsm_bug_addh_11_pos 0
+#define reg_ofsm_bug_addh_11_len 8
+#define reg_ofsm_bug_addh_11_lsb 0
+#define xd_p_reg_ofsm_bug_addl_11 (*(volatile byte xdata *) 0xFB52)
+#define p_reg_ofsm_bug_addl_11 0xFB52
+#define reg_ofsm_bug_addl_11_pos 0
+#define reg_ofsm_bug_addl_11_len 8
+#define reg_ofsm_bug_addl_11_lsb 0
+#define xd_p_reg_ofsm_bug_addh_12 (*(volatile byte xdata *) 0xFB53)
+#define p_reg_ofsm_bug_addh_12 0xFB53
+#define reg_ofsm_bug_addh_12_pos 0
+#define reg_ofsm_bug_addh_12_len 8
+#define reg_ofsm_bug_addh_12_lsb 0
+#define xd_p_reg_ofsm_bug_addl_12 (*(volatile byte xdata *) 0xFB54)
+#define p_reg_ofsm_bug_addl_12 0xFB54
+#define reg_ofsm_bug_addl_12_pos 0
+#define reg_ofsm_bug_addl_12_len 8
+#define reg_ofsm_bug_addl_12_lsb 0
+#define xd_p_reg_ofsm_bug_addh_13 (*(volatile byte xdata *) 0xFB55)
+#define p_reg_ofsm_bug_addh_13 0xFB55
+#define reg_ofsm_bug_addh_13_pos 0
+#define reg_ofsm_bug_addh_13_len 8
+#define reg_ofsm_bug_addh_13_lsb 0
+#define xd_p_reg_ofsm_bug_addl_13 (*(volatile byte xdata *) 0xFB56)
+#define p_reg_ofsm_bug_addl_13 0xFB56
+#define reg_ofsm_bug_addl_13_pos 0
+#define reg_ofsm_bug_addl_13_len 8
+#define reg_ofsm_bug_addl_13_lsb 0
+#define xd_p_reg_ofsm_bug_addh_14 (*(volatile byte xdata *) 0xFB57)
+#define p_reg_ofsm_bug_addh_14 0xFB57
+#define reg_ofsm_bug_addh_14_pos 0
+#define reg_ofsm_bug_addh_14_len 8
+#define reg_ofsm_bug_addh_14_lsb 0
+#define xd_p_reg_ofsm_bug_addl_14 (*(volatile byte xdata *) 0xFB58)
+#define p_reg_ofsm_bug_addl_14 0xFB58
+#define reg_ofsm_bug_addl_14_pos 0
+#define reg_ofsm_bug_addl_14_len 8
+#define reg_ofsm_bug_addl_14_lsb 0
+#define xd_p_reg_ofsm_bug_addh_15 (*(volatile byte xdata *) 0xFB59)
+#define p_reg_ofsm_bug_addh_15 0xFB59
+#define reg_ofsm_bug_addh_15_pos 0
+#define reg_ofsm_bug_addh_15_len 8
+#define reg_ofsm_bug_addh_15_lsb 0
+#define xd_p_reg_ofsm_bug_addl_15 (*(volatile byte xdata *) 0xFB5A)
+#define p_reg_ofsm_bug_addl_15 0xFB5A
+#define reg_ofsm_bug_addl_15_pos 0
+#define reg_ofsm_bug_addl_15_len 8
+#define reg_ofsm_bug_addl_15_lsb 0
+#define xd_p_reg_ofsm_jmp_addh_0 (*(volatile byte xdata *) 0xFB5B)
+#define p_reg_ofsm_jmp_addh_0 0xFB5B
+#define reg_ofsm_jmp_addh_0_pos 0
+#define reg_ofsm_jmp_addh_0_len 8
+#define reg_ofsm_jmp_addh_0_lsb 0
+#define xd_p_reg_ofsm_jmp_addl_0 (*(volatile byte xdata *) 0xFB5C)
+#define p_reg_ofsm_jmp_addl_0 0xFB5C
+#define reg_ofsm_jmp_addl_0_pos 0
+#define reg_ofsm_jmp_addl_0_len 8
+#define reg_ofsm_jmp_addl_0_lsb 0
+#define xd_p_reg_ofsm_jmp_addh_1 (*(volatile byte xdata *) 0xFB5D)
+#define p_reg_ofsm_jmp_addh_1 0xFB5D
+#define reg_ofsm_jmp_addh_1_pos 0
+#define reg_ofsm_jmp_addh_1_len 8
+#define reg_ofsm_jmp_addh_1_lsb 0
+#define xd_p_reg_ofsm_jmp_addl_1 (*(volatile byte xdata *) 0xFB5E)
+#define p_reg_ofsm_jmp_addl_1 0xFB5E
+#define reg_ofsm_jmp_addl_1_pos 0
+#define reg_ofsm_jmp_addl_1_len 8
+#define reg_ofsm_jmp_addl_1_lsb 0
+#define xd_p_reg_ofsm_jmp_addh_2 (*(volatile byte xdata *) 0xFB5F)
+#define p_reg_ofsm_jmp_addh_2 0xFB5F
+#define reg_ofsm_jmp_addh_2_pos 0
+#define reg_ofsm_jmp_addh_2_len 8
+#define reg_ofsm_jmp_addh_2_lsb 0
+#define xd_p_reg_ofsm_jmp_addl_2 (*(volatile byte xdata *) 0xFB60)
+#define p_reg_ofsm_jmp_addl_2 0xFB60
+#define reg_ofsm_jmp_addl_2_pos 0
+#define reg_ofsm_jmp_addl_2_len 8
+#define reg_ofsm_jmp_addl_2_lsb 0
+#define xd_p_reg_ofsm_jmp_addh_3 (*(volatile byte xdata *) 0xFB61)
+#define p_reg_ofsm_jmp_addh_3 0xFB61
+#define reg_ofsm_jmp_addh_3_pos 0
+#define reg_ofsm_jmp_addh_3_len 8
+#define reg_ofsm_jmp_addh_3_lsb 0
+#define xd_p_reg_ofsm_jmp_addl_3 (*(volatile byte xdata *) 0xFB62)
+#define p_reg_ofsm_jmp_addl_3 0xFB62
+#define reg_ofsm_jmp_addl_3_pos 0
+#define reg_ofsm_jmp_addl_3_len 8
+#define reg_ofsm_jmp_addl_3_lsb 0
+#define xd_p_reg_ofsm_jmp_addh_4 (*(volatile byte xdata *) 0xFB63)
+#define p_reg_ofsm_jmp_addh_4 0xFB63
+#define reg_ofsm_jmp_addh_4_pos 0
+#define reg_ofsm_jmp_addh_4_len 8
+#define reg_ofsm_jmp_addh_4_lsb 0
+#define xd_p_reg_ofsm_jmp_addl_4 (*(volatile byte xdata *) 0xFB64)
+#define p_reg_ofsm_jmp_addl_4 0xFB64
+#define reg_ofsm_jmp_addl_4_pos 0
+#define reg_ofsm_jmp_addl_4_len 8
+#define reg_ofsm_jmp_addl_4_lsb 0
+#define xd_p_reg_ofsm_jmp_addh_5 (*(volatile byte xdata *) 0xFB65)
+#define p_reg_ofsm_jmp_addh_5 0xFB65
+#define reg_ofsm_jmp_addh_5_pos 0
+#define reg_ofsm_jmp_addh_5_len 8
+#define reg_ofsm_jmp_addh_5_lsb 0
+#define xd_p_reg_ofsm_jmp_addl_5 (*(volatile byte xdata *) 0xFB66)
+#define p_reg_ofsm_jmp_addl_5 0xFB66
+#define reg_ofsm_jmp_addl_5_pos 0
+#define reg_ofsm_jmp_addl_5_len 8
+#define reg_ofsm_jmp_addl_5_lsb 0
+#define xd_p_reg_ofsm_jmp_addh_6 (*(volatile byte xdata *) 0xFB67)
+#define p_reg_ofsm_jmp_addh_6 0xFB67
+#define reg_ofsm_jmp_addh_6_pos 0
+#define reg_ofsm_jmp_addh_6_len 8
+#define reg_ofsm_jmp_addh_6_lsb 0
+#define xd_p_reg_ofsm_jmp_addl_6 (*(volatile byte xdata *) 0xFB68)
+#define p_reg_ofsm_jmp_addl_6 0xFB68
+#define reg_ofsm_jmp_addl_6_pos 0
+#define reg_ofsm_jmp_addl_6_len 8
+#define reg_ofsm_jmp_addl_6_lsb 0
+#define xd_p_reg_ofsm_jmp_addh_7 (*(volatile byte xdata *) 0xFB69)
+#define p_reg_ofsm_jmp_addh_7 0xFB69
+#define reg_ofsm_jmp_addh_7_pos 0
+#define reg_ofsm_jmp_addh_7_len 8
+#define reg_ofsm_jmp_addh_7_lsb 0
+#define xd_p_reg_ofsm_jmp_addl_7 (*(volatile byte xdata *) 0xFB6A)
+#define p_reg_ofsm_jmp_addl_7 0xFB6A
+#define reg_ofsm_jmp_addl_7_pos 0
+#define reg_ofsm_jmp_addl_7_len 8
+#define reg_ofsm_jmp_addl_7_lsb 0
+#define xd_p_reg_ofsm_jmp_addh_8 (*(volatile byte xdata *) 0xFB6B)
+#define p_reg_ofsm_jmp_addh_8 0xFB6B
+#define reg_ofsm_jmp_addh_8_pos 0
+#define reg_ofsm_jmp_addh_8_len 8
+#define reg_ofsm_jmp_addh_8_lsb 0
+#define xd_p_reg_ofsm_jmp_addl_8 (*(volatile byte xdata *) 0xFB6C)
+#define p_reg_ofsm_jmp_addl_8 0xFB6C
+#define reg_ofsm_jmp_addl_8_pos 0
+#define reg_ofsm_jmp_addl_8_len 8
+#define reg_ofsm_jmp_addl_8_lsb 0
+#define xd_p_reg_ofsm_jmp_addh_9 (*(volatile byte xdata *) 0xFB6D)
+#define p_reg_ofsm_jmp_addh_9 0xFB6D
+#define reg_ofsm_jmp_addh_9_pos 0
+#define reg_ofsm_jmp_addh_9_len 8
+#define reg_ofsm_jmp_addh_9_lsb 0
+#define xd_p_reg_ofsm_jmp_addl_9 (*(volatile byte xdata *) 0xFB6E)
+#define p_reg_ofsm_jmp_addl_9 0xFB6E
+#define reg_ofsm_jmp_addl_9_pos 0
+#define reg_ofsm_jmp_addl_9_len 8
+#define reg_ofsm_jmp_addl_9_lsb 0
+#define xd_p_reg_ofsm_jmp_addh_10 (*(volatile byte xdata *) 0xFB6F)
+#define p_reg_ofsm_jmp_addh_10 0xFB6F
+#define reg_ofsm_jmp_addh_10_pos 0
+#define reg_ofsm_jmp_addh_10_len 8
+#define reg_ofsm_jmp_addh_10_lsb 0
+#define xd_p_reg_ofsm_jmp_addl_10 (*(volatile byte xdata *) 0xFB70)
+#define p_reg_ofsm_jmp_addl_10 0xFB70
+#define reg_ofsm_jmp_addl_10_pos 0
+#define reg_ofsm_jmp_addl_10_len 8
+#define reg_ofsm_jmp_addl_10_lsb 0
+#define xd_p_reg_ofsm_jmp_addh_11 (*(volatile byte xdata *) 0xFB71)
+#define p_reg_ofsm_jmp_addh_11 0xFB71
+#define reg_ofsm_jmp_addh_11_pos 0
+#define reg_ofsm_jmp_addh_11_len 8
+#define reg_ofsm_jmp_addh_11_lsb 0
+#define xd_p_reg_ofsm_jmp_addl_11 (*(volatile byte xdata *) 0xFB72)
+#define p_reg_ofsm_jmp_addl_11 0xFB72
+#define reg_ofsm_jmp_addl_11_pos 0
+#define reg_ofsm_jmp_addl_11_len 8
+#define reg_ofsm_jmp_addl_11_lsb 0
+#define xd_p_reg_ofsm_jmp_addh_12 (*(volatile byte xdata *) 0xFB73)
+#define p_reg_ofsm_jmp_addh_12 0xFB73
+#define reg_ofsm_jmp_addh_12_pos 0
+#define reg_ofsm_jmp_addh_12_len 8
+#define reg_ofsm_jmp_addh_12_lsb 0
+#define xd_p_reg_ofsm_jmp_addl_12 (*(volatile byte xdata *) 0xFB74)
+#define p_reg_ofsm_jmp_addl_12 0xFB74
+#define reg_ofsm_jmp_addl_12_pos 0
+#define reg_ofsm_jmp_addl_12_len 8
+#define reg_ofsm_jmp_addl_12_lsb 0
+#define xd_p_reg_ofsm_jmp_addh_13 (*(volatile byte xdata *) 0xFB75)
+#define p_reg_ofsm_jmp_addh_13 0xFB75
+#define reg_ofsm_jmp_addh_13_pos 0
+#define reg_ofsm_jmp_addh_13_len 8
+#define reg_ofsm_jmp_addh_13_lsb 0
+#define xd_p_reg_ofsm_jmp_addl_13 (*(volatile byte xdata *) 0xFB76)
+#define p_reg_ofsm_jmp_addl_13 0xFB76
+#define reg_ofsm_jmp_addl_13_pos 0
+#define reg_ofsm_jmp_addl_13_len 8
+#define reg_ofsm_jmp_addl_13_lsb 0
+#define xd_p_reg_ofsm_jmp_addh_14 (*(volatile byte xdata *) 0xFB77)
+#define p_reg_ofsm_jmp_addh_14 0xFB77
+#define reg_ofsm_jmp_addh_14_pos 0
+#define reg_ofsm_jmp_addh_14_len 8
+#define reg_ofsm_jmp_addh_14_lsb 0
+#define xd_p_reg_ofsm_jmp_addl_14 (*(volatile byte xdata *) 0xFB78)
+#define p_reg_ofsm_jmp_addl_14 0xFB78
+#define reg_ofsm_jmp_addl_14_pos 0
+#define reg_ofsm_jmp_addl_14_len 8
+#define reg_ofsm_jmp_addl_14_lsb 0
+#define xd_p_reg_ofsm_jmp_addh_15 (*(volatile byte xdata *) 0xFB79)
+#define p_reg_ofsm_jmp_addh_15 0xFB79
+#define reg_ofsm_jmp_addh_15_pos 0
+#define reg_ofsm_jmp_addh_15_len 8
+#define reg_ofsm_jmp_addh_15_lsb 0
+#define xd_p_reg_ofsm_jmp_addl_15 (*(volatile byte xdata *) 0xFB7A)
+#define p_reg_ofsm_jmp_addl_15 0xFB7A
+#define reg_ofsm_jmp_addl_15_pos 0
+#define reg_ofsm_jmp_addl_15_len 8
+#define reg_ofsm_jmp_addl_15_lsb 0
+#define xd_p_reg_sw_mon51 (*(volatile byte xdata *) 0xFB7B)
+#define p_reg_sw_mon51 0xFB7B
+#define reg_sw_mon51_pos 0
+#define reg_sw_mon51_len 7
+#define reg_sw_mon51_lsb 0
+#define xd_p_reg_ofdm_mon51_flag (*(volatile byte xdata *) 0xFB7C)
+#define p_reg_ofdm_mon51_flag 0xFB7C
+#define reg_ofdm_mon51_flag_pos 0
+#define reg_ofdm_mon51_flag_len 1
+#define reg_ofdm_mon51_flag_lsb 0
+#define xd_p_reg_ofdm_force_mon51 (*(volatile byte xdata *) 0xFB7D)
+#define p_reg_ofdm_force_mon51 0xFB7D
+#define reg_ofdm_force_mon51_pos 0
+#define reg_ofdm_force_mon51_len 1
+#define reg_ofdm_force_mon51_lsb 0
+#define xd_p_reg_ofdm_which_cpu (*(volatile byte xdata *) 0xFB7E)
+#define p_reg_ofdm_which_cpu 0xFB7E
+#define reg_ofdm_which_cpu_pos 0
+#define reg_ofdm_which_cpu_len 1
+#define reg_ofdm_which_cpu_lsb 0
+#define xd_p_reg_ofdm_code_ready (*(volatile byte xdata *) 0xFB7F)
+#define p_reg_ofdm_code_ready 0xFB7F
+#define reg_ofdm_code_ready_pos 0
+#define reg_ofdm_code_ready_len 1
+#define reg_ofdm_code_ready_lsb 0
+#define xd_p_reg_ofdm_mailbox_wend (*(volatile byte xdata *) 0xFB80)
+#define p_reg_ofdm_mailbox_wend 0xFB80
+#define reg_ofdm_mailbox_wend_pos 0
+#define reg_ofdm_mailbox_wend_len 1
+#define reg_ofdm_mailbox_wend_lsb 0
+#define xd_r_reg_fast_slow_train (*(volatile byte xdata *) 0xFB81)
+#define r_reg_fast_slow_train 0xFB81
+#define reg_fast_slow_train_pos 0
+#define reg_fast_slow_train_len 1
+#define reg_fast_slow_train_lsb 0
+#define xd_p_reg_ofdm_mailbox_wptr (*(volatile byte xdata *) 0xFB82)
+#define p_reg_ofdm_mailbox_wptr 0xFB82
+#define reg_ofdm_mailbox_wptr_pos 0
+#define reg_ofdm_mailbox_wptr_len 8
+#define reg_ofdm_mailbox_wptr_lsb 0
+#define xd_p_reg_ofdm_mailbox_int (*(volatile byte xdata *) 0xFB86)
+#define p_reg_ofdm_mailbox_int 0xFB86
+#define reg_ofdm_mailbox_int_pos 0
+#define reg_ofdm_mailbox_int_len 1
+#define reg_ofdm_mailbox_int_lsb 0
+#define xd_p_reg_ofdm_lnk2ofdm_int (*(volatile byte xdata *) 0xFB87)
+#define p_reg_ofdm_lnk2ofdm_int 0xFB87
+#define reg_ofdm_lnk2ofdm_int_pos 0
+#define reg_ofdm_lnk2ofdm_int_len 1
+#define reg_ofdm_lnk2ofdm_int_lsb 0
+#define xd_p_reg_ofdm_ofdm2lnk_int (*(volatile byte xdata *) 0xFB88)
+#define p_reg_ofdm_ofdm2lnk_int 0xFB88
+#define reg_ofdm_ofdm2lnk_int_pos 0
+#define reg_ofdm_ofdm2lnk_int_len 1
+#define reg_ofdm_ofdm2lnk_int_lsb 0
+#define xd_r_reg_load_ofdm_reg (*(volatile byte xdata *) 0xFB8F)
+#define r_reg_load_ofdm_reg 0xFB8F
+#define reg_load_ofdm_reg_pos 0
+#define reg_load_ofdm_reg_len 1
+#define reg_load_ofdm_reg_lsb 0
+#define xd_p_reg_lnk_mbx_rd_length_7_0 (*(volatile byte xdata *) 0xFB90)
+#define p_reg_lnk_mbx_rd_length_7_0 0xFB90
+#define reg_lnk_mbx_rd_length_7_0_pos 0
+#define reg_lnk_mbx_rd_length_7_0_len 8
+#define reg_lnk_mbx_rd_length_7_0_lsb 0
+#define xd_p_reg_lnk_mbx_rd_length_15_8 (*(volatile byte xdata *) 0xFB91)
+#define p_reg_lnk_mbx_rd_length_15_8 0xFB91
+#define reg_lnk_mbx_rd_length_15_8_pos 0
+#define reg_lnk_mbx_rd_length_15_8_len 8
+#define reg_lnk_mbx_rd_length_15_8_lsb 8
+#define xd_p_reg_lnk_mbx_rd_length_17_16 (*(volatile byte xdata *) 0xFB92)
+#define p_reg_lnk_mbx_rd_length_17_16 0xFB92
+#define reg_lnk_mbx_rd_length_17_16_pos 0
+#define reg_lnk_mbx_rd_length_17_16_len 2
+#define reg_lnk_mbx_rd_length_17_16_lsb 16
+#define xd_p_reg_lnk_rd_data_sel (*(volatile byte xdata *) 0xFB93)
+#define p_reg_lnk_rd_data_sel 0xFB93
+#define reg_lnk_rd_data_sel_pos 0
+#define reg_lnk_rd_data_sel_len 2
+#define reg_lnk_rd_data_sel_lsb 0
+#define xd_p_reg_ofdm2lnk_data_7_0 (*(volatile byte xdata *) 0xFB96)
+#define p_reg_ofdm2lnk_data_7_0 0xFB96
+#define reg_ofdm2lnk_data_7_0_pos 0
+#define reg_ofdm2lnk_data_7_0_len 8
+#define reg_ofdm2lnk_data_7_0_lsb 0
+#define xd_p_reg_ofdm2lnk_data_15_8 (*(volatile byte xdata *) 0xFB97)
+#define p_reg_ofdm2lnk_data_15_8 0xFB97
+#define reg_ofdm2lnk_data_15_8_pos 0
+#define reg_ofdm2lnk_data_15_8_len 8
+#define reg_ofdm2lnk_data_15_8_lsb 8
+#define xd_p_reg_ofdm2lnk_data_23_16 (*(volatile byte xdata *) 0xFB98)
+#define p_reg_ofdm2lnk_data_23_16 0xFB98
+#define reg_ofdm2lnk_data_23_16_pos 0
+#define reg_ofdm2lnk_data_23_16_len 8
+#define reg_ofdm2lnk_data_23_16_lsb 16
+#define xd_p_reg_ofdm2lnk_data_31_24 (*(volatile byte xdata *) 0xFB99)
+#define p_reg_ofdm2lnk_data_31_24 0xFB99
+#define reg_ofdm2lnk_data_31_24_pos 0
+#define reg_ofdm2lnk_data_31_24_len 8
+#define reg_ofdm2lnk_data_31_24_lsb 24
+#define xd_p_reg_ofdm2lnk_data_39_32 (*(volatile byte xdata *) 0xFB9A)
+#define p_reg_ofdm2lnk_data_39_32 0xFB9A
+#define reg_ofdm2lnk_data_39_32_pos 0
+#define reg_ofdm2lnk_data_39_32_len 8
+#define reg_ofdm2lnk_data_39_32_lsb 32
+#define xd_p_reg_ofdm2lnk_data_47_40 (*(volatile byte xdata *) 0xFB9B)
+#define p_reg_ofdm2lnk_data_47_40 0xFB9B
+#define reg_ofdm2lnk_data_47_40_pos 0
+#define reg_ofdm2lnk_data_47_40_len 8
+#define reg_ofdm2lnk_data_47_40_lsb 40
+#define xd_p_reg_ofdm2lnk_data_55_48 (*(volatile byte xdata *) 0xFB9C)
+#define p_reg_ofdm2lnk_data_55_48 0xFB9C
+#define reg_ofdm2lnk_data_55_48_pos 0
+#define reg_ofdm2lnk_data_55_48_len 8
+#define reg_ofdm2lnk_data_55_48_lsb 48
+#define xd_p_reg_ofdm2lnk_data_63_56 (*(volatile byte xdata *) 0xFB9D)
+#define p_reg_ofdm2lnk_data_63_56 0xFB9D
+#define reg_ofdm2lnk_data_63_56_pos 0
+#define reg_ofdm2lnk_data_63_56_len 8
+#define reg_ofdm2lnk_data_63_56_lsb 56
+#define xd_p_reg_lnktoofdm_data_7_0 (*(volatile byte xdata *) 0xFB9E)
+#define p_reg_lnktoofdm_data_7_0 0xFB9E
+#define reg_lnktoofdm_data_7_0_pos 0
+#define reg_lnktoofdm_data_7_0_len 8
+#define reg_lnktoofdm_data_7_0_lsb 0
+#define xd_p_reg_lnktoofdm_data_15_8 (*(volatile byte xdata *) 0xFB9F)
+#define p_reg_lnktoofdm_data_15_8 0xFB9F
+#define reg_lnktoofdm_data_15_8_pos 0
+#define reg_lnktoofdm_data_15_8_len 8
+#define reg_lnktoofdm_data_15_8_lsb 8
+#define xd_p_reg_lnktoofdm_data_23_16 (*(volatile byte xdata *) 0xFBA0)
+#define p_reg_lnktoofdm_data_23_16 0xFBA0
+#define reg_lnktoofdm_data_23_16_pos 0
+#define reg_lnktoofdm_data_23_16_len 8
+#define reg_lnktoofdm_data_23_16_lsb 16
+#define xd_p_reg_lnktoofdm_data_31_24 (*(volatile byte xdata *) 0xFBA1)
+#define p_reg_lnktoofdm_data_31_24 0xFBA1
+#define reg_lnktoofdm_data_31_24_pos 0
+#define reg_lnktoofdm_data_31_24_len 8
+#define reg_lnktoofdm_data_31_24_lsb 24
+#define xd_p_reg_lnktoofdm_data_39_32 (*(volatile byte xdata *) 0xFBA2)
+#define p_reg_lnktoofdm_data_39_32 0xFBA2
+#define reg_lnktoofdm_data_39_32_pos 0
+#define reg_lnktoofdm_data_39_32_len 8
+#define reg_lnktoofdm_data_39_32_lsb 32
+#define xd_p_reg_lnktoofdm_data_47_40 (*(volatile byte xdata *) 0xFBA3)
+#define p_reg_lnktoofdm_data_47_40 0xFBA3
+#define reg_lnktoofdm_data_47_40_pos 0
+#define reg_lnktoofdm_data_47_40_len 8
+#define reg_lnktoofdm_data_47_40_lsb 40
+#define xd_p_reg_lnktoofdm_data_55_48 (*(volatile byte xdata *) 0xFBA4)
+#define p_reg_lnktoofdm_data_55_48 0xFBA4
+#define reg_lnktoofdm_data_55_48_pos 0
+#define reg_lnktoofdm_data_55_48_len 8
+#define reg_lnktoofdm_data_55_48_lsb 48
+#define xd_p_reg_lnktoofdm_data_63_56 (*(volatile byte xdata *) 0xFBA5)
+#define p_reg_lnktoofdm_data_63_56 0xFBA5
+#define reg_lnktoofdm_data_63_56_pos 0
+#define reg_lnktoofdm_data_63_56_len 8
+#define reg_lnktoofdm_data_63_56_lsb 56
+#define xd_p_reg_dbgif32_sel (*(volatile byte xdata *) 0xFBA6)
+#define p_reg_dbgif32_sel 0xFBA6
+#define reg_dbgif32_sel_pos 0
+#define reg_dbgif32_sel_len 2
+#define reg_dbgif32_sel_lsb 0
+#define xd_p_reg_dyn1_clk (*(volatile byte xdata *) 0xFBA7)
+#define p_reg_dyn1_clk 0xFBA7
+#define reg_dyn1_clk_pos 0
+#define reg_dyn1_clk_len 1
+#define reg_dyn1_clk_lsb 0
+#define xd_p_reg_dyn0_clk (*(volatile byte xdata *) 0xFBA8)
+#define p_reg_dyn0_clk 0xFBA8
+#define reg_dyn0_clk_pos 0
+#define reg_dyn0_clk_len 1
+#define reg_dyn0_clk_lsb 0
+#define xd_p_reg_free_clk (*(volatile byte xdata *) 0xFBA9)
+#define p_reg_free_clk 0xFBA9
+#define reg_free_clk_pos 0
+#define reg_free_clk_len 1
+#define reg_free_clk_lsb 0
+#define xd_p_reg_ofdm_stick_mem_end_7_0 (*(volatile byte xdata *) 0xFBAD)
+#define p_reg_ofdm_stick_mem_end_7_0 0xFBAD
+#define reg_ofdm_stick_mem_end_7_0_pos 0
+#define reg_ofdm_stick_mem_end_7_0_len 8
+#define reg_ofdm_stick_mem_end_7_0_lsb 0
+#define xd_p_reg_ofdm_stick_mem_end_15_8 (*(volatile byte xdata *) 0xFBAE)
+#define p_reg_ofdm_stick_mem_end_15_8 0xFBAE
+#define reg_ofdm_stick_mem_end_15_8_pos 0
+#define reg_ofdm_stick_mem_end_15_8_len 8
+#define reg_ofdm_stick_mem_end_15_8_lsb 8
+#define xd_p_reg_ofdm_cpu_reset (*(volatile byte xdata *) 0xFBAF)
+#define p_reg_ofdm_cpu_reset 0xFBAF
+#define reg_ofdm_cpu_reset_pos 0
+#define reg_ofdm_cpu_reset_len 1
+#define reg_ofdm_cpu_reset_lsb 0
+#define xd_p_reg_ofdm_bank_float_en (*(volatile byte xdata *) 0xFBB0)
+#define p_reg_ofdm_bank_float_en 0xFBB0
+#define reg_ofdm_bank_float_en_pos 0
+#define reg_ofdm_bank_float_en_len 1
+#define reg_ofdm_bank_float_en_lsb 0
+#define xd_p_reg_ofdm_bank_float_start (*(volatile byte xdata *) 0xFBB1)
+#define p_reg_ofdm_bank_float_start 0xFBB1
+#define reg_ofdm_bank_float_start_pos 0
+#define reg_ofdm_bank_float_start_len 8
+#define reg_ofdm_bank_float_start_lsb 0
+#define xd_p_reg_ofdm_bank_float_stop (*(volatile byte xdata *) 0xFBB2)
+#define p_reg_ofdm_bank_float_stop 0xFBB2
+#define reg_ofdm_bank_float_stop_pos 0
+#define reg_ofdm_bank_float_stop_len 8
+#define reg_ofdm_bank_float_stop_lsb 0
+#define xd_r_ofsm_bond0_i (*(volatile byte xdata *) 0xFBB3)
+#define r_ofsm_bond0_i 0xFBB3
+#define ofsm_bond0_i_pos 0
+#define ofsm_bond0_i_len 1
+#define ofsm_bond0_i_lsb 0
+#define xd_r_ofsm_bond1_i (*(volatile byte xdata *) 0xFBB4)
+#define r_ofsm_bond1_i 0xFBB4
+#define ofsm_bond1_i_pos 0
+#define ofsm_bond1_i_len 1
+#define ofsm_bond1_i_lsb 0
+#define xd_r_io_mux_pwron_clk_strap (*(volatile byte xdata *) 0xD800)
+#define r_io_mux_pwron_clk_strap 0xD800
+#define io_mux_pwron_clk_strap_pos 0
+#define io_mux_pwron_clk_strap_len 4
+#define io_mux_pwron_clk_strap_lsb 0
+#define xd_r_io_mux_pwron_mode_strap (*(volatile byte xdata *) 0xD801)
+#define r_io_mux_pwron_mode_strap 0xD801
+#define io_mux_pwron_mode_strap_pos 0
+#define io_mux_pwron_mode_strap_len 4
+#define io_mux_pwron_mode_strap_lsb 0
+#define xd_r_io_mux_pwron_hosta (*(volatile byte xdata *) 0xD802)
+#define r_io_mux_pwron_hosta 0xD802
+#define io_mux_pwron_hosta_pos 0
+#define io_mux_pwron_hosta_len 1
+#define io_mux_pwron_hosta_lsb 0
+#define xd_r_reg_top_revid (*(volatile byte xdata *) 0xD803)
+#define r_reg_top_revid 0xD803
+#define reg_top_revid_pos 0
+#define reg_top_revid_len 4
+#define reg_top_revid_lsb 0
+#define xd_r_io_mux_bond0_i (*(volatile byte xdata *) 0xD804)
+#define r_io_mux_bond0_i 0xD804
+#define io_mux_bond0_i_pos 0
+#define io_mux_bond0_i_len 1
+#define io_mux_bond0_i_lsb 0
+#define xd_r_io_mux_bondu0_i (*(volatile byte xdata *) 0xD805)
+#define r_io_mux_bondu0_i 0xD805
+#define io_mux_bondu0_i_pos 0
+#define io_mux_bondu0_i_len 1
+#define io_mux_bondu0_i_lsb 0
+#define xd_p_reg_ofsm_suspend (*(volatile byte xdata *) 0xD806)
+#define p_reg_ofsm_suspend 0xD806
+#define reg_ofsm_suspend_pos 0
+#define reg_ofsm_suspend_len 1
+#define reg_ofsm_suspend_lsb 0
+#define xd_p_reg_tslice_off (*(volatile byte xdata *) 0xD807)
+#define p_reg_tslice_off 0xD807
+#define reg_tslice_off_pos 0
+#define reg_tslice_off_len 1
+#define reg_tslice_off_lsb 0
+#define xd_p_io_mux_wake_int (*(volatile byte xdata *) 0xD808)
+#define p_io_mux_wake_int 0xD808
+#define io_mux_wake_int_pos 0
+#define io_mux_wake_int_len 1
+#define io_mux_wake_int_lsb 0
+#define xd_p_reg_top_pwrdw_hwen (*(volatile byte xdata *) 0xD809)
+#define p_reg_top_pwrdw_hwen 0xD809
+#define reg_top_pwrdw_hwen_pos 0
+#define reg_top_pwrdw_hwen_len 1
+#define reg_top_pwrdw_hwen_lsb 0
+#define xd_p_reg_top_pwrdw_inv (*(volatile byte xdata *) 0xD80A)
+#define p_reg_top_pwrdw_inv 0xD80A
+#define reg_top_pwrdw_inv_pos 0
+#define reg_top_pwrdw_inv_len 1
+#define reg_top_pwrdw_inv_lsb 0
+#define xd_p_reg_top_pwrdw (*(volatile byte xdata *) 0xD80B)
+#define p_reg_top_pwrdw 0xD80B
+#define reg_top_pwrdw_pos 0
+#define reg_top_pwrdw_len 1
+#define reg_top_pwrdw_lsb 0
+#define xd_p_io_mux_wake_int_en (*(volatile byte xdata *) 0xD80C)
+#define p_io_mux_wake_int_en 0xD80C
+#define io_mux_wake_int_en_pos 0
+#define io_mux_wake_int_en_len 1
+#define io_mux_wake_int_en_lsb 0
+#define xd_p_io_mux_pwrdw_int (*(volatile byte xdata *) 0xD80D)
+#define p_io_mux_pwrdw_int 0xD80D
+#define io_mux_pwrdw_int_pos 0
+#define io_mux_pwrdw_int_len 1
+#define io_mux_pwrdw_int_lsb 0
+#define xd_p_reg_top_adcdly (*(volatile byte xdata *) 0xD80E)
+#define p_reg_top_adcdly 0xD80E
+#define reg_top_adcdly_pos 0
+#define reg_top_adcdly_len 2
+#define reg_top_adcdly_lsb 0
+#define xd_p_reg_top_debug (*(volatile byte xdata *) 0xD80F)
+#define p_reg_top_debug 0xD80F
+#define reg_top_debug_pos 0
+#define reg_top_debug_len 1
+#define reg_top_debug_lsb 0
+#define xd_p_reg_top_pcout (*(volatile byte xdata *) 0xD810)
+#define p_reg_top_pcout 0xD810
+#define reg_top_pcout_pos 0
+#define reg_top_pcout_len 1
+#define reg_top_pcout_lsb 0
+#define xd_p_reg_top_rs232 (*(volatile byte xdata *) 0xD811)
+#define p_reg_top_rs232 0xD811
+#define reg_top_rs232_pos 0
+#define reg_top_rs232_len 1
+#define reg_top_rs232_lsb 0
+#define xd_p_reg_iqmode (*(volatile byte xdata *) 0xD812)
+#define p_reg_iqmode 0xD812
+#define reg_iqmode_pos 0
+#define reg_iqmode_len 1
+#define reg_iqmode_lsb 0
+#define xd_p_reg_top_rstfd (*(volatile byte xdata *) 0xD813)
+#define p_reg_top_rstfd 0xD813
+#define reg_top_rstfd_pos 0
+#define reg_top_rstfd_len 1
+#define reg_top_rstfd_lsb 0
+#define xd_p_reg_sdio_clksel (*(volatile byte xdata *) 0xD814)
+#define p_reg_sdio_clksel 0xD814
+#define reg_sdio_clksel_pos 0
+#define reg_sdio_clksel_len 1
+#define reg_sdio_clksel_lsb 0
+#define xd_p_reg_utmi_clksel (*(volatile byte xdata *) 0xD815)
+#define p_reg_utmi_clksel 0xD815
+#define reg_utmi_clksel_pos 0
+#define reg_utmi_clksel_len 8
+#define reg_utmi_clksel_lsb 0
+#define xd_p_reg_top_suscnt (*(volatile byte xdata *) 0xD816)
+#define p_reg_top_suscnt 0xD816
+#define reg_top_suscnt_pos 0
+#define reg_top_suscnt_len 2
+#define reg_top_suscnt_lsb 0
+#define xd_p_reg_top_dist2f (*(volatile byte xdata *) 0xD817)
+#define p_reg_top_dist2f 0xD817
+#define reg_top_dist2f_pos 0
+#define reg_top_dist2f_len 1
+#define reg_top_dist2f_lsb 0
+#define xd_p_reg_top_extusb (*(volatile byte xdata *) 0xD818)
+#define p_reg_top_extusb 0xD818
+#define reg_top_extusb_pos 0
+#define reg_top_extusb_len 1
+#define reg_top_extusb_lsb 0
+#define xd_p_reg_top_adcfifo (*(volatile byte xdata *) 0xD819)
+#define p_reg_top_adcfifo 0xD819
+#define reg_top_adcfifo_pos 0
+#define reg_top_adcfifo_len 1
+#define reg_top_adcfifo_lsb 0
+#define xd_p_reg_top_clkoen (*(volatile byte xdata *) 0xD81A)
+#define p_reg_top_clkoen 0xD81A
+#define reg_top_clkoen_pos 0
+#define reg_top_clkoen_len 1
+#define reg_top_clkoen_lsb 0
+#define xd_p_reg_top_stpck (*(volatile byte xdata *) 0xD81B)
+#define p_reg_top_stpck 0xD81B
+#define reg_top_stpck_pos 0
+#define reg_top_stpck_len 1
+#define reg_top_stpck_lsb 0
+#define xd_p_reg_top_freeck (*(volatile byte xdata *) 0xD81C)
+#define p_reg_top_freeck 0xD81C
+#define reg_top_freeck_pos 0
+#define reg_top_freeck_len 1
+#define reg_top_freeck_lsb 0
+#define xd_p_reg_top_dio_sel (*(volatile byte xdata *) 0xD81D)
+#define p_reg_top_dio_sel 0xD81D
+#define reg_top_dio_sel_pos 0
+#define reg_top_dio_sel_len 1
+#define reg_top_dio_sel_lsb 0
+#define xd_p_reg_top_int_en (*(volatile byte xdata *) 0xD81E)
+#define p_reg_top_int_en 0xD81E
+#define reg_top_int_en_pos 0
+#define reg_top_int_en_len 1
+#define reg_top_int_en_lsb 0
+#define xd_p_reg_top_int_inv (*(volatile byte xdata *) 0xD81F)
+#define p_reg_top_int_inv 0xD81F
+#define reg_top_int_inv_pos 0
+#define reg_top_int_inv_len 1
+#define reg_top_int_inv_lsb 0
+#define xd_p_reg_tsip_clk_inv (*(volatile byte xdata *) 0xD820)
+#define p_reg_tsip_clk_inv 0xD820
+#define reg_tsip_clk_inv_pos 0
+#define reg_tsip_clk_inv_len 1
+#define reg_tsip_clk_inv_lsb 0
+#define xd_p_reg_ts_clk_inv (*(volatile byte xdata *) 0xD821)
+#define p_reg_ts_clk_inv 0xD821
+#define reg_ts_clk_inv_pos 0
+#define reg_ts_clk_inv_len 1
+#define reg_ts_clk_inv_lsb 0
+#define xd_p_reg_ts_hybrid (*(volatile byte xdata *) 0xD822)
+#define p_reg_ts_hybrid 0xD822
+#define reg_ts_hybrid_pos 0
+#define reg_ts_hybrid_len 1
+#define reg_ts_hybrid_lsb 0
+#define xd_p_reg_ccir_sel (*(volatile byte xdata *) 0xD823)
+#define p_reg_ccir_sel 0xD823
+#define reg_ccir_sel_pos 0
+#define reg_ccir_sel_len 4
+#define reg_ccir_sel_lsb 0
+#define xd_p_reg_top_sys_gate (*(volatile byte xdata *) 0xD824)
+#define p_reg_top_sys_gate 0xD824
+#define reg_top_sys_gate_pos 0
+#define reg_top_sys_gate_len 1
+#define reg_top_sys_gate_lsb 0
+#define xd_p_reg_top_padpu (*(volatile byte xdata *) 0xD825)
+#define p_reg_top_padpu 0xD825
+#define reg_top_padpu_pos 0
+#define reg_top_padpu_len 1
+#define reg_top_padpu_lsb 0
+#define xd_p_reg_top_padpd (*(volatile byte xdata *) 0xD826)
+#define p_reg_top_padpd 0xD826
+#define reg_top_padpd_pos 0
+#define reg_top_padpd_len 1
+#define reg_top_padpd_lsb 0
+#define xd_p_reg_top_padodpu (*(volatile byte xdata *) 0xD827)
+#define p_reg_top_padodpu 0xD827
+#define reg_top_padodpu_pos 0
+#define reg_top_padodpu_len 1
+#define reg_top_padodpu_lsb 0
+#define xd_p_reg_top_thirdodpu (*(volatile byte xdata *) 0xD828)
+#define p_reg_top_thirdodpu 0xD828
+#define reg_top_thirdodpu_pos 0
+#define reg_top_thirdodpu_len 1
+#define reg_top_thirdodpu_lsb 0
+#define xd_p_reg_top_agc_od (*(volatile byte xdata *) 0xD829)
+#define p_reg_top_agc_od 0xD829
+#define reg_top_agc_od_pos 0
+#define reg_top_agc_od_len 1
+#define reg_top_agc_od_lsb 0
+#define xd_p_reg_top_padmpdr2 (*(volatile byte xdata *) 0xD82A)
+#define p_reg_top_padmpdr2 0xD82A
+#define reg_top_padmpdr2_pos 0
+#define reg_top_padmpdr2_len 1
+#define reg_top_padmpdr2_lsb 0
+#define xd_p_reg_top_padmpdr4 (*(volatile byte xdata *) 0xD82B)
+#define p_reg_top_padmpdr4 0xD82B
+#define reg_top_padmpdr4_pos 0
+#define reg_top_padmpdr4_len 1
+#define reg_top_padmpdr4_lsb 0
+#define xd_p_reg_top_padmpdr8 (*(volatile byte xdata *) 0xD82C)
+#define p_reg_top_padmpdr8 0xD82C
+#define reg_top_padmpdr8_pos 0
+#define reg_top_padmpdr8_len 1
+#define reg_top_padmpdr8_lsb 0
+#define xd_p_reg_top_padmpdrsr (*(volatile byte xdata *) 0xD82D)
+#define p_reg_top_padmpdrsr 0xD82D
+#define reg_top_padmpdrsr_pos 0
+#define reg_top_padmpdrsr_len 1
+#define reg_top_padmpdrsr_lsb 0
+#define xd_p_reg_top_padmppu (*(volatile byte xdata *) 0xD82E)
+#define p_reg_top_padmppu 0xD82E
+#define reg_top_padmppu_pos 0
+#define reg_top_padmppu_len 1
+#define reg_top_padmppu_lsb 0
+#define xd_p_reg_top_padmppd (*(volatile byte xdata *) 0xD82F)
+#define p_reg_top_padmppd 0xD82F
+#define reg_top_padmppd_pos 0
+#define reg_top_padmppd_len 1
+#define reg_top_padmppd_lsb 0
+#define xd_p_reg_top_padmiscdr2 (*(volatile byte xdata *) 0xD830)
+#define p_reg_top_padmiscdr2 0xD830
+#define reg_top_padmiscdr2_pos 0
+#define reg_top_padmiscdr2_len 1
+#define reg_top_padmiscdr2_lsb 0
+#define xd_p_reg_top_padmiscdr4 (*(volatile byte xdata *) 0xD831)
+#define p_reg_top_padmiscdr4 0xD831
+#define reg_top_padmiscdr4_pos 0
+#define reg_top_padmiscdr4_len 1
+#define reg_top_padmiscdr4_lsb 0
+#define xd_p_reg_top_padmiscdr8 (*(volatile byte xdata *) 0xD832)
+#define p_reg_top_padmiscdr8 0xD832
+#define reg_top_padmiscdr8_pos 0
+#define reg_top_padmiscdr8_len 1
+#define reg_top_padmiscdr8_lsb 0
+#define xd_p_reg_top_padmiscdrsr (*(volatile byte xdata *) 0xD833)
+#define p_reg_top_padmiscdrsr 0xD833
+#define reg_top_padmiscdrsr_pos 0
+#define reg_top_padmiscdrsr_len 1
+#define reg_top_padmiscdrsr_lsb 0
+#define xd_p_reg_top_padmiscpu (*(volatile byte xdata *) 0xD834)
+#define p_reg_top_padmiscpu 0xD834
+#define reg_top_padmiscpu_pos 0
+#define reg_top_padmiscpu_len 1
+#define reg_top_padmiscpu_lsb 0
+#define xd_p_reg_top_padmiscpd (*(volatile byte xdata *) 0xD835)
+#define p_reg_top_padmiscpd 0xD835
+#define reg_top_padmiscpd_pos 0
+#define reg_top_padmiscpd_len 1
+#define reg_top_padmiscpd_lsb 0
+#define xd_p_reg_host_b0_smt (*(volatile byte xdata *) 0xD836)
+#define p_reg_host_b0_smt 0xD836
+#define reg_host_b0_smt_pos 0
+#define reg_host_b0_smt_len 1
+#define reg_host_b0_smt_lsb 0
+#define xd_p_reg_host_b1_smt (*(volatile byte xdata *) 0xD837)
+#define p_reg_host_b1_smt 0xD837
+#define reg_host_b1_smt_pos 0
+#define reg_host_b1_smt_len 1
+#define reg_host_b1_smt_lsb 0
+#define xd_p_reg_host_b2_smt (*(volatile byte xdata *) 0xD838)
+#define p_reg_host_b2_smt 0xD838
+#define reg_host_b2_smt_pos 0
+#define reg_host_b2_smt_len 1
+#define reg_host_b2_smt_lsb 0
+#define xd_p_reg_host_b3_smt (*(volatile byte xdata *) 0xD839)
+#define p_reg_host_b3_smt 0xD839
+#define reg_host_b3_smt_pos 0
+#define reg_host_b3_smt_len 1
+#define reg_host_b3_smt_lsb 0
+#define xd_p_reg_host_b4_smt (*(volatile byte xdata *) 0xD83A)
+#define p_reg_host_b4_smt 0xD83A
+#define reg_host_b4_smt_pos 0
+#define reg_host_b4_smt_len 1
+#define reg_host_b4_smt_lsb 0
+#define xd_p_reg_host_b5_smt (*(volatile byte xdata *) 0xD83B)
+#define p_reg_host_b5_smt 0xD83B
+#define reg_host_b5_smt_pos 0
+#define reg_host_b5_smt_len 1
+#define reg_host_b5_smt_lsb 0
+#define xd_p_reg_host_b6_smt (*(volatile byte xdata *) 0xD83C)
+#define p_reg_host_b6_smt 0xD83C
+#define reg_host_b6_smt_pos 0
+#define reg_host_b6_smt_len 1
+#define reg_host_b6_smt_lsb 0
+#define xd_p_reg_host_b7_smt (*(volatile byte xdata *) 0xD83D)
+#define p_reg_host_b7_smt 0xD83D
+#define reg_host_b7_smt_pos 0
+#define reg_host_b7_smt_len 1
+#define reg_host_b7_smt_lsb 0
+#define xd_p_reg_host_b8_smt (*(volatile byte xdata *) 0xD83E)
+#define p_reg_host_b8_smt 0xD83E
+#define reg_host_b8_smt_pos 0
+#define reg_host_b8_smt_len 1
+#define reg_host_b8_smt_lsb 0
+#define xd_p_reg_host_b9_smt (*(volatile byte xdata *) 0xD83F)
+#define p_reg_host_b9_smt 0xD83F
+#define reg_host_b9_smt_pos 0
+#define reg_host_b9_smt_len 1
+#define reg_host_b9_smt_lsb 0
+#define xd_p_reg_host_b10_smt (*(volatile byte xdata *) 0xD840)
+#define p_reg_host_b10_smt 0xD840
+#define reg_host_b10_smt_pos 0
+#define reg_host_b10_smt_len 1
+#define reg_host_b10_smt_lsb 0
+#define xd_p_reg_host_b11_smt (*(volatile byte xdata *) 0xD841)
+#define p_reg_host_b11_smt 0xD841
+#define reg_host_b11_smt_pos 0
+#define reg_host_b11_smt_len 1
+#define reg_host_b11_smt_lsb 0
+#define xd_p_reg_host_a0_smt (*(volatile byte xdata *) 0xD842)
+#define p_reg_host_a0_smt 0xD842
+#define reg_host_a0_smt_pos 0
+#define reg_host_a0_smt_len 1
+#define reg_host_a0_smt_lsb 0
+#define xd_p_reg_host_a1_smt (*(volatile byte xdata *) 0xD843)
+#define p_reg_host_a1_smt 0xD843
+#define reg_host_a1_smt_pos 0
+#define reg_host_a1_smt_len 1
+#define reg_host_a1_smt_lsb 0
+#define xd_p_reg_host_a2_smt (*(volatile byte xdata *) 0xD844)
+#define p_reg_host_a2_smt 0xD844
+#define reg_host_a2_smt_pos 0
+#define reg_host_a2_smt_len 1
+#define reg_host_a2_smt_lsb 0
+#define xd_p_reg_host_a3_smt (*(volatile byte xdata *) 0xD845)
+#define p_reg_host_a3_smt 0xD845
+#define reg_host_a3_smt_pos 0
+#define reg_host_a3_smt_len 1
+#define reg_host_a3_smt_lsb 0
+#define xd_p_reg_host_a4_smt (*(volatile byte xdata *) 0xD846)
+#define p_reg_host_a4_smt 0xD846
+#define reg_host_a4_smt_pos 0
+#define reg_host_a4_smt_len 1
+#define reg_host_a4_smt_lsb 0
+#define xd_p_reg_host_a5_smt (*(volatile byte xdata *) 0xD847)
+#define p_reg_host_a5_smt 0xD847
+#define reg_host_a5_smt_pos 0
+#define reg_host_a5_smt_len 1
+#define reg_host_a5_smt_lsb 0
+#define xd_p_reg_host_a6_smt (*(volatile byte xdata *) 0xD848)
+#define p_reg_host_a6_smt 0xD848
+#define reg_host_a6_smt_pos 0
+#define reg_host_a6_smt_len 1
+#define reg_host_a6_smt_lsb 0
+#define xd_p_reg_host_a7_smt (*(volatile byte xdata *) 0xD849)
+#define p_reg_host_a7_smt 0xD849
+#define reg_host_a7_smt_pos 0
+#define reg_host_a7_smt_len 1
+#define reg_host_a7_smt_lsb 0
+#define xd_p_reg_host_a8_smt (*(volatile byte xdata *) 0xD84A)
+#define p_reg_host_a8_smt 0xD84A
+#define reg_host_a8_smt_pos 0
+#define reg_host_a8_smt_len 1
+#define reg_host_a8_smt_lsb 0
+#define xd_p_reg_host_a9_smt (*(volatile byte xdata *) 0xD84B)
+#define p_reg_host_a9_smt 0xD84B
+#define reg_host_a9_smt_pos 0
+#define reg_host_a9_smt_len 1
+#define reg_host_a9_smt_lsb 0
+#define xd_p_reg_host_a10_smt (*(volatile byte xdata *) 0xD84C)
+#define p_reg_host_a10_smt 0xD84C
+#define reg_host_a10_smt_pos 0
+#define reg_host_a10_smt_len 1
+#define reg_host_a10_smt_lsb 0
+#define xd_p_reg_host_a11_smt (*(volatile byte xdata *) 0xD84D)
+#define p_reg_host_a11_smt 0xD84D
+#define reg_host_a11_smt_pos 0
+#define reg_host_a11_smt_len 1
+#define reg_host_a11_smt_lsb 0
+#define xd_p_reg_testmode_pds (*(volatile byte xdata *) 0xD84E)
+#define p_reg_testmode_pds 0xD84E
+#define reg_testmode_pds_pos 0
+#define reg_testmode_pds_len 3
+#define reg_testmode_pds_lsb 0
+#define xd_p_reg_debug31_pds (*(volatile byte xdata *) 0xD84F)
+#define p_reg_debug31_pds 0xD84F
+#define reg_debug31_pds_pos 0
+#define reg_debug31_pds_len 3
+#define reg_debug31_pds_lsb 0
+#define xd_p_reg_debug30_pds (*(volatile byte xdata *) 0xD850)
+#define p_reg_debug30_pds 0xD850
+#define reg_debug30_pds_pos 0
+#define reg_debug30_pds_len 3
+#define reg_debug30_pds_lsb 0
+#define xd_p_reg_debug29_pds (*(volatile byte xdata *) 0xD851)
+#define p_reg_debug29_pds 0xD851
+#define reg_debug29_pds_pos 0
+#define reg_debug29_pds_len 3
+#define reg_debug29_pds_lsb 0
+#define xd_p_reg_debug28_pds (*(volatile byte xdata *) 0xD852)
+#define p_reg_debug28_pds 0xD852
+#define reg_debug28_pds_pos 0
+#define reg_debug28_pds_len 3
+#define reg_debug28_pds_lsb 0
+#define xd_p_reg_debug27_pds (*(volatile byte xdata *) 0xD853)
+#define p_reg_debug27_pds 0xD853
+#define reg_debug27_pds_pos 0
+#define reg_debug27_pds_len 3
+#define reg_debug27_pds_lsb 0
+#define xd_p_reg_debug26_pds (*(volatile byte xdata *) 0xD854)
+#define p_reg_debug26_pds 0xD854
+#define reg_debug26_pds_pos 0
+#define reg_debug26_pds_len 3
+#define reg_debug26_pds_lsb 0
+#define xd_p_reg_debug25_pds (*(volatile byte xdata *) 0xD855)
+#define p_reg_debug25_pds 0xD855
+#define reg_debug25_pds_pos 0
+#define reg_debug25_pds_len 3
+#define reg_debug25_pds_lsb 0
+#define xd_p_reg_debug24_pds (*(volatile byte xdata *) 0xD856)
+#define p_reg_debug24_pds 0xD856
+#define reg_debug24_pds_pos 0
+#define reg_debug24_pds_len 3
+#define reg_debug24_pds_lsb 0
+#define xd_p_reg_debug23_pds (*(volatile byte xdata *) 0xD857)
+#define p_reg_debug23_pds 0xD857
+#define reg_debug23_pds_pos 0
+#define reg_debug23_pds_len 3
+#define reg_debug23_pds_lsb 0
+#define xd_p_reg_debug22_pds (*(volatile byte xdata *) 0xD858)
+#define p_reg_debug22_pds 0xD858
+#define reg_debug22_pds_pos 0
+#define reg_debug22_pds_len 3
+#define reg_debug22_pds_lsb 0
+#define xd_p_reg_gpioh1_pds (*(volatile byte xdata *) 0xD859)
+#define p_reg_gpioh1_pds 0xD859
+#define reg_gpioh1_pds_pos 0
+#define reg_gpioh1_pds_len 3
+#define reg_gpioh1_pds_lsb 0
+#define xd_p_reg_gpioh2_pds (*(volatile byte xdata *) 0xD85A)
+#define p_reg_gpioh2_pds 0xD85A
+#define reg_gpioh2_pds_pos 0
+#define reg_gpioh2_pds_len 3
+#define reg_gpioh2_pds_lsb 0
+#define xd_p_reg_gpioh3_pds (*(volatile byte xdata *) 0xD85B)
+#define p_reg_gpioh3_pds 0xD85B
+#define reg_gpioh3_pds_pos 0
+#define reg_gpioh3_pds_len 3
+#define reg_gpioh3_pds_lsb 0
+#define xd_p_reg_gpioh4_pds (*(volatile byte xdata *) 0xD85C)
+#define p_reg_gpioh4_pds 0xD85C
+#define reg_gpioh4_pds_pos 0
+#define reg_gpioh4_pds_len 3
+#define reg_gpioh4_pds_lsb 0
+#define xd_p_reg_iosda_pds (*(volatile byte xdata *) 0xD85D)
+#define p_reg_iosda_pds 0xD85D
+#define reg_iosda_pds_pos 0
+#define reg_iosda_pds_len 3
+#define reg_iosda_pds_lsb 0
+#define xd_p_reg_ioscl_pds (*(volatile byte xdata *) 0xD85E)
+#define p_reg_ioscl_pds 0xD85E
+#define reg_ioscl_pds_pos 0
+#define reg_ioscl_pds_len 3
+#define reg_ioscl_pds_lsb 0
+#define xd_p_reg_gpioh5_pds (*(volatile byte xdata *) 0xD85F)
+#define p_reg_gpioh5_pds 0xD85F
+#define reg_gpioh5_pds_pos 0
+#define reg_gpioh5_pds_len 3
+#define reg_gpioh5_pds_lsb 0
+#define xd_p_reg_bond0_pds (*(volatile byte xdata *) 0xD860)
+#define p_reg_bond0_pds 0xD860
+#define reg_bond0_pds_pos 0
+#define reg_bond0_pds_len 3
+#define reg_bond0_pds_lsb 0
+#define xd_p_reg_i2caddr6_pds (*(volatile byte xdata *) 0xD861)
+#define p_reg_i2caddr6_pds 0xD861
+#define reg_i2caddr6_pds_pos 0
+#define reg_i2caddr6_pds_len 3
+#define reg_i2caddr6_pds_lsb 0
+#define xd_p_reg_i2caddr5_pds (*(volatile byte xdata *) 0xD862)
+#define p_reg_i2caddr5_pds 0xD862
+#define reg_i2caddr5_pds_pos 0
+#define reg_i2caddr5_pds_len 3
+#define reg_i2caddr5_pds_lsb 0
+#define xd_p_reg_i2caddr4_pds (*(volatile byte xdata *) 0xD863)
+#define p_reg_i2caddr4_pds 0xD863
+#define reg_i2caddr4_pds_pos 0
+#define reg_i2caddr4_pds_len 3
+#define reg_i2caddr4_pds_lsb 0
+#define xd_p_reg_host_a0_pds (*(volatile byte xdata *) 0xD864)
+#define p_reg_host_a0_pds 0xD864
+#define reg_host_a0_pds_pos 0
+#define reg_host_a0_pds_len 3
+#define reg_host_a0_pds_lsb 0
+#define xd_p_reg_host_a1_pds (*(volatile byte xdata *) 0xD865)
+#define p_reg_host_a1_pds 0xD865
+#define reg_host_a1_pds_pos 0
+#define reg_host_a1_pds_len 3
+#define reg_host_a1_pds_lsb 0
+#define xd_p_reg_debug21_pds (*(volatile byte xdata *) 0xD866)
+#define p_reg_debug21_pds 0xD866
+#define reg_debug21_pds_pos 0
+#define reg_debug21_pds_len 3
+#define reg_debug21_pds_lsb 0
+#define xd_p_reg_debug20_pds (*(volatile byte xdata *) 0xD867)
+#define p_reg_debug20_pds 0xD867
+#define reg_debug20_pds_pos 0
+#define reg_debug20_pds_len 3
+#define reg_debug20_pds_lsb 0
+#define xd_p_reg_debug19_pds (*(volatile byte xdata *) 0xD868)
+#define p_reg_debug19_pds 0xD868
+#define reg_debug19_pds_pos 0
+#define reg_debug19_pds_len 3
+#define reg_debug19_pds_lsb 0
+#define xd_p_reg_debug18_pds (*(volatile byte xdata *) 0xD869)
+#define p_reg_debug18_pds 0xD869
+#define reg_debug18_pds_pos 0
+#define reg_debug18_pds_len 3
+#define reg_debug18_pds_lsb 0
+#define xd_p_reg_debug17_pds (*(volatile byte xdata *) 0xD86A)
+#define p_reg_debug17_pds 0xD86A
+#define reg_debug17_pds_pos 0
+#define reg_debug17_pds_len 3
+#define reg_debug17_pds_lsb 0
+#define xd_p_reg_host_a2_pds (*(volatile byte xdata *) 0xD86B)
+#define p_reg_host_a2_pds 0xD86B
+#define reg_host_a2_pds_pos 0
+#define reg_host_a2_pds_len 3
+#define reg_host_a2_pds_lsb 0
+#define xd_p_reg_host_a3_pds (*(volatile byte xdata *) 0xD86C)
+#define p_reg_host_a3_pds 0xD86C
+#define reg_host_a3_pds_pos 0
+#define reg_host_a3_pds_len 3
+#define reg_host_a3_pds_lsb 0
+#define xd_p_reg_host_a4_pds (*(volatile byte xdata *) 0xD86D)
+#define p_reg_host_a4_pds 0xD86D
+#define reg_host_a4_pds_pos 0
+#define reg_host_a4_pds_len 3
+#define reg_host_a4_pds_lsb 0
+#define xd_p_reg_host_a5_pds (*(volatile byte xdata *) 0xD86E)
+#define p_reg_host_a5_pds 0xD86E
+#define reg_host_a5_pds_pos 0
+#define reg_host_a5_pds_len 3
+#define reg_host_a5_pds_lsb 0
+#define xd_p_reg_host_a6_pds (*(volatile byte xdata *) 0xD86F)
+#define p_reg_host_a6_pds 0xD86F
+#define reg_host_a6_pds_pos 0
+#define reg_host_a6_pds_len 3
+#define reg_host_a6_pds_lsb 0
+#define xd_p_reg_p160sel_pds (*(volatile byte xdata *) 0xD870)
+#define p_reg_p160sel_pds 0xD870
+#define reg_p160sel_pds_pos 0
+#define reg_p160sel_pds_len 3
+#define reg_p160sel_pds_lsb 0
+#define xd_p_reg_gpioh13_pds (*(volatile byte xdata *) 0xD871)
+#define p_reg_gpioh13_pds 0xD871
+#define reg_gpioh13_pds_pos 0
+#define reg_gpioh13_pds_len 3
+#define reg_gpioh13_pds_lsb 0
+#define xd_p_reg_gpioh12_pds (*(volatile byte xdata *) 0xD872)
+#define p_reg_gpioh12_pds 0xD872
+#define reg_gpioh12_pds_pos 0
+#define reg_gpioh12_pds_len 3
+#define reg_gpioh12_pds_lsb 0
+#define xd_p_reg_gpioh11_pds (*(volatile byte xdata *) 0xD873)
+#define p_reg_gpioh11_pds 0xD873
+#define reg_gpioh11_pds_pos 0
+#define reg_gpioh11_pds_len 3
+#define reg_gpioh11_pds_lsb 0
+#define xd_p_reg_host_a7_pds (*(volatile byte xdata *) 0xD874)
+#define p_reg_host_a7_pds 0xD874
+#define reg_host_a7_pds_pos 0
+#define reg_host_a7_pds_len 3
+#define reg_host_a7_pds_lsb 0
+#define xd_p_reg_host_a8_pds (*(volatile byte xdata *) 0xD875)
+#define p_reg_host_a8_pds 0xD875
+#define reg_host_a8_pds_pos 0
+#define reg_host_a8_pds_len 3
+#define reg_host_a8_pds_lsb 0
+#define xd_p_reg_host_a9_pds (*(volatile byte xdata *) 0xD876)
+#define p_reg_host_a9_pds 0xD876
+#define reg_host_a9_pds_pos 0
+#define reg_host_a9_pds_len 3
+#define reg_host_a9_pds_lsb 0
+#define xd_p_reg_host_a10_pds (*(volatile byte xdata *) 0xD877)
+#define p_reg_host_a10_pds 0xD877
+#define reg_host_a10_pds_pos 0
+#define reg_host_a10_pds_len 3
+#define reg_host_a10_pds_lsb 0
+#define xd_p_reg_host_a11_pds (*(volatile byte xdata *) 0xD878)
+#define p_reg_host_a11_pds 0xD878
+#define reg_host_a11_pds_pos 0
+#define reg_host_a11_pds_len 3
+#define reg_host_a11_pds_lsb 0
+#define xd_p_reg_bondu0_pds (*(volatile byte xdata *) 0xD879)
+#define p_reg_bondu0_pds 0xD879
+#define reg_bondu0_pds_pos 0
+#define reg_bondu0_pds_len 3
+#define reg_bondu0_pds_lsb 0
+#define xd_p_reg_host_b0_pds (*(volatile byte xdata *) 0xD87A)
+#define p_reg_host_b0_pds 0xD87A
+#define reg_host_b0_pds_pos 0
+#define reg_host_b0_pds_len 3
+#define reg_host_b0_pds_lsb 0
+#define xd_p_reg_host_b1_pds (*(volatile byte xdata *) 0xD87B)
+#define p_reg_host_b1_pds 0xD87B
+#define reg_host_b1_pds_pos 0
+#define reg_host_b1_pds_len 3
+#define reg_host_b1_pds_lsb 0
+#define xd_p_reg_host_b2_pds (*(volatile byte xdata *) 0xD87C)
+#define p_reg_host_b2_pds 0xD87C
+#define reg_host_b2_pds_pos 0
+#define reg_host_b2_pds_len 3
+#define reg_host_b2_pds_lsb 0
+#define xd_p_reg_host_b3_pds (*(volatile byte xdata *) 0xD87D)
+#define p_reg_host_b3_pds 0xD87D
+#define reg_host_b3_pds_pos 0
+#define reg_host_b3_pds_len 3
+#define reg_host_b3_pds_lsb 0
+#define xd_p_reg_host_b4_pds (*(volatile byte xdata *) 0xD87E)
+#define p_reg_host_b4_pds 0xD87E
+#define reg_host_b4_pds_pos 0
+#define reg_host_b4_pds_len 3
+#define reg_host_b4_pds_lsb 0
+#define xd_p_reg_host_b5_pds (*(volatile byte xdata *) 0xD87F)
+#define p_reg_host_b5_pds 0xD87F
+#define reg_host_b5_pds_pos 0
+#define reg_host_b5_pds_len 3
+#define reg_host_b5_pds_lsb 0
+#define xd_p_reg_host_b6_pds (*(volatile byte xdata *) 0xD880)
+#define p_reg_host_b6_pds 0xD880
+#define reg_host_b6_pds_pos 0
+#define reg_host_b6_pds_len 3
+#define reg_host_b6_pds_lsb 0
+#define xd_p_reg_host_b7_pds (*(volatile byte xdata *) 0xD881)
+#define p_reg_host_b7_pds 0xD881
+#define reg_host_b7_pds_pos 0
+#define reg_host_b7_pds_len 3
+#define reg_host_b7_pds_lsb 0
+#define xd_p_reg_afe_f12_pds (*(volatile byte xdata *) 0xD882)
+#define p_reg_afe_f12_pds 0xD882
+#define reg_afe_f12_pds_pos 0
+#define reg_afe_f12_pds_len 3
+#define reg_afe_f12_pds_lsb 0
+#define xd_p_reg_host_b8_pds (*(volatile byte xdata *) 0xD883)
+#define p_reg_host_b8_pds 0xD883
+#define reg_host_b8_pds_pos 0
+#define reg_host_b8_pds_len 3
+#define reg_host_b8_pds_lsb 0
+#define xd_p_reg_host_b9_pds (*(volatile byte xdata *) 0xD884)
+#define p_reg_host_b9_pds 0xD884
+#define reg_host_b9_pds_pos 0
+#define reg_host_b9_pds_len 3
+#define reg_host_b9_pds_lsb 0
+#define xd_p_reg_host_b10_pds (*(volatile byte xdata *) 0xD885)
+#define p_reg_host_b10_pds 0xD885
+#define reg_host_b10_pds_pos 0
+#define reg_host_b10_pds_len 3
+#define reg_host_b10_pds_lsb 0
+#define xd_p_reg_host_b11_pds (*(volatile byte xdata *) 0xD886)
+#define p_reg_host_b11_pds 0xD886
+#define reg_host_b11_pds_pos 0
+#define reg_host_b11_pds_len 3
+#define reg_host_b11_pds_lsb 0
+#define xd_p_reg_debug16_pds (*(volatile byte xdata *) 0xD887)
+#define p_reg_debug16_pds 0xD887
+#define reg_debug16_pds_pos 0
+#define reg_debug16_pds_len 3
+#define reg_debug16_pds_lsb 0
+#define xd_p_reg_debug15_pds (*(volatile byte xdata *) 0xD888)
+#define p_reg_debug15_pds 0xD888
+#define reg_debug15_pds_pos 0
+#define reg_debug15_pds_len 3
+#define reg_debug15_pds_lsb 0
+#define xd_p_reg_debug14_pds (*(volatile byte xdata *) 0xD889)
+#define p_reg_debug14_pds 0xD889
+#define reg_debug14_pds_pos 0
+#define reg_debug14_pds_len 3
+#define reg_debug14_pds_lsb 0
+#define xd_p_reg_debug13_pds (*(volatile byte xdata *) 0xD88A)
+#define p_reg_debug13_pds 0xD88A
+#define reg_debug13_pds_pos 0
+#define reg_debug13_pds_len 3
+#define reg_debug13_pds_lsb 0
+#define xd_p_reg_debug12_pds (*(volatile byte xdata *) 0xD88B)
+#define p_reg_debug12_pds 0xD88B
+#define reg_debug12_pds_pos 0
+#define reg_debug12_pds_len 3
+#define reg_debug12_pds_lsb 0
+#define xd_p_reg_debug11_pds (*(volatile byte xdata *) 0xD88C)
+#define p_reg_debug11_pds 0xD88C
+#define reg_debug11_pds_pos 0
+#define reg_debug11_pds_len 3
+#define reg_debug11_pds_lsb 0
+#define xd_p_reg_debug10_pds (*(volatile byte xdata *) 0xD88D)
+#define p_reg_debug10_pds 0xD88D
+#define reg_debug10_pds_pos 0
+#define reg_debug10_pds_len 3
+#define reg_debug10_pds_lsb 0
+#define xd_p_reg_debug9_pds (*(volatile byte xdata *) 0xD88E)
+#define p_reg_debug9_pds 0xD88E
+#define reg_debug9_pds_pos 0
+#define reg_debug9_pds_len 3
+#define reg_debug9_pds_lsb 0
+#define xd_p_reg_debug8_pds (*(volatile byte xdata *) 0xD88F)
+#define p_reg_debug8_pds 0xD88F
+#define reg_debug8_pds_pos 0
+#define reg_debug8_pds_len 3
+#define reg_debug8_pds_lsb 0
+#define xd_p_reg_debug7_pds (*(volatile byte xdata *) 0xD890)
+#define p_reg_debug7_pds 0xD890
+#define reg_debug7_pds_pos 0
+#define reg_debug7_pds_len 3
+#define reg_debug7_pds_lsb 0
+#define xd_p_reg_debug6_pds (*(volatile byte xdata *) 0xD891)
+#define p_reg_debug6_pds 0xD891
+#define reg_debug6_pds_pos 0
+#define reg_debug6_pds_len 3
+#define reg_debug6_pds_lsb 0
+#define xd_p_reg_debug5_pds (*(volatile byte xdata *) 0xD892)
+#define p_reg_debug5_pds 0xD892
+#define reg_debug5_pds_pos 0
+#define reg_debug5_pds_len 3
+#define reg_debug5_pds_lsb 0
+#define xd_p_reg_debug4_pds (*(volatile byte xdata *) 0xD893)
+#define p_reg_debug4_pds 0xD893
+#define reg_debug4_pds_pos 0
+#define reg_debug4_pds_len 3
+#define reg_debug4_pds_lsb 0
+#define xd_p_reg_clko_pds (*(volatile byte xdata *) 0xD894)
+#define p_reg_clko_pds 0xD894
+#define reg_clko_pds_pos 0
+#define reg_clko_pds_len 3
+#define reg_clko_pds_lsb 0
+#define xd_p_reg_gpioh6_pds (*(volatile byte xdata *) 0xD895)
+#define p_reg_gpioh6_pds 0xD895
+#define reg_gpioh6_pds_pos 0
+#define reg_gpioh6_pds_len 3
+#define reg_gpioh6_pds_lsb 0
+#define xd_p_reg_gpioh7_pds (*(volatile byte xdata *) 0xD896)
+#define p_reg_gpioh7_pds 0xD896
+#define reg_gpioh7_pds_pos 0
+#define reg_gpioh7_pds_len 3
+#define reg_gpioh7_pds_lsb 0
+#define xd_p_reg_gpioh8_pds (*(volatile byte xdata *) 0xD897)
+#define p_reg_gpioh8_pds 0xD897
+#define reg_gpioh8_pds_pos 0
+#define reg_gpioh8_pds_len 3
+#define reg_gpioh8_pds_lsb 0
+#define xd_p_reg_gpioh9_pds (*(volatile byte xdata *) 0xD898)
+#define p_reg_gpioh9_pds 0xD898
+#define reg_gpioh9_pds_pos 0
+#define reg_gpioh9_pds_len 3
+#define reg_gpioh9_pds_lsb 0
+#define xd_p_reg_gpioh10_pds (*(volatile byte xdata *) 0xD899)
+#define p_reg_gpioh10_pds 0xD899
+#define reg_gpioh10_pds_pos 0
+#define reg_gpioh10_pds_len 3
+#define reg_gpioh10_pds_lsb 0
+#define xd_p_reg_debug3_pds (*(volatile byte xdata *) 0xD89A)
+#define p_reg_debug3_pds 0xD89A
+#define reg_debug3_pds_pos 0
+#define reg_debug3_pds_len 3
+#define reg_debug3_pds_lsb 0
+#define xd_p_reg_debug2_pds (*(volatile byte xdata *) 0xD89B)
+#define p_reg_debug2_pds 0xD89B
+#define reg_debug2_pds_pos 0
+#define reg_debug2_pds_len 3
+#define reg_debug2_pds_lsb 0
+#define xd_p_reg_debug1_pds (*(volatile byte xdata *) 0xD89C)
+#define p_reg_debug1_pds 0xD89C
+#define reg_debug1_pds_pos 0
+#define reg_debug1_pds_len 3
+#define reg_debug1_pds_lsb 0
+#define xd_p_reg_debug0_pds (*(volatile byte xdata *) 0xD89D)
+#define p_reg_debug0_pds 0xD89D
+#define reg_debug0_pds_pos 0
+#define reg_debug0_pds_len 3
+#define reg_debug0_pds_lsb 0
+#define xd_p_reg_gpiot1_pds (*(volatile byte xdata *) 0xD89E)
+#define p_reg_gpiot1_pds 0xD89E
+#define reg_gpiot1_pds_pos 0
+#define reg_gpiot1_pds_len 3
+#define reg_gpiot1_pds_lsb 0
+#define xd_p_reg_gpiot2_pds (*(volatile byte xdata *) 0xD89F)
+#define p_reg_gpiot2_pds 0xD89F
+#define reg_gpiot2_pds_pos 0
+#define reg_gpiot2_pds_len 3
+#define reg_gpiot2_pds_lsb 0
+#define xd_p_reg_rfagc_pds (*(volatile byte xdata *) 0xD8A0)
+#define p_reg_rfagc_pds 0xD8A0
+#define reg_rfagc_pds_pos 0
+#define reg_rfagc_pds_len 3
+#define reg_rfagc_pds_lsb 0
+#define xd_p_reg_ifagc_pds (*(volatile byte xdata *) 0xD8A1)
+#define p_reg_ifagc_pds 0xD8A1
+#define reg_ifagc_pds_pos 0
+#define reg_ifagc_pds_len 3
+#define reg_ifagc_pds_lsb 0
+#define xd_p_reg_gpiot3_pds (*(volatile byte xdata *) 0xD8A2)
+#define p_reg_gpiot3_pds 0xD8A2
+#define reg_gpiot3_pds_pos 0
+#define reg_gpiot3_pds_len 3
+#define reg_gpiot3_pds_lsb 0
+#define xd_p_reg_i2caddr3_pds (*(volatile byte xdata *) 0xD8A3)
+#define p_reg_i2caddr3_pds 0xD8A3
+#define reg_i2caddr3_pds_pos 0
+#define reg_i2caddr3_pds_len 3
+#define reg_i2caddr3_pds_lsb 0
+#define xd_p_reg_i2caddr2_pds (*(volatile byte xdata *) 0xD8A4)
+#define p_reg_i2caddr2_pds 0xD8A4
+#define reg_i2caddr2_pds_pos 0
+#define reg_i2caddr2_pds_len 3
+#define reg_i2caddr2_pds_lsb 0
+#define xd_p_reg_i2caddr1_pds (*(volatile byte xdata *) 0xD8A5)
+#define p_reg_i2caddr1_pds 0xD8A5
+#define reg_i2caddr1_pds_pos 0
+#define reg_i2caddr1_pds_len 3
+#define reg_i2caddr1_pds_lsb 0
+#define xd_p_reg_afe_sel33_pds (*(volatile byte xdata *) 0xD8A6)
+#define p_reg_afe_sel33_pds 0xD8A6
+#define reg_afe_sel33_pds_pos 0
+#define reg_afe_sel33_pds_len 3
+#define reg_afe_sel33_pds_lsb 0
+#define xd_p_reg_iotunscl_pds (*(volatile byte xdata *) 0xD8A7)
+#define p_reg_iotunscl_pds 0xD8A7
+#define reg_iotunscl_pds_pos 0
+#define reg_iotunscl_pds_len 3
+#define reg_iotunscl_pds_lsb 0
+#define xd_p_reg_iotunsda_pds (*(volatile byte xdata *) 0xD8A8)
+#define p_reg_iotunsda_pds 0xD8A8
+#define reg_iotunsda_pds_pos 0
+#define reg_iotunsda_pds_len 3
+#define reg_iotunsda_pds_lsb 0
+#define xd_p_reg_rxdofsm_pds (*(volatile byte xdata *) 0xD8A9)
+#define p_reg_rxdofsm_pds 0xD8A9
+#define reg_rxdofsm_pds_pos 0
+#define reg_rxdofsm_pds_len 3
+#define reg_rxdofsm_pds_lsb 0
+#define xd_p_reg_txdofsm_pds (*(volatile byte xdata *) 0xD8AA)
+#define p_reg_txdofsm_pds 0xD8AA
+#define reg_txdofsm_pds_pos 0
+#define reg_txdofsm_pds_len 3
+#define reg_txdofsm_pds_lsb 0
+#define xd_p_reg_rxdlink_pds (*(volatile byte xdata *) 0xD8AB)
+#define p_reg_rxdlink_pds 0xD8AB
+#define reg_rxdlink_pds_pos 0
+#define reg_rxdlink_pds_len 3
+#define reg_rxdlink_pds_lsb 0
+#define xd_p_reg_txdlink_pds (*(volatile byte xdata *) 0xD8AC)
+#define p_reg_txdlink_pds 0xD8AC
+#define reg_txdlink_pds_pos 0
+#define reg_txdlink_pds_len 3
+#define reg_txdlink_pds_lsb 0
+#define xd_p_reg_ck_test_pds (*(volatile byte xdata *) 0xD8AD)
+#define p_reg_ck_test_pds 0xD8AD
+#define reg_ck_test_pds_pos 0
+#define reg_ck_test_pds_len 3
+#define reg_ck_test_pds_lsb 0
+#define xd_r_reg_top_gpioh1_i (*(volatile byte xdata *) 0xD8AE)
+#define r_reg_top_gpioh1_i 0xD8AE
+#define reg_top_gpioh1_i_pos 0
+#define reg_top_gpioh1_i_len 1
+#define reg_top_gpioh1_i_lsb 0
+#define xd_p_reg_top_gpioh1_o (*(volatile byte xdata *) 0xD8AF)
+#define p_reg_top_gpioh1_o 0xD8AF
+#define reg_top_gpioh1_o_pos 0
+#define reg_top_gpioh1_o_len 1
+#define reg_top_gpioh1_o_lsb 0
+#define xd_p_reg_top_gpioh1_en (*(volatile byte xdata *) 0xD8B0)
+#define p_reg_top_gpioh1_en 0xD8B0
+#define reg_top_gpioh1_en_pos 0
+#define reg_top_gpioh1_en_len 1
+#define reg_top_gpioh1_en_lsb 0
+#define xd_p_reg_top_gpioh1_on (*(volatile byte xdata *) 0xD8B1)
+#define p_reg_top_gpioh1_on 0xD8B1
+#define reg_top_gpioh1_on_pos 0
+#define reg_top_gpioh1_on_len 1
+#define reg_top_gpioh1_on_lsb 0
+#define xd_r_reg_top_gpioh3_i (*(volatile byte xdata *) 0xD8B2)
+#define r_reg_top_gpioh3_i 0xD8B2
+#define reg_top_gpioh3_i_pos 0
+#define reg_top_gpioh3_i_len 1
+#define reg_top_gpioh3_i_lsb 0
+#define xd_p_reg_top_gpioh3_o (*(volatile byte xdata *) 0xD8B3)
+#define p_reg_top_gpioh3_o 0xD8B3
+#define reg_top_gpioh3_o_pos 0
+#define reg_top_gpioh3_o_len 1
+#define reg_top_gpioh3_o_lsb 0
+#define xd_p_reg_top_gpioh3_en (*(volatile byte xdata *) 0xD8B4)
+#define p_reg_top_gpioh3_en 0xD8B4
+#define reg_top_gpioh3_en_pos 0
+#define reg_top_gpioh3_en_len 1
+#define reg_top_gpioh3_en_lsb 0
+#define xd_p_reg_top_gpioh3_on (*(volatile byte xdata *) 0xD8B5)
+#define p_reg_top_gpioh3_on 0xD8B5
+#define reg_top_gpioh3_on_pos 0
+#define reg_top_gpioh3_on_len 1
+#define reg_top_gpioh3_on_lsb 0
+#define xd_r_reg_top_gpioh2_i (*(volatile byte xdata *) 0xD8B6)
+#define r_reg_top_gpioh2_i 0xD8B6
+#define reg_top_gpioh2_i_pos 0
+#define reg_top_gpioh2_i_len 1
+#define reg_top_gpioh2_i_lsb 0
+#define xd_p_reg_top_gpioh2_o (*(volatile byte xdata *) 0xD8B7)
+#define p_reg_top_gpioh2_o 0xD8B7
+#define reg_top_gpioh2_o_pos 0
+#define reg_top_gpioh2_o_len 1
+#define reg_top_gpioh2_o_lsb 0
+#define xd_p_reg_top_gpioh2_en (*(volatile byte xdata *) 0xD8B8)
+#define p_reg_top_gpioh2_en 0xD8B8
+#define reg_top_gpioh2_en_pos 0
+#define reg_top_gpioh2_en_len 1
+#define reg_top_gpioh2_en_lsb 0
+#define xd_p_reg_top_gpioh2_on (*(volatile byte xdata *) 0xD8B9)
+#define p_reg_top_gpioh2_on 0xD8B9
+#define reg_top_gpioh2_on_pos 0
+#define reg_top_gpioh2_on_len 1
+#define reg_top_gpioh2_on_lsb 0
+#define xd_r_reg_top_gpioh5_i (*(volatile byte xdata *) 0xD8BA)
+#define r_reg_top_gpioh5_i 0xD8BA
+#define reg_top_gpioh5_i_pos 0
+#define reg_top_gpioh5_i_len 1
+#define reg_top_gpioh5_i_lsb 0
+#define xd_p_reg_top_gpioh5_o (*(volatile byte xdata *) 0xD8BB)
+#define p_reg_top_gpioh5_o 0xD8BB
+#define reg_top_gpioh5_o_pos 0
+#define reg_top_gpioh5_o_len 1
+#define reg_top_gpioh5_o_lsb 0
+#define xd_p_reg_top_gpioh5_en (*(volatile byte xdata *) 0xD8BC)
+#define p_reg_top_gpioh5_en 0xD8BC
+#define reg_top_gpioh5_en_pos 0
+#define reg_top_gpioh5_en_len 1
+#define reg_top_gpioh5_en_lsb 0
+#define xd_p_reg_top_gpioh5_on (*(volatile byte xdata *) 0xD8BD)
+#define p_reg_top_gpioh5_on 0xD8BD
+#define reg_top_gpioh5_on_pos 0
+#define reg_top_gpioh5_on_len 1
+#define reg_top_gpioh5_on_lsb 0
+#define xd_r_reg_top_gpioh4_i (*(volatile byte xdata *) 0xD8BE)
+#define r_reg_top_gpioh4_i 0xD8BE
+#define reg_top_gpioh4_i_pos 0
+#define reg_top_gpioh4_i_len 1
+#define reg_top_gpioh4_i_lsb 0
+#define xd_p_reg_top_gpioh4_o (*(volatile byte xdata *) 0xD8BF)
+#define p_reg_top_gpioh4_o 0xD8BF
+#define reg_top_gpioh4_o_pos 0
+#define reg_top_gpioh4_o_len 1
+#define reg_top_gpioh4_o_lsb 0
+#define xd_p_reg_top_gpioh4_en (*(volatile byte xdata *) 0xD8C0)
+#define p_reg_top_gpioh4_en 0xD8C0
+#define reg_top_gpioh4_en_pos 0
+#define reg_top_gpioh4_en_len 1
+#define reg_top_gpioh4_en_lsb 0
+#define xd_p_reg_top_gpioh4_on (*(volatile byte xdata *) 0xD8C1)
+#define p_reg_top_gpioh4_on 0xD8C1
+#define reg_top_gpioh4_on_pos 0
+#define reg_top_gpioh4_on_len 1
+#define reg_top_gpioh4_on_lsb 0
+#define xd_r_reg_top_gpioh7_i (*(volatile byte xdata *) 0xD8C2)
+#define r_reg_top_gpioh7_i 0xD8C2
+#define reg_top_gpioh7_i_pos 0
+#define reg_top_gpioh7_i_len 1
+#define reg_top_gpioh7_i_lsb 0
+#define xd_p_reg_top_gpioh7_o (*(volatile byte xdata *) 0xD8C3)
+#define p_reg_top_gpioh7_o 0xD8C3
+#define reg_top_gpioh7_o_pos 0
+#define reg_top_gpioh7_o_len 1
+#define reg_top_gpioh7_o_lsb 0
+#define xd_p_reg_top_gpioh7_en (*(volatile byte xdata *) 0xD8C4)
+#define p_reg_top_gpioh7_en 0xD8C4
+#define reg_top_gpioh7_en_pos 0
+#define reg_top_gpioh7_en_len 1
+#define reg_top_gpioh7_en_lsb 0
+#define xd_p_reg_top_gpioh7_on (*(volatile byte xdata *) 0xD8C5)
+#define p_reg_top_gpioh7_on 0xD8C5
+#define reg_top_gpioh7_on_pos 0
+#define reg_top_gpioh7_on_len 1
+#define reg_top_gpioh7_on_lsb 0
+#define xd_r_reg_top_gpioh6_i (*(volatile byte xdata *) 0xD8C6)
+#define r_reg_top_gpioh6_i 0xD8C6
+#define reg_top_gpioh6_i_pos 0
+#define reg_top_gpioh6_i_len 1
+#define reg_top_gpioh6_i_lsb 0
+#define xd_p_reg_top_gpioh6_o (*(volatile byte xdata *) 0xD8C7)
+#define p_reg_top_gpioh6_o 0xD8C7
+#define reg_top_gpioh6_o_pos 0
+#define reg_top_gpioh6_o_len 1
+#define reg_top_gpioh6_o_lsb 0
+#define xd_p_reg_top_gpioh6_en (*(volatile byte xdata *) 0xD8C8)
+#define p_reg_top_gpioh6_en 0xD8C8
+#define reg_top_gpioh6_en_pos 0
+#define reg_top_gpioh6_en_len 1
+#define reg_top_gpioh6_en_lsb 0
+#define xd_p_reg_top_gpioh6_on (*(volatile byte xdata *) 0xD8C9)
+#define p_reg_top_gpioh6_on 0xD8C9
+#define reg_top_gpioh6_on_pos 0
+#define reg_top_gpioh6_on_len 1
+#define reg_top_gpioh6_on_lsb 0
+#define xd_r_reg_top_gpioh9_i (*(volatile byte xdata *) 0xD8CA)
+#define r_reg_top_gpioh9_i 0xD8CA
+#define reg_top_gpioh9_i_pos 0
+#define reg_top_gpioh9_i_len 1
+#define reg_top_gpioh9_i_lsb 0
+#define xd_p_reg_top_gpioh9_o (*(volatile byte xdata *) 0xD8CB)
+#define p_reg_top_gpioh9_o 0xD8CB
+#define reg_top_gpioh9_o_pos 0
+#define reg_top_gpioh9_o_len 1
+#define reg_top_gpioh9_o_lsb 0
+#define xd_p_reg_top_gpioh9_en (*(volatile byte xdata *) 0xD8CC)
+#define p_reg_top_gpioh9_en 0xD8CC
+#define reg_top_gpioh9_en_pos 0
+#define reg_top_gpioh9_en_len 1
+#define reg_top_gpioh9_en_lsb 0
+#define xd_p_reg_top_gpioh9_on (*(volatile byte xdata *) 0xD8CD)
+#define p_reg_top_gpioh9_on 0xD8CD
+#define reg_top_gpioh9_on_pos 0
+#define reg_top_gpioh9_on_len 1
+#define reg_top_gpioh9_on_lsb 0
+#define xd_r_reg_top_gpioh8_i (*(volatile byte xdata *) 0xD8CE)
+#define r_reg_top_gpioh8_i 0xD8CE
+#define reg_top_gpioh8_i_pos 0
+#define reg_top_gpioh8_i_len 1
+#define reg_top_gpioh8_i_lsb 0
+#define xd_p_reg_top_gpioh8_o (*(volatile byte xdata *) 0xD8CF)
+#define p_reg_top_gpioh8_o 0xD8CF
+#define reg_top_gpioh8_o_pos 0
+#define reg_top_gpioh8_o_len 1
+#define reg_top_gpioh8_o_lsb 0
+#define xd_p_reg_top_gpioh8_en (*(volatile byte xdata *) 0xD8D0)
+#define p_reg_top_gpioh8_en 0xD8D0
+#define reg_top_gpioh8_en_pos 0
+#define reg_top_gpioh8_en_len 1
+#define reg_top_gpioh8_en_lsb 0
+#define xd_p_reg_top_gpioh8_on (*(volatile byte xdata *) 0xD8D1)
+#define p_reg_top_gpioh8_on 0xD8D1
+#define reg_top_gpioh8_on_pos 0
+#define reg_top_gpioh8_on_len 1
+#define reg_top_gpioh8_on_lsb 0
+#define xd_r_reg_top_gpioh11_i (*(volatile byte xdata *) 0xD8D2)
+#define r_reg_top_gpioh11_i 0xD8D2
+#define reg_top_gpioh11_i_pos 0
+#define reg_top_gpioh11_i_len 1
+#define reg_top_gpioh11_i_lsb 0
+#define xd_p_reg_top_gpioh11_o (*(volatile byte xdata *) 0xD8D3)
+#define p_reg_top_gpioh11_o 0xD8D3
+#define reg_top_gpioh11_o_pos 0
+#define reg_top_gpioh11_o_len 1
+#define reg_top_gpioh11_o_lsb 0
+#define xd_p_reg_top_gpioh11_en (*(volatile byte xdata *) 0xD8D4)
+#define p_reg_top_gpioh11_en 0xD8D4
+#define reg_top_gpioh11_en_pos 0
+#define reg_top_gpioh11_en_len 1
+#define reg_top_gpioh11_en_lsb 0
+#define xd_p_reg_top_gpioh11_on (*(volatile byte xdata *) 0xD8D5)
+#define p_reg_top_gpioh11_on 0xD8D5
+#define reg_top_gpioh11_on_pos 0
+#define reg_top_gpioh11_on_len 1
+#define reg_top_gpioh11_on_lsb 0
+#define xd_r_reg_top_gpioh10_i (*(volatile byte xdata *) 0xD8D6)
+#define r_reg_top_gpioh10_i 0xD8D6
+#define reg_top_gpioh10_i_pos 0
+#define reg_top_gpioh10_i_len 1
+#define reg_top_gpioh10_i_lsb 0
+#define xd_p_reg_top_gpioh10_o (*(volatile byte xdata *) 0xD8D7)
+#define p_reg_top_gpioh10_o 0xD8D7
+#define reg_top_gpioh10_o_pos 0
+#define reg_top_gpioh10_o_len 1
+#define reg_top_gpioh10_o_lsb 0
+#define xd_p_reg_top_gpioh10_en (*(volatile byte xdata *) 0xD8D8)
+#define p_reg_top_gpioh10_en 0xD8D8
+#define reg_top_gpioh10_en_pos 0
+#define reg_top_gpioh10_en_len 1
+#define reg_top_gpioh10_en_lsb 0
+#define xd_p_reg_top_gpioh10_on (*(volatile byte xdata *) 0xD8D9)
+#define p_reg_top_gpioh10_on 0xD8D9
+#define reg_top_gpioh10_on_pos 0
+#define reg_top_gpioh10_on_len 1
+#define reg_top_gpioh10_on_lsb 0
+#define xd_r_reg_top_gpioh13_i (*(volatile byte xdata *) 0xD8DA)
+#define r_reg_top_gpioh13_i 0xD8DA
+#define reg_top_gpioh13_i_pos 0
+#define reg_top_gpioh13_i_len 1
+#define reg_top_gpioh13_i_lsb 0
+#define xd_p_reg_top_gpioh13_o (*(volatile byte xdata *) 0xD8DB)
+#define p_reg_top_gpioh13_o 0xD8DB
+#define reg_top_gpioh13_o_pos 0
+#define reg_top_gpioh13_o_len 1
+#define reg_top_gpioh13_o_lsb 0
+#define xd_p_reg_top_gpioh13_en (*(volatile byte xdata *) 0xD8DC)
+#define p_reg_top_gpioh13_en 0xD8DC
+#define reg_top_gpioh13_en_pos 0
+#define reg_top_gpioh13_en_len 1
+#define reg_top_gpioh13_en_lsb 0
+#define xd_p_reg_top_gpioh13_on (*(volatile byte xdata *) 0xD8DD)
+#define p_reg_top_gpioh13_on 0xD8DD
+#define reg_top_gpioh13_on_pos 0
+#define reg_top_gpioh13_on_len 1
+#define reg_top_gpioh13_on_lsb 0
+#define xd_r_reg_top_gpioh12_i (*(volatile byte xdata *) 0xD8DE)
+#define r_reg_top_gpioh12_i 0xD8DE
+#define reg_top_gpioh12_i_pos 0
+#define reg_top_gpioh12_i_len 1
+#define reg_top_gpioh12_i_lsb 0
+#define xd_p_reg_top_gpioh12_o (*(volatile byte xdata *) 0xD8DF)
+#define p_reg_top_gpioh12_o 0xD8DF
+#define reg_top_gpioh12_o_pos 0
+#define reg_top_gpioh12_o_len 1
+#define reg_top_gpioh12_o_lsb 0
+#define xd_p_reg_top_gpioh12_en (*(volatile byte xdata *) 0xD8E0)
+#define p_reg_top_gpioh12_en 0xD8E0
+#define reg_top_gpioh12_en_pos 0
+#define reg_top_gpioh12_en_len 1
+#define reg_top_gpioh12_en_lsb 0
+#define xd_p_reg_top_gpioh12_on (*(volatile byte xdata *) 0xD8E1)
+#define p_reg_top_gpioh12_on 0xD8E1
+#define reg_top_gpioh12_on_pos 0
+#define reg_top_gpioh12_on_len 1
+#define reg_top_gpioh12_on_lsb 0
+#define xd_r_reg_top_gpiot1_i (*(volatile byte xdata *) 0xD8E2)
+#define r_reg_top_gpiot1_i 0xD8E2
+#define reg_top_gpiot1_i_pos 0
+#define reg_top_gpiot1_i_len 1
+#define reg_top_gpiot1_i_lsb 0
+#define xd_p_reg_top_gpiot1_o (*(volatile byte xdata *) 0xD8E3)
+#define p_reg_top_gpiot1_o 0xD8E3
+#define reg_top_gpiot1_o_pos 0
+#define reg_top_gpiot1_o_len 1
+#define reg_top_gpiot1_o_lsb 0
+#define xd_p_reg_top_gpiot1_en (*(volatile byte xdata *) 0xD8E4)
+#define p_reg_top_gpiot1_en 0xD8E4
+#define reg_top_gpiot1_en_pos 0
+#define reg_top_gpiot1_en_len 1
+#define reg_top_gpiot1_en_lsb 0
+#define xd_p_reg_top_gpiot1_on (*(volatile byte xdata *) 0xD8E5)
+#define p_reg_top_gpiot1_on 0xD8E5
+#define reg_top_gpiot1_on_pos 0
+#define reg_top_gpiot1_on_len 1
+#define reg_top_gpiot1_on_lsb 0
+#define xd_r_reg_top_gpiot3_i (*(volatile byte xdata *) 0xD8E6)
+#define r_reg_top_gpiot3_i 0xD8E6
+#define reg_top_gpiot3_i_pos 0
+#define reg_top_gpiot3_i_len 1
+#define reg_top_gpiot3_i_lsb 0
+#define xd_p_reg_top_gpiot3_o (*(volatile byte xdata *) 0xD8E7)
+#define p_reg_top_gpiot3_o 0xD8E7
+#define reg_top_gpiot3_o_pos 0
+#define reg_top_gpiot3_o_len 1
+#define reg_top_gpiot3_o_lsb 0
+#define xd_p_reg_top_gpiot3_en (*(volatile byte xdata *) 0xD8E8)
+#define p_reg_top_gpiot3_en 0xD8E8
+#define reg_top_gpiot3_en_pos 0
+#define reg_top_gpiot3_en_len 1
+#define reg_top_gpiot3_en_lsb 0
+#define xd_p_reg_top_gpiot3_on (*(volatile byte xdata *) 0xD8E9)
+#define p_reg_top_gpiot3_on 0xD8E9
+#define reg_top_gpiot3_on_pos 0
+#define reg_top_gpiot3_on_len 1
+#define reg_top_gpiot3_on_lsb 0
+#define xd_r_reg_top_gpiot2_i (*(volatile byte xdata *) 0xD8EA)
+#define r_reg_top_gpiot2_i 0xD8EA
+#define reg_top_gpiot2_i_pos 0
+#define reg_top_gpiot2_i_len 1
+#define reg_top_gpiot2_i_lsb 0
+#define xd_p_reg_top_gpiot2_o (*(volatile byte xdata *) 0xD8EB)
+#define p_reg_top_gpiot2_o 0xD8EB
+#define reg_top_gpiot2_o_pos 0
+#define reg_top_gpiot2_o_len 1
+#define reg_top_gpiot2_o_lsb 0
+#define xd_p_reg_top_gpiot2_en (*(volatile byte xdata *) 0xD8EC)
+#define p_reg_top_gpiot2_en 0xD8EC
+#define reg_top_gpiot2_en_pos 0
+#define reg_top_gpiot2_en_len 1
+#define reg_top_gpiot2_en_lsb 0
+#define xd_p_reg_top_gpiot2_on (*(volatile byte xdata *) 0xD8ED)
+#define p_reg_top_gpiot2_on 0xD8ED
+#define reg_top_gpiot2_on_pos 0
+#define reg_top_gpiot2_on_len 1
+#define reg_top_gpiot2_on_lsb 0
+#define xd_p_reg_top_lock2_out (*(volatile byte xdata *) 0xD8EE)
+#define p_reg_top_lock2_out 0xD8EE
+#define reg_top_lock2_out_pos 0
+#define reg_top_lock2_out_len 1
+#define reg_top_lock2_out_lsb 0
+#define xd_p_reg_top_lock2_tpsd (*(volatile byte xdata *) 0xD8EF)
+#define p_reg_top_lock2_tpsd 0xD8EF
+#define reg_top_lock2_tpsd_pos 0
+#define reg_top_lock2_tpsd_len 1
+#define reg_top_lock2_tpsd_lsb 0
+#define xd_p_reg_top_lock2_o (*(volatile byte xdata *) 0xD8F0)
+#define p_reg_top_lock2_o 0xD8F0
+#define reg_top_lock2_o_pos 0
+#define reg_top_lock2_o_len 1
+#define reg_top_lock2_o_lsb 0
+#define xd_p_reg_top_lock2_en (*(volatile byte xdata *) 0xD8F1)
+#define p_reg_top_lock2_en 0xD8F1
+#define reg_top_lock2_en_pos 0
+#define reg_top_lock2_en_len 1
+#define reg_top_lock2_en_lsb 0
+#define xd_p_reg_top_lock2_on (*(volatile byte xdata *) 0xD8F2)
+#define p_reg_top_lock2_on 0xD8F2
+#define reg_top_lock2_on_pos 0
+#define reg_top_lock2_on_len 1
+#define reg_top_lock2_on_lsb 0
+#define xd_p_reg_top_lock1_out (*(volatile byte xdata *) 0xD8F3)
+#define p_reg_top_lock1_out 0xD8F3
+#define reg_top_lock1_out_pos 0
+#define reg_top_lock1_out_len 1
+#define reg_top_lock1_out_lsb 0
+#define xd_p_reg_top_lock1_tpsd (*(volatile byte xdata *) 0xD8F4)
+#define p_reg_top_lock1_tpsd 0xD8F4
+#define reg_top_lock1_tpsd_pos 0
+#define reg_top_lock1_tpsd_len 1
+#define reg_top_lock1_tpsd_lsb 0
+#define xd_p_reg_top_lock1_o (*(volatile byte xdata *) 0xD8F5)
+#define p_reg_top_lock1_o 0xD8F5
+#define reg_top_lock1_o_pos 0
+#define reg_top_lock1_o_len 1
+#define reg_top_lock1_o_lsb 0
+#define xd_p_reg_top_lock1_en (*(volatile byte xdata *) 0xD8F6)
+#define p_reg_top_lock1_en 0xD8F6
+#define reg_top_lock1_en_pos 0
+#define reg_top_lock1_en_len 1
+#define reg_top_lock1_en_lsb 0
+#define xd_p_reg_top_lock1_on (*(volatile byte xdata *) 0xD8F7)
+#define p_reg_top_lock1_on 0xD8F7
+#define reg_top_lock1_on_pos 0
+#define reg_top_lock1_on_len 1
+#define reg_top_lock1_on_lsb 0
+#define xd_p_reg_top_lock4_out (*(volatile byte xdata *) 0xD8F8)
+#define p_reg_top_lock4_out 0xD8F8
+#define reg_top_lock4_out_pos 0
+#define reg_top_lock4_out_len 1
+#define reg_top_lock4_out_lsb 0
+#define xd_p_reg_top_lock4_tpsd (*(volatile byte xdata *) 0xD8F9)
+#define p_reg_top_lock4_tpsd 0xD8F9
+#define reg_top_lock4_tpsd_pos 0
+#define reg_top_lock4_tpsd_len 1
+#define reg_top_lock4_tpsd_lsb 0
+#define xd_p_reg_top_lock4_o (*(volatile byte xdata *) 0xD8FA)
+#define p_reg_top_lock4_o 0xD8FA
+#define reg_top_lock4_o_pos 0
+#define reg_top_lock4_o_len 1
+#define reg_top_lock4_o_lsb 0
+#define xd_p_reg_top_lock4_en (*(volatile byte xdata *) 0xD8FB)
+#define p_reg_top_lock4_en 0xD8FB
+#define reg_top_lock4_en_pos 0
+#define reg_top_lock4_en_len 1
+#define reg_top_lock4_en_lsb 0
+#define xd_p_reg_top_lock4_on (*(volatile byte xdata *) 0xD8FC)
+#define p_reg_top_lock4_on 0xD8FC
+#define reg_top_lock4_on_pos 0
+#define reg_top_lock4_on_len 1
+#define reg_top_lock4_on_lsb 0
+#define xd_p_reg_top_lock3_out (*(volatile byte xdata *) 0xD8FD)
+#define p_reg_top_lock3_out 0xD8FD
+#define reg_top_lock3_out_pos 0
+#define reg_top_lock3_out_len 1
+#define reg_top_lock3_out_lsb 0
+#define xd_p_reg_top_lock3_tpsd (*(volatile byte xdata *) 0xD8FE)
+#define p_reg_top_lock3_tpsd 0xD8FE
+#define reg_top_lock3_tpsd_pos 0
+#define reg_top_lock3_tpsd_len 1
+#define reg_top_lock3_tpsd_lsb 0
+#define xd_p_reg_top_lock3_o (*(volatile byte xdata *) 0xD8FF)
+#define p_reg_top_lock3_o 0xD8FF
+#define reg_top_lock3_o_pos 0
+#define reg_top_lock3_o_len 1
+#define reg_top_lock3_o_lsb 0
+#define xd_p_reg_top_lock3_en (*(volatile byte xdata *) 0xD900)
+#define p_reg_top_lock3_en 0xD900
+#define reg_top_lock3_en_pos 0
+#define reg_top_lock3_en_len 1
+#define reg_top_lock3_en_lsb 0
+#define xd_p_reg_top_lock3_on (*(volatile byte xdata *) 0xD901)
+#define p_reg_top_lock3_on 0xD901
+#define reg_top_lock3_on_pos 0
+#define reg_top_lock3_on_len 1
+#define reg_top_lock3_on_lsb 0
+#define xd_p_reg_top_pwm0_en (*(volatile byte xdata *) 0xD902)
+#define p_reg_top_pwm0_en 0xD902
+#define reg_top_pwm0_en_pos 0
+#define reg_top_pwm0_en_len 1
+#define reg_top_pwm0_en_lsb 0
+#define xd_p_reg_top_pwm1_en (*(volatile byte xdata *) 0xD903)
+#define p_reg_top_pwm1_en 0xD903
+#define reg_top_pwm1_en_pos 0
+#define reg_top_pwm1_en_len 1
+#define reg_top_pwm1_en_lsb 0
+#define xd_p_reg_top_pwm2_en (*(volatile byte xdata *) 0xD904)
+#define p_reg_top_pwm2_en 0xD904
+#define reg_top_pwm2_en_pos 0
+#define reg_top_pwm2_en_len 1
+#define reg_top_pwm2_en_lsb 0
+#define xd_p_reg_top_pwm3_en (*(volatile byte xdata *) 0xD905)
+#define p_reg_top_pwm3_en 0xD905
+#define reg_top_pwm3_en_pos 0
+#define reg_top_pwm3_en_len 1
+#define reg_top_pwm3_en_lsb 0
+#define xd_p_reg_top_pwm0_gpio (*(volatile byte xdata *) 0xD906)
+#define p_reg_top_pwm0_gpio 0xD906
+#define reg_top_pwm0_gpio_pos 0
+#define reg_top_pwm0_gpio_len 1
+#define reg_top_pwm0_gpio_lsb 0
+#define xd_p_reg_top_pwm0_pos (*(volatile byte xdata *) 0xD907)
+#define p_reg_top_pwm0_pos 0xD907
+#define reg_top_pwm0_pos_pos 0
+#define reg_top_pwm0_pos_len 3
+#define reg_top_pwm0_pos_lsb 0
+#define xd_p_reg_top_pwm0_width (*(volatile byte xdata *) 0xD908)
+#define p_reg_top_pwm0_width 0xD908
+#define reg_top_pwm0_width_pos 0
+#define reg_top_pwm0_width_len 2
+#define reg_top_pwm0_width_lsb 0
+#define xd_p_reg_top_pwm0_duration (*(volatile byte xdata *) 0xD909)
+#define p_reg_top_pwm0_duration 0xD909
+#define reg_top_pwm0_duration_pos 0
+#define reg_top_pwm0_duration_len 8
+#define reg_top_pwm0_duration_lsb 0
+#define xd_p_reg_top_pwm1_gpio (*(volatile byte xdata *) 0xD90A)
+#define p_reg_top_pwm1_gpio 0xD90A
+#define reg_top_pwm1_gpio_pos 0
+#define reg_top_pwm1_gpio_len 1
+#define reg_top_pwm1_gpio_lsb 0
+#define xd_p_reg_top_pwm1_pos (*(volatile byte xdata *) 0xD90B)
+#define p_reg_top_pwm1_pos 0xD90B
+#define reg_top_pwm1_pos_pos 0
+#define reg_top_pwm1_pos_len 3
+#define reg_top_pwm1_pos_lsb 0
+#define xd_p_reg_top_pwm1_width (*(volatile byte xdata *) 0xD90C)
+#define p_reg_top_pwm1_width 0xD90C
+#define reg_top_pwm1_width_pos 0
+#define reg_top_pwm1_width_len 2
+#define reg_top_pwm1_width_lsb 0
+#define xd_p_reg_top_pwm1_duration (*(volatile byte xdata *) 0xD90D)
+#define p_reg_top_pwm1_duration 0xD90D
+#define reg_top_pwm1_duration_pos 0
+#define reg_top_pwm1_duration_len 8
+#define reg_top_pwm1_duration_lsb 0
+#define xd_p_reg_top_pwm2_gpio (*(volatile byte xdata *) 0xD90E)
+#define p_reg_top_pwm2_gpio 0xD90E
+#define reg_top_pwm2_gpio_pos 0
+#define reg_top_pwm2_gpio_len 1
+#define reg_top_pwm2_gpio_lsb 0
+#define xd_p_reg_top_pwm2_pos (*(volatile byte xdata *) 0xD90F)
+#define p_reg_top_pwm2_pos 0xD90F
+#define reg_top_pwm2_pos_pos 0
+#define reg_top_pwm2_pos_len 3
+#define reg_top_pwm2_pos_lsb 0
+#define xd_p_reg_top_pwm2_width (*(volatile byte xdata *) 0xD910)
+#define p_reg_top_pwm2_width 0xD910
+#define reg_top_pwm2_width_pos 0
+#define reg_top_pwm2_width_len 2
+#define reg_top_pwm2_width_lsb 0
+#define xd_p_reg_top_pwm2_duration (*(volatile byte xdata *) 0xD911)
+#define p_reg_top_pwm2_duration 0xD911
+#define reg_top_pwm2_duration_pos 0
+#define reg_top_pwm2_duration_len 8
+#define reg_top_pwm2_duration_lsb 0
+#define xd_p_reg_top_pwm3_gpio (*(volatile byte xdata *) 0xD912)
+#define p_reg_top_pwm3_gpio 0xD912
+#define reg_top_pwm3_gpio_pos 0
+#define reg_top_pwm3_gpio_len 1
+#define reg_top_pwm3_gpio_lsb 0
+#define xd_p_reg_top_pwm3_pos (*(volatile byte xdata *) 0xD913)
+#define p_reg_top_pwm3_pos 0xD913
+#define reg_top_pwm3_pos_pos 0
+#define reg_top_pwm3_pos_len 3
+#define reg_top_pwm3_pos_lsb 0
+#define xd_p_reg_top_pwm3_width (*(volatile byte xdata *) 0xD914)
+#define p_reg_top_pwm3_width 0xD914
+#define reg_top_pwm3_width_pos 0
+#define reg_top_pwm3_width_len 2
+#define reg_top_pwm3_width_lsb 0
+#define xd_p_reg_top_pwm3_duration (*(volatile byte xdata *) 0xD915)
+#define p_reg_top_pwm3_duration 0xD915
+#define reg_top_pwm3_duration_pos 0
+#define reg_top_pwm3_duration_len 8
+#define reg_top_pwm3_duration_lsb 0
+#define xd_p_reg_top_hosta_mpeg_par_mode (*(volatile byte xdata *) 0xD916)
+#define p_reg_top_hosta_mpeg_par_mode 0xD916
+#define reg_top_hosta_mpeg_par_mode_pos 0
+#define reg_top_hosta_mpeg_par_mode_len 1
+#define reg_top_hosta_mpeg_par_mode_lsb 0
+#define xd_p_reg_top_hosta_mpeg_ser_mode (*(volatile byte xdata *) 0xD917)
+#define p_reg_top_hosta_mpeg_ser_mode 0xD917
+#define reg_top_hosta_mpeg_ser_mode_pos 0
+#define reg_top_hosta_mpeg_ser_mode_len 1
+#define reg_top_hosta_mpeg_ser_mode_lsb 0
+#define xd_p_reg_top_hosta_mpeg_ser_do7 (*(volatile byte xdata *) 0xD918)
+#define p_reg_top_hosta_mpeg_ser_do7 0xD918
+#define reg_top_hosta_mpeg_ser_do7_pos 0
+#define reg_top_hosta_mpeg_ser_do7_len 1
+#define reg_top_hosta_mpeg_ser_do7_lsb 0
+#define xd_p_reg_top_hosta_dca_upper (*(volatile byte xdata *) 0xD919)
+#define p_reg_top_hosta_dca_upper 0xD919
+#define reg_top_hosta_dca_upper_pos 0
+#define reg_top_hosta_dca_upper_len 1
+#define reg_top_hosta_dca_upper_lsb 0
+#define xd_p_reg_top_hosta_dca_lower (*(volatile byte xdata *) 0xD91A)
+#define p_reg_top_hosta_dca_lower 0xD91A
+#define reg_top_hosta_dca_lower_pos 0
+#define reg_top_hosta_dca_lower_len 1
+#define reg_top_hosta_dca_lower_lsb 0
+#define xd_p_reg_top_hostb_mpeg_par_mode (*(volatile byte xdata *) 0xD91B)
+#define p_reg_top_hostb_mpeg_par_mode 0xD91B
+#define reg_top_hostb_mpeg_par_mode_pos 0
+#define reg_top_hostb_mpeg_par_mode_len 1
+#define reg_top_hostb_mpeg_par_mode_lsb 0
+#define xd_p_reg_top_hostb_mpeg_ser_mode (*(volatile byte xdata *) 0xD91C)
+#define p_reg_top_hostb_mpeg_ser_mode 0xD91C
+#define reg_top_hostb_mpeg_ser_mode_pos 0
+#define reg_top_hostb_mpeg_ser_mode_len 1
+#define reg_top_hostb_mpeg_ser_mode_lsb 0
+#define xd_p_reg_top_hostb_mpeg_ser_do7 (*(volatile byte xdata *) 0xD91D)
+#define p_reg_top_hostb_mpeg_ser_do7 0xD91D
+#define reg_top_hostb_mpeg_ser_do7_pos 0
+#define reg_top_hostb_mpeg_ser_do7_len 1
+#define reg_top_hostb_mpeg_ser_do7_lsb 0
+#define xd_p_reg_top_hostb_dca_upper (*(volatile byte xdata *) 0xD91E)
+#define p_reg_top_hostb_dca_upper 0xD91E
+#define reg_top_hostb_dca_upper_pos 0
+#define reg_top_hostb_dca_upper_len 1
+#define reg_top_hostb_dca_upper_lsb 0
+#define xd_p_reg_top_hostb_dca_lower (*(volatile byte xdata *) 0xD91F)
+#define p_reg_top_hostb_dca_lower 0xD91F
+#define reg_top_hostb_dca_lower_pos 0
+#define reg_top_hostb_dca_lower_len 1
+#define reg_top_hostb_dca_lower_lsb 0
+#define xd_p_reg_top_host_reverse (*(volatile byte xdata *) 0xD920)
+#define p_reg_top_host_reverse 0xD920
+#define reg_top_host_reverse_pos 0
+#define reg_top_host_reverse_len 1
+#define reg_top_host_reverse_lsb 0
+#define xd_p_reg_top_hosta_ccir (*(volatile byte xdata *) 0xD921)
+#define p_reg_top_hosta_ccir 0xD921
+#define reg_top_hosta_ccir_pos 0
+#define reg_top_hosta_ccir_len 1
+#define reg_top_hosta_ccir_lsb 0
+#define xd_p_reg_top_hostb_ccir (*(volatile byte xdata *) 0xD922)
+#define p_reg_top_hostb_ccir 0xD922
+#define reg_top_hostb_ccir_pos 0
+#define reg_top_hostb_ccir_len 1
+#define reg_top_hostb_ccir_lsb 0
+#define xd_p_reg_top_i2s_master_mode (*(volatile byte xdata *) 0xD923)
+#define p_reg_top_i2s_master_mode 0xD923
+#define reg_top_i2s_master_mode_pos 0
+#define reg_top_i2s_master_mode_len 1
+#define reg_top_i2s_master_mode_lsb 0
+#define xd_p_reg_usb_cfg_speed (*(volatile byte xdata *) 0xDD00)
+#define p_reg_usb_cfg_speed 0xDD00
+#define reg_usb_cfg_speed_pos 0
+#define reg_usb_cfg_speed_len 1
+#define reg_usb_cfg_speed_lsb 0
+#define xd_p_reg_usb_cfg_utmi16 (*(volatile byte xdata *) 0xDD00)
+#define p_reg_usb_cfg_utmi16 0xDD00
+#define reg_usb_cfg_utmi16_pos 1
+#define reg_usb_cfg_utmi16_len 1
+#define reg_usb_cfg_utmi16_lsb 0
+#define xd_p_reg_usb_cfg_test (*(volatile byte xdata *) 0xDD00)
+#define p_reg_usb_cfg_test 0xDD00
+#define reg_usb_cfg_test_pos 3
+#define reg_usb_cfg_test_len 3
+#define reg_usb_cfg_test_lsb 0
+#define xd_p_reg_usb_port_sim_reset (*(volatile byte xdata *) 0xDD00)
+#define p_reg_usb_port_sim_reset 0xDD00
+#define reg_usb_port_sim_reset_pos 6
+#define reg_usb_port_sim_reset_len 1
+#define reg_usb_port_sim_reset_lsb 0
+#define xd_p_reg_usb_port_run (*(volatile byte xdata *) 0xDD00)
+#define p_reg_usb_port_run 0xDD00
+#define reg_usb_port_run_pos 7
+#define reg_usb_port_run_len 1
+#define reg_usb_port_run_lsb 0
+#define xd_r_usb_line_state_0 (*(volatile byte xdata *) 0xDD01)
+#define r_usb_line_state_0 0xDD01
+#define usb_line_state_0_pos 0
+#define usb_line_state_0_len 1
+#define usb_line_state_0_lsb 0
+#define xd_r_usb_line_state_1 (*(volatile byte xdata *) 0xDD01)
+#define r_usb_line_state_1 0xDD01
+#define usb_line_state_1_pos 1
+#define usb_line_state_1_len 1
+#define usb_line_state_1_lsb 0
+#define xd_r_reg_usb_status_speed (*(volatile byte xdata *) 0xDD01)
+#define r_reg_usb_status_speed 0xDD01
+#define reg_usb_status_speed_pos 2
+#define reg_usb_status_speed_len 1
+#define reg_usb_status_speed_lsb 0
+#define xd_r_reg_usb_status_connect (*(volatile byte xdata *) 0xDD01)
+#define r_reg_usb_status_connect 0xDD01
+#define reg_usb_status_connect_pos 3
+#define reg_usb_status_connect_len 1
+#define reg_usb_status_connect_lsb 0
+#define xd_r_reg_usb_rx_buf (*(volatile byte xdata *) 0xDD01)
+#define r_reg_usb_rx_buf 0xDD01
+#define reg_usb_rx_buf_pos 4
+#define reg_usb_rx_buf_len 1
+#define reg_usb_rx_buf_lsb 0
+#define xd_r_reg_usb_port_reset (*(volatile byte xdata *) 0xDD01)
+#define r_reg_usb_port_reset 0xDD01
+#define reg_usb_port_reset_pos 5
+#define reg_usb_port_reset_len 1
+#define reg_usb_port_reset_lsb 0
+#define xd_r_reg_usb_port_suspend (*(volatile byte xdata *) 0xDD01)
+#define r_reg_usb_port_suspend 0xDD01
+#define reg_usb_port_suspend_pos 6
+#define reg_usb_port_suspend_len 1
+#define reg_usb_port_suspend_lsb 0
+#define xd_p_reg_ep1_tx_type (*(volatile byte xdata *) 0xDD07)
+#define p_reg_ep1_tx_type 0xDD07
+#define reg_ep1_tx_type_pos 2
+#define reg_ep1_tx_type_len 1
+#define reg_ep1_tx_type_lsb 0
+#define xd_p_reg_ep2_rx_type (*(volatile byte xdata *) 0xDD07)
+#define p_reg_ep2_rx_type 0xDD07
+#define reg_ep2_rx_type_pos 3
+#define reg_ep2_rx_type_len 1
+#define reg_ep2_rx_type_lsb 0
+#define xd_p_reg_ep3_tx_type (*(volatile byte xdata *) 0xDD07)
+#define p_reg_ep3_tx_type 0xDD07
+#define reg_ep3_tx_type_pos 4
+#define reg_ep3_tx_type_len 1
+#define reg_ep3_tx_type_lsb 0
+#define xd_p_reg_ep4_tx_type (*(volatile byte xdata *) 0xDD07)
+#define p_reg_ep4_tx_type 0xDD07
+#define reg_ep4_tx_type_pos 5
+#define reg_ep4_tx_type_len 1
+#define reg_ep4_tx_type_lsb 0
+#define xd_p_reg_ep5_tx_type (*(volatile byte xdata *) 0xDD07)
+#define p_reg_ep5_tx_type 0xDD07
+#define reg_ep5_tx_type_pos 6
+#define reg_ep5_tx_type_len 1
+#define reg_ep5_tx_type_lsb 0
+#define xd_p_reg_ep6_tx_type (*(volatile byte xdata *) 0xDD07)
+#define p_reg_ep6_tx_type 0xDD07
+#define reg_ep6_tx_type_pos 7
+#define reg_ep6_tx_type_len 1
+#define reg_ep6_tx_type_lsb 0
+#define xd_p_reg_ep0_max_pkt (*(volatile byte xdata *) 0xDD08)
+#define p_reg_ep0_max_pkt 0xDD08
+#define reg_ep0_max_pkt_pos 0
+#define reg_ep0_max_pkt_len 8
+#define reg_ep0_max_pkt_lsb 0
+#define xd_p_reg_ep2_max_pkt (*(volatile byte xdata *) 0xDD0A)
+#define p_reg_ep2_max_pkt 0xDD0A
+#define reg_ep2_max_pkt_pos 0
+#define reg_ep2_max_pkt_len 8
+#define reg_ep2_max_pkt_lsb 0
+#define xd_p_reg_ep4_max_pkt (*(volatile byte xdata *) 0xDD0C)
+#define p_reg_ep4_max_pkt 0xDD0C
+#define reg_ep4_max_pkt_pos 0
+#define reg_ep4_max_pkt_len 8
+#define reg_ep4_max_pkt_lsb 0
+#define xd_p_reg_ep5_max_pkt (*(volatile byte xdata *) 0xDD0D)
+#define p_reg_ep5_max_pkt 0xDD0D
+#define reg_ep5_max_pkt_pos 0
+#define reg_ep5_max_pkt_len 8
+#define reg_ep5_max_pkt_lsb 0
+#define xd_p_reg_ep6_max_pkt_7_0 (*(volatile byte xdata *) 0xDD0E)
+#define p_reg_ep6_max_pkt_7_0 0xDD0E
+#define reg_ep6_max_pkt_7_0_pos 0
+#define reg_ep6_max_pkt_7_0_len 8
+#define reg_ep6_max_pkt_7_0_lsb 0
+#define xd_p_reg_ep6_max_pkt_15_8 (*(volatile byte xdata *) 0xDD0F)
+#define p_reg_ep6_max_pkt_15_8 0xDD0F
+#define reg_ep6_max_pkt_15_8_pos 0
+#define reg_ep6_max_pkt_15_8_len 8
+#define reg_ep6_max_pkt_15_8_lsb 8
+#define xd_p_reg_usb_addr (*(volatile byte xdata *) 0xDD10)
+#define p_reg_usb_addr 0xDD10
+#define reg_usb_addr_pos 0
+#define reg_usb_addr_len 7
+#define reg_usb_addr_lsb 0
+#define xd_p_reg_usb_addr_now (*(volatile byte xdata *) 0xDD10)
+#define p_reg_usb_addr_now 0xDD10
+#define reg_usb_addr_now_pos 7
+#define reg_usb_addr_now_len 1
+#define reg_usb_addr_now_lsb 0
+#define xd_p_reg_ep0_tx_en (*(volatile byte xdata *) 0xDD11)
+#define p_reg_ep0_tx_en 0xDD11
+#define reg_ep0_tx_en_pos 0
+#define reg_ep0_tx_en_len 1
+#define reg_ep0_tx_en_lsb 0
+#define xd_p_reg_ep0_rx_en (*(volatile byte xdata *) 0xDD11)
+#define p_reg_ep0_rx_en 0xDD11
+#define reg_ep0_rx_en_pos 1
+#define reg_ep0_rx_en_len 1
+#define reg_ep0_rx_en_lsb 0
+#define xd_p_reg_ep1_tx_en (*(volatile byte xdata *) 0xDD11)
+#define p_reg_ep1_tx_en 0xDD11
+#define reg_ep1_tx_en_pos 2
+#define reg_ep1_tx_en_len 1
+#define reg_ep1_tx_en_lsb 0
+#define xd_p_reg_ep2_rx_en (*(volatile byte xdata *) 0xDD11)
+#define p_reg_ep2_rx_en 0xDD11
+#define reg_ep2_rx_en_pos 3
+#define reg_ep2_rx_en_len 1
+#define reg_ep2_rx_en_lsb 0
+#define xd_p_reg_ep3_tx_en (*(volatile byte xdata *) 0xDD11)
+#define p_reg_ep3_tx_en 0xDD11
+#define reg_ep3_tx_en_pos 4
+#define reg_ep3_tx_en_len 1
+#define reg_ep3_tx_en_lsb 0
+#define xd_p_reg_ep4_tx_en (*(volatile byte xdata *) 0xDD11)
+#define p_reg_ep4_tx_en 0xDD11
+#define reg_ep4_tx_en_pos 5
+#define reg_ep4_tx_en_len 1
+#define reg_ep4_tx_en_lsb 0
+#define xd_p_reg_ep5_tx_en (*(volatile byte xdata *) 0xDD11)
+#define p_reg_ep5_tx_en 0xDD11
+#define reg_ep5_tx_en_pos 6
+#define reg_ep5_tx_en_len 1
+#define reg_ep5_tx_en_lsb 0
+#define xd_p_reg_ep6_tx_en (*(volatile byte xdata *) 0xDD11)
+#define p_reg_ep6_tx_en 0xDD11
+#define reg_ep6_tx_en_pos 7
+#define reg_ep6_tx_en_len 1
+#define reg_ep6_tx_en_lsb 0
+#define xd_p_reg_ep0_tx_stall (*(volatile byte xdata *) 0xDD12)
+#define p_reg_ep0_tx_stall 0xDD12
+#define reg_ep0_tx_stall_pos 0
+#define reg_ep0_tx_stall_len 1
+#define reg_ep0_tx_stall_lsb 0
+#define xd_p_reg_ep0_rx_stall (*(volatile byte xdata *) 0xDD12)
+#define p_reg_ep0_rx_stall 0xDD12
+#define reg_ep0_rx_stall_pos 1
+#define reg_ep0_rx_stall_len 1
+#define reg_ep0_rx_stall_lsb 0
+#define xd_p_reg_ep1_tx_stall (*(volatile byte xdata *) 0xDD12)
+#define p_reg_ep1_tx_stall 0xDD12
+#define reg_ep1_tx_stall_pos 2
+#define reg_ep1_tx_stall_len 1
+#define reg_ep1_tx_stall_lsb 0
+#define xd_p_reg_ep2_rx_stall (*(volatile byte xdata *) 0xDD12)
+#define p_reg_ep2_rx_stall 0xDD12
+#define reg_ep2_rx_stall_pos 3
+#define reg_ep2_rx_stall_len 1
+#define reg_ep2_rx_stall_lsb 0
+#define xd_p_reg_ep3_tx_stall (*(volatile byte xdata *) 0xDD12)
+#define p_reg_ep3_tx_stall 0xDD12
+#define reg_ep3_tx_stall_pos 4
+#define reg_ep3_tx_stall_len 1
+#define reg_ep3_tx_stall_lsb 0
+#define xd_p_reg_ep4_tx_stall (*(volatile byte xdata *) 0xDD12)
+#define p_reg_ep4_tx_stall 0xDD12
+#define reg_ep4_tx_stall_pos 5
+#define reg_ep4_tx_stall_len 1
+#define reg_ep4_tx_stall_lsb 0
+#define xd_p_reg_ep5_tx_stall (*(volatile byte xdata *) 0xDD12)
+#define p_reg_ep5_tx_stall 0xDD12
+#define reg_ep5_tx_stall_pos 6
+#define reg_ep5_tx_stall_len 1
+#define reg_ep5_tx_stall_lsb 0
+#define xd_p_reg_ep6_tx_stall (*(volatile byte xdata *) 0xDD12)
+#define p_reg_ep6_tx_stall 0xDD12
+#define reg_ep6_tx_stall_pos 7
+#define reg_ep6_tx_stall_len 1
+#define reg_ep6_tx_stall_lsb 0
+#define xd_p_reg_ep0_tx_nak (*(volatile byte xdata *) 0xDD13)
+#define p_reg_ep0_tx_nak 0xDD13
+#define reg_ep0_tx_nak_pos 0
+#define reg_ep0_tx_nak_len 1
+#define reg_ep0_tx_nak_lsb 0
+#define xd_p_reg_ep0_rx_nak (*(volatile byte xdata *) 0xDD13)
+#define p_reg_ep0_rx_nak 0xDD13
+#define reg_ep0_rx_nak_pos 1
+#define reg_ep0_rx_nak_len 1
+#define reg_ep0_rx_nak_lsb 0
+#define xd_p_reg_ep1_tx_nak (*(volatile byte xdata *) 0xDD13)
+#define p_reg_ep1_tx_nak 0xDD13
+#define reg_ep1_tx_nak_pos 2
+#define reg_ep1_tx_nak_len 1
+#define reg_ep1_tx_nak_lsb 0
+#define xd_p_reg_ep2_rx_nak (*(volatile byte xdata *) 0xDD13)
+#define p_reg_ep2_rx_nak 0xDD13
+#define reg_ep2_rx_nak_pos 3
+#define reg_ep2_rx_nak_len 1
+#define reg_ep2_rx_nak_lsb 0
+#define xd_p_reg_ep3_tx_nak (*(volatile byte xdata *) 0xDD13)
+#define p_reg_ep3_tx_nak 0xDD13
+#define reg_ep3_tx_nak_pos 4
+#define reg_ep3_tx_nak_len 1
+#define reg_ep3_tx_nak_lsb 0
+#define xd_p_reg_ep4_tx_nak (*(volatile byte xdata *) 0xDD13)
+#define p_reg_ep4_tx_nak 0xDD13
+#define reg_ep4_tx_nak_pos 5
+#define reg_ep4_tx_nak_len 1
+#define reg_ep4_tx_nak_lsb 0
+#define xd_p_reg_ep5_tx_nak (*(volatile byte xdata *) 0xDD13)
+#define p_reg_ep5_tx_nak 0xDD13
+#define reg_ep5_tx_nak_pos 6
+#define reg_ep5_tx_nak_len 1
+#define reg_ep5_tx_nak_lsb 0
+#define xd_p_reg_ep6_tx_nak (*(volatile byte xdata *) 0xDD13)
+#define p_reg_ep6_tx_nak 0xDD13
+#define reg_ep6_tx_nak_pos 7
+#define reg_ep6_tx_nak_len 1
+#define reg_ep6_tx_nak_lsb 0
+#define xd_p_reg_ep0_tx_nak_int_en (*(volatile byte xdata *) 0xDD14)
+#define p_reg_ep0_tx_nak_int_en 0xDD14
+#define reg_ep0_tx_nak_int_en_pos 0
+#define reg_ep0_tx_nak_int_en_len 1
+#define reg_ep0_tx_nak_int_en_lsb 0
+#define xd_p_reg_ep0_rx_nak_int_en (*(volatile byte xdata *) 0xDD14)
+#define p_reg_ep0_rx_nak_int_en 0xDD14
+#define reg_ep0_rx_nak_int_en_pos 1
+#define reg_ep0_rx_nak_int_en_len 1
+#define reg_ep0_rx_nak_int_en_lsb 0
+#define xd_p_reg_ep1_tx_nak_int_en (*(volatile byte xdata *) 0xDD14)
+#define p_reg_ep1_tx_nak_int_en 0xDD14
+#define reg_ep1_tx_nak_int_en_pos 2
+#define reg_ep1_tx_nak_int_en_len 1
+#define reg_ep1_tx_nak_int_en_lsb 0
+#define xd_p_reg_ep2_rx_nak_int_en (*(volatile byte xdata *) 0xDD14)
+#define p_reg_ep2_rx_nak_int_en 0xDD14
+#define reg_ep2_rx_nak_int_en_pos 3
+#define reg_ep2_rx_nak_int_en_len 1
+#define reg_ep2_rx_nak_int_en_lsb 0
+#define xd_p_reg_ep3_tx_nak_int_en (*(volatile byte xdata *) 0xDD14)
+#define p_reg_ep3_tx_nak_int_en 0xDD14
+#define reg_ep3_tx_nak_int_en_pos 4
+#define reg_ep3_tx_nak_int_en_len 1
+#define reg_ep3_tx_nak_int_en_lsb 0
+#define xd_p_reg_ep4_tx_nak_int_en (*(volatile byte xdata *) 0xDD14)
+#define p_reg_ep4_tx_nak_int_en 0xDD14
+#define reg_ep4_tx_nak_int_en_pos 5
+#define reg_ep4_tx_nak_int_en_len 1
+#define reg_ep4_tx_nak_int_en_lsb 0
+#define xd_p_reg_ep5_tx_nak_int_en (*(volatile byte xdata *) 0xDD14)
+#define p_reg_ep5_tx_nak_int_en 0xDD14
+#define reg_ep5_tx_nak_int_en_pos 6
+#define reg_ep5_tx_nak_int_en_len 1
+#define reg_ep5_tx_nak_int_en_lsb 0
+#define xd_p_reg_ep6_tx_nak_int_en (*(volatile byte xdata *) 0xDD14)
+#define p_reg_ep6_tx_nak_int_en 0xDD14
+#define reg_ep6_tx_nak_int_en_pos 7
+#define reg_ep6_tx_nak_int_en_len 1
+#define reg_ep6_tx_nak_int_en_lsb 0
+#define xd_p_reg_ep0_tx_done_int_en (*(volatile byte xdata *) 0xDD15)
+#define p_reg_ep0_tx_done_int_en 0xDD15
+#define reg_ep0_tx_done_int_en_pos 0
+#define reg_ep0_tx_done_int_en_len 1
+#define reg_ep0_tx_done_int_en_lsb 0
+#define xd_p_reg_ep0_rx_done_int_en (*(volatile byte xdata *) 0xDD15)
+#define p_reg_ep0_rx_done_int_en 0xDD15
+#define reg_ep0_rx_done_int_en_pos 1
+#define reg_ep0_rx_done_int_en_len 1
+#define reg_ep0_rx_done_int_en_lsb 0
+#define xd_p_reg_ep1_tx_done_int_en (*(volatile byte xdata *) 0xDD15)
+#define p_reg_ep1_tx_done_int_en 0xDD15
+#define reg_ep1_tx_done_int_en_pos 2
+#define reg_ep1_tx_done_int_en_len 1
+#define reg_ep1_tx_done_int_en_lsb 0
+#define xd_p_reg_ep2_rx_done_int_en (*(volatile byte xdata *) 0xDD15)
+#define p_reg_ep2_rx_done_int_en 0xDD15
+#define reg_ep2_rx_done_int_en_pos 3
+#define reg_ep2_rx_done_int_en_len 1
+#define reg_ep2_rx_done_int_en_lsb 0
+#define xd_p_reg_ep3_tx_done_int_en (*(volatile byte xdata *) 0xDD15)
+#define p_reg_ep3_tx_done_int_en 0xDD15
+#define reg_ep3_tx_done_int_en_pos 4
+#define reg_ep3_tx_done_int_en_len 1
+#define reg_ep3_tx_done_int_en_lsb 0
+#define xd_p_reg_ep4_tx_done_int_en (*(volatile byte xdata *) 0xDD15)
+#define p_reg_ep4_tx_done_int_en 0xDD15
+#define reg_ep4_tx_done_int_en_pos 5
+#define reg_ep4_tx_done_int_en_len 1
+#define reg_ep4_tx_done_int_en_lsb 0
+#define xd_p_reg_ep5_tx_done_int_en (*(volatile byte xdata *) 0xDD15)
+#define p_reg_ep5_tx_done_int_en 0xDD15
+#define reg_ep5_tx_done_int_en_pos 6
+#define reg_ep5_tx_done_int_en_len 1
+#define reg_ep5_tx_done_int_en_lsb 0
+#define xd_p_reg_ep6_tx_done_int_en (*(volatile byte xdata *) 0xDD15)
+#define p_reg_ep6_tx_done_int_en 0xDD15
+#define reg_ep6_tx_done_int_en_pos 7
+#define reg_ep6_tx_done_int_en_len 1
+#define reg_ep6_tx_done_int_en_lsb 0
+#define xd_p_reg_ep0_tx_fail_int_en (*(volatile byte xdata *) 0xDD16)
+#define p_reg_ep0_tx_fail_int_en 0xDD16
+#define reg_ep0_tx_fail_int_en_pos 0
+#define reg_ep0_tx_fail_int_en_len 1
+#define reg_ep0_tx_fail_int_en_lsb 0
+#define xd_p_reg_ep0_rx_fail_int_en (*(volatile byte xdata *) 0xDD16)
+#define p_reg_ep0_rx_fail_int_en 0xDD16
+#define reg_ep0_rx_fail_int_en_pos 1
+#define reg_ep0_rx_fail_int_en_len 1
+#define reg_ep0_rx_fail_int_en_lsb 0
+#define xd_p_reg_ep1_tx_fail_int_en (*(volatile byte xdata *) 0xDD16)
+#define p_reg_ep1_tx_fail_int_en 0xDD16
+#define reg_ep1_tx_fail_int_en_pos 2
+#define reg_ep1_tx_fail_int_en_len 1
+#define reg_ep1_tx_fail_int_en_lsb 0
+#define xd_p_reg_ep2_rx_fail_int_en (*(volatile byte xdata *) 0xDD16)
+#define p_reg_ep2_rx_fail_int_en 0xDD16
+#define reg_ep2_rx_fail_int_en_pos 3
+#define reg_ep2_rx_fail_int_en_len 1
+#define reg_ep2_rx_fail_int_en_lsb 0
+#define xd_p_reg_ep3_tx_fail_int_en (*(volatile byte xdata *) 0xDD16)
+#define p_reg_ep3_tx_fail_int_en 0xDD16
+#define reg_ep3_tx_fail_int_en_pos 4
+#define reg_ep3_tx_fail_int_en_len 1
+#define reg_ep3_tx_fail_int_en_lsb 0
+#define xd_p_reg_ep4_tx_fail_int_en (*(volatile byte xdata *) 0xDD16)
+#define p_reg_ep4_tx_fail_int_en 0xDD16
+#define reg_ep4_tx_fail_int_en_pos 5
+#define reg_ep4_tx_fail_int_en_len 1
+#define reg_ep4_tx_fail_int_en_lsb 0
+#define xd_p_reg_ep5_tx_fail_int_en (*(volatile byte xdata *) 0xDD16)
+#define p_reg_ep5_tx_fail_int_en 0xDD16
+#define reg_ep5_tx_fail_int_en_pos 6
+#define reg_ep5_tx_fail_int_en_len 1
+#define reg_ep5_tx_fail_int_en_lsb 0
+#define xd_p_reg_ep6_tx_fail_int_en (*(volatile byte xdata *) 0xDD16)
+#define p_reg_ep6_tx_fail_int_en 0xDD16
+#define reg_ep6_tx_fail_int_en_pos 7
+#define reg_ep6_tx_fail_int_en_len 1
+#define reg_ep6_tx_fail_int_en_lsb 0
+#define xd_p_reg_suspend_int_en (*(volatile byte xdata *) 0xDD17)
+#define p_reg_suspend_int_en 0xDD17
+#define reg_suspend_int_en_pos 0
+#define reg_suspend_int_en_len 1
+#define reg_suspend_int_en_lsb 0
+#define xd_p_reg_bus_reset_int_en (*(volatile byte xdata *) 0xDD17)
+#define p_reg_bus_reset_int_en 0xDD17
+#define reg_bus_reset_int_en_pos 1
+#define reg_bus_reset_int_en_len 1
+#define reg_bus_reset_int_en_lsb 0
+#define xd_p_reg_ep0_setup_int_en (*(volatile byte xdata *) 0xDD17)
+#define p_reg_ep0_setup_int_en 0xDD17
+#define reg_ep0_setup_int_en_pos 2
+#define reg_ep0_setup_int_en_len 1
+#define reg_ep0_setup_int_en_lsb 0
+#define xd_p_reg_ep0_tx_nak_int (*(volatile byte xdata *) 0xDD18)
+#define p_reg_ep0_tx_nak_int 0xDD18
+#define reg_ep0_tx_nak_int_pos 0
+#define reg_ep0_tx_nak_int_len 1
+#define reg_ep0_tx_nak_int_lsb 0
+#define xd_p_reg_ep0_rx_nak_int (*(volatile byte xdata *) 0xDD18)
+#define p_reg_ep0_rx_nak_int 0xDD18
+#define reg_ep0_rx_nak_int_pos 1
+#define reg_ep0_rx_nak_int_len 1
+#define reg_ep0_rx_nak_int_lsb 0
+#define xd_p_reg_ep1_tx_nak_int (*(volatile byte xdata *) 0xDD18)
+#define p_reg_ep1_tx_nak_int 0xDD18
+#define reg_ep1_tx_nak_int_pos 2
+#define reg_ep1_tx_nak_int_len 1
+#define reg_ep1_tx_nak_int_lsb 0
+#define xd_p_reg_ep2_rx_nak_int (*(volatile byte xdata *) 0xDD18)
+#define p_reg_ep2_rx_nak_int 0xDD18
+#define reg_ep2_rx_nak_int_pos 3
+#define reg_ep2_rx_nak_int_len 1
+#define reg_ep2_rx_nak_int_lsb 0
+#define xd_p_reg_ep3_tx_nak_int (*(volatile byte xdata *) 0xDD18)
+#define p_reg_ep3_tx_nak_int 0xDD18
+#define reg_ep3_tx_nak_int_pos 4
+#define reg_ep3_tx_nak_int_len 1
+#define reg_ep3_tx_nak_int_lsb 0
+#define xd_p_reg_ep4_tx_nak_int (*(volatile byte xdata *) 0xDD18)
+#define p_reg_ep4_tx_nak_int 0xDD18
+#define reg_ep4_tx_nak_int_pos 5
+#define reg_ep4_tx_nak_int_len 1
+#define reg_ep4_tx_nak_int_lsb 0
+#define xd_p_reg_ep5_tx_nak_int (*(volatile byte xdata *) 0xDD18)
+#define p_reg_ep5_tx_nak_int 0xDD18
+#define reg_ep5_tx_nak_int_pos 6
+#define reg_ep5_tx_nak_int_len 1
+#define reg_ep5_tx_nak_int_lsb 0
+#define xd_p_reg_ep6_tx_nak_int (*(volatile byte xdata *) 0xDD18)
+#define p_reg_ep6_tx_nak_int 0xDD18
+#define reg_ep6_tx_nak_int_pos 7
+#define reg_ep6_tx_nak_int_len 1
+#define reg_ep6_tx_nak_int_lsb 0
+#define xd_p_reg_ep0_tx_done_int (*(volatile byte xdata *) 0xDD19)
+#define p_reg_ep0_tx_done_int 0xDD19
+#define reg_ep0_tx_done_int_pos 0
+#define reg_ep0_tx_done_int_len 1
+#define reg_ep0_tx_done_int_lsb 0
+#define xd_p_reg_ep0_rx_done_int (*(volatile byte xdata *) 0xDD19)
+#define p_reg_ep0_rx_done_int 0xDD19
+#define reg_ep0_rx_done_int_pos 1
+#define reg_ep0_rx_done_int_len 1
+#define reg_ep0_rx_done_int_lsb 0
+#define xd_p_reg_ep1_tx_done_int (*(volatile byte xdata *) 0xDD19)
+#define p_reg_ep1_tx_done_int 0xDD19
+#define reg_ep1_tx_done_int_pos 2
+#define reg_ep1_tx_done_int_len 1
+#define reg_ep1_tx_done_int_lsb 0
+#define xd_p_reg_ep2_rx_done_int (*(volatile byte xdata *) 0xDD19)
+#define p_reg_ep2_rx_done_int 0xDD19
+#define reg_ep2_rx_done_int_pos 3
+#define reg_ep2_rx_done_int_len 1
+#define reg_ep2_rx_done_int_lsb 0
+#define xd_p_reg_ep3_tx_done_int (*(volatile byte xdata *) 0xDD19)
+#define p_reg_ep3_tx_done_int 0xDD19
+#define reg_ep3_tx_done_int_pos 4
+#define reg_ep3_tx_done_int_len 1
+#define reg_ep3_tx_done_int_lsb 0
+#define xd_p_reg_ep4_tx_done_int (*(volatile byte xdata *) 0xDD19)
+#define p_reg_ep4_tx_done_int 0xDD19
+#define reg_ep4_tx_done_int_pos 5
+#define reg_ep4_tx_done_int_len 1
+#define reg_ep4_tx_done_int_lsb 0
+#define xd_p_reg_ep5_tx_done_int (*(volatile byte xdata *) 0xDD19)
+#define p_reg_ep5_tx_done_int 0xDD19
+#define reg_ep5_tx_done_int_pos 6
+#define reg_ep5_tx_done_int_len 1
+#define reg_ep5_tx_done_int_lsb 0
+#define xd_p_reg_ep6_tx_done_int (*(volatile byte xdata *) 0xDD19)
+#define p_reg_ep6_tx_done_int 0xDD19
+#define reg_ep6_tx_done_int_pos 7
+#define reg_ep6_tx_done_int_len 1
+#define reg_ep6_tx_done_int_lsb 0
+#define xd_p_reg_ep0_tx_fail_int (*(volatile byte xdata *) 0xDD1A)
+#define p_reg_ep0_tx_fail_int 0xDD1A
+#define reg_ep0_tx_fail_int_pos 0
+#define reg_ep0_tx_fail_int_len 1
+#define reg_ep0_tx_fail_int_lsb 0
+#define xd_p_reg_ep0_rx_fail_int (*(volatile byte xdata *) 0xDD1A)
+#define p_reg_ep0_rx_fail_int 0xDD1A
+#define reg_ep0_rx_fail_int_pos 1
+#define reg_ep0_rx_fail_int_len 1
+#define reg_ep0_rx_fail_int_lsb 0
+#define xd_p_reg_ep1_tx_fail_int (*(volatile byte xdata *) 0xDD1A)
+#define p_reg_ep1_tx_fail_int 0xDD1A
+#define reg_ep1_tx_fail_int_pos 2
+#define reg_ep1_tx_fail_int_len 1
+#define reg_ep1_tx_fail_int_lsb 0
+#define xd_p_reg_ep2_rx_fail_int (*(volatile byte xdata *) 0xDD1A)
+#define p_reg_ep2_rx_fail_int 0xDD1A
+#define reg_ep2_rx_fail_int_pos 3
+#define reg_ep2_rx_fail_int_len 1
+#define reg_ep2_rx_fail_int_lsb 0
+#define xd_p_reg_ep3_tx_fail_int (*(volatile byte xdata *) 0xDD1A)
+#define p_reg_ep3_tx_fail_int 0xDD1A
+#define reg_ep3_tx_fail_int_pos 4
+#define reg_ep3_tx_fail_int_len 1
+#define reg_ep3_tx_fail_int_lsb 0
+#define xd_p_reg_ep4_tx_fail_int (*(volatile byte xdata *) 0xDD1A)
+#define p_reg_ep4_tx_fail_int 0xDD1A
+#define reg_ep4_tx_fail_int_pos 5
+#define reg_ep4_tx_fail_int_len 1
+#define reg_ep4_tx_fail_int_lsb 0
+#define xd_p_reg_ep5_tx_fail_int (*(volatile byte xdata *) 0xDD1A)
+#define p_reg_ep5_tx_fail_int 0xDD1A
+#define reg_ep5_tx_fail_int_pos 6
+#define reg_ep5_tx_fail_int_len 1
+#define reg_ep5_tx_fail_int_lsb 0
+#define xd_p_reg_ep6_tx_fail_int (*(volatile byte xdata *) 0xDD1A)
+#define p_reg_ep6_tx_fail_int 0xDD1A
+#define reg_ep6_tx_fail_int_pos 7
+#define reg_ep6_tx_fail_int_len 1
+#define reg_ep6_tx_fail_int_lsb 0
+#define xd_p_reg_suspend_int (*(volatile byte xdata *) 0xDD1B)
+#define p_reg_suspend_int 0xDD1B
+#define reg_suspend_int_pos 0
+#define reg_suspend_int_len 1
+#define reg_suspend_int_lsb 0
+#define xd_p_reg_bus_reset_int (*(volatile byte xdata *) 0xDD1B)
+#define p_reg_bus_reset_int 0xDD1B
+#define reg_bus_reset_int_pos 1
+#define reg_bus_reset_int_len 1
+#define reg_bus_reset_int_lsb 0
+#define xd_p_reg_ep0_setup_int (*(volatile byte xdata *) 0xDD1B)
+#define p_reg_ep0_setup_int 0xDD1B
+#define reg_ep0_setup_int_pos 2
+#define reg_ep0_setup_int_len 1
+#define reg_ep0_setup_int_lsb 0
+#define xd_r_usbc_int (*(volatile byte xdata *) 0xDD1B)
+#define r_usbc_int 0xDD1B
+#define usbc_int_pos 3
+#define usbc_int_len 1
+#define usbc_int_lsb 0
+#define xd_r_usb_ir_int (*(volatile byte xdata *) 0xDD1B)
+#define r_usb_ir_int 0xDD1B
+#define usb_ir_int_pos 4
+#define usb_ir_int_len 1
+#define usb_ir_int_lsb 0
+#define xd_p_reg_ep0_tx_rst (*(volatile byte xdata *) 0xDD1D)
+#define p_reg_ep0_tx_rst 0xDD1D
+#define reg_ep0_tx_rst_pos 0
+#define reg_ep0_tx_rst_len 1
+#define reg_ep0_tx_rst_lsb 0
+#define xd_p_reg_ep0_rx_rst (*(volatile byte xdata *) 0xDD1D)
+#define p_reg_ep0_rx_rst 0xDD1D
+#define reg_ep0_rx_rst_pos 1
+#define reg_ep0_rx_rst_len 1
+#define reg_ep0_rx_rst_lsb 0
+#define xd_p_reg_ep1_tx_rst (*(volatile byte xdata *) 0xDD1D)
+#define p_reg_ep1_tx_rst 0xDD1D
+#define reg_ep1_tx_rst_pos 2
+#define reg_ep1_tx_rst_len 1
+#define reg_ep1_tx_rst_lsb 0
+#define xd_p_reg_ep2_rx_rst (*(volatile byte xdata *) 0xDD1D)
+#define p_reg_ep2_rx_rst 0xDD1D
+#define reg_ep2_rx_rst_pos 3
+#define reg_ep2_rx_rst_len 1
+#define reg_ep2_rx_rst_lsb 0
+#define xd_p_reg_ep3_tx_rst (*(volatile byte xdata *) 0xDD1D)
+#define p_reg_ep3_tx_rst 0xDD1D
+#define reg_ep3_tx_rst_pos 4
+#define reg_ep3_tx_rst_len 1
+#define reg_ep3_tx_rst_lsb 0
+#define xd_p_reg_ep4_tx_rst (*(volatile byte xdata *) 0xDD1D)
+#define p_reg_ep4_tx_rst 0xDD1D
+#define reg_ep4_tx_rst_pos 5
+#define reg_ep4_tx_rst_len 1
+#define reg_ep4_tx_rst_lsb 0
+#define xd_p_reg_ep5_tx_rst (*(volatile byte xdata *) 0xDD1D)
+#define p_reg_ep5_tx_rst 0xDD1D
+#define reg_ep5_tx_rst_pos 6
+#define reg_ep5_tx_rst_len 1
+#define reg_ep5_tx_rst_lsb 0
+#define xd_p_reg_ep6_tx_rst (*(volatile byte xdata *) 0xDD1D)
+#define p_reg_ep6_tx_rst 0xDD1D
+#define reg_ep6_tx_rst_pos 7
+#define reg_ep6_tx_rst_len 1
+#define reg_ep6_tx_rst_lsb 0
+#define xd_r_reg_ep0_tx_active (*(volatile byte xdata *) 0xDD1E)
+#define r_reg_ep0_tx_active 0xDD1E
+#define reg_ep0_tx_active_pos 0
+#define reg_ep0_tx_active_len 1
+#define reg_ep0_tx_active_lsb 0
+#define xd_r_reg_ep0_rx_active (*(volatile byte xdata *) 0xDD1E)
+#define r_reg_ep0_rx_active 0xDD1E
+#define reg_ep0_rx_active_pos 1
+#define reg_ep0_rx_active_len 1
+#define reg_ep0_rx_active_lsb 0
+#define xd_r_reg_ep1_tx_active (*(volatile byte xdata *) 0xDD1E)
+#define r_reg_ep1_tx_active 0xDD1E
+#define reg_ep1_tx_active_pos 2
+#define reg_ep1_tx_active_len 1
+#define reg_ep1_tx_active_lsb 0
+#define xd_r_reg_ep2_rx_active (*(volatile byte xdata *) 0xDD1E)
+#define r_reg_ep2_rx_active 0xDD1E
+#define reg_ep2_rx_active_pos 3
+#define reg_ep2_rx_active_len 1
+#define reg_ep2_rx_active_lsb 0
+#define xd_r_reg_ep3_tx_active (*(volatile byte xdata *) 0xDD1E)
+#define r_reg_ep3_tx_active 0xDD1E
+#define reg_ep3_tx_active_pos 4
+#define reg_ep3_tx_active_len 1
+#define reg_ep3_tx_active_lsb 0
+#define xd_r_reg_ep4_tx_active (*(volatile byte xdata *) 0xDD1E)
+#define r_reg_ep4_tx_active 0xDD1E
+#define reg_ep4_tx_active_pos 5
+#define reg_ep4_tx_active_len 1
+#define reg_ep4_tx_active_lsb 0
+#define xd_r_reg_ep5_tx_active (*(volatile byte xdata *) 0xDD1E)
+#define r_reg_ep5_tx_active 0xDD1E
+#define reg_ep5_tx_active_pos 6
+#define reg_ep5_tx_active_len 1
+#define reg_ep5_tx_active_lsb 0
+#define xd_r_reg_ep6_tx_active (*(volatile byte xdata *) 0xDD1E)
+#define r_reg_ep6_tx_active 0xDD1E
+#define reg_ep6_tx_active_pos 7
+#define reg_ep6_tx_active_len 1
+#define reg_ep6_tx_active_lsb 0
+#define xd_p_reg_usb_setup_reset (*(volatile byte xdata *) 0xDD1F)
+#define p_reg_usb_setup_reset 0xDD1F
+#define reg_usb_setup_reset_pos 0
+#define reg_usb_setup_reset_len 1
+#define reg_usb_setup_reset_lsb 0
+#define xd_p_reg_usb_ep4_retry_new (*(volatile byte xdata *) 0xDD1F)
+#define p_reg_usb_ep4_retry_new 0xDD1F
+#define reg_usb_ep4_retry_new_pos 1
+#define reg_usb_ep4_retry_new_len 1
+#define reg_usb_ep4_retry_new_lsb 0
+#define xd_p_reg_usb_ep5_retry_new (*(volatile byte xdata *) 0xDD1F)
+#define p_reg_usb_ep5_retry_new 0xDD1F
+#define reg_usb_ep5_retry_new_pos 2
+#define reg_usb_ep5_retry_new_len 1
+#define reg_usb_ep5_retry_new_lsb 0
+#define xd_p_reg_usb_ep6_retry_new (*(volatile byte xdata *) 0xDD1F)
+#define p_reg_usb_ep6_retry_new 0xDD1F
+#define reg_usb_ep6_retry_new_pos 3
+#define reg_usb_ep6_retry_new_len 1
+#define reg_usb_ep6_retry_new_lsb 0
+#define xd_p_reg_usb_iso_mult_cnt (*(volatile byte xdata *) 0xDD20)
+#define p_reg_usb_iso_mult_cnt 0xDD20
+#define reg_usb_iso_mult_cnt_pos 0
+#define reg_usb_iso_mult_cnt_len 2
+#define reg_usb_iso_mult_cnt_lsb 0
+#define xd_p_reg_p_iso_fix_en (*(volatile byte xdata *) 0xDD21)
+#define p_reg_p_iso_fix_en 0xDD21
+#define reg_p_iso_fix_en_pos 0
+#define reg_p_iso_fix_en_len 1
+#define reg_p_iso_fix_en_lsb 0
+#define xd_p_reg_p_iso_fix_rst (*(volatile byte xdata *) 0xDD22)
+#define p_reg_p_iso_fix_rst 0xDD22
+#define reg_p_iso_fix_rst_pos 0
+#define reg_p_iso_fix_rst_len 1
+#define reg_p_iso_fix_rst_lsb 0
+#define xd_p_reg_p_read_point_7_0 (*(volatile byte xdata *) 0xDD23)
+#define p_reg_p_read_point_7_0 0xDD23
+#define reg_p_read_point_7_0_pos 0
+#define reg_p_read_point_7_0_len 8
+#define reg_p_read_point_7_0_lsb 0
+#define xd_p_reg_p_read_point_11_8 (*(volatile byte xdata *) 0xDD24)
+#define p_reg_p_read_point_11_8 0xDD24
+#define reg_p_read_point_11_8_pos 0
+#define reg_p_read_point_11_8_len 4
+#define reg_p_read_point_11_8_lsb 8
+#define xd_p_reg_p_dbg_ctrl (*(volatile byte xdata *) 0xDD25)
+#define p_reg_p_dbg_ctrl 0xDD25
+#define reg_p_dbg_ctrl_pos 0
+#define reg_p_dbg_ctrl_len 3
+#define reg_p_dbg_ctrl_lsb 0
+#define xd_p_reg_p_data_swap (*(volatile byte xdata *) 0xDD26)
+#define p_reg_p_data_swap 0xDD26
+#define reg_p_data_swap_pos 0
+#define reg_p_data_swap_len 2
+#define reg_p_data_swap_lsb 0
+#define xd_p_reg_ep_rx_addr (*(volatile byte xdata *) 0xDD80)
+#define p_reg_ep_rx_addr 0xDD80
+#define reg_ep_rx_addr_pos 2
+#define reg_ep_rx_addr_len 6
+#define reg_ep_rx_addr_lsb 0
+#define xd_p_reg_ep0_tx_addr (*(volatile byte xdata *) 0xDD81)
+#define p_reg_ep0_tx_addr 0xDD81
+#define reg_ep0_tx_addr_pos 2
+#define reg_ep0_tx_addr_len 6
+#define reg_ep0_tx_addr_lsb 0
+#define xd_p_reg_ep1_tx_addr (*(volatile byte xdata *) 0xDD82)
+#define p_reg_ep1_tx_addr 0xDD82
+#define reg_ep1_tx_addr_pos 2
+#define reg_ep1_tx_addr_len 6
+#define reg_ep1_tx_addr_lsb 0
+#define xd_p_reg_ep3_tx_addr (*(volatile byte xdata *) 0xDD83)
+#define p_reg_ep3_tx_addr 0xDD83
+#define reg_ep3_tx_addr_pos 2
+#define reg_ep3_tx_addr_len 6
+#define reg_ep3_tx_addr_lsb 0
+#define xd_p_reg_ep_rx_len (*(volatile byte xdata *) 0xDD84)
+#define p_reg_ep_rx_len 0xDD84
+#define reg_ep_rx_len_pos 0
+#define reg_ep_rx_len_len 8
+#define reg_ep_rx_len_lsb 0
+#define xd_p_reg_ep0_tx_len (*(volatile byte xdata *) 0xDD85)
+#define p_reg_ep0_tx_len 0xDD85
+#define reg_ep0_tx_len_pos 0
+#define reg_ep0_tx_len_len 8
+#define reg_ep0_tx_len_lsb 0
+#define xd_p_reg_ep1_tx_len (*(volatile byte xdata *) 0xDD86)
+#define p_reg_ep1_tx_len 0xDD86
+#define reg_ep1_tx_len_pos 0
+#define reg_ep1_tx_len_len 8
+#define reg_ep1_tx_len_lsb 0
+#define xd_p_reg_ep3_tx_len (*(volatile byte xdata *) 0xDD87)
+#define p_reg_ep3_tx_len 0xDD87
+#define reg_ep3_tx_len_pos 0
+#define reg_ep3_tx_len_len 8
+#define reg_ep3_tx_len_lsb 0
+#define xd_p_reg_ep4_tx_len_7_0 (*(volatile byte xdata *) 0xDD88)
+#define p_reg_ep4_tx_len_7_0 0xDD88
+#define reg_ep4_tx_len_7_0_pos 0
+#define reg_ep4_tx_len_7_0_len 8
+#define reg_ep4_tx_len_7_0_lsb 0
+#define xd_p_reg_ep4_tx_len_15_8 (*(volatile byte xdata *) 0xDD89)
+#define p_reg_ep4_tx_len_15_8 0xDD89
+#define reg_ep4_tx_len_15_8_pos 0
+#define reg_ep4_tx_len_15_8_len 8
+#define reg_ep4_tx_len_15_8_lsb 8
+#define xd_p_reg_ep5_tx_len_7_0 (*(volatile byte xdata *) 0xDD8A)
+#define p_reg_ep5_tx_len_7_0 0xDD8A
+#define reg_ep5_tx_len_7_0_pos 0
+#define reg_ep5_tx_len_7_0_len 8
+#define reg_ep5_tx_len_7_0_lsb 0
+#define xd_p_reg_ep5_tx_len_15_8 (*(volatile byte xdata *) 0xDD8B)
+#define p_reg_ep5_tx_len_15_8 0xDD8B
+#define reg_ep5_tx_len_15_8_pos 0
+#define reg_ep5_tx_len_15_8_len 8
+#define reg_ep5_tx_len_15_8_lsb 8
+#define xd_p_reg_usb_reset_addr (*(volatile byte xdata *) 0xDD8C)
+#define p_reg_usb_reset_addr 0xDD8C
+#define reg_usb_reset_addr_pos 0
+#define reg_usb_reset_addr_len 7
+#define reg_usb_reset_addr_lsb 0
+#define xd_p_reg_usb_reset (*(volatile byte xdata *) 0xDD8C)
+#define p_reg_usb_reset 0xDD8C
+#define reg_usb_reset_pos 7
+#define reg_usb_reset_len 1
+#define reg_usb_reset_lsb 0
+#define xd_p_reg_usb_sync_in (*(volatile byte xdata *) 0xDD8D)
+#define p_reg_usb_sync_in 0xDD8D
+#define reg_usb_sync_in_pos 0
+#define reg_usb_sync_in_len 1
+#define reg_usb_sync_in_lsb 0
+#define xd_p_reg_usb_sync_txready (*(volatile byte xdata *) 0xDD8D)
+#define p_reg_usb_sync_txready 0xDD8D
+#define reg_usb_sync_txready_pos 1
+#define reg_usb_sync_txready_len 1
+#define reg_usb_sync_txready_lsb 0
+#define xd_p_reg_utmi_phy_suspend (*(volatile byte xdata *) 0xDD8D)
+#define p_reg_utmi_phy_suspend 0xDD8D
+#define reg_utmi_phy_suspend_pos 2
+#define reg_utmi_phy_suspend_len 1
+#define reg_utmi_phy_suspend_lsb 0
+#define xd_p_reg_usb_min_len (*(volatile byte xdata *) 0xDD8D)
+#define p_reg_usb_min_len 0xDD8D
+#define reg_usb_min_len_pos 3
+#define reg_usb_min_len_len 1
+#define reg_usb_min_len_lsb 0
+#define xd_p_reg_usb_phy_clksel (*(volatile byte xdata *) 0xDD8D)
+#define p_reg_usb_phy_clksel 0xDD8D
+#define reg_usb_phy_clksel_pos 4
+#define reg_usb_phy_clksel_len 1
+#define reg_usb_phy_clksel_lsb 0
+#define xd_p_reg_ep6_tx_len_7_0 (*(volatile byte xdata *) 0xDD8E)
+#define p_reg_ep6_tx_len_7_0 0xDD8E
+#define reg_ep6_tx_len_7_0_pos 0
+#define reg_ep6_tx_len_7_0_len 8
+#define reg_ep6_tx_len_7_0_lsb 0
+#define xd_p_reg_ep6_tx_len_15_8 (*(volatile byte xdata *) 0xDD8F)
+#define p_reg_ep6_tx_len_15_8 0xDD8F
+#define reg_ep6_tx_len_15_8_pos 0
+#define reg_ep6_tx_len_15_8_len 8
+#define reg_ep6_tx_len_15_8_lsb 8
+#define xd_p_reg_usb_clk_phase (*(volatile byte xdata *) 0xDD93)
+#define p_reg_usb_clk_phase 0xDD93
+#define reg_usb_clk_phase_pos 0
+#define reg_usb_clk_phase_len 2
+#define reg_usb_clk_phase_lsb 0
+#define xd_p_reg_usb_clk_sel (*(volatile byte xdata *) 0xDD93)
+#define p_reg_usb_clk_sel 0xDD93
+#define reg_usb_clk_sel_pos 4
+#define reg_usb_clk_sel_len 4
+#define reg_usb_clk_sel_lsb 0
+#define xd_p_reg_usb_fifo_ptr (*(volatile byte xdata *) 0xDD94)
+#define p_reg_usb_fifo_ptr 0xDD94
+#define reg_usb_fifo_ptr_pos 0
+#define reg_usb_fifo_ptr_len 3
+#define reg_usb_fifo_ptr_lsb 0
+#define xd_p_reg_usb_fifo_byte (*(volatile byte xdata *) 0xDD94)
+#define p_reg_usb_fifo_byte 0xDD94
+#define reg_usb_fifo_byte_pos 3
+#define reg_usb_fifo_byte_len 2
+#define reg_usb_fifo_byte_lsb 0
+#define xd_p_reg_usb_fifo_sys (*(volatile byte xdata *) 0xDD94)
+#define p_reg_usb_fifo_sys 0xDD94
+#define reg_usb_fifo_sys_pos 5
+#define reg_usb_fifo_sys_len 1
+#define reg_usb_fifo_sys_lsb 0
+#define xd_p_usbdma_utmi_d_ctl_7_0 (*(volatile byte xdata *) 0xDD9E)
+#define p_usbdma_utmi_d_ctl_7_0 0xDD9E
+#define usbdma_utmi_d_ctl_7_0_pos 0
+#define usbdma_utmi_d_ctl_7_0_len 8
+#define usbdma_utmi_d_ctl_7_0_lsb 0
+#define xd_p_usbdma_utmi_d_ctl_13_8 (*(volatile byte xdata *) 0xDD9F)
+#define p_usbdma_utmi_d_ctl_13_8 0xDD9F
+#define usbdma_utmi_d_ctl_13_8_pos 0
+#define usbdma_utmi_d_ctl_13_8_len 6
+#define usbdma_utmi_d_ctl_13_8_lsb 8
+#define xd_p_usbdma_utmi_a_ctl_7_0 (*(volatile byte xdata *) 0xDDA0)
+#define p_usbdma_utmi_a_ctl_7_0 0xDDA0
+#define usbdma_utmi_a_ctl_7_0_pos 0
+#define usbdma_utmi_a_ctl_7_0_len 8
+#define usbdma_utmi_a_ctl_7_0_lsb 0
+#define xd_p_usbdma_utmi_a_ctl_15_8 (*(volatile byte xdata *) 0xDDA1)
+#define p_usbdma_utmi_a_ctl_15_8 0xDDA1
+#define usbdma_utmi_a_ctl_15_8_pos 0
+#define usbdma_utmi_a_ctl_15_8_len 8
+#define usbdma_utmi_a_ctl_15_8_lsb 8
+#define xd_p_usbdma_utmi_a_ctl_23_16 (*(volatile byte xdata *) 0xDDA2)
+#define p_usbdma_utmi_a_ctl_23_16 0xDDA2
+#define usbdma_utmi_a_ctl_23_16_pos 0
+#define usbdma_utmi_a_ctl_23_16_len 8
+#define usbdma_utmi_a_ctl_23_16_lsb 16
+#define xd_p_usbdma_utmi_a_ctl_31_24 (*(volatile byte xdata *) 0xDDA3)
+#define p_usbdma_utmi_a_ctl_31_24 0xDDA3
+#define usbdma_utmi_a_ctl_31_24_pos 0
+#define usbdma_utmi_a_ctl_31_24_len 8
+#define usbdma_utmi_a_ctl_31_24_lsb 24
+#define xd_p_usbdma_utmi_a_ctl_39_32 (*(volatile byte xdata *) 0xDDA4)
+#define p_usbdma_utmi_a_ctl_39_32 0xDDA4
+#define usbdma_utmi_a_ctl_39_32_pos 0
+#define usbdma_utmi_a_ctl_39_32_len 8
+#define usbdma_utmi_a_ctl_39_32_lsb 32
+#define xd_p_usbdma_utmi_a_ctl_47_40 (*(volatile byte xdata *) 0xDDA5)
+#define p_usbdma_utmi_a_ctl_47_40 0xDDA5
+#define usbdma_utmi_a_ctl_47_40_pos 0
+#define usbdma_utmi_a_ctl_47_40_len 8
+#define usbdma_utmi_a_ctl_47_40_lsb 40
+#define xd_p_usbdma_utmi_pwrmode (*(volatile byte xdata *) 0xDDA6)
+#define p_usbdma_utmi_pwrmode 0xDDA6
+#define usbdma_utmi_pwrmode_pos 3
+#define usbdma_utmi_pwrmode_len 1
+#define usbdma_utmi_pwrmode_lsb 0
+#define xd_p_usbdma_utmi_test_out (*(volatile byte xdata *) 0xDDA6)
+#define p_usbdma_utmi_test_out 0xDDA6
+#define usbdma_utmi_test_out_pos 4
+#define usbdma_utmi_test_out_len 1
+#define usbdma_utmi_test_out_lsb 0
+#define xd_p_usbdma_utmi_vbus_int_en (*(volatile byte xdata *) 0xDDA7)
+#define p_usbdma_utmi_vbus_int_en 0xDDA7
+#define usbdma_utmi_vbus_int_en_pos 0
+#define usbdma_utmi_vbus_int_en_len 1
+#define usbdma_utmi_vbus_int_en_lsb 0
+#define xd_p_usbdma_utmi_vbus_int_pol (*(volatile byte xdata *) 0xDDA7)
+#define p_usbdma_utmi_vbus_int_pol 0xDDA7
+#define usbdma_utmi_vbus_int_pol_pos 1
+#define usbdma_utmi_vbus_int_pol_len 1
+#define usbdma_utmi_vbus_int_pol_lsb 0
+#define xd_r_usbdma_utmi_vbus_int (*(volatile byte xdata *) 0xDDA8)
+#define r_usbdma_utmi_vbus_int 0xDDA8
+#define usbdma_utmi_vbus_int_pos 0
+#define usbdma_utmi_vbus_int_len 1
+#define usbdma_utmi_vbus_int_lsb 0
+#define xd_r_usbdma_utmi_vbus_status (*(volatile byte xdata *) 0xDDA8)
+#define r_usbdma_utmi_vbus_status 0xDDA8
+#define usbdma_utmi_vbus_status_pos 1
+#define usbdma_utmi_vbus_status_len 1
+#define usbdma_utmi_vbus_status_lsb 0
+#define xd_r_usbdma_utmi_clkrdy (*(volatile byte xdata *) 0xDDA8)
+#define r_usbdma_utmi_clkrdy 0xDDA8
+#define usbdma_utmi_clkrdy_pos 2
+#define usbdma_utmi_clkrdy_len 1
+#define usbdma_utmi_clkrdy_lsb 0
+#define xd_p_reg_p_usb_iso_ccir_rst (*(volatile byte xdata *) 0xDDA9)
+#define p_reg_p_usb_iso_ccir_rst 0xDDA9
+#define reg_p_usb_iso_ccir_rst_pos 0
+#define reg_p_usb_iso_ccir_rst_len 1
+#define reg_p_usb_iso_ccir_rst_lsb 0
+#define xd_p_reg_p_usb_iso_ccir (*(volatile byte xdata *) 0xDDA9)
+#define p_reg_p_usb_iso_ccir 0xDDA9
+#define reg_p_usb_iso_ccir_pos 1
+#define reg_p_usb_iso_ccir_len 1
+#define reg_p_usb_iso_ccir_lsb 0
+#define xd_p_reg_p_ccir_fix_en (*(volatile byte xdata *) 0xDDAA)
+#define p_reg_p_ccir_fix_en 0xDDAA
+#define reg_p_ccir_fix_en_pos 0
+#define reg_p_ccir_fix_en_len 1
+#define reg_p_ccir_fix_en_lsb 0
+#define xd_p_ir_sys_clk (*(volatile byte xdata *) 0xDF80)
+#define p_ir_sys_clk 0xDF80
+#define ir_sys_clk_pos 0
+#define ir_sys_clk_len 8
+#define ir_sys_clk_lsb 0
+#define xd_p_ir_sample_clk (*(volatile byte xdata *) 0xDF81)
+#define p_ir_sample_clk 0xDF81
+#define ir_sample_clk_pos 0
+#define ir_sample_clk_len 2
+#define ir_sample_clk_lsb 0
+#define xd_p_ir_idle_polarity (*(volatile byte xdata *) 0xDF81)
+#define p_ir_idle_polarity 0xDF81
+#define ir_idle_polarity_pos 2
+#define ir_idle_polarity_len 1
+#define ir_idle_polarity_lsb 0
+#define xd_p_ir_fifo_ovfl (*(volatile byte xdata *) 0xDF82)
+#define p_ir_fifo_ovfl 0xDF82
+#define ir_fifo_ovfl_pos 0
+#define ir_fifo_ovfl_len 1
+#define ir_fifo_ovfl_lsb 0
+#define xd_r_ir_fifo_empty (*(volatile byte xdata *) 0xDF82)
+#define r_ir_fifo_empty 0xDF82
+#define ir_fifo_empty_pos 1
+#define ir_fifo_empty_len 1
+#define ir_fifo_empty_lsb 0
+#define xd_r_ir_fifo_cnt (*(volatile byte xdata *) 0xDF82)
+#define r_ir_fifo_cnt 0xDF82
+#define ir_fifo_cnt_pos 2
+#define ir_fifo_cnt_len 3
+#define ir_fifo_cnt_lsb 0
+#define xd_p_ir_fifo_rst (*(volatile byte xdata *) 0xDF82)
+#define p_ir_fifo_rst 0xDF82
+#define ir_fifo_rst_pos 5
+#define ir_fifo_rst_len 1
+#define ir_fifo_rst_lsb 0
+#define xd_p_reg_ir_out_th0_7_0 (*(volatile byte xdata *) 0xDF84)
+#define p_reg_ir_out_th0_7_0 0xDF84
+#define reg_ir_out_th0_7_0_pos 0
+#define reg_ir_out_th0_7_0_len 8
+#define reg_ir_out_th0_7_0_lsb 0
+#define xd_p_reg_ir_out_th0_14_8 (*(volatile byte xdata *) 0xDF85)
+#define p_reg_ir_out_th0_14_8 0xDF85
+#define reg_ir_out_th0_14_8_pos 0
+#define reg_ir_out_th0_14_8_len 7
+#define reg_ir_out_th0_14_8_lsb 8
+#define xd_p_reg_ir_out_th1_7_0 (*(volatile byte xdata *) 0xDF86)
+#define p_reg_ir_out_th1_7_0 0xDF86
+#define reg_ir_out_th1_7_0_pos 0
+#define reg_ir_out_th1_7_0_len 8
+#define reg_ir_out_th1_7_0_lsb 0
+#define xd_p_reg_ir_out_th1_14_8 (*(volatile byte xdata *) 0xDF87)
+#define p_reg_ir_out_th1_14_8 0xDF87
+#define reg_ir_out_th1_14_8_pos 0
+#define reg_ir_out_th1_14_8_len 7
+#define reg_ir_out_th1_14_8_lsb 8
+#define xd_p_reg_ir_out_th2_7_0 (*(volatile byte xdata *) 0xDF88)
+#define p_reg_ir_out_th2_7_0 0xDF88
+#define reg_ir_out_th2_7_0_pos 0
+#define reg_ir_out_th2_7_0_len 8
+#define reg_ir_out_th2_7_0_lsb 0
+#define xd_p_reg_ir_out_th2_14_8 (*(volatile byte xdata *) 0xDF89)
+#define p_reg_ir_out_th2_14_8 0xDF89
+#define reg_ir_out_th2_14_8_pos 0
+#define reg_ir_out_th2_14_8_len 7
+#define reg_ir_out_th2_14_8_lsb 8
+#define xd_p_reg_ir_out_th3_7_0 (*(volatile byte xdata *) 0xDF8A)
+#define p_reg_ir_out_th3_7_0 0xDF8A
+#define reg_ir_out_th3_7_0_pos 0
+#define reg_ir_out_th3_7_0_len 8
+#define reg_ir_out_th3_7_0_lsb 0
+#define xd_p_reg_ir_out_th3_14_8 (*(volatile byte xdata *) 0xDF8B)
+#define p_reg_ir_out_th3_14_8 0xDF8B
+#define reg_ir_out_th3_14_8_pos 0
+#define reg_ir_out_th3_14_8_len 7
+#define reg_ir_out_th3_14_8_lsb 8
+#define xd_p_reg_ir_out_th4_7_0 (*(volatile byte xdata *) 0xDF8C)
+#define p_reg_ir_out_th4_7_0 0xDF8C
+#define reg_ir_out_th4_7_0_pos 0
+#define reg_ir_out_th4_7_0_len 8
+#define reg_ir_out_th4_7_0_lsb 0
+#define xd_p_reg_ir_out_th4_14_8 (*(volatile byte xdata *) 0xDF8D)
+#define p_reg_ir_out_th4_14_8 0xDF8D
+#define reg_ir_out_th4_14_8_pos 0
+#define reg_ir_out_th4_14_8_len 7
+#define reg_ir_out_th4_14_8_lsb 8
+#define xd_p_reg_ir_out_th5_7_0 (*(volatile byte xdata *) 0xDF8E)
+#define p_reg_ir_out_th5_7_0 0xDF8E
+#define reg_ir_out_th5_7_0_pos 0
+#define reg_ir_out_th5_7_0_len 8
+#define reg_ir_out_th5_7_0_lsb 0
+#define xd_p_reg_ir_out_th5_14_8 (*(volatile byte xdata *) 0xDF8F)
+#define p_reg_ir_out_th5_14_8 0xDF8F
+#define reg_ir_out_th5_14_8_pos 0
+#define reg_ir_out_th5_14_8_len 7
+#define reg_ir_out_th5_14_8_lsb 8
+#define xd_p_reg_ir_out_th6_7_0 (*(volatile byte xdata *) 0xDF90)
+#define p_reg_ir_out_th6_7_0 0xDF90
+#define reg_ir_out_th6_7_0_pos 0
+#define reg_ir_out_th6_7_0_len 8
+#define reg_ir_out_th6_7_0_lsb 0
+#define xd_p_reg_ir_out_th6_14_8 (*(volatile byte xdata *) 0xDF91)
+#define p_reg_ir_out_th6_14_8 0xDF91
+#define reg_ir_out_th6_14_8_pos 0
+#define reg_ir_out_th6_14_8_len 7
+#define reg_ir_out_th6_14_8_lsb 8
+#define xd_p_reg_ir_out_th7_7_0 (*(volatile byte xdata *) 0xDF92)
+#define p_reg_ir_out_th7_7_0 0xDF92
+#define reg_ir_out_th7_7_0_pos 0
+#define reg_ir_out_th7_7_0_len 8
+#define reg_ir_out_th7_7_0_lsb 0
+#define xd_p_reg_ir_out_th7_14_8 (*(volatile byte xdata *) 0xDF93)
+#define p_reg_ir_out_th7_14_8 0xDF93
+#define reg_ir_out_th7_14_8_pos 0
+#define reg_ir_out_th7_14_8_len 7
+#define reg_ir_out_th7_14_8_lsb 8
+#define xd_p_reg_ir_out_th8_7_0 (*(volatile byte xdata *) 0xDF94)
+#define p_reg_ir_out_th8_7_0 0xDF94
+#define reg_ir_out_th8_7_0_pos 0
+#define reg_ir_out_th8_7_0_len 8
+#define reg_ir_out_th8_7_0_lsb 0
+#define xd_p_reg_ir_out_th8_14_8 (*(volatile byte xdata *) 0xDF95)
+#define p_reg_ir_out_th8_14_8 0xDF95
+#define reg_ir_out_th8_14_8_pos 0
+#define reg_ir_out_th8_14_8_len 7
+#define reg_ir_out_th8_14_8_lsb 8
+#define xd_p_reg_ir_out_th9_7_0 (*(volatile byte xdata *) 0xDF96)
+#define p_reg_ir_out_th9_7_0 0xDF96
+#define reg_ir_out_th9_7_0_pos 0
+#define reg_ir_out_th9_7_0_len 8
+#define reg_ir_out_th9_7_0_lsb 0
+#define xd_p_reg_ir_out_th9_14_8 (*(volatile byte xdata *) 0xDF97)
+#define p_reg_ir_out_th9_14_8 0xDF97
+#define reg_ir_out_th9_14_8_pos 0
+#define reg_ir_out_th9_14_8_len 7
+#define reg_ir_out_th9_14_8_lsb 8
+#define xd_p_reg_ir_out_th10_7_0 (*(volatile byte xdata *) 0xDF98)
+#define p_reg_ir_out_th10_7_0 0xDF98
+#define reg_ir_out_th10_7_0_pos 0
+#define reg_ir_out_th10_7_0_len 8
+#define reg_ir_out_th10_7_0_lsb 0
+#define xd_p_reg_ir_out_th10_14_8 (*(volatile byte xdata *) 0xDF99)
+#define p_reg_ir_out_th10_14_8 0xDF99
+#define reg_ir_out_th10_14_8_pos 0
+#define reg_ir_out_th10_14_8_len 7
+#define reg_ir_out_th10_14_8_lsb 8
+#define xd_p_reg_ir_out_th11_7_0 (*(volatile byte xdata *) 0xDF9A)
+#define p_reg_ir_out_th11_7_0 0xDF9A
+#define reg_ir_out_th11_7_0_pos 0
+#define reg_ir_out_th11_7_0_len 8
+#define reg_ir_out_th11_7_0_lsb 0
+#define xd_p_reg_ir_out_th11_14_8 (*(volatile byte xdata *) 0xDF9B)
+#define p_reg_ir_out_th11_14_8 0xDF9B
+#define reg_ir_out_th11_14_8_pos 0
+#define reg_ir_out_th11_14_8_len 7
+#define reg_ir_out_th11_14_8_lsb 8
+#define xd_p_reg_ir_out_th12_7_0 (*(volatile byte xdata *) 0xDF9C)
+#define p_reg_ir_out_th12_7_0 0xDF9C
+#define reg_ir_out_th12_7_0_pos 0
+#define reg_ir_out_th12_7_0_len 8
+#define reg_ir_out_th12_7_0_lsb 0
+#define xd_p_reg_ir_out_th12_14_8 (*(volatile byte xdata *) 0xDF9D)
+#define p_reg_ir_out_th12_14_8 0xDF9D
+#define reg_ir_out_th12_14_8_pos 0
+#define reg_ir_out_th12_14_8_len 7
+#define reg_ir_out_th12_14_8_lsb 8
+#define xd_p_reg_ir_out_th13_7_0 (*(volatile byte xdata *) 0xDF9E)
+#define p_reg_ir_out_th13_7_0 0xDF9E
+#define reg_ir_out_th13_7_0_pos 0
+#define reg_ir_out_th13_7_0_len 8
+#define reg_ir_out_th13_7_0_lsb 0
+#define xd_p_reg_ir_out_th13_14_8 (*(volatile byte xdata *) 0xDF9F)
+#define p_reg_ir_out_th13_14_8 0xDF9F
+#define reg_ir_out_th13_14_8_pos 0
+#define reg_ir_out_th13_14_8_len 7
+#define reg_ir_out_th13_14_8_lsb 8
+#define xd_p_reg_ir_out_th14_7_0 (*(volatile byte xdata *) 0xDFA0)
+#define p_reg_ir_out_th14_7_0 0xDFA0
+#define reg_ir_out_th14_7_0_pos 0
+#define reg_ir_out_th14_7_0_len 8
+#define reg_ir_out_th14_7_0_lsb 0
+#define xd_p_reg_ir_out_th14_14_8 (*(volatile byte xdata *) 0xDFA1)
+#define p_reg_ir_out_th14_14_8 0xDFA1
+#define reg_ir_out_th14_14_8_pos 0
+#define reg_ir_out_th14_14_8_len 7
+#define reg_ir_out_th14_14_8_lsb 8
+#define xd_p_reg_tuner_data_7_0 (*(volatile byte xdata *) 0xF000)
+#define p_reg_tuner_data_7_0 0xF000
+#define reg_tuner_data_7_0_pos 0
+#define reg_tuner_data_7_0_len 8
+#define reg_tuner_data_7_0_lsb 0
+#define xd_p_reg_tuner_data_15_8 (*(volatile byte xdata *) 0xF001)
+#define p_reg_tuner_data_15_8 0xF001
+#define reg_tuner_data_15_8_pos 0
+#define reg_tuner_data_15_8_len 8
+#define reg_tuner_data_15_8_lsb 8
+#define xd_p_reg_tuner_data_23_16 (*(volatile byte xdata *) 0xF002)
+#define p_reg_tuner_data_23_16 0xF002
+#define reg_tuner_data_23_16_pos 0
+#define reg_tuner_data_23_16_len 8
+#define reg_tuner_data_23_16_lsb 16
+#define xd_p_reg_tuner_data_31_24 (*(volatile byte xdata *) 0xF003)
+#define p_reg_tuner_data_31_24 0xF003
+#define reg_tuner_data_31_24_pos 0
+#define reg_tuner_data_31_24_len 8
+#define reg_tuner_data_31_24_lsb 24
+#define xd_p_reg_tuner_data_39_32 (*(volatile byte xdata *) 0xF004)
+#define p_reg_tuner_data_39_32 0xF004
+#define reg_tuner_data_39_32_pos 0
+#define reg_tuner_data_39_32_len 8
+#define reg_tuner_data_39_32_lsb 32
+#define xd_p_reg_tuner_data_47_40 (*(volatile byte xdata *) 0xF005)
+#define p_reg_tuner_data_47_40 0xF005
+#define reg_tuner_data_47_40_pos 0
+#define reg_tuner_data_47_40_len 8
+#define reg_tuner_data_47_40_lsb 40
+#define xd_p_reg_tuner_data_55_48 (*(volatile byte xdata *) 0xF006)
+#define p_reg_tuner_data_55_48 0xF006
+#define reg_tuner_data_55_48_pos 0
+#define reg_tuner_data_55_48_len 8
+#define reg_tuner_data_55_48_lsb 48
+#define xd_p_reg_tuner_data_63_56 (*(volatile byte xdata *) 0xF007)
+#define p_reg_tuner_data_63_56 0xF007
+#define reg_tuner_data_63_56_pos 0
+#define reg_tuner_data_63_56_len 8
+#define reg_tuner_data_63_56_lsb 56
+#define xd_p_reg_tuner_data_71_64 (*(volatile byte xdata *) 0xF008)
+#define p_reg_tuner_data_71_64 0xF008
+#define reg_tuner_data_71_64_pos 0
+#define reg_tuner_data_71_64_len 8
+#define reg_tuner_data_71_64_lsb 64
+#define xd_p_reg_tuner_data_79_72 (*(volatile byte xdata *) 0xF009)
+#define p_reg_tuner_data_79_72 0xF009
+#define reg_tuner_data_79_72_pos 0
+#define reg_tuner_data_79_72_len 8
+#define reg_tuner_data_79_72_lsb 72
+#define xd_p_reg_tuner_data_87_80 (*(volatile byte xdata *) 0xF00A)
+#define p_reg_tuner_data_87_80 0xF00A
+#define reg_tuner_data_87_80_pos 0
+#define reg_tuner_data_87_80_len 8
+#define reg_tuner_data_87_80_lsb 80
+#define xd_p_reg_tuner_data_95_88 (*(volatile byte xdata *) 0xF00B)
+#define p_reg_tuner_data_95_88 0xF00B
+#define reg_tuner_data_95_88_pos 0
+#define reg_tuner_data_95_88_len 8
+#define reg_tuner_data_95_88_lsb 88
+#define xd_p_reg_tuner_data_103_96 (*(volatile byte xdata *) 0xF00C)
+#define p_reg_tuner_data_103_96 0xF00C
+#define reg_tuner_data_103_96_pos 0
+#define reg_tuner_data_103_96_len 8
+#define reg_tuner_data_103_96_lsb 96
+#define xd_p_reg_tuner_data_111_104 (*(volatile byte xdata *) 0xF00D)
+#define p_reg_tuner_data_111_104 0xF00D
+#define reg_tuner_data_111_104_pos 0
+#define reg_tuner_data_111_104_len 8
+#define reg_tuner_data_111_104_lsb 104
+#define xd_p_reg_tuner_data_119_112 (*(volatile byte xdata *) 0xF00E)
+#define p_reg_tuner_data_119_112 0xF00E
+#define reg_tuner_data_119_112_pos 0
+#define reg_tuner_data_119_112_len 8
+#define reg_tuner_data_119_112_lsb 112
+#define xd_p_reg_tuner_data_127_120 (*(volatile byte xdata *) 0xF00F)
+#define p_reg_tuner_data_127_120 0xF00F
+#define reg_tuner_data_127_120_pos 0
+#define reg_tuner_data_127_120_len 8
+#define reg_tuner_data_127_120_lsb 120
+#define xd_p_reg_tuner_data_135_128 (*(volatile byte xdata *) 0xF010)
+#define p_reg_tuner_data_135_128 0xF010
+#define reg_tuner_data_135_128_pos 0
+#define reg_tuner_data_135_128_len 8
+#define reg_tuner_data_135_128_lsb 128
+#define xd_p_reg_tuner_data_143_136 (*(volatile byte xdata *) 0xF011)
+#define p_reg_tuner_data_143_136 0xF011
+#define reg_tuner_data_143_136_pos 0
+#define reg_tuner_data_143_136_len 8
+#define reg_tuner_data_143_136_lsb 136
+#define xd_p_reg_tuner_data_151_144 (*(volatile byte xdata *) 0xF012)
+#define p_reg_tuner_data_151_144 0xF012
+#define reg_tuner_data_151_144_pos 0
+#define reg_tuner_data_151_144_len 8
+#define reg_tuner_data_151_144_lsb 144
+#define xd_p_reg_tuner_data_159_152 (*(volatile byte xdata *) 0xF013)
+#define p_reg_tuner_data_159_152 0xF013
+#define reg_tuner_data_159_152_pos 0
+#define reg_tuner_data_159_152_len 8
+#define reg_tuner_data_159_152_lsb 152
+#define xd_p_reg_tuner_data_167_160 (*(volatile byte xdata *) 0xF014)
+#define p_reg_tuner_data_167_160 0xF014
+#define reg_tuner_data_167_160_pos 0
+#define reg_tuner_data_167_160_len 8
+#define reg_tuner_data_167_160_lsb 160
+#define xd_p_reg_tuner_data_175_168 (*(volatile byte xdata *) 0xF015)
+#define p_reg_tuner_data_175_168 0xF015
+#define reg_tuner_data_175_168_pos 0
+#define reg_tuner_data_175_168_len 8
+#define reg_tuner_data_175_168_lsb 168
+#define xd_p_reg_tuner_data_183_176 (*(volatile byte xdata *) 0xF016)
+#define p_reg_tuner_data_183_176 0xF016
+#define reg_tuner_data_183_176_pos 0
+#define reg_tuner_data_183_176_len 8
+#define reg_tuner_data_183_176_lsb 176
+#define xd_p_reg_tuner_data_191_184 (*(volatile byte xdata *) 0xF017)
+#define p_reg_tuner_data_191_184 0xF017
+#define reg_tuner_data_191_184_pos 0
+#define reg_tuner_data_191_184_len 8
+#define reg_tuner_data_191_184_lsb 184
+#define xd_p_reg_tuner_data_199_192 (*(volatile byte xdata *) 0xF018)
+#define p_reg_tuner_data_199_192 0xF018
+#define reg_tuner_data_199_192_pos 0
+#define reg_tuner_data_199_192_len 8
+#define reg_tuner_data_199_192_lsb 192
+#define xd_p_reg_tuner_data_207_200 (*(volatile byte xdata *) 0xF019)
+#define p_reg_tuner_data_207_200 0xF019
+#define reg_tuner_data_207_200_pos 0
+#define reg_tuner_data_207_200_len 8
+#define reg_tuner_data_207_200_lsb 200
+#define xd_p_reg_tuner_data_215_208 (*(volatile byte xdata *) 0xF01A)
+#define p_reg_tuner_data_215_208 0xF01A
+#define reg_tuner_data_215_208_pos 0
+#define reg_tuner_data_215_208_len 8
+#define reg_tuner_data_215_208_lsb 208
+#define xd_p_reg_tuner_data_223_216 (*(volatile byte xdata *) 0xF01B)
+#define p_reg_tuner_data_223_216 0xF01B
+#define reg_tuner_data_223_216_pos 0
+#define reg_tuner_data_223_216_len 8
+#define reg_tuner_data_223_216_lsb 216
+#define xd_p_reg_tuner_data_231_224 (*(volatile byte xdata *) 0xF01C)
+#define p_reg_tuner_data_231_224 0xF01C
+#define reg_tuner_data_231_224_pos 0
+#define reg_tuner_data_231_224_len 8
+#define reg_tuner_data_231_224_lsb 224
+#define xd_p_reg_tuner_data_239_232 (*(volatile byte xdata *) 0xF01D)
+#define p_reg_tuner_data_239_232 0xF01D
+#define reg_tuner_data_239_232_pos 0
+#define reg_tuner_data_239_232_len 8
+#define reg_tuner_data_239_232_lsb 232
+#define xd_p_reg_tuner_data_247_240 (*(volatile byte xdata *) 0xF01E)
+#define p_reg_tuner_data_247_240 0xF01E
+#define reg_tuner_data_247_240_pos 0
+#define reg_tuner_data_247_240_len 8
+#define reg_tuner_data_247_240_lsb 240
+#define xd_p_reg_tuner_data_255_248 (*(volatile byte xdata *) 0xF01F)
+#define p_reg_tuner_data_255_248 0xF01F
+#define reg_tuner_data_255_248_pos 0
+#define reg_tuner_data_255_248_len 8
+#define reg_tuner_data_255_248_lsb 248
+#define xd_p_reg_tuner_data_263_256 (*(volatile byte xdata *) 0xF020)
+#define p_reg_tuner_data_263_256 0xF020
+#define reg_tuner_data_263_256_pos 0
+#define reg_tuner_data_263_256_len 8
+#define reg_tuner_data_263_256_lsb 256
+#define xd_p_reg_tuner_data_271_264 (*(volatile byte xdata *) 0xF021)
+#define p_reg_tuner_data_271_264 0xF021
+#define reg_tuner_data_271_264_pos 0
+#define reg_tuner_data_271_264_len 8
+#define reg_tuner_data_271_264_lsb 264
+#define xd_p_reg_tuner_data_279_272 (*(volatile byte xdata *) 0xF022)
+#define p_reg_tuner_data_279_272 0xF022
+#define reg_tuner_data_279_272_pos 0
+#define reg_tuner_data_279_272_len 8
+#define reg_tuner_data_279_272_lsb 272
+#define xd_p_reg_tuner_data_287_280 (*(volatile byte xdata *) 0xF023)
+#define p_reg_tuner_data_287_280 0xF023
+#define reg_tuner_data_287_280_pos 0
+#define reg_tuner_data_287_280_len 8
+#define reg_tuner_data_287_280_lsb 280
+#define xd_p_reg_tuner_data_295_288 (*(volatile byte xdata *) 0xF024)
+#define p_reg_tuner_data_295_288 0xF024
+#define reg_tuner_data_295_288_pos 0
+#define reg_tuner_data_295_288_len 8
+#define reg_tuner_data_295_288_lsb 288
+#define xd_p_reg_tuner_data_303_296 (*(volatile byte xdata *) 0xF025)
+#define p_reg_tuner_data_303_296 0xF025
+#define reg_tuner_data_303_296_pos 0
+#define reg_tuner_data_303_296_len 8
+#define reg_tuner_data_303_296_lsb 296
+#define xd_p_reg_tuner_data_311_304 (*(volatile byte xdata *) 0xF026)
+#define p_reg_tuner_data_311_304 0xF026
+#define reg_tuner_data_311_304_pos 0
+#define reg_tuner_data_311_304_len 8
+#define reg_tuner_data_311_304_lsb 304
+#define xd_p_reg_tuner_data_319_312 (*(volatile byte xdata *) 0xF027)
+#define p_reg_tuner_data_319_312 0xF027
+#define reg_tuner_data_319_312_pos 0
+#define reg_tuner_data_319_312_len 8
+#define reg_tuner_data_319_312_lsb 312
+#define xd_p_reg_tuner_data_327_320 (*(volatile byte xdata *) 0xF028)
+#define p_reg_tuner_data_327_320 0xF028
+#define reg_tuner_data_327_320_pos 0
+#define reg_tuner_data_327_320_len 8
+#define reg_tuner_data_327_320_lsb 320
+#define xd_p_reg_tuner_data_335_328 (*(volatile byte xdata *) 0xF029)
+#define p_reg_tuner_data_335_328 0xF029
+#define reg_tuner_data_335_328_pos 0
+#define reg_tuner_data_335_328_len 8
+#define reg_tuner_data_335_328_lsb 328
+#define xd_p_reg_tuner_data_343_336 (*(volatile byte xdata *) 0xF02A)
+#define p_reg_tuner_data_343_336 0xF02A
+#define reg_tuner_data_343_336_pos 0
+#define reg_tuner_data_343_336_len 8
+#define reg_tuner_data_343_336_lsb 336
+#define xd_p_reg_tuner_data_351_344 (*(volatile byte xdata *) 0xF02B)
+#define p_reg_tuner_data_351_344 0xF02B
+#define reg_tuner_data_351_344_pos 0
+#define reg_tuner_data_351_344_len 8
+#define reg_tuner_data_351_344_lsb 344
+#define xd_p_reg_tuner_data_359_352 (*(volatile byte xdata *) 0xF02C)
+#define p_reg_tuner_data_359_352 0xF02C
+#define reg_tuner_data_359_352_pos 0
+#define reg_tuner_data_359_352_len 8
+#define reg_tuner_data_359_352_lsb 352
+#define xd_p_reg_tuner_data_367_360 (*(volatile byte xdata *) 0xF02D)
+#define p_reg_tuner_data_367_360 0xF02D
+#define reg_tuner_data_367_360_pos 0
+#define reg_tuner_data_367_360_len 8
+#define reg_tuner_data_367_360_lsb 360
+#define xd_p_reg_tuner_data_375_368 (*(volatile byte xdata *) 0xF02E)
+#define p_reg_tuner_data_375_368 0xF02E
+#define reg_tuner_data_375_368_pos 0
+#define reg_tuner_data_375_368_len 8
+#define reg_tuner_data_375_368_lsb 368
+#define xd_p_reg_tuner_data_383_376 (*(volatile byte xdata *) 0xF02F)
+#define p_reg_tuner_data_383_376 0xF02F
+#define reg_tuner_data_383_376_pos 0
+#define reg_tuner_data_383_376_len 8
+#define reg_tuner_data_383_376_lsb 376
+#define xd_p_reg_tuner_data_391_384 (*(volatile byte xdata *) 0xF030)
+#define p_reg_tuner_data_391_384 0xF030
+#define reg_tuner_data_391_384_pos 0
+#define reg_tuner_data_391_384_len 8
+#define reg_tuner_data_391_384_lsb 384
+#define xd_p_reg_tuner_data_399_392 (*(volatile byte xdata *) 0xF031)
+#define p_reg_tuner_data_399_392 0xF031
+#define reg_tuner_data_399_392_pos 0
+#define reg_tuner_data_399_392_len 8
+#define reg_tuner_data_399_392_lsb 392
+#define xd_p_reg_tuner_data_407_400 (*(volatile byte xdata *) 0xF032)
+#define p_reg_tuner_data_407_400 0xF032
+#define reg_tuner_data_407_400_pos 0
+#define reg_tuner_data_407_400_len 8
+#define reg_tuner_data_407_400_lsb 400
+#define xd_p_reg_tuner_data_415_408 (*(volatile byte xdata *) 0xF033)
+#define p_reg_tuner_data_415_408 0xF033
+#define reg_tuner_data_415_408_pos 0
+#define reg_tuner_data_415_408_len 8
+#define reg_tuner_data_415_408_lsb 408
+#define xd_p_reg_tuner_data_423_416 (*(volatile byte xdata *) 0xF034)
+#define p_reg_tuner_data_423_416 0xF034
+#define reg_tuner_data_423_416_pos 0
+#define reg_tuner_data_423_416_len 8
+#define reg_tuner_data_423_416_lsb 416
+#define xd_p_reg_tuner_data_431_424 (*(volatile byte xdata *) 0xF035)
+#define p_reg_tuner_data_431_424 0xF035
+#define reg_tuner_data_431_424_pos 0
+#define reg_tuner_data_431_424_len 8
+#define reg_tuner_data_431_424_lsb 424
+#define xd_p_reg_tuner_data_439_432 (*(volatile byte xdata *) 0xF036)
+#define p_reg_tuner_data_439_432 0xF036
+#define reg_tuner_data_439_432_pos 0
+#define reg_tuner_data_439_432_len 8
+#define reg_tuner_data_439_432_lsb 432
+#define xd_p_reg_tuner_data_447_440 (*(volatile byte xdata *) 0xF037)
+#define p_reg_tuner_data_447_440 0xF037
+#define reg_tuner_data_447_440_pos 0
+#define reg_tuner_data_447_440_len 8
+#define reg_tuner_data_447_440_lsb 440
+#define xd_p_reg_tuner_data_455_448 (*(volatile byte xdata *) 0xF038)
+#define p_reg_tuner_data_455_448 0xF038
+#define reg_tuner_data_455_448_pos 0
+#define reg_tuner_data_455_448_len 8
+#define reg_tuner_data_455_448_lsb 448
+#define xd_p_reg_tuner_data_463_456 (*(volatile byte xdata *) 0xF039)
+#define p_reg_tuner_data_463_456 0xF039
+#define reg_tuner_data_463_456_pos 0
+#define reg_tuner_data_463_456_len 8
+#define reg_tuner_data_463_456_lsb 456
+#define xd_p_reg_tuner_data_471_464 (*(volatile byte xdata *) 0xF03A)
+#define p_reg_tuner_data_471_464 0xF03A
+#define reg_tuner_data_471_464_pos 0
+#define reg_tuner_data_471_464_len 8
+#define reg_tuner_data_471_464_lsb 464
+#define xd_p_reg_tuner_data_479_472 (*(volatile byte xdata *) 0xF03B)
+#define p_reg_tuner_data_479_472 0xF03B
+#define reg_tuner_data_479_472_pos 0
+#define reg_tuner_data_479_472_len 8
+#define reg_tuner_data_479_472_lsb 472
+#define xd_p_reg_tuner_data_487_480 (*(volatile byte xdata *) 0xF03C)
+#define p_reg_tuner_data_487_480 0xF03C
+#define reg_tuner_data_487_480_pos 0
+#define reg_tuner_data_487_480_len 8
+#define reg_tuner_data_487_480_lsb 480
+#define xd_p_reg_tuner_data_495_488 (*(volatile byte xdata *) 0xF03D)
+#define p_reg_tuner_data_495_488 0xF03D
+#define reg_tuner_data_495_488_pos 0
+#define reg_tuner_data_495_488_len 8
+#define reg_tuner_data_495_488_lsb 488
+#define xd_p_reg_tuner_data_503_496 (*(volatile byte xdata *) 0xF03E)
+#define p_reg_tuner_data_503_496 0xF03E
+#define reg_tuner_data_503_496_pos 0
+#define reg_tuner_data_503_496_len 8
+#define reg_tuner_data_503_496_lsb 496
+#define xd_p_reg_tuner_data_511_504 (*(volatile byte xdata *) 0xF03F)
+#define p_reg_tuner_data_511_504 0xF03F
+#define reg_tuner_data_511_504_pos 0
+#define reg_tuner_data_511_504_len 8
+#define reg_tuner_data_511_504_lsb 504
+#define xd_p_reg_tuner_data_519_512 (*(volatile byte xdata *) 0xF040)
+#define p_reg_tuner_data_519_512 0xF040
+#define reg_tuner_data_519_512_pos 0
+#define reg_tuner_data_519_512_len 8
+#define reg_tuner_data_519_512_lsb 512
+#define xd_p_reg_tuner_data_527_520 (*(volatile byte xdata *) 0xF041)
+#define p_reg_tuner_data_527_520 0xF041
+#define reg_tuner_data_527_520_pos 0
+#define reg_tuner_data_527_520_len 8
+#define reg_tuner_data_527_520_lsb 520
+#define xd_p_reg_tuner_data_535_528 (*(volatile byte xdata *) 0xF042)
+#define p_reg_tuner_data_535_528 0xF042
+#define reg_tuner_data_535_528_pos 0
+#define reg_tuner_data_535_528_len 8
+#define reg_tuner_data_535_528_lsb 528
+#define xd_p_reg_tuner_data_543_536 (*(volatile byte xdata *) 0xF043)
+#define p_reg_tuner_data_543_536 0xF043
+#define reg_tuner_data_543_536_pos 0
+#define reg_tuner_data_543_536_len 8
+#define reg_tuner_data_543_536_lsb 536
+#define xd_p_reg_tuner_data_551_544 (*(volatile byte xdata *) 0xF044)
+#define p_reg_tuner_data_551_544 0xF044
+#define reg_tuner_data_551_544_pos 0
+#define reg_tuner_data_551_544_len 8
+#define reg_tuner_data_551_544_lsb 544
+#define xd_p_reg_tuner_data_559_552 (*(volatile byte xdata *) 0xF045)
+#define p_reg_tuner_data_559_552 0xF045
+#define reg_tuner_data_559_552_pos 0
+#define reg_tuner_data_559_552_len 8
+#define reg_tuner_data_559_552_lsb 552
+#define xd_p_reg_tuner_data_567_560 (*(volatile byte xdata *) 0xF046)
+#define p_reg_tuner_data_567_560 0xF046
+#define reg_tuner_data_567_560_pos 0
+#define reg_tuner_data_567_560_len 8
+#define reg_tuner_data_567_560_lsb 560
+#define xd_p_reg_tuner_data_575_568 (*(volatile byte xdata *) 0xF047)
+#define p_reg_tuner_data_575_568 0xF047
+#define reg_tuner_data_575_568_pos 0
+#define reg_tuner_data_575_568_len 8
+#define reg_tuner_data_575_568_lsb 568
+#define xd_p_reg_tuner_data_583_576 (*(volatile byte xdata *) 0xF048)
+#define p_reg_tuner_data_583_576 0xF048
+#define reg_tuner_data_583_576_pos 0
+#define reg_tuner_data_583_576_len 8
+#define reg_tuner_data_583_576_lsb 576
+#define xd_p_reg_tuner_data_591_584 (*(volatile byte xdata *) 0xF049)
+#define p_reg_tuner_data_591_584 0xF049
+#define reg_tuner_data_591_584_pos 0
+#define reg_tuner_data_591_584_len 8
+#define reg_tuner_data_591_584_lsb 584
+#define xd_p_reg_tuner_data_599_592 (*(volatile byte xdata *) 0xF04A)
+#define p_reg_tuner_data_599_592 0xF04A
+#define reg_tuner_data_599_592_pos 0
+#define reg_tuner_data_599_592_len 8
+#define reg_tuner_data_599_592_lsb 592
+#define xd_p_reg_tuner_data_607_600 (*(volatile byte xdata *) 0xF04B)
+#define p_reg_tuner_data_607_600 0xF04B
+#define reg_tuner_data_607_600_pos 0
+#define reg_tuner_data_607_600_len 8
+#define reg_tuner_data_607_600_lsb 600
+#define xd_p_reg_tuner_data_615_608 (*(volatile byte xdata *) 0xF04C)
+#define p_reg_tuner_data_615_608 0xF04C
+#define reg_tuner_data_615_608_pos 0
+#define reg_tuner_data_615_608_len 8
+#define reg_tuner_data_615_608_lsb 608
+#define xd_p_reg_tuner_data_623_616 (*(volatile byte xdata *) 0xF04D)
+#define p_reg_tuner_data_623_616 0xF04D
+#define reg_tuner_data_623_616_pos 0
+#define reg_tuner_data_623_616_len 8
+#define reg_tuner_data_623_616_lsb 616
+#define xd_p_reg_tuner_data_631_624 (*(volatile byte xdata *) 0xF04E)
+#define p_reg_tuner_data_631_624 0xF04E
+#define reg_tuner_data_631_624_pos 0
+#define reg_tuner_data_631_624_len 8
+#define reg_tuner_data_631_624_lsb 624
+#define xd_p_reg_tuner_data_639_632 (*(volatile byte xdata *) 0xF04F)
+#define p_reg_tuner_data_639_632 0xF04F
+#define reg_tuner_data_639_632_pos 0
+#define reg_tuner_data_639_632_len 8
+#define reg_tuner_data_639_632_lsb 632
+#define xd_p_reg_tuner_data_647_640 (*(volatile byte xdata *) 0xF050)
+#define p_reg_tuner_data_647_640 0xF050
+#define reg_tuner_data_647_640_pos 0
+#define reg_tuner_data_647_640_len 8
+#define reg_tuner_data_647_640_lsb 640
+#define xd_p_reg_tuner_data_655_648 (*(volatile byte xdata *) 0xF051)
+#define p_reg_tuner_data_655_648 0xF051
+#define reg_tuner_data_655_648_pos 0
+#define reg_tuner_data_655_648_len 8
+#define reg_tuner_data_655_648_lsb 648
+#define xd_p_reg_tuner_data_663_656 (*(volatile byte xdata *) 0xF052)
+#define p_reg_tuner_data_663_656 0xF052
+#define reg_tuner_data_663_656_pos 0
+#define reg_tuner_data_663_656_len 8
+#define reg_tuner_data_663_656_lsb 656
+#define xd_p_reg_tuner_data_671_664 (*(volatile byte xdata *) 0xF053)
+#define p_reg_tuner_data_671_664 0xF053
+#define reg_tuner_data_671_664_pos 0
+#define reg_tuner_data_671_664_len 8
+#define reg_tuner_data_671_664_lsb 664
+#define xd_p_reg_tuner_data_679_672 (*(volatile byte xdata *) 0xF054)
+#define p_reg_tuner_data_679_672 0xF054
+#define reg_tuner_data_679_672_pos 0
+#define reg_tuner_data_679_672_len 8
+#define reg_tuner_data_679_672_lsb 672
+#define xd_p_reg_tuner_data_687_680 (*(volatile byte xdata *) 0xF055)
+#define p_reg_tuner_data_687_680 0xF055
+#define reg_tuner_data_687_680_pos 0
+#define reg_tuner_data_687_680_len 8
+#define reg_tuner_data_687_680_lsb 680
+#define xd_p_reg_tuner_data_695_688 (*(volatile byte xdata *) 0xF056)
+#define p_reg_tuner_data_695_688 0xF056
+#define reg_tuner_data_695_688_pos 0
+#define reg_tuner_data_695_688_len 8
+#define reg_tuner_data_695_688_lsb 688
+#define xd_p_reg_tuner_data_703_696 (*(volatile byte xdata *) 0xF057)
+#define p_reg_tuner_data_703_696 0xF057
+#define reg_tuner_data_703_696_pos 0
+#define reg_tuner_data_703_696_len 8
+#define reg_tuner_data_703_696_lsb 696
+#define xd_p_reg_tuner_data_711_704 (*(volatile byte xdata *) 0xF058)
+#define p_reg_tuner_data_711_704 0xF058
+#define reg_tuner_data_711_704_pos 0
+#define reg_tuner_data_711_704_len 8
+#define reg_tuner_data_711_704_lsb 704
+#define xd_p_reg_tuner_data_719_712 (*(volatile byte xdata *) 0xF059)
+#define p_reg_tuner_data_719_712 0xF059
+#define reg_tuner_data_719_712_pos 0
+#define reg_tuner_data_719_712_len 8
+#define reg_tuner_data_719_712_lsb 712
+#define xd_p_reg_tuner_data_727_720 (*(volatile byte xdata *) 0xF05A)
+#define p_reg_tuner_data_727_720 0xF05A
+#define reg_tuner_data_727_720_pos 0
+#define reg_tuner_data_727_720_len 8
+#define reg_tuner_data_727_720_lsb 720
+#define xd_p_reg_tuner_data_735_728 (*(volatile byte xdata *) 0xF05B)
+#define p_reg_tuner_data_735_728 0xF05B
+#define reg_tuner_data_735_728_pos 0
+#define reg_tuner_data_735_728_len 8
+#define reg_tuner_data_735_728_lsb 728
+#define xd_p_reg_tuner_data_743_736 (*(volatile byte xdata *) 0xF05C)
+#define p_reg_tuner_data_743_736 0xF05C
+#define reg_tuner_data_743_736_pos 0
+#define reg_tuner_data_743_736_len 8
+#define reg_tuner_data_743_736_lsb 736
+#define xd_p_reg_tuner_data_751_744 (*(volatile byte xdata *) 0xF05D)
+#define p_reg_tuner_data_751_744 0xF05D
+#define reg_tuner_data_751_744_pos 0
+#define reg_tuner_data_751_744_len 8
+#define reg_tuner_data_751_744_lsb 744
+#define xd_p_reg_tuner_data_759_752 (*(volatile byte xdata *) 0xF05E)
+#define p_reg_tuner_data_759_752 0xF05E
+#define reg_tuner_data_759_752_pos 0
+#define reg_tuner_data_759_752_len 8
+#define reg_tuner_data_759_752_lsb 752
+#define xd_p_reg_tuner_data_767_760 (*(volatile byte xdata *) 0xF05F)
+#define p_reg_tuner_data_767_760 0xF05F
+#define reg_tuner_data_767_760_pos 0
+#define reg_tuner_data_767_760_len 8
+#define reg_tuner_data_767_760_lsb 760
+#define xd_p_reg_tuner_data_775_768 (*(volatile byte xdata *) 0xF060)
+#define p_reg_tuner_data_775_768 0xF060
+#define reg_tuner_data_775_768_pos 0
+#define reg_tuner_data_775_768_len 8
+#define reg_tuner_data_775_768_lsb 768
+#define xd_p_reg_tuner_data_783_776 (*(volatile byte xdata *) 0xF061)
+#define p_reg_tuner_data_783_776 0xF061
+#define reg_tuner_data_783_776_pos 0
+#define reg_tuner_data_783_776_len 8
+#define reg_tuner_data_783_776_lsb 776
+#define xd_p_reg_tuner_data_791_784 (*(volatile byte xdata *) 0xF062)
+#define p_reg_tuner_data_791_784 0xF062
+#define reg_tuner_data_791_784_pos 0
+#define reg_tuner_data_791_784_len 8
+#define reg_tuner_data_791_784_lsb 784
+#define xd_p_reg_tuner_data_799_792 (*(volatile byte xdata *) 0xF063)
+#define p_reg_tuner_data_799_792 0xF063
+#define reg_tuner_data_799_792_pos 0
+#define reg_tuner_data_799_792_len 8
+#define reg_tuner_data_799_792_lsb 792
+#define xd_p_reg_tuner_data_807_800 (*(volatile byte xdata *) 0xF064)
+#define p_reg_tuner_data_807_800 0xF064
+#define reg_tuner_data_807_800_pos 0
+#define reg_tuner_data_807_800_len 8
+#define reg_tuner_data_807_800_lsb 800
+#define xd_p_reg_tuner_data_815_808 (*(volatile byte xdata *) 0xF065)
+#define p_reg_tuner_data_815_808 0xF065
+#define reg_tuner_data_815_808_pos 0
+#define reg_tuner_data_815_808_len 8
+#define reg_tuner_data_815_808_lsb 808
+#define xd_p_reg_tuner_data_823_816 (*(volatile byte xdata *) 0xF066)
+#define p_reg_tuner_data_823_816 0xF066
+#define reg_tuner_data_823_816_pos 0
+#define reg_tuner_data_823_816_len 8
+#define reg_tuner_data_823_816_lsb 816
+#define xd_p_reg_tuner_data_831_824 (*(volatile byte xdata *) 0xF067)
+#define p_reg_tuner_data_831_824 0xF067
+#define reg_tuner_data_831_824_pos 0
+#define reg_tuner_data_831_824_len 8
+#define reg_tuner_data_831_824_lsb 824
+#define xd_p_reg_tuner_data_839_832 (*(volatile byte xdata *) 0xF068)
+#define p_reg_tuner_data_839_832 0xF068
+#define reg_tuner_data_839_832_pos 0
+#define reg_tuner_data_839_832_len 8
+#define reg_tuner_data_839_832_lsb 832
+#define xd_p_reg_tuner_data_847_840 (*(volatile byte xdata *) 0xF069)
+#define p_reg_tuner_data_847_840 0xF069
+#define reg_tuner_data_847_840_pos 0
+#define reg_tuner_data_847_840_len 8
+#define reg_tuner_data_847_840_lsb 840
+#define xd_p_reg_tuner_data_855_848 (*(volatile byte xdata *) 0xF06A)
+#define p_reg_tuner_data_855_848 0xF06A
+#define reg_tuner_data_855_848_pos 0
+#define reg_tuner_data_855_848_len 8
+#define reg_tuner_data_855_848_lsb 848
+#define xd_p_reg_tuner_data_863_856 (*(volatile byte xdata *) 0xF06B)
+#define p_reg_tuner_data_863_856 0xF06B
+#define reg_tuner_data_863_856_pos 0
+#define reg_tuner_data_863_856_len 8
+#define reg_tuner_data_863_856_lsb 856
+#define xd_p_reg_tuner_data_871_864 (*(volatile byte xdata *) 0xF06C)
+#define p_reg_tuner_data_871_864 0xF06C
+#define reg_tuner_data_871_864_pos 0
+#define reg_tuner_data_871_864_len 8
+#define reg_tuner_data_871_864_lsb 864
+#define xd_p_reg_tuner_data_879_872 (*(volatile byte xdata *) 0xF06D)
+#define p_reg_tuner_data_879_872 0xF06D
+#define reg_tuner_data_879_872_pos 0
+#define reg_tuner_data_879_872_len 8
+#define reg_tuner_data_879_872_lsb 872
+#define xd_p_reg_tuner_data_887_880 (*(volatile byte xdata *) 0xF06E)
+#define p_reg_tuner_data_887_880 0xF06E
+#define reg_tuner_data_887_880_pos 0
+#define reg_tuner_data_887_880_len 8
+#define reg_tuner_data_887_880_lsb 880
+#define xd_p_reg_tuner_data_895_888 (*(volatile byte xdata *) 0xF06F)
+#define p_reg_tuner_data_895_888 0xF06F
+#define reg_tuner_data_895_888_pos 0
+#define reg_tuner_data_895_888_len 8
+#define reg_tuner_data_895_888_lsb 888
+#define xd_p_reg_tuner_data_903_896 (*(volatile byte xdata *) 0xF070)
+#define p_reg_tuner_data_903_896 0xF070
+#define reg_tuner_data_903_896_pos 0
+#define reg_tuner_data_903_896_len 8
+#define reg_tuner_data_903_896_lsb 896
+#define xd_p_reg_tuner_data_911_904 (*(volatile byte xdata *) 0xF071)
+#define p_reg_tuner_data_911_904 0xF071
+#define reg_tuner_data_911_904_pos 0
+#define reg_tuner_data_911_904_len 8
+#define reg_tuner_data_911_904_lsb 904
+#define xd_p_reg_tuner_data_919_912 (*(volatile byte xdata *) 0xF072)
+#define p_reg_tuner_data_919_912 0xF072
+#define reg_tuner_data_919_912_pos 0
+#define reg_tuner_data_919_912_len 8
+#define reg_tuner_data_919_912_lsb 912
+#define xd_p_reg_tuner_data_927_920 (*(volatile byte xdata *) 0xF073)
+#define p_reg_tuner_data_927_920 0xF073
+#define reg_tuner_data_927_920_pos 0
+#define reg_tuner_data_927_920_len 8
+#define reg_tuner_data_927_920_lsb 920
+#define xd_p_reg_tuner_data_935_928 (*(volatile byte xdata *) 0xF074)
+#define p_reg_tuner_data_935_928 0xF074
+#define reg_tuner_data_935_928_pos 0
+#define reg_tuner_data_935_928_len 8
+#define reg_tuner_data_935_928_lsb 928
+#define xd_p_reg_tuner_data_943_936 (*(volatile byte xdata *) 0xF075)
+#define p_reg_tuner_data_943_936 0xF075
+#define reg_tuner_data_943_936_pos 0
+#define reg_tuner_data_943_936_len 8
+#define reg_tuner_data_943_936_lsb 936
+#define xd_p_reg_tuner_data_951_944 (*(volatile byte xdata *) 0xF076)
+#define p_reg_tuner_data_951_944 0xF076
+#define reg_tuner_data_951_944_pos 0
+#define reg_tuner_data_951_944_len 8
+#define reg_tuner_data_951_944_lsb 944
+#define xd_p_reg_tuner_data_959_952 (*(volatile byte xdata *) 0xF077)
+#define p_reg_tuner_data_959_952 0xF077
+#define reg_tuner_data_959_952_pos 0
+#define reg_tuner_data_959_952_len 8
+#define reg_tuner_data_959_952_lsb 952
+#define xd_p_reg_tuner_data_967_960 (*(volatile byte xdata *) 0xF078)
+#define p_reg_tuner_data_967_960 0xF078
+#define reg_tuner_data_967_960_pos 0
+#define reg_tuner_data_967_960_len 8
+#define reg_tuner_data_967_960_lsb 960
+#define xd_p_reg_tuner_data_975_968 (*(volatile byte xdata *) 0xF079)
+#define p_reg_tuner_data_975_968 0xF079
+#define reg_tuner_data_975_968_pos 0
+#define reg_tuner_data_975_968_len 8
+#define reg_tuner_data_975_968_lsb 968
+#define xd_p_reg_tuner_data_983_976 (*(volatile byte xdata *) 0xF07A)
+#define p_reg_tuner_data_983_976 0xF07A
+#define reg_tuner_data_983_976_pos 0
+#define reg_tuner_data_983_976_len 8
+#define reg_tuner_data_983_976_lsb 976
+#define xd_p_reg_tuner_data_991_984 (*(volatile byte xdata *) 0xF07B)
+#define p_reg_tuner_data_991_984 0xF07B
+#define reg_tuner_data_991_984_pos 0
+#define reg_tuner_data_991_984_len 8
+#define reg_tuner_data_991_984_lsb 984
+#define xd_p_reg_tuner_data_999_992 (*(volatile byte xdata *) 0xF07C)
+#define p_reg_tuner_data_999_992 0xF07C
+#define reg_tuner_data_999_992_pos 0
+#define reg_tuner_data_999_992_len 8
+#define reg_tuner_data_999_992_lsb 992
+#define xd_p_reg_tuner_data_1007_1000 (*(volatile byte xdata *) 0xF07D)
+#define p_reg_tuner_data_1007_1000 0xF07D
+#define reg_tuner_data_1007_1000_pos 0
+#define reg_tuner_data_1007_1000_len 8
+#define reg_tuner_data_1007_1000_lsb 1000
+#define xd_p_reg_tuner_data_1015_1008 (*(volatile byte xdata *) 0xF07E)
+#define p_reg_tuner_data_1015_1008 0xF07E
+#define reg_tuner_data_1015_1008_pos 0
+#define reg_tuner_data_1015_1008_len 8
+#define reg_tuner_data_1015_1008_lsb 1008
+#define xd_p_reg_tuner_data_1023_1016 (*(volatile byte xdata *) 0xF07F)
+#define p_reg_tuner_data_1023_1016 0xF07F
+#define reg_tuner_data_1023_1016_pos 0
+#define reg_tuner_data_1023_1016_len 8
+#define reg_tuner_data_1023_1016_lsb 1016
+#define xd_p_reg_tuner_data_1031_1024 (*(volatile byte xdata *) 0xF080)
+#define p_reg_tuner_data_1031_1024 0xF080
+#define reg_tuner_data_1031_1024_pos 0
+#define reg_tuner_data_1031_1024_len 8
+#define reg_tuner_data_1031_1024_lsb 1024
+#define xd_p_reg_tuner_data_1039_1032 (*(volatile byte xdata *) 0xF081)
+#define p_reg_tuner_data_1039_1032 0xF081
+#define reg_tuner_data_1039_1032_pos 0
+#define reg_tuner_data_1039_1032_len 8
+#define reg_tuner_data_1039_1032_lsb 1032
+#define xd_p_reg_tuner_data_1047_1040 (*(volatile byte xdata *) 0xF082)
+#define p_reg_tuner_data_1047_1040 0xF082
+#define reg_tuner_data_1047_1040_pos 0
+#define reg_tuner_data_1047_1040_len 8
+#define reg_tuner_data_1047_1040_lsb 1040
+#define xd_p_reg_tuner_data_1055_1048 (*(volatile byte xdata *) 0xF083)
+#define p_reg_tuner_data_1055_1048 0xF083
+#define reg_tuner_data_1055_1048_pos 0
+#define reg_tuner_data_1055_1048_len 8
+#define reg_tuner_data_1055_1048_lsb 1048
+#define xd_p_reg_tuner_data_1063_1056 (*(volatile byte xdata *) 0xF084)
+#define p_reg_tuner_data_1063_1056 0xF084
+#define reg_tuner_data_1063_1056_pos 0
+#define reg_tuner_data_1063_1056_len 8
+#define reg_tuner_data_1063_1056_lsb 1056
+#define xd_p_reg_tuner_data_1071_1064 (*(volatile byte xdata *) 0xF085)
+#define p_reg_tuner_data_1071_1064 0xF085
+#define reg_tuner_data_1071_1064_pos 0
+#define reg_tuner_data_1071_1064_len 8
+#define reg_tuner_data_1071_1064_lsb 1064
+#define xd_p_reg_tuner_data_1079_1072 (*(volatile byte xdata *) 0xF086)
+#define p_reg_tuner_data_1079_1072 0xF086
+#define reg_tuner_data_1079_1072_pos 0
+#define reg_tuner_data_1079_1072_len 8
+#define reg_tuner_data_1079_1072_lsb 1072
+#define xd_p_reg_tuner_data_1087_1080 (*(volatile byte xdata *) 0xF087)
+#define p_reg_tuner_data_1087_1080 0xF087
+#define reg_tuner_data_1087_1080_pos 0
+#define reg_tuner_data_1087_1080_len 8
+#define reg_tuner_data_1087_1080_lsb 1080
+#define xd_p_reg_tuner_data_1095_1088 (*(volatile byte xdata *) 0xF088)
+#define p_reg_tuner_data_1095_1088 0xF088
+#define reg_tuner_data_1095_1088_pos 0
+#define reg_tuner_data_1095_1088_len 8
+#define reg_tuner_data_1095_1088_lsb 1088
+#define xd_p_reg_tuner_data_1103_1096 (*(volatile byte xdata *) 0xF089)
+#define p_reg_tuner_data_1103_1096 0xF089
+#define reg_tuner_data_1103_1096_pos 0
+#define reg_tuner_data_1103_1096_len 8
+#define reg_tuner_data_1103_1096_lsb 1096
+#define xd_p_reg_tuner_data_1111_1104 (*(volatile byte xdata *) 0xF08A)
+#define p_reg_tuner_data_1111_1104 0xF08A
+#define reg_tuner_data_1111_1104_pos 0
+#define reg_tuner_data_1111_1104_len 8
+#define reg_tuner_data_1111_1104_lsb 1104
+#define xd_p_reg_tuner_data_1119_1112 (*(volatile byte xdata *) 0xF08B)
+#define p_reg_tuner_data_1119_1112 0xF08B
+#define reg_tuner_data_1119_1112_pos 0
+#define reg_tuner_data_1119_1112_len 8
+#define reg_tuner_data_1119_1112_lsb 1112
+#define xd_p_reg_tuner_data_1127_1120 (*(volatile byte xdata *) 0xF08C)
+#define p_reg_tuner_data_1127_1120 0xF08C
+#define reg_tuner_data_1127_1120_pos 0
+#define reg_tuner_data_1127_1120_len 8
+#define reg_tuner_data_1127_1120_lsb 1120
+#define xd_p_reg_tuner_data_1135_1128 (*(volatile byte xdata *) 0xF08D)
+#define p_reg_tuner_data_1135_1128 0xF08D
+#define reg_tuner_data_1135_1128_pos 0
+#define reg_tuner_data_1135_1128_len 8
+#define reg_tuner_data_1135_1128_lsb 1128
+#define xd_p_reg_tuner_data_1143_1136 (*(volatile byte xdata *) 0xF08E)
+#define p_reg_tuner_data_1143_1136 0xF08E
+#define reg_tuner_data_1143_1136_pos 0
+#define reg_tuner_data_1143_1136_len 8
+#define reg_tuner_data_1143_1136_lsb 1136
+#define xd_p_reg_tuner_data_1151_1144 (*(volatile byte xdata *) 0xF08F)
+#define p_reg_tuner_data_1151_1144 0xF08F
+#define reg_tuner_data_1151_1144_pos 0
+#define reg_tuner_data_1151_1144_len 8
+#define reg_tuner_data_1151_1144_lsb 1144
+#define xd_p_reg_tuner_data_1159_1152 (*(volatile byte xdata *) 0xF090)
+#define p_reg_tuner_data_1159_1152 0xF090
+#define reg_tuner_data_1159_1152_pos 0
+#define reg_tuner_data_1159_1152_len 8
+#define reg_tuner_data_1159_1152_lsb 1152
+#define xd_p_reg_tuner_data_1167_1160 (*(volatile byte xdata *) 0xF091)
+#define p_reg_tuner_data_1167_1160 0xF091
+#define reg_tuner_data_1167_1160_pos 0
+#define reg_tuner_data_1167_1160_len 8
+#define reg_tuner_data_1167_1160_lsb 1160
+#define xd_p_reg_tuner_data_1175_1168 (*(volatile byte xdata *) 0xF092)
+#define p_reg_tuner_data_1175_1168 0xF092
+#define reg_tuner_data_1175_1168_pos 0
+#define reg_tuner_data_1175_1168_len 8
+#define reg_tuner_data_1175_1168_lsb 1168
+#define xd_p_reg_tuner_data_1183_1176 (*(volatile byte xdata *) 0xF093)
+#define p_reg_tuner_data_1183_1176 0xF093
+#define reg_tuner_data_1183_1176_pos 0
+#define reg_tuner_data_1183_1176_len 8
+#define reg_tuner_data_1183_1176_lsb 1176
+#define xd_p_reg_tuner_data_1191_1184 (*(volatile byte xdata *) 0xF094)
+#define p_reg_tuner_data_1191_1184 0xF094
+#define reg_tuner_data_1191_1184_pos 0
+#define reg_tuner_data_1191_1184_len 8
+#define reg_tuner_data_1191_1184_lsb 1184
+#define xd_p_reg_tuner_data_1199_1192 (*(volatile byte xdata *) 0xF095)
+#define p_reg_tuner_data_1199_1192 0xF095
+#define reg_tuner_data_1199_1192_pos 0
+#define reg_tuner_data_1199_1192_len 8
+#define reg_tuner_data_1199_1192_lsb 1192
+#define xd_p_reg_tuner_data_1207_1200 (*(volatile byte xdata *) 0xF096)
+#define p_reg_tuner_data_1207_1200 0xF096
+#define reg_tuner_data_1207_1200_pos 0
+#define reg_tuner_data_1207_1200_len 8
+#define reg_tuner_data_1207_1200_lsb 1200
+#define xd_p_reg_tuner_data_1215_1208 (*(volatile byte xdata *) 0xF097)
+#define p_reg_tuner_data_1215_1208 0xF097
+#define reg_tuner_data_1215_1208_pos 0
+#define reg_tuner_data_1215_1208_len 8
+#define reg_tuner_data_1215_1208_lsb 1208
+#define xd_p_reg_tuner_data_1223_1216 (*(volatile byte xdata *) 0xF098)
+#define p_reg_tuner_data_1223_1216 0xF098
+#define reg_tuner_data_1223_1216_pos 0
+#define reg_tuner_data_1223_1216_len 8
+#define reg_tuner_data_1223_1216_lsb 1216
+#define xd_p_reg_tuner_data_1231_1224 (*(volatile byte xdata *) 0xF099)
+#define p_reg_tuner_data_1231_1224 0xF099
+#define reg_tuner_data_1231_1224_pos 0
+#define reg_tuner_data_1231_1224_len 8
+#define reg_tuner_data_1231_1224_lsb 1224
+#define xd_p_reg_tuner_data_1239_1232 (*(volatile byte xdata *) 0xF09A)
+#define p_reg_tuner_data_1239_1232 0xF09A
+#define reg_tuner_data_1239_1232_pos 0
+#define reg_tuner_data_1239_1232_len 8
+#define reg_tuner_data_1239_1232_lsb 1232
+#define xd_p_reg_tuner_data_1247_1240 (*(volatile byte xdata *) 0xF09B)
+#define p_reg_tuner_data_1247_1240 0xF09B
+#define reg_tuner_data_1247_1240_pos 0
+#define reg_tuner_data_1247_1240_len 8
+#define reg_tuner_data_1247_1240_lsb 1240
+#define xd_p_reg_tuner_data_1255_1248 (*(volatile byte xdata *) 0xF09C)
+#define p_reg_tuner_data_1255_1248 0xF09C
+#define reg_tuner_data_1255_1248_pos 0
+#define reg_tuner_data_1255_1248_len 8
+#define reg_tuner_data_1255_1248_lsb 1248
+#define xd_p_reg_tuner_data_1263_1256 (*(volatile byte xdata *) 0xF09D)
+#define p_reg_tuner_data_1263_1256 0xF09D
+#define reg_tuner_data_1263_1256_pos 0
+#define reg_tuner_data_1263_1256_len 8
+#define reg_tuner_data_1263_1256_lsb 1256
+#define xd_p_reg_tuner_data_1271_1264 (*(volatile byte xdata *) 0xF09E)
+#define p_reg_tuner_data_1271_1264 0xF09E
+#define reg_tuner_data_1271_1264_pos 0
+#define reg_tuner_data_1271_1264_len 8
+#define reg_tuner_data_1271_1264_lsb 1264
+#define xd_p_reg_tuner_data_1279_1272 (*(volatile byte xdata *) 0xF09F)
+#define p_reg_tuner_data_1279_1272 0xF09F
+#define reg_tuner_data_1279_1272_pos 0
+#define reg_tuner_data_1279_1272_len 8
+#define reg_tuner_data_1279_1272_lsb 1272
+#define xd_p_reg_tuner_data_1287_1280 (*(volatile byte xdata *) 0xF0A0)
+#define p_reg_tuner_data_1287_1280 0xF0A0
+#define reg_tuner_data_1287_1280_pos 0
+#define reg_tuner_data_1287_1280_len 8
+#define reg_tuner_data_1287_1280_lsb 1280
+#define xd_p_reg_tuner_data_1295_1288 (*(volatile byte xdata *) 0xF0A1)
+#define p_reg_tuner_data_1295_1288 0xF0A1
+#define reg_tuner_data_1295_1288_pos 0
+#define reg_tuner_data_1295_1288_len 8
+#define reg_tuner_data_1295_1288_lsb 1288
+#define xd_p_reg_tuner_data_1303_1296 (*(volatile byte xdata *) 0xF0A2)
+#define p_reg_tuner_data_1303_1296 0xF0A2
+#define reg_tuner_data_1303_1296_pos 0
+#define reg_tuner_data_1303_1296_len 8
+#define reg_tuner_data_1303_1296_lsb 1296
+#define xd_p_reg_tuner_data_1311_1304 (*(volatile byte xdata *) 0xF0A3)
+#define p_reg_tuner_data_1311_1304 0xF0A3
+#define reg_tuner_data_1311_1304_pos 0
+#define reg_tuner_data_1311_1304_len 8
+#define reg_tuner_data_1311_1304_lsb 1304
+#define xd_p_reg_tuner_data_1319_1312 (*(volatile byte xdata *) 0xF0A4)
+#define p_reg_tuner_data_1319_1312 0xF0A4
+#define reg_tuner_data_1319_1312_pos 0
+#define reg_tuner_data_1319_1312_len 8
+#define reg_tuner_data_1319_1312_lsb 1312
+#define xd_p_reg_tuner_data_1327_1320 (*(volatile byte xdata *) 0xF0A5)
+#define p_reg_tuner_data_1327_1320 0xF0A5
+#define reg_tuner_data_1327_1320_pos 0
+#define reg_tuner_data_1327_1320_len 8
+#define reg_tuner_data_1327_1320_lsb 1320
+#define xd_p_reg_tuner_data_1335_1328 (*(volatile byte xdata *) 0xF0A6)
+#define p_reg_tuner_data_1335_1328 0xF0A6
+#define reg_tuner_data_1335_1328_pos 0
+#define reg_tuner_data_1335_1328_len 8
+#define reg_tuner_data_1335_1328_lsb 1328
+#define xd_p_reg_tuner_data_1343_1336 (*(volatile byte xdata *) 0xF0A7)
+#define p_reg_tuner_data_1343_1336 0xF0A7
+#define reg_tuner_data_1343_1336_pos 0
+#define reg_tuner_data_1343_1336_len 8
+#define reg_tuner_data_1343_1336_lsb 1336
+#define xd_p_reg_tuner_data_1351_1344 (*(volatile byte xdata *) 0xF0A8)
+#define p_reg_tuner_data_1351_1344 0xF0A8
+#define reg_tuner_data_1351_1344_pos 0
+#define reg_tuner_data_1351_1344_len 8
+#define reg_tuner_data_1351_1344_lsb 1344
+#define xd_p_reg_tuner_data_1359_1352 (*(volatile byte xdata *) 0xF0A9)
+#define p_reg_tuner_data_1359_1352 0xF0A9
+#define reg_tuner_data_1359_1352_pos 0
+#define reg_tuner_data_1359_1352_len 8
+#define reg_tuner_data_1359_1352_lsb 1352
+#define xd_p_reg_tuner_data_1367_1360 (*(volatile byte xdata *) 0xF0AA)
+#define p_reg_tuner_data_1367_1360 0xF0AA
+#define reg_tuner_data_1367_1360_pos 0
+#define reg_tuner_data_1367_1360_len 8
+#define reg_tuner_data_1367_1360_lsb 1360
+#define xd_p_reg_tuner_data_1375_1368 (*(volatile byte xdata *) 0xF0AB)
+#define p_reg_tuner_data_1375_1368 0xF0AB
+#define reg_tuner_data_1375_1368_pos 0
+#define reg_tuner_data_1375_1368_len 8
+#define reg_tuner_data_1375_1368_lsb 1368
+#define xd_p_reg_tuner_data_1383_1376 (*(volatile byte xdata *) 0xF0AC)
+#define p_reg_tuner_data_1383_1376 0xF0AC
+#define reg_tuner_data_1383_1376_pos 0
+#define reg_tuner_data_1383_1376_len 8
+#define reg_tuner_data_1383_1376_lsb 1376
+#define xd_p_reg_tuner_data_1391_1384 (*(volatile byte xdata *) 0xF0AD)
+#define p_reg_tuner_data_1391_1384 0xF0AD
+#define reg_tuner_data_1391_1384_pos 0
+#define reg_tuner_data_1391_1384_len 8
+#define reg_tuner_data_1391_1384_lsb 1384
+#define xd_p_reg_tuner_data_1399_1392 (*(volatile byte xdata *) 0xF0AE)
+#define p_reg_tuner_data_1399_1392 0xF0AE
+#define reg_tuner_data_1399_1392_pos 0
+#define reg_tuner_data_1399_1392_len 8
+#define reg_tuner_data_1399_1392_lsb 1392
+#define xd_p_reg_tuner_data_1407_1400 (*(volatile byte xdata *) 0xF0AF)
+#define p_reg_tuner_data_1407_1400 0xF0AF
+#define reg_tuner_data_1407_1400_pos 0
+#define reg_tuner_data_1407_1400_len 8
+#define reg_tuner_data_1407_1400_lsb 1400
+#define xd_p_reg_tuner_data_1415_1408 (*(volatile byte xdata *) 0xF0B0)
+#define p_reg_tuner_data_1415_1408 0xF0B0
+#define reg_tuner_data_1415_1408_pos 0
+#define reg_tuner_data_1415_1408_len 8
+#define reg_tuner_data_1415_1408_lsb 1408
+#define xd_p_reg_tuner_data_1423_1416 (*(volatile byte xdata *) 0xF0B1)
+#define p_reg_tuner_data_1423_1416 0xF0B1
+#define reg_tuner_data_1423_1416_pos 0
+#define reg_tuner_data_1423_1416_len 8
+#define reg_tuner_data_1423_1416_lsb 1416
+#define xd_p_reg_tuner_data_1431_1424 (*(volatile byte xdata *) 0xF0B2)
+#define p_reg_tuner_data_1431_1424 0xF0B2
+#define reg_tuner_data_1431_1424_pos 0
+#define reg_tuner_data_1431_1424_len 8
+#define reg_tuner_data_1431_1424_lsb 1424
+#define xd_p_reg_tuner_data_1439_1432 (*(volatile byte xdata *) 0xF0B3)
+#define p_reg_tuner_data_1439_1432 0xF0B3
+#define reg_tuner_data_1439_1432_pos 0
+#define reg_tuner_data_1439_1432_len 8
+#define reg_tuner_data_1439_1432_lsb 1432
+#define xd_p_reg_tuner_data_1447_1440 (*(volatile byte xdata *) 0xF0B4)
+#define p_reg_tuner_data_1447_1440 0xF0B4
+#define reg_tuner_data_1447_1440_pos 0
+#define reg_tuner_data_1447_1440_len 8
+#define reg_tuner_data_1447_1440_lsb 1440
+#define xd_p_reg_tuner_data_1455_1448 (*(volatile byte xdata *) 0xF0B5)
+#define p_reg_tuner_data_1455_1448 0xF0B5
+#define reg_tuner_data_1455_1448_pos 0
+#define reg_tuner_data_1455_1448_len 8
+#define reg_tuner_data_1455_1448_lsb 1448
+#define xd_p_reg_tuner_data_1463_1456 (*(volatile byte xdata *) 0xF0B6)
+#define p_reg_tuner_data_1463_1456 0xF0B6
+#define reg_tuner_data_1463_1456_pos 0
+#define reg_tuner_data_1463_1456_len 8
+#define reg_tuner_data_1463_1456_lsb 1456
+#define xd_p_reg_tuner_data_1471_1464 (*(volatile byte xdata *) 0xF0B7)
+#define p_reg_tuner_data_1471_1464 0xF0B7
+#define reg_tuner_data_1471_1464_pos 0
+#define reg_tuner_data_1471_1464_len 8
+#define reg_tuner_data_1471_1464_lsb 1464
+#define xd_p_reg_tuner_data_1479_1472 (*(volatile byte xdata *) 0xF0B8)
+#define p_reg_tuner_data_1479_1472 0xF0B8
+#define reg_tuner_data_1479_1472_pos 0
+#define reg_tuner_data_1479_1472_len 8
+#define reg_tuner_data_1479_1472_lsb 1472
+#define xd_p_reg_tuner_data_1487_1480 (*(volatile byte xdata *) 0xF0B9)
+#define p_reg_tuner_data_1487_1480 0xF0B9
+#define reg_tuner_data_1487_1480_pos 0
+#define reg_tuner_data_1487_1480_len 8
+#define reg_tuner_data_1487_1480_lsb 1480
+#define xd_p_reg_tuner_data_1495_1488 (*(volatile byte xdata *) 0xF0BA)
+#define p_reg_tuner_data_1495_1488 0xF0BA
+#define reg_tuner_data_1495_1488_pos 0
+#define reg_tuner_data_1495_1488_len 8
+#define reg_tuner_data_1495_1488_lsb 1488
+#define xd_p_reg_tuner_data_1503_1496 (*(volatile byte xdata *) 0xF0BB)
+#define p_reg_tuner_data_1503_1496 0xF0BB
+#define reg_tuner_data_1503_1496_pos 0
+#define reg_tuner_data_1503_1496_len 8
+#define reg_tuner_data_1503_1496_lsb 1496
+#define xd_p_reg_tuner_data_1511_1504 (*(volatile byte xdata *) 0xF0BC)
+#define p_reg_tuner_data_1511_1504 0xF0BC
+#define reg_tuner_data_1511_1504_pos 0
+#define reg_tuner_data_1511_1504_len 8
+#define reg_tuner_data_1511_1504_lsb 1504
+#define xd_p_reg_tuner_data_1519_1512 (*(volatile byte xdata *) 0xF0BD)
+#define p_reg_tuner_data_1519_1512 0xF0BD
+#define reg_tuner_data_1519_1512_pos 0
+#define reg_tuner_data_1519_1512_len 8
+#define reg_tuner_data_1519_1512_lsb 1512
+#define xd_p_reg_tuner_data_1527_1520 (*(volatile byte xdata *) 0xF0BE)
+#define p_reg_tuner_data_1527_1520 0xF0BE
+#define reg_tuner_data_1527_1520_pos 0
+#define reg_tuner_data_1527_1520_len 8
+#define reg_tuner_data_1527_1520_lsb 1520
+#define xd_p_reg_tuner_data_1535_1528 (*(volatile byte xdata *) 0xF0BF)
+#define p_reg_tuner_data_1535_1528 0xF0BF
+#define reg_tuner_data_1535_1528_pos 0
+#define reg_tuner_data_1535_1528_len 8
+#define reg_tuner_data_1535_1528_lsb 1528
+#define xd_p_reg_tuner_data_1543_1536 (*(volatile byte xdata *) 0xF0C0)
+#define p_reg_tuner_data_1543_1536 0xF0C0
+#define reg_tuner_data_1543_1536_pos 0
+#define reg_tuner_data_1543_1536_len 8
+#define reg_tuner_data_1543_1536_lsb 1536
+#define xd_p_reg_tuner_data_1551_1544 (*(volatile byte xdata *) 0xF0C1)
+#define p_reg_tuner_data_1551_1544 0xF0C1
+#define reg_tuner_data_1551_1544_pos 0
+#define reg_tuner_data_1551_1544_len 8
+#define reg_tuner_data_1551_1544_lsb 1544
+#define xd_p_reg_tuner_data_1559_1552 (*(volatile byte xdata *) 0xF0C2)
+#define p_reg_tuner_data_1559_1552 0xF0C2
+#define reg_tuner_data_1559_1552_pos 0
+#define reg_tuner_data_1559_1552_len 8
+#define reg_tuner_data_1559_1552_lsb 1552
+#define xd_p_reg_tuner_data_1567_1560 (*(volatile byte xdata *) 0xF0C3)
+#define p_reg_tuner_data_1567_1560 0xF0C3
+#define reg_tuner_data_1567_1560_pos 0
+#define reg_tuner_data_1567_1560_len 8
+#define reg_tuner_data_1567_1560_lsb 1560
+#define xd_p_reg_tuner_data_1575_1568 (*(volatile byte xdata *) 0xF0C4)
+#define p_reg_tuner_data_1575_1568 0xF0C4
+#define reg_tuner_data_1575_1568_pos 0
+#define reg_tuner_data_1575_1568_len 8
+#define reg_tuner_data_1575_1568_lsb 1568
+#define xd_p_reg_tuner_data_1583_1576 (*(volatile byte xdata *) 0xF0C5)
+#define p_reg_tuner_data_1583_1576 0xF0C5
+#define reg_tuner_data_1583_1576_pos 0
+#define reg_tuner_data_1583_1576_len 8
+#define reg_tuner_data_1583_1576_lsb 1576
+#define xd_p_reg_tuner_data_1591_1584 (*(volatile byte xdata *) 0xF0C6)
+#define p_reg_tuner_data_1591_1584 0xF0C6
+#define reg_tuner_data_1591_1584_pos 0
+#define reg_tuner_data_1591_1584_len 8
+#define reg_tuner_data_1591_1584_lsb 1584
+#define xd_p_reg_tuner_data_1599_1592 (*(volatile byte xdata *) 0xF0C7)
+#define p_reg_tuner_data_1599_1592 0xF0C7
+#define reg_tuner_data_1599_1592_pos 0
+#define reg_tuner_data_1599_1592_len 8
+#define reg_tuner_data_1599_1592_lsb 1592
+#define xd_p_reg_tuner_data_1607_1600 (*(volatile byte xdata *) 0xF0C8)
+#define p_reg_tuner_data_1607_1600 0xF0C8
+#define reg_tuner_data_1607_1600_pos 0
+#define reg_tuner_data_1607_1600_len 8
+#define reg_tuner_data_1607_1600_lsb 1600
+#define xd_p_reg_tuner_data_1615_1608 (*(volatile byte xdata *) 0xF0C9)
+#define p_reg_tuner_data_1615_1608 0xF0C9
+#define reg_tuner_data_1615_1608_pos 0
+#define reg_tuner_data_1615_1608_len 8
+#define reg_tuner_data_1615_1608_lsb 1608
+#define xd_p_reg_tuner_data_1623_1616 (*(volatile byte xdata *) 0xF0CA)
+#define p_reg_tuner_data_1623_1616 0xF0CA
+#define reg_tuner_data_1623_1616_pos 0
+#define reg_tuner_data_1623_1616_len 8
+#define reg_tuner_data_1623_1616_lsb 1616
+#define xd_p_reg_tuner_data_1631_1624 (*(volatile byte xdata *) 0xF0CB)
+#define p_reg_tuner_data_1631_1624 0xF0CB
+#define reg_tuner_data_1631_1624_pos 0
+#define reg_tuner_data_1631_1624_len 8
+#define reg_tuner_data_1631_1624_lsb 1624
+#define xd_p_reg_tuner_data_1639_1632 (*(volatile byte xdata *) 0xF0CC)
+#define p_reg_tuner_data_1639_1632 0xF0CC
+#define reg_tuner_data_1639_1632_pos 0
+#define reg_tuner_data_1639_1632_len 8
+#define reg_tuner_data_1639_1632_lsb 1632
+#define xd_p_reg_tuner_data_1647_1640 (*(volatile byte xdata *) 0xF0CD)
+#define p_reg_tuner_data_1647_1640 0xF0CD
+#define reg_tuner_data_1647_1640_pos 0
+#define reg_tuner_data_1647_1640_len 8
+#define reg_tuner_data_1647_1640_lsb 1640
+#define xd_p_reg_tuner_data_1655_1648 (*(volatile byte xdata *) 0xF0CE)
+#define p_reg_tuner_data_1655_1648 0xF0CE
+#define reg_tuner_data_1655_1648_pos 0
+#define reg_tuner_data_1655_1648_len 8
+#define reg_tuner_data_1655_1648_lsb 1648
+#define xd_p_reg_tuner_data_1663_1656 (*(volatile byte xdata *) 0xF0CF)
+#define p_reg_tuner_data_1663_1656 0xF0CF
+#define reg_tuner_data_1663_1656_pos 0
+#define reg_tuner_data_1663_1656_len 8
+#define reg_tuner_data_1663_1656_lsb 1656
+#define xd_p_reg_tuner_data_1671_1664 (*(volatile byte xdata *) 0xF0D0)
+#define p_reg_tuner_data_1671_1664 0xF0D0
+#define reg_tuner_data_1671_1664_pos 0
+#define reg_tuner_data_1671_1664_len 8
+#define reg_tuner_data_1671_1664_lsb 1664
+#define xd_p_reg_tuner_data_1679_1672 (*(volatile byte xdata *) 0xF0D1)
+#define p_reg_tuner_data_1679_1672 0xF0D1
+#define reg_tuner_data_1679_1672_pos 0
+#define reg_tuner_data_1679_1672_len 8
+#define reg_tuner_data_1679_1672_lsb 1672
+#define xd_p_reg_tuner_data_1687_1680 (*(volatile byte xdata *) 0xF0D2)
+#define p_reg_tuner_data_1687_1680 0xF0D2
+#define reg_tuner_data_1687_1680_pos 0
+#define reg_tuner_data_1687_1680_len 8
+#define reg_tuner_data_1687_1680_lsb 1680
+#define xd_p_reg_tuner_data_1695_1688 (*(volatile byte xdata *) 0xF0D3)
+#define p_reg_tuner_data_1695_1688 0xF0D3
+#define reg_tuner_data_1695_1688_pos 0
+#define reg_tuner_data_1695_1688_len 8
+#define reg_tuner_data_1695_1688_lsb 1688
+#define xd_p_reg_tuner_data_1703_1696 (*(volatile byte xdata *) 0xF0D4)
+#define p_reg_tuner_data_1703_1696 0xF0D4
+#define reg_tuner_data_1703_1696_pos 0
+#define reg_tuner_data_1703_1696_len 8
+#define reg_tuner_data_1703_1696_lsb 1696
+#define xd_p_reg_tuner_data_1711_1704 (*(volatile byte xdata *) 0xF0D5)
+#define p_reg_tuner_data_1711_1704 0xF0D5
+#define reg_tuner_data_1711_1704_pos 0
+#define reg_tuner_data_1711_1704_len 8
+#define reg_tuner_data_1711_1704_lsb 1704
+#define xd_p_reg_tuner_data_1719_1712 (*(volatile byte xdata *) 0xF0D6)
+#define p_reg_tuner_data_1719_1712 0xF0D6
+#define reg_tuner_data_1719_1712_pos 0
+#define reg_tuner_data_1719_1712_len 8
+#define reg_tuner_data_1719_1712_lsb 1712
+#define xd_p_reg_tuner_data_1727_1720 (*(volatile byte xdata *) 0xF0D7)
+#define p_reg_tuner_data_1727_1720 0xF0D7
+#define reg_tuner_data_1727_1720_pos 0
+#define reg_tuner_data_1727_1720_len 8
+#define reg_tuner_data_1727_1720_lsb 1720
+#define xd_p_reg_tuner_data_1735_1728 (*(volatile byte xdata *) 0xF0D8)
+#define p_reg_tuner_data_1735_1728 0xF0D8
+#define reg_tuner_data_1735_1728_pos 0
+#define reg_tuner_data_1735_1728_len 8
+#define reg_tuner_data_1735_1728_lsb 1728
+#define xd_p_reg_tuner_data_1743_1736 (*(volatile byte xdata *) 0xF0D9)
+#define p_reg_tuner_data_1743_1736 0xF0D9
+#define reg_tuner_data_1743_1736_pos 0
+#define reg_tuner_data_1743_1736_len 8
+#define reg_tuner_data_1743_1736_lsb 1736
+#define xd_p_reg_tuner_data_1751_1744 (*(volatile byte xdata *) 0xF0DA)
+#define p_reg_tuner_data_1751_1744 0xF0DA
+#define reg_tuner_data_1751_1744_pos 0
+#define reg_tuner_data_1751_1744_len 8
+#define reg_tuner_data_1751_1744_lsb 1744
+#define xd_p_reg_tuner_data_1759_1752 (*(volatile byte xdata *) 0xF0DB)
+#define p_reg_tuner_data_1759_1752 0xF0DB
+#define reg_tuner_data_1759_1752_pos 0
+#define reg_tuner_data_1759_1752_len 8
+#define reg_tuner_data_1759_1752_lsb 1752
+#define xd_p_reg_tuner_data_1767_1760 (*(volatile byte xdata *) 0xF0DC)
+#define p_reg_tuner_data_1767_1760 0xF0DC
+#define reg_tuner_data_1767_1760_pos 0
+#define reg_tuner_data_1767_1760_len 8
+#define reg_tuner_data_1767_1760_lsb 1760
+#define xd_p_reg_tuner_data_1775_1768 (*(volatile byte xdata *) 0xF0DD)
+#define p_reg_tuner_data_1775_1768 0xF0DD
+#define reg_tuner_data_1775_1768_pos 0
+#define reg_tuner_data_1775_1768_len 8
+#define reg_tuner_data_1775_1768_lsb 1768
+#define xd_p_reg_tuner_data_1783_1776 (*(volatile byte xdata *) 0xF0DE)
+#define p_reg_tuner_data_1783_1776 0xF0DE
+#define reg_tuner_data_1783_1776_pos 0
+#define reg_tuner_data_1783_1776_len 8
+#define reg_tuner_data_1783_1776_lsb 1776
+#define xd_p_reg_tuner_data_1791_1784 (*(volatile byte xdata *) 0xF0DF)
+#define p_reg_tuner_data_1791_1784 0xF0DF
+#define reg_tuner_data_1791_1784_pos 0
+#define reg_tuner_data_1791_1784_len 8
+#define reg_tuner_data_1791_1784_lsb 1784
+#define xd_p_reg_tuner_data_1799_1792 (*(volatile byte xdata *) 0xF0E0)
+#define p_reg_tuner_data_1799_1792 0xF0E0
+#define reg_tuner_data_1799_1792_pos 0
+#define reg_tuner_data_1799_1792_len 8
+#define reg_tuner_data_1799_1792_lsb 1792
+#define xd_p_reg_tuner_data_1807_1800 (*(volatile byte xdata *) 0xF0E1)
+#define p_reg_tuner_data_1807_1800 0xF0E1
+#define reg_tuner_data_1807_1800_pos 0
+#define reg_tuner_data_1807_1800_len 8
+#define reg_tuner_data_1807_1800_lsb 1800
+#define xd_p_reg_tuner_data_1815_1808 (*(volatile byte xdata *) 0xF0E2)
+#define p_reg_tuner_data_1815_1808 0xF0E2
+#define reg_tuner_data_1815_1808_pos 0
+#define reg_tuner_data_1815_1808_len 8
+#define reg_tuner_data_1815_1808_lsb 1808
+#define xd_p_reg_tuner_data_1823_1816 (*(volatile byte xdata *) 0xF0E3)
+#define p_reg_tuner_data_1823_1816 0xF0E3
+#define reg_tuner_data_1823_1816_pos 0
+#define reg_tuner_data_1823_1816_len 8
+#define reg_tuner_data_1823_1816_lsb 1816
+#define xd_p_reg_tuner_data_1831_1824 (*(volatile byte xdata *) 0xF0E4)
+#define p_reg_tuner_data_1831_1824 0xF0E4
+#define reg_tuner_data_1831_1824_pos 0
+#define reg_tuner_data_1831_1824_len 8
+#define reg_tuner_data_1831_1824_lsb 1824
+#define xd_p_reg_tuner_data_1839_1832 (*(volatile byte xdata *) 0xF0E5)
+#define p_reg_tuner_data_1839_1832 0xF0E5
+#define reg_tuner_data_1839_1832_pos 0
+#define reg_tuner_data_1839_1832_len 8
+#define reg_tuner_data_1839_1832_lsb 1832
+#define xd_p_reg_tuner_data_1847_1840 (*(volatile byte xdata *) 0xF0E6)
+#define p_reg_tuner_data_1847_1840 0xF0E6
+#define reg_tuner_data_1847_1840_pos 0
+#define reg_tuner_data_1847_1840_len 8
+#define reg_tuner_data_1847_1840_lsb 1840
+#define xd_p_reg_tuner_data_1855_1848 (*(volatile byte xdata *) 0xF0E7)
+#define p_reg_tuner_data_1855_1848 0xF0E7
+#define reg_tuner_data_1855_1848_pos 0
+#define reg_tuner_data_1855_1848_len 8
+#define reg_tuner_data_1855_1848_lsb 1848
+#define xd_p_reg_tuner_data_1863_1856 (*(volatile byte xdata *) 0xF0E8)
+#define p_reg_tuner_data_1863_1856 0xF0E8
+#define reg_tuner_data_1863_1856_pos 0
+#define reg_tuner_data_1863_1856_len 8
+#define reg_tuner_data_1863_1856_lsb 1856
+#define xd_p_reg_tuner_data_1871_1864 (*(volatile byte xdata *) 0xF0E9)
+#define p_reg_tuner_data_1871_1864 0xF0E9
+#define reg_tuner_data_1871_1864_pos 0
+#define reg_tuner_data_1871_1864_len 8
+#define reg_tuner_data_1871_1864_lsb 1864
+#define xd_p_reg_tuner_data_1879_1872 (*(volatile byte xdata *) 0xF0EA)
+#define p_reg_tuner_data_1879_1872 0xF0EA
+#define reg_tuner_data_1879_1872_pos 0
+#define reg_tuner_data_1879_1872_len 8
+#define reg_tuner_data_1879_1872_lsb 1872
+#define xd_p_reg_tuner_data_1887_1880 (*(volatile byte xdata *) 0xF0EB)
+#define p_reg_tuner_data_1887_1880 0xF0EB
+#define reg_tuner_data_1887_1880_pos 0
+#define reg_tuner_data_1887_1880_len 8
+#define reg_tuner_data_1887_1880_lsb 1880
+#define xd_p_reg_tuner_data_1895_1888 (*(volatile byte xdata *) 0xF0EC)
+#define p_reg_tuner_data_1895_1888 0xF0EC
+#define reg_tuner_data_1895_1888_pos 0
+#define reg_tuner_data_1895_1888_len 8
+#define reg_tuner_data_1895_1888_lsb 1888
+#define xd_p_reg_tuner_data_1903_1896 (*(volatile byte xdata *) 0xF0ED)
+#define p_reg_tuner_data_1903_1896 0xF0ED
+#define reg_tuner_data_1903_1896_pos 0
+#define reg_tuner_data_1903_1896_len 8
+#define reg_tuner_data_1903_1896_lsb 1896
+#define xd_p_reg_tuner_data_1911_1904 (*(volatile byte xdata *) 0xF0EE)
+#define p_reg_tuner_data_1911_1904 0xF0EE
+#define reg_tuner_data_1911_1904_pos 0
+#define reg_tuner_data_1911_1904_len 8
+#define reg_tuner_data_1911_1904_lsb 1904
+#define xd_p_reg_tuner_data_1919_1912 (*(volatile byte xdata *) 0xF0EF)
+#define p_reg_tuner_data_1919_1912 0xF0EF
+#define reg_tuner_data_1919_1912_pos 0
+#define reg_tuner_data_1919_1912_len 8
+#define reg_tuner_data_1919_1912_lsb 1912
+#define xd_p_reg_tuner_data_1927_1920 (*(volatile byte xdata *) 0xF0F0)
+#define p_reg_tuner_data_1927_1920 0xF0F0
+#define reg_tuner_data_1927_1920_pos 0
+#define reg_tuner_data_1927_1920_len 8
+#define reg_tuner_data_1927_1920_lsb 1920
+#define xd_p_reg_tuner_data_1935_1928 (*(volatile byte xdata *) 0xF0F1)
+#define p_reg_tuner_data_1935_1928 0xF0F1
+#define reg_tuner_data_1935_1928_pos 0
+#define reg_tuner_data_1935_1928_len 8
+#define reg_tuner_data_1935_1928_lsb 1928
+#define xd_p_reg_tuner_data_1943_1936 (*(volatile byte xdata *) 0xF0F2)
+#define p_reg_tuner_data_1943_1936 0xF0F2
+#define reg_tuner_data_1943_1936_pos 0
+#define reg_tuner_data_1943_1936_len 8
+#define reg_tuner_data_1943_1936_lsb 1936
+#define xd_p_reg_tuner_data_1951_1944 (*(volatile byte xdata *) 0xF0F3)
+#define p_reg_tuner_data_1951_1944 0xF0F3
+#define reg_tuner_data_1951_1944_pos 0
+#define reg_tuner_data_1951_1944_len 8
+#define reg_tuner_data_1951_1944_lsb 1944
+#define xd_p_reg_tuner_data_1959_1952 (*(volatile byte xdata *) 0xF0F4)
+#define p_reg_tuner_data_1959_1952 0xF0F4
+#define reg_tuner_data_1959_1952_pos 0
+#define reg_tuner_data_1959_1952_len 8
+#define reg_tuner_data_1959_1952_lsb 1952
+#define xd_p_reg_tuner_data_1967_1960 (*(volatile byte xdata *) 0xF0F5)
+#define p_reg_tuner_data_1967_1960 0xF0F5
+#define reg_tuner_data_1967_1960_pos 0
+#define reg_tuner_data_1967_1960_len 8
+#define reg_tuner_data_1967_1960_lsb 1960
+#define xd_p_reg_tuner_data_1975_1968 (*(volatile byte xdata *) 0xF0F6)
+#define p_reg_tuner_data_1975_1968 0xF0F6
+#define reg_tuner_data_1975_1968_pos 0
+#define reg_tuner_data_1975_1968_len 8
+#define reg_tuner_data_1975_1968_lsb 1968
+#define xd_p_reg_tuner_data_1983_1976 (*(volatile byte xdata *) 0xF0F7)
+#define p_reg_tuner_data_1983_1976 0xF0F7
+#define reg_tuner_data_1983_1976_pos 0
+#define reg_tuner_data_1983_1976_len 8
+#define reg_tuner_data_1983_1976_lsb 1976
+#define xd_p_reg_tuner_data_1991_1984 (*(volatile byte xdata *) 0xF0F8)
+#define p_reg_tuner_data_1991_1984 0xF0F8
+#define reg_tuner_data_1991_1984_pos 0
+#define reg_tuner_data_1991_1984_len 8
+#define reg_tuner_data_1991_1984_lsb 1984
+#define xd_p_reg_tuner_data_1999_1992 (*(volatile byte xdata *) 0xF0F9)
+#define p_reg_tuner_data_1999_1992 0xF0F9
+#define reg_tuner_data_1999_1992_pos 0
+#define reg_tuner_data_1999_1992_len 8
+#define reg_tuner_data_1999_1992_lsb 1992
+#define xd_p_reg_tuner_data_2007_2000 (*(volatile byte xdata *) 0xF0FA)
+#define p_reg_tuner_data_2007_2000 0xF0FA
+#define reg_tuner_data_2007_2000_pos 0
+#define reg_tuner_data_2007_2000_len 8
+#define reg_tuner_data_2007_2000_lsb 2000
+#define xd_p_reg_tuner_data_2015_2008 (*(volatile byte xdata *) 0xF0FB)
+#define p_reg_tuner_data_2015_2008 0xF0FB
+#define reg_tuner_data_2015_2008_pos 0
+#define reg_tuner_data_2015_2008_len 8
+#define reg_tuner_data_2015_2008_lsb 2008
+#define xd_p_reg_tuner_data_2023_2016 (*(volatile byte xdata *) 0xF0FC)
+#define p_reg_tuner_data_2023_2016 0xF0FC
+#define reg_tuner_data_2023_2016_pos 0
+#define reg_tuner_data_2023_2016_len 8
+#define reg_tuner_data_2023_2016_lsb 2016
+#define xd_p_reg_tuner_data_2031_2024 (*(volatile byte xdata *) 0xF0FD)
+#define p_reg_tuner_data_2031_2024 0xF0FD
+#define reg_tuner_data_2031_2024_pos 0
+#define reg_tuner_data_2031_2024_len 8
+#define reg_tuner_data_2031_2024_lsb 2024
+#define xd_p_reg_tuner_data_2039_2032 (*(volatile byte xdata *) 0xF0FE)
+#define p_reg_tuner_data_2039_2032 0xF0FE
+#define reg_tuner_data_2039_2032_pos 0
+#define reg_tuner_data_2039_2032_len 8
+#define reg_tuner_data_2039_2032_lsb 2032
+#define xd_p_reg_tuner_data_2047_2040 (*(volatile byte xdata *) 0xF0FF)
+#define p_reg_tuner_data_2047_2040 0xF0FF
+#define reg_tuner_data_2047_2040_pos 0
+#define reg_tuner_data_2047_2040_len 8
+#define reg_tuner_data_2047_2040_lsb 2040
+#define xd_p_reg_tuner_master_rd_wr (*(volatile byte xdata *) 0xF100)
+#define p_reg_tuner_master_rd_wr 0xF100
+#define reg_tuner_master_rd_wr_pos 0
+#define reg_tuner_master_rd_wr_len 1
+#define reg_tuner_master_rd_wr_lsb 0
+#define xd_p_reg_tuner_master_length (*(volatile byte xdata *) 0xF101)
+#define p_reg_tuner_master_length 0xF101
+#define reg_tuner_master_length_pos 0
+#define reg_tuner_master_length_len 8
+#define reg_tuner_master_length_lsb 0
+#define xd_p_reg_tuner_cmd_exe (*(volatile byte xdata *) 0xF102)
+#define p_reg_tuner_cmd_exe 0xF102
+#define reg_tuner_cmd_exe_pos 0
+#define reg_tuner_cmd_exe_len 1
+#define reg_tuner_cmd_exe_lsb 0
+#define xd_p_reg_tuner_wdat_done (*(volatile byte xdata *) 0xF102)
+#define p_reg_tuner_wdat_done 0xF102
+#define reg_tuner_wdat_done_pos 1
+#define reg_tuner_wdat_done_len 1
+#define reg_tuner_wdat_done_lsb 0
+#define xd_p_reg_tuner_wdat_fail (*(volatile byte xdata *) 0xF102)
+#define p_reg_tuner_wdat_fail 0xF102
+#define reg_tuner_wdat_fail_pos 2
+#define reg_tuner_wdat_fail_len 1
+#define reg_tuner_wdat_fail_lsb 0
+#define xd_p_reg_tuner_ofsm_i2cm_rdat_rdy (*(volatile byte xdata *) 0xF102)
+#define p_reg_tuner_ofsm_i2cm_rdat_rdy 0xF102
+#define reg_tuner_ofsm_i2cm_rdat_rdy_pos 3
+#define reg_tuner_ofsm_i2cm_rdat_rdy_len 1
+#define reg_tuner_ofsm_i2cm_rdat_rdy_lsb 0
+#define xd_p_reg_tuner_current_state (*(volatile byte xdata *) 0xF102)
+#define p_reg_tuner_current_state 0xF102
+#define reg_tuner_current_state_pos 4
+#define reg_tuner_current_state_len 3
+#define reg_tuner_current_state_lsb 0
+#define xd_p_reg_one_cycle_counter_tuner (*(volatile byte xdata *) 0xF103)
+#define p_reg_one_cycle_counter_tuner 0xF103
+#define reg_one_cycle_counter_tuner_pos 0
+#define reg_one_cycle_counter_tuner_len 8
+#define reg_one_cycle_counter_tuner_lsb 0
+#define xd_p_reg_msb_lsb (*(volatile byte xdata *) 0xF104)
+#define p_reg_msb_lsb 0xF104
+#define reg_msb_lsb_pos 0
+#define reg_msb_lsb_len 1
+#define reg_msb_lsb_lsb 0
+#define xd_p_reg_ofdm_rst (*(volatile byte xdata *) 0xF104)
+#define p_reg_ofdm_rst 0xF104
+#define xd_p_reg_sel_thirdi2c (*(volatile byte xdata *) 0xF104)
+#define p_reg_sel_thirdi2c 0xF104
+#define reg_sel_thirdi2c_pos 2
+#define reg_sel_thirdi2c_len 1
+#define reg_sel_thirdi2c_lsb 0
+#define xd_p_reg_sel_tuner (*(volatile byte xdata *) 0xF104)
+#define p_reg_sel_tuner 0xF104
+#define xd_p_reg_ofdm_rst_en (*(volatile byte xdata *) 0xF104)
+#define p_reg_ofdm_rst_en 0xF104
+#define xd_p_reg_sdio_cccr_v (*(volatile byte xdata *) 0xF140)
+#define p_reg_sdio_cccr_v 0xF140
+#define reg_sdio_cccr_v_pos 0
+#define reg_sdio_cccr_v_len 4
+#define reg_sdio_cccr_v_lsb 0
+#define xd_p_reg_sdio_sdio_v (*(volatile byte xdata *) 0xF140)
+#define p_reg_sdio_sdio_v 0xF140
+#define reg_sdio_sdio_v_pos 4
+#define reg_sdio_sdio_v_len 4
+#define reg_sdio_sdio_v_lsb 0
+#define xd_p_reg_sdioc_sd_v (*(volatile byte xdata *) 0xF141)
+#define p_reg_sdioc_sd_v 0xF141
+#define reg_sdioc_sd_v_pos 0
+#define reg_sdioc_sd_v_len 4
+#define reg_sdioc_sd_v_lsb 0
+#define xd_p_reg_sdioc_ior1 (*(volatile byte xdata *) 0xF143)
+#define p_reg_sdioc_ior1 0xF143
+#define reg_sdioc_ior1_pos 1
+#define reg_sdioc_ior1_len 1
+#define reg_sdioc_ior1_lsb 0
+#define xd_p_reg_sdioc_int1 (*(volatile byte xdata *) 0xF145)
+#define p_reg_sdioc_int1 0xF145
+#define reg_sdioc_int1_pos 1
+#define reg_sdioc_int1_len 1
+#define reg_sdioc_int1_lsb 0
+#define xd_p_reg_sdioc_scsi (*(volatile byte xdata *) 0xF147)
+#define p_reg_sdioc_scsi 0xF147
+#define reg_sdioc_scsi_pos 6
+#define reg_sdioc_scsi_len 1
+#define reg_sdioc_scsi_lsb 0
+#define xd_p_reg_sdioc_sdc (*(volatile byte xdata *) 0xF148)
+#define p_reg_sdioc_sdc 0xF148
+#define reg_sdioc_sdc_pos 0
+#define reg_sdioc_sdc_len 1
+#define reg_sdioc_sdc_lsb 0
+#define xd_p_reg_sdioc_smb (*(volatile byte xdata *) 0xF148)
+#define p_reg_sdioc_smb 0xF148
+#define reg_sdioc_smb_pos 1
+#define reg_sdioc_smb_len 1
+#define reg_sdioc_smb_lsb 0
+#define xd_p_reg_sdioc_srw (*(volatile byte xdata *) 0xF148)
+#define p_reg_sdioc_srw 0xF148
+#define reg_sdioc_srw_pos 2
+#define reg_sdioc_srw_len 1
+#define reg_sdioc_srw_lsb 0
+#define xd_p_reg_sdioc_sbs (*(volatile byte xdata *) 0xF148)
+#define p_reg_sdioc_sbs 0xF148
+#define reg_sdioc_sbs_pos 3
+#define reg_sdioc_sbs_len 1
+#define reg_sdioc_sbs_lsb 0
+#define xd_p_reg_sdioc_s4mi (*(volatile byte xdata *) 0xF148)
+#define p_reg_sdioc_s4mi 0xF148
+#define reg_sdioc_s4mi_pos 4
+#define reg_sdioc_s4mi_len 1
+#define reg_sdioc_s4mi_lsb 0
+#define xd_p_reg_sdioc_lsc (*(volatile byte xdata *) 0xF148)
+#define p_reg_sdioc_lsc 0xF148
+#define reg_sdioc_lsc_pos 6
+#define reg_sdioc_lsc_len 1
+#define reg_sdioc_lsc_lsb 0
+#define xd_p_reg_sdioc_4bls (*(volatile byte xdata *) 0xF148)
+#define p_reg_sdioc_4bls 0xF148
+#define reg_sdioc_4bls_pos 7
+#define reg_sdioc_4bls_len 1
+#define reg_sdioc_4bls_lsb 0
+#define xd_p_reg_sdioc_cis_7_0 (*(volatile byte xdata *) 0xF149)
+#define p_reg_sdioc_cis_7_0 0xF149
+#define reg_sdioc_cis_7_0_pos 0
+#define reg_sdioc_cis_7_0_len 8
+#define reg_sdioc_cis_7_0_lsb 0
+#define xd_p_reg_sdioc_cis_15_8 (*(volatile byte xdata *) 0xF14A)
+#define p_reg_sdioc_cis_15_8 0xF14A
+#define reg_sdioc_cis_15_8_pos 0
+#define reg_sdioc_cis_15_8_len 8
+#define reg_sdioc_cis_15_8_lsb 8
+#define xd_p_reg_sdioc_cis_23_16 (*(volatile byte xdata *) 0xF14B)
+#define p_reg_sdioc_cis_23_16 0xF14B
+#define reg_sdioc_cis_23_16_pos 0
+#define reg_sdioc_cis_23_16_len 8
+#define reg_sdioc_cis_23_16_lsb 16
+#define xd_p_reg_sdioc_fs (*(volatile byte xdata *) 0xF14D)
+#define p_reg_sdioc_fs 0xF14D
+#define reg_sdioc_fs_pos 0
+#define reg_sdioc_fs_len 4
+#define reg_sdioc_fs_lsb 0
+#define xd_p_reg_sdioc_df (*(volatile byte xdata *) 0xF14D)
+#define p_reg_sdioc_df 0xF14D
+#define reg_sdioc_df_pos 7
+#define reg_sdioc_df_len 1
+#define reg_sdioc_df_lsb 0
+#define xd_p_reg_sdioc_ex1 (*(volatile byte xdata *) 0xF14E)
+#define p_reg_sdioc_ex1 0xF14E
+#define reg_sdioc_ex1_pos 1
+#define reg_sdioc_ex1_len 1
+#define reg_sdioc_ex1_lsb 0
+#define xd_p_reg_sdioc_rf1 (*(volatile byte xdata *) 0xF14F)
+#define p_reg_sdioc_rf1 0xF14F
+#define reg_sdioc_rf1_pos 1
+#define reg_sdioc_rf1_len 1
+#define reg_sdioc_rf1_lsb 0
+#define xd_p_reg_sdioc_smpc (*(volatile byte xdata *) 0xF152)
+#define p_reg_sdioc_smpc 0xF152
+#define reg_sdioc_smpc_pos 0
+#define reg_sdioc_smpc_len 1
+#define reg_sdioc_smpc_lsb 0
+#define xd_p_reg_sdioc_f1_code (*(volatile byte xdata *) 0xF160)
+#define p_reg_sdioc_f1_code 0xF160
+#define reg_sdioc_f1_code_pos 0
+#define reg_sdioc_f1_code_len 4
+#define reg_sdioc_f1_code_lsb 0
+#define xd_p_reg_sdioc_scsa (*(volatile byte xdata *) 0xF160)
+#define p_reg_sdioc_scsa 0xF160
+#define reg_sdioc_scsa_pos 6
+#define reg_sdioc_scsa_len 1
+#define reg_sdioc_scsa_lsb 0
+#define xd_p_reg_sdioc_csa_en (*(volatile byte xdata *) 0xF160)
+#define p_reg_sdioc_csa_en 0xF160
+#define reg_sdioc_csa_en_pos 7
+#define reg_sdioc_csa_en_len 1
+#define reg_sdioc_csa_en_lsb 0
+#define xd_p_reg_sdioc_f1_ext_code (*(volatile byte xdata *) 0xF161)
+#define p_reg_sdioc_f1_ext_code 0xF161
+#define reg_sdioc_f1_ext_code_pos 0
+#define reg_sdioc_f1_ext_code_len 8
+#define reg_sdioc_f1_ext_code_lsb 0
+#define xd_p_reg_sdioc_sps (*(volatile byte xdata *) 0xF162)
+#define p_reg_sdioc_sps 0xF162
+#define reg_sdioc_sps_pos 0
+#define reg_sdioc_sps_len 1
+#define reg_sdioc_sps_lsb 0
+#define xd_p_reg_sdioc_func1_cis_ptr_7_0 (*(volatile byte xdata *) 0xF169)
+#define p_reg_sdioc_func1_cis_ptr_7_0 0xF169
+#define reg_sdioc_func1_cis_ptr_7_0_pos 0
+#define reg_sdioc_func1_cis_ptr_7_0_len 8
+#define reg_sdioc_func1_cis_ptr_7_0_lsb 0
+#define xd_p_reg_sdioc_func1_cis_ptr_15_8 (*(volatile byte xdata *) 0xF16A)
+#define p_reg_sdioc_func1_cis_ptr_15_8 0xF16A
+#define reg_sdioc_func1_cis_ptr_15_8_pos 0
+#define reg_sdioc_func1_cis_ptr_15_8_len 8
+#define reg_sdioc_func1_cis_ptr_15_8_lsb 8
+#define xd_p_reg_sdioc_func1_cis_ptr_23_16 (*(volatile byte xdata *) 0xF16B)
+#define p_reg_sdioc_func1_cis_ptr_23_16 0xF16B
+#define reg_sdioc_func1_cis_ptr_23_16_pos 0
+#define reg_sdioc_func1_cis_ptr_23_16_len 8
+#define reg_sdioc_func1_cis_ptr_23_16_lsb 16
+#define xd_p_reg_sdio_FUNCID0_0 (*(volatile byte xdata *) 0xF180)
+#define p_reg_sdio_FUNCID0_0 0xF180
+#define reg_sdio_FUNCID0_0_pos 0
+#define reg_sdio_FUNCID0_0_len 8
+#define reg_sdio_FUNCID0_0_lsb 0
+#define xd_p_reg_sdio_FUNCID0_1 (*(volatile byte xdata *) 0xF181)
+#define p_reg_sdio_FUNCID0_1 0xF181
+#define reg_sdio_FUNCID0_1_pos 0
+#define reg_sdio_FUNCID0_1_len 8
+#define reg_sdio_FUNCID0_1_lsb 0
+#define xd_p_reg_sdio_FUNCID0_2 (*(volatile byte xdata *) 0xF182)
+#define p_reg_sdio_FUNCID0_2 0xF182
+#define reg_sdio_FUNCID0_2_pos 0
+#define reg_sdio_FUNCID0_2_len 8
+#define reg_sdio_FUNCID0_2_lsb 0
+#define xd_p_reg_sdio_FUNCID0_3 (*(volatile byte xdata *) 0xF183)
+#define p_reg_sdio_FUNCID0_3 0xF183
+#define reg_sdio_FUNCID0_3_pos 0
+#define reg_sdio_FUNCID0_3_len 8
+#define reg_sdio_FUNCID0_3_lsb 0
+#define xd_p_reg_sdio_MANFID0_0 (*(volatile byte xdata *) 0xF184)
+#define p_reg_sdio_MANFID0_0 0xF184
+#define reg_sdio_MANFID0_0_pos 0
+#define reg_sdio_MANFID0_0_len 8
+#define reg_sdio_MANFID0_0_lsb 0
+#define xd_p_reg_sdio_MANFID0_1 (*(volatile byte xdata *) 0xF185)
+#define p_reg_sdio_MANFID0_1 0xF185
+#define reg_sdio_MANFID0_1_pos 0
+#define reg_sdio_MANFID0_1_len 8
+#define reg_sdio_MANFID0_1_lsb 0
+#define xd_p_reg_sdio_MANFID0_2_7_0 (*(volatile byte xdata *) 0xF186)
+#define p_reg_sdio_MANFID0_2_7_0 0xF186
+#define reg_sdio_MANFID0_2_7_0_pos 0
+#define reg_sdio_MANFID0_2_7_0_len 8
+#define reg_sdio_MANFID0_2_7_0_lsb 0
+#define xd_p_reg_sdio_MANFID0_2_15_8 (*(volatile byte xdata *) 0xF187)
+#define p_reg_sdio_MANFID0_2_15_8 0xF187
+#define reg_sdio_MANFID0_2_15_8_pos 0
+#define reg_sdio_MANFID0_2_15_8_len 8
+#define reg_sdio_MANFID0_2_15_8_lsb 8
+#define xd_p_reg_sdio_MANFID0_4_7_0 (*(volatile byte xdata *) 0xF188)
+#define p_reg_sdio_MANFID0_4_7_0 0xF188
+#define reg_sdio_MANFID0_4_7_0_pos 0
+#define reg_sdio_MANFID0_4_7_0_len 8
+#define reg_sdio_MANFID0_4_7_0_lsb 0
+#define xd_p_reg_sdio_MANFID0_4_15_8 (*(volatile byte xdata *) 0xF189)
+#define p_reg_sdio_MANFID0_4_15_8 0xF189
+#define reg_sdio_MANFID0_4_15_8_pos 0
+#define reg_sdio_MANFID0_4_15_8_len 8
+#define reg_sdio_MANFID0_4_15_8_lsb 8
+#define xd_p_reg_sdio_FUNCE0_0 (*(volatile byte xdata *) 0xF18A)
+#define p_reg_sdio_FUNCE0_0 0xF18A
+#define reg_sdio_FUNCE0_0_pos 0
+#define reg_sdio_FUNCE0_0_len 8
+#define reg_sdio_FUNCE0_0_lsb 0
+#define xd_p_reg_sdio_FUNCE0_1 (*(volatile byte xdata *) 0xF18B)
+#define p_reg_sdio_FUNCE0_1 0xF18B
+#define reg_sdio_FUNCE0_1_pos 0
+#define reg_sdio_FUNCE0_1_len 8
+#define reg_sdio_FUNCE0_1_lsb 0
+#define xd_p_reg_sdio_FUNCE0_2 (*(volatile byte xdata *) 0xF18C)
+#define p_reg_sdio_FUNCE0_2 0xF18C
+#define reg_sdio_FUNCE0_2_pos 0
+#define reg_sdio_FUNCE0_2_len 8
+#define reg_sdio_FUNCE0_2_lsb 0
+#define xd_p_reg_sdio_FUNCE0_3_7_0 (*(volatile byte xdata *) 0xF18D)
+#define p_reg_sdio_FUNCE0_3_7_0 0xF18D
+#define reg_sdio_FUNCE0_3_7_0_pos 0
+#define reg_sdio_FUNCE0_3_7_0_len 8
+#define reg_sdio_FUNCE0_3_7_0_lsb 0
+#define xd_p_reg_sdio_FUNCE0_3_15_8 (*(volatile byte xdata *) 0xF18E)
+#define p_reg_sdio_FUNCE0_3_15_8 0xF18E
+#define reg_sdio_FUNCE0_3_15_8_pos 0
+#define reg_sdio_FUNCE0_3_15_8_len 8
+#define reg_sdio_FUNCE0_3_15_8_lsb 8
+#define xd_p_reg_sdio_FUNCE0_5 (*(volatile byte xdata *) 0xF18F)
+#define p_reg_sdio_FUNCE0_5 0xF18F
+#define reg_sdio_FUNCE0_5_pos 0
+#define reg_sdio_FUNCE0_5_len 8
+#define reg_sdio_FUNCE0_5_lsb 0
+#define xd_p_reg_sdio_VERS_10_0 (*(volatile byte xdata *) 0xF190)
+#define p_reg_sdio_VERS_10_0 0xF190
+#define reg_sdio_VERS_10_0_pos 0
+#define reg_sdio_VERS_10_0_len 8
+#define reg_sdio_VERS_10_0_lsb 0
+#define xd_p_reg_sdio_VERS_10_1 (*(volatile byte xdata *) 0xF191)
+#define p_reg_sdio_VERS_10_1 0xF191
+#define reg_sdio_VERS_10_1_pos 0
+#define reg_sdio_VERS_10_1_len 8
+#define reg_sdio_VERS_10_1_lsb 0
+#define xd_p_reg_sdio_VERS_10_2 (*(volatile byte xdata *) 0xF192)
+#define p_reg_sdio_VERS_10_2 0xF192
+#define reg_sdio_VERS_10_2_pos 0
+#define reg_sdio_VERS_10_2_len 8
+#define reg_sdio_VERS_10_2_lsb 0
+#define xd_p_reg_sdio_VERS_10_3 (*(volatile byte xdata *) 0xF193)
+#define p_reg_sdio_VERS_10_3 0xF193
+#define reg_sdio_VERS_10_3_pos 0
+#define reg_sdio_VERS_10_3_len 8
+#define reg_sdio_VERS_10_3_lsb 0
+#define xd_p_reg_sdio_VERS_10_4 (*(volatile byte xdata *) 0xF194)
+#define p_reg_sdio_VERS_10_4 0xF194
+#define reg_sdio_VERS_10_4_pos 0
+#define reg_sdio_VERS_10_4_len 8
+#define reg_sdio_VERS_10_4_lsb 0
+#define xd_p_reg_sdio_VERS_10_5 (*(volatile byte xdata *) 0xF195)
+#define p_reg_sdio_VERS_10_5 0xF195
+#define reg_sdio_VERS_10_5_pos 0
+#define reg_sdio_VERS_10_5_len 8
+#define reg_sdio_VERS_10_5_lsb 0
+#define xd_p_reg_sdio_VERS_10_6 (*(volatile byte xdata *) 0xF196)
+#define p_reg_sdio_VERS_10_6 0xF196
+#define reg_sdio_VERS_10_6_pos 0
+#define reg_sdio_VERS_10_6_len 8
+#define reg_sdio_VERS_10_6_lsb 0
+#define xd_p_reg_sdio_VERS_10_7 (*(volatile byte xdata *) 0xF197)
+#define p_reg_sdio_VERS_10_7 0xF197
+#define reg_sdio_VERS_10_7_pos 0
+#define reg_sdio_VERS_10_7_len 8
+#define reg_sdio_VERS_10_7_lsb 0
+#define xd_p_reg_sdio_VERS_10_8 (*(volatile byte xdata *) 0xF198)
+#define p_reg_sdio_VERS_10_8 0xF198
+#define reg_sdio_VERS_10_8_pos 0
+#define reg_sdio_VERS_10_8_len 8
+#define reg_sdio_VERS_10_8_lsb 0
+#define xd_p_reg_sdio_VERS_10_9 (*(volatile byte xdata *) 0xF199)
+#define p_reg_sdio_VERS_10_9 0xF199
+#define reg_sdio_VERS_10_9_pos 0
+#define reg_sdio_VERS_10_9_len 8
+#define reg_sdio_VERS_10_9_lsb 0
+#define xd_p_reg_sdio_VERS_10_A (*(volatile byte xdata *) 0xF19A)
+#define p_reg_sdio_VERS_10_A 0xF19A
+#define reg_sdio_VERS_10_A_pos 0
+#define reg_sdio_VERS_10_A_len 8
+#define reg_sdio_VERS_10_A_lsb 0
+#define xd_p_reg_sdio_VERS_10_B (*(volatile byte xdata *) 0xF19B)
+#define p_reg_sdio_VERS_10_B 0xF19B
+#define reg_sdio_VERS_10_B_pos 0
+#define reg_sdio_VERS_10_B_len 8
+#define reg_sdio_VERS_10_B_lsb 0
+#define xd_p_reg_sdio_VERS_10_C (*(volatile byte xdata *) 0xF19C)
+#define p_reg_sdio_VERS_10_C 0xF19C
+#define reg_sdio_VERS_10_C_pos 0
+#define reg_sdio_VERS_10_C_len 8
+#define reg_sdio_VERS_10_C_lsb 0
+#define xd_p_reg_sdio_VERS_10_D (*(volatile byte xdata *) 0xF19D)
+#define p_reg_sdio_VERS_10_D 0xF19D
+#define reg_sdio_VERS_10_D_pos 0
+#define reg_sdio_VERS_10_D_len 8
+#define reg_sdio_VERS_10_D_lsb 0
+#define xd_p_reg_sdio_VERS_10_E (*(volatile byte xdata *) 0xF19E)
+#define p_reg_sdio_VERS_10_E 0xF19E
+#define reg_sdio_VERS_10_E_pos 0
+#define reg_sdio_VERS_10_E_len 8
+#define reg_sdio_VERS_10_E_lsb 0
+#define xd_p_reg_sdio_VERS_10_F (*(volatile byte xdata *) 0xF19F)
+#define p_reg_sdio_VERS_10_F 0xF19F
+#define reg_sdio_VERS_10_F_pos 0
+#define reg_sdio_VERS_10_F_len 8
+#define reg_sdio_VERS_10_F_lsb 0
+#define xd_p_reg_sdio_VERS_10_10 (*(volatile byte xdata *) 0xF1A0)
+#define p_reg_sdio_VERS_10_10 0xF1A0
+#define reg_sdio_VERS_10_10_pos 0
+#define reg_sdio_VERS_10_10_len 8
+#define reg_sdio_VERS_10_10_lsb 0
+#define xd_p_reg_sdio_VERS_10_11 (*(volatile byte xdata *) 0xF1A1)
+#define p_reg_sdio_VERS_10_11 0xF1A1
+#define reg_sdio_VERS_10_11_pos 0
+#define reg_sdio_VERS_10_11_len 8
+#define reg_sdio_VERS_10_11_lsb 0
+#define xd_p_reg_sdio_VERS_10_12 (*(volatile byte xdata *) 0xF1A2)
+#define p_reg_sdio_VERS_10_12 0xF1A2
+#define reg_sdio_VERS_10_12_pos 0
+#define reg_sdio_VERS_10_12_len 8
+#define reg_sdio_VERS_10_12_lsb 0
+#define xd_p_reg_sdio_VERS_10_13 (*(volatile byte xdata *) 0xF1A3)
+#define p_reg_sdio_VERS_10_13 0xF1A3
+#define reg_sdio_VERS_10_13_pos 0
+#define reg_sdio_VERS_10_13_len 8
+#define reg_sdio_VERS_10_13_lsb 0
+#define xd_p_reg_sdio_VERS_10_14 (*(volatile byte xdata *) 0xF1A4)
+#define p_reg_sdio_VERS_10_14 0xF1A4
+#define reg_sdio_VERS_10_14_pos 0
+#define reg_sdio_VERS_10_14_len 8
+#define reg_sdio_VERS_10_14_lsb 0
+#define xd_p_reg_sdio_VERS_10_15 (*(volatile byte xdata *) 0xF1A5)
+#define p_reg_sdio_VERS_10_15 0xF1A5
+#define reg_sdio_VERS_10_15_pos 0
+#define reg_sdio_VERS_10_15_len 8
+#define reg_sdio_VERS_10_15_lsb 0
+#define xd_p_reg_sdio_VERS_10_16 (*(volatile byte xdata *) 0xF1A6)
+#define p_reg_sdio_VERS_10_16 0xF1A6
+#define reg_sdio_VERS_10_16_pos 0
+#define reg_sdio_VERS_10_16_len 8
+#define reg_sdio_VERS_10_16_lsb 0
+#define xd_p_reg_sdio_VERS_10_17 (*(volatile byte xdata *) 0xF1A7)
+#define p_reg_sdio_VERS_10_17 0xF1A7
+#define reg_sdio_VERS_10_17_pos 0
+#define reg_sdio_VERS_10_17_len 8
+#define reg_sdio_VERS_10_17_lsb 0
+#define xd_p_reg_sdio_VERS_10_18 (*(volatile byte xdata *) 0xF1A8)
+#define p_reg_sdio_VERS_10_18 0xF1A8
+#define reg_sdio_VERS_10_18_pos 0
+#define reg_sdio_VERS_10_18_len 8
+#define reg_sdio_VERS_10_18_lsb 0
+#define xd_p_reg_sdio_VERS_10_19 (*(volatile byte xdata *) 0xF1A9)
+#define p_reg_sdio_VERS_10_19 0xF1A9
+#define reg_sdio_VERS_10_19_pos 0
+#define reg_sdio_VERS_10_19_len 8
+#define reg_sdio_VERS_10_19_lsb 0
+#define xd_p_reg_sdio_VERS_10_1A (*(volatile byte xdata *) 0xF1AA)
+#define p_reg_sdio_VERS_10_1A 0xF1AA
+#define reg_sdio_VERS_10_1A_pos 0
+#define reg_sdio_VERS_10_1A_len 8
+#define reg_sdio_VERS_10_1A_lsb 0
+#define xd_p_reg_sdio_VERS_10_1B (*(volatile byte xdata *) 0xF1AB)
+#define p_reg_sdio_VERS_10_1B 0xF1AB
+#define reg_sdio_VERS_10_1B_pos 0
+#define reg_sdio_VERS_10_1B_len 8
+#define reg_sdio_VERS_10_1B_lsb 0
+#define xd_p_reg_sdio_VERS_10_1C (*(volatile byte xdata *) 0xF1AC)
+#define p_reg_sdio_VERS_10_1C 0xF1AC
+#define reg_sdio_VERS_10_1C_pos 0
+#define reg_sdio_VERS_10_1C_len 8
+#define reg_sdio_VERS_10_1C_lsb 0
+#define xd_p_reg_sdio_VERS_10_1D (*(volatile byte xdata *) 0xF1AD)
+#define p_reg_sdio_VERS_10_1D 0xF1AD
+#define reg_sdio_VERS_10_1D_pos 0
+#define reg_sdio_VERS_10_1D_len 8
+#define reg_sdio_VERS_10_1D_lsb 0
+#define xd_p_reg_sdio_VERS_10_1E (*(volatile byte xdata *) 0xF1AE)
+#define p_reg_sdio_VERS_10_1E 0xF1AE
+#define reg_sdio_VERS_10_1E_pos 0
+#define reg_sdio_VERS_10_1E_len 8
+#define reg_sdio_VERS_10_1E_lsb 0
+#define xd_p_reg_sdio_VERS_10_1F (*(volatile byte xdata *) 0xF1AF)
+#define p_reg_sdio_VERS_10_1F 0xF1AF
+#define reg_sdio_VERS_10_1F_pos 0
+#define reg_sdio_VERS_10_1F_len 8
+#define reg_sdio_VERS_10_1F_lsb 0
+#define xd_p_reg_sdio_VERS_10_20 (*(volatile byte xdata *) 0xF1B0)
+#define p_reg_sdio_VERS_10_20 0xF1B0
+#define reg_sdio_VERS_10_20_pos 0
+#define reg_sdio_VERS_10_20_len 8
+#define reg_sdio_VERS_10_20_lsb 0
+#define xd_p_reg_sdio_VERS_10_21 (*(volatile byte xdata *) 0xF1B1)
+#define p_reg_sdio_VERS_10_21 0xF1B1
+#define reg_sdio_VERS_10_21_pos 0
+#define reg_sdio_VERS_10_21_len 8
+#define reg_sdio_VERS_10_21_lsb 0
+#define xd_p_reg_sdio_VERS_10_22 (*(volatile byte xdata *) 0xF1B2)
+#define p_reg_sdio_VERS_10_22 0xF1B2
+#define reg_sdio_VERS_10_22_pos 0
+#define reg_sdio_VERS_10_22_len 8
+#define reg_sdio_VERS_10_22_lsb 0
+#define xd_p_reg_sdio_VERS_10_23 (*(volatile byte xdata *) 0xF1B3)
+#define p_reg_sdio_VERS_10_23 0xF1B3
+#define reg_sdio_VERS_10_23_pos 0
+#define reg_sdio_VERS_10_23_len 8
+#define reg_sdio_VERS_10_23_lsb 0
+#define xd_p_reg_sdio_VERS_10_24 (*(volatile byte xdata *) 0xF1B4)
+#define p_reg_sdio_VERS_10_24 0xF1B4
+#define reg_sdio_VERS_10_24_pos 0
+#define reg_sdio_VERS_10_24_len 8
+#define reg_sdio_VERS_10_24_lsb 0
+#define xd_p_reg_sdio_VERS_10_25 (*(volatile byte xdata *) 0xF1B5)
+#define p_reg_sdio_VERS_10_25 0xF1B5
+#define reg_sdio_VERS_10_25_pos 0
+#define reg_sdio_VERS_10_25_len 8
+#define reg_sdio_VERS_10_25_lsb 0
+#define xd_p_reg_sdio_VERS_10_26 (*(volatile byte xdata *) 0xF1B6)
+#define p_reg_sdio_VERS_10_26 0xF1B6
+#define reg_sdio_VERS_10_26_pos 0
+#define reg_sdio_VERS_10_26_len 8
+#define reg_sdio_VERS_10_26_lsb 0
+#define xd_p_reg_sdio_VERS_10_27 (*(volatile byte xdata *) 0xF1B7)
+#define p_reg_sdio_VERS_10_27 0xF1B7
+#define reg_sdio_VERS_10_27_pos 0
+#define reg_sdio_VERS_10_27_len 8
+#define reg_sdio_VERS_10_27_lsb 0
+#define xd_p_reg_sdio_END0 (*(volatile byte xdata *) 0xF1B8)
+#define p_reg_sdio_END0 0xF1B8
+#define reg_sdio_END0_pos 0
+#define reg_sdio_END0_len 8
+#define reg_sdio_END0_lsb 0
+#define xd_p_reg_sdio_FUNCID1_0 (*(volatile byte xdata *) 0xF1C0)
+#define p_reg_sdio_FUNCID1_0 0xF1C0
+#define reg_sdio_FUNCID1_0_pos 0
+#define reg_sdio_FUNCID1_0_len 8
+#define reg_sdio_FUNCID1_0_lsb 0
+#define xd_p_reg_sdio_FUNCID1_1 (*(volatile byte xdata *) 0xF1C1)
+#define p_reg_sdio_FUNCID1_1 0xF1C1
+#define reg_sdio_FUNCID1_1_pos 0
+#define reg_sdio_FUNCID1_1_len 8
+#define reg_sdio_FUNCID1_1_lsb 0
+#define xd_p_reg_sdio_FUNCID1_2 (*(volatile byte xdata *) 0xF1C2)
+#define p_reg_sdio_FUNCID1_2 0xF1C2
+#define reg_sdio_FUNCID1_2_pos 0
+#define reg_sdio_FUNCID1_2_len 8
+#define reg_sdio_FUNCID1_2_lsb 0
+#define xd_p_reg_sdio_FUNCID1_3 (*(volatile byte xdata *) 0xF1C3)
+#define p_reg_sdio_FUNCID1_3 0xF1C3
+#define reg_sdio_FUNCID1_3_pos 0
+#define reg_sdio_FUNCID1_3_len 8
+#define reg_sdio_FUNCID1_3_lsb 0
+#define xd_p_reg_sdio_FUNCE1_0 (*(volatile byte xdata *) 0xF1C4)
+#define p_reg_sdio_FUNCE1_0 0xF1C4
+#define reg_sdio_FUNCE1_0_pos 0
+#define reg_sdio_FUNCE1_0_len 8
+#define reg_sdio_FUNCE1_0_lsb 0
+#define xd_p_reg_sdio_FUNCE1_1 (*(volatile byte xdata *) 0xF1C5)
+#define p_reg_sdio_FUNCE1_1 0xF1C5
+#define reg_sdio_FUNCE1_1_pos 0
+#define reg_sdio_FUNCE1_1_len 8
+#define reg_sdio_FUNCE1_1_lsb 0
+#define xd_p_reg_sdio_FUNCE1_2 (*(volatile byte xdata *) 0xF1C6)
+#define p_reg_sdio_FUNCE1_2 0xF1C6
+#define reg_sdio_FUNCE1_2_pos 0
+#define reg_sdio_FUNCE1_2_len 8
+#define reg_sdio_FUNCE1_2_lsb 0
+#define xd_p_reg_sdio_FUNCE1_3 (*(volatile byte xdata *) 0xF1C7)
+#define p_reg_sdio_FUNCE1_3 0xF1C7
+#define reg_sdio_FUNCE1_3_pos 0
+#define reg_sdio_FUNCE1_3_len 8
+#define reg_sdio_FUNCE1_3_lsb 0
+#define xd_p_reg_sdio_FUNCE1_4 (*(volatile byte xdata *) 0xF1C8)
+#define p_reg_sdio_FUNCE1_4 0xF1C8
+#define reg_sdio_FUNCE1_4_pos 0
+#define reg_sdio_FUNCE1_4_len 8
+#define reg_sdio_FUNCE1_4_lsb 0
+#define xd_p_reg_sdio_FUNCE1_5_7_0 (*(volatile byte xdata *) 0xF1C9)
+#define p_reg_sdio_FUNCE1_5_7_0 0xF1C9
+#define reg_sdio_FUNCE1_5_7_0_pos 0
+#define reg_sdio_FUNCE1_5_7_0_len 8
+#define reg_sdio_FUNCE1_5_7_0_lsb 0
+#define xd_p_reg_sdio_FUNCE1_5_15_8 (*(volatile byte xdata *) 0xF1CA)
+#define p_reg_sdio_FUNCE1_5_15_8 0xF1CA
+#define reg_sdio_FUNCE1_5_15_8_pos 0
+#define reg_sdio_FUNCE1_5_15_8_len 8
+#define reg_sdio_FUNCE1_5_15_8_lsb 8
+#define xd_p_reg_sdio_FUNCE1_5_23_16 (*(volatile byte xdata *) 0xF1CB)
+#define p_reg_sdio_FUNCE1_5_23_16 0xF1CB
+#define reg_sdio_FUNCE1_5_23_16_pos 0
+#define reg_sdio_FUNCE1_5_23_16_len 8
+#define reg_sdio_FUNCE1_5_23_16_lsb 16
+#define xd_p_reg_sdio_FUNCE1_5_31_24 (*(volatile byte xdata *) 0xF1CC)
+#define p_reg_sdio_FUNCE1_5_31_24 0xF1CC
+#define reg_sdio_FUNCE1_5_31_24_pos 0
+#define reg_sdio_FUNCE1_5_31_24_len 8
+#define reg_sdio_FUNCE1_5_31_24_lsb 24
+#define xd_p_reg_sdio_FUNCE1_9_7_0 (*(volatile byte xdata *) 0xF1CD)
+#define p_reg_sdio_FUNCE1_9_7_0 0xF1CD
+#define reg_sdio_FUNCE1_9_7_0_pos 0
+#define reg_sdio_FUNCE1_9_7_0_len 8
+#define reg_sdio_FUNCE1_9_7_0_lsb 0
+#define xd_p_reg_sdio_FUNCE1_9_15_8 (*(volatile byte xdata *) 0xF1CE)
+#define p_reg_sdio_FUNCE1_9_15_8 0xF1CE
+#define reg_sdio_FUNCE1_9_15_8_pos 0
+#define reg_sdio_FUNCE1_9_15_8_len 8
+#define reg_sdio_FUNCE1_9_15_8_lsb 8
+#define xd_p_reg_sdio_FUNCE1_9_23_16 (*(volatile byte xdata *) 0xF1CF)
+#define p_reg_sdio_FUNCE1_9_23_16 0xF1CF
+#define reg_sdio_FUNCE1_9_23_16_pos 0
+#define reg_sdio_FUNCE1_9_23_16_len 8
+#define reg_sdio_FUNCE1_9_23_16_lsb 16
+#define xd_p_reg_sdio_FUNCE1_9_31_24 (*(volatile byte xdata *) 0xF1D0)
+#define p_reg_sdio_FUNCE1_9_31_24 0xF1D0
+#define reg_sdio_FUNCE1_9_31_24_pos 0
+#define reg_sdio_FUNCE1_9_31_24_len 8
+#define reg_sdio_FUNCE1_9_31_24_lsb 24
+#define xd_p_reg_sdio_FUNCE1_D (*(volatile byte xdata *) 0xF1D1)
+#define p_reg_sdio_FUNCE1_D 0xF1D1
+#define reg_sdio_FUNCE1_D_pos 0
+#define reg_sdio_FUNCE1_D_len 8
+#define reg_sdio_FUNCE1_D_lsb 0
+#define xd_p_reg_sdio_FUNCE1_E_7_0 (*(volatile byte xdata *) 0xF1D2)
+#define p_reg_sdio_FUNCE1_E_7_0 0xF1D2
+#define reg_sdio_FUNCE1_E_7_0_pos 0
+#define reg_sdio_FUNCE1_E_7_0_len 8
+#define reg_sdio_FUNCE1_E_7_0_lsb 0
+#define xd_p_reg_sdio_FUNCE1_E_15_8 (*(volatile byte xdata *) 0xF1D3)
+#define p_reg_sdio_FUNCE1_E_15_8 0xF1D3
+#define reg_sdio_FUNCE1_E_15_8_pos 0
+#define reg_sdio_FUNCE1_E_15_8_len 8
+#define reg_sdio_FUNCE1_E_15_8_lsb 8
+#define xd_p_reg_sdio_FUNCE1_10_7_0 (*(volatile byte xdata *) 0xF1D4)
+#define p_reg_sdio_FUNCE1_10_7_0 0xF1D4
+#define reg_sdio_FUNCE1_10_7_0_pos 0
+#define reg_sdio_FUNCE1_10_7_0_len 8
+#define reg_sdio_FUNCE1_10_7_0_lsb 0
+#define xd_p_reg_sdio_FUNCE1_10_15_8 (*(volatile byte xdata *) 0xF1D5)
+#define p_reg_sdio_FUNCE1_10_15_8 0xF1D5
+#define reg_sdio_FUNCE1_10_15_8_pos 0
+#define reg_sdio_FUNCE1_10_15_8_len 8
+#define reg_sdio_FUNCE1_10_15_8_lsb 8
+#define xd_p_reg_sdio_FUNCE1_10_23_16 (*(volatile byte xdata *) 0xF1D6)
+#define p_reg_sdio_FUNCE1_10_23_16 0xF1D6
+#define reg_sdio_FUNCE1_10_23_16_pos 0
+#define reg_sdio_FUNCE1_10_23_16_len 8
+#define reg_sdio_FUNCE1_10_23_16_lsb 16
+#define xd_p_reg_sdio_FUNCE1_10_31_24 (*(volatile byte xdata *) 0xF1D7)
+#define p_reg_sdio_FUNCE1_10_31_24 0xF1D7
+#define reg_sdio_FUNCE1_10_31_24_pos 0
+#define reg_sdio_FUNCE1_10_31_24_len 8
+#define reg_sdio_FUNCE1_10_31_24_lsb 24
+#define xd_p_reg_sdio_FUNCE1_14 (*(volatile byte xdata *) 0xF1D8)
+#define p_reg_sdio_FUNCE1_14 0xF1D8
+#define reg_sdio_FUNCE1_14_pos 0
+#define reg_sdio_FUNCE1_14_len 8
+#define reg_sdio_FUNCE1_14_lsb 0
+#define xd_p_reg_sdio_FUNCE1_15 (*(volatile byte xdata *) 0xF1D9)
+#define p_reg_sdio_FUNCE1_15 0xF1D9
+#define reg_sdio_FUNCE1_15_pos 0
+#define reg_sdio_FUNCE1_15_len 8
+#define reg_sdio_FUNCE1_15_lsb 0
+#define xd_p_reg_sdio_FUNCE1_16 (*(volatile byte xdata *) 0xF1DA)
+#define p_reg_sdio_FUNCE1_16 0xF1DA
+#define reg_sdio_FUNCE1_16_pos 0
+#define reg_sdio_FUNCE1_16_len 8
+#define reg_sdio_FUNCE1_16_lsb 0
+#define xd_p_reg_sdio_FUNCE1_17 (*(volatile byte xdata *) 0xF1DB)
+#define p_reg_sdio_FUNCE1_17 0xF1DB
+#define reg_sdio_FUNCE1_17_pos 0
+#define reg_sdio_FUNCE1_17_len 8
+#define reg_sdio_FUNCE1_17_lsb 0
+#define xd_p_reg_sdio_FUNCE1_18 (*(volatile byte xdata *) 0xF1DC)
+#define p_reg_sdio_FUNCE1_18 0xF1DC
+#define reg_sdio_FUNCE1_18_pos 0
+#define reg_sdio_FUNCE1_18_len 8
+#define reg_sdio_FUNCE1_18_lsb 0
+#define xd_p_reg_sdio_FUNCE1_19 (*(volatile byte xdata *) 0xF1DD)
+#define p_reg_sdio_FUNCE1_19 0xF1DD
+#define reg_sdio_FUNCE1_19_pos 0
+#define reg_sdio_FUNCE1_19_len 8
+#define reg_sdio_FUNCE1_19_lsb 0
+#define xd_p_reg_sdio_FUNCE1_1A_7_0 (*(volatile byte xdata *) 0xF1DE)
+#define p_reg_sdio_FUNCE1_1A_7_0 0xF1DE
+#define reg_sdio_FUNCE1_1A_7_0_pos 0
+#define reg_sdio_FUNCE1_1A_7_0_len 8
+#define reg_sdio_FUNCE1_1A_7_0_lsb 0
+#define xd_p_reg_sdio_FUNCE1_1A_15_8 (*(volatile byte xdata *) 0xF1DF)
+#define p_reg_sdio_FUNCE1_1A_15_8 0xF1DF
+#define reg_sdio_FUNCE1_1A_15_8_pos 0
+#define reg_sdio_FUNCE1_1A_15_8_len 8
+#define reg_sdio_FUNCE1_1A_15_8_lsb 8
+#define xd_p_reg_sdio_FUNCE1_1C_7_0 (*(volatile byte xdata *) 0xF1E0)
+#define p_reg_sdio_FUNCE1_1C_7_0 0xF1E0
+#define reg_sdio_FUNCE1_1C_7_0_pos 0
+#define reg_sdio_FUNCE1_1C_7_0_len 8
+#define reg_sdio_FUNCE1_1C_7_0_lsb 0
+#define xd_p_reg_sdio_FUNCE1_1C_15_8 (*(volatile byte xdata *) 0xF1E1)
+#define p_reg_sdio_FUNCE1_1C_15_8 0xF1E1
+#define reg_sdio_FUNCE1_1C_15_8_pos 0
+#define reg_sdio_FUNCE1_1C_15_8_len 8
+#define reg_sdio_FUNCE1_1C_15_8_lsb 8
+#define xd_p_reg_sdio_FUNCE1_1E_7_0 (*(volatile byte xdata *) 0xF1E2)
+#define p_reg_sdio_FUNCE1_1E_7_0 0xF1E2
+#define reg_sdio_FUNCE1_1E_7_0_pos 0
+#define reg_sdio_FUNCE1_1E_7_0_len 8
+#define reg_sdio_FUNCE1_1E_7_0_lsb 0
+#define xd_p_reg_sdio_FUNCE1_1E_15_8 (*(volatile byte xdata *) 0xF1E3)
+#define p_reg_sdio_FUNCE1_1E_15_8 0xF1E3
+#define reg_sdio_FUNCE1_1E_15_8_pos 0
+#define reg_sdio_FUNCE1_1E_15_8_len 8
+#define reg_sdio_FUNCE1_1E_15_8_lsb 8
+#define xd_p_reg_sdio_FUNCE1_20_7_0 (*(volatile byte xdata *) 0xF1E4)
+#define p_reg_sdio_FUNCE1_20_7_0 0xF1E4
+#define reg_sdio_FUNCE1_20_7_0_pos 0
+#define reg_sdio_FUNCE1_20_7_0_len 8
+#define reg_sdio_FUNCE1_20_7_0_lsb 0
+#define xd_p_reg_sdio_FUNCE1_20_15_8 (*(volatile byte xdata *) 0xF1E5)
+#define p_reg_sdio_FUNCE1_20_15_8 0xF1E5
+#define reg_sdio_FUNCE1_20_15_8_pos 0
+#define reg_sdio_FUNCE1_20_15_8_len 8
+#define reg_sdio_FUNCE1_20_15_8_lsb 8
+#define xd_p_reg_sdio_FUNCE1_22_7_0 (*(volatile byte xdata *) 0xF1E6)
+#define p_reg_sdio_FUNCE1_22_7_0 0xF1E6
+#define reg_sdio_FUNCE1_22_7_0_pos 0
+#define reg_sdio_FUNCE1_22_7_0_len 8
+#define reg_sdio_FUNCE1_22_7_0_lsb 0
+#define xd_p_reg_sdio_FUNCE1_22_15_8 (*(volatile byte xdata *) 0xF1E7)
+#define p_reg_sdio_FUNCE1_22_15_8 0xF1E7
+#define reg_sdio_FUNCE1_22_15_8_pos 0
+#define reg_sdio_FUNCE1_22_15_8_len 8
+#define reg_sdio_FUNCE1_22_15_8_lsb 8
+#define xd_p_reg_sdio_FUNCE1_24_7_0 (*(volatile byte xdata *) 0xF1E8)
+#define p_reg_sdio_FUNCE1_24_7_0 0xF1E8
+#define reg_sdio_FUNCE1_24_7_0_pos 0
+#define reg_sdio_FUNCE1_24_7_0_len 8
+#define reg_sdio_FUNCE1_24_7_0_lsb 0
+#define xd_p_reg_sdio_FUNCE1_24_15_8 (*(volatile byte xdata *) 0xF1E9)
+#define p_reg_sdio_FUNCE1_24_15_8 0xF1E9
+#define reg_sdio_FUNCE1_24_15_8_pos 0
+#define reg_sdio_FUNCE1_24_15_8_len 8
+#define reg_sdio_FUNCE1_24_15_8_lsb 8
+#define xd_p_reg_sdio_FUNCE1_26_7_0 (*(volatile byte xdata *) 0xF1EA)
+#define p_reg_sdio_FUNCE1_26_7_0 0xF1EA
+#define reg_sdio_FUNCE1_26_7_0_pos 0
+#define reg_sdio_FUNCE1_26_7_0_len 8
+#define reg_sdio_FUNCE1_26_7_0_lsb 0
+#define xd_p_reg_sdio_FUNCE1_26_15_8 (*(volatile byte xdata *) 0xF1EB)
+#define p_reg_sdio_FUNCE1_26_15_8 0xF1EB
+#define reg_sdio_FUNCE1_26_15_8_pos 0
+#define reg_sdio_FUNCE1_26_15_8_len 8
+#define reg_sdio_FUNCE1_26_15_8_lsb 8
+#define xd_p_reg_sdio_FUNCE1_28_7_0 (*(volatile byte xdata *) 0xF1EC)
+#define p_reg_sdio_FUNCE1_28_7_0 0xF1EC
+#define reg_sdio_FUNCE1_28_7_0_pos 0
+#define reg_sdio_FUNCE1_28_7_0_len 8
+#define reg_sdio_FUNCE1_28_7_0_lsb 0
+#define xd_p_reg_sdio_FUNCE1_28_15_8 (*(volatile byte xdata *) 0xF1ED)
+#define p_reg_sdio_FUNCE1_28_15_8 0xF1ED
+#define reg_sdio_FUNCE1_28_15_8_pos 0
+#define reg_sdio_FUNCE1_28_15_8_len 8
+#define reg_sdio_FUNCE1_28_15_8_lsb 8
+#define xd_p_reg_sdio_FUNCE1_2A_7_0 (*(volatile byte xdata *) 0xF1EE)
+#define p_reg_sdio_FUNCE1_2A_7_0 0xF1EE
+#define reg_sdio_FUNCE1_2A_7_0_pos 0
+#define reg_sdio_FUNCE1_2A_7_0_len 8
+#define reg_sdio_FUNCE1_2A_7_0_lsb 0
+#define xd_p_reg_sdio_FUNCE1_2A_15_8 (*(volatile byte xdata *) 0xF1EF)
+#define p_reg_sdio_FUNCE1_2A_15_8 0xF1EF
+#define reg_sdio_FUNCE1_2A_15_8_pos 0
+#define reg_sdio_FUNCE1_2A_15_8_len 8
+#define reg_sdio_FUNCE1_2A_15_8_lsb 8
+#define xd_p_reg_sdio_END1 (*(volatile byte xdata *) 0xF1F0)
+#define p_reg_sdio_END1 0xF1F0
+#define reg_sdio_END1_pos 0
+#define reg_sdio_END1_len 8
+#define reg_sdio_END1_lsb 0
+#define xd_r_sdioc_tx_fifo_empty (*(volatile byte xdata *) 0xF210)
+#define r_sdioc_tx_fifo_empty 0xF210
+#define sdioc_tx_fifo_empty_pos 0
+#define sdioc_tx_fifo_empty_len 1
+#define sdioc_tx_fifo_empty_lsb 0
+#define xd_p_reg_sdio_53ra (*(volatile byte xdata *) 0xF210)
+#define p_reg_sdio_53ra 0xF210
+#define reg_sdio_53ra_pos 1
+#define reg_sdio_53ra_len 1
+#define reg_sdio_53ra_lsb 0
+#define xd_p_reg_sdioc_rd_wait_dly (*(volatile byte xdata *) 0xF210)
+#define p_reg_sdioc_rd_wait_dly 0xF210
+#define reg_sdioc_rd_wait_dly_pos 4
+#define reg_sdioc_rd_wait_dly_len 2
+#define reg_sdioc_rd_wait_dly_lsb 0
+#define xd_p_reg_write_mbx_complete (*(volatile byte xdata *) 0xF211)
+#define p_reg_write_mbx_complete 0xF211
+#define reg_write_mbx_complete_pos 0
+#define reg_write_mbx_complete_len 1
+#define reg_write_mbx_complete_lsb 0
+#define xd_p_reg_sdioc_sw_err (*(volatile byte xdata *) 0xF211)
+#define p_reg_sdioc_sw_err 0xF211
+#define reg_sdioc_sw_err_pos 1
+#define reg_sdioc_sw_err_len 1
+#define reg_sdioc_sw_err_lsb 0
+#define xd_p_reg_sdioc_tran_dat_dly (*(volatile byte xdata *) 0xF211)
+#define p_reg_sdioc_tran_dat_dly 0xF211
+#define reg_sdioc_tran_dat_dly_pos 4
+#define reg_sdioc_tran_dat_dly_len 3
+#define reg_sdioc_tran_dat_dly_lsb 0
+#define xd_p_reg_sdioc_external_int_en (*(volatile byte xdata *) 0xF212)
+#define p_reg_sdioc_external_int_en 0xF212
+#define reg_sdioc_external_int_en_pos 1
+#define reg_sdioc_external_int_en_len 1
+#define reg_sdioc_external_int_en_lsb 0
+#define xd_r_reg_sdioc_external_int (*(volatile byte xdata *) 0xF212)
+#define r_reg_sdioc_external_int 0xF212
+#define reg_sdioc_external_int_pos 2
+#define reg_sdioc_external_int_len 1
+#define reg_sdioc_external_int_lsb 0
+#define xd_p_reg_auto_clrWB_en (*(volatile byte xdata *) 0xF213)
+#define p_reg_auto_clrWB_en 0xF213
+#define reg_auto_clrWB_en_pos 0
+#define reg_auto_clrWB_en_len 1
+#define reg_auto_clrWB_en_lsb 0
+#define xd_p_reg_sdioc_crc_s_dly (*(volatile byte xdata *) 0xF213)
+#define p_reg_sdioc_crc_s_dly 0xF213
+#define reg_sdioc_crc_s_dly_pos 1
+#define reg_sdioc_crc_s_dly_len 1
+#define reg_sdioc_crc_s_dly_lsb 0
+#define xd_p_reg_sdioc_neg_out_sel (*(volatile byte xdata *) 0xF213)
+#define p_reg_sdioc_neg_out_sel 0xF213
+#define reg_sdioc_neg_out_sel_pos 2
+#define reg_sdioc_neg_out_sel_len 1
+#define reg_sdioc_neg_out_sel_lsb 0
+#define xd_p_reg_sdioc_tx_fifo_rst (*(volatile byte xdata *) 0xF213)
+#define p_reg_sdioc_tx_fifo_rst 0xF213
+#define reg_sdioc_tx_fifo_rst_pos 4
+#define reg_sdioc_tx_fifo_rst_len 1
+#define reg_sdioc_tx_fifo_rst_lsb 0
+#define xd_p_reg_sdioc_rx_fifo_rst (*(volatile byte xdata *) 0xF213)
+#define p_reg_sdioc_rx_fifo_rst 0xF213
+#define reg_sdioc_rx_fifo_rst_pos 5
+#define reg_sdioc_rx_fifo_rst_len 1
+#define reg_sdioc_rx_fifo_rst_lsb 0
+#define xd_p_reg_sdioc_auto_rst_sm_en (*(volatile byte xdata *) 0xF213)
+#define p_reg_sdioc_auto_rst_sm_en 0xF213
+#define reg_sdioc_auto_rst_sm_en_pos 6
+#define reg_sdioc_auto_rst_sm_en_len 1
+#define reg_sdioc_auto_rst_sm_en_lsb 0
+#define xd_p_sdio_link_clr_Wbusy_en (*(volatile byte xdata *) 0xF214)
+#define p_sdio_link_clr_Wbusy_en 0xF214
+#define sdio_link_clr_Wbusy_en_pos 0
+#define sdio_link_clr_Wbusy_en_len 1
+#define sdio_link_clr_Wbusy_en_lsb 0
+#define xd_p_sdio_link_clr_Wbusy (*(volatile byte xdata *) 0xF214)
+#define p_sdio_link_clr_Wbusy 0xF214
+#define sdio_link_clr_Wbusy_pos 1
+#define sdio_link_clr_Wbusy_len 1
+#define sdio_link_clr_Wbusy_lsb 0
+#define xd_p_reg_sdioc_dbg_sel (*(volatile byte xdata *) 0xF214)
+#define p_reg_sdioc_dbg_sel 0xF214
+#define reg_sdioc_dbg_sel_pos 4
+#define reg_sdioc_dbg_sel_len 4
+#define reg_sdioc_dbg_sel_lsb 0
+#define xd_p_reg_sdioc_skip_ocr (*(volatile byte xdata *) 0xF215)
+#define p_reg_sdioc_skip_ocr 0xF215
+#define reg_sdioc_skip_ocr_pos 0
+#define reg_sdioc_skip_ocr_len 1
+#define reg_sdioc_skip_ocr_lsb 0
+#define xd_p_reg_sdioc_spi_ns (*(volatile byte xdata *) 0xF215)
+#define p_reg_sdioc_spi_ns 0xF215
+#define reg_sdioc_spi_ns_pos 1
+#define reg_sdioc_spi_ns_len 1
+#define reg_sdioc_spi_ns_lsb 0
+#define xd_r_sdio_spi_mode (*(volatile byte xdata *) 0xF215)
+#define r_sdio_spi_mode 0xF215
+#define sdio_spi_mode_pos 7
+#define sdio_spi_mode_len 1
+#define sdio_spi_mode_lsb 0
+#define xd_r_link_ofsm_mailbox_int (*(volatile byte xdata *) 0xF402)
+#define r_link_ofsm_mailbox_int 0xF402
+#define link_ofsm_mailbox_int_pos 4
+#define link_ofsm_mailbox_int_len 1
+#define link_ofsm_mailbox_int_lsb 0
+#define xd_r_link_ofsm_dvbt_int (*(volatile byte xdata *) 0xF403)
+#define r_link_ofsm_dvbt_int 0xF403
+#define link_ofsm_dvbt_int_pos 2
+#define link_ofsm_dvbt_int_len 1
+#define link_ofsm_dvbt_int_lsb 0
+#define xd_p_reg_dvbt_intsts (*(volatile byte xdata *) 0xF404)
+#define p_reg_dvbt_intsts 0xF404
+#define reg_dvbt_intsts_pos 2
+#define reg_dvbt_intsts_len 1
+#define reg_dvbt_intsts_lsb 0
+#define xd_p_reg_link_mailbox_int (*(volatile byte xdata *) 0xF405)
+#define p_reg_link_mailbox_int 0xF405
+#define reg_link_mailbox_int_pos 5
+#define reg_link_mailbox_int_len 1
+#define reg_link_mailbox_int_lsb 0
+#define xd_p_reg_mailbox_wptr_rst (*(volatile byte xdata *) 0xF408)
+#define p_reg_mailbox_wptr_rst 0xF408
+#define reg_mailbox_wptr_rst_pos 0
+#define reg_mailbox_wptr_rst_len 1
+#define reg_mailbox_wptr_rst_lsb 0
+#define xd_p_reg_link_mailbox_wptr (*(volatile byte xdata *) 0xF409)
+#define p_reg_link_mailbox_wptr 0xF409
+#define reg_link_mailbox_wptr_pos 0
+#define reg_link_mailbox_wptr_len 8
+#define reg_link_mailbox_wptr_lsb 0
+#define xd_p_reg_link_mailbox_wend (*(volatile byte xdata *) 0xF410)
+#define p_reg_link_mailbox_wend 0xF410
+#define reg_link_mailbox_wend_pos 0
+#define reg_link_mailbox_wend_len 1
+#define reg_link_mailbox_wend_lsb 0
+#define xd_p_reg_rd_data_sel (*(volatile byte xdata *) 0xF411)
+#define p_reg_rd_data_sel 0xF411
+#define reg_rd_data_sel_pos 0
+#define reg_rd_data_sel_len 2
+#define reg_rd_data_sel_lsb 0
+#define xd_p_reg_fifo_rd_length_7_0 (*(volatile byte xdata *) 0xF412)
+#define p_reg_fifo_rd_length_7_0 0xF412
+#define reg_fifo_rd_length_7_0_pos 0
+#define reg_fifo_rd_length_7_0_len 8
+#define reg_fifo_rd_length_7_0_lsb 0
+#define xd_p_reg_fifo_rd_length_15_8 (*(volatile byte xdata *) 0xF413)
+#define p_reg_fifo_rd_length_15_8 0xF413
+#define reg_fifo_rd_length_15_8_pos 0
+#define reg_fifo_rd_length_15_8_len 8
+#define reg_fifo_rd_length_15_8_lsb 8
+#define xd_p_reg_fifo_rd_length_17_16 (*(volatile byte xdata *) 0xF414)
+#define p_reg_fifo_rd_length_17_16 0xF414
+#define reg_fifo_rd_length_17_16_pos 0
+#define reg_fifo_rd_length_17_16_len 2
+#define reg_fifo_rd_length_17_16_lsb 16
+#define xd_p_reg_rst_fifo_rptr (*(volatile byte xdata *) 0xF414)
+#define p_reg_rst_fifo_rptr 0xF414
+#define reg_rst_fifo_rptr_pos 6
+#define reg_rst_fifo_rptr_len 1
+#define reg_rst_fifo_rptr_lsb 0
+#define xd_p_reg_force_sel (*(volatile byte xdata *) 0xF414)
+#define p_reg_force_sel 0xF414
+#define reg_force_sel_pos 7
+#define reg_force_sel_len 1
+#define reg_force_sel_lsb 0
+#define xd_p_reg_fifo_rptr_7_0 (*(volatile byte xdata *) 0xF415)
+#define p_reg_fifo_rptr_7_0 0xF415
+#define reg_fifo_rptr_7_0_pos 0
+#define reg_fifo_rptr_7_0_len 8
+#define reg_fifo_rptr_7_0_lsb 0
+#define xd_p_reg_fifo_rptr_15_8 (*(volatile byte xdata *) 0xF416)
+#define p_reg_fifo_rptr_15_8 0xF416
+#define reg_fifo_rptr_15_8_pos 0
+#define reg_fifo_rptr_15_8_len 8
+#define reg_fifo_rptr_15_8_lsb 8
+#define xd_p_reg_fifo_rptr_17_16 (*(volatile byte xdata *) 0xF417)
+#define p_reg_fifo_rptr_17_16 0xF417
+#define reg_fifo_rptr_17_16_pos 0
+#define reg_fifo_rptr_17_16_len 2
+#define reg_fifo_rptr_17_16_lsb 16
+#define xd_p_reg_max_package_size_7_0 (*(volatile byte xdata *) 0xF418)
+#define p_reg_max_package_size_7_0 0xF418
+#define reg_max_package_size_7_0_pos 0
+#define reg_max_package_size_7_0_len 8
+#define reg_max_package_size_7_0_lsb 0
+#define xd_p_reg_max_package_size_11_8 (*(volatile byte xdata *) 0xF419)
+#define p_reg_max_package_size_11_8 0xF419
+#define reg_max_package_size_11_8_pos 0
+#define reg_max_package_size_11_8_len 4
+#define reg_max_package_size_11_8_lsb 8
+#define xd_p_reg_dvbt_en (*(volatile byte xdata *) 0xF41A)
+#define p_reg_dvbt_en 0xF41A
+#define reg_dvbt_en_pos 0
+#define reg_dvbt_en_len 1
+#define reg_dvbt_en_lsb 0
+#define xd_p_reg_dvbt_bufsize (*(volatile byte xdata *) 0xF41A)
+#define p_reg_dvbt_bufsize 0xF41A
+#define reg_dvbt_bufsize_pos 1
+#define reg_dvbt_bufsize_len 1
+#define reg_dvbt_bufsize_lsb 0
+#define xd_p_reg_dvbt_path (*(volatile byte xdata *) 0xF41A)
+#define p_reg_dvbt_path 0xF41A
+#define reg_dvbt_path_pos 2
+#define reg_dvbt_path_len 1
+#define reg_dvbt_path_lsb 0
+#define xd_p_reg_dvbt_r5 (*(volatile byte xdata *) 0xF41A)
+#define p_reg_dvbt_r5 0xF41A
+#define reg_dvbt_r5_pos 3
+#define reg_dvbt_r5_len 1
+#define reg_dvbt_r5_lsb 0
+#define xd_p_reg_mailbox_inten (*(volatile byte xdata *) 0xF41E)
+#define p_reg_mailbox_inten 0xF41E
+#define reg_mailbox_inten_pos 4
+#define reg_mailbox_inten_len 1
+#define reg_mailbox_inten_lsb 0
+#define xd_p_reg_dvbt_inten (*(volatile byte xdata *) 0xF41F)
+#define p_reg_dvbt_inten 0xF41F
+#define reg_dvbt_inten_pos 2
+#define reg_dvbt_inten_len 1
+#define reg_dvbt_inten_lsb 0
+#define xd_r_link_ofsm_ip_length_7_0 (*(volatile byte xdata *) 0xF447)
+#define r_link_ofsm_ip_length_7_0 0xF447
+#define link_ofsm_ip_length_7_0_pos 0
+#define link_ofsm_ip_length_7_0_len 8
+#define link_ofsm_ip_length_7_0_lsb 0
+#define xd_r_link_ofsm_ip_length_11_8 (*(volatile byte xdata *) 0xF448)
+#define r_link_ofsm_ip_length_11_8 0xF448
+#define link_ofsm_ip_length_11_8_pos 0
+#define link_ofsm_ip_length_11_8_len 4
+#define link_ofsm_ip_length_11_8_lsb 8
+#define xd_r_link_ofsm_ip_valid (*(volatile byte xdata *) 0xF448)
+#define r_link_ofsm_ip_valid 0xF448
+#define link_ofsm_ip_valid_pos 7
+#define link_ofsm_ip_valid_len 1
+#define link_ofsm_ip_valid_lsb 0
+#define xd_p_reg_spi_master (*(volatile byte xdata *) 0xF600)
+#define p_reg_spi_master 0xF600
+#define reg_spi_master_pos 0
+#define reg_spi_master_len 1
+#define reg_spi_master_lsb 0
+#define xd_p_reg_spi_bit (*(volatile byte xdata *) 0xF601)
+#define p_reg_spi_bit 0xF601
+#define reg_spi_bit_pos 0
+#define reg_spi_bit_len 2
+#define reg_spi_bit_lsb 0
+#define xd_p_reg_spi_cs (*(volatile byte xdata *) 0xF602)
+#define p_reg_spi_cs 0xF602
+#define reg_spi_cs_pos 0
+#define reg_spi_cs_len 1
+#define reg_spi_cs_lsb 0
+#define xd_p_reg_spi_polarity (*(volatile byte xdata *) 0xF602)
+#define p_reg_spi_polarity 0xF602
+#define reg_spi_polarity_pos 1
+#define reg_spi_polarity_len 1
+#define reg_spi_polarity_lsb 0
+#define xd_p_reg_spi_phase (*(volatile byte xdata *) 0xF602)
+#define p_reg_spi_phase 0xF602
+#define reg_spi_phase_pos 2
+#define reg_spi_phase_len 1
+#define reg_spi_phase_lsb 0
+#define xd_p_reg_spi_1st_byte (*(volatile byte xdata *) 0xF603)
+#define p_reg_spi_1st_byte 0xF603
+#define reg_spi_1st_byte_pos 0
+#define reg_spi_1st_byte_len 4
+#define reg_spi_1st_byte_lsb 0
+#define xd_p_reg_spi_clk_div (*(volatile byte xdata *) 0xF603)
+#define p_reg_spi_clk_div 0xF603
+#define reg_spi_clk_div_pos 4
+#define reg_spi_clk_div_len 4
+#define reg_spi_clk_div_lsb 0
+#define xd_p_reg_spi_rst (*(volatile byte xdata *) 0xF604)
+#define p_reg_spi_rst 0xF604
+#define reg_spi_rst_pos 0
+#define reg_spi_rst_len 1
+#define reg_spi_rst_lsb 0
+#define xd_r_reg_spi_tx_done (*(volatile byte xdata *) 0xF604)
+#define r_reg_spi_tx_done 0xF604
+#define reg_spi_tx_done_pos 1
+#define reg_spi_tx_done_len 1
+#define reg_spi_tx_done_lsb 0
+#define xd_r_reg_spi_rx_done (*(volatile byte xdata *) 0xF604)
+#define r_reg_spi_rx_done 0xF604
+#define reg_spi_rx_done_pos 2
+#define reg_spi_rx_done_len 1
+#define reg_spi_rx_done_lsb 0
+#define xd_p_reg_spi_dbg_sel (*(volatile byte xdata *) 0xF604)
+#define p_reg_spi_dbg_sel 0xF604
+#define reg_spi_dbg_sel_pos 3
+#define reg_spi_dbg_sel_len 1
+#define reg_spi_dbg_sel_lsb 0
+#define xd_r_reg_spi_crc_err (*(volatile byte xdata *) 0xF604)
+#define r_reg_spi_crc_err 0xF604
+#define reg_spi_crc_err_pos 4
+#define reg_spi_crc_err_len 4
+#define reg_spi_crc_err_lsb 0
+#define xd_r_link_ofsm_usb20_mode (*(volatile byte xdata *) 0xF613)
+#define r_link_ofsm_usb20_mode 0xF613
+#define link_ofsm_usb20_mode_pos 0
+#define link_ofsm_usb20_mode_len 1
+#define link_ofsm_usb20_mode_lsb 0
+#define xd_r_link_ofsm_strap_usb20_mode (*(volatile byte xdata *) 0xF613)
+#define r_link_ofsm_strap_usb20_mode 0xF613
+#define link_ofsm_strap_usb20_mode_pos 1
+#define link_ofsm_strap_usb20_mode_len 1
+#define link_ofsm_strap_usb20_mode_lsb 0
+#define xd_p_reg_link_stick_mem_end_7_0 (*(volatile byte xdata *) 0xF618)
+#define p_reg_link_stick_mem_end_7_0 0xF618
+#define reg_link_stick_mem_end_7_0_pos 0
+#define reg_link_stick_mem_end_7_0_len 8
+#define reg_link_stick_mem_end_7_0_lsb 0
+#define xd_p_reg_link_stick_mem_end_15_8 (*(volatile byte xdata *) 0xF619)
+#define p_reg_link_stick_mem_end_15_8 0xF619
+#define reg_link_stick_mem_end_15_8_pos 0
+#define reg_link_stick_mem_end_15_8_len 8
+#define reg_link_stick_mem_end_15_8_lsb 8
+#define xd_p_reg_ofdm_auto_write_addr_l (*(volatile byte xdata *) 0xF61A)
+#define p_reg_ofdm_auto_write_addr_l 0xF61A
+#define reg_ofdm_auto_write_addr_l_pos 0
+#define reg_ofdm_auto_write_addr_l_len 8
+#define reg_ofdm_auto_write_addr_l_lsb 0
+#define xd_p_reg_ofdm_auto_write_addr_h (*(volatile byte xdata *) 0xF61B)
+#define p_reg_ofdm_auto_write_addr_h 0xF61B
+#define reg_ofdm_auto_write_addr_h_pos 0
+#define reg_ofdm_auto_write_addr_h_len 8
+#define reg_ofdm_auto_write_addr_h_lsb 0
+#define xd_p_reg_link_auto_write_addr_l (*(volatile byte xdata *) 0xF61C)
+#define p_reg_link_auto_write_addr_l 0xF61C
+#define reg_link_auto_write_addr_l_pos 0
+#define reg_link_auto_write_addr_l_len 8
+#define reg_link_auto_write_addr_l_lsb 0
+#define xd_p_reg_link_auto_write_addr_h (*(volatile byte xdata *) 0xF61D)
+#define p_reg_link_auto_write_addr_h 0xF61D
+#define reg_link_auto_write_addr_h_pos 0
+#define reg_link_auto_write_addr_h_len 8
+#define reg_link_auto_write_addr_h_lsb 0
+#define xd_p_reg_mailbox_auto_write_addr (*(volatile byte xdata *) 0xF61E)
+#define p_reg_mailbox_auto_write_addr 0xF61E
+#define reg_mailbox_auto_write_addr_pos 0
+#define reg_mailbox_auto_write_addr_len 8
+#define reg_mailbox_auto_write_addr_lsb 0
+#define xd_p_reg_usbmem_auto_write_addr (*(volatile byte xdata *) 0xF61F)
+#define p_reg_usbmem_auto_write_addr 0xF61F
+#define reg_usbmem_auto_write_addr_pos 0
+#define reg_usbmem_auto_write_addr_len 8
+#define reg_usbmem_auto_write_addr_lsb 0
+#define xd_p_reg_mailbox_auto_read_addr (*(volatile byte xdata *) 0xF620)
+#define p_reg_mailbox_auto_read_addr 0xF620
+#define reg_mailbox_auto_read_addr_pos 0
+#define reg_mailbox_auto_read_addr_len 8
+#define reg_mailbox_auto_read_addr_lsb 0
+#define xd_p_reg_usbmem_auto_read_addr (*(volatile byte xdata *) 0xF621)
+#define p_reg_usbmem_auto_read_addr 0xF621
+#define reg_usbmem_auto_read_addr_pos 0
+#define reg_usbmem_auto_read_addr_len 8
+#define reg_usbmem_auto_read_addr_lsb 0
+#define xd_p_reg_auto_write_ofdm (*(volatile byte xdata *) 0xF622)
+#define p_reg_auto_write_ofdm 0xF622
+#define reg_auto_write_ofdm_pos 0
+#define reg_auto_write_ofdm_len 1
+#define reg_auto_write_ofdm_lsb 0
+#define xd_p_reg_auto_write_link (*(volatile byte xdata *) 0xF622)
+#define p_reg_auto_write_link 0xF622
+#define reg_auto_write_link_pos 1
+#define reg_auto_write_link_len 1
+#define reg_auto_write_link_lsb 0
+#define xd_p_reg_auto_write_mailbox (*(volatile byte xdata *) 0xF622)
+#define p_reg_auto_write_mailbox 0xF622
+#define reg_auto_write_mailbox_pos 2
+#define reg_auto_write_mailbox_len 1
+#define reg_auto_write_mailbox_lsb 0
+#define xd_p_reg_auto_write_usbmem (*(volatile byte xdata *) 0xF622)
+#define p_reg_auto_write_usbmem 0xF622
+#define reg_auto_write_usbmem_pos 3
+#define reg_auto_write_usbmem_len 1
+#define reg_auto_write_usbmem_lsb 0
+#define xd_p_reg_auto_write_i2cm (*(volatile byte xdata *) 0xF622)
+#define p_reg_auto_write_i2cm 0xF622
+#define reg_auto_write_i2cm_pos 4
+#define reg_auto_write_i2cm_len 1
+#define reg_auto_write_i2cm_lsb 0
+#define xd_p_reg_auto_read_mailbox (*(volatile byte xdata *) 0xF623)
+#define p_reg_auto_read_mailbox 0xF623
+#define reg_auto_read_mailbox_pos 0
+#define reg_auto_read_mailbox_len 1
+#define reg_auto_read_mailbox_lsb 0
+#define xd_p_reg_auto_read_rom (*(volatile byte xdata *) 0xF623)
+#define p_reg_auto_read_rom 0xF623
+#define reg_auto_read_rom_pos 1
+#define reg_auto_read_rom_len 1
+#define reg_auto_read_rom_lsb 0
+#define xd_p_reg_auto_sum_l (*(volatile byte xdata *) 0xF624)
+#define p_reg_auto_sum_l 0xF624
+#define reg_auto_sum_l_pos 0
+#define reg_auto_sum_l_len 8
+#define reg_auto_sum_l_lsb 0
+#define xd_p_reg_auto_sum_h (*(volatile byte xdata *) 0xF625)
+#define p_reg_auto_sum_h 0xF625
+#define reg_auto_sum_h_pos 0
+#define reg_auto_sum_h_len 8
+#define reg_auto_sum_h_lsb 0
+#define xd_p_reg_auto_sum_to_h (*(volatile byte xdata *) 0xF626)
+#define p_reg_auto_sum_to_h 0xF626
+#define reg_auto_sum_to_h_pos 0
+#define reg_auto_sum_to_h_len 1
+#define reg_auto_sum_to_h_lsb 0
+#define xd_p_reg_auto_sum_en (*(volatile byte xdata *) 0xF627)
+#define p_reg_auto_sum_en 0xF627
+#define reg_auto_sum_en_pos 0
+#define reg_auto_sum_en_len 1
+#define reg_auto_sum_en_lsb 0
+#define xd_p_reg_rom_remap_begin_7_0 (*(volatile byte xdata *) 0xF628)
+#define p_reg_rom_remap_begin_7_0 0xF628
+#define reg_rom_remap_begin_7_0_pos 0
+#define reg_rom_remap_begin_7_0_len 8
+#define reg_rom_remap_begin_7_0_lsb 0
+#define xd_p_reg_rom_remap_begin_15_8 (*(volatile byte xdata *) 0xF629)
+#define p_reg_rom_remap_begin_15_8 0xF629
+#define reg_rom_remap_begin_15_8_pos 0
+#define reg_rom_remap_begin_15_8_len 8
+#define reg_rom_remap_begin_15_8_lsb 8
+#define xd_p_reg_rom_remap_end_7_0 (*(volatile byte xdata *) 0xF62A)
+#define p_reg_rom_remap_end_7_0 0xF62A
+#define reg_rom_remap_end_7_0_pos 0
+#define reg_rom_remap_end_7_0_len 8
+#define reg_rom_remap_end_7_0_lsb 0
+#define xd_p_reg_rom_remap_end_15_8 (*(volatile byte xdata *) 0xF62B)
+#define p_reg_rom_remap_end_15_8 0xF62B
+#define reg_rom_remap_end_15_8_pos 0
+#define reg_rom_remap_end_15_8_len 8
+#define reg_rom_remap_end_15_8_lsb 8
+#define xd_p_reg_rom_remap_delta_7_0 (*(volatile byte xdata *) 0xF62C)
+#define p_reg_rom_remap_delta_7_0 0xF62C
+#define reg_rom_remap_delta_7_0_pos 0
+#define reg_rom_remap_delta_7_0_len 8
+#define reg_rom_remap_delta_7_0_lsb 0
+#define xd_p_reg_rom_remap_delta_15_8 (*(volatile byte xdata *) 0xF62D)
+#define p_reg_rom_remap_delta_15_8 0xF62D
+#define reg_rom_remap_delta_15_8_pos 0
+#define reg_rom_remap_delta_15_8_len 8
+#define reg_rom_remap_delta_15_8_lsb 8
+#define xd_p_reg_rom_remap_en (*(volatile byte xdata *) 0xF62E)
+#define p_reg_rom_remap_en 0xF62E
+#define reg_rom_remap_en_pos 0
+#define reg_rom_remap_en_len 1
+#define reg_rom_remap_en_lsb 0
+#define xd_p_reg_rom_remap_ofdm (*(volatile byte xdata *) 0xF62E)
+#define p_reg_rom_remap_ofdm 0xF62E
+#define reg_rom_remap_ofdm_pos 1
+#define reg_rom_remap_ofdm_len 1
+#define reg_rom_remap_ofdm_lsb 0
+#define xd_p_reg_link_cpu_reset (*(volatile byte xdata *) 0xF62F)
+#define p_reg_link_cpu_reset 0xF62F
+#define reg_link_cpu_reset_pos 0
+#define reg_link_cpu_reset_len 1
+#define reg_link_cpu_reset_lsb 0
+#define xd_p_reg_i2cm_auto_write_addr (*(volatile byte xdata *) 0xF630)
+#define p_reg_i2cm_auto_write_addr 0xF630
+#define reg_i2cm_auto_write_addr_pos 0
+#define reg_i2cm_auto_write_addr_len 8
+#define reg_i2cm_auto_write_addr_lsb 0
+#define xd_p_reg_link_bank_float_en (*(volatile byte xdata *) 0xF631)
+#define p_reg_link_bank_float_en 0xF631
+#define reg_link_bank_float_en_pos 0
+#define reg_link_bank_float_en_len 1
+#define reg_link_bank_float_en_lsb 0
+#define xd_p_reg_link_bank_float_start (*(volatile byte xdata *) 0xF632)
+#define p_reg_link_bank_float_start 0xF632
+#define reg_link_bank_float_start_pos 0
+#define reg_link_bank_float_start_len 8
+#define reg_link_bank_float_start_lsb 0
+#define xd_p_reg_link_bank_float_stop (*(volatile byte xdata *) 0xF633)
+#define p_reg_link_bank_float_stop 0xF633
+#define reg_link_bank_float_stop_pos 0
+#define reg_link_bank_float_stop_len 8
+#define reg_link_bank_float_stop_lsb 0
+#define xd_p_reg_rom_auto_read_addr_7_0 (*(volatile byte xdata *) 0xF638)
+#define p_reg_rom_auto_read_addr_7_0 0xF638
+#define reg_rom_auto_read_addr_7_0_pos 0
+#define reg_rom_auto_read_addr_7_0_len 8
+#define reg_rom_auto_read_addr_7_0_lsb 0
+#define xd_p_reg_rom_auto_read_addr_15_8 (*(volatile byte xdata *) 0xF639)
+#define p_reg_rom_auto_read_addr_15_8 0xF639
+#define reg_rom_auto_read_addr_15_8_pos 0
+#define reg_rom_auto_read_addr_15_8_len 8
+#define reg_rom_auto_read_addr_15_8_lsb 8
+#define xd_p_reg_link_ofsm_dummy_7_0 (*(volatile byte xdata *) 0xF640)
+#define p_reg_link_ofsm_dummy_7_0 0xF640
+#define reg_link_ofsm_dummy_7_0_pos 0
+#define reg_link_ofsm_dummy_7_0_len 8
+#define reg_link_ofsm_dummy_7_0_lsb 0
+#define xd_p_reg_link_ofsm_dummy_15_8 (*(volatile byte xdata *) 0xF641)
+#define p_reg_link_ofsm_dummy_15_8 0xF641
+#define reg_link_ofsm_dummy_15_8_pos 0
+#define reg_link_ofsm_dummy_15_8_len 8
+#define reg_link_ofsm_dummy_15_8_lsb 8
+#define xd_p_reg_link_ofsm_dummy_23_16 (*(volatile byte xdata *) 0xF642)
+#define p_reg_link_ofsm_dummy_23_16 0xF642
+#define reg_link_ofsm_dummy_23_16_pos 0
+#define reg_link_ofsm_dummy_23_16_len 8
+#define reg_link_ofsm_dummy_23_16_lsb 16
+#define xd_p_reg_link_ofsm_dummy_31_24 (*(volatile byte xdata *) 0xF643)
+#define p_reg_link_ofsm_dummy_31_24 0xF643
+#define reg_link_ofsm_dummy_31_24_pos 0
+#define reg_link_ofsm_dummy_31_24_len 8
+#define reg_link_ofsm_dummy_31_24_lsb 24
+#define xd_p_reg_link_ofsm_dummy_39_32 (*(volatile byte xdata *) 0xF644)
+#define p_reg_link_ofsm_dummy_39_32 0xF644
+#define reg_link_ofsm_dummy_39_32_pos 0
+#define reg_link_ofsm_dummy_39_32_len 8
+#define reg_link_ofsm_dummy_39_32_lsb 32
+#define xd_p_reg_link_ofsm_dummy_47_40 (*(volatile byte xdata *) 0xF645)
+#define p_reg_link_ofsm_dummy_47_40 0xF645
+#define reg_link_ofsm_dummy_47_40_pos 0
+#define reg_link_ofsm_dummy_47_40_len 8
+#define reg_link_ofsm_dummy_47_40_lsb 40
+#define xd_p_reg_link_ofsm_dummy_55_48 (*(volatile byte xdata *) 0xF646)
+#define p_reg_link_ofsm_dummy_55_48 0xF646
+#define reg_link_ofsm_dummy_55_48_pos 0
+#define reg_link_ofsm_dummy_55_48_len 8
+#define reg_link_ofsm_dummy_55_48_lsb 48
+#define xd_p_reg_link_ofsm_dummy_63_56 (*(volatile byte xdata *) 0xF647)
+#define p_reg_link_ofsm_dummy_63_56 0xF647
+#define reg_link_ofsm_dummy_63_56_pos 0
+#define reg_link_ofsm_dummy_63_56_len 8
+#define reg_link_ofsm_dummy_63_56_lsb 56
+#define xd_p_reg_link_ofsm_dummy_71_64 (*(volatile byte xdata *) 0xF648)
+#define p_reg_link_ofsm_dummy_71_64 0xF648
+#define reg_link_ofsm_dummy_71_64_pos 0
+#define reg_link_ofsm_dummy_71_64_len 8
+#define reg_link_ofsm_dummy_71_64_lsb 64
+#define xd_p_reg_link_ofsm_dummy_79_72 (*(volatile byte xdata *) 0xF649)
+#define p_reg_link_ofsm_dummy_79_72 0xF649
+#define reg_link_ofsm_dummy_79_72_pos 0
+#define reg_link_ofsm_dummy_79_72_len 8
+#define reg_link_ofsm_dummy_79_72_lsb 72
+#define xd_p_reg_sdio_mode (*(volatile byte xdata *) 0xF66F)
+#define p_reg_sdio_mode 0xF66F
+#define reg_sdio_mode_pos 0
+#define reg_sdio_mode_len 1
+#define reg_sdio_mode_lsb 0
+#define xd_p_reg_lnk2ofdm_data_7_0 (*(volatile byte xdata *) 0xF6A0)
+#define p_reg_lnk2ofdm_data_7_0 0xF6A0
+#define reg_lnk2ofdm_data_7_0_pos 0
+#define reg_lnk2ofdm_data_7_0_len 8
+#define reg_lnk2ofdm_data_7_0_lsb 0
+#define xd_p_reg_lnk2ofdm_data_15_8 (*(volatile byte xdata *) 0xF6A1)
+#define p_reg_lnk2ofdm_data_15_8 0xF6A1
+#define reg_lnk2ofdm_data_15_8_pos 0
+#define reg_lnk2ofdm_data_15_8_len 8
+#define reg_lnk2ofdm_data_15_8_lsb 8
+#define xd_p_reg_lnk2ofdm_data_23_16 (*(volatile byte xdata *) 0xF6A2)
+#define p_reg_lnk2ofdm_data_23_16 0xF6A2
+#define reg_lnk2ofdm_data_23_16_pos 0
+#define reg_lnk2ofdm_data_23_16_len 8
+#define reg_lnk2ofdm_data_23_16_lsb 16
+#define xd_p_reg_lnk2ofdm_data_31_24 (*(volatile byte xdata *) 0xF6A3)
+#define p_reg_lnk2ofdm_data_31_24 0xF6A3
+#define reg_lnk2ofdm_data_31_24_pos 0
+#define reg_lnk2ofdm_data_31_24_len 8
+#define reg_lnk2ofdm_data_31_24_lsb 24
+#define xd_p_reg_lnk2ofdm_data_39_32 (*(volatile byte xdata *) 0xF6A4)
+#define p_reg_lnk2ofdm_data_39_32 0xF6A4
+#define reg_lnk2ofdm_data_39_32_pos 0
+#define reg_lnk2ofdm_data_39_32_len 8
+#define reg_lnk2ofdm_data_39_32_lsb 32
+#define xd_p_reg_lnk2ofdm_data_47_40 (*(volatile byte xdata *) 0xF6A5)
+#define p_reg_lnk2ofdm_data_47_40 0xF6A5
+#define reg_lnk2ofdm_data_47_40_pos 0
+#define reg_lnk2ofdm_data_47_40_len 8
+#define reg_lnk2ofdm_data_47_40_lsb 40
+#define xd_p_reg_lnk2ofdm_data_55_48 (*(volatile byte xdata *) 0xF6A6)
+#define p_reg_lnk2ofdm_data_55_48 0xF6A6
+#define reg_lnk2ofdm_data_55_48_pos 0
+#define reg_lnk2ofdm_data_55_48_len 8
+#define reg_lnk2ofdm_data_55_48_lsb 48
+#define xd_p_reg_lnk2ofdm_data_63_56 (*(volatile byte xdata *) 0xF6A7)
+#define p_reg_lnk2ofdm_data_63_56 0xF6A7
+#define reg_lnk2ofdm_data_63_56_pos 0
+#define reg_lnk2ofdm_data_63_56_len 8
+#define reg_lnk2ofdm_data_63_56_lsb 56
+#define xd_p_reg_ofdmtolnk_data_7_0 (*(volatile byte xdata *) 0xF6A8)
+#define p_reg_ofdmtolnk_data_7_0 0xF6A8
+#define reg_ofdmtolnk_data_7_0_pos 0
+#define reg_ofdmtolnk_data_7_0_len 8
+#define reg_ofdmtolnk_data_7_0_lsb 0
+#define xd_p_reg_ofdmtolnk_data_15_8 (*(volatile byte xdata *) 0xF6A9)
+#define p_reg_ofdmtolnk_data_15_8 0xF6A9
+#define reg_ofdmtolnk_data_15_8_pos 0
+#define reg_ofdmtolnk_data_15_8_len 8
+#define reg_ofdmtolnk_data_15_8_lsb 8
+#define xd_p_reg_ofdmtolnk_data_23_16 (*(volatile byte xdata *) 0xF6AA)
+#define p_reg_ofdmtolnk_data_23_16 0xF6AA
+#define reg_ofdmtolnk_data_23_16_pos 0
+#define reg_ofdmtolnk_data_23_16_len 8
+#define reg_ofdmtolnk_data_23_16_lsb 16
+#define xd_p_reg_ofdmtolnk_data_31_24 (*(volatile byte xdata *) 0xF6AB)
+#define p_reg_ofdmtolnk_data_31_24 0xF6AB
+#define reg_ofdmtolnk_data_31_24_pos 0
+#define reg_ofdmtolnk_data_31_24_len 8
+#define reg_ofdmtolnk_data_31_24_lsb 24
+#define xd_p_reg_ofdmtolnk_data_39_32 (*(volatile byte xdata *) 0xF6AC)
+#define p_reg_ofdmtolnk_data_39_32 0xF6AC
+#define reg_ofdmtolnk_data_39_32_pos 0
+#define reg_ofdmtolnk_data_39_32_len 8
+#define reg_ofdmtolnk_data_39_32_lsb 32
+#define xd_p_reg_ofdmtolnk_data_47_40 (*(volatile byte xdata *) 0xF6AD)
+#define p_reg_ofdmtolnk_data_47_40 0xF6AD
+#define reg_ofdmtolnk_data_47_40_pos 0
+#define reg_ofdmtolnk_data_47_40_len 8
+#define reg_ofdmtolnk_data_47_40_lsb 40
+#define xd_p_reg_ofdmtolnk_data_55_48 (*(volatile byte xdata *) 0xF6AE)
+#define p_reg_ofdmtolnk_data_55_48 0xF6AE
+#define reg_ofdmtolnk_data_55_48_pos 0
+#define reg_ofdmtolnk_data_55_48_len 8
+#define reg_ofdmtolnk_data_55_48_lsb 48
+#define xd_p_reg_ofdmtolnk_data_63_56 (*(volatile byte xdata *) 0xF6AF)
+#define p_reg_ofdmtolnk_data_63_56 0xF6AF
+#define reg_ofdmtolnk_data_63_56_pos 0
+#define reg_ofdmtolnk_data_63_56_len 8
+#define reg_ofdmtolnk_data_63_56_lsb 56
+#define xd_p_reg_mon51_flag (*(volatile byte xdata *) 0xF6B0)
+#define p_reg_mon51_flag 0xF6B0
+#define reg_mon51_flag_pos 0
+#define reg_mon51_flag_len 1
+#define reg_mon51_flag_lsb 0
+#define xd_p_reg_force_mon51 (*(volatile byte xdata *) 0xF6B1)
+#define p_reg_force_mon51 0xF6B1
+#define reg_force_mon51_pos 0
+#define reg_force_mon51_len 1
+#define reg_force_mon51_lsb 0
+#define xd_p_reg_which_cpu (*(volatile byte xdata *) 0xF6B2)
+#define p_reg_which_cpu 0xF6B2
+#define reg_which_cpu_pos 0
+#define reg_which_cpu_len 1
+#define reg_which_cpu_lsb 0
+#define xd_p_reg_program_ofdm_code_ready (*(volatile byte xdata *) 0xF6B3)
+#define p_reg_program_ofdm_code_ready 0xF6B3
+#define reg_program_ofdm_code_ready_pos 0
+#define reg_program_ofdm_code_ready_len 1
+#define reg_program_ofdm_code_ready_lsb 0
+#define xd_p_reg_link_wr_ofdm_en (*(volatile byte xdata *) 0xF6B3)
+#define p_reg_link_wr_ofdm_en 0xF6B3
+#define reg_link_wr_ofdm_en_pos 1
+#define reg_link_wr_ofdm_en_len 1
+#define reg_link_wr_ofdm_en_lsb 0
+#define xd_p_reg_i2c_mode (*(volatile byte xdata *) 0xF6B4)
+#define p_reg_i2c_mode 0xF6B4
+#define reg_i2c_mode_pos 0
+#define reg_i2c_mode_len 1
+#define reg_i2c_mode_lsb 0
+#define xd_p_reg_sw_reset_sdio (*(volatile byte xdata *) 0xF6B4)
+#define p_reg_sw_reset_sdio 0xF6B4
+#define reg_sw_reset_sdio_pos 1
+#define reg_sw_reset_sdio_len 1
+#define reg_sw_reset_sdio_lsb 0
+#define xd_p_reg_debug_mpefec_sel (*(volatile byte xdata *) 0xF6B4)
+#define p_reg_debug_mpefec_sel 0xF6B4
+#define reg_debug_mpefec_sel_pos 2
+#define reg_debug_mpefec_sel_len 1
+#define reg_debug_mpefec_sel_lsb 0
+#define xd_p_reg_lnk_dynamic_clk (*(volatile byte xdata *) 0xF6B4)
+#define p_reg_lnk_dynamic_clk 0xF6B4
+#define reg_lnk_dynamic_clk_pos 3
+#define reg_lnk_dynamic_clk_len 1
+#define reg_lnk_dynamic_clk_lsb 0
+#define xd_p_reg_lnk_free_clk (*(volatile byte xdata *) 0xF6B4)
+#define p_reg_lnk_free_clk 0xF6B4
+#define reg_lnk_free_clk_pos 4
+#define reg_lnk_free_clk_len 1
+#define reg_lnk_free_clk_lsb 0
+#define xd_p_reg_i2c_sample_rate_up_en (*(volatile byte xdata *) 0xF6B4)
+#define p_reg_i2c_sample_rate_up_en 0xF6B4
+#define reg_i2c_sample_rate_up_en_pos 5
+#define reg_i2c_sample_rate_up_en_len 1
+#define reg_i2c_sample_rate_up_en_lsb 0
+#define xd_p_reg_i2c_start_patch (*(volatile byte xdata *) 0xF6B4)
+#define p_reg_i2c_start_patch 0xF6B4
+#define reg_i2c_start_patch_pos 6
+#define reg_i2c_start_patch_len 1
+#define reg_i2c_start_patch_lsb 0
+#define xd_p_reg_link_i2cs_msb (*(volatile byte xdata *) 0xF6B5)
+#define p_reg_link_i2cs_msb 0xF6B5
+#define reg_link_i2cs_msb_pos 1
+#define reg_link_i2cs_msb_len 1
+#define reg_link_i2cs_msb_lsb 0
+#define xd_p_reg_link_ofsm_dbg_en (*(volatile byte xdata *) 0xF6B5)
+#define p_reg_link_ofsm_dbg_en 0xF6B5
+#define reg_link_ofsm_dbg_en_pos 4
+#define reg_link_ofsm_dbg_en_len 1
+#define reg_link_ofsm_dbg_en_lsb 0
+#define xd_p_reg_link_i2c_dbg_sel (*(volatile byte xdata *) 0xF6B5)
+#define p_reg_link_i2c_dbg_sel 0xF6B5
+#define reg_link_i2c_dbg_sel_pos 5
+#define reg_link_i2c_dbg_sel_len 1
+#define reg_link_i2c_dbg_sel_lsb 0
+#define xd_p_reg_fast_slow_train (*(volatile byte xdata *) 0xF6DD)
+#define p_reg_fast_slow_train 0xF6DD
+#define xd_p_reg_lnk2ofdm_int (*(volatile byte xdata *) 0xF6DE)
+#define p_reg_lnk2ofdm_int 0xF6DE
+#define reg_lnk2ofdm_int_pos 0
+#define reg_lnk2ofdm_int_len 1
+#define reg_lnk2ofdm_int_lsb 0
+#define xd_p_reg_ofdm2lnk_int (*(volatile byte xdata *) 0xF6DF)
+#define p_reg_ofdm2lnk_int 0xF6DF
+#define reg_ofdm2lnk_int_pos 0
+#define reg_ofdm2lnk_int_len 1
+#define reg_ofdm2lnk_int_lsb 0
+#define xd_p_reg_load_ofdm_reg (*(volatile byte xdata *) 0xF6E4)
+#define p_reg_load_ofdm_reg 0xF6E4
+#define xd_p_link_ofsm_cmd_reg (*(volatile byte xdata *) 0xF6EA)
+#define p_link_ofsm_cmd_reg 0xF6EA
+#define link_ofsm_cmd_reg_pos 0
+#define link_ofsm_cmd_reg_len 8
+#define link_ofsm_cmd_reg_lsb 0
+#define xd_p_link_ofsm_addr_reg_h (*(volatile byte xdata *) 0xF6EB)
+#define p_link_ofsm_addr_reg_h 0xF6EB
+#define link_ofsm_addr_reg_h_pos 0
+#define link_ofsm_addr_reg_h_len 8
+#define link_ofsm_addr_reg_h_lsb 0
+#define xd_p_link_ofsm_addr_reg_l (*(volatile byte xdata *) 0xF6EC)
+#define p_link_ofsm_addr_reg_l 0xF6EC
+#define link_ofsm_addr_reg_l_pos 0
+#define link_ofsm_addr_reg_l_len 8
+#define link_ofsm_addr_reg_l_lsb 0
+#define xd_p_link_ofsm_data_reg_0 (*(volatile byte xdata *) 0xF6ED)
+#define p_link_ofsm_data_reg_0 0xF6ED
+#define link_ofsm_data_reg_0_pos 0
+#define link_ofsm_data_reg_0_len 8
+#define link_ofsm_data_reg_0_lsb 0
+#define xd_p_link_ofsm_data_reg_1 (*(volatile byte xdata *) 0xF6EE)
+#define p_link_ofsm_data_reg_1 0xF6EE
+#define link_ofsm_data_reg_1_pos 0
+#define link_ofsm_data_reg_1_len 8
+#define link_ofsm_data_reg_1_lsb 0
+#define xd_p_link_ofsm_data_reg_2 (*(volatile byte xdata *) 0xF6EF)
+#define p_link_ofsm_data_reg_2 0xF6EF
+#define link_ofsm_data_reg_2_pos 0
+#define link_ofsm_data_reg_2_len 8
+#define link_ofsm_data_reg_2_lsb 0
+#define xd_p_link_ofsm_data_reg_3 (*(volatile byte xdata *) 0xF6F0)
+#define p_link_ofsm_data_reg_3 0xF6F0
+#define link_ofsm_data_reg_3_pos 0
+#define link_ofsm_data_reg_3_len 8
+#define link_ofsm_data_reg_3_lsb 0
+#define xd_p_link_ofsm_data_reg_4 (*(volatile byte xdata *) 0xF6F1)
+#define p_link_ofsm_data_reg_4 0xF6F1
+#define link_ofsm_data_reg_4_pos 0
+#define link_ofsm_data_reg_4_len 8
+#define link_ofsm_data_reg_4_lsb 0
+#define xd_p_link_ofsm_data_reg_5 (*(volatile byte xdata *) 0xF6F2)
+#define p_link_ofsm_data_reg_5 0xF6F2
+#define link_ofsm_data_reg_5_pos 0
+#define link_ofsm_data_reg_5_len 8
+#define link_ofsm_data_reg_5_lsb 0
+#define xd_p_link_ofsm_data_reg_6 (*(volatile byte xdata *) 0xF6F3)
+#define p_link_ofsm_data_reg_6 0xF6F3
+#define link_ofsm_data_reg_6_pos 0
+#define link_ofsm_data_reg_6_len 8
+#define link_ofsm_data_reg_6_lsb 0
+#define xd_p_link_ofsm_data_reg_7 (*(volatile byte xdata *) 0xF6F4)
+#define p_link_ofsm_data_reg_7 0xF6F4
+#define link_ofsm_data_reg_7_pos 0
+#define link_ofsm_data_reg_7_len 8
+#define link_ofsm_data_reg_7_lsb 0
+#define xd_p_link_ofsm_data_reg_8 (*(volatile byte xdata *) 0xF6F5)
+#define p_link_ofsm_data_reg_8 0xF6F5
+#define link_ofsm_data_reg_8_pos 0
+#define link_ofsm_data_reg_8_len 8
+#define link_ofsm_data_reg_8_lsb 0
+#define xd_p_link_ofsm_data_reg_9 (*(volatile byte xdata *) 0xF6F6)
+#define p_link_ofsm_data_reg_9 0xF6F6
+#define link_ofsm_data_reg_9_pos 0
+#define link_ofsm_data_reg_9_len 8
+#define link_ofsm_data_reg_9_lsb 0
+#define xd_p_link_ofsm_data_reg_10 (*(volatile byte xdata *) 0xF6F7)
+#define p_link_ofsm_data_reg_10 0xF6F7
+#define link_ofsm_data_reg_10_pos 0
+#define link_ofsm_data_reg_10_len 8
+#define link_ofsm_data_reg_10_lsb 0
+#define xd_p_link_ofsm_data_reg_11 (*(volatile byte xdata *) 0xF6F8)
+#define p_link_ofsm_data_reg_11 0xF6F8
+#define link_ofsm_data_reg_11_pos 0
+#define link_ofsm_data_reg_11_len 8
+#define link_ofsm_data_reg_11_lsb 0
+#define xd_p_link_ofsm_data_reg_12 (*(volatile byte xdata *) 0xF6F9)
+#define p_link_ofsm_data_reg_12 0xF6F9
+#define link_ofsm_data_reg_12_pos 0
+#define link_ofsm_data_reg_12_len 8
+#define link_ofsm_data_reg_12_lsb 0
+#define xd_p_link_ofsm_data_reg_13 (*(volatile byte xdata *) 0xF6FA)
+#define p_link_ofsm_data_reg_13 0xF6FA
+#define link_ofsm_data_reg_13_pos 0
+#define link_ofsm_data_reg_13_len 8
+#define link_ofsm_data_reg_13_lsb 0
+#define xd_p_link_ofsm_data_reg_14 (*(volatile byte xdata *) 0xF6FB)
+#define p_link_ofsm_data_reg_14 0xF6FB
+#define link_ofsm_data_reg_14_pos 0
+#define link_ofsm_data_reg_14_len 8
+#define link_ofsm_data_reg_14_lsb 0
+#define xd_p_link_ofsm_data_reg_15 (*(volatile byte xdata *) 0xF6FC)
+#define p_link_ofsm_data_reg_15 0xF6FC
+#define link_ofsm_data_reg_15_pos 0
+#define link_ofsm_data_reg_15_len 8
+#define link_ofsm_data_reg_15_lsb 0
+#define xd_p_reg_debug_mux (*(volatile byte xdata *) 0xF6FE)
+#define p_reg_debug_mux 0xF6FE
+#define reg_debug_mux_pos 3
+#define reg_debug_mux_len 1
+#define reg_debug_mux_lsb 0
+#define xd_p_reg_top_gpioon0 (*(volatile byte xdata *) 0xF6FF)
+#define p_reg_top_gpioon0 0xF6FF
+#define reg_top_gpioon0_pos 0
+#define reg_top_gpioon0_len 1
+#define reg_top_gpioon0_lsb 0
+#define xd_p_reg_p_dmb_phy_is_dvb (*(volatile byte xdata *) 0xDC31)
+#define p_reg_p_dmb_phy_is_dvb 0xDC31
+#define reg_p_dmb_phy_is_dvb_pos 0
+#define reg_p_dmb_phy_is_dvb_len 1
+#define reg_p_dmb_phy_is_dvb_lsb 0
+#define xd_p_reg_p_dmb_xt_reset (*(volatile byte xdata *) 0xDC32)
+#define p_reg_p_dmb_xt_reset 0xDC32
+#define reg_p_dmb_xt_reset_pos 0
+#define reg_p_dmb_xt_reset_len 1
+#define reg_p_dmb_xt_reset_lsb 0
+#define xd_p_reg_p_dmb_sw_reset (*(volatile byte xdata *) 0xDC33)
+#define p_reg_p_dmb_sw_reset 0xDC33
+#define reg_p_dmb_sw_reset_pos 0
+#define reg_p_dmb_sw_reset_len 1
+#define reg_p_dmb_sw_reset_lsb 0
diff --git a/api/standard.c b/api/standard.c
new file mode 100644
index 0000000..bcbe2fc
--- /dev/null
+++ b/api/standard.c
@@ -0,0 +1,4093 @@
+#include "standard.h"
+#include "cmd.h"
+#include "user.h"
+
+
+#include "firmware.h"
+
+#ifndef Firmware_FORMAT_VER1
+#define Firmware_FORMAT_VER1 1
+#define Firmware_FORMAT_VER2 0
+#endif
+
+#if (Firmware_FORMAT_VER1 == 2) && (Firmware_FORMAT_VER2 == 0)
+static Byte* Firmware_partitions = Firmware_new_partitions;
+#endif
+
+#if (Firmware_FORMAT_VER1 > 2) || ((Firmware_FORMAT_VER1 == 2) && (Firmware_FORMAT_VER2 > 0))
+#error API version too old. Please update API version.
+#endif
+
+#define Standard_MAX_BIT 8
+#define Standard_MAX_CLOCK 12
+#define Standard_MAX_BAND 3
+
+
+Byte Chip2_I2c_address = User_I2C_ADDRESS;
+
+const Byte Standard_bitMask[Standard_MAX_BIT] = {
+ 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF
+};
+
+const ClockTable Standard_clockTable[Standard_MAX_CLOCK] =
+{
+ { 20480, 20480000 }, /** FPGA */
+ { 16384, 20480000 }, /** 16.38MHz */
+ { 20480, 20480000 }, /** 20.48MHz */
+ { 36000, 20250000 }, /** 36.00MHz */
+ { 30000, 20156250 }, /** 30.00MHz */
+ { 26000, 20583333 }, /** 26.00MHz */
+ { 28000, 20416667 }, /** 28.00MHz */
+ { 32000, 20500000 }, /** 32.00MHz */
+ { 34000, 20187500 }, /** 34.00MHz */
+ { 24000, 20500000 }, /** 24.00MHz */
+ { 22000, 20625000 }, /** 22.00MHz */
+ { 12000, 20250000 } /** 12.00MHz */
+};
+
+const BandTable Standard_bandTable[Standard_MAX_BAND] =
+{
+ { 174000, 230000 }, /** VHF */
+ { 350000, 900000 }, /** UHF */
+ { 1670000, 1680000 } /** L-BAND */
+};
+
+/** local functions */
+
+#if User_USE_DRIVER
+Dword Standard_getDriver (
+ IN Demodulator* demodulator,
+ OUT Handle* handle
+) {
+ Dword error = Error_NO_ERROR;
+ TCHAR registry1[100] = TEXT("\\Drivers\\SDCARD\\ClientDrivers\\Custom\\MANF-0296-CARDID-5347-FUNC-1");
+ TCHAR registry2[100] = TEXT("\\Drivers\\SDCARD\\ClientDrivers\\Custom\\MANF-03BE-CARDID-0001-FUNC-1");
+ TCHAR name[256];
+ TCHAR shortBuffer[32];
+ DWORD len = 16;
+ DWORD i;
+ HKEY hKey, hSubKey;
+ DWORD size;
+
+ /** Open the HKLM\Drivers\Active key in registry */
+ if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("Drivers\\Active"), 0, 0, &hKey) == ERROR_SUCCESS) {
+ /** Get subkeys count */
+ if (RegQueryInfoKey(hKey, NULL, NULL, NULL, &i, NULL, NULL, NULL, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) {
+ /** Browse subkeys in reverse order (pluggable cards are not at the beginning of the list !) */
+ while (i) {
+ i--;
+ /** Select the subkey */
+ size = sizeof(shortBuffer);
+ if (RegEnumKeyEx(hKey, i, shortBuffer, &size, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) {
+ /** Open the subkey */
+ shortBuffer[sizeof(shortBuffer)-1] = '\0';
+ _stprintf(name, TEXT("Drivers\\Active\\%s"), shortBuffer);
+ if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, name, 0, 0, &hSubKey) == ERROR_SUCCESS) {
+ size = sizeof(name);
+ if (RegQueryValueEx(hSubKey, TEXT("Key"), NULL, NULL, (LPBYTE) name, &size) == ERROR_SUCCESS) {
+ if ((_tcsncmp(name, registry1, _tcsclen(registry1)) == 0) || (_tcsncmp(name, registry2, _tcsclen(registry2)) == 0)) {
+ /** This is the good PnPID, now get the serial com in the "Name" value */
+ size = len;
+ if (RegQueryValueEx(hSubKey, TEXT("Name"), NULL, NULL, (LPBYTE) name, &size) == ERROR_SUCCESS) {
+ /** Found ! */
+ RegCloseKey(hSubKey);
+ RegCloseKey(hKey);
+ /** OK */
+ goto exit;
+ }
+ }
+ }
+
+ /** Close the subkey */
+ RegCloseKey(hSubKey);
+ }
+ }
+ }
+ }
+ }
+ /** Close the key */
+ RegCloseKey(hKey);
+
+exit :
+ *handle = CreateFile (name, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
+
+ return (error);
+}
+#endif
+
+Dword Standard_divider (
+ IN Demodulator* demodulator,
+ IN Dword a,
+ IN Dword b,
+ IN Dword x
+) {
+ Dword answer = 0;
+ Dword c = 0;
+ Dword i = 0;
+
+ if (a > b) {
+ c = a / b;
+ a = a - c * b;
+ }
+
+ for (i = 0; i < x; i++) {
+ if (a >= b) {
+ answer += 1;
+ a-=b;
+ }
+ a <<= 1;
+ answer <<= 1;
+ }
+
+ answer = (c << (Long) x) + answer;
+
+ return (answer);
+}
+
+
+Dword Standard_computeCrystal (
+ IN Demodulator* demodulator,
+ IN Long crystalFrequency, /** Crystal frequency (Hz) */
+ OUT Dword* crystal
+) {
+ Dword error = Error_NO_ERROR;
+
+ *crystal = (Long) Standard_divider (demodulator, (Dword) crystalFrequency, 1000000ul, 19ul);
+
+ return (error);
+}
+
+
+Dword Standard_computeAdc (
+ IN Demodulator* demodulator,
+ IN Long adcFrequency, /** ADC frequency (Hz) */
+ OUT Dword* adc
+)
+{
+ Dword error = Error_NO_ERROR;
+
+ *adc = (Long) Standard_divider (demodulator, (Dword) adcFrequency, 1000000ul, 19ul);
+
+ return (error);
+}
+
+
+Dword Standard_computeFcw (
+ IN Demodulator* demodulator,
+ IN Long adcFrequency, /** ADC frequency (Hz) */
+ IN Long ifFrequency, /** IF frequency (Hz) */
+ IN Bool inversion, /** RF spectrum inversion */
+ OUT Dword* fcw
+) {
+ Dword error = Error_NO_ERROR;
+ Long ifFreq;
+ Long adcFreq;
+ Long adcFreqHalf;
+ Long adcFreqSample;
+ Long invBfs;
+ Long controlWord;
+ Byte adcMultiplier;
+
+ adcFreq = adcFrequency;
+ ifFreq = ifFrequency;
+ adcFreqHalf = adcFreq / 2;
+
+ if (inversion == True)
+ ifFreq = -1 * ifFreq;
+
+ adcFreqSample = ifFreq;
+
+ if (adcFreqSample >= 0)
+ invBfs = 1;
+ else {
+ invBfs = -1;
+ adcFreqSample = adcFreqSample * -1;
+ }
+
+ while (adcFreqSample > adcFreqHalf)
+ adcFreqSample = adcFreqSample - adcFreq;
+
+ /** Sample, spectrum at positive frequency */
+ if(adcFreqSample >= 0)
+ invBfs = invBfs * -1;
+ else {
+ invBfs = invBfs * 1;
+ adcFreqSample = adcFreqSample * (-1); /** Absolute value */
+ }
+
+ controlWord = (Long) Standard_divider (demodulator, (Dword) adcFreqSample, (Dword) adcFreq, 23ul);
+
+ if (invBfs == -1) {
+ controlWord *= -1;
+ }
+
+ /** Get ADC multiplier */
+ error = Standard_readRegister (demodulator, 0, Processor_OFDM, adcx2, &adcMultiplier);
+ if (error) goto exit;
+
+ if (adcMultiplier == 1) {
+ controlWord /= 2;
+ }
+
+ *fcw = controlWord & 0x7FFFFF;
+
+exit :
+ return (error);
+}
+
+
+Dword Standard_programFcw (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Long shift, /** Hz */
+ IN Dword adcFrequency /** Hz */
+)
+{
+ Dword error = Error_NO_ERROR;
+ Dword fcw;
+ Long fcwShift;
+ Byte temp0;
+ Byte temp1;
+ Byte temp2;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ /** Get shift freq */
+ fcwShift = (shift * 8 * 1024 + (Long) adcFrequency / (2 * 1024)) / (Long) adcFrequency * 1024;
+
+ fcw = (Dword) ((Long) ganymede->fcw + fcwShift);
+
+ temp0 = (Byte) (fcw & 0x000000FF);
+ temp1 = (Byte) ((fcw & 0x0000FF00) >> 8);
+ temp2 = (Byte) ((fcw & 0x007F0000) >> 16);
+
+ error = Standard_writeRegister (demodulator, chip, Processor_OFDM, p_reg_bfs_fcw_7_0, temp0);
+ if (error) goto exit;
+ error = Standard_writeRegister (demodulator, chip, Processor_OFDM, p_reg_bfs_fcw_15_8, temp1);
+ if (error) goto exit;
+ error = Standard_writeRegister (demodulator, chip, Processor_OFDM, p_reg_bfs_fcw_22_16, temp2);
+ if (error) goto exit;
+
+exit :
+ return (error);
+}
+
+
+Dword Standard_maskDcaOutput (
+ IN Demodulator* demodulator
+) {
+ Dword error = Error_NO_ERROR;
+ Byte i;
+ Bool dcaValid = False;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if ((ganymede->chipNumber > 1) && (ganymede->architecture == Architecture_DCA))
+ dcaValid = True;
+
+ if (dcaValid == True) {
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, p_reg_dca_upper_out_en, reg_dca_upper_out_en_pos, reg_dca_upper_out_en_len, 0);
+ if (error) goto exit;
+ }
+ User_delay (demodulator, 5);
+ }
+
+exit :
+ return (error);
+}
+
+
+Dword Standard_sendCommand (
+ IN Demodulator* demodulator,
+ OUT Word command,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword writeBufferLength,
+ IN Byte* writeBuffer,
+ IN Dword readBufferLength,
+ OUT Byte* readBuffer
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+#else
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->cmdDescription->sendCommand != NULL) {
+ error = ganymede->cmdDescription->sendCommand (demodulator, command, chip, processor, writeBufferLength, writeBuffer, readBufferLength, readBuffer);
+ }
+#endif
+ return (error);
+}
+
+
+Dword Standard_selectBandwidth (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth, /** KHz */
+ IN Dword adcFrequency /** Hz, ex: 20480000 */
+) {
+ Dword error = Error_NO_ERROR;
+ Dword coeff1_2048Nu;
+ Dword coeff1_4096Nu;
+ Dword coeff1_8191Nu;
+ Dword coeff1_8192Nu;
+ Dword coeff1_8193Nu;
+ Dword coeff2_2k;
+ Dword coeff2_4k;
+ Dword coeff2_8k;
+ Word bfsfcw_fftindex_ratio;
+ Word fftindex_bfsfcw_ratio;
+
+ Byte temp0;
+ Byte temp1;
+ Byte temp2;
+ Byte temp3;
+ Byte buffer[36];
+ Byte bw;
+ Byte adcMultiplier;
+ Ganymede* ganymede;
+
+ if (bandwidth == 5000)
+ bw = 3;
+ else if (bandwidth == 6000)
+ bw = 0;
+ else if (bandwidth == 7000)
+ bw = 1;
+ else if (bandwidth == 8000)
+ bw = 2;
+ else {
+ error = Error_INVALID_BW;
+ goto exit;
+ }
+
+ ganymede = (Ganymede*) demodulator;
+
+ error = Standard_writeRegisterBits (demodulator, chip, Processor_OFDM, g_reg_bw, reg_bw_pos, reg_bw_len, bw);
+ if (error) goto exit;
+
+ /** Program CFOE */
+ if (adcFrequency == 20156250) {
+ if (bandwidth == 5000) {
+ coeff1_2048Nu = 0x02449b5c;
+ coeff1_4096Nu = 0x01224dae;
+ coeff1_8191Nu = 0x00912b60;
+ coeff1_8192Nu = 0x009126d7;
+ coeff1_8193Nu = 0x0091224e;
+ coeff2_2k = 0x01224dae;
+ coeff2_4k = 0x009126d7;
+ coeff2_8k = 0x0048936b;
+ bfsfcw_fftindex_ratio = 0x0387;
+ fftindex_bfsfcw_ratio = 0x0122;
+ } else if (bandwidth == 6000) {
+ coeff1_2048Nu = 0x02b8ba6e;
+ coeff1_4096Nu = 0x015c5d37;
+ coeff1_8191Nu = 0x00ae340d;
+ coeff1_8192Nu = 0x00ae2e9b;
+ coeff1_8193Nu = 0x00ae292a;
+ coeff2_2k = 0x015c5d37;
+ coeff2_4k = 0x00ae2e9b;
+ coeff2_8k = 0x0057174e;
+ bfsfcw_fftindex_ratio = 0x02f1;
+ fftindex_bfsfcw_ratio = 0x015c;
+ } else if (bandwidth == 7000) {
+ coeff1_2048Nu = 0x032cd980;
+ coeff1_4096Nu = 0x01966cc0;
+ coeff1_8191Nu = 0x00cb3cba;
+ coeff1_8192Nu = 0x00cb3660;
+ coeff1_8193Nu = 0x00cb3007;
+ coeff2_2k = 0x01966cc0;
+ coeff2_4k = 0x00cb3660;
+ coeff2_8k = 0x00659b30;
+ bfsfcw_fftindex_ratio = 0x0285;
+ fftindex_bfsfcw_ratio = 0x0196;
+ } else if (bandwidth == 8000) {
+ coeff1_2048Nu = 0x03a0f893;
+ coeff1_4096Nu = 0x01d07c49;
+ coeff1_8191Nu = 0x00e84567;
+ coeff1_8192Nu = 0x00e83e25;
+ coeff1_8193Nu = 0x00e836e3;
+ coeff2_2k = 0x01d07c49;
+ coeff2_4k = 0x00e83e25;
+ coeff2_8k = 0x00741f12;
+ bfsfcw_fftindex_ratio = 0x0234;
+ fftindex_bfsfcw_ratio = 0x01d0;
+ } else {
+ error = Error_INVALID_BW;
+ goto exit;
+ }
+ } else if (adcFrequency == 20187500) {
+ if (bandwidth == 5000) {
+ coeff1_2048Nu = 0x0243b546;
+ coeff1_4096Nu = 0x0121daa3;
+ coeff1_8191Nu = 0x0090f1d9;
+ coeff1_8192Nu = 0x0090ed51;
+ coeff1_8193Nu = 0x0090e8ca;
+ coeff2_2k = 0x0121daa3;
+ coeff2_4k = 0x0090ed51;
+ coeff2_8k = 0x004876a9;
+ bfsfcw_fftindex_ratio = 0x0388;
+ fftindex_bfsfcw_ratio = 0x0122;
+ } else if (bandwidth == 6000) {
+ coeff1_2048Nu = 0x02b7a654;
+ coeff1_4096Nu = 0x015bd32a;
+ coeff1_8191Nu = 0x00adef04;
+ coeff1_8192Nu = 0x00ade995;
+ coeff1_8193Nu = 0x00ade426;
+ coeff2_2k = 0x015bd32a;
+ coeff2_4k = 0x00ade995;
+ coeff2_8k = 0x0056f4ca;
+ bfsfcw_fftindex_ratio = 0x02f2;
+ fftindex_bfsfcw_ratio = 0x015c;
+ } else if (bandwidth == 7000) {
+ coeff1_2048Nu = 0x032b9761;
+ coeff1_4096Nu = 0x0195cbb1;
+ coeff1_8191Nu = 0x00caec30;
+ coeff1_8192Nu = 0x00cae5d8;
+ coeff1_8193Nu = 0x00cadf81;
+ coeff2_2k = 0x0195cbb1;
+ coeff2_4k = 0x00cae5d8;
+ coeff2_8k = 0x006572ec;
+ bfsfcw_fftindex_ratio = 0x0286;
+ fftindex_bfsfcw_ratio = 0x0196;
+ } else if (bandwidth == 8000) {
+ coeff1_2048Nu = 0x039f886f;
+ coeff1_4096Nu = 0x01cfc438;
+ coeff1_8191Nu = 0x00e7e95b;
+ coeff1_8192Nu = 0x00e7e21c;
+ coeff1_8193Nu = 0x00e7dadd;
+ coeff2_2k = 0x01cfc438;
+ coeff2_4k = 0x00e7e21c;
+ coeff2_8k = 0x0073f10e;
+ bfsfcw_fftindex_ratio = 0x0235;
+ fftindex_bfsfcw_ratio = 0x01d0;
+ } else {
+ error = Error_INVALID_BW;
+ goto exit;
+ }
+ } else if (adcFrequency == 20250000) {
+ if (bandwidth == 5000) {
+ coeff1_2048Nu = 0x0241eb3b;
+ coeff1_4096Nu = 0x0120f59e;
+ coeff1_8191Nu = 0x00907f53;
+ coeff1_8192Nu = 0x00907acf;
+ coeff1_8193Nu = 0x0090764b;
+ coeff2_2k = 0x0120f59e;
+ coeff2_4k = 0x00907acf;
+ coeff2_8k = 0x00483d67;
+ bfsfcw_fftindex_ratio = 0x038b;
+ fftindex_bfsfcw_ratio = 0x0121;
+ } else if (bandwidth == 6000) {
+ coeff1_2048Nu = 0x02b580ad;
+ coeff1_4096Nu = 0x015ac057;
+ coeff1_8191Nu = 0x00ad6597;
+ coeff1_8192Nu = 0x00ad602b;
+ coeff1_8193Nu = 0x00ad5ac1;
+ coeff2_2k = 0x015ac057;
+ coeff2_4k = 0x00ad602b;
+ coeff2_8k = 0x0056b016;
+ bfsfcw_fftindex_ratio = 0x02f4;
+ fftindex_bfsfcw_ratio = 0x015b;
+ } else if (bandwidth == 7000) {
+ coeff1_2048Nu = 0x03291620;
+ coeff1_4096Nu = 0x01948b10;
+ coeff1_8191Nu = 0x00ca4bda;
+ coeff1_8192Nu = 0x00ca4588;
+ coeff1_8193Nu = 0x00ca3f36;
+ coeff2_2k = 0x01948b10;
+ coeff2_4k = 0x00ca4588;
+ coeff2_8k = 0x006522c4;
+ bfsfcw_fftindex_ratio = 0x0288;
+ fftindex_bfsfcw_ratio = 0x0195;
+ } else if (bandwidth == 8000) {
+ coeff1_2048Nu = 0x039cab92;
+ coeff1_4096Nu = 0x01ce55c9;
+ coeff1_8191Nu = 0x00e7321e;
+ coeff1_8192Nu = 0x00e72ae4;
+ coeff1_8193Nu = 0x00e723ab;
+ coeff2_2k = 0x01ce55c9;
+ coeff2_4k = 0x00e72ae4;
+ coeff2_8k = 0x00739572;
+ bfsfcw_fftindex_ratio = 0x0237;
+ fftindex_bfsfcw_ratio = 0x01ce;
+ } else {
+ error = Error_INVALID_BW;
+ goto exit;
+ }
+ } else if (adcFrequency == 20583333) {
+ if (bandwidth == 5000) {
+ coeff1_2048Nu = 0x02388f54;
+ coeff1_4096Nu = 0x011c47aa;
+ coeff1_8191Nu = 0x008e2846;
+ coeff1_8192Nu = 0x008e23d5;
+ coeff1_8193Nu = 0x008e1f64;
+ coeff2_2k = 0x011c47aa;
+ coeff2_4k = 0x008e23d5;
+ coeff2_8k = 0x004711ea;
+ bfsfcw_fftindex_ratio = 0x039a;
+ fftindex_bfsfcw_ratio = 0x011c;
+ } else if (bandwidth == 6000) {
+ coeff1_2048Nu = 0x02aa4598;
+ coeff1_4096Nu = 0x015522cc;
+ coeff1_8191Nu = 0x00aa96bb;
+ coeff1_8192Nu = 0x00aa9166;
+ coeff1_8193Nu = 0x00aa8c12;
+ coeff2_2k = 0x015522cc;
+ coeff2_4k = 0x00aa9166;
+ coeff2_8k = 0x005548b3;
+ bfsfcw_fftindex_ratio = 0x0300;
+ fftindex_bfsfcw_ratio = 0x0155;
+ } else if (bandwidth == 7000) {
+ coeff1_2048Nu = 0x031bfbdc;
+ coeff1_4096Nu = 0x018dfdee;
+ coeff1_8191Nu = 0x00c7052f;
+ coeff1_8192Nu = 0x00c6fef7;
+ coeff1_8193Nu = 0x00c6f8bf;
+ coeff2_2k = 0x018dfdee;
+ coeff2_4k = 0x00c6fef7;
+ coeff2_8k = 0x00637f7b;
+ bfsfcw_fftindex_ratio = 0x0293;
+ fftindex_bfsfcw_ratio = 0x018e;
+ } else if (bandwidth == 8000) {
+ coeff1_2048Nu = 0x038db21f;
+ coeff1_4096Nu = 0x01c6d910;
+ coeff1_8191Nu = 0x00e373a3;
+ coeff1_8192Nu = 0x00e36c88;
+ coeff1_8193Nu = 0x00e3656d;
+ coeff2_2k = 0x01c6d910;
+ coeff2_4k = 0x00e36c88;
+ coeff2_8k = 0x0071b644;
+ bfsfcw_fftindex_ratio = 0x0240;
+ fftindex_bfsfcw_ratio = 0x01c7;
+ } else {
+ error = Error_INVALID_BW;
+ goto exit;
+ }
+ } else if (adcFrequency == 20416667) {
+ if (bandwidth == 5000) {
+ coeff1_2048Nu = 0x023d337f;
+ coeff1_4096Nu = 0x011e99c0;
+ coeff1_8191Nu = 0x008f515a;
+ coeff1_8192Nu = 0x008f4ce0;
+ coeff1_8193Nu = 0x008f4865;
+ coeff2_2k = 0x011e99c0;
+ coeff2_4k = 0x008f4ce0;
+ coeff2_8k = 0x0047a670;
+ bfsfcw_fftindex_ratio = 0x0393;
+ fftindex_bfsfcw_ratio = 0x011f;
+ } else if (bandwidth == 6000) {
+ coeff1_2048Nu = 0x02afd765;
+ coeff1_4096Nu = 0x0157ebb3;
+ coeff1_8191Nu = 0x00abfb39;
+ coeff1_8192Nu = 0x00abf5d9;
+ coeff1_8193Nu = 0x00abf07a;
+ coeff2_2k = 0x0157ebb3;
+ coeff2_4k = 0x00abf5d9;
+ coeff2_8k = 0x0055faed;
+ bfsfcw_fftindex_ratio = 0x02fa;
+ fftindex_bfsfcw_ratio = 0x0158;
+ } else if (bandwidth == 7000) {
+ coeff1_2048Nu = 0x03227b4b;
+ coeff1_4096Nu = 0x01913da6;
+ coeff1_8191Nu = 0x00c8a518;
+ coeff1_8192Nu = 0x00c89ed3;
+ coeff1_8193Nu = 0x00c8988e;
+ coeff2_2k = 0x01913da6;
+ coeff2_4k = 0x00c89ed3;
+ coeff2_8k = 0x00644f69;
+ bfsfcw_fftindex_ratio = 0x028d;
+ fftindex_bfsfcw_ratio = 0x0191;
+ } else if (bandwidth == 8000) {
+ coeff1_2048Nu = 0x03951f32;
+ coeff1_4096Nu = 0x01ca8f99;
+ coeff1_8191Nu = 0x00e54ef7;
+ coeff1_8192Nu = 0x00e547cc;
+ coeff1_8193Nu = 0x00e540a2;
+ coeff2_2k = 0x01ca8f99;
+ coeff2_4k = 0x00e547cc;
+ coeff2_8k = 0x0072a3e6;
+ bfsfcw_fftindex_ratio = 0x023c;
+ fftindex_bfsfcw_ratio = 0x01cb;
+ } else {
+ error = Error_INVALID_BW;
+ goto exit;
+ }
+ } else if (adcFrequency == 20480000) {
+ if (bandwidth == 5000) {
+ coeff1_2048Nu = 0x023b6db7;
+ coeff1_4096Nu = 0x011db6db;
+ coeff1_8191Nu = 0x008edfe5;
+ coeff1_8192Nu = 0x008edb6e;
+ coeff1_8193Nu = 0x008ed6f7;
+ coeff2_2k = 0x011db6db;
+ coeff2_4k = 0x008edb6e;
+ coeff2_8k = 0x00476db7;
+ bfsfcw_fftindex_ratio = 0x0396;
+ fftindex_bfsfcw_ratio = 0x011e;
+ } else if (bandwidth == 6000) {
+ coeff1_2048Nu = 0x02adb6db;
+ coeff1_4096Nu = 0x0156db6e;
+ coeff1_8191Nu = 0x00ab7312;
+ coeff1_8192Nu = 0x00ab6db7;
+ coeff1_8193Nu = 0x00ab685c;
+ coeff2_2k = 0x0156db6e;
+ coeff2_4k = 0x00ab6db7;
+ coeff2_8k = 0x0055b6db;
+ bfsfcw_fftindex_ratio = 0x02fd;
+ fftindex_bfsfcw_ratio = 0x0157;
+ } else if (bandwidth == 7000) {
+ coeff1_2048Nu = 0x03200000;
+ coeff1_4096Nu = 0x01900000;
+ coeff1_8191Nu = 0x00c80640;
+ coeff1_8192Nu = 0x00c80000;
+ coeff1_8193Nu = 0x00c7f9c0;
+ coeff2_2k = 0x01900000;
+ coeff2_4k = 0x00c80000;
+ coeff2_8k = 0x00640000;
+ bfsfcw_fftindex_ratio = 0x028f;
+ fftindex_bfsfcw_ratio = 0x0190;
+ } else if (bandwidth == 8000) {
+ coeff1_2048Nu = 0x03924925;
+ coeff1_4096Nu = 0x01c92492;
+ coeff1_8191Nu = 0x00e4996e;
+ coeff1_8192Nu = 0x00e49249;
+ coeff1_8193Nu = 0x00e48b25;
+ coeff2_2k = 0x01c92492;
+ coeff2_4k = 0x00e49249;
+ coeff2_8k = 0x00724925;
+ bfsfcw_fftindex_ratio = 0x023d;
+ fftindex_bfsfcw_ratio = 0x01c9;
+ } else {
+ error = Error_INVALID_BW;
+ goto exit;
+ }
+ } else if (adcFrequency == 20500000) {
+ if (bandwidth == 5000) {
+ coeff1_2048Nu = 0x023adeff;
+ coeff1_4096Nu = 0x011d6f80;
+ coeff1_8191Nu = 0x008ebc36;
+ coeff1_8192Nu = 0x008eb7c0;
+ coeff1_8193Nu = 0x008eb34a;
+ coeff2_2k = 0x011d6f80;
+ coeff2_4k = 0x008eb7c0;
+ coeff2_8k = 0x00475be0;
+ bfsfcw_fftindex_ratio = 0x0396;
+ fftindex_bfsfcw_ratio = 0x011d;
+ } else if (bandwidth == 6000) {
+ coeff1_2048Nu = 0x02ad0b99;
+ coeff1_4096Nu = 0x015685cc;
+ coeff1_8191Nu = 0x00ab4840;
+ coeff1_8192Nu = 0x00ab42e6;
+ coeff1_8193Nu = 0x00ab3d8c;
+ coeff2_2k = 0x015685cc;
+ coeff2_4k = 0x00ab42e6;
+ coeff2_8k = 0x0055a173;
+ bfsfcw_fftindex_ratio = 0x02fd;
+ fftindex_bfsfcw_ratio = 0x0157;
+ } else if (bandwidth == 7000) {
+ coeff1_2048Nu = 0x031f3832;
+ coeff1_4096Nu = 0x018f9c19;
+ coeff1_8191Nu = 0x00c7d44b;
+ coeff1_8192Nu = 0x00c7ce0c;
+ coeff1_8193Nu = 0x00c7c7ce;
+ coeff2_2k = 0x018f9c19;
+ coeff2_4k = 0x00c7ce0c;
+ coeff2_8k = 0x0063e706;
+ bfsfcw_fftindex_ratio = 0x0290;
+ fftindex_bfsfcw_ratio = 0x0190;
+ } else if (bandwidth == 8000) {
+ coeff1_2048Nu = 0x039164cb;
+ coeff1_4096Nu = 0x01c8b266;
+ coeff1_8191Nu = 0x00e46056;
+ coeff1_8192Nu = 0x00e45933;
+ coeff1_8193Nu = 0x00e45210;
+ coeff2_2k = 0x01c8b266;
+ coeff2_4k = 0x00e45933;
+ coeff2_8k = 0x00722c99;
+ bfsfcw_fftindex_ratio = 0x023e;
+ fftindex_bfsfcw_ratio = 0x01c9;
+ } else {
+ error = Error_INVALID_BW;
+ goto exit;
+ }
+ } else if (adcFrequency == 20625000) {
+ if (bandwidth == 5000) {
+ coeff1_2048Nu = 0x02376948;
+ coeff1_4096Nu = 0x011bb4a4;
+ coeff1_8191Nu = 0x008ddec1;
+ coeff1_8192Nu = 0x008dda52;
+ coeff1_8193Nu = 0x008dd5e3;
+ coeff2_2k = 0x011bb4a4;
+ coeff2_4k = 0x008dda52;
+ coeff2_8k = 0x0046ed29;
+ bfsfcw_fftindex_ratio = 0x039c;
+ fftindex_bfsfcw_ratio = 0x011c;
+ } else if (bandwidth == 6000) {
+ coeff1_2048Nu = 0x02a8e4bd;
+ coeff1_4096Nu = 0x0154725e;
+ coeff1_8191Nu = 0x00aa3e81;
+ coeff1_8192Nu = 0x00aa392f;
+ coeff1_8193Nu = 0x00aa33de;
+ coeff2_2k = 0x0154725e;
+ coeff2_4k = 0x00aa392f;
+ coeff2_8k = 0x00551c98;
+ bfsfcw_fftindex_ratio = 0x0302;
+ fftindex_bfsfcw_ratio = 0x0154;
+ } else if (bandwidth == 7000) {
+ coeff1_2048Nu = 0x031a6032;
+ coeff1_4096Nu = 0x018d3019;
+ coeff1_8191Nu = 0x00c69e41;
+ coeff1_8192Nu = 0x00c6980c;
+ coeff1_8193Nu = 0x00c691d8;
+ coeff2_2k = 0x018d3019;
+ coeff2_4k = 0x00c6980c;
+ coeff2_8k = 0x00634c06;
+ bfsfcw_fftindex_ratio = 0x0294;
+ fftindex_bfsfcw_ratio = 0x018d;
+ } else if (bandwidth == 8000) {
+ coeff1_2048Nu = 0x038bdba6;
+ coeff1_4096Nu = 0x01c5edd3;
+ coeff1_8191Nu = 0x00e2fe02;
+ coeff1_8192Nu = 0x00e2f6ea;
+ coeff1_8193Nu = 0x00e2efd2;
+ coeff2_2k = 0x01c5edd3;
+ coeff2_4k = 0x00e2f6ea;
+ coeff2_8k = 0x00717b75;
+ bfsfcw_fftindex_ratio = 0x0242;
+ fftindex_bfsfcw_ratio = 0x01c6;
+ } else {
+ error = Error_INVALID_BW;
+ goto exit;
+ }
+ } else {
+ error = Error_INVALID_XTAL_FREQ;
+ goto exit;
+ }
+
+
+ /** Get ADC multiplier */
+ error = Standard_readRegister (demodulator, 0, Processor_OFDM, adcx2, &adcMultiplier);
+ if (error) goto exit;
+
+ if (adcMultiplier == 1) {
+ coeff1_2048Nu /= 2;
+ coeff1_4096Nu /= 2;
+ coeff1_8191Nu /= 2;
+ coeff1_8192Nu /= 2;
+ coeff1_8193Nu /= 2 ;
+ coeff2_2k /= 2;
+ coeff2_4k /= 2;
+ coeff2_8k /= 2;
+ }
+
+ /** Write coeff1_2048Nu */
+ /** Get Byte0 */
+ temp0 = (Byte) (coeff1_2048Nu & 0x000000FF);
+ /** Get Byte1 */
+ temp1 = (Byte) ((coeff1_2048Nu & 0x0000FF00) >> 8);
+ /** Get Byte2 */
+ temp2 = (Byte) ((coeff1_2048Nu & 0x00FF0000) >> 16);
+ /** Get Byte3 */
+ temp3 = (Byte) ((coeff1_2048Nu & 0x03000000) >> 24);
+
+ /** Gig endian to make 8051 happy */
+ buffer[cfoe_NS_2048_coeff1_25_24 - cfoe_NS_2048_coeff1_25_24] = temp3;
+ buffer[cfoe_NS_2048_coeff1_23_16 - cfoe_NS_2048_coeff1_25_24] = temp2;
+ buffer[cfoe_NS_2048_coeff1_15_8 - cfoe_NS_2048_coeff1_25_24] = temp1;
+ buffer[cfoe_NS_2048_coeff1_7_0 - cfoe_NS_2048_coeff1_25_24] = temp0;
+
+ /** Write coeff2_2k */
+ /** Get Byte0 */
+ temp0 = (Byte) ((coeff2_2k & 0x000000FF));
+ /** Get Byte1 */
+ temp1 = (Byte) ((coeff2_2k & 0x0000FF00) >> 8);
+ /** Get Byte2 */
+ temp2 = (Byte) ((coeff2_2k & 0x00FF0000) >> 16);
+ /** Get Byte3 */
+ temp3 = (Byte) ((coeff2_2k & 0x01000000) >> 24);
+
+ /** Gig endian to make 8051 happy */
+ buffer[cfoe_NS_2k_coeff2_24 - cfoe_NS_2048_coeff1_25_24] = temp3;
+ buffer[cfoe_NS_2k_coeff2_23_16 - cfoe_NS_2048_coeff1_25_24] = temp2;
+ buffer[cfoe_NS_2k_coeff2_15_8 - cfoe_NS_2048_coeff1_25_24] = temp1;
+ buffer[cfoe_NS_2k_coeff2_7_0 - cfoe_NS_2048_coeff1_25_24] = temp0;
+
+ /** Write coeff1_8191Nu */
+ /** Get Byte0 */
+ temp0 = (Byte) ((coeff1_8191Nu & 0x000000FF));
+ /** Get Byte1 */
+ temp1 = (Byte) ((coeff1_8191Nu & 0x0000FF00) >> 8);
+ /** Get Byte2 */
+ temp2 = (Byte) ((coeff1_8191Nu & 0x00FFC000) >> 16);
+ /** Get Byte3 */
+ temp3 = (Byte) ((coeff1_8191Nu & 0x03000000) >> 24);
+
+ /** Big endian to make 8051 happy */
+ buffer[cfoe_NS_8191_coeff1_25_24 - cfoe_NS_2048_coeff1_25_24] = temp3;
+ buffer[cfoe_NS_8191_coeff1_23_16 - cfoe_NS_2048_coeff1_25_24] = temp2;
+ buffer[cfoe_NS_8191_coeff1_15_8 - cfoe_NS_2048_coeff1_25_24] = temp1;
+ buffer[cfoe_NS_8191_coeff1_7_0 - cfoe_NS_2048_coeff1_25_24] = temp0;
+
+ /** Write coeff1_8192Nu */
+ /** Get Byte0 */
+ temp0 = (Byte) (coeff1_8192Nu & 0x000000FF);
+ /** Get Byte1 */
+ temp1 = (Byte) ((coeff1_8192Nu & 0x0000FF00) >> 8);
+ /** Get Byte2 */
+ temp2 = (Byte) ((coeff1_8192Nu & 0x00FFC000) >> 16);
+ /** Get Byte3 */
+ temp3 = (Byte) ((coeff1_8192Nu & 0x03000000) >> 24);
+
+ /** Gig endian to make 8051 happy */
+ buffer[cfoe_NS_8192_coeff1_25_24 - cfoe_NS_2048_coeff1_25_24] = temp3;
+ buffer[cfoe_NS_8192_coeff1_23_16 - cfoe_NS_2048_coeff1_25_24] = temp2;
+ buffer[cfoe_NS_8192_coeff1_15_8 - cfoe_NS_2048_coeff1_25_24] = temp1;
+ buffer[cfoe_NS_8192_coeff1_7_0 - cfoe_NS_2048_coeff1_25_24] = temp0;
+
+ /** Write coeff1_8193Nu */
+ /** Get Byte0 */
+ temp0 = (Byte) ((coeff1_8193Nu & 0x000000FF));
+ /** Get Byte1 */
+ temp1 = (Byte) ((coeff1_8193Nu & 0x0000FF00) >> 8);
+ /** Get Byte2 */
+ temp2 = (Byte) ((coeff1_8193Nu & 0x00FFC000) >> 16);
+ /** Get Byte3 */
+ temp3 = (Byte) ((coeff1_8193Nu & 0x03000000) >> 24);
+
+ /** Big endian to make 8051 happy */
+ buffer[cfoe_NS_8193_coeff1_25_24 - cfoe_NS_2048_coeff1_25_24] = temp3;
+ buffer[cfoe_NS_8193_coeff1_23_16 - cfoe_NS_2048_coeff1_25_24] = temp2;
+ buffer[cfoe_NS_8193_coeff1_15_8 - cfoe_NS_2048_coeff1_25_24] = temp1;
+ buffer[cfoe_NS_8193_coeff1_7_0 - cfoe_NS_2048_coeff1_25_24] = temp0;
+
+ /** Write coeff2_8k */
+ /** Get Byte0 */
+ temp0 = (Byte) ((coeff2_8k & 0x000000FF));
+ /** Get Byte1 */
+ temp1 = (Byte) ((coeff2_8k & 0x0000FF00) >> 8);
+ /** Get Byte2 */
+ temp2 = (Byte) ((coeff2_8k & 0x00FF0000) >> 16);
+ /** Get Byte3 */
+ temp3 = (Byte) ((coeff2_8k & 0x01000000) >> 24);
+
+ /** Big endian to make 8051 happy */
+ buffer[cfoe_NS_8k_coeff2_24 - cfoe_NS_2048_coeff1_25_24] = temp3;
+ buffer[cfoe_NS_8k_coeff2_23_16 - cfoe_NS_2048_coeff1_25_24] = temp2;
+ buffer[cfoe_NS_8k_coeff2_15_8 - cfoe_NS_2048_coeff1_25_24] = temp1;
+ buffer[cfoe_NS_8k_coeff2_7_0 - cfoe_NS_2048_coeff1_25_24] = temp0;
+
+ /** Write coeff1_4096Nu */
+ /** Get Byte0 */
+ temp0 = (Byte) (coeff1_4096Nu & 0x000000FF);
+ /** Get Byte1 */
+ temp1 = (Byte) ((coeff1_4096Nu & 0x0000FF00) >> 8);
+ /** Get Byte2 */
+ temp2 = (Byte) ((coeff1_4096Nu & 0x00FF0000) >> 16);
+ /** Get Byte3[1:0] */
+ /** Bit[7:2] will be written soon and so don't have to care them */
+ temp3 = (Byte) ((coeff1_4096Nu & 0x03000000) >> 24);
+
+ /** Big endian to make 8051 happy */
+ buffer[cfoe_NS_4096_coeff1_25_24 - cfoe_NS_2048_coeff1_25_24] = temp3;
+ buffer[cfoe_NS_4096_coeff1_23_16 - cfoe_NS_2048_coeff1_25_24] = temp2;
+ buffer[cfoe_NS_4096_coeff1_15_8 - cfoe_NS_2048_coeff1_25_24] = temp1;
+ buffer[cfoe_NS_4096_coeff1_7_0 - cfoe_NS_2048_coeff1_25_24] = temp0;
+
+ /** Write coeff2_4k */
+ /** Get Byte0 */
+ temp0 = (Byte) ((coeff2_4k & 0x000000FF));
+ /** Get Byte1 */
+ temp1 = (Byte) ((coeff2_4k & 0x0000FF00) >> 8);
+ /** Get Byte2 */
+ temp2 = (Byte) ((coeff2_4k & 0x00FF0000) >> 16);
+ /** Get Byte3 */
+ temp3 = (Byte) ((coeff2_4k & 0x01000000) >> 24);
+
+ /** Big endian to make 8051 happy */
+ buffer[cfoe_NS_4k_coeff2_24 - cfoe_NS_2048_coeff1_25_24] = temp3;
+ buffer[cfoe_NS_4k_coeff2_23_16 - cfoe_NS_2048_coeff1_25_24] = temp2;
+ buffer[cfoe_NS_4k_coeff2_15_8 - cfoe_NS_2048_coeff1_25_24] = temp1;
+ buffer[cfoe_NS_4k_coeff2_7_0 - cfoe_NS_2048_coeff1_25_24] = temp0;
+
+ /** Get Byte0 */
+ temp0 = (Byte) (bfsfcw_fftindex_ratio & 0x00FF);
+ /** Get Byte1 */
+ temp1 = (Byte) ((bfsfcw_fftindex_ratio & 0xFF00) >> 8);
+
+ /** Big endian to make 8051 happy */
+ buffer[bfsfcw_fftindex_ratio_15_8 - cfoe_NS_2048_coeff1_25_24] = temp1;
+ buffer[bfsfcw_fftindex_ratio_7_0 - cfoe_NS_2048_coeff1_25_24] = temp0;
+
+ /** Get Byte0 */
+ temp0 = (Byte) (fftindex_bfsfcw_ratio & 0x00FF);
+ /** Get Byte1 */
+ temp1 = (Byte) ((fftindex_bfsfcw_ratio & 0xFF00) >> 8);
+
+ /** Big endian to make 8051 happy */
+ buffer[fftindex_bfsfcw_ratio_15_8 - cfoe_NS_2048_coeff1_25_24] = temp1;
+ buffer[fftindex_bfsfcw_ratio_7_0 - cfoe_NS_2048_coeff1_25_24] = temp0;
+
+ error = Standard_writeRegisters (demodulator, chip, Processor_OFDM, cfoe_NS_2048_coeff1_25_24, 36, buffer);
+ if (error) goto exit;
+
+exit :
+ return (error);
+}
+
+
+Dword Standard_setFrequency (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Dword frequency
+) {
+ Dword error = Error_NO_ERROR;
+ Byte band;
+ Byte i;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ /** Clear easy mode flag first */
+ error = Standard_writeRegister (demodulator, chip, Processor_OFDM, Training_Mode, 0x00);
+ if (error) goto exit;
+
+ /** Clear empty_channel_status lock flag */
+ error = Standard_writeRegister (demodulator, chip, Processor_OFDM, empty_channel_status, 0x00);
+ if (error) goto exit;
+
+ /** Clear MPEG2 lock flag */
+ error = Standard_writeRegisterBits (demodulator, chip, Processor_OFDM, r_mp2if_sync_byte_locked, mp2if_sync_byte_locked_pos, mp2if_sync_byte_locked_len, 0x00);
+ if (error) goto exit;
+
+ /** Determine frequency band */
+ band = 0xFF;
+ for (i = 0; i < Standard_MAX_BAND; i++) {
+ if ((frequency >= Standard_bandTable[i].minimum) && (frequency <= Standard_bandTable[i].maximum)) {
+ band = i;
+ break;
+ }
+ }
+ error = Standard_writeRegister (demodulator, chip, Processor_OFDM, FreBand, band);
+ if (error) goto exit;
+
+ if (ganymede->tunerDescription->setTuner != NULL) {
+ if ((ganymede->busId != Bus_I2M) && (ganymede->busId != Bus_I2U)) {
+ if (ganymede->chipNumber > 1 && chip == 0) {
+ error = ganymede->tunerDescription->setTuner (demodulator, chip, ganymede->bandwidth[chip], frequency + 100);
+ if (error) goto exit;
+ } else if (ganymede->chipNumber > 1 && chip == 1) {
+ error = ganymede->tunerDescription->setTuner (demodulator, chip, ganymede->bandwidth[chip], frequency - 100);
+ if (error) goto exit;
+ } else {
+ error = ganymede->tunerDescription->setTuner (demodulator, chip, ganymede->bandwidth[chip], frequency);
+ if (error) goto exit;
+ }
+ }
+ }
+
+ /** Trigger ofsm */
+ error = Standard_writeRegister (demodulator, chip, Processor_OFDM, trigger_ofsm, 0);
+ if (error) goto exit;
+
+ ganymede->frequency[chip] = frequency;
+
+exit :
+ return (error);
+}
+
+
+Dword Standard_loadFirmware (
+ IN Demodulator* demodulator,
+ IN Byte* firmwareCodes,
+ IN Segment* firmwareSegments,
+ IN Byte* firmwarePartitions
+) {
+ Dword error = Error_NO_ERROR;
+ Dword beginPartition;
+ Dword endPartition;
+ Dword version;
+ Dword firmwareLength;
+ Byte* firmwareCodesPointer;
+ Word command;
+ Dword i;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ /** Set I2C master clock speed. */
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, p_reg_one_cycle_counter_tuner, User_I2C_SPEED);
+ if (error) goto exit;
+
+ firmwareCodesPointer = firmwareCodes;
+
+ if ((ganymede->tunerDescription->tunerId == 0x23 || ganymede->tunerDescription->tunerId == 0x2D) &&
+ firmwarePartitions[0] == firmwarePartitions[1]) {
+ beginPartition = firmwarePartitions[0];
+ endPartition = firmwarePartitions[0] + firmwarePartitions[1];
+
+ for (i = 0; i < beginPartition; i++) {
+ firmwareLength = firmwareSegments[i].segmentLength;
+ firmwareCodesPointer += firmwareLength;
+ }
+ } else {
+ beginPartition = 0;
+ endPartition = firmwarePartitions[0];
+ }
+
+ for (i = beginPartition; i < endPartition; i++) {
+ firmwareLength = firmwareSegments[i].segmentLength;
+ if (firmwareSegments[i].segmentType == 0) {
+ /** Dwonload firmware */
+ error = Standard_sendCommand (demodulator, Command_FW_DOWNLOAD_BEGIN, 0, Processor_LINK, 0, NULL, 0, NULL);
+ if (error) goto exit;
+ if (ganymede->cmdDescription->loadFirmware != NULL) {
+ error = ganymede->cmdDescription->loadFirmware (demodulator, firmwareLength, firmwareCodesPointer);
+ }
+ if (error) goto exit;
+ error = Standard_sendCommand (demodulator, Command_FW_DOWNLOAD_END, 0, Processor_LINK, 0, NULL, 0, NULL);
+ if (error) goto exit;
+ } else if (firmwareSegments[i].segmentType == 1) {
+ /** Copy firmware */
+ error = Standard_sendCommand (demodulator, Command_SCATTER_WRITE, 0, Processor_LINK, firmwareLength, firmwareCodesPointer, 0, NULL);
+ if (error) goto exit;
+ } else {
+ /** Direct write firmware */
+ command = (Word) (firmwareCodesPointer[0] << 8) + (Word) firmwareCodesPointer[1];
+ error = Standard_sendCommand (demodulator, command, 0, Processor_LINK, firmwareLength - 2, firmwareCodesPointer + 2, 0, NULL);
+ if (error) goto exit;
+ }
+ firmwareCodesPointer += firmwareLength;
+ }
+
+ /** Boot */
+ error = Standard_sendCommand (demodulator, Command_BOOT, 0, Processor_LINK, 0, NULL, 0, NULL);
+ if (error) goto exit;
+
+ User_delay (demodulator, 10);
+
+ /** Check if firmware is running */
+ version = 0;
+ error = Standard_getFirmwareVersion (demodulator, Processor_LINK, &version);
+ if (error) goto exit;
+ if (version == 0)
+ error = Error_BOOT_FAIL;
+
+exit :
+ return (error);
+}
+
+
+Dword Standard_loadScript (
+ IN Demodulator* demodulator,
+ IN StreamType streamType,
+ IN Word* scriptSets,
+ IN ValueSet* scripts,
+ IN Word* tunerScriptSets,
+ IN ValueSet* tunerScripts
+) {
+ Dword error = Error_NO_ERROR;
+ Word beginScript;
+ Word endScript;
+ Byte i, value1 = 0, value2 = 0, supportRelay = 0, chipNumber = 0, bufferLens = 1;
+ Word j;
+ Byte buffer[20] = {0,};
+ Dword tunerAddr, tunerAddrTemp;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+
+ /** Querry SupportRelayCommandWrite **/
+ error = Standard_readRegister (demodulator, 0, Processor_OFDM, 0x004D, &supportRelay);
+ if (error) goto exit;
+
+ if (supportRelay && ganymede->chipNumber == 2)
+ chipNumber = 1;
+ else
+ chipNumber = ganymede->chipNumber;
+
+ /** Enable RelayCommandWrite **/
+ if (supportRelay) {
+ error = Standard_writeRegister (demodulator, 0, Processor_OFDM, 0x004E, 1);
+ if (error) goto exit;
+ }
+
+ if ((scriptSets[0] != 0) && (scripts != NULL)) {
+ beginScript = 0;
+ endScript = scriptSets[0];
+
+ for (i = 0; i < chipNumber; i++) {
+ /** Load OFSM init script */
+ for (j = beginScript; j < endScript; j++) {
+ tunerAddr = tunerAddrTemp = scripts[j].address;
+ buffer[0] = scripts[j].value;
+
+ while (j < endScript && bufferLens < 20) {
+ tunerAddrTemp += 1;
+ if (tunerAddrTemp != scripts[j+1].address)
+ break;
+
+ buffer[bufferLens] = scripts[j+1].value;
+ bufferLens ++;
+ j ++;
+ }
+
+ error = Standard_writeRegisters (demodulator, i, Processor_OFDM, tunerAddr, bufferLens, buffer);
+ if (error) goto exit;
+ bufferLens = 1;
+ }
+ }
+ }
+
+
+ /** Distinguish chip type */
+ error = Standard_readRegister (demodulator, 0, Processor_LINK, 0x1222, &value1);
+ if (error) goto exit;
+
+ error = Standard_readRegister (demodulator, 0, Processor_LINK, 0x384F, &value2);
+ if (error) goto exit;
+
+ if ((tunerScriptSets[0] != 0) && (tunerScripts != NULL)) {
+ if (tunerScriptSets[1] == tunerScriptSets[0] && !(value1 == 0xF8 && value2 == 0xEA)) {
+ beginScript = tunerScriptSets[0];
+ endScript = tunerScriptSets[0] + tunerScriptSets[1];
+ } else {
+ beginScript = 0;
+ endScript = tunerScriptSets[0];
+ }
+
+ for (i = 0; i < chipNumber; i++) {
+ /** Load tuner init script */
+ for (j = beginScript; j < endScript; j++) {
+ tunerAddr = tunerAddrTemp = tunerScripts[j].address;
+ buffer[0] = tunerScripts[j].value;
+
+ while (j < endScript && bufferLens < 20) {
+ tunerAddrTemp += 1;
+ if (tunerAddrTemp != tunerScripts[j+1].address)
+ break;
+
+ buffer[bufferLens] = tunerScripts[j+1].value;
+ bufferLens ++;
+ j ++;
+ }
+
+ error = Standard_writeRegisters (demodulator, i, Processor_OFDM, tunerAddr, bufferLens, buffer);
+ if (error) goto exit;
+ bufferLens = 1;
+ }
+ }
+ }
+
+ /** Disable RelayCommandWrite **/
+ if (supportRelay) {
+ error = Standard_writeRegister (demodulator, 0, Processor_OFDM, 0x004E, 0);
+ if (error) goto exit;
+ }
+
+exit :
+ return (error);
+}
+
+/** end of local functions */
+
+Dword Standard_writeRegister (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte value
+) {
+ return (Standard_writeRegisters (demodulator, chip, processor, registerAddress, 1, &value));
+}
+
+
+Dword Standard_writeRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ WriteRegistersRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.processor = processor;
+ request.registerAddress = registerAddress;
+ request.bufferLength = bufferLength;
+ User_memoryCopy (demodulator, request.buffer, buffer, bufferLength);
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_WRITEREGISTERS,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Byte registerAddressLength;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (processor == Processor_LINK) {
+ if (registerAddress > 0x000000FF) {
+ registerAddressLength = 2;
+ } else {
+ registerAddressLength = 1;
+ }
+ } else {
+ registerAddressLength = 2;
+ }
+ if (ganymede->cmdDescription->writeRegisters != NULL) {
+ error = ganymede->cmdDescription->writeRegisters (demodulator, chip, processor, registerAddress, registerAddressLength, bufferLength, buffer);
+ }
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_writeTunerRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word registerAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+) {
+ Dword error = Error_NO_ERROR;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->cmdDescription->writeTunerRegisters != NULL) {
+ error = ganymede->cmdDescription->writeTunerRegisters (demodulator, chip, ganymede->tunerDescription->tunerAddress, registerAddress, ganymede->tunerDescription->registerAddressLength, bufferLength, buffer);
+ }
+ return (error);
+}
+
+
+Dword Standard_writeGenericRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte interfaceIndex,
+ IN Byte slaveAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+) {
+ Byte writeBuffer[256];
+ Byte i;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ writeBuffer[0] = bufferLength;
+ writeBuffer[1] = interfaceIndex;
+ writeBuffer[2] = slaveAddress;
+
+ for (i = 0; i < bufferLength; i++) {
+ writeBuffer[3 + i] = buffer[i];
+ }
+ return (Standard_sendCommand (demodulator, Command_GENERIC_WRITE, chip, Processor_LINK, bufferLength + 3, writeBuffer, 0, NULL));
+}
+
+
+Dword Standard_writeEepromValues (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word registerAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ WriteEepromValuesRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.registerAddress = registerAddress;
+ request.bufferLength = bufferLength;
+ User_memoryCopy (demodulator, request.buffer, buffer, bufferLength);
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_WRITEEEPROMVALUES,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Byte eepromAddress;
+ Byte registerAddressLength;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ /** Read EEPROM address. */
+ /*error = ganymede->cmdDescription.readRegisters (demodulator, chip, Processor_LINK, 0xBFF0, 1, &eepromAddress);
+ if (error) goto exit;
+ */
+ eepromAddress = 0x01;
+
+ /** Read EEPROM valid length of register. */
+ /*error = ganymede->cmdDescription.readRegisters (demodulator, chip, Processor_LINK, 0xBFF1, 1, &registerAddressLength);
+ if (error) goto exit;
+ */
+ registerAddressLength = 0x01;
+
+ if (ganymede->cmdDescription->writeEepromValues != NULL) {
+ error = ganymede->cmdDescription->writeEepromValues (demodulator, chip, eepromAddress, registerAddress, registerAddressLength, bufferLength, buffer);
+ }
+
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_writeRegisterBits (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte position,
+ IN Byte length,
+ IN Byte value
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ WriteRegisterBitsRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.processor = processor;
+ request.registerAddress = registerAddress;
+ request.position = position;
+ request.length = length;
+ request.value = value;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_WRITEREGISTERBITS,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Byte registerAddressLength;
+ Ganymede* ganymede;
+ Byte temp;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (processor == Processor_LINK) {
+ if (registerAddress > 0x000000FF) {
+ registerAddressLength = 2;
+ } else {
+ registerAddressLength = 1;
+ }
+ } else {
+ registerAddressLength = 2;
+ }
+ if (length == 8) {
+ if (ganymede->cmdDescription->writeRegisters != NULL) {
+ error = ganymede->cmdDescription->writeRegisters (demodulator, chip, processor, registerAddress, registerAddressLength, 1, &value);
+ }
+ } else {
+ if (ganymede->cmdDescription->readRegisters != NULL) {
+ error = ganymede->cmdDescription->readRegisters (demodulator, chip, processor, registerAddress, registerAddressLength, 1, &temp);
+ if (error) goto exit;
+ }
+
+ temp = REG_CREATE (value, temp, position, length);
+
+ if (ganymede->cmdDescription->writeRegisters != NULL) {
+ error = ganymede->cmdDescription->writeRegisters (demodulator, chip, processor, registerAddress, registerAddressLength, 1, &temp);
+ if (error) goto exit;
+ }
+ }
+exit:
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_readRegister (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ OUT Byte* value
+) {
+ return (Standard_readRegisters (demodulator, chip, processor, registerAddress, 1, value));
+}
+
+
+Dword Standard_readRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte bufferLength,
+ OUT Byte* buffer
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ ReadRegistersRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.processor = processor;
+ request.registerAddress = registerAddress;
+ request.bufferLength = bufferLength;
+ request.buffer = buffer;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_READREGISTERS,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Byte registerAddressLength;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (processor == Processor_LINK) {
+ if (registerAddress > 0x000000FF) {
+ registerAddressLength = 2;
+ } else {
+ registerAddressLength = 1;
+ }
+ } else {
+ registerAddressLength = 2;
+ }
+ if (ganymede->cmdDescription->readRegisters != NULL) {
+ error = ganymede->cmdDescription->readRegisters (demodulator, chip, processor, registerAddress, registerAddressLength, bufferLength, buffer);
+ }
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_readTunerRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word registerAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ ReadTunerRegistersRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.registerAddress = registerAddress;
+ request.bufferLength = bufferLength;
+ request.buffer = buffer;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_READTUNERREGISTERS,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->cmdDescription->readTunerRegisters != NULL) {
+ error = ganymede->cmdDescription->readTunerRegisters (demodulator, chip, ganymede->tunerDescription->tunerAddress, registerAddress, ganymede->tunerDescription->registerAddressLength, bufferLength, buffer);
+ }
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_readGenericRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte interfaceIndex,
+ IN Byte slaveAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+) {
+ Byte writeBuffer[3];
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ writeBuffer[0] = bufferLength;
+ writeBuffer[1] = interfaceIndex;
+ writeBuffer[2] = slaveAddress;
+
+ return (Standard_sendCommand (demodulator, Command_GENERIC_READ, chip, Processor_LINK, 3, writeBuffer, bufferLength, buffer));
+}
+
+
+Dword Standard_readEepromValues (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word registerAddress,
+ IN Byte bufferLength,
+ OUT Byte* buffer
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ ReadEepromValuesRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.registerAddress = registerAddress;
+ request.bufferLength = bufferLength;
+ request.buffer = buffer;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_READEEPROMVALUES,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Byte eepromAddress;
+ Byte registerAddressLength;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ /** Read EEPROM address. */
+ /*error = ganymede->cmdDescription.readRegisters (demodulator, chip, Processor_LINK, 0xBFF0, 1, &eepromAddress);
+ if (error) goto exit;
+ */
+ eepromAddress = 0x01;
+
+ /** Read EEPROM valid length of register. */
+ /*error = ganymede->cmdDescription.readRegisters (demodulator, chip, Processor_LINK, 0xBFF1, 1, &registerAddressLength);
+ if (error) goto exit;
+ */
+ registerAddressLength = 0x01;
+
+ if (ganymede->cmdDescription->readEepromValues != NULL) {
+ error = ganymede->cmdDescription->readEepromValues (demodulator, chip, eepromAddress, registerAddress, registerAddressLength, bufferLength, buffer);
+ }
+
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_readRegisterBits (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte position,
+ IN Byte length,
+ OUT Byte* value
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ ReadRegisterBitsRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.processor = processor;
+ request.registerAddress = registerAddress;
+ request.position = position;
+ request.length = length;
+ request.value = value;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_READREGISTERBITS,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Byte temp = 0;
+ Byte registerAddressLength;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (processor == Processor_LINK) {
+ if (registerAddress > 0x000000FF) {
+ registerAddressLength = 2;
+ } else {
+ registerAddressLength = 1;
+ }
+ } else {
+ registerAddressLength = 2;
+ }
+ if (ganymede->cmdDescription->readRegisters != NULL) {
+ error = ganymede->cmdDescription->readRegisters (demodulator, chip, processor, registerAddress, registerAddressLength, 1, &temp);
+ }
+ if (error) goto exit;
+
+ if (length == 8) {
+ *value = temp;
+ } else {
+ temp = REG_GET (temp, position, length);
+ *value = temp;
+ }
+
+#endif
+
+exit :
+ return (error);
+}
+
+
+Dword Standard_getHardwareVersion (
+ IN Demodulator* demodulator,
+ OUT Dword* version
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+#else
+ Byte hwVer0;
+ Byte hwVer1;
+
+ error = Standard_readRegister (demodulator, 0, Processor_OFDM, 0xFFF0, &hwVer0);
+ if (error) goto exit;
+ error = Standard_readRegister (demodulator, 0, Processor_OFDM, 0xFFF1, &hwVer1);
+ if (error) goto exit;
+
+ /** HW Version = HWVer + Top_Ver */
+ *version = (Dword) (hwVer1 << 8) + (Dword) hwVer0;
+
+exit :
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_getFirmwareVersion (
+ IN Demodulator* demodulator,
+ IN Processor processor,
+ OUT Dword* version
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ GetFirmwareVersionRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.processor = processor;
+ request.version = version;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_GETFIRMWAREVERSION,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Byte writeBuffer[1] = {0,};
+ Byte readBuffer[4] = {0,};
+ Byte value = 0;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if ((ganymede->busId == Bus_I2M) || (ganymede->busId == Bus_I2U)) {
+ *version = 0xFFFFFFFF;
+ goto exit;
+ }
+
+ /** Check chip version */
+ error = Standard_readRegister (demodulator, 0, Processor_LINK, 0x1222, &value);
+ if (error) goto exit;
+
+ if (value == 0xF8 || User_MAX_PKT_SIZE > 9) {
+ writeBuffer[0] = 1;
+ error = Standard_sendCommand (demodulator, Command_QUERYINFO, 0, processor, 1, writeBuffer, 4, readBuffer);
+ if (error) goto exit;
+ } else {
+ error = Standard_sendCommand (demodulator, Command_FW_DOWNLOAD_END, 0, Processor_LINK, 0, NULL, 0, NULL);
+ if (error == 0x01000009) { /* Boot code*/
+ readBuffer[0] = readBuffer[1] = readBuffer[2] = readBuffer[3] = 0;
+ error = 0;
+ } else if (error = 0x010000FA) { /* Firmware code*/
+ if (processor == Processor_LINK)
+ {
+ error = Standard_readRegisters (demodulator, 0, Processor_LINK, 0x83E9, 1, readBuffer);
+ if (error) goto exit;
+
+ error = Standard_readRegisters (demodulator, 0, Processor_LINK, 0x83EA, 1, readBuffer + 1);
+ if (error) goto exit;
+
+ error = Standard_readRegisters (demodulator, 0, Processor_LINK, 0x83EB, 1, readBuffer + 2);
+ if (error) goto exit;
+
+ error = Standard_readRegisters (demodulator, 0, Processor_LINK, 0x83EC, 1, readBuffer + 3);
+ if (error) goto exit;
+ }
+ else
+ {
+ error = Standard_readRegisters (demodulator, 0, Processor_OFDM, 0x4191, 1, readBuffer);
+ if (error) goto exit;
+
+ error = Standard_readRegisters (demodulator, 0, Processor_OFDM, 0x4192, 1, readBuffer + 1);
+ if (error) goto exit;
+
+ error = Standard_readRegisters (demodulator, 0, Processor_OFDM, 0x4193, 1, readBuffer + 2);
+ if (error) goto exit;
+
+ error = Standard_readRegisters (demodulator, 0, Processor_OFDM, 0x4194, 1, readBuffer + 3);
+ if (error) goto exit;
+ }
+ } else /* error */
+ goto exit;
+ }
+
+ *version = (Dword) (((Dword) readBuffer[0] << 24) + ((Dword) readBuffer[1] << 16) + ((Dword) readBuffer[2] << 8) + (Dword) readBuffer[3]);
+
+exit :
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_getPostVitBer (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Dword* postErrorCount, /** 24 bits */
+ OUT Dword* postBitCount, /** 16 bits */
+ OUT Word* abortCount
+) {
+ Dword error = Error_NO_ERROR;
+ Dword errorCount;
+ Dword bitCount;
+ Byte buffer[7];
+ Word abort;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ *postErrorCount = 0;
+ *postBitCount = 0;
+
+ error = Standard_readRegisters (demodulator, chip, Processor_OFDM, rsd_abort_packet_cnt_7_0, r_rsd_packet_unit_15_8 - rsd_abort_packet_cnt_7_0 + 1, buffer);
+ if (error) goto exit;
+
+ abort = ((Word) buffer[rsd_abort_packet_cnt_15_8 - rsd_abort_packet_cnt_7_0] << 8) + buffer[rsd_abort_packet_cnt_7_0 - rsd_abort_packet_cnt_7_0];
+ errorCount = ((Dword) buffer[rsd_bit_err_cnt_23_16 - rsd_abort_packet_cnt_7_0] << 16) + ((Dword) buffer[rsd_bit_err_cnt_15_8 - rsd_abort_packet_cnt_7_0] << 8) + buffer[rsd_bit_err_cnt_7_0 - rsd_abort_packet_cnt_7_0];
+ bitCount = ((Dword) buffer[r_rsd_packet_unit_15_8 - rsd_abort_packet_cnt_7_0] << 8) + buffer[r_rsd_packet_unit_7_0 - rsd_abort_packet_cnt_7_0];
+ if (bitCount == 0) {
+ /*error = Error_RSD_PKT_CNT_0;*/
+ *postErrorCount = 1;
+ *postBitCount = 2;
+ *abortCount = 1000;
+ goto exit;
+ }
+
+ *abortCount = abort;
+ bitCount = bitCount - (Dword)abort;
+ if (bitCount == 0) {
+ *postErrorCount = 1;
+ *postBitCount = 2;
+ } else {
+ *postErrorCount = errorCount - (Dword) abort * 8 * 8;
+ *postBitCount = bitCount * 204 * 8;
+ }
+
+exit :
+ return (error);
+}
+
+
+Dword Standard_getRfAgcGain (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Byte* rfAgc
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+#else
+ /** get rf_agc_control */
+ error = Standard_readRegisterBits (demodulator, chip, Processor_OFDM, r_reg_aagc_rf_gain, reg_aagc_rf_gain_pos, reg_aagc_rf_gain_len, rfAgc);
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_getIfAgcGain (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Byte* ifAgc
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+#else
+ /** get if_agc_control */
+ error = Standard_readRegisterBits (demodulator, chip, Processor_OFDM, r_reg_aagc_if_gain, reg_aagc_if_gain_pos, reg_aagc_if_gain_len, ifAgc);
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_getSignalQuality (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Byte* quality
+) {
+ Dword error = Error_NO_ERROR;
+
+ error = Standard_readRegister (demodulator, chip, Processor_OFDM, signal_quality, quality);
+ return (error);
+}
+
+
+Dword Standard_getSignalStrength (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Byte* strength
+) {
+ Dword error = Error_NO_ERROR;
+
+ error = Standard_readRegister (demodulator, chip, Processor_OFDM, signal_strength, strength);
+ return (error);
+}
+
+
+Dword Standard_getSignalStrengthDbm (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Long rfpullUpVolt_X10, /** RF pull up voltage multiplied by 10 */
+ IN Long ifpullUpVolt_X10, /** IF pull up voltage multiplied by 10 */
+ OUT Long* strengthDbm /** DBm */
+)
+{
+ Dword error = Error_NO_ERROR;
+ Byte temp;
+
+ if ((rfpullUpVolt_X10 == 0) || (ifpullUpVolt_X10 == 0)) {
+ error = Error_INV_PULLUP_VOLT;
+ goto exit;
+ }
+
+ error = Standard_readRegister (demodulator, chip, Processor_OFDM, est_rf_level_dbm, &temp);
+ if (error) goto exit;
+
+ *strengthDbm = (Long) (temp * -1);
+
+exit :
+ return (error);
+}
+
+
+Dword Standard_loadIrTable (
+ IN Demodulator* demodulator,
+ IN Word tableLength,
+ IN Byte* table
+) {
+ Dword error = Error_NO_ERROR;
+ Byte baseHigh;
+ Byte baseLow;
+ Word registerBase;
+ Word i;
+
+ error = Standard_readRegister (demodulator, 0, Processor_LINK, 0x417F, &baseHigh);
+ if (error) goto exit;
+ error = Standard_readRegister (demodulator, 0, Processor_LINK, 0x4180, &baseLow);
+ if (error) goto exit;
+
+ registerBase = (Word) (baseHigh << 8) + (Word) baseLow;
+
+ if (registerBase) {
+ for (i = 0; i < tableLength; i++) {
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, registerBase + i, table[i]);
+ if (error) goto exit;
+ }
+ }
+
+exit :
+ return (error);
+}
+
+
+Dword Standard_initialize (
+ IN Demodulator* demodulator,
+ IN Byte chipNumber,
+ IN Word sawBandwidth,
+ IN StreamType streamType,
+ IN Architecture architecture
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ InitializeRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ ganymede->driver = NULL;
+ error = Standard_getDriver (demodulator, &ganymede->driver);
+
+ if (ganymede->driver != NULL) {
+ request.chipNumber = chipNumber;
+ request.sawBandwidth = sawBandwidth;
+ request.streamType = streamType;
+ request.architecture = architecture;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_INITIALIZE,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Dword crystal = 0;
+ Dword adc = 0;
+ Dword fcw = 0;
+ Byte buffer[4];
+ Dword version = 0;
+ Word* tunerScriptSets = NULL;
+ ValueSet* tunerScripts = NULL;
+ Byte i;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ ganymede->chipNumber = chipNumber;
+ ganymede->options = 0x0000;
+ ganymede->fcw = 0x00000000;
+ ganymede->frequency[0] = 642000;
+ ganymede->frequency[1] = 642000;
+ ganymede->initialized = False;
+
+
+ if (ganymede->busId == 0xFFFF) {
+ goto exit;
+ }
+
+ if (ganymede->tunerDescription->tunerId == 0xFFFF) {
+ goto exit;
+ }
+
+ error = Standard_getFirmwareVersion (demodulator, Processor_LINK, &version);
+ if (error) goto exit;
+ if (version != 0) {
+ ganymede->booted = True;
+ } else {
+ ganymede->booted = False;
+ }
+
+
+ ganymede->firmwareCodes = Firmware_codes;
+ ganymede->firmwareSegments = Firmware_segments;
+ ganymede->firmwarePartitions = Firmware_partitions;
+ ganymede->scriptSets = Firmware_scriptSets;
+ ganymede->scripts = Firmware_scripts;
+
+ /** Set up by default tunerDescription */ /** releaseExternalRemove */
+ tunerScriptSets = ganymede->tunerDescription->tunerScriptSets;
+ tunerScripts = ganymede->tunerDescription->tunerScript;
+
+
+ error = Standard_readRegisterBits (demodulator, 0, Processor_LINK, r_io_mux_pwron_clk_strap, io_mux_pwron_clk_strap_pos, io_mux_pwron_clk_strap_len, &i);
+ if (error) goto exit;
+
+ ganymede->crystalFrequency = Standard_clockTable[i].crystalFrequency;
+ ganymede->adcFrequency = Standard_clockTable[i].adcFrequency;
+
+ ganymede->dataReady = False;
+
+ /** Write secondary I2C address to device */
+ /** Enable or disable clock out for 2nd chip power saving */
+ if (ganymede->chipNumber > 1) {
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, 0x417F, Chip2_I2c_address);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, p_reg_top_clkoen, 1);
+ if (error) goto exit;
+ } else {
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, 0x417F, 0x00);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, p_reg_top_clkoen, 0);
+ if (error) goto exit;
+ }
+
+ /** Detect the HostA or HostB */
+ error = Standard_readRegisterBits (demodulator, 0, Processor_LINK, r_io_mux_pwron_hosta, io_mux_pwron_hosta_pos, io_mux_pwron_hosta_len, &ganymede->hostInterface[0]);
+ if (error) goto exit;
+
+ /** Load firmware */
+ if (ganymede->firmwareCodes != NULL) {
+ if (ganymede->booted == False) {
+ error = Standard_loadFirmware (demodulator, ganymede->firmwareCodes, ganymede->firmwareSegments, ganymede->firmwarePartitions);
+ if (error) goto exit;
+ ganymede->booted = True;
+ }
+ }
+
+ /** Set I2C master clock speed. */
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, p_reg_one_cycle_counter_tuner, User_I2C_SPEED);
+ if (error) goto exit;
+
+
+ /** Set I2C master clock 100k in order to support tuner I2C. */
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, p_reg_one_cycle_counter_tuner, 0x1a);
+ if (error) goto exit;
+
+ /** Open tuner */
+ for (i = 0; i < ganymede->chipNumber; i++) {
+
+ /** Set 0xD827 to 0 as open drain for tuner i2c */
+ error = Standard_writeRegister (demodulator, i , Processor_LINK, p_reg_top_padodpu, 0);
+ if (error) goto exit;
+
+ /** Set 0xD829 to 0 as push pull for tuner AGC */
+ error = Standard_writeRegister (demodulator, i , Processor_LINK, p_reg_top_agc_od, 0);
+ if (error) goto exit;
+ }
+ if (ganymede->tunerDescription->openTuner != NULL) {
+ if ((ganymede->busId != Bus_I2M) && (ganymede->busId != Bus_I2U)) {
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ error = ganymede->tunerDescription->openTuner (demodulator, i);
+ if (error) goto exit;
+ }
+ }
+ }
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ /** Tell firmware the type of tuner. */
+ error = Standard_writeRegister (demodulator, i, Processor_LINK, p_reg_link_ofsm_dummy_15_8, (Byte) ganymede->tunerDescription->tunerId);
+ if (error) goto exit;
+ }
+
+ /** Initialize OFDM */
+ if (ganymede->booted == True) {
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ /** Set read-update bit to 1 for constellation */
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, p_reg_feq_read_update, reg_feq_read_update_pos, reg_feq_read_update_len, 1);
+ if (error) goto exit;
+
+ /** Enable FEC Monitor */
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, p_fec_vtb_rsd_mon_en, fec_vtb_rsd_mon_en_pos, fec_vtb_rsd_mon_en_len, 1);
+ if (error) goto exit;
+ }
+
+ /** Compute ADC and load them to device */
+ error = Standard_computeCrystal (demodulator, (Long) ganymede->crystalFrequency * 1000, &crystal);
+ if (error) goto exit;
+
+ buffer[0] = (Byte) (crystal & 0x000000FF);
+ buffer[1] = (Byte) ((crystal & 0x0000FF00) >> 8);
+ buffer[2] = (Byte) ((crystal & 0x00FF0000) >> 16);
+ buffer[3] = (Byte) ((crystal & 0xFF000000) >> 24);
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ error = Standard_writeRegisters (demodulator, i, Processor_OFDM, crystal_clk_7_0, 4, buffer);
+ if (error) goto exit;
+ }
+
+ /** Compute ADC and load them to device */
+ error = Standard_computeAdc (demodulator, (Long) ganymede->adcFrequency, &adc);
+ if (error) goto exit;
+
+ buffer[0] = (Byte) (adc & 0x000000FF);
+ buffer[1] = (Byte) ((adc & 0x0000FF00) >> 8);
+ buffer[2] = (Byte) ((adc & 0x00FF0000) >> 16);
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ error = Standard_writeRegisters (demodulator, i, Processor_OFDM, p_reg_f_adc_7_0, 3, buffer);
+ if (error) goto exit;
+ }
+
+ /** Compute FCW and load them to device */
+ error = Standard_computeFcw (demodulator, (Long) ganymede->adcFrequency, (Long) ganymede->tunerDescription->ifFrequency, ganymede->tunerDescription->inversion, &fcw);
+ if (error) goto exit;
+ ganymede->fcw = fcw;
+
+ buffer[0] = (Byte) (fcw & 0x000000FF);
+ buffer[1] = (Byte) ((fcw & 0x0000FF00) >> 8);
+ buffer[2] = (Byte) ((fcw & 0x007F0000) >> 16);
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ error = Standard_writeRegisters (demodulator, i, Processor_OFDM, bfs_fcw_7_0, bfs_fcw_22_16 - bfs_fcw_7_0 + 1, buffer);
+ if (error) goto exit;
+ }
+ }
+
+ /** Load script */
+ if (ganymede->scripts != NULL) {
+ error = Standard_loadScript (demodulator, streamType, ganymede->scriptSets, ganymede->scripts, tunerScriptSets, tunerScripts);
+ if (error) goto exit;
+ }
+
+ /** Set the desired stream type */
+ error = Standard_setStreamType (demodulator, streamType);
+ if (error) goto exit;
+
+ /** Set the desired architecture type */
+ error = Standard_setArchitecture (demodulator, architecture);
+ if (error) goto exit;
+
+#if User_USE_INTERRUPT
+ if (ganymede->busId == Bus_SDIO) {
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_sdioc_external_int_en, reg_sdioc_external_int_en_pos, reg_sdioc_external_int_en_len, 1);
+ if (error) goto exit;
+ }
+#endif
+
+ for (i = 0; i< ganymede->chipNumber; i++) {
+
+ /** Set H/W MPEG2 locked detection **/
+ error = Standard_writeRegister (demodulator, i, Processor_LINK, p_reg_top_lock3_out, 1);
+ if (error) goto exit;
+
+ /** Set registers for driving power 0xD830 **/
+ error = Standard_writeRegister (demodulator, i, Processor_LINK, p_reg_top_padmiscdr2, 1);
+ if (error) goto exit;
+
+ /** Set registers for driving power 0xD831 **/
+ error = Standard_writeRegister (demodulator, i, Processor_LINK, p_reg_top_padmiscdr4, 0);
+ if (error) goto exit;
+
+ /** Set registers for driving power 0xD832 **/
+ error = Standard_writeRegister (demodulator, i, Processor_LINK, p_reg_top_padmiscdr8, 0);
+ if (error) goto exit;
+ }
+
+ ganymede->initialized = True;
+
+#endif
+exit:
+
+ return (error);
+}
+
+
+Dword Standard_finalize (
+ IN Demodulator* demodulator
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ FinalizeRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_FINALIZE,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Byte i;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->tunerDescription->closeTuner != NULL) {
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ error = ganymede->tunerDescription->closeTuner (demodulator, i);
+ }
+ }
+
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_isTpsLocked (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Bool* locked
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+#else
+ Byte temp;
+
+ *locked = False;
+
+ error = Standard_readRegisterBits (demodulator, chip, Processor_OFDM, p_fd_tpsd_lock, fd_tpsd_lock_pos, fd_tpsd_lock_len, &temp);
+ if (error) goto exit;
+ if (temp) *locked = True;
+
+exit :
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_isMpeg2Locked (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Bool* locked
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+#else
+ Byte temp;
+
+ *locked = False;
+
+ error = Standard_readRegisterBits (demodulator, chip, Processor_OFDM, r_mp2if_sync_byte_locked, mp2if_sync_byte_locked_pos, mp2if_sync_byte_locked_len, &temp);
+ if (error) goto exit;
+ if (temp) *locked = True;
+
+exit :
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_isLocked (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Bool* locked
+) {
+ Dword error = Error_NO_ERROR;
+
+ Word emptyLoop = 0;
+ Word tpsLoop = 0;
+ Word mpeg2Loop = 0;
+ Byte channels[2];
+ Byte begin;
+ Byte end;
+ Byte i;
+ Byte emptyChannel = 1;
+ Byte tpsLocked = 0;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ IsLockedRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.locked = locked;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_ISLOCKED,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+
+ *locked = False;
+
+ if (ganymede->architecture == Architecture_DCA) {
+ begin = 0;
+ end = ganymede->chipNumber;
+ } else {
+ begin = chip;
+ end = begin + 1;
+ }
+
+ for (i = begin; i < end; i++) {
+ ganymede->statistic[i].signalPresented = False;
+ ganymede->statistic[i].signalLocked = False;
+ ganymede->statistic[i].signalQuality = 0;
+ ganymede->statistic[i].signalStrength = 0;
+ }
+
+ channels[0] = 2;
+ channels[1] = 2;
+ while (emptyLoop < 40) {
+ for (i = begin; i < end; i++) {
+ error = Standard_readRegister (demodulator, i, Processor_OFDM, empty_channel_status, &channels[i]);
+ if (error) goto exit;
+ }
+ if ((channels[0] == 1) || (channels[1] == 1)) {
+ emptyChannel = 0;
+ break;
+ }
+ if ((channels[0] == 2) && (channels[1] == 2)) {
+ emptyChannel = 1;
+ goto exit;
+ }
+ User_delay (demodulator, 25);
+ emptyLoop++;
+ }
+
+ if (emptyChannel == 1) goto exit;
+
+ while (tpsLoop < 50) {
+ for (i = begin; i < end; i++) {
+ /** Empty channel */
+ error = Standard_isTpsLocked (demodulator, i, &ganymede->statistic[i].signalPresented);
+ if (error) goto exit;
+ if (ganymede->statistic[i].signalPresented == True) {
+ tpsLocked = 1;
+ break;
+ }
+ }
+
+ if (tpsLocked == 1) break;
+
+ User_delay (demodulator, 25);
+ tpsLoop++;
+ }
+
+ if (tpsLocked == 0) goto exit;
+
+ while (mpeg2Loop < 40) {
+ if (ganymede->architecture == Architecture_DCA) {
+ error = Standard_isMpeg2Locked (demodulator, 0, &ganymede->statistic[0].signalLocked);
+ if (error) goto exit;
+ if (ganymede->statistic[0].signalLocked == True) {
+ for (i = begin; i < end; i++) {
+ ganymede->statistic[i].signalQuality = 80;
+ ganymede->statistic[i].signalStrength = 80;
+ }
+ *locked = True;
+ break;
+ }
+ } else {
+ error = Standard_isMpeg2Locked (demodulator, chip, &ganymede->statistic[chip].signalLocked);
+ if (error) goto exit;
+ if (ganymede->statistic[chip].signalLocked == True) {
+ ganymede->statistic[chip].signalQuality = 80;
+ ganymede->statistic[chip].signalStrength = 80;
+ *locked = True;
+ break;
+ }
+ }
+ User_delay (demodulator, 25);
+ mpeg2Loop++;
+ }
+ for (i = begin; i < end; i++) {
+ ganymede->statistic[i].signalQuality = 0;
+ ganymede->statistic[i].signalStrength = 20;
+ }
+
+exit:
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_reset (
+ IN Demodulator* demodulator
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+#else
+ Byte value;
+ Byte i;
+ Byte j;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ for (i = 0; i < ganymede->chipNumber; i++) {
+
+ /** Enable OFDM reset */
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, I2C_reg_ofdm_rst_en, reg_ofdm_rst_en_pos, reg_ofdm_rst_en_len, 0x01);
+ if (error) goto exit;
+
+ /** Start reset mechanism */
+ value = 0x00;
+ error = Standard_writeRegisters (demodulator, i, Processor_OFDM, RESET_STATE, 1, &value);
+ if (error) goto exit;
+
+ /** Clear ofdm reset */
+ for (j = 0; j < 150; j++) {
+ error = Standard_readRegisterBits (demodulator, i, Processor_OFDM, I2C_reg_ofdm_rst, reg_ofdm_rst_pos, reg_ofdm_rst_len, &value);
+ if (error) goto exit;
+ if (value) break;
+ User_delay (demodulator, 10);
+ }
+
+ if (j == 150) {
+ error = Error_RESET_TIMEOUT;
+ goto exit;
+ }
+
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, I2C_reg_ofdm_rst, reg_ofdm_rst_pos, reg_ofdm_rst_len, 0);
+ if (error) goto exit;
+
+ /** Disable OFDM reset */
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, I2C_reg_ofdm_rst_en, reg_ofdm_rst_en_pos, reg_ofdm_rst_en_len, 0x00);
+ if (error) goto exit;
+ }
+
+exit :
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_getChannelModulation (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT ChannelModulation* channelModulation
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ GetChannelModulationRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.channelModulation = channelModulation;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_GETCHANNELMODULATION,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Byte temp;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ /** Get constellation type */
+ error = Standard_readRegisterBits (demodulator, chip, Processor_OFDM, g_reg_tpsd_const, reg_tpsd_const_pos, reg_tpsd_const_len, &temp);
+ if (error) goto exit;
+ channelModulation->constellation = (Constellation) temp;
+
+ /** Get TPS hierachy and alpha value */
+ error = Standard_readRegisterBits (demodulator, chip, Processor_OFDM, g_reg_tpsd_hier, reg_tpsd_hier_pos, reg_tpsd_hier_len, &temp);
+ if (error) goto exit;
+ channelModulation->hierarchy = (Hierarchy)temp;
+
+ /** Get high/low priority */
+ error = Standard_readRegisterBits (demodulator, chip, Processor_OFDM, g_reg_dec_pri, reg_dec_pri_pos, reg_dec_pri_len, &temp);
+ if (error) goto exit;
+ if (temp)
+ channelModulation->priority = Priority_HIGH;
+ else
+ channelModulation->priority = Priority_LOW;
+
+ /** Get high code rate */
+ error = Standard_readRegisterBits (demodulator, chip, Processor_OFDM, g_reg_tpsd_hpcr, reg_tpsd_hpcr_pos, reg_tpsd_hpcr_len, &temp);
+ if (error) goto exit;
+ channelModulation->highCodeRate = (CodeRate) temp;
+
+ /** Get low code rate */
+ error = Standard_readRegisterBits (demodulator, chip, Processor_OFDM, g_reg_tpsd_lpcr, reg_tpsd_lpcr_pos, reg_tpsd_lpcr_len, &temp);
+ if (error) goto exit;
+ channelModulation->lowCodeRate = (CodeRate) temp;
+
+ /** Get guard interval */
+ error = Standard_readRegisterBits (demodulator, chip, Processor_OFDM, g_reg_tpsd_gi, reg_tpsd_gi_pos, reg_tpsd_gi_len, &temp);
+ if (error) goto exit;
+ channelModulation->interval = (Interval) temp;
+
+ /** Get FFT mode */
+ error = Standard_readRegisterBits (demodulator, chip, Processor_OFDM, g_reg_tpsd_txmod, reg_tpsd_txmod_pos, reg_tpsd_txmod_len, &temp);
+ if (error) goto exit;
+ channelModulation->transmissionMode = (TransmissionModes) temp;
+
+ /** Get bandwidth */
+ error = Standard_readRegisterBits (demodulator, chip, Processor_OFDM, g_reg_bw, reg_bw_pos, reg_bw_len, &temp);
+ if (error) goto exit;
+ channelModulation->bandwidth = (Bandwidth) temp;
+
+ /** Get frequency */
+ channelModulation->frequency = ganymede->frequency[chip];
+
+exit :
+#endif
+
+ return (error);
+}
+
+
+
+Dword Standard_acquireChannel (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+) {
+ Dword error = Error_NO_ERROR;
+
+ Byte begin;
+ Byte end;
+ Byte i;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ AcquireChannelRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.frequency = frequency;
+ request.bandwidth = bandwidth;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_ACQUIRECHANNEL,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->architecture == Architecture_DCA) {
+ begin = 0;
+ end = ganymede->chipNumber;
+ } else {
+ begin = chip;
+ end = begin + 1;
+ }
+
+
+ for (i = begin; i < end; i++) {
+ error = Standard_selectBandwidth (demodulator, i, bandwidth, ganymede->adcFrequency);
+ if (error) goto exit;
+ ganymede->bandwidth[i] = bandwidth;
+ }
+
+ error = Standard_maskDcaOutput (demodulator);
+ if (error) goto exit;
+
+ /** Set frequency */
+ for (i = begin; i < end; i++) {
+ error = Standard_setFrequency (demodulator, i, frequency);
+ if (error) goto exit;
+ }
+
+exit :
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_setStreamType (
+ IN Demodulator* demodulator,
+ IN StreamType streamType
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ SetStreamTypeRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.streamType = streamType;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_SETSTREAMTYPE,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Dword warning = Error_NO_ERROR;
+ Ganymede* ganymede;
+ Byte i;
+
+ ganymede = (Ganymede*) demodulator;
+
+ /** Enable DVB-T interrupt if next stream type is StreamType_DVBT_DATAGRAM */
+ if (streamType == StreamType_DVBT_DATAGRAM) {
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_dvbt_inten, reg_dvbt_inten_pos, reg_dvbt_inten_len, 1);
+ if (error) goto exit;
+ if ((ganymede->busId == Bus_USB) || (ganymede->busId == Bus_USB11)) {
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, p_reg_mpeg_full_speed, reg_mpeg_full_speed_pos, reg_mpeg_full_speed_len, 0);
+ if (error) goto exit;
+ } else {
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, p_reg_mpeg_full_speed, reg_mpeg_full_speed_pos, reg_mpeg_full_speed_len, 1);
+ if (error) goto exit;
+ }
+ }
+ }
+
+ /** Enable DVB-T mode */
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_dvbt_en, reg_dvbt_en_pos, reg_dvbt_en_len, 1);
+ if (error) goto exit;
+ }
+
+
+ /** Enter sub mode */
+ switch (streamType) {
+ case StreamType_DVBT_DATAGRAM :
+ if ((ganymede->busId == Bus_USB) || (ganymede->busId == Bus_USB11)) {
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_OFDM, p_mp2if_mpeg_ser_mode, mp2if_mpeg_ser_mode_pos, mp2if_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_OFDM, p_mp2if_mpeg_par_mode, mp2if_mpeg_par_mode_pos, mp2if_mpeg_par_mode_len, 0);
+ if (error) goto exit;
+ /** Fix current leakage */
+ if (ganymede->chipNumber > 1) {
+ if (ganymede->hostInterface[0]) {
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_top_hostb_mpeg_ser_mode, reg_top_hostb_mpeg_ser_mode_pos, reg_top_hostb_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_top_hostb_mpeg_par_mode, reg_top_hostb_mpeg_par_mode_pos, reg_top_hostb_mpeg_par_mode_len, 1);
+ if (error) goto exit;
+ } else {
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_top_hosta_mpeg_ser_mode, reg_top_hosta_mpeg_ser_mode_pos, reg_top_hosta_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_top_hosta_mpeg_par_mode, reg_top_hosta_mpeg_par_mode_pos, reg_top_hosta_mpeg_par_mode_len, 1);
+ if (error) goto exit;
+ }
+ } else {
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_top_hosta_mpeg_ser_mode, reg_top_hosta_mpeg_ser_mode_pos, reg_top_hosta_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_top_hosta_mpeg_par_mode, reg_top_hosta_mpeg_par_mode_pos, reg_top_hosta_mpeg_par_mode_len, 1);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_top_hostb_mpeg_ser_mode, reg_top_hostb_mpeg_ser_mode_pos, reg_top_hostb_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_top_hostb_mpeg_par_mode, reg_top_hostb_mpeg_par_mode_pos, reg_top_hostb_mpeg_par_mode_len, 1);
+ if (error) goto exit;
+ }
+ } else {
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_OFDM, p_mp2if_mpeg_ser_mode, mp2if_mpeg_ser_mode_pos, mp2if_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_OFDM, p_mp2if_mpeg_par_mode, mp2if_mpeg_par_mode_pos, mp2if_mpeg_par_mode_len, 0);
+ if (error) goto exit;
+
+ /** Fix current leakage */
+ if (ganymede->chipNumber > 1) {
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_top_hosta_mpeg_ser_mode, reg_top_hosta_mpeg_ser_mode_pos, reg_top_hosta_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_top_hosta_mpeg_par_mode, reg_top_hosta_mpeg_par_mode_pos, reg_top_hosta_mpeg_par_mode_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_top_hostb_mpeg_ser_mode, reg_top_hostb_mpeg_ser_mode_pos, reg_top_hostb_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_top_hostb_mpeg_par_mode, reg_top_hostb_mpeg_par_mode_pos, reg_top_hostb_mpeg_par_mode_len, 0);
+ if (error) goto exit;
+ } else {
+ if (ganymede->hostInterface[0]) {
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_top_hostb_mpeg_ser_mode, reg_top_hostb_mpeg_ser_mode_pos, reg_top_hostb_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_top_hostb_mpeg_par_mode, reg_top_hostb_mpeg_par_mode_pos, reg_top_hostb_mpeg_par_mode_len, 1);
+ if (error) goto exit;
+ } else {
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_top_hosta_mpeg_ser_mode, reg_top_hosta_mpeg_ser_mode_pos, reg_top_hosta_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_top_hosta_mpeg_par_mode, reg_top_hosta_mpeg_par_mode_pos, reg_top_hosta_mpeg_par_mode_len, 1);
+ if (error) goto exit;
+ }
+ }
+ }
+ break;
+ case StreamType_DVBT_PARALLEL :
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, p_mp2if_mpeg_ser_mode, mp2if_mpeg_ser_mode_pos, mp2if_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, p_mp2if_mpeg_par_mode, mp2if_mpeg_par_mode_pos, mp2if_mpeg_par_mode_len, 1);
+ if (error) goto exit;
+
+ if (i == 0) {
+ if (ganymede->hostInterface[0]) {
+ /** HostA interface is enabled */
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_top_hosta_mpeg_ser_mode, reg_top_hosta_mpeg_ser_mode_pos, reg_top_hosta_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_top_hosta_mpeg_par_mode, reg_top_hosta_mpeg_par_mode_pos, reg_top_hosta_mpeg_par_mode_len, 1);
+ if (error) goto exit;
+ } else {
+ /** HostB interface is enabled */
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_top_hostb_mpeg_ser_mode, reg_top_hostb_mpeg_ser_mode_pos, reg_top_hostb_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_top_hostb_mpeg_par_mode, reg_top_hostb_mpeg_par_mode_pos, reg_top_hostb_mpeg_par_mode_len, 1);
+ if (error) goto exit;
+ }
+ } else {
+ /** HostA interface is enabled */
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_top_hosta_mpeg_ser_mode, reg_top_hosta_mpeg_ser_mode_pos, reg_top_hosta_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_top_hosta_mpeg_par_mode, reg_top_hosta_mpeg_par_mode_pos, reg_top_hosta_mpeg_par_mode_len, 1);
+ if (error) goto exit;
+ }
+ }
+ break;
+ case StreamType_DVBT_SERIAL :
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, p_mp2if_mpeg_ser_mode, mp2if_mpeg_ser_mode_pos, mp2if_mpeg_ser_mode_len, 1);
+ if (error) goto exit;
+
+ if (i == 0) {
+ if (ganymede->hostInterface[0]) {
+ /** HostA interface is enabled */
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_top_hosta_mpeg_ser_mode, reg_top_hosta_mpeg_ser_mode_pos, reg_top_hosta_mpeg_ser_mode_len, 1);
+ if (error) goto exit;
+ } else {
+ /** HostB interface is enabled */
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_top_hostb_mpeg_ser_mode, reg_top_hostb_mpeg_ser_mode_pos, reg_top_hostb_mpeg_ser_mode_len, 1);
+ if (error) goto exit;
+ }
+ } else {
+ /** HostA interface is enabled */
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_top_hosta_mpeg_ser_mode, reg_top_hosta_mpeg_ser_mode_pos, reg_top_hosta_mpeg_ser_mode_len, 1);
+ if (error) goto exit;
+ }
+ }
+ break;
+ }
+ error = User_mpegConfig (demodulator);
+
+ ganymede->streamType = streamType;
+
+exit :
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_setArchitecture (
+ IN Demodulator* demodulator,
+ IN Architecture architecture
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ SetArchitectureRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.architecture = architecture;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_SETARCHITECTURE,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Word frameSize;
+ Byte packetSize;
+ Byte buffer[2];
+ Byte standAlone[2];
+ Byte upperChip[2];
+ Byte upperHost[2];
+ Byte lowerChip[2];
+ Byte lowerHost[2];
+ Byte dcaEnable[2];
+ Byte phaseLatch[2];
+ Byte fpgaLatch[2];
+ Byte i;
+ Bool pipValid = False;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (architecture == Architecture_DCA) {
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ standAlone[i] = 0;
+ upperChip[i] = 0;
+ upperHost[i] = 0;
+ lowerChip[i] = 0;
+ lowerHost[i] = 0;
+ dcaEnable[i] = 1;
+ phaseLatch[i] = 0;
+ fpgaLatch[i] = 0;
+ }
+ if (ganymede->chipNumber == 1) {
+ standAlone[0] = 1;
+ dcaEnable[0] = 0;
+ } else {
+ upperChip[ganymede->chipNumber - 1] = 1;
+ upperHost[0] = 1;
+ lowerChip[0] = 1;
+ lowerHost[ganymede->chipNumber - 1] = 1;
+ phaseLatch[0] = 1;
+ phaseLatch[ganymede->chipNumber - 1] = 1;
+ fpgaLatch[0] = 0x77;
+ fpgaLatch[ganymede->chipNumber - 1] = 0x77;
+ }
+ } else {
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ standAlone[i] = 1;
+ upperChip[i] = 0;
+ upperHost[i] = 0;
+ lowerChip[i] = 0;
+ lowerHost[i] = 0;
+ dcaEnable[i] = 0;
+ phaseLatch[i] = 0;
+ fpgaLatch[i] = 0;
+ }
+ }
+
+ if (ganymede->initialized == True) {
+ error = Standard_maskDcaOutput (demodulator);
+ if (error) goto exit;
+ }
+
+ /** Set upper chip first in order to avoid I/O conflict */
+ for (i = ganymede->chipNumber; i > 0; i--) {
+ /** Set dca_upper_chip */
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_OFDM, p_reg_dca_upper_chip, reg_dca_upper_chip_pos, reg_dca_upper_chip_len, upperChip[i - 1]);
+ if (error) goto exit;
+ if (i == 1) {
+ if ((ganymede->busId == Bus_USB) || (ganymede->busId == Bus_USB11)) {
+ if (ganymede->hostInterface[0]) {
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hosta_dca_upper, reg_top_hosta_dca_upper_pos, reg_top_hosta_dca_upper_len, upperHost[i - 1]);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hostb_dca_upper, reg_top_hostb_dca_upper_pos, reg_top_hostb_dca_upper_len, 0);
+ if (error) goto exit;
+ } else {
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hostb_dca_upper, reg_top_hostb_dca_upper_pos, reg_top_hostb_dca_upper_len, upperHost[i - 1]);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hosta_dca_upper, reg_top_hosta_dca_upper_pos, reg_top_hosta_dca_upper_len, 0);
+ if (error) goto exit;
+ }
+ } else {
+ if (ganymede->hostInterface[0]) {
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hostb_dca_upper, reg_top_hostb_dca_upper_pos, reg_top_hostb_dca_upper_len, upperHost[i - 1]);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hosta_dca_upper, reg_top_hosta_dca_upper_pos, reg_top_hosta_dca_upper_len, 0);
+ if (error) goto exit;
+ } else {
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hosta_dca_upper, reg_top_hosta_dca_upper_pos, reg_top_hosta_dca_upper_len, upperHost[i - 1]);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hostb_dca_upper, reg_top_hostb_dca_upper_pos, reg_top_hostb_dca_upper_len, 0);
+ if (error) goto exit;
+ }
+ }
+ } else {
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hostb_dca_upper, reg_top_hostb_dca_upper_pos, reg_top_hostb_dca_upper_len, upperHost[i - 1]);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hosta_dca_upper, reg_top_hosta_dca_upper_pos, reg_top_hosta_dca_upper_len, 0);
+ if (error) goto exit;
+ }
+
+ /** Set dca_lower_chip */
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_OFDM, p_reg_dca_lower_chip, reg_dca_lower_chip_pos, reg_dca_lower_chip_len, lowerChip[i - 1]);
+ if (error) goto exit;
+ if (i == 1) {
+ if ((ganymede->busId == Bus_USB) || (ganymede->busId == Bus_USB11)) {
+ if (ganymede->hostInterface[0]) {
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hosta_dca_lower, reg_top_hosta_dca_lower_pos, reg_top_hosta_dca_lower_len, lowerHost[i - 1]);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hostb_dca_lower, reg_top_hostb_dca_lower_pos, reg_top_hostb_dca_lower_len, 0);
+ if (error) goto exit;
+ } else {
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hostb_dca_lower, reg_top_hostb_dca_lower_pos, reg_top_hostb_dca_lower_len, lowerHost[i - 1]);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hosta_dca_lower, reg_top_hosta_dca_lower_pos, reg_top_hosta_dca_lower_len, 0);
+ if (error) goto exit;
+ }
+ } else {
+ if (ganymede->hostInterface[0]) {
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hostb_dca_lower, reg_top_hostb_dca_lower_pos, reg_top_hostb_dca_lower_len, lowerHost[i - 1]);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hosta_dca_lower, reg_top_hosta_dca_lower_pos, reg_top_hosta_dca_lower_len, 0);
+ if (error) goto exit;
+ } else {
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hosta_dca_lower, reg_top_hosta_dca_lower_pos, reg_top_hosta_dca_lower_len, lowerHost[i - 1]);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hostb_dca_lower, reg_top_hostb_dca_lower_pos, reg_top_hostb_dca_lower_len, 0);
+ if (error) goto exit;
+ }
+ }
+ } else {
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hostb_dca_lower, reg_top_hostb_dca_lower_pos, reg_top_hostb_dca_lower_len, lowerHost[i - 1]);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_top_hosta_dca_lower, reg_top_hosta_dca_lower_pos, reg_top_hosta_dca_lower_len, 0);
+ if (error) goto exit;
+ }
+
+ /** Set phase latch */
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_OFDM, p_reg_dca_platch, reg_dca_platch_pos, reg_dca_platch_len, phaseLatch[i - 1]);
+ if (error) goto exit;
+
+ /** Set fpga latch */
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_OFDM, p_reg_dca_fpga_latch, reg_dca_fpga_latch_pos, reg_dca_fpga_latch_len, fpgaLatch[i - 1]);
+ if (error) goto exit;
+ }
+
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ /** Set stand alone */
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, p_reg_dca_stand_alone, reg_dca_stand_alone_pos, reg_dca_stand_alone_len, standAlone[i]);
+ if (error) goto exit;
+
+ /** Set DCA enable */
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, p_reg_dca_en, reg_dca_en_pos, reg_dca_en_len, dcaEnable[i]);
+ if (error) goto exit;
+ }
+
+ if (ganymede->initialized == True) {
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ error = Standard_writeRegister (demodulator, i, Processor_OFDM, trigger_ofsm, 0);
+ if (error) goto exit;
+ }
+ }
+
+
+ if ((ganymede->busId == Bus_USB) || (ganymede->busId == Bus_USB11)) {
+ frameSize = User_USB20_FRAME_SIZE_DW;
+ packetSize = (Byte) (User_USB20_MAX_PACKET_SIZE / 4);
+
+ if (ganymede->busId == Bus_USB11) {
+ frameSize = User_USB11_FRAME_SIZE_DW;
+ packetSize = (Byte) (User_USB11_MAX_PACKET_SIZE / 4);
+ }
+
+ if ((ganymede->chipNumber > 1) && (architecture == Architecture_PIP))
+ pipValid = True;
+
+ /** Reset EP4 */
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_OFDM, p_reg_mp2_sw_rst, reg_mp2_sw_rst_pos, reg_mp2_sw_rst_len, 1);
+ if (error) goto exit;
+
+ /** Reset EP5 */
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_OFDM, p_reg_mp2if2_sw_rst, reg_mp2if2_sw_rst_pos, reg_mp2if2_sw_rst_len, 1);
+ if (error) goto exit;
+
+ /** Disable EP4 */
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_ep4_tx_en, reg_ep4_tx_en_pos, reg_ep4_tx_en_len, 0);
+ if (error) goto exit;
+
+ /** Disable EP5 */
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_ep5_tx_en, reg_ep5_tx_en_pos, reg_ep5_tx_en_len, 0);
+ if (error) goto exit;
+
+ /** Disable EP4 NAK */
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_ep4_tx_nak, reg_ep4_tx_nak_pos, reg_ep4_tx_nak_len, 0);
+ if (error) goto exit;
+
+ /** Disable EP5 NAK */
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_ep5_tx_nak, reg_ep5_tx_nak_pos, reg_ep5_tx_nak_len, 0);
+ if (error) goto exit;
+
+ /** Enable EP4 */
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_ep4_tx_en, reg_ep4_tx_en_pos, reg_ep4_tx_en_len, 1);
+ if (error) goto exit;
+
+ /** Set EP4 transfer length */
+ buffer[p_reg_ep4_tx_len_7_0 - p_reg_ep4_tx_len_7_0] = (Byte) frameSize;
+ buffer[p_reg_ep4_tx_len_15_8 - p_reg_ep4_tx_len_7_0] = (Byte) (frameSize >> 8);
+ error = Standard_writeRegisters (demodulator, 0, Processor_LINK, p_reg_ep4_tx_len_7_0, 2, buffer);
+
+ /** Set EP4 packet size */
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, p_reg_ep4_max_pkt, packetSize);
+ if (error) goto exit;
+
+ if (pipValid == True) {
+ /** Enable EP5 */
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_LINK, p_reg_ep5_tx_en, reg_ep5_tx_en_pos, reg_ep5_tx_en_len, 1);
+ if (error) goto exit;
+
+ /** Set EP5 transfer length */
+ buffer[p_reg_ep5_tx_len_7_0 - p_reg_ep5_tx_len_7_0] = (Byte) frameSize;
+ buffer[p_reg_ep5_tx_len_15_8 - p_reg_ep5_tx_len_7_0] = (Byte) (frameSize >> 8);
+ error = Standard_writeRegisters (demodulator, 0, Processor_LINK, p_reg_ep5_tx_len_7_0, 2, buffer);
+
+ /** Set EP5 packet size */
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, p_reg_ep5_max_pkt, packetSize);
+ if (error) goto exit;
+ }
+
+
+ /** Disable 15 SER/PAR mode */
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_OFDM, p_mp2if_mpeg_ser_mode, mp2if_mpeg_ser_mode_pos, mp2if_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_OFDM, p_mp2if_mpeg_par_mode, mp2if_mpeg_par_mode_pos, mp2if_mpeg_par_mode_len, 0);
+ if (error) goto exit;
+
+ if (pipValid == True) {
+ /** Enable mp2if2 */
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_OFDM, p_reg_mp2if2_en, reg_mp2if2_en_pos, reg_mp2if2_en_len, 1);
+ if (error) goto exit;
+
+ for (i = 1; i < ganymede->chipNumber; i++) {
+ /** Enable serial mode */
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, p_mp2if_mpeg_ser_mode, mp2if_mpeg_ser_mode_pos, mp2if_mpeg_ser_mode_len, 1);
+ if (error) goto exit;
+
+ /** Enable HostB serial */
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_top_hostb_mpeg_ser_mode, reg_top_hostb_mpeg_ser_mode_pos, reg_top_hostb_mpeg_ser_mode_len, 1);
+ if (error) goto exit;
+ }
+
+ /** Enable tsis */
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_OFDM, p_reg_tsis_en, reg_tsis_en_pos, reg_tsis_en_len, 1);
+ if (error) goto exit;
+ } else {
+ /** Disable mp2if2 */
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_OFDM, p_reg_mp2if2_en, reg_mp2if2_en_pos, reg_mp2if2_en_len, 0);
+ if (error) goto exit;
+
+ for (i = 1; i < ganymede->chipNumber; i++) {
+ /** Disable serial mode */
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, p_mp2if_mpeg_ser_mode, mp2if_mpeg_ser_mode_pos, mp2if_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+
+ /** Disable HostB serial */
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_top_hostb_mpeg_ser_mode, reg_top_hostb_mpeg_ser_mode_pos, reg_top_hostb_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+ }
+
+ /** Disable tsis */
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_OFDM, p_reg_tsis_en, reg_tsis_en_pos, reg_tsis_en_len, 0);
+ if (error) goto exit;
+ }
+
+ /** Negate EP4 reset */
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_OFDM, p_reg_mp2_sw_rst, reg_mp2_sw_rst_pos, reg_mp2_sw_rst_len, 0);
+ if (error) goto exit;
+
+ /** Negate EP5 reset */
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_OFDM, p_reg_mp2if2_sw_rst, reg_mp2if2_sw_rst_pos, reg_mp2if2_sw_rst_len, 0);
+ if (error) goto exit;
+
+ if (pipValid == True) {
+ /** Split 15 PSB to 1K + 1K and enable flow control */
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_OFDM, p_reg_mp2if2_half_psb, reg_mp2if2_half_psb_pos, reg_mp2if2_half_psb_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, 0, Processor_OFDM, p_reg_mp2if_stop_en, reg_mp2if_stop_en_pos, reg_mp2if_stop_en_len, 1);
+ if (error) goto exit;
+
+ for (i = 1; i < ganymede->chipNumber; i++) {
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, p_reg_mpeg_full_speed, reg_mpeg_full_speed_pos, reg_mpeg_full_speed_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, p_reg_mp2if_stop_en, reg_mp2if_stop_en_pos, reg_mp2if_stop_en_len, 0);
+ if (error) goto exit;
+ }
+ }
+ }
+
+ ganymede->architecture = architecture;
+
+exit:
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_setViterbiRange (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte superFrameCount,
+ IN Word packetUnit
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ SetStatisticRangeRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.superFrameCount = superFrameCount;
+ request.packetUnit = packetUnit;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_SETSTATISTICRANGE,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Byte temp0;
+ Byte temp1;
+
+ /** Set super frame count */
+ error = Standard_writeRegister (demodulator, chip, Processor_OFDM, qnt_vbc_sframe_num, superFrameCount);
+ if (error) goto exit;
+
+ /** Set packet unit. */
+ temp0 = (Byte) packetUnit;
+ temp1 = (Byte) (packetUnit >> 8);
+ error = Standard_writeRegisters (demodulator, chip, Processor_OFDM, rsd_packet_unit_7_0, 1, &temp0);
+ if (error) goto exit;
+ error = Standard_writeRegisters (demodulator, chip, Processor_OFDM, rsd_packet_unit_15_8, 1, &temp1);
+ if (error) goto exit;
+
+exit:
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_getViterbiRange (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte* frameCount,
+ IN Word* packetUnit
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ GetStatisticRangeRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.superFrameCount = superFrameCount;
+ request.packetUnit = packetUnit;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_GETSTATISTICRANGE,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Byte temp0;
+ Byte temp1;
+
+ /** Get super frame count */
+ error = Standard_readRegister (demodulator, chip, Processor_OFDM, qnt_vbc_sframe_num, frameCount);
+ if (error) goto exit;
+
+ /** Get packet unit. */
+ error = Standard_readRegisters (demodulator, chip, Processor_OFDM, r_rsd_packet_unit_7_0, 1, &temp0);
+ if (error) goto exit;
+ error = Standard_readRegisters (demodulator, chip, Processor_OFDM, r_rsd_packet_unit_15_8, 1, &temp1);
+ if (error) goto exit;
+ *packetUnit = (Word) (temp1 << 8) + (Word) temp0;
+
+exit:
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_getStatistic (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Statistic* statistic
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ GetStatisticRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.statistic = statistic;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_GETSTATISTIC,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Ganymede* ganymede;
+ Byte quality;
+ Byte strength;
+ Byte buffer[2];
+
+ ganymede = (Ganymede*) demodulator;
+
+ /** Get statistic by stream type */
+ error = Standard_readRegisters (demodulator, chip, Processor_OFDM, tpsd_lock, mpeg_lock - tpsd_lock + 1, buffer);
+ if (error) goto exit;
+
+ if (buffer[tpsd_lock - tpsd_lock])
+ ganymede->statistic[chip].signalPresented = True;
+ else
+ ganymede->statistic[chip].signalPresented = False;
+
+ if (buffer[mpeg_lock - tpsd_lock])
+ ganymede->statistic[chip].signalLocked = True;
+ else
+ ganymede->statistic[chip].signalLocked = False;
+
+ error = Standard_getSignalQuality (demodulator, chip, &quality);
+ if (error) goto exit;
+
+ ganymede->statistic[chip].signalQuality = quality;
+
+ error = Standard_getSignalStrength (demodulator, chip, &strength);
+ if (error) goto exit;
+
+ ganymede->statistic[chip].signalStrength = strength;
+
+ *statistic = ganymede->statistic[chip];
+
+exit :
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_getInterrupts (
+ IN Demodulator* demodulator,
+ OUT Interrupts* interrupts
+) {
+ Dword error = Error_NO_ERROR;
+ Ganymede* ganymede;
+ Byte value = 0;
+
+ ganymede = (Ganymede*) demodulator;
+
+ /** Get interrupts by stream type */
+
+
+ *interrupts = Interrupt_NONE;
+
+ /** Read the interrupts register to determine the type of interrupts. */
+ error = Standard_readRegister (demodulator, 0, Processor_LINK, r_link_ofsm_dvbt_int, &value);
+ if (error) goto exit;
+
+ if (value & 0x04) {
+ ganymede->dataReady = True;
+ *interrupts |= Interrupt_DVBT;
+ }
+
+exit:
+ return (error);
+}
+
+
+Dword Standard_clearInterrupt (
+ IN Demodulator* demodulator,
+ IN Interrupt interrupt
+) {
+ Dword error = Error_NO_ERROR;
+ Ganymede* ganymede;
+ Byte value = 0;
+
+ ganymede = (Ganymede*) demodulator;
+
+ /** Clear interrupt by stream type */
+
+ //error = ganymede->dvbtStandardDescription.clearInterrupt (demodulator, interrupt);
+ value = (Byte) interrupt;
+
+ /** Clear the specific interrupt. */
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, p_reg_dvbt_intsts, value);
+
+ return (error);
+}
+
+
+Dword Standard_getDataLength (
+ IN Demodulator* demodulator,
+ OUT Dword* dataLength,
+ OUT Bool* valid /** used in DVBH mode */
+) {
+ Dword error = Error_NO_ERROR;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ /** Get data length by stream type */
+ switch (ganymede->burstSize) {
+ case BurstSize_1024 :
+ *dataLength = 1024;
+ break;
+ case BurstSize_2048 :
+ *dataLength = 2048;
+ break;
+ case BurstSize_4096 :
+ *dataLength = 4096;
+ break;
+ }
+ *valid = True;
+
+ return (error);
+}
+
+
+Dword Standard_getData (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ OUT Byte* buffer
+) {
+ Dword error = Error_NO_ERROR;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ /** Get data by stream type */
+
+ //error = ganymede->dvbtStandardDescription.getData (demodulator, bufferLength, buffer);
+
+ if (bufferLength == 0) {
+ error = Error_INVALID_DATA_LENGTH;
+ goto exit;
+ }
+
+
+ /** IP datagram is locate in a special register 0xF00000 */
+ error = ganymede->cmdDescription->receiveData (demodulator, 0xF00000, bufferLength, buffer);
+ if (error) goto exit;
+
+ ganymede->dataReady = False;
+
+exit:
+ return (error);
+}
+
+
+/** combine Standard_getLength and Standard_getData */
+Dword Standard_getDatagram (
+ IN Demodulator* demodulator,
+ OUT Dword* bufferLength,
+ OUT Byte* buffer
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ GetDatagramRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.bufferLength = bufferLength;
+ request.buffer = buffer;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_GETDATAGRAM,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Ganymede* ganymede;
+ Dword length = 0;
+ Byte value;
+ Bool ready = False;
+
+ ganymede = (Ganymede*) demodulator;
+
+ /** Get datagram by stream type */
+
+ //error = ganymede->dvbtStandardDescription.getDatagram (demodulator, bufferLength, buffer);
+
+#if User_USE_INTERRUPT
+#else
+
+ error = Standard_readRegisterBits (demodulator, 0, Processor_LINK, r_link_ofsm_ip_valid, link_ofsm_ip_valid_pos, link_ofsm_ip_valid_len, &value);
+ if (error) goto exit;
+
+ if (value) {
+ ganymede->dataReady = True;
+ }
+ if (ganymede->dataReady == False) {
+ *bufferLength = 0;
+ error = Error_NOT_READY;
+ goto exit;
+ }
+#endif
+ switch (ganymede->burstSize) {
+ case BurstSize_1024 :
+ length = 1024;
+ break;
+ case BurstSize_2048 :
+ length = 2048;
+ break;
+ case BurstSize_4096 :
+ length = 4096;
+ break;
+ }
+ if (*bufferLength >= length) {
+ //error = Dvbt_getData (demodulator, length, (Byte*) buffer);
+ //if (error) goto exit;
+
+ if (bufferLength == 0) {
+ error = Error_INVALID_DATA_LENGTH;
+ goto exit;
+ }
+
+
+ /** IP datagram is locate in a special register 0xF00000 */
+ error = ganymede->cmdDescription->receiveData (demodulator, 0xF00000, length, buffer);
+ if (error) goto exit;
+
+ *bufferLength = length;
+
+ ganymede->dataReady = False;
+
+ *bufferLength = length;
+ } else {
+ error = Error_BUFFER_INSUFFICIENT;
+ }
+
+
+exit:
+#endif
+
+ return (error);
+}
+
+
+/** get ir raw code (4 bytes) */
+Dword Standard_getIrCode (
+ IN Demodulator* demodulator,
+ OUT Dword* code
+) {
+ Dword error = Error_NO_ERROR;
+ Byte readBuffer[4];
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ error = Standard_sendCommand (demodulator, Command_IR_GET, 0, Processor_LINK, 0, NULL, 4, readBuffer);
+ if (error) goto exit;
+
+ *code = (Dword) ((readBuffer[0] << 24) + (readBuffer[1] << 16) + (readBuffer[2] << 8) + readBuffer[3]);
+
+exit :
+ return (error);
+}
+
+
+Dword Standard_reboot (
+ IN Demodulator* demodulator
+) {
+ Dword error = Error_NO_ERROR;
+ Dword version;
+ Byte i;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ error = Standard_getFirmwareVersion (demodulator, Processor_LINK, &version);
+ if (error) goto exit;
+ if (version == 0xFFFFFFFF) goto exit; /** I2M and I2U */
+ if (version != 0) {
+ for (i = ganymede->chipNumber; i > 0; i--) {
+ error = ganymede->cmdDescription->reboot (demodulator, i - 1);
+ User_delay (demodulator, 1);
+ if (error) goto exit;
+ }
+
+ if ((ganymede->busId == Bus_USB) || (ganymede->busId == Bus_USB11)) goto exit;
+
+ User_delay (demodulator, 10);
+
+ version = 1;
+ for (i = 0; i < 30; i++) {
+ error = Standard_getFirmwareVersion (demodulator, Processor_LINK, &version);
+ if (error == Error_NO_ERROR) break;
+ User_delay (demodulator, 10);
+ }
+ if (error) goto exit;
+ if (version != 0)
+ error = Error_REBOOT_FAIL;
+ }
+ for (i = ganymede->chipNumber; i > 0; i--) {
+ error = Standard_writeRegisterBits (demodulator, i - 1, Processor_LINK, p_reg_p_dmb_sw_reset, reg_p_dmb_sw_reset_pos, reg_p_dmb_sw_reset_len, 1);
+ if (error) goto exit;
+ }
+
+ ganymede->booted = False;
+
+exit :
+ return (error);
+}
+
+
+Dword Standard_controlPowerSaving (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte control
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ ControlPowerSavingRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.control = control;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_CONTROLPOWERSAVING,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Byte temp;
+ Byte begin;
+ Byte end;
+ Byte i;
+ Byte j;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->architecture == Architecture_DCA) {
+ begin = 0;
+ end = ganymede->chipNumber;
+ } else {
+ begin = chip;
+ end = begin + 1;
+ }
+
+ if (control) {
+ /** Power up case */
+ if ((ganymede->busId == Bus_USB) || (ganymede->busId == Bus_USB11)) {
+ for (i = begin; i < end; i++) {
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, p_reg_afe_mem0, 3, 1, 0);
+ if (error) goto exit;
+ }
+ } else { /** TS, SPI, and SDIO case */
+ /** not implemented yet */
+ }
+
+ /** Fixed current leakage */
+ switch (ganymede->busId) {
+ case Bus_SPI :
+ case Bus_SDIO :
+ case Bus_USB :
+ case Bus_USB11 :
+ if (ganymede->chipNumber > 1) {
+ for (i = 1; i < ganymede->chipNumber; i++) {
+ /** Disable HostA parallel */
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_top_hosta_mpeg_ser_mode, reg_top_hosta_mpeg_ser_mode_pos, reg_top_hosta_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_top_hosta_mpeg_par_mode, reg_top_hosta_mpeg_par_mode_pos, reg_top_hosta_mpeg_par_mode_len, 0);
+ if (error) goto exit;
+ }
+ }
+ break;
+ }
+ } else {
+ /** Power down case */
+ if ((ganymede->busId == Bus_USB) || (ganymede->busId == Bus_USB11)) {
+ for (i = begin; i < end; i++) {
+ error = Standard_writeRegister (demodulator, i, Processor_OFDM, suspend_flag, 1);
+ if (error) goto exit;
+ error = Standard_writeRegister (demodulator, i, Processor_OFDM, trigger_ofsm, 0);
+ if (error) goto exit;
+
+ for (j = 0; j < 150; j++) {
+ error = Standard_readRegister (demodulator, i, Processor_OFDM, suspend_flag, &temp);
+ if (error) goto exit;
+ if (!temp) break;
+ User_delay (demodulator, 10);
+ }
+ error = Standard_writeRegisterBits (demodulator, i, Processor_OFDM, p_reg_afe_mem0, 3, 1, 1);
+ if (error) goto exit;
+ }
+ } else { /** TS SPI SDIO */
+ /** not implemented yet */
+ }
+
+ /** Fixed current leakage */
+ switch (ganymede->busId) {
+ case Bus_SPI :
+ case Bus_SDIO :
+ case Bus_USB :
+ case Bus_USB11 :
+ if (ganymede->chipNumber > 1) {
+ for (i = 1; i < ganymede->chipNumber; i++) {
+ /** Enable HostA parallel */
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_top_hosta_mpeg_ser_mode, reg_top_hosta_mpeg_ser_mode_pos, reg_top_hosta_mpeg_ser_mode_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_top_hosta_mpeg_par_mode, reg_top_hosta_mpeg_par_mode_pos, reg_top_hosta_mpeg_par_mode_len, 1);
+ if (error) goto exit;
+ }
+ }
+ break;
+ }
+ }
+
+exit :
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_controlTunerPowerSaving (
+ IN Demodulator* demodulator,
+ IN Byte control
+) {
+ Dword error = Error_NO_ERROR;
+
+ if (control) {
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, p_reg_top_gpioh7_en, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, p_reg_top_gpioh7_on, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, p_reg_top_gpioh7_o, 1);
+ if (error) goto exit;
+ } else {
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, p_reg_top_gpioh7_en, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, p_reg_top_gpioh7_on, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, 0, Processor_LINK, p_reg_top_gpioh7_o, 0);
+ if (error) goto exit;
+ }
+
+exit:
+ return (error);
+}
+
+
+Dword Standard_controlPidFilter (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte control
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ ControlPidFilterRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.control = control;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_CONTROLPIDFILTER,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ error = Standard_writeRegisterBits (demodulator, chip, Processor_OFDM, p_mp2if_pid_en, mp2if_pid_en_pos, mp2if_pid_en_len, control);
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_resetPidFilter (
+ IN Demodulator* demodulator,
+ IN Byte chip
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+#else
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ error = Standard_writeRegisterBits (demodulator, chip, Processor_OFDM, p_mp2if_pid_rst, mp2if_pid_rst_pos, mp2if_pid_rst_len, 1);
+ if (error) goto exit;
+
+exit :
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_addPidToFilter (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte index,
+ IN Pid pid
+) {
+ Dword error = Error_NO_ERROR;
+
+#if User_USE_DRIVER
+ DWORD number;
+ BOOL result;
+ AddPidRequest request;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ if (ganymede->driver != NULL) {
+ request.chip = chip;
+ request.pid = pid;
+ result = DeviceIoControl (
+ ganymede->driver,
+ IOCTL_AFA_DEMOD_ADDPID,
+ &request,
+ sizeof (request),
+ NULL,
+ 0,
+ &number,
+ NULL
+ );
+ error = request.error;
+ } else {
+ error = Error_DRIVER_INVALID;
+ }
+#else
+ Byte writeBuffer[2];
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+ /** Enable pid filter */
+ error = Standard_writeRegisterBits (demodulator, chip, Processor_OFDM, p_mp2if_pid_en, mp2if_pid_en_pos, mp2if_pid_en_len, 1);
+ if (error) goto exit;
+
+ writeBuffer[0] = (Byte) pid.value;
+ writeBuffer[1] = (Byte) (pid.value >> 8);
+
+ error = Standard_writeRegisters (demodulator, chip, Processor_OFDM, p_mp2if_pid_dat_l, 2, writeBuffer);
+ if (error) goto exit;
+
+ error = Standard_writeRegisterBits (demodulator, chip, Processor_OFDM, p_mp2if_pid_index_en, mp2if_pid_index_en_pos, mp2if_pid_index_en_len, 1);
+ if (error) goto exit;
+
+ error = Standard_writeRegister (demodulator, chip, Processor_OFDM, p_mp2if_pid_index, index);
+ if (error) goto exit;
+
+exit :
+#endif
+
+ return (error);
+}
+
+
+Dword Standard_setBurstSize (
+ IN Demodulator* demodulator,
+ IN BurstSize burstSize
+) {
+ Dword error = Error_NO_ERROR;
+ Byte i;
+ Ganymede* ganymede;
+
+ ganymede = (Ganymede*) demodulator;
+
+
+ if (burstSize == BurstSize_4096) {
+ error = Error_NOT_SUPPORT;
+ goto exit;
+ }
+
+
+ switch (burstSize) {
+ case BurstSize_1024 :
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_dvbt_path, reg_dvbt_path_pos, reg_dvbt_path_len, 1);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_dvbt_bufsize, reg_dvbt_bufsize_pos, reg_dvbt_bufsize_len, 1);
+ if (error) goto exit;
+ }
+ ganymede->burstSize = BurstSize_1024;
+ break;
+ case BurstSize_2048 :
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_dvbt_path, reg_dvbt_path_pos, reg_dvbt_path_len, 1);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_dvbt_bufsize, reg_dvbt_bufsize_pos, reg_dvbt_bufsize_len, 0);
+ if (error) goto exit;
+ }
+ ganymede->burstSize = BurstSize_2048;
+
+ break;
+ case BurstSize_4096 :
+ for (i = 0; i < ganymede->chipNumber; i++) {
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_dvbt_path, reg_dvbt_path_pos, reg_dvbt_path_len, 0);
+ if (error) goto exit;
+ error = Standard_writeRegisterBits (demodulator, i, Processor_LINK, p_reg_dvbt_bufsize, reg_dvbt_bufsize_pos, reg_dvbt_bufsize_len, 1);
+ if (error) goto exit;
+ }
+ ganymede->burstSize = BurstSize_4096;
+ break;
+ }
+
+exit :
+ return (error);
+}
+
+
+Dword Standard_getBurstSize (
+ IN Demodulator* demodulator,
+ IN BurstSize* burstSize
+) {
+ Dword error = Error_NO_ERROR;
+ Byte path;
+ Byte size;
+
+ error = Standard_readRegisterBits (demodulator, 0, Processor_LINK, p_reg_dvbt_path, reg_dvbt_path_pos, reg_dvbt_path_len, &path);
+ if (error) goto exit;
+ error = Standard_readRegisterBits (demodulator, 0, Processor_LINK, p_reg_dvbt_bufsize, reg_dvbt_bufsize_pos, reg_dvbt_bufsize_len, &size);
+ if (error) goto exit;
+
+ if (path) {
+ if (size) {
+ *burstSize = BurstSize_1024;
+ } else {
+ *burstSize = BurstSize_2048;
+ }
+ } else {
+ if (size) {
+ *burstSize = BurstSize_4096;
+ } else {
+ *burstSize = BurstSize_2048;
+ }
+ }
+
+exit :
+ return (error);
+}
diff --git a/api/standard.h b/api/standard.h
new file mode 100644
index 0000000..fcefddc
--- /dev/null
+++ b/api/standard.h
@@ -0,0 +1,1013 @@
+#ifndef __STANDARD_H__
+#define __STANDARD_H__
+
+
+#include "type.h"
+#include "user.h"
+#include "error.h"
+#include "register.h"
+#include "variable.h"
+#include "version.h"
+
+#if User_USE_DRIVER
+#include <tchar.h>
+#include "iocontrol.h"
+#endif
+
+
+/**
+ * Send the command to device.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param command the command to be send.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param processor The processor of specified register. Because each chip
+ * has two processor so user have to specify the processor. The
+ * possible values are Processor_LINK and Processor_OFDM.
+ * @param writeBufferLength the number of registers to be write.
+ * @param writeBuffer a byte array which is used to store values to be write.
+ * @param readBufferLength the number of registers to be read.
+ * @param readBuffer a byte array which is used to store values to be read.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_sendCommand (
+ IN Demodulator* demodulator,
+ OUT Word command,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword writeBufferLength,
+ IN Byte* writeBuffer,
+ IN Dword readBufferLength,
+ OUT Byte* readBuffer
+);
+
+
+/**
+ * Program the bandwidth related parameters to demodulator.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7. NOTE: When the architecture is set to Architecture_DCA
+ * this parameter is regard as don't care.
+ * @param bandwidth DVB channel bandwidth in MHz. The possible values
+ * are 5, 6, 7, and 8 (MHz).
+ * @param adcFrequency The value of desire internal ADC frequency (Hz).
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_selectBandwidth (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth, /** KHz */
+ IN Dword adcFrequency /** Hz, ex: 20480000 */
+);
+
+
+/**
+ * Set frequency.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param frequency The desired frequency.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ */
+Dword Standard_setFrequency (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Dword frequency
+);
+
+
+/**
+ * Load firmware to device
+ *
+ * @param demodulator the handle of demodulator.
+ * @firmwareCodes pointer to fw binary.
+ * @firmwareSegments pointer to fw segments.
+ * @firmwarePartitions pointer to fw partition.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_loadFirmware (
+ IN Demodulator* demodulator,
+ IN Byte* firmwareCodes,
+ IN Segment* firmwareSegments,
+ IN Byte* firmwarePartitions
+);
+
+
+/**
+ * Load initial script to device
+ *
+ * @param demodulator the handle of demodulator.
+ * @streamType current stream type (useless for Ganymede).
+ * @scriptSets pointer to scriptSets.
+ * @scripts pointer to fw scripts.
+ * @tunerScriptSets pointer to tunerScriptSets.
+ * @tunerScripts pointer to tunerScripts.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_loadScript (
+ IN Demodulator* demodulator,
+ IN StreamType streamType,
+ IN Word* scriptSets,
+ IN ValueSet* scripts,
+ IN Word* tunerScriptSets,
+ IN ValueSet* tunerScripts
+);
+
+
+/**
+ * Write one byte (8 bits) to a specific register in demodulator.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param processor The processor of specified register. Because each chip
+ * has two processor so user have to specify the processor. The
+ * possible values are Processor_LINK and Processor_OFDM.
+ * @param registerAddress the address of the register to be written.
+ * @param value the value to be written.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_writeRegister (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte value
+);
+
+
+/**
+ * Write a sequence of bytes to the contiguous registers in demodulator.
+ * The maximum burst size is restricted by the capacity of bus. If bus
+ * could transfer N bytes in one cycle, then the maximum value of
+ * bufferLength would be N - 5.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param processor The processor of specified register. Because each chip
+ * has two processor so user have to specify the processor. The
+ * possible values are Processor_LINK and Processor_OFDM.
+ * @param registerAddress the start address of the registers to be written.
+ * @param bufferLength the number of registers to be written.
+ * @param buffer a byte array which is used to store values to be written.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_writeRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+);
+
+
+/**
+ * Write a sequence of bytes to the contiguous registers in slave device.
+ * The maximum burst size is restricted by the capacity of bus. If bus
+ * could transfer N bytes in one cycle, then the maximum value of
+ * bufferLength would be N - 6 (one more byte to specify tuner address).
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param registerAddress the start address of the registers to be read.
+ * @param bufferLength the number of registers to be read.
+ * @param buffer a byte array which is used to store values to be read.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_writeTunerRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word registerAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+);
+
+
+/**
+ * Write a sequence of bytes to the contiguous registers in slave device
+ * through specified interface (1, 2, 3).
+ * The maximum burst size is restricted by the capacity of bus. If bus
+ * could transfer N bytes in one cycle, then the maximum value of
+ * bufferLength would be N - 6 (one more byte to specify tuner address).
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param interfaceIndex the index of interface. The possible values are
+ * 1~3.
+ * @param slaveAddress the I2c address of slave device.
+ * @param bufferLength the number of registers to be read.
+ * @param buffer a byte array which is used to store values to be read.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_writeGenericRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte interfaceIndex,
+ IN Byte slaveAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+);
+
+
+/**
+ * Write a sequence of bytes to the contiguous cells in the EEPROM.
+ * The maximum burst size is restricted by the capacity of bus. If bus
+ * could transfer N bytes in one cycle, then the maximum value of
+ * bufferLength would be N - 5 (firmware will detect EEPROM address).
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param registerAddress the start address of the cells to be written.
+ * @param bufferLength the number of cells to be written.
+ * @param buffer a byte array which is used to store values to be written.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_writeEepromValues (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word registerAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+);
+
+
+/**
+ * Modify bits in the specific register.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param processor The processor of specified register. Because each chip
+ * has two processor so user have to specify the processor. The
+ * possible values are Processor_LINK and Processor_OFDM.
+ * @param registerAddress the address of the register to be written.
+ * @param position the start position of bits to be modified (0 means the
+ * LSB of the specifyed register).
+ * @param length the length of bits.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_writeRegisterBits (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte position,
+ IN Byte length,
+ IN Byte value
+);
+
+
+/**
+ * Read one byte (8 bits) from a specific register in demodulator.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param processor The processor of specified register. Because each chip
+ * has two processor so user have to specify the processor. The
+ * possible values are Processor_LINK and Processor_OFDM.
+ * @param registerAddress the address of the register to be read.
+ * @param value the pointer used to store the value read from demodulator
+ * register.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_readRegister (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ OUT Byte* value
+);
+
+
+/**
+ * Read a sequence of bytes from the contiguous registers in demodulator.
+ * The maximum burst size is restricted by the capacity of bus. If bus
+ * could transfer N bytes in one cycle, then the maximum value of
+ * bufferLength would be N - 5.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param processor The processor of specified register. Because each chip
+ * has two processor so user have to specify the processor. The
+ * possible values are Processor_LINK and Processor_OFDM.
+ * @param registerAddress the address of the register to be read.
+ * @param bufferLength the number of registers to be read.
+ * @param buffer a byte array which is used to store values to be read.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_readRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte bufferLength,
+ OUT Byte* buffer
+);
+
+
+/**
+ * Read a sequence of bytes from the contiguous registers in tuner.
+ * The maximum burst size is restricted by the capacity of bus. If bus
+ * could transfer N bytes in one cycle, then the maximum value of
+ * bufferLength would be N - 6 (one more byte to specify tuner address).
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param registerAddress the start address of the registers to be read.
+ * @param bufferLength the number of registers to be read.
+ * @param buffer a byte array which is used to store values to be read.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_readTunerRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word registerAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+);
+
+
+/**
+ * Read a sequence of bytes from the contiguous registers in slave device
+ * through specified interface (1, 2, 3).
+ * The maximum burst size is restricted by the capacity of bus. If bus
+ * could transfer N bytes in one cycle, then the maximum value of
+ * bufferLength would be N - 6 (one more byte to specify tuner address).
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param interfaceIndex the index of interface. The possible values are
+ * 1~3.
+ * @param slaveAddress the I2c address of slave device.
+ * @param bufferLength the number of registers to be read.
+ * @param buffer a byte array which is used to store values to be read.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_readGenericRegisters (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte interfaceIndex,
+ IN Byte slaveAddress,
+ IN Byte bufferLength,
+ IN Byte* buffer
+);
+
+
+/**
+ * Read a sequence of bytes from the contiguous cells in the EEPROM.
+ * The maximum burst size is restricted by the capacity of bus. If bus
+ * could transfer N bytes in one cycle, then the maximum value of
+ * bufferLength would be N - 5 (firmware will detect EEPROM address).
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param registerAddress the start address of the cells to be read.
+ * @param registerAddressLength the valid bytes of registerAddress.
+ * @param bufferLength the number of cells to be read.
+ * @param buffer a byte array which is used to store values to be read.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_readEepromValues (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word registerAddress,
+ IN Byte bufferLength,
+ OUT Byte* buffer
+);
+
+
+/**
+ * Read bits of the specified register.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param processor The processor of specified register. Because each chip
+ * has two processor so user have to specify the processor. The
+ * possible values are Processor_LINK and Processor_OFDM.
+ * @param registerAddress the address of the register to be read.
+ * @param position the start position of bits to be read (0 means the
+ * LSB of the specifyed register).
+ * @param length the length of bits.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_readRegisterBits (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte position,
+ IN Byte length,
+ OUT Byte* value
+);
+
+
+
+
+
+/**
+ * Get the version of hardware.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param version the version of hardware.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_getHardwareVersion (
+ IN Demodulator* demodulator,
+ OUT Dword* version
+);
+
+
+/**
+ * Get the version of firmware.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param version the version of firmware.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_getFirmwareVersion (
+ IN Demodulator* demodulator,
+ IN Processor processor,
+ OUT Dword* version
+);
+
+
+/**
+ * Set the counting range for Post-Viterbi and Post-Viterbi.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7. NOTE: When the architecture is set to Architecture_DCA
+ * this parameter is regard as don't care.
+ * @param postErrorCount the number of super frame for Pre-Viterbi.
+ * @param postBitCount the number of packet unit for Post-Viterbi.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_getPostVitBer (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Dword* postErrorCount, /** 24 bits */
+ OUT Dword* postBitCount, /** 16 bits */
+ OUT Word* abortCount
+);
+
+
+/**
+ * Get RF AGC gain.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param rfAgc the value of RF AGC.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_getRfAgcGain (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Byte* rfAgc
+);
+
+
+/**
+ * Get IF AGC gain.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param ifAgc the value of IF AGC.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_getIfAgcGain (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Byte* ifAgc
+);
+
+
+/**
+ * Get siganl quality.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7. NOTE: When the architecture is set to Architecture_DCA
+ * this parameter is regard as don't care.
+ * @param quality The value of signal quality.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_getSignalQuality (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Byte* quality
+);
+
+
+/**
+ * Get siganl strength.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7. NOTE: When the architecture is set to Architecture_DCA
+ * this parameter is regard as don't care.
+ * @param strength The value of signal strength.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_getSignalStrength (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Byte* strength
+);
+
+
+/**
+ * Get signal strength in dbm
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param rfpullUpVolt_X10 the pullup voltag of RF multiply 10.
+ * @param ifpullUpVolt_X10 the pullup voltag of IF multiply 10.
+ * @param strengthDbm The value of signal strength in DBm.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_getSignalStrengthDbm (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Long rfpullUpVolt_X10, /** RF pull up voltage multiplied by 10 */
+ IN Long ifpullUpVolt_X10, /** IF pull up voltage multiplied by 10 */
+ OUT Long* strengthDbm /** DBm */
+);
+
+
+/**
+ * Load the IR table for USB device.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param tableLength The length of IR table.
+ * @param table The content of IR table.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_loadIrTable (
+ IN Demodulator* demodulator,
+ IN Word tableLength,
+ IN Byte* table
+);
+
+
+/**
+ * First, download firmware from host to demodulator. Actually, firmware is
+ * put in firmware.h as a part of source code. Therefore, in order to
+ * update firmware the host have to re-compile the source code.
+ * Second, setting all parameters which will be need at the beginning.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chipNumber The total number of demodulators.
+ * @param sawBandwidth SAW filter bandwidth in MHz. The possible values
+ * are 6000, 7000, and 8000 (KHz).
+ * @param streamType The format of output stream.
+ * @param architecture the architecture of demodulator.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_initialize (
+ IN Demodulator* demodulator,
+ IN Byte chipNumber,
+ IN Word sawBandwidth,
+ IN StreamType streamType,
+ IN Architecture architecture
+);
+
+
+/**
+ * Power off the demodulators.
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_finalize (
+ IN Demodulator* demodulator
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Standard_isTpsLocked (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Bool* locked
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Standard_isMpeg2Locked (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Bool* locked
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7. NOTE: When the architecture is set to Architecture_DCA
+ * this parameter is regard as don't care.
+ * @param locked the result of frequency tuning. True if there is
+ * demodulator can lock signal, False otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Standard_isLocked (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Bool* locked
+);
+
+
+/**
+ * Reset demodulator.
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_reset (
+ IN Demodulator* demodulator
+);
+
+
+/**
+ * Get channel modulation related information.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param channelModulation The modulation of channel.
+ * @return Error_NO_ERROR: successful, other non-zero error code otherwise.
+ */
+Dword Standard_getChannelModulation (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT ChannelModulation* channelModulation
+);
+
+
+/**
+ * Specify the bandwidth of channel and tune the channel to the specific
+ * frequency. Afterwards, host could use output parameter dvbH to determine
+ * if there is a DVB-H signal.
+ * In DVB-T mode, after calling this function the output parameter dvbH
+ * should return False and host could use output parameter "locked" to check
+ * if the channel has correct TS output.
+ * In DVB-H mode, after calling this function the output parameter dvbH should
+ * return True and host could start get platform thereafter.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7. NOTE: When the architecture is set to Architecture_DCA
+ * this parameter is regard as don't care.
+ * @param bandwidth The channel bandwidth.
+ * DVB-T: 5000, 6000, 7000, and 8000 (KHz).
+ * DVB-H: 5000, 6000, 7000, and 8000 (KHz).
+ * T-DMB: 5000, 6000, 7000, and 8000 (KHz).
+ * FM: 100, and 200 (KHz).
+ * @param frequency the channel frequency in KHz.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_acquireChannel (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+
+
+/**
+ * Set the output stream type of chip. Because the device could output in
+ * many stream type, therefore host have to choose one type before receive
+ * data.
+ *
+ * Note: Please refer to the example of Standard_acquireChannel when host want
+ * to detect the available channels.
+ * Note: After host know all the available channels, and want to change to
+ * specific channel, host have to choose output mode before receive
+ * data. Please refer the example of Standard_setStreamType.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param streamType the possible values are
+ * DVB-H: StreamType_DVBH_DATAGRAM
+ * StreamType_DVBH_DATABURST
+ * DVB-T: StreamType_DVBT_DATAGRAM
+ * StreamType_DVBT_PARALLEL
+ * StreamType_DVBT_SERIAL
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_setStreamType (
+ IN Demodulator* demodulator,
+ IN StreamType streamType
+);
+
+
+/**
+ * Set the architecture of chip. When two of our device are using, they could
+ * be operated in Diversity Combine Architecture (DCA) or (PIP). Therefore,
+ * host could decide which mode to be operated.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param architecture the possible values are
+ * Architecture_DCA
+ * Architecture_PIP
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_setArchitecture (
+ IN Demodulator* demodulator,
+ IN Architecture architecture
+);
+
+
+/**
+ * Set the counting range for Pre-Viterbi and Post-Viterbi.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7. NOTE: When the architecture is set to Architecture_DCA
+ * this parameter is regard as don't care.
+ * @param frameCount the number of super frame for Pre-Viterbi.
+ * @param packetUnit the number of packet unit for Post-Viterbi.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_setViterbiRange (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte superFrameCount,
+ IN Word packetUnit
+);
+
+
+/**
+ * Get the counting range for Pre-Viterbi and Post-Viterbi.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param frameCount the number of super frame for Pre-Viterbi.
+ * @param packetUnit the number of packet unit for Post-Viterbi.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_getViterbiRange (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte* frameCount,
+ IN Word* packetUnit
+);
+
+
+/**
+ * Get the statistic values of demodulator, it includes Pre-Viterbi BER,
+ * Post-Viterbi BER, Abort Count, Signal Presented Flag, Signal Locked Flag,
+ * Signal Quality, Signal Strength, Delta-T for DVB-H time slicing.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param statistic the structure that store all statistic values.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_getStatistic (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ OUT Statistic* statistic
+);
+
+
+/**
+ * Get interrupt status.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param interrupts the type of interrupts.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_getInterrupts (
+ IN Demodulator* demodulator,
+ OUT Interrupts* interrupts
+);
+
+
+/**
+ * Clear interrupt status.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param interrupt interrupt name.
+ * @param packetUnit the number of packet unit for Post-Viterbi.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_clearInterrupt (
+ IN Demodulator* demodulator,
+ IN Interrupt interrupt
+);
+
+
+/**
+ * Get data length.
+ * In DVB-T mode, data length should always equals 2K,
+ * In DVB-H mode, data length would be the length of IP datagram.
+ * NOTE: data can't be transfer via I2C bus, in order to transfer data
+ * host must provide SPI bus.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param dataLength the length of data.
+ * @param valid True if the data length is valid.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_getDataLength (
+ IN Demodulator* demodulator,
+ OUT Dword* dataLength,
+ OUT Bool* valid
+);
+
+
+/**
+ * Get DVB-T data.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param bufferLength the length of buffer.
+ * @param buffer buffer used to get Data.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_getData (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ OUT Byte* buffer
+);
+
+
+/**
+ * Get datagram from device.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param bufferLength the number of registers to be read.
+ * @param buffer a byte array which is used to store values to be read.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @return Error_BUFFER_INSUFFICIENT: if buffer is too small.
+ */
+Dword Standard_getDatagram (
+ IN Demodulator* demodulator,
+ OUT Dword* bufferLength,
+ OUT Byte* buffer
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @param code the value of IR raw code, the size should be 4 or 6,
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Standard_getIrCode (
+ IN Demodulator* demodulator,
+ OUT Dword* code
+);
+
+
+/**
+ * Return to boot code
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Standard_reboot (
+ IN Demodulator* demodulator
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param contorl 1: Power up, 0: Power down;
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Standard_controlPowerSaving (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte control
+);
+
+
+/**
+ *
+ * @param demodulator the handle of demodulator.
+ * @param contorl 1: Power up, 0: Power down;
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Standard_controlTunerPowerSaving (
+ IN Demodulator* demodulator,
+ IN Byte control
+);
+
+
+/**
+ * Control PID fileter
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param contorl 0: Disable, 1: Enable.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @example <pre>
+ * </pre>
+ */
+Dword Standard_controlPidFilter (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte control
+);
+
+
+/**
+ * Reset PID filter.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_resetPidFilter (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ * Add PID to PID filter.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param chip The index of demodulator. The possible values are
+ * 0~7.
+ * @param pid the PID that will be add to PID filter.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+Dword Standard_addPidToFilter (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte index,
+ IN Pid pid
+);
+
+
+/**
+ * Set datagram burst size.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param burstSize the burst size.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @return Error_NOT_SUPPORT: if the burst size is not support.
+ */
+Dword Standard_setBurstSize (
+ IN Demodulator* demodulator,
+ IN BurstSize burstSize
+);
+
+
+/**
+ * Get datagram burst size.
+ *
+ * @param demodulator the handle of demodulator.
+ * @param burstSize the burst size.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ * @return Error_NOT_SUPPORT: if the burst size is not support.
+ */
+Dword Standard_getBurstSize (
+ IN Demodulator* demodulator,
+ IN BurstSize* burstSize
+);
+#endif \ No newline at end of file
diff --git a/api/type.h b/api/type.h
new file mode 100644
index 0000000..df56aad
--- /dev/null
+++ b/api/type.h
@@ -0,0 +1,915 @@
+#ifndef __TYPE_H__
+#define __TYPE_H__
+
+#include "userdef.h"// for Linux
+
+#define IN
+#define OUT
+#define INOUT
+
+
+/**
+ * The type of handle.
+ */
+typedef void* Handle;
+
+
+/**
+ * The type defination of 8-bits unsigned type.
+ */
+typedef unsigned char Byte;
+
+
+/**
+ * The type defination of 16-bits unsigned type.
+ */
+typedef unsigned short Word;
+
+
+/**
+ * The type defination of 32-bits unsigned type.
+ */
+typedef unsigned long Dword;
+
+
+/**
+ * The type defination of 16-bits signed type.
+ */
+typedef short Short;
+
+
+/**
+ * The type defination of 32-bits signed type.
+ */
+typedef long Long;
+
+
+#include "inttype.h" /** releaseExternalRemove */
+
+/**
+ * The type defination of Bool
+ */
+typedef enum {
+ False = 0,
+ True = 1
+} Bool;
+
+
+/**
+ * The type defination of Segment
+ */
+typedef struct {
+ Byte segmentType; /** 0:Firmware download 1:Rom copy 2:Direct command */
+ Dword segmentLength;
+} Segment;
+
+
+/**
+ * The type defination of Bandwidth.
+ */
+typedef enum {
+ Bandwidth_6M = 0, /** Signal bandwidth is 6MHz */
+ Bandwidth_7M, /** Signal bandwidth is 7MHz */
+ Bandwidth_8M, /** Signal bandwidth is 8MHz */
+ Bandwidth_5M /** Signal bandwidth is 5MHz */
+} Bandwidth;
+
+
+/**
+ * The type defination of TransmissionMode.
+ */
+typedef enum {
+ TransmissionMode_2K = 0, /** OFDM frame consists of 2048 different carriers (2K FFT mode) */
+ TransmissionMode_8K = 1, /** OFDM frame consists of 8192 different carriers (8K FFT mode) */
+ TransmissionMode_4K = 2 /** OFDM frame consists of 4096 different carriers (4K FFT mode) */
+} TransmissionModes;
+
+
+/**
+ * The type defination of Constellation.
+ */
+typedef enum {
+ Constellation_QPSK = 0, /** Signal uses QPSK constellation */
+ Constellation_16QAM, /** Signal uses 16QAM constellation */
+ Constellation_64QAM /** Signal uses 64QAM constellation */
+} Constellation;
+
+
+/**
+ * The type defination of Interval.
+ */
+typedef enum {
+ Interval_1_OVER_32 = 0, /** Guard interval is 1/32 of symbol length */
+ Interval_1_OVER_16, /** Guard interval is 1/16 of symbol length */
+ Interval_1_OVER_8, /** Guard interval is 1/8 of symbol length */
+ Interval_1_OVER_4 /** Guard interval is 1/4 of symbol length */
+} Interval;
+
+
+/**
+ * The type defination of Priority.
+ */
+typedef enum {
+ Priority_HIGH = 0, /** DVB-T and DVB-H - identifies high-priority stream */
+ Priority_LOW /** DVB-T and DVB-H - identifies low-priority stream */
+} Priority;
+
+
+/**
+ * The type defination of CodeRate.
+ */
+typedef enum {
+ CodeRate_1_OVER_2 = 0, /** Signal uses FEC coding ratio of 1/2 */
+ CodeRate_2_OVER_3, /** Signal uses FEC coding ratio of 2/3 */
+ CodeRate_3_OVER_4, /** Signal uses FEC coding ratio of 3/4 */
+ CodeRate_5_OVER_6, /** Signal uses FEC coding ratio of 5/6 */
+ CodeRate_7_OVER_8, /** Signal uses FEC coding ratio of 7/8 */
+ CodeRate_NONE /** None, NXT doesn't have this one */
+} CodeRate;
+
+
+/**
+ * TPS Hierarchy and Alpha value.
+ */
+typedef enum {
+ Hierarchy_NONE = 0, /** Signal is non-hierarchical */
+ Hierarchy_ALPHA_1, /** Signalling format uses alpha of 1 */
+ Hierarchy_ALPHA_2, /** Signalling format uses alpha of 2 */
+ Hierarchy_ALPHA_4 /** Signalling format uses alpha of 4 */
+} Hierarchy;
+
+
+/**
+ * The defination of SubchannelType.
+ */
+typedef enum {
+ SubchannelType_AUDIO = 0, /** Signal in subchannel is audio format */
+ SubchannelType_VIDEO = 1, /** Signal in subchannel is video format */
+ SubchannelType_PACKET = 3, /** Signal in subchannel is packet format */
+ SubchannelType_ENHANCEPACKET = 4 /** Signal in subchannel is enhance packet format */
+} SubchannelType;
+
+
+/**
+ * The defination of ProtectionLevel.
+ */
+typedef enum {
+ ProtectionLevel_NONE = 0x00, /** The protection level of subchannel is none */
+ ProtectionLevel_PL1 = 0x01, /** The protection level of subchannel is level 1 */
+ ProtectionLevel_PL2 = 0x02, /** The protection level of subchannel is level 2 */
+ ProtectionLevel_PL3 = 0x03, /** The protection level of subchannel is level 3 */
+ ProtectionLevel_PL4 = 0x04, /** The protection level of subchannel is level 4 */
+ ProtectionLevel_PL5 = 0x05, /** The protection level of subchannel is level 5 */
+ ProtectionLevel_PL1A = 0x1A, /** The protection level of subchannel is level 1A */
+ ProtectionLevel_PL2A = 0x2A, /** The protection level of subchannel is level 2A */
+ ProtectionLevel_PL3A = 0x3A, /** The protection level of subchannel is level 3A */
+ ProtectionLevel_PL4A = 0x4A, /** The protection level of subchannel is level 4A */
+ ProtectionLevel_PL1B = 0x1B, /** The protection level of subchannel is level 1B */
+ ProtectionLevel_PL2B = 0x2B, /** The protection level of subchannel is level 2B */
+ ProtectionLevel_PL3B = 0x3B, /** The protection level of subchannel is level 3B */
+ ProtectionLevel_PL4B = 0x4B /** The protection level of subchannel is level 4B */
+} ProtectionLevel;
+
+
+/**
+ * The defination of ChannelInformation.
+ */
+typedef struct {
+ Dword frequency; /** Channel frequency in KHz. */
+ TransmissionModes transmissionMode; /** Number of carriers used for OFDM signal */
+ Constellation constellation; /** Constellation scheme (FFT mode) in use */
+ Interval interval; /** Fraction of symbol length used as guard (Guard Interval) */
+ Priority priority; /** The priority of stream */
+ CodeRate highCodeRate; /** FEC coding ratio of high-priority stream */
+ CodeRate lowCodeRate; /** FEC coding ratio of low-priority stream */
+ Hierarchy hierarchy; /** Hierarchy levels of OFDM signal */
+ Bandwidth bandwidth;
+} ChannelModulation;
+
+
+/**
+ * The defination of SubchannelModulation. This structure is used to
+ * represent subchannel modulation when device is operate in T-DMB/DAB mode.
+ *
+ */
+typedef struct {
+ Byte subchannelId; /** The ID of subchannel. */
+ Word subchannelSize; /** The size of subchannel. */
+ Word bitRate; /** The bit rate of subchannel. */
+ Byte transmissionMode; /** The transmission mode of subchannel, possible values are: 1, 2, 3, 4. */
+ ProtectionLevel protectionLevel; /** The protection level of subchannel. */
+ SubchannelType subchannelType; /** The type of subchannel */
+ Byte conditionalAccess; /** If a conditional access exist */
+ Byte tiiPrimary; /** TII primary */
+ Byte tiiCombination; /** TII combination */
+} SubchannelModulation;
+
+
+/**
+ * The type defination of IpVersion.
+ */
+typedef enum {
+ IpVersion_IPV4 = 0, /** The IP version if IPv4 */
+ IpVersion_IPV6 = 1 /** The IP version if IPv6 */
+} IpVersion;
+
+
+/**
+ * The type defination of Ip.
+ */
+typedef struct {
+ IpVersion version; /** The version of IP. See the defination of IpVersion. */
+ Priority priority; /** The priority of IP. See the defination of Priority. */
+ Bool cache; /** True: IP datagram will be cached in device's buffer. Fasle: IP datagram will be transfer to host. */
+ Byte address[16]; /** The byte array to store IP address. */
+} Ip;
+
+
+/**
+ * The type defination of Platform.
+ * Mostly used is in DVB-H standard
+ */
+typedef struct {
+ Dword platformId; /** The ID of platform. */
+ char iso639LanguageCode[3]; /** The ISO 639 language code for platform name. */
+ Byte platformNameLength; /** The length of platform name. */
+ char platformName[32]; /** The char array to store platform name. */
+ Word bandwidth; /** The operating channel bandwith of this platform. */
+ Dword frequency; /** The operating channel frequency of this platform. */
+ Byte* information; /** The extra information about this platform. */
+ Word informationLength; /** The length of information. */
+ Bool hasInformation; /** The flag to indicate if there exist extra information. */
+ IpVersion ipVersion; /** The IP version of this platform. */
+} Platform;
+
+
+/**
+ * The type defination of Label.
+ */
+typedef struct {
+ Byte charSet;
+ Word charFlag;
+ Byte string[16];
+} Label;
+
+
+/**
+ * The type defination of Ensemble.
+ */
+typedef struct {
+ Word ensembleId;
+ Label ensembleLabel;
+ Byte totalServices;
+} Ensemble;
+
+
+/**
+ * The type defination of Service.
+ * Mostly used is in T-DMB standard
+ */
+typedef struct {
+ Byte serviceType; /** Service Type(P/D): 0x00: Program, 0x80: Data */
+ Dword serviceId;
+ Dword frequency;
+ Label serviceLabel;
+ Byte totalComponents;
+} Service;
+
+
+/**
+ * The type defination of Service Component.
+ */
+typedef struct {
+ Byte serviceType; /** Service Type(P/D): 0x00: Program, 0x80: Data */
+ Dword serviceId; /** Service ID */
+ Word componentId; /** Stream audio/data is subchid, packet mode is SCId */
+ Byte componentIdService; /** Component ID within Service */
+ Label componentLabel; /** The label of component. See the defination of Label. */
+ Byte language; /** Language code */
+ Byte primary; /** Primary/Secondary */
+ Byte conditionalAccess; /** Conditional Access flag */
+ Byte componentType; /** Component Type (A/D) */
+ Byte transmissionId; /** Transmission Mechanism ID */
+} Component;
+
+
+/**
+ * The type defination of Target.
+ */
+typedef enum {
+ SectionType_MPE = 0, /** Stands for MPE data. */
+ SectionType_SIPSI, /** Stands for SI/PSI table, but don't have to specify table ID. */
+ SectionType_TABLE /** Stands for SI/PSI table. */
+} SectionType;
+
+
+/**
+ * The type defination of FrameRow.
+ */
+typedef enum {
+ FrameRow_256 = 0, /** There should be 256 rows for each column in MPE-FEC frame. */
+ FrameRow_512, /** There should be 512 rows for each column in MPE-FEC frame. */
+ FrameRow_768, /** There should be 768 rows for each column in MPE-FEC frame. */
+ FrameRow_1024 /** There should be 1024 rows for each column in MPE-FEC frame. */
+} FrameRow;
+
+
+/**
+ * The type defination of Pid.
+ *
+ * In DVB-T mode, only value is valid. In DVB-H mode,
+ * as sectionType = SectionType_SIPSI: only value is valid.
+ * as sectionType = SectionType_TABLE: both value and table is valid.
+ * as sectionType = SectionType_MPE: except table all other fields is valid.
+ */
+typedef struct {
+ Byte table; /** The table ID. Which is used to filter specific SI/PSI table. */
+ Byte duration; /** The maximum burst duration. It can be specify to 0xFF if user don't know the exact value. */
+ FrameRow frameRow; /** The frame row of MPE-FEC. It means the exact number of rows for each column in MPE-FEC frame. */
+ SectionType sectionType; /** The section type of pid. See the defination of SectionType. */
+ Priority priority; /** The priority of MPE data. Only valid when sectionType is set to SectionType_MPE. */
+ IpVersion version; /** The IP version of MPE data. Only valid when sectionType is set to SectionType_MPE. */
+ Bool cache; /** True: MPE data will be cached in device's buffer. Fasle: MPE will be transfer to host. */
+ Word value; /** The 13 bits Packet ID. */
+} Pid;
+
+
+/**
+ * The type defination of ValueSet.
+ */
+typedef struct {
+ Dword address; /** The address of target register */
+ Byte value; /** The value of target register */
+} ValueSet;
+
+
+/**
+ * The type defination of Datetime.
+ */
+typedef struct {
+ Dword mjd; /** The mjd of datetime */
+ Byte configuration; /** The configuration of datetime */
+ Byte hours; /** The hours of datetime */
+ Byte minutes; /** The minutes of datetime */
+ Byte seconds; /** The seconds of datetime */
+ Word milliseconds; /** The milli seconds of datetime */
+} Datetime;
+
+
+/**
+ * The type defination of Interrupts.
+ */
+typedef Word Interrupts;
+
+
+/**
+ * The type defination of Interrupt.
+ */
+typedef enum {
+ Interrupt_NONE = 0x0000, /** No interrupt. */
+ Interrupt_SIPSI = 0x0001,
+ Interrupt_DVBH = 0x0002,
+ Interrupt_DVBT = 0x0004,
+ Interrupt_PLATFORM = 0x0008,
+ Interrupt_VERSION = 0x0010,
+ Interrupt_FREQUENCY = 0x0020,
+ Interrupt_SOFTWARE1 = 0x0040,
+ Interrupt_SOFTWARE2 = 0x0080,
+ Interrupt_FIC = 0x0100,
+ Interrupt_MSC = 0x0200,
+ Interrupt_MCISI = 0x0400
+} Interrupt;
+
+
+/**
+ * The type defination of Multiplier.
+ */
+typedef enum {
+ Multiplier_1X = 0,
+ Multiplier_2X
+} Multiplier;
+
+
+/**
+ * The type defination of StreamType.
+ */
+typedef enum {
+ StreamType_NONE = 0, /** Invalid (Null) StreamType */
+ StreamType_DVBT_DATAGRAM = 3, /** DVB-T mode, store data in device buffer */
+ StreamType_DVBT_PARALLEL, /** DVB-T mode, output via paralle interface */
+ StreamType_DVBT_SERIAL, /** DVB-T mode, output via serial interface */
+} StreamType;
+
+
+/**
+ * The type defination of StreamType.
+ */
+typedef enum {
+ Architecture_NONE = 0, /** Inavalid (Null) Architecture. */
+ Architecture_DCA, /** Diversity combine architecture. Only valid when chip number > 1. */
+ Architecture_PIP /** Picture in picture. Only valid when chip number > 1. */
+} Architecture;
+
+
+/**
+ * The type defination of ClockTable.
+ */
+typedef struct {
+ Dword crystalFrequency; /** The frequency of crystal. */
+ Dword adcFrequency; /** The frequency of ADC. */
+} ClockTable;
+
+
+/**
+ * The type defination of BandTable.
+ */
+typedef struct {
+ Dword minimum; /** The minimum frequency of this band */
+ Dword maximum; /** The maximum frequency of this band */
+} BandTable;
+
+
+/**
+ * The type defination of MeanTable.
+ */
+typedef struct {
+ Dword mean;
+ Dword errorCount;
+} MeanTable;
+
+
+/**
+ * The type defination of Polarity.
+ */
+typedef enum {
+ Polarity_NORMAL = 0,
+ Polarity_INVERSE
+} Polarity;
+
+
+/**
+ * The type defination of Processor.
+ */
+typedef enum {
+ Processor_LINK = 0,
+ Processor_OFDM = 8
+} Processor;
+
+
+/**
+ * The type defination of BurstSize.
+ */
+typedef enum {
+ BurstSize_1024 = 0,
+ BurstSize_2048,
+ BurstSize_4096
+} BurstSize;
+
+
+/**
+ * The type defination of Demodulator.
+ */
+typedef struct {
+ Handle userData;
+ Handle driver;
+} Demodulator;
+
+
+#include "user.h"
+
+
+/**
+ * The type defination of Statistic.
+ */
+typedef struct {
+ Bool signalPresented; /** Signal is presented. */
+ Bool signalLocked; /** Signal is locked. */
+ Byte signalQuality; /** Signal quality, from 0 (poor) to 100 (good). */
+ Byte signalStrength; /** Signal strength from 0 (weak) to 100 (strong). */
+} Statistic;
+
+
+/**
+ * General demodulator register-write function
+ *
+ * @param demodulator the handle of demodulator.
+ * @param registerAddress address of register to be written.
+ * @param bufferLength number, 1-8, of registers to be written.
+ * @param buffer buffer used to store values to be written to specified
+ * registers.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+typedef Dword (*WriteRegisters) (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte registerAddressLength,
+ IN Dword writeBufferLength,
+ IN Byte* writeBuffer
+);
+
+
+/**
+ * General tuner register-write function
+ *
+ * @param demodulator the handle of demodulator.
+ * @param registerAddress address of register to be written.
+ * @param bufferLength number, 1-8, of registers to be written.
+ * @param buffer buffer used to store values to be written to specified
+ * registers.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+typedef Dword (*WriteTunerRegisters) (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte tunerAddress,
+ IN Word registerAddress,
+ IN Byte registerAddressLength,
+ IN Byte writeBufferLength,
+ IN Byte* writeBuffer
+);
+
+
+/**
+ * General write EEPROM function
+ *
+ * @param demodulator the handle of demodulator.
+ * @param registerAddress address of register to be read.
+ * @param bufferLength number, 1-8, of registers to be written.
+ * @param buffer buffer used to store values to be written to specified
+ * registers.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+typedef Dword (*WriteEepromValues) (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte eepromAddress,
+ IN Word registerAddress,
+ IN Byte registerAddressLength,
+ IN Byte writeBufferLength,
+ IN Byte* writeBuffer
+);
+
+
+/**
+ * General demodulator register-read function
+ *
+ * @param demodulator the handle of demodulator.
+ * @param registerAddress address of register to be read.
+ * @param bufferLength number, 1-8, of registers to be read.
+ * @param buffer buffer used to store values to be read to specified
+ * registers.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+typedef Dword (*ReadRegisters) (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte registerAddressLength,
+ IN Dword readBufferLength,
+ OUT Byte* readBuffer
+);
+
+
+/**
+ * General tuner register-read function
+ *
+ * @param demodulator the handle of demodulator.
+ * @param registerAddress address of register to be read.
+ * @param bufferLength number, 1-8, of registers to be read.
+ * @param buffer buffer used to store values to be read to specified
+ * registers.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+typedef Dword (*ReadTunerRegisters) (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte tunerAddress,
+ IN Word registerAddress,
+ IN Byte registerAddressLength,
+ IN Byte readBufferLength,
+ IN Byte* readBuffer
+);
+
+
+/**
+ * General read EEPROM function
+ *
+ * @param demodulator the handle of demodulator.
+ * @param registerAddress address of register to be read.
+ * @param bufferLength number, 1-8, of registers to be read.
+ * @param buffer buffer used to store values to be read to specified
+ * registers.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+typedef Dword (*ReadEepromValues) (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Byte eepromAddress,
+ IN Word registerAddress,
+ IN Byte registerAddressLength,
+ IN Byte readBufferLength,
+ OUT Byte* readBuffer
+);
+
+
+/**
+ * General demodulator register-read function
+ *
+ * @param demodulator the handle of demodulator.
+ * @param registerAddress address of register to be read.
+ * @param bufferLength number, 1-8, of registers to be read.
+ * @param buffer buffer used to store values to be read to specified
+ * registers.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+typedef Dword (*ModifyRegister) (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword registerAddress,
+ IN Byte registerAddressLength,
+ IN Byte position,
+ IN Byte length,
+ IN Byte value
+);
+
+
+/**
+ * General load firmware function
+ *
+ * @param demodulator the handle of demodulator.
+ * @param length The length of firmware.
+ * @param firmware The byte array of firmware.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+typedef Dword (*LoadFirmware) (
+ IN Demodulator* demodulator,
+ IN Dword firmwareLength,
+ IN Byte* firmware
+);
+
+
+/**
+ * General reboot function
+ *
+ * @param demodulator the handle of demodulator.
+ * @param length The length of firmware.
+ * @param firmware The byte array of firmware.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+typedef Dword (*Reboot) (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ * Find and Get bus handle used to control bus
+ *
+ * @param demodulator the handle of demodulator.
+ * @param handle The bus handle.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+typedef Dword (*GetBus) (
+ IN Demodulator* demodulator,
+ OUT Handle* handle
+);
+
+
+/**
+ * Find and Get bus handle used to control bus
+ *
+ * @param demodulator the handle of demodulator.
+ * @param bufferLength The length to transmit.
+ * @param buffer The buffer which we store the data to send.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+typedef Dword (*BusTx) (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ IN Byte* buffer
+);
+
+
+/**
+ * Find and Get bus handle used to control bus
+ *
+ * @param demodulator the handle of demodulator.
+ * @param bufferLength The length to transmit.
+ * @param buffer The buffer which we store the data to send.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+typedef Dword (*BusRx) (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ IN Byte* buffer
+);
+
+
+/**
+ * Find and Get bus handle used to control bus
+ *
+ * @param demodulator the handle of demodulator.
+ * @param registerAddress The starting address of memory to get.
+ * @param readBufferLength The length of buffer to receive data.
+ * @param readBuffer The buffer use to store received data
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+typedef Dword (*BusRxData) (
+ IN Demodulator* demodulator,
+ IN Dword readBufferLength,
+ OUT Byte* readBuffer
+);
+
+/**
+ * General send command function
+ *
+ * @param demodulator the handle of demodulator.
+ * @param command The command which you wan.
+ * @param valueLength value length.
+ * @param valueBuffer value buffer.
+ * @param referenceLength reference length.
+ * @param referenceBuffer reference buffer.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+typedef Dword (*SendCommand) (
+ IN Demodulator* demodulator,
+ IN Word command,
+ IN Byte chip,
+ IN Processor processor,
+ IN Dword writeBufferLength,
+ IN Byte* writeBuffer,
+ IN Dword readBufferLength,
+ OUT Byte* readBuffer
+);
+
+
+/**
+ * General read EEPROM function
+ *
+ * @param demodulator the handle of demodulator.
+ * @param registerAddress address of register to be read.
+ * @param bufferLength number, 1-8, of registers to be read.
+ * @param buffer buffer used to store values to be read to specified
+ * registers.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+typedef Dword (*ReceiveData) (
+ IN Demodulator* demodulator,
+ IN Dword registerAddress,
+ IN Dword readBufferLength,
+ OUT Byte* readBuffer
+);
+
+
+/**
+ * The type defination of BusDescription
+ */
+typedef struct {
+ GetBus getBus;
+ BusTx busTx;
+ BusRx busRx;
+ BusRxData busRxData;
+} BusDescription;
+
+
+/**
+ * The type defination of BusDescription
+ */
+typedef struct {
+ Dword mailBoxSize;
+ BusDescription* busDescription;
+ WriteRegisters writeRegisters;
+ WriteTunerRegisters writeTunerRegisters;
+ WriteEepromValues writeEepromValues;
+ ReadRegisters readRegisters;
+ ReadTunerRegisters readTunerRegisters;
+ ReadEepromValues readEepromValues;
+ ModifyRegister modifyRegister;
+ LoadFirmware loadFirmware;
+ Reboot reboot;
+ SendCommand sendCommand;
+ ReceiveData receiveData;
+} CmdDescription;
+
+
+/**
+ * General tuner opening function
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+typedef Dword (*OpenTuner) (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ * General tuner closing function
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+typedef Dword (*CloseTuner) (
+ IN Demodulator* demodulator,
+ IN Byte chip
+);
+
+
+/**
+ * General tuner setting function
+ *
+ * @param demodulator the handle of demodulator.
+ * @return Error_NO_ERROR: successful, non-zero error code otherwise.
+ */
+typedef Dword (*SetTuner) (
+ IN Demodulator* demodulator,
+ IN Byte chip,
+ IN Word bandwidth,
+ IN Dword frequency
+);
+
+
+/**
+ * The type defination of TunerDescription
+ */
+typedef struct {
+ OpenTuner openTuner;
+ CloseTuner closeTuner;
+ SetTuner setTuner;
+ ValueSet* tunerScript;
+ Word* tunerScriptSets;
+ Byte tunerAddress;
+ Byte registerAddressLength;
+ Dword ifFrequency;
+ Bool inversion;
+ Word tunerId;
+} TunerDescription;
+
+
+/**
+ * The data structure of DefaultDemodulator
+ */
+typedef struct {
+ /** Basic structure */
+ Handle userData;
+ Handle driver;
+ Dword options;
+ Word busId;
+ CmdDescription* cmdDescription;
+ Word tunerId;
+ TunerDescription *tunerDescription;
+} DefaultDemodulator;
+
+
+/**
+ * The data structure of Ganymede
+ */
+typedef struct {
+ /** Basic structure */
+ Handle userData;
+ Handle driver;
+ Dword options;
+ Word busId;
+ CmdDescription* cmdDescription;
+ TunerDescription *tunerDescription;
+ Byte* firmwareCodes;
+ Segment* firmwareSegments;
+ Byte* firmwarePartitions;
+ Word* scriptSets;
+ ValueSet* scripts;
+ Word* tunerScriptSets;
+ ValueSet* tunerScripts;
+ Byte chipNumber;
+ Dword crystalFrequency;
+ Dword adcFrequency;
+ StreamType streamType;
+ Architecture architecture;
+ Word bandwidth[2];
+ Dword frequency[2];
+ Dword fcw;
+ Statistic statistic[2];
+ ChannelStatistic channelStatistic[2]; /** releaseExternalRemove */
+ Byte hostInterface[2];
+ Bool booted;
+ Bool initialized;
+
+ /** DVB-T structure */
+ Bool dataReady;
+ BurstSize burstSize;
+} Ganymede;
+
+
+extern const Byte Standard_bitMask[8];
+#define REG_MASK(pos, len) (Standard_bitMask[len-1] << pos)
+#define REG_CLEAR(temp, pos, len) (temp & (~REG_MASK(pos, len)))
+#define REG_CREATE(val, temp, pos, len) ((val << pos) | (REG_CLEAR(temp, pos, len)))
+#define REG_GET(value, pos, len) ((value & REG_MASK(pos, len)) >> pos)
+#define LOWBYTE(w) ((Byte)((w) & 0xff))
+#define HIGHBYTE(w) ((Byte)((w >> 8) & 0xff))
+
+#endif
diff --git a/api/usb2impl.c b/api/usb2impl.c
new file mode 100644
index 0000000..30e6265
--- /dev/null
+++ b/api/usb2impl.c
@@ -0,0 +1,177 @@
+// all for Linux
+#include <linux/autoconf.h>
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <linux/module.h>
+#include <linux/kref.h>
+#include <linux/smp_lock.h>
+#include <linux/usb.h>
+#include <asm/uaccess.h>
+#include <linux/device.h>
+#include <linux/string.h>
+#include <linux/firmware.h>
+#include <linux/delay.h>
+#include <linux/vmalloc.h>
+
+#include "usb2impl.h"
+#include "af903x.h"
+
+#ifdef UNDER_CE
+
+Handle Usb2_handle = NULL;
+
+
+Dword Usb2_getDriver (
+ IN Demodulator* demodulator,
+ OUT Handle* handle
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword Usb2_writeControlBus (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ IN Byte* buffer
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword Usb2_readControlBus (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ OUT Byte* buffer
+) {
+ return (Error_NO_ERROR);
+}
+
+
+Dword Usb2_readDataBus (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ OUT Byte* buffer
+) {
+ return (Error_NO_ERROR);
+}
+
+#else
+
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT 0x0500
+#endif
+
+Handle Usb2_handle = 0;
+/*
+bool (__cdecl *Usb2_initialize) (
+);
+void (__cdecl *Usb2_finalize) (
+);
+bool (__cdecl *Usb2_writeControl) (
+ Byte* poutBuf,
+ unsigned long WriteLen,
+ unsigned long* pnBytesWrite
+);
+bool (__cdecl *Usb2_readControl) (
+ Byte* pinBuf,
+ unsigned long ReadLen,
+ unsigned long* pnBytesRead
+);
+bool (__cdecl *Usb2_readData) (
+ BYTE* pinBuf,
+ ULONG ReadLen
+);
+*/
+
+Dword Usb2_getDriver (
+ IN Demodulator* demodulator,
+ OUT Handle* handle
+) {
+ Dword error = Error_NO_ERROR;
+/*
+ HINSTANCE instance = NULL;
+
+ instance = LoadLibrary ("AF15BDAEX.dll");
+ Usb2_initialize = (bool (__cdecl *) (
+ )) GetProcAddress (instance, "af15_init");
+ Usb2_finalize = (void (__cdecl *) (
+ )) GetProcAddress (instance, "af15_exit");
+ Usb2_writeControl = (bool (__cdecl *) (
+ BYTE* poutBuf,
+ ULONG WriteLen,
+ ULONG* pnBytesWrite
+ )) GetProcAddress (instance, "af15_WriteBulkData");
+ Usb2_readControl = (bool (__cdecl *) (
+ BYTE* pinBuf,
+ ULONG ReadLen,
+ ULONG* pnBytesRead
+ )) GetProcAddress (instance, "af15_ReadBulkData");
+ Usb2_readData = (bool (__cdecl *) (
+ BYTE* pinBuf,
+ ULONG ReadLen
+ )) GetProcAddress (instance, "af15_GetTsData");
+
+ if (!Usb2_initialize ())
+ error = Error_DRIVER_INVALID;
+
+ *handle = (Handle) instance;
+*/
+ return (error);
+}
+
+
+Dword Usb2_writeControlBus (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ IN Byte* buffer
+) {
+
+// Ganymede *pGanymede = (Ganymede *)demodulator;
+ Dword ret,act_len;
+ ret = 0;
+ ret = usb_bulk_msg(usb_get_dev(udevs),
+ usb_sndbulkpipe(usb_get_dev(udevs), 0x02),
+ buffer,
+ bufferLength,
+ &act_len,
+ 100000);
+
+ if (ret) deb_data(" Usb2_writeControlBus fail : %d!\n", ret);
+
+ return (Error_NO_ERROR);
+}
+
+
+Dword Usb2_readControlBus (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ OUT Byte* buffer
+) {
+
+// Ganymede *pGanymede = (Ganymede *)demodulator;
+ Dword ret, nBytesRead;
+ ret = 0;
+ ret = usb_bulk_msg(usb_get_dev(udevs),
+ usb_rcvbulkpipe(usb_get_dev(udevs),129),
+ buffer,
+ 125,
+ &nBytesRead,
+ 100000);
+
+
+ if (ret) deb_data(" Usb2_readControlBus fail : %d!\n", ret);
+
+ return (Error_NO_ERROR);
+}
+
+
+Dword Usb2_readDataBus (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ OUT Byte* buffer
+) {
+ return (Error_NO_ERROR);
+}
+#endif
diff --git a/api/usb2impl.h b/api/usb2impl.h
new file mode 100644
index 0000000..c41328d
--- /dev/null
+++ b/api/usb2impl.h
@@ -0,0 +1,38 @@
+#ifndef __USB2IMPL_H__
+#define __USB2IMPL_H__
+
+
+#include "type.h"
+#include "error.h"
+#include "user.h"
+#include "cmd.h"
+
+
+Dword Usb2_getDriver (
+ IN Demodulator* demodulator,
+ OUT Handle* handle
+);
+
+
+Dword Usb2_writeControlBus (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ IN Byte* buffer
+);
+
+
+Dword Usb2_readControlBus (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ OUT Byte* buffer
+);
+
+
+Dword Usb2_readDataBus (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ OUT Byte* buffer
+);
+
+#endif
+
diff --git a/api/user.c b/api/user.c
new file mode 100644
index 0000000..e266f45
--- /dev/null
+++ b/api/user.c
@@ -0,0 +1,142 @@
+#include "user.h"
+#include <linux/delay.h> //for Linux mdelay
+//#include <unistd.h>
+
+
+/**
+ * Variable of critical section
+ */
+
+Dword User_memoryCopy (
+ IN Demodulator* demodulator,
+ IN void* dest,
+ IN void* src,
+ IN Dword count
+) {
+ /*
+ * ToDo: Add code here
+ *
+ * //Pseudo code
+ * memcpy(dest, src, (size_t)count);
+ * return (0);
+ */
+ return (Error_NO_ERROR);
+}
+
+Dword User_delay (
+ IN Demodulator* demodulator,
+ IN Dword dwMs
+) {
+ /*
+ * ToDo: Add code here
+ *
+ * //Pseudo code
+ * delay(dwMs);
+ * return (0);
+ */
+ mdelay(dwMs); // for Linux
+ //sleep(dwMs);
+ return (Error_NO_ERROR);
+}
+
+
+Dword User_enterCriticalSection (
+ IN Demodulator* demodulator
+) {
+ /*
+ * ToDo: Add code here
+ *
+ * //Pseudo code
+ * return (0);
+ */
+ return (Error_NO_ERROR);
+}
+
+
+Dword User_leaveCriticalSection (
+ IN Demodulator* demodulator
+) {
+ /*
+ * ToDo: Add code here
+ *
+ * //Pseudo code
+ * return (0);
+ */
+ return (Error_NO_ERROR);
+}
+
+
+Dword User_mpegConfig (
+ IN Demodulator* demodulator
+) {
+ /*
+ * ToDo: Add code here
+ *
+ */
+ return (Error_NO_ERROR);
+}
+
+
+Dword User_busTx (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ IN Byte* buffer
+) {
+ /*
+ * ToDo: Add code here
+ *
+ * //Pseudo code
+ * short i;
+ *
+ * start();
+ * write_i2c(uc2WireAddr);
+ * ack();
+ * for (i = 0; i < bufferLength; i++) {
+ * write_i2c(*(ucpBuffer + i));
+ * ack();
+ * }
+ * stop();
+ *
+ * // If no error happened return 0, else return error code.
+ * return (0);
+ */
+ return (Error_NO_ERROR);
+}
+
+
+Dword User_busRx (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ OUT Byte* buffer
+) {
+ /*
+ * ToDo: Add code here
+ *
+ * //Pseudo code
+ * short i;
+ *
+ * start();
+ * write_i2c(uc2WireAddr | 0x01);
+ * ack();
+ * for (i = 0; i < bufferLength - 1; i++) {
+ * read_i2c(*(ucpBuffer + i));
+ * ack();
+ * }
+ * read_i2c(*(ucpBuffer + bufferLength - 1));
+ * nack();
+ * stop();
+ *
+ * // If no error happened return 0, else return error code.
+ * return (0);
+ */
+ return (Error_NO_ERROR);
+}
+
+
+Dword User_busRxData (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ OUT Byte* buffer
+) {
+ return (Error_NO_ERROR);
+}
diff --git a/api/user.h b/api/user.h
new file mode 100644
index 0000000..722dd59
--- /dev/null
+++ b/api/user.h
@@ -0,0 +1,122 @@
+#ifndef __USER_H__
+#define __USER_H__
+
+
+//#include <stdio.h> //for Linux
+#include "type.h"
+#include "error.h"
+
+
+
+
+#define User_USE_INTERRUPT 0
+#define User_USE_DRIVER 0
+
+#define User_MAX_PKT_SIZE 255
+#define User_USE_SHORT_CMD 0
+
+#define User_RETRY_MAX_LIMIT 10
+
+
+/** Define I2C master speed, the default value 0x07 means 366KHz (1000000000 / (24.4 * 16 * User_I2C_SPEED)). */
+#define User_I2C_SPEED 0x07
+
+/** Define I2C address of secondary chip when Diversity mode or PIP mode is active. */
+#define User_I2C_ADDRESS 0x38
+
+/** Define USB frame size */
+#define User_USB20_MAX_PACKET_SIZE 512
+#define User_USB20_FRAME_SIZE (188 * 348)
+#define User_USB20_FRAME_SIZE_DW (User_USB20_FRAME_SIZE / 4)
+#define User_USB11_MAX_PACKET_SIZE 64
+#define User_USB11_FRAME_SIZE (188 * 21)
+#define User_USB11_FRAME_SIZE_DW (User_USB11_FRAME_SIZE / 4)
+
+// for Linux
+typedef unsigned char tBYTE; // 1 byte
+typedef unsigned short tWORD; // 2 bytes
+typedef unsigned long tDWORD; // 4 bytes
+typedef int tINT; // 4 bytes
+typedef void * tHANDLE;
+
+
+
+/**
+ * Memory copy Function
+ */
+Dword User_memoryCopy (
+ IN Demodulator* demodulator,
+ IN void* dest,
+ IN void* src,
+ IN Dword count
+);
+
+
+/**
+ * Delay Function
+ */
+Dword User_delay (
+ IN Demodulator* demodulator,
+ IN Dword dwMs
+);
+
+
+/**
+ * Enter critical section
+ */
+Dword User_enterCriticalSection (
+ IN Demodulator* demodulator
+);
+
+
+/**
+ * Leave critical section
+ */
+Dword User_leaveCriticalSection (
+ IN Demodulator* demodulator
+);
+
+
+/**
+ * Config MPEG2 interface
+ */
+Dword User_mpegConfig (
+ IN Demodulator* demodulator
+);
+
+
+/**
+ * Write data via "Control Bus"
+ * I2C mode : uc2WireAddr mean demodulator chip address, the default value is 0x38
+ * USB mode : uc2WireAddr is useless, don't have to send this data
+ */
+Dword User_busTx (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ IN Byte* buffer
+);
+
+
+/**
+ * Read data via "Control Bus"
+ * I2C mode : uc2WireAddr mean demodulator chip address, the default value is 0x38
+ * USB mode : uc2WireAddr is useless, don't have to send this data
+ */
+Dword User_busRx (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ OUT Byte* buffer
+);
+
+
+/**
+ * Read data via "Data Bus"
+ * I2C mode : uc2WireAddr mean demodulator chip address, the default value is 0x38
+ * USB mode : uc2WireAddr is useless, don't have to send this data
+ */
+Dword User_busRxData (
+ IN Demodulator* demodulator,
+ IN Dword bufferLength,
+ OUT Byte* buffer
+);
+#endif
diff --git a/api/variable.h b/api/variable.h
new file mode 100644
index 0000000..eb4dace
--- /dev/null
+++ b/api/variable.h
@@ -0,0 +1,271 @@
+#ifndef __VARIABLE_H__
+#define __VARIABLE_H__
+//this file define variable which initialized by AP
+//CFOE------------------------------------------
+
+//These variables are initialized by API.
+//Don't change the order of the definition of these variables.
+
+
+//2k
+//BASE Address 0x418B
+#define var_addr_base 0x418b
+#define log_addr_base 0x418d
+#define log_data_base 0x418f
+#define LowerLocalRetrain 0x43bb
+//scmd _at_ 0x4496;
+// Do NOT touch the following line: used by script
+// --- @xx++ Start variable block
+//Initialization..
+//API relative
+//BASE Address 0x0000
+#define trigger_ofsm 0x0000
+#define cfoe_NS_2048_coeff1_25_24 0x0001
+#define cfoe_NS_2048_coeff1_23_16 0x0002
+#define cfoe_NS_2048_coeff1_15_8 0x0003
+#define cfoe_NS_2048_coeff1_7_0 0x0004
+#define cfoe_NS_2k_coeff2_24 0x0005
+#define cfoe_NS_2k_coeff2_23_16 0x0006
+#define cfoe_NS_2k_coeff2_15_8 0x0007
+#define cfoe_NS_2k_coeff2_7_0 0x0008
+
+//8k..
+
+#define cfoe_NS_8191_coeff1_25_24 0x0009
+#define cfoe_NS_8191_coeff1_23_16 0x000a
+#define cfoe_NS_8191_coeff1_15_8 0x000b
+#define cfoe_NS_8191_coeff1_7_0 0x000c
+#define cfoe_NS_8192_coeff1_25_24 0x000d
+#define cfoe_NS_8192_coeff1_23_16 0x000e
+#define cfoe_NS_8192_coeff1_15_8 0x000f
+#define cfoe_NS_8192_coeff1_7_0 0x0010
+#define cfoe_NS_8193_coeff1_25_24 0x0011
+#define cfoe_NS_8193_coeff1_23_16 0x0012
+#define cfoe_NS_8193_coeff1_15_8 0x0013
+#define cfoe_NS_8193_coeff1_7_0 0x0014
+
+#define cfoe_NS_8k_coeff2_24 0x0015
+#define cfoe_NS_8k_coeff2_23_16 0x0016
+#define cfoe_NS_8k_coeff2_15_8 0x0017
+#define cfoe_NS_8k_coeff2_7_0 0x0018
+
+//4k
+#define cfoe_NS_4096_coeff1_25_24 0x0019
+#define cfoe_NS_4096_coeff1_23_16 0x001a
+#define cfoe_NS_4096_coeff1_15_8 0x001b
+#define cfoe_NS_4096_coeff1_7_0 0x001c
+#define cfoe_NS_4k_coeff2_24 0x001d
+#define cfoe_NS_4k_coeff2_23_16 0x001e
+#define cfoe_NS_4k_coeff2_15_8 0x001f
+#define cfoe_NS_4k_coeff2_7_0 0x0020
+
+#define bfsfcw_fftindex_ratio_7_0 0x0021
+#define bfsfcw_fftindex_ratio_15_8 0x0022
+#define fftindex_bfsfcw_ratio_7_0 0x0023
+#define fftindex_bfsfcw_ratio_15_8 0x0024
+
+
+
+#define crystal_clk_7_0 0x0025
+#define crystal_clk_15_8 0x0026
+#define crystal_clk_23_16 0x0027
+#define crystal_clk_31_24 0x0028
+
+
+#define bfs_fcw_7_0 0x0029
+#define bfs_fcw_15_8 0x002a
+#define bfs_fcw_22_16 0x002b
+
+//----------------------------------------------
+//statistic performance..
+
+#define qnt_vbc_err_7_0 0x002c
+#define qnt_vbc_err_15_8 0x002d
+#define qnt_vbc_err_23_16 0x002e
+#define r_qnt_vbc_sframe_num 0x002f
+#define tpsd_const 0x0030
+#define tpsd_txmod 0x0031
+
+#define rsd_abort_packet_cnt_7_0 0x0032
+#define rsd_abort_packet_cnt_15_8 0x0033
+#define rsd_bit_err_cnt_7_0 0x0034
+#define rsd_bit_err_cnt_15_8 0x0035
+#define rsd_bit_err_cnt_23_16 0x0036
+#define r_rsd_packet_unit_7_0 0x0037
+#define r_rsd_packet_unit_15_8 0x0038
+
+#define qnt_vbc_sframe_num 0x0039
+#define rsd_packet_unit_7_0 0x003a
+#define rsd_packet_unit_15_8 0x003b
+
+#define tpsd_lock 0x003c
+#define mpeg_lock 0x003d
+#define RsdSequence 0x003e
+#define VtbSequence 0x003f
+
+#define Training_Mode 0x0040
+#define RESET_STATE 0x0041
+#define EXT_LNA_OFF 0x0042
+#define aci_0 0x0043
+#define aci_1 0x0044
+
+#define adcx2 0x0045
+#define tuner_ID 0x0046
+#define empty_channel_status 0x0047
+#define signal_strength 0x0048
+#define signal_quality 0x0049
+#define est_rf_level_dbm 0x004a
+#define FreBand 0x004b
+#define suspend_flag 0x004c
+#define SupportRelayCommandWrite 0x004d
+#define RelayCommandWrite 0x004e
+
+//GUI relative
+//Initial OFSM
+#define OfdmGuiRCN_H 0x004f
+#define OfdmGuiRCN_L 0x0050
+#define MaxTimingRecoveringNo 0x0051
+#define strong_signal_detected 0x0052
+#define channelFlatnessInd 0x0053
+#define Flatness_Ind_nonCmb 0x0054
+#define AutoDetectedSpectrumInv 0x0055
+#define IsSpectrumInv 0x0056
+#define strong_detect_bypass 0x0057
+#define ss_dtop_bypass 0x0058
+#define is_low_if 0x0059
+#define EnableTimeSlice 0x005a
+#define SynchronizationType 0x005b
+#define ApplyFastSynchronizationToEchoChannel 0x005c
+#define ApplyPwmToRfIf 0x005d
+#define ChannelNo 0x005e
+
+//release to AAGC document..
+#define csi_bypass 0x005f
+#define mobile_bypass 0x0060
+#define EnableSpeedLog 0x0061
+
+//regression used only..
+#define r_rsd_abort_total_packet_7_0 0x0062
+#define r_rsd_abort_total_packet_15_8 0x0063
+#define r_rsd_abort_total_packet_23_16 0x0064
+#define MaxRsdSequence 0x0065
+#define RsdFrameNo 0x0066
+#define MPESuperFrameNo 0x0067
+
+#define strong_pindiode_off_th 0x0068
+#define MinRfGain 0x0069
+#define MaxIfGain 0x006a
+#define RssiOffset 0x006b
+#define RssiResidual 0x006c
+//Dtop
+
+#define strong_weak_signal_default 0x006d
+#define PionDiodeDefaultResetInVHF 0x006e
+#define afe_mem4_rssi_comp 0x006f
+
+#define aagc_speed_detect_count 0x0070
+#define aagc_mobile_thr 0x0071
+#define aagc_nonmobile_thr 0x0072
+#define agc_counter 0x0073
+#define DisableAagcTop 0x0074
+#define AgcReset 0x0075
+#define AgcUp 0x0076
+#define AgcDown 0x0077
+#define AgcHold 0x0078
+#define PwmCtrlHw 0x0079
+#define MaxAgcGain 0x007a
+#define IniAgcGain 0x007b
+#define mccid_bypass 0x007c
+#define CdpfEnDefaultEchoRange 0x007d
+#define CdpfIniTestNoSteady 0x007e
+#define aci_thr_shift 0x007f
+#define timing_retrain_cnt 0x0080
+#define ChannelDiffThrSteady 0x0081
+
+#define adjacent_on 0x0082
+#define near_adjacent_on 0x0083
+#define adjacent_off 0x0084
+#define near_adjacent_off 0x0085
+#define max_rf_agc_7_0 0x0086
+#define max_rf_agc_9_8 0x0087
+#define rf_top_numerator_s_7_0 0x0088
+#define rf_top_numerator_s_9_8 0x0089
+
+#define gui_tdi_lms_en 0x008a
+#define fccid_strobe_scale 0x008b
+#define fccid_strobe_numerator 0x008c
+#define fccid_strobe_base 0x008d
+#define use_fccid 0x008e
+#define fft_ave_symbol_num 0x008f
+#define large_tone_num_th_7_0 0x0090
+#define large_tone_num_th_15_8 0x0091
+#define use_3m_lpf_th 0x0092
+#define ce_var_min_8k 0x0093
+#define ce_var_min_4k 0x0094
+#define ce_var_min_2k 0x0095
+#define ce_var_min_8k_non_flat 0x0096
+#define flatness_thr 0x0097
+#define non_mobile_signal_level_offset 0x0098
+#define gui_ar_csi_en 0x0099
+#define h2_echo_detected 0x009a
+#define gain_offset_O 0x009b
+#define gain_slope_O 0x009c
+#define pin_diode_gain_loss 0x009d
+#define signal_strength_if_low 0x009e
+//flatness
+#define flatness_thr_high 0x009f
+#define flatness_thr_low 0x00a0
+
+//softbit quality
+#define sbq1 0x00a1
+#define sbq2 0x00a2
+
+//DCA
+#define dyna_dca_offset_en 0x00a3
+#define strong_pindiode_on_th 0x00a4
+#define detect_timing_err_en 0x00a5
+#define flatness_from_h2_echo 0x00a6
+
+#define timging_error_detection 0x00a7
+#define ce_forced_by_rotate 0x00a8
+#define fccid_fft_mask_en 0x00a9
+#define second_fctrl_unforce_en 0x00aa
+#define patch_fccid_search_not_rdy 0x00ab
+#define high_mobile_detected 0x00ac
+#define aci_pindiode_on_th 0x00ad
+#define ChooseFsteCostFunctionFromCdpf 0x00ae
+#define signal_level 0x00af
+#define TryConf2En 0x00b0
+#define Lower_tpsd_lock 0x00b1
+#define Upper_tpsd_lock 0x00b2
+
+#define AgcCtrlType 0x00b3
+#define opt_LNA_Rssi_scale 0x00b4
+#define StopByTcl 0x00b5
+#define RssiCalibration 0x00b6
+#define aci_pindiode_off_th_U 0x00b7
+#define aci_pindiode_off_th_V 0x00b8
+#define ECO_ASIC 0x00b9
+#define NXP_USE_I2C 0x00ba
+
+//Pictor
+#define rf_freqency_23_16 0x00bb
+#define rf_freqency_15_8 0x00bc
+#define rf_freqency_7_0 0x00bd
+#define iqik_en 0x00be
+#define dcc_en 0x00bf
+#define fix_agc 0x00c0
+#define aci_2 0x00c1
+
+#define CdpfIniTestNoMobile 0x00c2
+#define ACIdetection 0x00c3
+#define PinDiode 0x00c4
+#define LNA_Gain 0x00c5
+#define ChannelDiffThrMobile 0x00c6
+
+#define gain_compensation_O 0x00c7
+
+#define var_end 0x00c8
+
+//BASE Address 0xFFFF
+#endif
diff --git a/api/version.h b/api/version.h
new file mode 100644
index 0000000..a14e771
--- /dev/null
+++ b/api/version.h
@@ -0,0 +1,3 @@
+#define Version_NUMBER 0x0200
+#define Version_DATE 0x20090402
+#define Version_BUILD 0x00
diff --git a/api/xc3028_channelmaps.h b/api/xc3028_channelmaps.h
new file mode 100644
index 0000000..99f1fc8
--- /dev/null
+++ b/api/xc3028_channelmaps.h
@@ -0,0 +1,2601 @@
+//
+// Automatically generated C header file for
+// control of the XC3028L via the i2c interface.
+//
+// Filename : xc3028_channelmaps.h
+// Generated : 7/3/2007 2:48:18 PM
+//
+// (c) 2007, Xceive Corporation
+//
+
+#ifndef __XC3028_CHANNELMAPS_H
+#define __XC3028_CHANNELMAPS_H
+
+#include "xc3028_control.h"
+
+
+// *************************************************************
+// *** LIST OF AVAILABLE CHANNELMAPS
+// *** CHANNELMAP is selected during call to xc3028_initialize()
+// ***
+// *** 1) XC3028_channel_map_usa_analog_air
+// *** 2) XC3028_channel_map_usa_analog_cable
+// *** 3) XC3028_channel_map_usa_digital_air
+// *** 4) XC3028_channel_map_usa_digital_cable
+// *** 5) XC3028_channel_map_taiwan_analog_air
+// *** 6) XC3028_channel_map_taiwan_analog_cable
+// *** 7) XC3028_channel_map_taiwan_digital_air
+// *** 8) XC3028_channel_map_taiwan_digital_cable
+// *** 9) XC3028_channel_map_japan_analog_air
+// *** 10) XC3028_channel_map_japan_analog_cable
+// *** 11) XC3028_channel_map_japan_digital_air
+// *** 12) XC3028_channel_map_japan_digital_cable
+// *** 13) XC3028_channel_map_ccir_analog_air
+// *** 14) XC3028_channel_map_ccir_analog_cable
+// *** 15) XC3028_channel_map_ccir_digital_air
+// *** 16) XC3028_channel_map_ccir_digital_cable
+// *** 17) XC3028_channel_map_france_analog_air
+// *** 18) XC3028_channel_map_france_analog_cable
+// *** 19) XC3028_channel_map_france_digital_air
+// *** 20) XC3028_channel_map_france_digital_cable
+// *** 21) XC3028_channel_map_uk_analog_air
+// *** 22) XC3028_channel_map_uk_analog_cable
+// *** 23) XC3028_channel_map_uk_digital_air
+// *** 24) XC3028_channel_map_uk_digital_cable
+// *** 25) XC3028_channel_map_china_analog_air
+// *** 26) XC3028_channel_map_china_analog_cable
+// *** 27) XC3028_channel_map_china_digital_air
+// *** 28) XC3028_channel_map_china_digital_cable
+// *** 29) XC3028_channel_map_australia_air
+// *** 30) XC3028_channel_map_australia_cable
+// *** 31) XC3028_channel_map_digital_air
+// *************************************************************
+
+
+XC3028_CHANNEL XC3028_channels_usa_analog_air[68] = {
+ {{' ',' ',' ','2'}, 0x0DD0, 0x6} /*55.250000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x0F50, 0x6} /*61.250000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x10D0, 0x2} /*67.250000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x1350, 0x4} /*77.250000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x14D0, 0x2} /*83.250000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x2BD0, 0xE} /*175.250000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x2D50, 0x3} /*181.250000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x2ED0, 0x1} /*187.250000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3050, 0xF} /*193.250000 MHz*/ ,
+ {{' ',' ','1','1'}, 0x31D0, 0xF} /*199.250000 MHz*/ ,
+ {{' ',' ','1','2'}, 0x3350, 0x4} /*205.250000 MHz*/ ,
+ {{' ',' ','1','3'}, 0x34D0, 0x1} /*211.250000 MHz*/ ,
+ {{' ',' ','1','4'}, 0x75D0, 0x2} /*471.250000 MHz*/ ,
+ {{' ',' ','1','5'}, 0x7750, 0x1} /*477.250000 MHz*/ ,
+ {{' ',' ','1','6'}, 0x78D0, 0x5} /*483.250000 MHz*/ ,
+ {{' ',' ','1','7'}, 0x7A50, 0x5} /*489.250000 MHz*/ ,
+ {{' ',' ','1','8'}, 0x7BD0, 0x0} /*495.250000 MHz*/ ,
+ {{' ',' ','1','9'}, 0x7D50, 0x3} /*501.250000 MHz*/ ,
+ {{' ',' ','2','0'}, 0x7ED0, 0x2} /*507.250000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x8050, 0x3} /*513.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x81D0, 0xD} /*519.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x8350, 0x1} /*525.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x84D0, 0x3} /*531.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x8650, 0x2} /*537.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x87D0, 0x5} /*543.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x8950, 0xD} /*549.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x8AD0, 0xE} /*555.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x8C50, 0x2} /*561.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x8DD0, 0x1} /*567.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x8F50, 0xD} /*573.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x90D0, 0xD} /*579.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x9250, 0xE} /*585.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x93D0, 0x0} /*591.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x9550, 0x0} /*597.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x96D0, 0xD} /*603.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x9850, 0x5} /*609.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x99D0, 0xF} /*615.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x9B50, 0x0} /*621.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x9CD0, 0x2} /*627.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x9E50, 0x2} /*633.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x9FD0, 0x2} /*639.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0xA150, 0x3} /*645.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0xA2D0, 0xE} /*651.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0xA450, 0x0} /*657.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0xA5D0, 0x1} /*663.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0xA750, 0x2} /*669.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0xA8D0, 0xF} /*675.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0xAA50, 0x0} /*681.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0xABD0, 0xF} /*687.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0xAD50, 0x1} /*693.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0xAED0, 0x2} /*699.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0xB050, 0xF} /*705.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0xB1D0, 0x0} /*711.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0xB350, 0x1} /*717.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0xB4D0, 0x0} /*723.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0xB650, 0x1} /*729.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0xB7D0, 0x2} /*735.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0xB950, 0x3} /*741.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0xBAD0, 0x1} /*747.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0xBC50, 0xF} /*753.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0xBDD0, 0x0} /*759.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0xBF50, 0x4} /*765.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0xC0D0, 0xE} /*771.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0xC250, 0xE} /*777.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0xC3D0, 0x0} /*783.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0xC550, 0xD} /*789.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0xC6D0, 0xF} /*795.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0xC850, 0xF} /*801.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_usa_analog_air = {
+ 68,
+ XC3028_channels_usa_analog_air
+};
+
+XC3028_CHANNEL XC3028_channels_usa_analog_cable[125] = {
+ {{' ',' ',' ','1'}, 0x1250, 0x0} /*73.250000 MHz*/ ,
+ {{' ',' ',' ','2'}, 0x0DD0, 0x6} /*55.250000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x0F50, 0x6} /*61.250000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x10D0, 0x2} /*67.250000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x1350, 0x4} /*77.250000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x14D0, 0x2} /*83.250000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x2BD0, 0xF} /*175.250000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x2D50, 0x3} /*181.250000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x2ED0, 0x3} /*187.250000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3050, 0xE} /*193.250000 MHz*/ ,
+ {{' ',' ','1','1'}, 0x31D0, 0x2} /*199.250000 MHz*/ ,
+ {{' ',' ','1','2'}, 0x3350, 0x2} /*205.250000 MHz*/ ,
+ {{' ',' ','1','3'}, 0x34D0, 0x2} /*211.250000 MHz*/ ,
+ {{' ',' ','1','4'}, 0x1E50, 0x2} /*121.250000 MHz*/ ,
+ {{' ',' ','1','5'}, 0x1FD0, 0x5} /*127.250000 MHz*/ ,
+ {{' ',' ','1','6'}, 0x2150, 0xE} /*133.250000 MHz*/ ,
+ {{' ',' ','1','7'}, 0x22D0, 0x2} /*139.250000 MHz*/ ,
+ {{' ',' ','1','8'}, 0x2450, 0x0} /*145.250000 MHz*/ ,
+ {{' ',' ','1','9'}, 0x25D0, 0x2} /*151.250000 MHz*/ ,
+ {{' ',' ','2','0'}, 0x2750, 0x0} /*157.250000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x28D0, 0xF} /*163.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x2A50, 0x0} /*169.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x3650, 0x1} /*217.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x37D0, 0xD} /*223.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x3950, 0xF} /*229.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x3AD0, 0x2} /*235.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x3C50, 0x0} /*241.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x3DD0, 0x1} /*247.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x3F50, 0x3} /*253.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x40D0, 0xD} /*259.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x4250, 0xD} /*265.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x43D0, 0x3} /*271.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x4550, 0x1} /*277.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x46D0, 0x1} /*283.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x4850, 0xD} /*289.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x49D0, 0x1} /*295.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x4B50, 0x2} /*301.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x4CD0, 0xF} /*307.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x4E50, 0x3} /*313.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x4FD0, 0xF} /*319.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x5150, 0xE} /*325.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x52D0, 0xD} /*331.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0x5450, 0x0} /*337.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0x55D0, 0xF} /*343.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0x5750, 0xE} /*349.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0x58D0, 0xD} /*355.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0x5A50, 0x1} /*361.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0x5BD0, 0xE} /*367.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0x5D50, 0xF} /*373.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0x5ED0, 0xE} /*379.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0x6050, 0x5} /*385.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0x61D0, 0x1} /*391.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0x6350, 0x2} /*397.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0x64D0, 0xE} /*403.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0x6650, 0x2} /*409.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0x67D0, 0xF} /*415.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0x6950, 0xE} /*421.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0x6AD0, 0xE} /*427.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0x6C50, 0x1} /*433.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0x6DD0, 0x1} /*439.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0x6F50, 0x1} /*445.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0x70D0, 0x4} /*451.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0x7250, 0xE} /*457.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0x73D0, 0xE} /*463.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0x7550, 0x2} /*469.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0x76D0, 0x3} /*475.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0x7850, 0x4} /*481.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0x79D0, 0xF} /*487.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0x7B50, 0x0} /*493.250000 MHz*/ ,
+ {{' ',' ','7','0'}, 0x7CD0, 0xF} /*499.250000 MHz*/ ,
+ {{' ',' ','7','1'}, 0x7E50, 0x4} /*505.250000 MHz*/ ,
+ {{' ',' ','7','2'}, 0x7FD0, 0x2} /*511.250000 MHz*/ ,
+ {{' ',' ','7','3'}, 0x8150, 0xF} /*517.250000 MHz*/ ,
+ {{' ',' ','7','4'}, 0x82D0, 0x1} /*523.250000 MHz*/ ,
+ {{' ',' ','7','5'}, 0x8450, 0x3} /*529.250000 MHz*/ ,
+ {{' ',' ','7','6'}, 0x85D0, 0x3} /*535.250000 MHz*/ ,
+ {{' ',' ','7','7'}, 0x8750, 0x3} /*541.250000 MHz*/ ,
+ {{' ',' ','7','8'}, 0x88D0, 0xF} /*547.250000 MHz*/ ,
+ {{' ',' ','7','9'}, 0x8A50, 0xE} /*553.250000 MHz*/ ,
+ {{' ',' ','8','0'}, 0x8BD0, 0xF} /*559.250000 MHz*/ ,
+ {{' ',' ','8','1'}, 0x8D50, 0x0} /*565.250000 MHz*/ ,
+ {{' ',' ','8','2'}, 0x8ED0, 0xD} /*571.250000 MHz*/ ,
+ {{' ',' ','8','3'}, 0x9050, 0x3} /*577.250000 MHz*/ ,
+ {{' ',' ','8','4'}, 0x91D0, 0x5} /*583.250000 MHz*/ ,
+ {{' ',' ','8','5'}, 0x9350, 0x0} /*589.250000 MHz*/ ,
+ {{' ',' ','8','6'}, 0x94D0, 0x2} /*595.250000 MHz*/ ,
+ {{' ',' ','8','7'}, 0x9650, 0xD} /*601.250000 MHz*/ ,
+ {{' ',' ','8','8'}, 0x97D0, 0xD} /*607.250000 MHz*/ ,
+ {{' ',' ','8','9'}, 0x9950, 0xD} /*613.250000 MHz*/ ,
+ {{' ',' ','9','0'}, 0x9AD0, 0xF} /*619.250000 MHz*/ ,
+ {{' ',' ','9','1'}, 0x9C50, 0x0} /*625.250000 MHz*/ ,
+ {{' ',' ','9','2'}, 0x9DD0, 0x3} /*631.250000 MHz*/ ,
+ {{' ',' ','9','3'}, 0x9F50, 0x3} /*637.250000 MHz*/ ,
+ {{' ',' ','9','4'}, 0xA0D0, 0x5} /*643.250000 MHz*/ ,
+ {{' ',' ','9','5'}, 0x16D0, 0x2} /*91.250000 MHz*/ ,
+ {{' ',' ','9','6'}, 0x1850, 0xF} /*97.250000 MHz*/ ,
+ {{' ',' ','9','7'}, 0x19D0, 0xE} /*103.250000 MHz*/ ,
+ {{' ',' ','9','8'}, 0x1B51, 0x4} /*109.265625 MHz*/ ,
+ {{' ',' ','9','9'}, 0x1CD1, 0x3} /*115.265625 MHz*/ ,
+ {{' ','1','0','0'}, 0xA250, 0x4} /*649.250000 MHz*/ ,
+ {{' ','1','0','1'}, 0xA3D0, 0x1} /*655.250000 MHz*/ ,
+ {{' ','1','0','2'}, 0xA550, 0x0} /*661.250000 MHz*/ ,
+ {{' ','1','0','3'}, 0xA6D0, 0x2} /*667.250000 MHz*/ ,
+ {{' ','1','0','4'}, 0xA850, 0xF} /*673.250000 MHz*/ ,
+ {{' ','1','0','5'}, 0xA9D0, 0x0} /*679.250000 MHz*/ ,
+ {{' ','1','0','6'}, 0xAB50, 0x5} /*685.250000 MHz*/ ,
+ {{' ','1','0','7'}, 0xACD0, 0x2} /*691.250000 MHz*/ ,
+ {{' ','1','0','8'}, 0xAE50, 0x4} /*697.250000 MHz*/ ,
+ {{' ','1','0','9'}, 0xAFD0, 0x1} /*703.250000 MHz*/ ,
+ {{' ','1','1','0'}, 0xB150, 0xF} /*709.250000 MHz*/ ,
+ {{' ','1','1','1'}, 0xB2D0, 0x5} /*715.250000 MHz*/ ,
+ {{' ','1','1','2'}, 0xB450, 0xF} /*721.250000 MHz*/ ,
+ {{' ','1','1','3'}, 0xB5D0, 0x0} /*727.250000 MHz*/ ,
+ {{' ','1','1','4'}, 0xB750, 0xE} /*733.250000 MHz*/ ,
+ {{' ','1','1','5'}, 0xB8D0, 0xF} /*739.250000 MHz*/ ,
+ {{' ','1','1','6'}, 0xBA50, 0x0} /*745.250000 MHz*/ ,
+ {{' ','1','1','7'}, 0xBBD0, 0x0} /*751.250000 MHz*/ ,
+ {{' ','1','1','8'}, 0xBD50, 0x0} /*757.250000 MHz*/ ,
+ {{' ','1','1','9'}, 0xBED0, 0x1} /*763.250000 MHz*/ ,
+ {{' ','1','2','0'}, 0xC050, 0xD} /*769.250000 MHz*/ ,
+ {{' ','1','2','1'}, 0xC1D0, 0x0} /*775.250000 MHz*/ ,
+ {{' ','1','2','2'}, 0xC350, 0x4} /*781.250000 MHz*/ ,
+ {{' ','1','2','3'}, 0xC4D0, 0x2} /*787.250000 MHz*/ ,
+ {{' ','1','2','4'}, 0xC650, 0x1} /*793.250000 MHz*/ ,
+ {{' ','1','2','5'}, 0xC7D0, 0xF} /*799.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_usa_analog_cable = {
+ 125,
+ XC3028_channels_usa_analog_cable
+};
+
+XC3028_CHANNEL XC3028_channels_usa_digital_air[68] = {
+ {{' ',' ',' ','2'}, 0x0DD0, 0xC} /*55.250000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x0F50, 0x0} /*61.250000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x10D0, 0x2} /*67.250000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x1350, 0x6} /*77.250000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x14D0, 0xD} /*83.250000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x2BD0, 0xE} /*175.250000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x2D50, 0x0} /*181.250000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x2ED0, 0x2} /*187.250000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3050, 0x5} /*193.250000 MHz*/ ,
+ {{' ',' ','1','1'}, 0x31D0, 0x1} /*199.250000 MHz*/ ,
+ {{' ',' ','1','2'}, 0x3350, 0x0} /*205.250000 MHz*/ ,
+ {{' ',' ','1','3'}, 0x34D0, 0xC} /*211.250000 MHz*/ ,
+ {{' ',' ','1','4'}, 0x75D0, 0x5} /*471.250000 MHz*/ ,
+ {{' ',' ','1','5'}, 0x7750, 0x7} /*477.250000 MHz*/ ,
+ {{' ',' ','1','6'}, 0x78D0, 0x3} /*483.250000 MHz*/ ,
+ {{' ',' ','1','7'}, 0x7A50, 0xC} /*489.250000 MHz*/ ,
+ {{' ',' ','1','8'}, 0x7BD0, 0xB} /*495.250000 MHz*/ ,
+ {{' ',' ','1','9'}, 0x7D50, 0xF} /*501.250000 MHz*/ ,
+ {{' ',' ','2','0'}, 0x7ED0, 0xE} /*507.250000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x8050, 0x2} /*513.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x81D0, 0x0} /*519.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x8350, 0x5} /*525.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x84D0, 0x4} /*531.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x8650, 0x5} /*537.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x87D0, 0x7} /*543.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x8950, 0xD} /*549.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x8AD0, 0xD} /*555.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x8C50, 0xF} /*561.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x8DD0, 0x0} /*567.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x8F50, 0x1} /*573.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x90D0, 0xC} /*579.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x9250, 0x1} /*585.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x93D0, 0xE} /*591.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x9550, 0x3} /*597.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x96D0, 0x1} /*603.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x9850, 0x2} /*609.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x99D0, 0x1} /*615.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x9B50, 0x2} /*621.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x9CD0, 0xF} /*627.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x9E50, 0xE} /*633.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x9FD0, 0x6} /*639.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0xA150, 0xC} /*645.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0xA2D0, 0x1} /*651.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0xA450, 0x5} /*657.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0xA5D0, 0x6} /*663.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0xA750, 0x5} /*669.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0xA8D0, 0xE} /*675.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0xAA50, 0x1} /*681.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0xABD0, 0xE} /*687.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0xAD50, 0xD} /*693.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0xAED0, 0xE} /*699.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0xB050, 0xC} /*705.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0xB1D0, 0x7} /*711.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0xB350, 0xC} /*717.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0xB4D0, 0x5} /*723.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0xB650, 0xE} /*729.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0xB7D0, 0x7} /*735.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0xB950, 0x0} /*741.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0xBAD0, 0x0} /*747.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0xBC50, 0xF} /*753.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0xBDD0, 0x0} /*759.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0xBF50, 0x4} /*765.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0xC0D0, 0x5} /*771.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0xC250, 0x1} /*777.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0xC3D0, 0xC} /*783.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0xC550, 0xD} /*789.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0xC6D0, 0x6} /*795.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0xC850, 0x7} /*801.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_usa_digital_air = {
+ 68,
+ XC3028_channels_usa_digital_air
+};
+
+XC3028_CHANNEL XC3028_channels_usa_digital_cable[125] = {
+ {{' ',' ',' ','1'}, 0x1250, 0x6} /*73.250000 MHz*/ ,
+ {{' ',' ',' ','2'}, 0x0DD0, 0xC} /*55.250000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x0F50, 0x0} /*61.250000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x10D0, 0x2} /*67.250000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x1350, 0x6} /*77.250000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x14D0, 0xD} /*83.250000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x2BD0, 0xE} /*175.250000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x2D50, 0x0} /*181.250000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x2ED0, 0x2} /*187.250000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3050, 0x5} /*193.250000 MHz*/ ,
+ {{' ',' ','1','1'}, 0x31D0, 0x1} /*199.250000 MHz*/ ,
+ {{' ',' ','1','2'}, 0x3350, 0x0} /*205.250000 MHz*/ ,
+ {{' ',' ','1','3'}, 0x34D0, 0xC} /*211.250000 MHz*/ ,
+ {{' ',' ','1','4'}, 0x1E50, 0x0} /*121.250000 MHz*/ ,
+ {{' ',' ','1','5'}, 0x1FD0, 0x6} /*127.250000 MHz*/ ,
+ {{' ',' ','1','6'}, 0x2150, 0xE} /*133.250000 MHz*/ ,
+ {{' ',' ','1','7'}, 0x22D0, 0x1} /*139.250000 MHz*/ ,
+ {{' ',' ','1','8'}, 0x2450, 0xC} /*145.250000 MHz*/ ,
+ {{' ',' ','1','9'}, 0x25D0, 0xE} /*151.250000 MHz*/ ,
+ {{' ',' ','2','0'}, 0x2750, 0x0} /*157.250000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x28D0, 0x7} /*163.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x2A50, 0x4} /*169.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x3650, 0x1} /*217.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x37D0, 0x3} /*223.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x3950, 0x7} /*229.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x3AD0, 0x4} /*235.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x3C50, 0xC} /*241.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x3DD0, 0x0} /*247.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x3F50, 0xC} /*253.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x40D0, 0x0} /*259.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x4250, 0x3} /*265.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x43D0, 0xC} /*271.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x4550, 0xE} /*277.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x46D0, 0xC} /*283.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x4850, 0xF} /*289.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x49D0, 0x6} /*295.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x4B50, 0x4} /*301.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x4CD0, 0xE} /*307.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x4E50, 0x0} /*313.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x4FD0, 0xE} /*319.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x5150, 0x0} /*325.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x52D0, 0x3} /*331.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0x5450, 0xD} /*337.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0x55D0, 0x0} /*343.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0x5750, 0xE} /*349.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0x58D0, 0x0} /*355.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0x5A50, 0x6} /*361.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0x5BD0, 0xD} /*367.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0x5D50, 0x0} /*373.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0x5ED0, 0x1} /*379.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0x6050, 0x3} /*385.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0x61D0, 0x5} /*391.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0x6350, 0xC} /*397.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0x64D0, 0x5} /*403.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0x6650, 0x7} /*409.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0x67D0, 0x2} /*415.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0x6950, 0x4} /*421.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0x6AD0, 0x6} /*427.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0x6C50, 0xE} /*433.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0x6DD0, 0x6} /*439.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0x6F50, 0xE} /*445.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0x70D0, 0x3} /*451.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0x7250, 0x5} /*457.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0x73D0, 0x6} /*463.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0x7550, 0x5} /*469.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0x76D0, 0xE} /*475.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0x7850, 0x2} /*481.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0x79D0, 0xC} /*487.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0x7B50, 0xD} /*493.250000 MHz*/ ,
+ {{' ',' ','7','0'}, 0x7CD0, 0xC} /*499.250000 MHz*/ ,
+ {{' ',' ','7','1'}, 0x7E50, 0x6} /*505.250000 MHz*/ ,
+ {{' ',' ','7','2'}, 0x7FD0, 0x7} /*511.250000 MHz*/ ,
+ {{' ',' ','7','3'}, 0x8150, 0x0} /*517.250000 MHz*/ ,
+ {{' ',' ','7','4'}, 0x82D0, 0x1} /*523.250000 MHz*/ ,
+ {{' ',' ','7','5'}, 0x8450, 0x3} /*529.250000 MHz*/ ,
+ {{' ',' ','7','6'}, 0x85D0, 0x5} /*535.250000 MHz*/ ,
+ {{' ',' ','7','7'}, 0x8750, 0x5} /*541.250000 MHz*/ ,
+ {{' ',' ','7','8'}, 0x88D0, 0x6} /*547.250000 MHz*/ ,
+ {{' ',' ','7','9'}, 0x8A50, 0xD} /*553.250000 MHz*/ ,
+ {{' ',' ','8','0'}, 0x8BD0, 0x5} /*559.250000 MHz*/ ,
+ {{' ',' ','8','1'}, 0x8D50, 0xF} /*565.250000 MHz*/ ,
+ {{' ',' ','8','2'}, 0x8ED0, 0x5} /*571.250000 MHz*/ ,
+ {{' ',' ','8','3'}, 0x9050, 0x2} /*577.250000 MHz*/ ,
+ {{' ',' ','8','4'}, 0x91D0, 0xC} /*583.250000 MHz*/ ,
+ {{' ',' ','8','5'}, 0x9350, 0xE} /*589.250000 MHz*/ ,
+ {{' ',' ','8','6'}, 0x94D0, 0x3} /*595.250000 MHz*/ ,
+ {{' ',' ','8','7'}, 0x9650, 0x1} /*601.250000 MHz*/ ,
+ {{' ',' ','8','8'}, 0x97D0, 0x6} /*607.250000 MHz*/ ,
+ {{' ',' ','8','9'}, 0x9950, 0xC} /*613.250000 MHz*/ ,
+ {{' ',' ','9','0'}, 0x9AD0, 0x4} /*619.250000 MHz*/ ,
+ {{' ',' ','9','1'}, 0x9C50, 0x3} /*625.250000 MHz*/ ,
+ {{' ',' ','9','2'}, 0x9DD0, 0x4} /*631.250000 MHz*/ ,
+ {{' ',' ','9','3'}, 0x9F50, 0x1} /*637.250000 MHz*/ ,
+ {{' ',' ','9','4'}, 0xA0D0, 0x2} /*643.250000 MHz*/ ,
+ {{' ',' ','9','5'}, 0x16D0, 0x3} /*91.250000 MHz*/ ,
+ {{' ',' ','9','6'}, 0x1850, 0xC} /*97.250000 MHz*/ ,
+ {{' ',' ','9','7'}, 0x19D0, 0xD} /*103.250000 MHz*/ ,
+ {{' ',' ','9','8'}, 0x1B51, 0x4} /*109.265625 MHz*/ ,
+ {{' ',' ','9','9'}, 0x1CD1, 0xD} /*115.265625 MHz*/ ,
+ {{' ','1','0','0'}, 0xA250, 0x1} /*649.250000 MHz*/ ,
+ {{' ','1','0','1'}, 0xA3D0, 0xE} /*655.250000 MHz*/ ,
+ {{' ','1','0','2'}, 0xA550, 0xD} /*661.250000 MHz*/ ,
+ {{' ','1','0','3'}, 0xA6D0, 0x7} /*667.250000 MHz*/ ,
+ {{' ','1','0','4'}, 0xA850, 0xE} /*673.250000 MHz*/ ,
+ {{' ','1','0','5'}, 0xA9D0, 0x7} /*679.250000 MHz*/ ,
+ {{' ','1','0','6'}, 0xAB50, 0xC} /*685.250000 MHz*/ ,
+ {{' ','1','0','7'}, 0xACD0, 0xD} /*691.250000 MHz*/ ,
+ {{' ','1','0','8'}, 0xAE50, 0xE} /*697.250000 MHz*/ ,
+ {{' ','1','0','9'}, 0xAFD0, 0x1} /*703.250000 MHz*/ ,
+ {{' ','1','1','0'}, 0xB150, 0x0} /*709.250000 MHz*/ ,
+ {{' ','1','1','1'}, 0xB2D0, 0xC} /*715.250000 MHz*/ ,
+ {{' ','1','1','2'}, 0xB450, 0x0} /*721.250000 MHz*/ ,
+ {{' ','1','1','3'}, 0xB5D0, 0xE} /*727.250000 MHz*/ ,
+ {{' ','1','1','4'}, 0xB750, 0xF} /*733.250000 MHz*/ ,
+ {{' ','1','1','5'}, 0xB8D0, 0x0} /*739.250000 MHz*/ ,
+ {{' ','1','1','6'}, 0xBA50, 0x1} /*745.250000 MHz*/ ,
+ {{' ','1','1','7'}, 0xBBD0, 0x0} /*751.250000 MHz*/ ,
+ {{' ','1','1','8'}, 0xBD50, 0x0} /*757.250000 MHz*/ ,
+ {{' ','1','1','9'}, 0xBED0, 0x4} /*763.250000 MHz*/ ,
+ {{' ','1','2','0'}, 0xC050, 0xC} /*769.250000 MHz*/ ,
+ {{' ','1','2','1'}, 0xC1D0, 0x5} /*775.250000 MHz*/ ,
+ {{' ','1','2','2'}, 0xC350, 0xC} /*781.250000 MHz*/ ,
+ {{' ','1','2','3'}, 0xC4D0, 0x7} /*787.250000 MHz*/ ,
+ {{' ','1','2','4'}, 0xC650, 0x0} /*793.250000 MHz*/ ,
+ {{' ','1','2','5'}, 0xC7D0, 0x1} /*799.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_usa_digital_cable = {
+ 125,
+ XC3028_channels_usa_digital_cable
+};
+
+XC3028_CHANNEL XC3028_channels_taiwan_analog_air[68] = {
+ {{' ',' ',' ','2'}, 0x0DD0, 0x6} /*55.250000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x0F50, 0x6} /*61.250000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x10D0, 0x2} /*67.250000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x1350, 0x4} /*77.250000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x14D0, 0x2} /*83.250000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x2BD0, 0xE} /*175.250000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x2D50, 0x3} /*181.250000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x2ED0, 0x1} /*187.250000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3050, 0xF} /*193.250000 MHz*/ ,
+ {{' ',' ','1','1'}, 0x31D0, 0xF} /*199.250000 MHz*/ ,
+ {{' ',' ','1','2'}, 0x3350, 0x4} /*205.250000 MHz*/ ,
+ {{' ',' ','1','3'}, 0x34D0, 0x1} /*211.250000 MHz*/ ,
+ {{' ',' ','1','4'}, 0x75D0, 0x2} /*471.250000 MHz*/ ,
+ {{' ',' ','1','5'}, 0x7750, 0x1} /*477.250000 MHz*/ ,
+ {{' ',' ','1','6'}, 0x78D0, 0x5} /*483.250000 MHz*/ ,
+ {{' ',' ','1','7'}, 0x7A50, 0x5} /*489.250000 MHz*/ ,
+ {{' ',' ','1','8'}, 0x7BD0, 0x0} /*495.250000 MHz*/ ,
+ {{' ',' ','1','9'}, 0x7D50, 0x3} /*501.250000 MHz*/ ,
+ {{' ',' ','2','0'}, 0x7ED0, 0x2} /*507.250000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x8050, 0x3} /*513.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x81D0, 0xD} /*519.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x8350, 0x1} /*525.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x84D0, 0x3} /*531.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x8650, 0x2} /*537.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x87D0, 0x5} /*543.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x8950, 0xD} /*549.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x8AD0, 0xE} /*555.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x8C50, 0x2} /*561.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x8DD0, 0x1} /*567.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x8F50, 0xD} /*573.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x90D0, 0xD} /*579.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x9250, 0xE} /*585.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x93D0, 0x0} /*591.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x9550, 0x0} /*597.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x96D0, 0xD} /*603.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x9850, 0x5} /*609.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x99D0, 0xF} /*615.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x9B50, 0x0} /*621.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x9CD0, 0x2} /*627.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x9E50, 0x2} /*633.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x9FD0, 0x2} /*639.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0xA150, 0x3} /*645.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0xA2D0, 0xE} /*651.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0xA450, 0x0} /*657.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0xA5D0, 0x1} /*663.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0xA750, 0x2} /*669.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0xA8D0, 0xF} /*675.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0xAA50, 0x0} /*681.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0xABD0, 0xF} /*687.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0xAD50, 0x1} /*693.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0xAED0, 0x2} /*699.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0xB050, 0xF} /*705.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0xB1D0, 0x0} /*711.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0xB350, 0x1} /*717.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0xB4D0, 0x0} /*723.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0xB650, 0x1} /*729.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0xB7D0, 0x2} /*735.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0xB950, 0x3} /*741.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0xBAD0, 0x1} /*747.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0xBC50, 0xF} /*753.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0xBDD0, 0x0} /*759.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0xBF50, 0x4} /*765.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0xC0D0, 0xE} /*771.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0xC250, 0xE} /*777.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0xC3D0, 0x0} /*783.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0xC550, 0xD} /*789.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0xC6D0, 0xF} /*795.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0xC850, 0xF} /*801.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_taiwan_analog_air = {
+ 68,
+ XC3028_channels_taiwan_analog_air
+};
+
+XC3028_CHANNEL XC3028_channels_taiwan_analog_cable[125] = {
+ {{' ',' ',' ','1'}, 0x1250, 0x0} /*73.250000 MHz*/ ,
+ {{' ',' ',' ','2'}, 0x0DD0, 0x6} /*55.250000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x0F50, 0x6} /*61.250000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x10D0, 0x2} /*67.250000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x1350, 0x4} /*77.250000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x14D0, 0x2} /*83.250000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x2BD0, 0xF} /*175.250000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x2D50, 0x3} /*181.250000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x2ED0, 0x3} /*187.250000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3050, 0xE} /*193.250000 MHz*/ ,
+ {{' ',' ','1','1'}, 0x31D0, 0x2} /*199.250000 MHz*/ ,
+ {{' ',' ','1','2'}, 0x3350, 0x2} /*205.250000 MHz*/ ,
+ {{' ',' ','1','3'}, 0x34D0, 0x2} /*211.250000 MHz*/ ,
+ {{' ',' ','1','4'}, 0x1E50, 0x2} /*121.250000 MHz*/ ,
+ {{' ',' ','1','5'}, 0x1FD0, 0x5} /*127.250000 MHz*/ ,
+ {{' ',' ','1','6'}, 0x2150, 0xE} /*133.250000 MHz*/ ,
+ {{' ',' ','1','7'}, 0x22D0, 0x2} /*139.250000 MHz*/ ,
+ {{' ',' ','1','8'}, 0x2450, 0x0} /*145.250000 MHz*/ ,
+ {{' ',' ','1','9'}, 0x25D0, 0x2} /*151.250000 MHz*/ ,
+ {{' ',' ','2','0'}, 0x2750, 0x0} /*157.250000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x28D0, 0xF} /*163.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x2A50, 0x0} /*169.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x3650, 0x1} /*217.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x37D0, 0xD} /*223.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x3950, 0xF} /*229.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x3AD0, 0x2} /*235.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x3C50, 0x0} /*241.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x3DD0, 0x1} /*247.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x3F50, 0x3} /*253.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x40D0, 0xD} /*259.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x4250, 0xD} /*265.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x43D0, 0x3} /*271.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x4550, 0x1} /*277.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x46D0, 0x1} /*283.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x4850, 0xD} /*289.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x49D0, 0x1} /*295.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x4B50, 0x2} /*301.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x4CD0, 0xF} /*307.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x4E50, 0x3} /*313.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x4FD0, 0xF} /*319.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x5150, 0xE} /*325.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x52D0, 0xD} /*331.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0x5450, 0x0} /*337.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0x55D0, 0xF} /*343.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0x5750, 0xE} /*349.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0x58D0, 0xD} /*355.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0x5A50, 0x1} /*361.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0x5BD0, 0xE} /*367.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0x5D50, 0xF} /*373.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0x5ED0, 0xE} /*379.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0x6050, 0x5} /*385.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0x61D0, 0x1} /*391.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0x6350, 0x2} /*397.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0x64D0, 0xE} /*403.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0x6650, 0x2} /*409.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0x67D0, 0xF} /*415.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0x6950, 0xE} /*421.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0x6AD0, 0xE} /*427.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0x6C50, 0x1} /*433.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0x6DD0, 0x1} /*439.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0x6F50, 0x1} /*445.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0x70D0, 0x4} /*451.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0x7250, 0xE} /*457.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0x73D0, 0xE} /*463.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0x7550, 0x2} /*469.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0x76D0, 0x3} /*475.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0x7850, 0x4} /*481.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0x79D0, 0xF} /*487.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0x7B50, 0x0} /*493.250000 MHz*/ ,
+ {{' ',' ','7','0'}, 0x7CD0, 0xF} /*499.250000 MHz*/ ,
+ {{' ',' ','7','1'}, 0x7E50, 0x4} /*505.250000 MHz*/ ,
+ {{' ',' ','7','2'}, 0x7FD0, 0x2} /*511.250000 MHz*/ ,
+ {{' ',' ','7','3'}, 0x8150, 0xF} /*517.250000 MHz*/ ,
+ {{' ',' ','7','4'}, 0x82D0, 0x1} /*523.250000 MHz*/ ,
+ {{' ',' ','7','5'}, 0x8450, 0x3} /*529.250000 MHz*/ ,
+ {{' ',' ','7','6'}, 0x85D0, 0x3} /*535.250000 MHz*/ ,
+ {{' ',' ','7','7'}, 0x8750, 0x3} /*541.250000 MHz*/ ,
+ {{' ',' ','7','8'}, 0x88D0, 0xF} /*547.250000 MHz*/ ,
+ {{' ',' ','7','9'}, 0x8A50, 0xE} /*553.250000 MHz*/ ,
+ {{' ',' ','8','0'}, 0x8BD0, 0xF} /*559.250000 MHz*/ ,
+ {{' ',' ','8','1'}, 0x8D50, 0x0} /*565.250000 MHz*/ ,
+ {{' ',' ','8','2'}, 0x8ED0, 0xD} /*571.250000 MHz*/ ,
+ {{' ',' ','8','3'}, 0x9050, 0x3} /*577.250000 MHz*/ ,
+ {{' ',' ','8','4'}, 0x91D0, 0x5} /*583.250000 MHz*/ ,
+ {{' ',' ','8','5'}, 0x9350, 0x0} /*589.250000 MHz*/ ,
+ {{' ',' ','8','6'}, 0x94D0, 0x2} /*595.250000 MHz*/ ,
+ {{' ',' ','8','7'}, 0x9650, 0xD} /*601.250000 MHz*/ ,
+ {{' ',' ','8','8'}, 0x97D0, 0xD} /*607.250000 MHz*/ ,
+ {{' ',' ','8','9'}, 0x9950, 0xD} /*613.250000 MHz*/ ,
+ {{' ',' ','9','0'}, 0x9AD0, 0xF} /*619.250000 MHz*/ ,
+ {{' ',' ','9','1'}, 0x9C50, 0x0} /*625.250000 MHz*/ ,
+ {{' ',' ','9','2'}, 0x9DD0, 0x3} /*631.250000 MHz*/ ,
+ {{' ',' ','9','3'}, 0x9F50, 0x3} /*637.250000 MHz*/ ,
+ {{' ',' ','9','4'}, 0xA0D0, 0x5} /*643.250000 MHz*/ ,
+ {{' ',' ','9','5'}, 0x16D0, 0x2} /*91.250000 MHz*/ ,
+ {{' ',' ','9','6'}, 0x1850, 0xF} /*97.250000 MHz*/ ,
+ {{' ',' ','9','7'}, 0x19D0, 0xE} /*103.250000 MHz*/ ,
+ {{' ',' ','9','8'}, 0x1B51, 0x4} /*109.265625 MHz*/ ,
+ {{' ',' ','9','9'}, 0x1CD1, 0x3} /*115.265625 MHz*/ ,
+ {{' ','1','0','0'}, 0xA250, 0x4} /*649.250000 MHz*/ ,
+ {{' ','1','0','1'}, 0xA3D0, 0x1} /*655.250000 MHz*/ ,
+ {{' ','1','0','2'}, 0xA550, 0x0} /*661.250000 MHz*/ ,
+ {{' ','1','0','3'}, 0xA6D0, 0x2} /*667.250000 MHz*/ ,
+ {{' ','1','0','4'}, 0xA850, 0xF} /*673.250000 MHz*/ ,
+ {{' ','1','0','5'}, 0xA9D0, 0x0} /*679.250000 MHz*/ ,
+ {{' ','1','0','6'}, 0xAB50, 0x5} /*685.250000 MHz*/ ,
+ {{' ','1','0','7'}, 0xACD0, 0x2} /*691.250000 MHz*/ ,
+ {{' ','1','0','8'}, 0xAE50, 0x4} /*697.250000 MHz*/ ,
+ {{' ','1','0','9'}, 0xAFD0, 0x1} /*703.250000 MHz*/ ,
+ {{' ','1','1','0'}, 0xB150, 0xF} /*709.250000 MHz*/ ,
+ {{' ','1','1','1'}, 0xB2D0, 0x5} /*715.250000 MHz*/ ,
+ {{' ','1','1','2'}, 0xB450, 0xF} /*721.250000 MHz*/ ,
+ {{' ','1','1','3'}, 0xB5D0, 0x0} /*727.250000 MHz*/ ,
+ {{' ','1','1','4'}, 0xB750, 0xE} /*733.250000 MHz*/ ,
+ {{' ','1','1','5'}, 0xB8D0, 0xF} /*739.250000 MHz*/ ,
+ {{' ','1','1','6'}, 0xBA50, 0x0} /*745.250000 MHz*/ ,
+ {{' ','1','1','7'}, 0xBBD0, 0x0} /*751.250000 MHz*/ ,
+ {{' ','1','1','8'}, 0xBD50, 0x0} /*757.250000 MHz*/ ,
+ {{' ','1','1','9'}, 0xBED0, 0x1} /*763.250000 MHz*/ ,
+ {{' ','1','2','0'}, 0xC050, 0xD} /*769.250000 MHz*/ ,
+ {{' ','1','2','1'}, 0xC1D0, 0x0} /*775.250000 MHz*/ ,
+ {{' ','1','2','2'}, 0xC350, 0x4} /*781.250000 MHz*/ ,
+ {{' ','1','2','3'}, 0xC4D0, 0x2} /*787.250000 MHz*/ ,
+ {{' ','1','2','4'}, 0xC650, 0x1} /*793.250000 MHz*/ ,
+ {{' ','1','2','5'}, 0xC7D0, 0xF} /*799.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_taiwan_analog_cable = {
+ 125,
+ XC3028_channels_taiwan_analog_cable
+};
+
+XC3028_CHANNEL XC3028_channels_taiwan_digital_air[68] = {
+ {{' ',' ',' ','2'}, 0x0DD0, 0x0} /*55.250000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x0F50, 0x0} /*61.250000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x10D0, 0x0} /*67.250000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x1350, 0x0} /*77.250000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x14D0, 0x0} /*83.250000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x2BD0, 0x0} /*175.250000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x2D50, 0x0} /*181.250000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x2ED0, 0x0} /*187.250000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3050, 0x0} /*193.250000 MHz*/ ,
+ {{' ',' ','1','1'}, 0x31D0, 0x0} /*199.250000 MHz*/ ,
+ {{' ',' ','1','2'}, 0x3350, 0x0} /*205.250000 MHz*/ ,
+ {{' ',' ','1','3'}, 0x34D0, 0x0} /*211.250000 MHz*/ ,
+ {{' ',' ','1','4'}, 0x75D0, 0x0} /*471.250000 MHz*/ ,
+ {{' ',' ','1','5'}, 0x7750, 0x0} /*477.250000 MHz*/ ,
+ {{' ',' ','1','6'}, 0x78D0, 0x0} /*483.250000 MHz*/ ,
+ {{' ',' ','1','7'}, 0x7A50, 0x0} /*489.250000 MHz*/ ,
+ {{' ',' ','1','8'}, 0x7BD0, 0x0} /*495.250000 MHz*/ ,
+ {{' ',' ','1','9'}, 0x7D50, 0x0} /*501.250000 MHz*/ ,
+ {{' ',' ','2','0'}, 0x7ED0, 0x0} /*507.250000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x8050, 0x0} /*513.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x81D0, 0x0} /*519.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x8350, 0x0} /*525.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x84D0, 0x0} /*531.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x8650, 0x0} /*537.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x87D0, 0x0} /*543.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x8950, 0x0} /*549.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x8AD0, 0x0} /*555.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x8C50, 0x0} /*561.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x8DD0, 0x0} /*567.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x8F50, 0x0} /*573.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x90D0, 0x0} /*579.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x9250, 0x0} /*585.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x93D0, 0x0} /*591.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x9550, 0x0} /*597.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x96D0, 0x0} /*603.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x9850, 0x0} /*609.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x99D0, 0x0} /*615.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x9B50, 0x0} /*621.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x9CD0, 0x0} /*627.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x9E50, 0x0} /*633.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x9FD0, 0x0} /*639.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0xA150, 0x0} /*645.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0xA2D0, 0x0} /*651.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0xA450, 0x0} /*657.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0xA5D0, 0x0} /*663.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0xA750, 0x0} /*669.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0xA8D0, 0x0} /*675.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0xAA50, 0x0} /*681.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0xABD0, 0x0} /*687.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0xAD50, 0x0} /*693.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0xAED0, 0x0} /*699.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0xB050, 0x0} /*705.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0xB1D0, 0x0} /*711.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0xB350, 0x0} /*717.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0xB4D0, 0x0} /*723.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0xB650, 0x0} /*729.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0xB7D0, 0x0} /*735.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0xB950, 0x0} /*741.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0xBAD0, 0x0} /*747.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0xBC50, 0x0} /*753.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0xBDD0, 0x0} /*759.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0xBF50, 0x0} /*765.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0xC0D0, 0x0} /*771.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0xC250, 0x0} /*777.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0xC3D0, 0x0} /*783.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0xC550, 0x0} /*789.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0xC6D0, 0x0} /*795.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0xC850, 0x0} /*801.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_taiwan_digital_air = {
+ 68,
+ XC3028_channels_taiwan_digital_air
+};
+
+XC3028_CHANNEL XC3028_channels_taiwan_digital_cable[125] = {
+ {{' ',' ',' ','1'}, 0x1250, 0x0} /*73.250000 MHz*/ ,
+ {{' ',' ',' ','2'}, 0x0DD0, 0x0} /*55.250000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x0F50, 0x0} /*61.250000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x10D0, 0x0} /*67.250000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x1350, 0x0} /*77.250000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x14D0, 0x0} /*83.250000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x2BD0, 0x0} /*175.250000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x2D50, 0x0} /*181.250000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x2ED0, 0x0} /*187.250000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3050, 0x0} /*193.250000 MHz*/ ,
+ {{' ',' ','1','1'}, 0x31D0, 0x0} /*199.250000 MHz*/ ,
+ {{' ',' ','1','2'}, 0x3350, 0x0} /*205.250000 MHz*/ ,
+ {{' ',' ','1','3'}, 0x34D0, 0x0} /*211.250000 MHz*/ ,
+ {{' ',' ','1','4'}, 0x1E50, 0x0} /*121.250000 MHz*/ ,
+ {{' ',' ','1','5'}, 0x1FD0, 0x0} /*127.250000 MHz*/ ,
+ {{' ',' ','1','6'}, 0x2150, 0x0} /*133.250000 MHz*/ ,
+ {{' ',' ','1','7'}, 0x22D0, 0x0} /*139.250000 MHz*/ ,
+ {{' ',' ','1','8'}, 0x2450, 0x0} /*145.250000 MHz*/ ,
+ {{' ',' ','1','9'}, 0x25D0, 0x0} /*151.250000 MHz*/ ,
+ {{' ',' ','2','0'}, 0x2750, 0x0} /*157.250000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x28D0, 0x0} /*163.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x2A50, 0x0} /*169.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x3650, 0x0} /*217.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x37D0, 0x0} /*223.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x3950, 0x0} /*229.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x3AD0, 0x0} /*235.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x3C50, 0x0} /*241.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x3DD0, 0x0} /*247.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x3F50, 0x0} /*253.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x40D0, 0x0} /*259.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x4250, 0x0} /*265.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x43D0, 0x0} /*271.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x4550, 0x0} /*277.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x46D0, 0x0} /*283.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x4850, 0x0} /*289.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x49D0, 0x0} /*295.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x4B50, 0x0} /*301.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x4CD0, 0x0} /*307.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x4E50, 0x0} /*313.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x4FD0, 0x0} /*319.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x5150, 0x0} /*325.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x52D0, 0x0} /*331.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0x5450, 0x0} /*337.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0x55D0, 0x0} /*343.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0x5750, 0x0} /*349.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0x58D0, 0x0} /*355.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0x5A50, 0x0} /*361.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0x5BD0, 0x0} /*367.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0x5D50, 0x0} /*373.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0x5ED0, 0x0} /*379.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0x6050, 0x0} /*385.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0x61D0, 0x0} /*391.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0x6350, 0x0} /*397.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0x64D0, 0x0} /*403.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0x6650, 0x0} /*409.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0x67D0, 0x0} /*415.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0x6950, 0x0} /*421.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0x6AD0, 0x0} /*427.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0x6C50, 0x0} /*433.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0x6DD0, 0x0} /*439.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0x6F50, 0x0} /*445.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0x70D0, 0x0} /*451.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0x7250, 0x0} /*457.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0x73D0, 0x0} /*463.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0x7550, 0x0} /*469.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0x76D0, 0x0} /*475.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0x7850, 0x0} /*481.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0x79D0, 0x0} /*487.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0x7B50, 0x0} /*493.250000 MHz*/ ,
+ {{' ',' ','7','0'}, 0x7CD0, 0x0} /*499.250000 MHz*/ ,
+ {{' ',' ','7','1'}, 0x7E50, 0x0} /*505.250000 MHz*/ ,
+ {{' ',' ','7','2'}, 0x7FD0, 0x0} /*511.250000 MHz*/ ,
+ {{' ',' ','7','3'}, 0x8150, 0x0} /*517.250000 MHz*/ ,
+ {{' ',' ','7','4'}, 0x82D0, 0x0} /*523.250000 MHz*/ ,
+ {{' ',' ','7','5'}, 0x8450, 0x0} /*529.250000 MHz*/ ,
+ {{' ',' ','7','6'}, 0x85D0, 0x0} /*535.250000 MHz*/ ,
+ {{' ',' ','7','7'}, 0x8750, 0x0} /*541.250000 MHz*/ ,
+ {{' ',' ','7','8'}, 0x88D0, 0x0} /*547.250000 MHz*/ ,
+ {{' ',' ','7','9'}, 0x8A50, 0x0} /*553.250000 MHz*/ ,
+ {{' ',' ','8','0'}, 0x8BD0, 0x0} /*559.250000 MHz*/ ,
+ {{' ',' ','8','1'}, 0x8D50, 0x0} /*565.250000 MHz*/ ,
+ {{' ',' ','8','2'}, 0x8ED0, 0x0} /*571.250000 MHz*/ ,
+ {{' ',' ','8','3'}, 0x9050, 0x0} /*577.250000 MHz*/ ,
+ {{' ',' ','8','4'}, 0x91D0, 0x0} /*583.250000 MHz*/ ,
+ {{' ',' ','8','5'}, 0x9350, 0x0} /*589.250000 MHz*/ ,
+ {{' ',' ','8','6'}, 0x94D0, 0x0} /*595.250000 MHz*/ ,
+ {{' ',' ','8','7'}, 0x9650, 0x0} /*601.250000 MHz*/ ,
+ {{' ',' ','8','8'}, 0x97D0, 0x0} /*607.250000 MHz*/ ,
+ {{' ',' ','8','9'}, 0x9950, 0x0} /*613.250000 MHz*/ ,
+ {{' ',' ','9','0'}, 0x9AD0, 0x0} /*619.250000 MHz*/ ,
+ {{' ',' ','9','1'}, 0x9C50, 0x0} /*625.250000 MHz*/ ,
+ {{' ',' ','9','2'}, 0x9DD0, 0x0} /*631.250000 MHz*/ ,
+ {{' ',' ','9','3'}, 0x9F50, 0x0} /*637.250000 MHz*/ ,
+ {{' ',' ','9','4'}, 0xA0D0, 0x0} /*643.250000 MHz*/ ,
+ {{' ',' ','9','5'}, 0x16D0, 0x0} /*91.250000 MHz*/ ,
+ {{' ',' ','9','6'}, 0x1850, 0x0} /*97.250000 MHz*/ ,
+ {{' ',' ','9','7'}, 0x19D0, 0x0} /*103.250000 MHz*/ ,
+ {{' ',' ','9','8'}, 0x1B51, 0x0} /*109.265625 MHz*/ ,
+ {{' ',' ','9','9'}, 0x1CD1, 0x0} /*115.265625 MHz*/ ,
+ {{' ','1','0','0'}, 0xA250, 0x0} /*649.250000 MHz*/ ,
+ {{' ','1','0','1'}, 0xA3D0, 0x0} /*655.250000 MHz*/ ,
+ {{' ','1','0','2'}, 0xA550, 0x0} /*661.250000 MHz*/ ,
+ {{' ','1','0','3'}, 0xA6D0, 0x0} /*667.250000 MHz*/ ,
+ {{' ','1','0','4'}, 0xA850, 0x0} /*673.250000 MHz*/ ,
+ {{' ','1','0','5'}, 0xA9D0, 0x0} /*679.250000 MHz*/ ,
+ {{' ','1','0','6'}, 0xAB50, 0x0} /*685.250000 MHz*/ ,
+ {{' ','1','0','7'}, 0xACD0, 0x0} /*691.250000 MHz*/ ,
+ {{' ','1','0','8'}, 0xAE50, 0x0} /*697.250000 MHz*/ ,
+ {{' ','1','0','9'}, 0xAFD0, 0x0} /*703.250000 MHz*/ ,
+ {{' ','1','1','0'}, 0xB150, 0x0} /*709.250000 MHz*/ ,
+ {{' ','1','1','1'}, 0xB2D0, 0x0} /*715.250000 MHz*/ ,
+ {{' ','1','1','2'}, 0xB450, 0x0} /*721.250000 MHz*/ ,
+ {{' ','1','1','3'}, 0xB5D0, 0x0} /*727.250000 MHz*/ ,
+ {{' ','1','1','4'}, 0xB750, 0x0} /*733.250000 MHz*/ ,
+ {{' ','1','1','5'}, 0xB8D0, 0x0} /*739.250000 MHz*/ ,
+ {{' ','1','1','6'}, 0xBA50, 0x0} /*745.250000 MHz*/ ,
+ {{' ','1','1','7'}, 0xBBD0, 0x0} /*751.250000 MHz*/ ,
+ {{' ','1','1','8'}, 0xBD50, 0x0} /*757.250000 MHz*/ ,
+ {{' ','1','1','9'}, 0xBED0, 0x0} /*763.250000 MHz*/ ,
+ {{' ','1','2','0'}, 0xC050, 0x0} /*769.250000 MHz*/ ,
+ {{' ','1','2','1'}, 0xC1D0, 0x0} /*775.250000 MHz*/ ,
+ {{' ','1','2','2'}, 0xC350, 0x0} /*781.250000 MHz*/ ,
+ {{' ','1','2','3'}, 0xC4D0, 0x0} /*787.250000 MHz*/ ,
+ {{' ','1','2','4'}, 0xC650, 0x0} /*793.250000 MHz*/ ,
+ {{' ','1','2','5'}, 0xC7D0, 0x0} /*799.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_taiwan_digital_cable = {
+ 125,
+ XC3028_channels_taiwan_digital_cable
+};
+
+XC3028_CHANNEL XC3028_channels_japan_analog_air[62] = {
+ {{' ',' ',' ','1'}, 0x16D0, 0x2} /*91.250000 MHz*/ ,
+ {{' ',' ',' ','2'}, 0x1850, 0x0} /*97.250000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x19D0, 0x0} /*103.250000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x2AD0, 0x0} /*171.250000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x2C50, 0xF} /*177.250000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x2DD0, 0x3} /*183.250000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x2F50, 0xB} /*189.250000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x3050, 0xE} /*193.250000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x31D0, 0x0} /*199.250000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3350, 0xD} /*205.250000 MHz*/ ,
+ {{' ',' ','1','1'}, 0x34D0, 0x0} /*211.250000 MHz*/ ,
+ {{' ',' ','1','2'}, 0x3650, 0x0} /*217.250000 MHz*/ ,
+ {{' ',' ','1','3'}, 0x75D0, 0xB} /*471.250000 MHz*/ ,
+ {{' ',' ','1','4'}, 0x7750, 0x3} /*477.250000 MHz*/ ,
+ {{' ',' ','1','5'}, 0x78D0, 0xA} /*483.250000 MHz*/ ,
+ {{' ',' ','1','6'}, 0x7A50, 0xC} /*489.250000 MHz*/ ,
+ {{' ',' ','1','7'}, 0x7BD0, 0xE} /*495.250000 MHz*/ ,
+ {{' ',' ','1','8'}, 0x7D50, 0xB} /*501.250000 MHz*/ ,
+ {{' ',' ','1','9'}, 0x7ED0, 0x1} /*507.250000 MHz*/ ,
+ {{' ',' ','2','0'}, 0x8050, 0xE} /*513.250000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x81D0, 0xF} /*519.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x8350, 0xF} /*525.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x84D0, 0xC} /*531.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x8650, 0xC} /*537.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x87D0, 0x2} /*543.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x8950, 0xF} /*549.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x8AD0, 0x0} /*555.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x8C50, 0x0} /*561.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x8DD0, 0x1} /*567.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x8F50, 0xD} /*573.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x90D0, 0xD} /*579.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x9250, 0xE} /*585.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x93D0, 0xF} /*591.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x9550, 0x0} /*597.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x96D0, 0x1} /*603.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x9850, 0xB} /*609.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x99D0, 0xC} /*615.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x9B50, 0xF} /*621.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x9CD0, 0xF} /*627.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x9E50, 0x1} /*633.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x9FD0, 0xE} /*639.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0xA150, 0xA} /*645.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0xA2D0, 0x4} /*651.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0xA450, 0x0} /*657.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0xA5D0, 0x0} /*663.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0xA750, 0xF} /*669.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0xA8D0, 0xC} /*675.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0xAA50, 0x0} /*681.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0xABD0, 0x1} /*687.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0xAD50, 0x0} /*693.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0xAED0, 0x1} /*699.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0xB050, 0xC} /*705.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0xB1D0, 0xE} /*711.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0xB350, 0xE} /*717.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0xB4D0, 0xD} /*723.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0xB650, 0xE} /*729.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0xB7D0, 0xF} /*735.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0xB950, 0xF} /*741.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0xBAD0, 0xF} /*747.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0xBC50, 0xF} /*753.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0xBDD0, 0x1} /*759.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0xBF50, 0x1} /*765.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_japan_analog_air = {
+ 62,
+ XC3028_channels_japan_analog_air
+};
+
+XC3028_CHANNEL XC3028_channels_japan_analog_cable[62] = {
+ {{' ',' ',' ','1'}, 0x16D0, 0x2} /*91.250000 MHz*/ ,
+ {{' ',' ',' ','2'}, 0x1850, 0x0} /*97.250000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x19D0, 0x0} /*103.250000 MHz*/ ,
+ {{' ',' ','M','1'}, 0x1B50, 0x0} /*109.250000 MHz*/ ,
+ {{' ',' ','M','2'}, 0x1CD0, 0x1} /*115.250000 MHz*/ ,
+ {{' ',' ','M','3'}, 0x1E50, 0x2} /*121.250000 MHz*/ ,
+ {{' ',' ','M','4'}, 0x1FD0, 0xB} /*127.250000 MHz*/ ,
+ {{' ',' ','M','5'}, 0x2150, 0xC} /*133.250000 MHz*/ ,
+ {{' ',' ','M','6'}, 0x22D0, 0xA} /*139.250000 MHz*/ ,
+ {{' ',' ','M','7'}, 0x2450, 0xB} /*145.250000 MHz*/ ,
+ {{' ',' ','M','8'}, 0x25D0, 0x0} /*151.250000 MHz*/ ,
+ {{' ',' ','M','9'}, 0x2750, 0xB} /*157.250000 MHz*/ ,
+ {{' ','M','1','0'}, 0x2950, 0x1} /*165.250000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x2AD0, 0x0} /*171.250000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x2C50, 0xF} /*177.250000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x2DD0, 0x3} /*183.250000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x2F50, 0xB} /*189.250000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x3050, 0xE} /*193.250000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x31D0, 0x0} /*199.250000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3350, 0xD} /*205.250000 MHz*/ ,
+ {{' ',' ','1','1'}, 0x34D0, 0x0} /*211.250000 MHz*/ ,
+ {{' ',' ','S','1'}, 0x37D0, 0xD} /*223.250000 MHz*/ ,
+ {{' ',' ','S','2'}, 0x3950, 0x0} /*229.250000 MHz*/ ,
+ {{' ',' ','S','3'}, 0x3AD0, 0x0} /*235.250000 MHz*/ ,
+ {{' ',' ','S','4'}, 0x3C50, 0x0} /*241.250000 MHz*/ ,
+ {{' ',' ','S','5'}, 0x3DD0, 0xF} /*247.250000 MHz*/ ,
+ {{' ',' ','S','6'}, 0x3F50, 0x2} /*253.250000 MHz*/ ,
+ {{' ',' ','S','7'}, 0x40D0, 0x5} /*259.250000 MHz*/ ,
+ {{' ',' ','S','8'}, 0x4250, 0x3} /*265.250000 MHz*/ ,
+ {{' ',' ','S','9'}, 0x43D0, 0xC} /*271.250000 MHz*/ ,
+ {{' ','S','1','0'}, 0x4550, 0xE} /*277.250000 MHz*/ ,
+ {{' ','S','1','1'}, 0x46D0, 0x1} /*283.250000 MHz*/ ,
+ {{' ','S','1','2'}, 0x4850, 0xF} /*289.250000 MHz*/ ,
+ {{' ','S','1','3'}, 0x49D0, 0xF} /*295.250000 MHz*/ ,
+ {{' ','S','1','4'}, 0x4B50, 0xC} /*301.250000 MHz*/ ,
+ {{' ','S','1','5'}, 0x4CD0, 0xE} /*307.250000 MHz*/ ,
+ {{' ','S','1','6'}, 0x4E50, 0xC} /*313.250000 MHz*/ ,
+ {{' ','S','1','7'}, 0x4FD0, 0xE} /*319.250000 MHz*/ ,
+ {{' ','S','1','8'}, 0x5150, 0xE} /*325.250000 MHz*/ ,
+ {{' ','S','1','9'}, 0x52D0, 0x1} /*331.250000 MHz*/ ,
+ {{' ','S','2','0'}, 0x5450, 0x5} /*337.250000 MHz*/ ,
+ {{' ','S','2','1'}, 0x55D0, 0x0} /*343.250000 MHz*/ ,
+ {{' ','S','2','2'}, 0x5750, 0x4} /*349.250000 MHz*/ ,
+ {{' ','S','2','3'}, 0x58D0, 0xB} /*355.250000 MHz*/ ,
+ {{' ','S','2','4'}, 0x5A50, 0xC} /*361.250000 MHz*/ ,
+ {{' ','S','2','5'}, 0x5BD0, 0xD} /*367.250000 MHz*/ ,
+ {{' ','S','2','6'}, 0x5D50, 0xB} /*373.250000 MHz*/ ,
+ {{' ','S','2','7'}, 0x5ED0, 0xB} /*379.250000 MHz*/ ,
+ {{' ','S','2','8'}, 0x6050, 0xB} /*385.250000 MHz*/ ,
+ {{' ','S','2','9'}, 0x61D0, 0xD} /*391.250000 MHz*/ ,
+ {{' ','S','3','0'}, 0x6350, 0x1} /*397.250000 MHz*/ ,
+ {{' ','S','3','1'}, 0x64D0, 0x3} /*403.250000 MHz*/ ,
+ {{' ','S','3','2'}, 0x6650, 0xB} /*409.250000 MHz*/ ,
+ {{' ','S','3','3'}, 0x67D0, 0x2} /*415.250000 MHz*/ ,
+ {{' ','S','3','4'}, 0x6950, 0xB} /*421.250000 MHz*/ ,
+ {{' ','S','3','5'}, 0x6AD0, 0xE} /*427.250000 MHz*/ ,
+ {{' ','S','3','6'}, 0x6C50, 0x0} /*433.250000 MHz*/ ,
+ {{' ','S','3','7'}, 0x6DD0, 0xB} /*439.250000 MHz*/ ,
+ {{' ','S','3','8'}, 0x6F50, 0xE} /*445.250000 MHz*/ ,
+ {{' ','S','3','9'}, 0x70D0, 0x3} /*451.250000 MHz*/ ,
+ {{' ','S','4','0'}, 0x7250, 0xC} /*457.250000 MHz*/ ,
+ {{' ','S','4','1'}, 0x73D0, 0xE} /*463.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_japan_analog_cable = {
+ 62,
+ XC3028_channels_japan_analog_cable
+};
+
+XC3028_CHANNEL XC3028_channels_japan_digital_air[62] = {
+ {{' ',' ',' ','1'}, 0x16D0, 0x0} /*91.250000 MHz*/ ,
+ {{' ',' ',' ','2'}, 0x1850, 0x0} /*97.250000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x19D0, 0x0} /*103.250000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x2AD0, 0x0} /*171.250000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x2C50, 0x0} /*177.250000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x2DD0, 0x0} /*183.250000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x2F50, 0x0} /*189.250000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x3050, 0x0} /*193.250000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x31D0, 0x0} /*199.250000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3350, 0x0} /*205.250000 MHz*/ ,
+ {{' ',' ','1','1'}, 0x34D0, 0x0} /*211.250000 MHz*/ ,
+ {{' ',' ','1','2'}, 0x3650, 0x0} /*217.250000 MHz*/ ,
+ {{' ',' ','1','3'}, 0x75D0, 0x0} /*471.250000 MHz*/ ,
+ {{' ',' ','1','4'}, 0x7750, 0x0} /*477.250000 MHz*/ ,
+ {{' ',' ','1','5'}, 0x78D0, 0x0} /*483.250000 MHz*/ ,
+ {{' ',' ','1','6'}, 0x7A50, 0x0} /*489.250000 MHz*/ ,
+ {{' ',' ','1','7'}, 0x7BD0, 0x0} /*495.250000 MHz*/ ,
+ {{' ',' ','1','8'}, 0x7D50, 0x0} /*501.250000 MHz*/ ,
+ {{' ',' ','1','9'}, 0x7ED0, 0x0} /*507.250000 MHz*/ ,
+ {{' ',' ','2','0'}, 0x8050, 0x0} /*513.250000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x81D0, 0x0} /*519.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x8350, 0x0} /*525.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x84D0, 0x0} /*531.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x8650, 0x0} /*537.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x87D0, 0x0} /*543.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x8950, 0x0} /*549.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x8AD0, 0x0} /*555.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x8C50, 0x0} /*561.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x8DD0, 0x0} /*567.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x8F50, 0x0} /*573.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x90D0, 0x0} /*579.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x9250, 0x0} /*585.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x93D0, 0x0} /*591.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x9550, 0x0} /*597.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x96D0, 0x0} /*603.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x9850, 0x0} /*609.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x99D0, 0x0} /*615.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x9B50, 0x0} /*621.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x9CD0, 0x0} /*627.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x9E50, 0x0} /*633.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x9FD0, 0x0} /*639.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0xA150, 0x0} /*645.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0xA2D0, 0x0} /*651.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0xA450, 0x0} /*657.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0xA5D0, 0x0} /*663.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0xA750, 0x0} /*669.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0xA8D0, 0x0} /*675.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0xAA50, 0x0} /*681.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0xABD0, 0x0} /*687.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0xAD50, 0x0} /*693.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0xAED0, 0x0} /*699.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0xB050, 0x0} /*705.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0xB1D0, 0x0} /*711.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0xB350, 0x0} /*717.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0xB4D0, 0x0} /*723.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0xB650, 0x0} /*729.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0xB7D0, 0x0} /*735.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0xB950, 0x0} /*741.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0xBAD0, 0x0} /*747.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0xBC50, 0x0} /*753.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0xBDD0, 0x0} /*759.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0xBF50, 0x0} /*765.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_japan_digital_air = {
+ 62,
+ XC3028_channels_japan_digital_air
+};
+
+XC3028_CHANNEL XC3028_channels_japan_digital_cable[62] = {
+ {{' ',' ',' ','1'}, 0x16D0, 0x0} /*91.250000 MHz*/ ,
+ {{' ',' ',' ','2'}, 0x1850, 0x0} /*97.250000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x19D0, 0x0} /*103.250000 MHz*/ ,
+ {{' ',' ','M','1'}, 0x1B50, 0x0} /*109.250000 MHz*/ ,
+ {{' ',' ','M','2'}, 0x1CD0, 0x0} /*115.250000 MHz*/ ,
+ {{' ',' ','M','3'}, 0x1E50, 0x0} /*121.250000 MHz*/ ,
+ {{' ',' ','M','4'}, 0x1FD0, 0x0} /*127.250000 MHz*/ ,
+ {{' ',' ','M','5'}, 0x2150, 0x0} /*133.250000 MHz*/ ,
+ {{' ',' ','M','6'}, 0x22D0, 0x0} /*139.250000 MHz*/ ,
+ {{' ',' ','M','7'}, 0x2450, 0x0} /*145.250000 MHz*/ ,
+ {{' ',' ','M','8'}, 0x25D0, 0x0} /*151.250000 MHz*/ ,
+ {{' ',' ','M','9'}, 0x2750, 0x0} /*157.250000 MHz*/ ,
+ {{' ','M','1','0'}, 0x2950, 0x0} /*165.250000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x2AD0, 0x0} /*171.250000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x2C50, 0x0} /*177.250000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x2DD0, 0x0} /*183.250000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x2F50, 0x0} /*189.250000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x3050, 0x0} /*193.250000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x31D0, 0x0} /*199.250000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3350, 0x0} /*205.250000 MHz*/ ,
+ {{' ',' ','1','1'}, 0x34D0, 0x0} /*211.250000 MHz*/ ,
+ {{' ',' ','S','1'}, 0x37D0, 0x0} /*223.250000 MHz*/ ,
+ {{' ',' ','S','2'}, 0x3950, 0x0} /*229.250000 MHz*/ ,
+ {{' ',' ','S','3'}, 0x3AD0, 0x0} /*235.250000 MHz*/ ,
+ {{' ',' ','S','4'}, 0x3C50, 0x0} /*241.250000 MHz*/ ,
+ {{' ',' ','S','5'}, 0x3DD0, 0x0} /*247.250000 MHz*/ ,
+ {{' ',' ','S','6'}, 0x3F50, 0x0} /*253.250000 MHz*/ ,
+ {{' ',' ','S','7'}, 0x40D0, 0x0} /*259.250000 MHz*/ ,
+ {{' ',' ','S','8'}, 0x4250, 0x0} /*265.250000 MHz*/ ,
+ {{' ',' ','S','9'}, 0x43D0, 0x0} /*271.250000 MHz*/ ,
+ {{' ','S','1','0'}, 0x4550, 0x0} /*277.250000 MHz*/ ,
+ {{' ','S','1','1'}, 0x46D0, 0x0} /*283.250000 MHz*/ ,
+ {{' ','S','1','2'}, 0x4850, 0x0} /*289.250000 MHz*/ ,
+ {{' ','S','1','3'}, 0x49D0, 0x0} /*295.250000 MHz*/ ,
+ {{' ','S','1','4'}, 0x4B50, 0x0} /*301.250000 MHz*/ ,
+ {{' ','S','1','5'}, 0x4CD0, 0x0} /*307.250000 MHz*/ ,
+ {{' ','S','1','6'}, 0x4E50, 0x0} /*313.250000 MHz*/ ,
+ {{' ','S','1','7'}, 0x4FD0, 0x0} /*319.250000 MHz*/ ,
+ {{' ','S','1','8'}, 0x5150, 0x0} /*325.250000 MHz*/ ,
+ {{' ','S','1','9'}, 0x52D0, 0x0} /*331.250000 MHz*/ ,
+ {{' ','S','2','0'}, 0x5450, 0x0} /*337.250000 MHz*/ ,
+ {{' ','S','2','1'}, 0x55D0, 0x0} /*343.250000 MHz*/ ,
+ {{' ','S','2','2'}, 0x5750, 0x0} /*349.250000 MHz*/ ,
+ {{' ','S','2','3'}, 0x58D0, 0x0} /*355.250000 MHz*/ ,
+ {{' ','S','2','4'}, 0x5A50, 0x0} /*361.250000 MHz*/ ,
+ {{' ','S','2','5'}, 0x5BD0, 0x0} /*367.250000 MHz*/ ,
+ {{' ','S','2','6'}, 0x5D50, 0x0} /*373.250000 MHz*/ ,
+ {{' ','S','2','7'}, 0x5ED0, 0x0} /*379.250000 MHz*/ ,
+ {{' ','S','2','8'}, 0x6050, 0x0} /*385.250000 MHz*/ ,
+ {{' ','S','2','9'}, 0x61D0, 0x0} /*391.250000 MHz*/ ,
+ {{' ','S','3','0'}, 0x6350, 0x0} /*397.250000 MHz*/ ,
+ {{' ','S','3','1'}, 0x64D0, 0x0} /*403.250000 MHz*/ ,
+ {{' ','S','3','2'}, 0x6650, 0x0} /*409.250000 MHz*/ ,
+ {{' ','S','3','3'}, 0x67D0, 0x0} /*415.250000 MHz*/ ,
+ {{' ','S','3','4'}, 0x6950, 0x0} /*421.250000 MHz*/ ,
+ {{' ','S','3','5'}, 0x6AD0, 0x0} /*427.250000 MHz*/ ,
+ {{' ','S','3','6'}, 0x6C50, 0x0} /*433.250000 MHz*/ ,
+ {{' ','S','3','7'}, 0x6DD0, 0x0} /*439.250000 MHz*/ ,
+ {{' ','S','3','8'}, 0x6F50, 0x0} /*445.250000 MHz*/ ,
+ {{' ','S','3','9'}, 0x70D0, 0x0} /*451.250000 MHz*/ ,
+ {{' ','S','4','0'}, 0x7250, 0x0} /*457.250000 MHz*/ ,
+ {{' ','S','4','1'}, 0x73D0, 0x0} /*463.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_japan_digital_cable = {
+ 62,
+ XC3028_channels_japan_digital_cable
+};
+
+XC3028_CHANNEL XC3028_channels_ccir_analog_air[60] = {
+ {{' ',' ',' ','2'}, 0x0C10, 0xA} /*48.250000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x0DD0, 0x5} /*55.250000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x0F90, 0xA} /*62.250000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x2BD0, 0xC} /*175.250000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x2D90, 0x1} /*182.250000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x2F50, 0x5} /*189.250000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x3110, 0x1} /*196.250000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x32D0, 0x4} /*203.250000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3490, 0x0} /*210.250000 MHz*/ ,
+ {{' ',' ','1','1'}, 0x3650, 0x0} /*217.250000 MHz*/ ,
+ {{' ',' ','1','2'}, 0x3810, 0x5} /*224.250000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x75D0, 0x1} /*471.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x77D0, 0x3} /*479.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x79D0, 0xC} /*487.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x7BD0, 0xF} /*495.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x7DD0, 0xC} /*503.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x7FD0, 0xE} /*511.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x81D0, 0x0} /*519.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x83D0, 0x2} /*527.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x85D0, 0x4} /*535.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x87D0, 0x0} /*543.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x89D0, 0x0} /*551.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x8BD0, 0xF} /*559.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x8DD0, 0xA} /*567.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x8FD0, 0xE} /*575.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x91D0, 0x0} /*583.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x93D0, 0xF} /*591.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x95D0, 0x1} /*599.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x97D0, 0xC} /*607.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x99D0, 0xD} /*615.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x9BD0, 0xF} /*623.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x9DD0, 0xE} /*631.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x9FD0, 0x2} /*639.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0xA1D0, 0xB} /*647.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0xA3D0, 0xF} /*655.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0xA5D0, 0xD} /*663.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0xA7D0, 0xF} /*671.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0xA9D0, 0xD} /*679.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0xABD0, 0x0} /*687.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0xADD0, 0xE} /*695.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0xAFD0, 0x2} /*703.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0xB1D0, 0x0} /*711.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0xB3D0, 0x5} /*719.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0xB5D0, 0x1} /*727.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0xB7D0, 0x2} /*735.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0xB9D0, 0x3} /*743.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0xBBD0, 0x2} /*751.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0xBDD0, 0xE} /*759.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0xBFD0, 0xF} /*767.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0xC1D0, 0x3} /*775.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0xC3D0, 0xD} /*783.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0xC5D0, 0xE} /*791.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0xC7D0, 0xF} /*799.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0xC9D0, 0xC} /*807.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0xCBD0, 0x4} /*815.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0xCDD0, 0xE} /*823.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0xCFD0, 0x2} /*831.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0xD1D0, 0x5} /*839.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0xD3D0, 0x0} /*847.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0xD5D0, 0x1} /*855.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_ccir_analog_air = {
+ 60,
+ XC3028_channels_ccir_analog_air
+};
+
+XC3028_CHANNEL XC3028_channels_ccir_analog_cable[57] = {
+ {{' ',' ','E','2'}, 0x0C10, 0xA} /*48.250000 MHz*/ ,
+ {{' ',' ','E','3'}, 0x0DD0, 0x5} /*55.250000 MHz*/ ,
+ {{' ',' ','E','4'}, 0x0F90, 0xA} /*62.250000 MHz*/ ,
+ {{' ',' ',' ','X'}, 0x1150, 0xC} /*69.250000 MHz*/ ,
+ {{' ',' ',' ','Y'}, 0x1310, 0x5} /*76.250000 MHz*/ ,
+ {{' ',' ',' ','Z'}, 0x14D0, 0x2} /*83.250000 MHz*/ ,
+ {{' ','Z','+','1'}, 0x1690, 0x3} /*90.250000 MHz*/ ,
+ {{' ','Z','+','2'}, 0x1850, 0xF} /*97.250000 MHz*/ ,
+ {{' ',' ','S','1'}, 0x1A50, 0x1} /*105.250000 MHz*/ ,
+ {{' ',' ','S','2'}, 0x1C10, 0xB} /*112.250000 MHz*/ ,
+ {{' ',' ','S','3'}, 0x1DD0, 0x2} /*119.250000 MHz*/ ,
+ {{' ',' ','S','4'}, 0x1F90, 0xA} /*126.250000 MHz*/ ,
+ {{' ',' ','S','5'}, 0x2150, 0x4} /*133.250000 MHz*/ ,
+ {{' ',' ','S','6'}, 0x2310, 0x0} /*140.250000 MHz*/ ,
+ {{' ',' ','S','7'}, 0x24D0, 0xE} /*147.250000 MHz*/ ,
+ {{' ',' ','S','8'}, 0x2690, 0x2} /*154.250000 MHz*/ ,
+ {{' ',' ','S','9'}, 0x2850, 0xF} /*161.250000 MHz*/ ,
+ {{' ','S','1','0'}, 0x2A10, 0x2} /*168.250000 MHz*/ ,
+ {{' ',' ','E','5'}, 0x2BD0, 0xC} /*175.250000 MHz*/ ,
+ {{' ',' ','E','6'}, 0x2D90, 0x1} /*182.250000 MHz*/ ,
+ {{' ',' ','E','7'}, 0x2F50, 0x5} /*189.250000 MHz*/ ,
+ {{' ',' ','E','8'}, 0x3110, 0x1} /*196.250000 MHz*/ ,
+ {{' ',' ','E','9'}, 0x32D0, 0x4} /*203.250000 MHz*/ ,
+ {{' ','E','1','0'}, 0x3490, 0x0} /*210.250000 MHz*/ ,
+ {{' ','E','1','1'}, 0x3650, 0x0} /*217.250000 MHz*/ ,
+ {{' ','E','1','2'}, 0x3810, 0x5} /*224.250000 MHz*/ ,
+ {{' ','S','1','1'}, 0x39D0, 0x1} /*231.250000 MHz*/ ,
+ {{' ','S','1','2'}, 0x3B90, 0x5} /*238.250000 MHz*/ ,
+ {{' ','S','1','3'}, 0x3D50, 0xF} /*245.250000 MHz*/ ,
+ {{' ','S','1','4'}, 0x3F10, 0xD} /*252.250000 MHz*/ ,
+ {{' ','S','1','5'}, 0x40D0, 0xF} /*259.250000 MHz*/ ,
+ {{' ','S','1','6'}, 0x4290, 0x4} /*266.250000 MHz*/ ,
+ {{' ','S','1','7'}, 0x4450, 0x0} /*273.250000 MHz*/ ,
+ {{' ','S','1','8'}, 0x4610, 0x0} /*280.250000 MHz*/ ,
+ {{' ','S','1','9'}, 0x47D0, 0xF} /*287.250000 MHz*/ ,
+ {{' ','S','2','0'}, 0x4990, 0x1} /*294.250000 MHz*/ ,
+ {{' ','S','2','1'}, 0x4B50, 0x0} /*301.250000 MHz*/ ,
+ {{' ','S','2','2'}, 0x4DD0, 0x1} /*311.250000 MHz*/ ,
+ {{' ','S','2','3'}, 0x4FD0, 0xF} /*319.250000 MHz*/ ,
+ {{' ','S','2','4'}, 0x51D0, 0x0} /*327.250000 MHz*/ ,
+ {{' ','S','2','5'}, 0x53D0, 0xF} /*335.250000 MHz*/ ,
+ {{' ','S','2','6'}, 0x55D0, 0x0} /*343.250000 MHz*/ ,
+ {{' ','S','2','7'}, 0x57D0, 0x3} /*351.250000 MHz*/ ,
+ {{' ','S','2','8'}, 0x59D0, 0x0} /*359.250000 MHz*/ ,
+ {{' ','S','2','9'}, 0x5BD0, 0x0} /*367.250000 MHz*/ ,
+ {{' ','S','3','0'}, 0x5DD0, 0x0} /*375.250000 MHz*/ ,
+ {{' ','S','3','1'}, 0x5FD0, 0x2} /*383.250000 MHz*/ ,
+ {{' ','S','3','2'}, 0x61D0, 0x0} /*391.250000 MHz*/ ,
+ {{' ','S','3','3'}, 0x63D0, 0x0} /*399.250000 MHz*/ ,
+ {{' ','S','3','4'}, 0x65D0, 0x0} /*407.250000 MHz*/ ,
+ {{' ','S','3','5'}, 0x67D0, 0xE} /*415.250000 MHz*/ ,
+ {{' ','S','3','6'}, 0x69D0, 0xC} /*423.250000 MHz*/ ,
+ {{' ','S','3','7'}, 0x6BD0, 0x3} /*431.250000 MHz*/ ,
+ {{' ','S','3','8'}, 0x6DD0, 0x1} /*439.250000 MHz*/ ,
+ {{' ','S','3','9'}, 0x6FD0, 0x3} /*447.250000 MHz*/ ,
+ {{' ','S','4','0'}, 0x71D0, 0x5} /*455.250000 MHz*/ ,
+ {{' ','S','4','1'}, 0x73D0, 0xE} /*463.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_ccir_analog_cable = {
+ 57,
+ XC3028_channels_ccir_analog_cable
+};
+
+XC3028_CHANNEL XC3028_channels_ccir_digital_air[60] = {
+ {{' ',' ',' ','2'}, 0x0C10, 0x0} /*48.250000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x0DD0, 0x0} /*55.250000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x0F90, 0x0} /*62.250000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x2BD0, 0x0} /*175.250000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x2D90, 0x0} /*182.250000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x2F50, 0x0} /*189.250000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x3110, 0x0} /*196.250000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x32D0, 0x0} /*203.250000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3490, 0x0} /*210.250000 MHz*/ ,
+ {{' ',' ','1','1'}, 0x3650, 0x0} /*217.250000 MHz*/ ,
+ {{' ',' ','1','2'}, 0x3810, 0x0} /*224.250000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x75D0, 0x0} /*471.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x77D0, 0x0} /*479.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x79D0, 0x0} /*487.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x7BD0, 0x0} /*495.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x7DD0, 0x0} /*503.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x7FD0, 0x0} /*511.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x81D0, 0x0} /*519.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x83D0, 0x0} /*527.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x85D0, 0x0} /*535.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x87D0, 0x0} /*543.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x89D0, 0x0} /*551.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x8BD0, 0x0} /*559.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x8DD0, 0x0} /*567.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x8FD0, 0x0} /*575.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x91D0, 0x0} /*583.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x93D0, 0x0} /*591.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x95D0, 0x0} /*599.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x97D0, 0x0} /*607.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x99D0, 0x0} /*615.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x9BD0, 0x0} /*623.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x9DD0, 0x0} /*631.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x9FD0, 0x0} /*639.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0xA1D0, 0x0} /*647.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0xA3D0, 0x0} /*655.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0xA5D0, 0x0} /*663.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0xA7D0, 0x0} /*671.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0xA9D0, 0x0} /*679.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0xABD0, 0x0} /*687.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0xADD0, 0x0} /*695.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0xAFD0, 0x0} /*703.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0xB1D0, 0x0} /*711.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0xB3D0, 0x0} /*719.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0xB5D0, 0x0} /*727.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0xB7D0, 0x0} /*735.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0xB9D0, 0x0} /*743.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0xBBD0, 0x0} /*751.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0xBDD0, 0x0} /*759.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0xBFD0, 0x0} /*767.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0xC1D0, 0x0} /*775.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0xC3D0, 0x0} /*783.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0xC5D0, 0x0} /*791.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0xC7D0, 0x0} /*799.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0xC9D0, 0x0} /*807.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0xCBD0, 0x0} /*815.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0xCDD0, 0x0} /*823.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0xCFD0, 0x0} /*831.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0xD1D0, 0x0} /*839.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0xD3D0, 0x0} /*847.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0xD5D0, 0x0} /*855.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_ccir_digital_air = {
+ 60,
+ XC3028_channels_ccir_digital_air
+};
+
+XC3028_CHANNEL XC3028_channels_ccir_digital_cable[57] = {
+ {{' ',' ','E','2'}, 0x0C10, 0x0} /*48.250000 MHz*/ ,
+ {{' ',' ','E','3'}, 0x0DD0, 0x0} /*55.250000 MHz*/ ,
+ {{' ',' ','E','4'}, 0x0F90, 0x0} /*62.250000 MHz*/ ,
+ {{' ',' ',' ','X'}, 0x1150, 0x0} /*69.250000 MHz*/ ,
+ {{' ',' ',' ','Y'}, 0x1310, 0x0} /*76.250000 MHz*/ ,
+ {{' ',' ',' ','Z'}, 0x14D0, 0x0} /*83.250000 MHz*/ ,
+ {{' ','Z','+','1'}, 0x1690, 0x0} /*90.250000 MHz*/ ,
+ {{' ','Z','+','2'}, 0x1850, 0x0} /*97.250000 MHz*/ ,
+ {{' ',' ','S','1'}, 0x1A50, 0x0} /*105.250000 MHz*/ ,
+ {{' ',' ','S','2'}, 0x1C10, 0x0} /*112.250000 MHz*/ ,
+ {{' ',' ','S','3'}, 0x1DD0, 0x0} /*119.250000 MHz*/ ,
+ {{' ',' ','S','4'}, 0x1F90, 0x0} /*126.250000 MHz*/ ,
+ {{' ',' ','S','5'}, 0x2150, 0x0} /*133.250000 MHz*/ ,
+ {{' ',' ','S','6'}, 0x2310, 0x0} /*140.250000 MHz*/ ,
+ {{' ',' ','S','7'}, 0x24D0, 0x0} /*147.250000 MHz*/ ,
+ {{' ',' ','S','8'}, 0x2690, 0x0} /*154.250000 MHz*/ ,
+ {{' ',' ','S','9'}, 0x2850, 0x0} /*161.250000 MHz*/ ,
+ {{' ','S','1','0'}, 0x2A10, 0x0} /*168.250000 MHz*/ ,
+ {{' ',' ','E','5'}, 0x2BD0, 0x0} /*175.250000 MHz*/ ,
+ {{' ',' ','E','6'}, 0x2D90, 0x0} /*182.250000 MHz*/ ,
+ {{' ',' ','E','7'}, 0x2F50, 0x0} /*189.250000 MHz*/ ,
+ {{' ',' ','E','8'}, 0x3110, 0x0} /*196.250000 MHz*/ ,
+ {{' ',' ','E','9'}, 0x32D0, 0x0} /*203.250000 MHz*/ ,
+ {{' ','E','1','0'}, 0x3490, 0x0} /*210.250000 MHz*/ ,
+ {{' ','E','1','1'}, 0x3650, 0x0} /*217.250000 MHz*/ ,
+ {{' ','E','1','2'}, 0x3810, 0x0} /*224.250000 MHz*/ ,
+ {{' ','S','1','1'}, 0x39D0, 0x0} /*231.250000 MHz*/ ,
+ {{' ','S','1','2'}, 0x3B90, 0x0} /*238.250000 MHz*/ ,
+ {{' ','S','1','3'}, 0x3D50, 0x0} /*245.250000 MHz*/ ,
+ {{' ','S','1','4'}, 0x3F10, 0x0} /*252.250000 MHz*/ ,
+ {{' ','S','1','5'}, 0x40D0, 0x0} /*259.250000 MHz*/ ,
+ {{' ','S','1','6'}, 0x4290, 0x0} /*266.250000 MHz*/ ,
+ {{' ','S','1','7'}, 0x4450, 0x0} /*273.250000 MHz*/ ,
+ {{' ','S','1','8'}, 0x4610, 0x0} /*280.250000 MHz*/ ,
+ {{' ','S','1','9'}, 0x47D0, 0x0} /*287.250000 MHz*/ ,
+ {{' ','S','2','0'}, 0x4990, 0x0} /*294.250000 MHz*/ ,
+ {{' ','S','2','1'}, 0x4B50, 0x0} /*301.250000 MHz*/ ,
+ {{' ','S','2','2'}, 0x4DD0, 0x0} /*311.250000 MHz*/ ,
+ {{' ','S','2','3'}, 0x4FD0, 0x0} /*319.250000 MHz*/ ,
+ {{' ','S','2','4'}, 0x51D0, 0x0} /*327.250000 MHz*/ ,
+ {{' ','S','2','5'}, 0x53D0, 0x0} /*335.250000 MHz*/ ,
+ {{' ','S','2','6'}, 0x55D0, 0x0} /*343.250000 MHz*/ ,
+ {{' ','S','2','7'}, 0x57D0, 0x0} /*351.250000 MHz*/ ,
+ {{' ','S','2','8'}, 0x59D0, 0x0} /*359.250000 MHz*/ ,
+ {{' ','S','2','9'}, 0x5BD0, 0x0} /*367.250000 MHz*/ ,
+ {{' ','S','3','0'}, 0x5DD0, 0x0} /*375.250000 MHz*/ ,
+ {{' ','S','3','1'}, 0x5FD0, 0x0} /*383.250000 MHz*/ ,
+ {{' ','S','3','2'}, 0x61D0, 0x0} /*391.250000 MHz*/ ,
+ {{' ','S','3','3'}, 0x63D0, 0x0} /*399.250000 MHz*/ ,
+ {{' ','S','3','4'}, 0x65D0, 0x0} /*407.250000 MHz*/ ,
+ {{' ','S','3','5'}, 0x67D0, 0x0} /*415.250000 MHz*/ ,
+ {{' ','S','3','6'}, 0x69D0, 0x0} /*423.250000 MHz*/ ,
+ {{' ','S','3','7'}, 0x6BD0, 0x0} /*431.250000 MHz*/ ,
+ {{' ','S','3','8'}, 0x6DD0, 0x0} /*439.250000 MHz*/ ,
+ {{' ','S','3','9'}, 0x6FD0, 0x0} /*447.250000 MHz*/ ,
+ {{' ','S','4','0'}, 0x71D0, 0x0} /*455.250000 MHz*/ ,
+ {{' ','S','4','1'}, 0x73D0, 0x0} /*463.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_ccir_digital_cable = {
+ 57,
+ XC3028_channels_ccir_digital_cable
+};
+
+XC3028_CHANNEL XC3028_channels_france_analog_air[59] = {
+ {{' ',' ',' ','1'}, 0x0BF0, 0xD} /*47.750000 MHz*/ ,
+ {{' ',' ',' ','2'}, 0x0DF0, 0x6} /*55.750000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x0F20, 0x7} /*60.500000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x0FF0, 0xB} /*63.750000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x2C00, 0xD} /*176.000000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x2E00, 0x3} /*184.000000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x3000, 0xD} /*192.000000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x3200, 0x1} /*200.000000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x3400, 0xD} /*208.000000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3600, 0xA} /*216.000000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x75D0, 0x1} /*471.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x77D0, 0x3} /*479.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x79D0, 0xC} /*487.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x7BD0, 0xF} /*495.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x7DD0, 0xC} /*503.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x7FD0, 0xE} /*511.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x81D0, 0x0} /*519.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x83D0, 0x2} /*527.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x85D0, 0x4} /*535.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x87D0, 0x0} /*543.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x89D0, 0x0} /*551.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x8BD0, 0xF} /*559.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x8DD0, 0xA} /*567.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x8FD0, 0xE} /*575.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x91D0, 0x0} /*583.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x93D0, 0xF} /*591.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x95D0, 0x1} /*599.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x97D0, 0xC} /*607.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x99D0, 0xD} /*615.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x9BD0, 0xF} /*623.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x9DD0, 0xE} /*631.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x9FD0, 0x6} /*639.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0xA1D0, 0xB} /*647.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0xA3D0, 0xF} /*655.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0xA5D0, 0xD} /*663.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0xA7D0, 0xF} /*671.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0xA9D0, 0xD} /*679.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0xABD0, 0x0} /*687.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0xADD0, 0xE} /*695.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0xAFD0, 0x2} /*703.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0xB1D0, 0x0} /*711.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0xB3D0, 0x5} /*719.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0xB5D0, 0x1} /*727.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0xB7D0, 0x2} /*735.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0xB9D0, 0x3} /*743.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0xBBD0, 0x2} /*751.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0xBDD0, 0xE} /*759.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0xBFD0, 0xF} /*767.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0xC1D0, 0x3} /*775.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0xC3D0, 0xD} /*783.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0xC5D0, 0xE} /*791.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0xC7D0, 0xF} /*799.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0xC9D0, 0xC} /*807.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0xCBD0, 0x4} /*815.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0xCDD0, 0xE} /*823.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0xCFD0, 0x2} /*831.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0xD1D0, 0x5} /*839.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0xD3D0, 0x7} /*847.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0xD5D0, 0x1} /*855.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_france_analog_air = {
+ 59,
+ XC3028_channels_france_analog_air
+};
+
+XC3028_CHANNEL XC3028_channels_france_analog_cable[89] = {
+ {{' ',' ',' ','1'}, 0x0BF0, 0xD} /*47.750000 MHz*/ ,
+ {{' ',' ',' ','2'}, 0x0DF0, 0x7} /*55.750000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x0F20, 0x7} /*60.500000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x0FF0, 0xB} /*63.750000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x2C00, 0xD} /*176.000000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x2E00, 0x3} /*184.000000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x3000, 0xD} /*192.000000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x3200, 0x1} /*200.000000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x3400, 0xD} /*208.000000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3600, 0xA} /*216.000000 MHz*/ ,
+ {{' ','S','C','1'}, 0x1E00, 0x7} /*120.000000 MHz*/ ,
+ {{' ','S','C','2'}, 0x2000, 0xA} /*128.000000 MHz*/ ,
+ {{' ','S','C','3'}, 0x2200, 0xF} /*136.000000 MHz*/ ,
+ {{' ','S','C','4'}, 0x2400, 0x0} /*144.000000 MHz*/ ,
+ {{' ','S','C','5'}, 0x2600, 0x0} /*152.000000 MHz*/ ,
+ {{' ','S','C','6'}, 0x2800, 0xD} /*160.000000 MHz*/ ,
+ {{' ','S','C','7'}, 0x2A00, 0x3} /*168.000000 MHz*/ ,
+ {{' ','S','C','8'}, 0x3800, 0x5} /*224.000000 MHz*/ ,
+ {{' ','S','C','9'}, 0x3A00, 0x2} /*232.000000 MHz*/ ,
+ {{'S','C','1','0'}, 0x3C00, 0xC} /*240.000000 MHz*/ ,
+ {{'S','C','1','1'}, 0x3E00, 0xA} /*248.000000 MHz*/ ,
+ {{'S','C','1','2'}, 0x4000, 0x4} /*256.000000 MHz*/ ,
+ {{'S','C','1','3'}, 0x4200, 0x2} /*264.000000 MHz*/ ,
+ {{'S','C','1','4'}, 0x4400, 0x5} /*272.000000 MHz*/ ,
+ {{'S','C','1','5'}, 0x4600, 0xB} /*280.000000 MHz*/ ,
+ {{'S','C','1','6'}, 0x4800, 0xF} /*288.000000 MHz*/ ,
+ {{'S','C','1','7'}, 0x4BD0, 0x3} /*303.250000 MHz*/ ,
+ {{'S','C','1','8'}, 0x4ED0, 0x2} /*315.250000 MHz*/ ,
+ {{'S','C','1','9'}, 0x51D0, 0x0} /*327.250000 MHz*/ ,
+ {{'S','C','2','0'}, 0x54D0, 0x0} /*339.250000 MHz*/ ,
+ {{'S','C','2','1'}, 0x57D0, 0xF} /*351.250000 MHz*/ ,
+ {{'S','C','2','2'}, 0x5AD0, 0x0} /*363.250000 MHz*/ ,
+ {{'S','C','2','3'}, 0x5DD0, 0x0} /*375.250000 MHz*/ ,
+ {{'S','C','2','4'}, 0x60D0, 0x0} /*387.250000 MHz*/ ,
+ {{'S','C','2','5'}, 0x63D0, 0x0} /*399.250000 MHz*/ ,
+ {{'S','C','2','6'}, 0x66D0, 0xD} /*411.250000 MHz*/ ,
+ {{'S','C','2','7'}, 0x69D0, 0xB} /*423.250000 MHz*/ ,
+ {{'S','C','2','8'}, 0x6CD0, 0xC} /*435.250000 MHz*/ ,
+ {{'S','C','2','9'}, 0x6FD0, 0x7} /*447.250000 MHz*/ ,
+ {{'S','C','3','0'}, 0x72D0, 0x2} /*459.250000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x75D0, 0x1} /*471.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x77D0, 0x3} /*479.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x79D0, 0xC} /*487.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x7BD0, 0xF} /*495.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x7DD0, 0xC} /*503.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x7FD0, 0xE} /*511.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x81D0, 0x0} /*519.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x83D0, 0x2} /*527.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x85D0, 0x4} /*535.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x87D0, 0x0} /*543.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x89D0, 0x0} /*551.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x8BD0, 0xF} /*559.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x8DD0, 0xA} /*567.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x8FD0, 0xE} /*575.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x91D0, 0x0} /*583.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x93D0, 0xF} /*591.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x95D0, 0x1} /*599.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x97D0, 0xC} /*607.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x99D0, 0xD} /*615.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x9BD0, 0xF} /*623.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x9DD0, 0xE} /*631.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x9FD0, 0x6} /*639.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0xA1D0, 0xB} /*647.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0xA3D0, 0xF} /*655.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0xA5D0, 0xD} /*663.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0xA7D0, 0xF} /*671.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0xA9D0, 0xD} /*679.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0xABD0, 0x0} /*687.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0xADD0, 0xE} /*695.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0xAFD0, 0x2} /*703.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0xB1D0, 0x0} /*711.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0xB3D0, 0x5} /*719.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0xB5D0, 0x1} /*727.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0xB7D0, 0x2} /*735.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0xB9D0, 0x3} /*743.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0xBBD0, 0x2} /*751.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0xBDD0, 0xE} /*759.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0xBFD0, 0xF} /*767.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0xC1D0, 0x3} /*775.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0xC3D0, 0xD} /*783.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0xC5D0, 0xE} /*791.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0xC7D0, 0xF} /*799.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0xC9D0, 0xC} /*807.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0xCBD0, 0x4} /*815.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0xCDD0, 0xE} /*823.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0xCFD0, 0x2} /*831.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0xD1D0, 0x5} /*839.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0xD3D0, 0x7} /*847.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0xD5D0, 0x1} /*855.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_france_analog_cable = {
+ 89,
+ XC3028_channels_france_analog_cable
+};
+
+XC3028_CHANNEL XC3028_channels_france_digital_air[59] = {
+ {{' ',' ',' ','1'}, 0x0BF0, 0x0} /*47.750000 MHz*/ ,
+ {{' ',' ',' ','2'}, 0x0DF0, 0x0} /*55.750000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x0F20, 0x0} /*60.500000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x0FF0, 0x0} /*63.750000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x2C00, 0x0} /*176.000000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x2E00, 0x0} /*184.000000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x3000, 0x0} /*192.000000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x3200, 0x0} /*200.000000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x3400, 0x0} /*208.000000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3600, 0x0} /*216.000000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x75D0, 0x0} /*471.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x77D0, 0x0} /*479.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x79D0, 0x0} /*487.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x7BD0, 0x0} /*495.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x7DD0, 0x0} /*503.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x7FD0, 0x0} /*511.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x81D0, 0x0} /*519.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x83D0, 0x0} /*527.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x85D0, 0x0} /*535.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x87D0, 0x0} /*543.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x89D0, 0x0} /*551.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x8BD0, 0x0} /*559.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x8DD0, 0x0} /*567.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x8FD0, 0x0} /*575.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x91D0, 0x0} /*583.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x93D0, 0x0} /*591.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x95D0, 0x0} /*599.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x97D0, 0x0} /*607.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x99D0, 0x0} /*615.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x9BD0, 0x0} /*623.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x9DD0, 0x0} /*631.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x9FD0, 0x0} /*639.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0xA1D0, 0x0} /*647.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0xA3D0, 0x0} /*655.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0xA5D0, 0x0} /*663.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0xA7D0, 0x0} /*671.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0xA9D0, 0x0} /*679.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0xABD0, 0x0} /*687.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0xADD0, 0x0} /*695.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0xAFD0, 0x0} /*703.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0xB1D0, 0x0} /*711.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0xB3D0, 0x0} /*719.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0xB5D0, 0x0} /*727.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0xB7D0, 0x0} /*735.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0xB9D0, 0x0} /*743.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0xBBD0, 0x0} /*751.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0xBDD0, 0x0} /*759.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0xBFD0, 0x0} /*767.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0xC1D0, 0x0} /*775.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0xC3D0, 0x0} /*783.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0xC5D0, 0x0} /*791.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0xC7D0, 0x0} /*799.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0xC9D0, 0x0} /*807.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0xCBD0, 0x0} /*815.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0xCDD0, 0x0} /*823.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0xCFD0, 0x0} /*831.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0xD1D0, 0x0} /*839.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0xD3D0, 0x0} /*847.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0xD5D0, 0x0} /*855.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_france_digital_air = {
+ 59,
+ XC3028_channels_france_digital_air
+};
+
+XC3028_CHANNEL XC3028_channels_france_digital_cable[89] = {
+ {{' ',' ',' ','1'}, 0x0BF0, 0x0} /*47.750000 MHz*/ ,
+ {{' ',' ',' ','2'}, 0x0DF0, 0x0} /*55.750000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x0F20, 0x0} /*60.500000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x0FF0, 0x0} /*63.750000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x2C00, 0x0} /*176.000000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x2E00, 0x0} /*184.000000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x3000, 0x0} /*192.000000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x3200, 0x0} /*200.000000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x3400, 0x0} /*208.000000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3600, 0x0} /*216.000000 MHz*/ ,
+ {{' ','S','C','1'}, 0x1E00, 0x0} /*120.000000 MHz*/ ,
+ {{' ','S','C','2'}, 0x2000, 0x0} /*128.000000 MHz*/ ,
+ {{' ','S','C','3'}, 0x2200, 0x0} /*136.000000 MHz*/ ,
+ {{' ','S','C','4'}, 0x2400, 0x0} /*144.000000 MHz*/ ,
+ {{' ','S','C','5'}, 0x2600, 0x0} /*152.000000 MHz*/ ,
+ {{' ','S','C','6'}, 0x2800, 0x0} /*160.000000 MHz*/ ,
+ {{' ','S','C','7'}, 0x2A00, 0x0} /*168.000000 MHz*/ ,
+ {{' ','S','C','8'}, 0x3800, 0x0} /*224.000000 MHz*/ ,
+ {{' ','S','C','9'}, 0x3A00, 0x0} /*232.000000 MHz*/ ,
+ {{'S','C','1','0'}, 0x3C00, 0x0} /*240.000000 MHz*/ ,
+ {{'S','C','1','1'}, 0x3E00, 0x0} /*248.000000 MHz*/ ,
+ {{'S','C','1','2'}, 0x4000, 0x0} /*256.000000 MHz*/ ,
+ {{'S','C','1','3'}, 0x4200, 0x0} /*264.000000 MHz*/ ,
+ {{'S','C','1','4'}, 0x4400, 0x0} /*272.000000 MHz*/ ,
+ {{'S','C','1','5'}, 0x4600, 0x0} /*280.000000 MHz*/ ,
+ {{'S','C','1','6'}, 0x4800, 0x0} /*288.000000 MHz*/ ,
+ {{'S','C','1','7'}, 0x4BD0, 0x0} /*303.250000 MHz*/ ,
+ {{'S','C','1','8'}, 0x4ED0, 0x0} /*315.250000 MHz*/ ,
+ {{'S','C','1','9'}, 0x51D0, 0x0} /*327.250000 MHz*/ ,
+ {{'S','C','2','0'}, 0x54D0, 0x0} /*339.250000 MHz*/ ,
+ {{'S','C','2','1'}, 0x57D0, 0x0} /*351.250000 MHz*/ ,
+ {{'S','C','2','2'}, 0x5AD0, 0x0} /*363.250000 MHz*/ ,
+ {{'S','C','2','3'}, 0x5DD0, 0x0} /*375.250000 MHz*/ ,
+ {{'S','C','2','4'}, 0x60D0, 0x0} /*387.250000 MHz*/ ,
+ {{'S','C','2','5'}, 0x63D0, 0x0} /*399.250000 MHz*/ ,
+ {{'S','C','2','6'}, 0x66D0, 0x0} /*411.250000 MHz*/ ,
+ {{'S','C','2','7'}, 0x69D0, 0x0} /*423.250000 MHz*/ ,
+ {{'S','C','2','8'}, 0x6CD0, 0x0} /*435.250000 MHz*/ ,
+ {{'S','C','2','9'}, 0x6FD0, 0x0} /*447.250000 MHz*/ ,
+ {{'S','C','3','0'}, 0x72D0, 0x0} /*459.250000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x75D0, 0x0} /*471.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x77D0, 0x0} /*479.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x79D0, 0x0} /*487.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x7BD0, 0x0} /*495.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x7DD0, 0x0} /*503.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x7FD0, 0x0} /*511.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x81D0, 0x0} /*519.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x83D0, 0x0} /*527.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x85D0, 0x0} /*535.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x87D0, 0x0} /*543.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x89D0, 0x0} /*551.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x8BD0, 0x0} /*559.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x8DD0, 0x0} /*567.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x8FD0, 0x0} /*575.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x91D0, 0x0} /*583.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x93D0, 0x0} /*591.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x95D0, 0x0} /*599.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x97D0, 0x0} /*607.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x99D0, 0x0} /*615.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x9BD0, 0x0} /*623.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x9DD0, 0x0} /*631.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x9FD0, 0x0} /*639.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0xA1D0, 0x0} /*647.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0xA3D0, 0x0} /*655.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0xA5D0, 0x0} /*663.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0xA7D0, 0x0} /*671.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0xA9D0, 0x0} /*679.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0xABD0, 0x0} /*687.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0xADD0, 0x0} /*695.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0xAFD0, 0x0} /*703.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0xB1D0, 0x0} /*711.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0xB3D0, 0x0} /*719.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0xB5D0, 0x0} /*727.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0xB7D0, 0x0} /*735.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0xB9D0, 0x0} /*743.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0xBBD0, 0x0} /*751.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0xBDD0, 0x0} /*759.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0xBFD0, 0x0} /*767.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0xC1D0, 0x0} /*775.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0xC3D0, 0x0} /*783.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0xC5D0, 0x0} /*791.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0xC7D0, 0x0} /*799.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0xC9D0, 0x0} /*807.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0xCBD0, 0x0} /*815.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0xCDD0, 0x0} /*823.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0xCFD0, 0x0} /*831.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0xD1D0, 0x0} /*839.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0xD3D0, 0x0} /*847.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0xD5D0, 0x0} /*855.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_france_digital_cable = {
+ 89,
+ XC3028_channels_france_digital_cable
+};
+
+XC3028_CHANNEL XC3028_channels_uk_analog_air[49] = {
+ {{' ',' ','2','1'}, 0x75D0, 0x1} /*471.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x77D0, 0x3} /*479.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x79D0, 0xC} /*487.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x7BD0, 0xF} /*495.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x7DD0, 0xC} /*503.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x7FD0, 0xE} /*511.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x81D0, 0x0} /*519.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x83D0, 0x2} /*527.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x85D0, 0x4} /*535.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x87D0, 0x0} /*543.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x89D0, 0x0} /*551.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x8BD0, 0xF} /*559.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x8DD0, 0xA} /*567.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x8FD0, 0xE} /*575.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x91D0, 0x0} /*583.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x93D0, 0xF} /*591.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x95D0, 0x1} /*599.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x97D0, 0xC} /*607.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x99D0, 0xD} /*615.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x9BD0, 0xF} /*623.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x9DD0, 0xE} /*631.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x9FD0, 0x6} /*639.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0xA1D0, 0xB} /*647.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0xA3D0, 0xF} /*655.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0xA5D0, 0xD} /*663.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0xA7D0, 0xF} /*671.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0xA9D0, 0xD} /*679.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0xABD0, 0x0} /*687.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0xADD0, 0xE} /*695.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0xAFD0, 0x2} /*703.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0xB1D0, 0x0} /*711.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0xB3D0, 0x5} /*719.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0xB5D0, 0x1} /*727.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0xB7D0, 0x2} /*735.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0xB9D0, 0x3} /*743.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0xBBD0, 0x2} /*751.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0xBDD0, 0xE} /*759.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0xBFD0, 0xF} /*767.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0xC1D0, 0x3} /*775.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0xC3D0, 0xD} /*783.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0xC5D0, 0xE} /*791.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0xC7D0, 0xF} /*799.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0xC9D0, 0xC} /*807.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0xCBD0, 0x4} /*815.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0xCDD0, 0xE} /*823.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0xCFD0, 0x2} /*831.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0xD1D0, 0x5} /*839.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0xD3D0, 0x7} /*847.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0xD5D0, 0x1} /*855.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_uk_analog_air = {
+ 49,
+ XC3028_channels_uk_analog_air
+};
+
+XC3028_CHANNEL XC3028_channels_uk_analog_cable[81] = {
+ {{' ',' ',' ','1'}, 0x0E00, 0x7} /*56.000000 MHz*/ ,
+ {{' ',' ',' ','2'}, 0x1000, 0xB} /*64.000000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x1E00, 0x3} /*120.000000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x2000, 0xA} /*128.000000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x2200, 0xF} /*136.000000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x2400, 0x0} /*144.000000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x2600, 0x0} /*152.000000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x2800, 0xD} /*160.000000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x2A00, 0xB} /*168.000000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x2C00, 0xD} /*176.000000 MHz*/ ,
+ {{' ',' ','1','1'}, 0x2E00, 0x3} /*184.000000 MHz*/ ,
+ {{' ',' ','1','2'}, 0x3000, 0xD} /*192.000000 MHz*/ ,
+ {{' ',' ','1','3'}, 0x3200, 0x1} /*200.000000 MHz*/ ,
+ {{' ',' ','1','4'}, 0x3400, 0xD} /*208.000000 MHz*/ ,
+ {{' ',' ','1','5'}, 0x3600, 0xA} /*216.000000 MHz*/ ,
+ {{' ',' ','1','6'}, 0x3800, 0x5} /*224.000000 MHz*/ ,
+ {{' ',' ','1','7'}, 0x3A00, 0x2} /*232.000000 MHz*/ ,
+ {{' ',' ','1','8'}, 0x3C00, 0xC} /*240.000000 MHz*/ ,
+ {{' ',' ','1','9'}, 0x3E00, 0xA} /*248.000000 MHz*/ ,
+ {{' ',' ','2','0'}, 0x4000, 0x4} /*256.000000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x4200, 0x2} /*264.000000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x4400, 0x5} /*272.000000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x4600, 0xB} /*280.000000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x4800, 0xF} /*288.000000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x4A00, 0x1} /*296.000000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x4C00, 0xE} /*304.000000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x4E00, 0x1} /*312.000000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x5000, 0xF} /*320.000000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x5200, 0x0} /*328.000000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x5400, 0xE} /*336.000000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x5600, 0x1} /*344.000000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x5800, 0xE} /*352.000000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x5A00, 0xF} /*360.000000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x5C00, 0xF} /*368.000000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x5E00, 0x1} /*376.000000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x6000, 0x0} /*384.000000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x6200, 0x1} /*392.000000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x6400, 0x0} /*400.000000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x6600, 0x1} /*408.000000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x6800, 0xE} /*416.000000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x6A00, 0x6} /*424.000000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x6C00, 0x0} /*432.000000 MHz*/ ,
+ {{' ',' ','4','3'}, 0x6E00, 0x6} /*440.000000 MHz*/ ,
+ {{' ',' ','4','4'}, 0x7000, 0xE} /*448.000000 MHz*/ ,
+ {{' ',' ','4','5'}, 0x7200, 0x2} /*456.000000 MHz*/ ,
+ {{' ',' ','4','6'}, 0x7400, 0xA} /*464.000000 MHz*/ ,
+ {{' ',' ','4','7'}, 0x7600, 0x5} /*472.000000 MHz*/ ,
+ {{' ',' ','4','8'}, 0x7800, 0xB} /*480.000000 MHz*/ ,
+ {{' ',' ','4','9'}, 0x7A00, 0xD} /*488.000000 MHz*/ ,
+ {{' ',' ','5','0'}, 0x7C00, 0xF} /*496.000000 MHz*/ ,
+ {{' ',' ','5','1'}, 0x7E00, 0x1} /*504.000000 MHz*/ ,
+ {{' ',' ','5','2'}, 0x8000, 0x3} /*512.000000 MHz*/ ,
+ {{' ',' ','5','3'}, 0x8200, 0x5} /*520.000000 MHz*/ ,
+ {{' ',' ','5','4'}, 0x8400, 0xC} /*528.000000 MHz*/ ,
+ {{' ',' ','5','5'}, 0x8600, 0x1} /*536.000000 MHz*/ ,
+ {{' ',' ','5','6'}, 0x8800, 0x0} /*544.000000 MHz*/ ,
+ {{' ',' ','5','7'}, 0x8A00, 0x5} /*552.000000 MHz*/ ,
+ {{' ',' ','5','8'}, 0x8C00, 0xF} /*560.000000 MHz*/ ,
+ {{' ',' ','5','9'}, 0x8E00, 0xE} /*568.000000 MHz*/ ,
+ {{' ',' ','6','0'}, 0x9000, 0x2} /*576.000000 MHz*/ ,
+ {{' ',' ','6','1'}, 0x9200, 0xE} /*584.000000 MHz*/ ,
+ {{' ',' ','6','2'}, 0x9400, 0xF} /*592.000000 MHz*/ ,
+ {{' ',' ','6','3'}, 0x9600, 0xE} /*600.000000 MHz*/ ,
+ {{' ',' ','6','4'}, 0x9800, 0xC} /*608.000000 MHz*/ ,
+ {{' ',' ','6','5'}, 0x9A00, 0x1} /*616.000000 MHz*/ ,
+ {{' ',' ','6','6'}, 0x9C00, 0x2} /*624.000000 MHz*/ ,
+ {{' ',' ','6','7'}, 0x9E00, 0xD} /*632.000000 MHz*/ ,
+ {{' ',' ','6','8'}, 0xA000, 0x2} /*640.000000 MHz*/ ,
+ {{' ',' ','6','9'}, 0xA200, 0x1} /*648.000000 MHz*/ ,
+ {{' ',' ','7','0'}, 0xA400, 0x2} /*656.000000 MHz*/ ,
+ {{' ',' ','7','1'}, 0xA600, 0xE} /*664.000000 MHz*/ ,
+ {{' ',' ','7','2'}, 0xA800, 0xF} /*672.000000 MHz*/ ,
+ {{' ',' ','7','3'}, 0xAA00, 0x1} /*680.000000 MHz*/ ,
+ {{' ',' ','7','4'}, 0xAC00, 0x0} /*688.000000 MHz*/ ,
+ {{' ',' ','7','5'}, 0xAE00, 0xE} /*696.000000 MHz*/ ,
+ {{' ',' ','7','6'}, 0xB000, 0x2} /*704.000000 MHz*/ ,
+ {{' ',' ','7','7'}, 0xB200, 0xE} /*712.000000 MHz*/ ,
+ {{' ',' ','7','8'}, 0xB400, 0xC} /*720.000000 MHz*/ ,
+ {{' ',' ','7','9'}, 0xB600, 0xE} /*728.000000 MHz*/ ,
+ {{' ',' ','8','0'}, 0xB800, 0x2} /*736.000000 MHz*/ ,
+ {{' ',' ','8','1'}, 0xBA00, 0x3} /*744.000000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_uk_analog_cable = {
+ 81,
+ XC3028_channels_uk_analog_cable
+};
+
+XC3028_CHANNEL XC3028_channels_uk_digital_air[49] = {
+ {{' ',' ','2','1'}, 0x75D0, 0x0} /*471.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x77D0, 0x0} /*479.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x79D0, 0x0} /*487.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x7BD0, 0x0} /*495.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x7DD0, 0x0} /*503.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x7FD0, 0x0} /*511.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x81D0, 0x0} /*519.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x83D0, 0x0} /*527.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x85D0, 0x0} /*535.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x87D0, 0x0} /*543.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x89D0, 0x0} /*551.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x8BD0, 0x0} /*559.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x8DD0, 0x0} /*567.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x8FD0, 0x0} /*575.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x91D0, 0x0} /*583.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x93D0, 0x0} /*591.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x95D0, 0x0} /*599.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x97D0, 0x0} /*607.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x99D0, 0x0} /*615.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x9BD0, 0x0} /*623.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x9DD0, 0x0} /*631.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x9FD0, 0x0} /*639.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0xA1D0, 0x0} /*647.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0xA3D0, 0x0} /*655.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0xA5D0, 0x0} /*663.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0xA7D0, 0x0} /*671.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0xA9D0, 0x0} /*679.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0xABD0, 0x0} /*687.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0xADD0, 0x0} /*695.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0xAFD0, 0x0} /*703.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0xB1D0, 0x0} /*711.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0xB3D0, 0x0} /*719.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0xB5D0, 0x0} /*727.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0xB7D0, 0x0} /*735.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0xB9D0, 0x0} /*743.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0xBBD0, 0x0} /*751.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0xBDD0, 0x0} /*759.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0xBFD0, 0x0} /*767.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0xC1D0, 0x0} /*775.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0xC3D0, 0x0} /*783.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0xC5D0, 0x0} /*791.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0xC7D0, 0x0} /*799.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0xC9D0, 0x0} /*807.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0xCBD0, 0x0} /*815.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0xCDD0, 0x0} /*823.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0xCFD0, 0x0} /*831.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0xD1D0, 0x0} /*839.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0xD3D0, 0x0} /*847.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0xD5D0, 0x0} /*855.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_uk_digital_air = {
+ 49,
+ XC3028_channels_uk_digital_air
+};
+
+XC3028_CHANNEL XC3028_channels_uk_digital_cable[81] = {
+ {{' ',' ',' ','1'}, 0x0E00, 0x0} /*56.000000 MHz*/ ,
+ {{' ',' ',' ','2'}, 0x1000, 0x0} /*64.000000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x1E00, 0x0} /*120.000000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x2000, 0x0} /*128.000000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x2200, 0x0} /*136.000000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x2400, 0x0} /*144.000000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x2600, 0x0} /*152.000000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x2800, 0x0} /*160.000000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x2A00, 0x0} /*168.000000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x2C00, 0x0} /*176.000000 MHz*/ ,
+ {{' ',' ','1','1'}, 0x2E00, 0x0} /*184.000000 MHz*/ ,
+ {{' ',' ','1','2'}, 0x3000, 0x0} /*192.000000 MHz*/ ,
+ {{' ',' ','1','3'}, 0x3200, 0x0} /*200.000000 MHz*/ ,
+ {{' ',' ','1','4'}, 0x3400, 0x0} /*208.000000 MHz*/ ,
+ {{' ',' ','1','5'}, 0x3600, 0x0} /*216.000000 MHz*/ ,
+ {{' ',' ','1','6'}, 0x3800, 0x0} /*224.000000 MHz*/ ,
+ {{' ',' ','1','7'}, 0x3A00, 0x0} /*232.000000 MHz*/ ,
+ {{' ',' ','1','8'}, 0x3C00, 0x0} /*240.000000 MHz*/ ,
+ {{' ',' ','1','9'}, 0x3E00, 0x0} /*248.000000 MHz*/ ,
+ {{' ',' ','2','0'}, 0x4000, 0x0} /*256.000000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x4200, 0x0} /*264.000000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x4400, 0x0} /*272.000000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x4600, 0x0} /*280.000000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x4800, 0x0} /*288.000000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x4A00, 0x0} /*296.000000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x4C00, 0x0} /*304.000000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x4E00, 0x0} /*312.000000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x5000, 0x0} /*320.000000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x5200, 0x0} /*328.000000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x5400, 0x0} /*336.000000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x5600, 0x0} /*344.000000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x5800, 0x0} /*352.000000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x5A00, 0x0} /*360.000000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x5C00, 0x0} /*368.000000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x5E00, 0x0} /*376.000000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x6000, 0x0} /*384.000000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x6200, 0x0} /*392.000000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x6400, 0x0} /*400.000000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x6600, 0x0} /*408.000000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x6800, 0x0} /*416.000000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x6A00, 0x0} /*424.000000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x6C00, 0x0} /*432.000000 MHz*/ ,
+ {{' ',' ','4','3'}, 0x6E00, 0x0} /*440.000000 MHz*/ ,
+ {{' ',' ','4','4'}, 0x7000, 0x0} /*448.000000 MHz*/ ,
+ {{' ',' ','4','5'}, 0x7200, 0x0} /*456.000000 MHz*/ ,
+ {{' ',' ','4','6'}, 0x7400, 0x0} /*464.000000 MHz*/ ,
+ {{' ',' ','4','7'}, 0x7600, 0x0} /*472.000000 MHz*/ ,
+ {{' ',' ','4','8'}, 0x7800, 0x0} /*480.000000 MHz*/ ,
+ {{' ',' ','4','9'}, 0x7A00, 0x0} /*488.000000 MHz*/ ,
+ {{' ',' ','5','0'}, 0x7C00, 0x0} /*496.000000 MHz*/ ,
+ {{' ',' ','5','1'}, 0x7E00, 0x0} /*504.000000 MHz*/ ,
+ {{' ',' ','5','2'}, 0x8000, 0x0} /*512.000000 MHz*/ ,
+ {{' ',' ','5','3'}, 0x8200, 0x0} /*520.000000 MHz*/ ,
+ {{' ',' ','5','4'}, 0x8400, 0x0} /*528.000000 MHz*/ ,
+ {{' ',' ','5','5'}, 0x8600, 0x0} /*536.000000 MHz*/ ,
+ {{' ',' ','5','6'}, 0x8800, 0x0} /*544.000000 MHz*/ ,
+ {{' ',' ','5','7'}, 0x8A00, 0x0} /*552.000000 MHz*/ ,
+ {{' ',' ','5','8'}, 0x8C00, 0x0} /*560.000000 MHz*/ ,
+ {{' ',' ','5','9'}, 0x8E00, 0x0} /*568.000000 MHz*/ ,
+ {{' ',' ','6','0'}, 0x9000, 0x0} /*576.000000 MHz*/ ,
+ {{' ',' ','6','1'}, 0x9200, 0x0} /*584.000000 MHz*/ ,
+ {{' ',' ','6','2'}, 0x9400, 0x0} /*592.000000 MHz*/ ,
+ {{' ',' ','6','3'}, 0x9600, 0x0} /*600.000000 MHz*/ ,
+ {{' ',' ','6','4'}, 0x9800, 0x0} /*608.000000 MHz*/ ,
+ {{' ',' ','6','5'}, 0x9A00, 0x0} /*616.000000 MHz*/ ,
+ {{' ',' ','6','6'}, 0x9C00, 0x0} /*624.000000 MHz*/ ,
+ {{' ',' ','6','7'}, 0x9E00, 0x0} /*632.000000 MHz*/ ,
+ {{' ',' ','6','8'}, 0xA000, 0x0} /*640.000000 MHz*/ ,
+ {{' ',' ','6','9'}, 0xA200, 0x0} /*648.000000 MHz*/ ,
+ {{' ',' ','7','0'}, 0xA400, 0x0} /*656.000000 MHz*/ ,
+ {{' ',' ','7','1'}, 0xA600, 0x0} /*664.000000 MHz*/ ,
+ {{' ',' ','7','2'}, 0xA800, 0x0} /*672.000000 MHz*/ ,
+ {{' ',' ','7','3'}, 0xAA00, 0x0} /*680.000000 MHz*/ ,
+ {{' ',' ','7','4'}, 0xAC00, 0x0} /*688.000000 MHz*/ ,
+ {{' ',' ','7','5'}, 0xAE00, 0x0} /*696.000000 MHz*/ ,
+ {{' ',' ','7','6'}, 0xB000, 0x0} /*704.000000 MHz*/ ,
+ {{' ',' ','7','7'}, 0xB200, 0x0} /*712.000000 MHz*/ ,
+ {{' ',' ','7','8'}, 0xB400, 0x0} /*720.000000 MHz*/ ,
+ {{' ',' ','7','9'}, 0xB600, 0x0} /*728.000000 MHz*/ ,
+ {{' ',' ','8','0'}, 0xB800, 0x0} /*736.000000 MHz*/ ,
+ {{' ',' ','8','1'}, 0xBA00, 0x0} /*744.000000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_uk_digital_cable = {
+ 81,
+ XC3028_channels_uk_digital_cable
+};
+
+XC3028_CHANNEL XC3028_channels_china_analog_air[57] = {
+ {{' ','D','S','1'}, 0x0C70, 0xB} /*49.750000 MHz*/ ,
+ {{' ','D','S','2'}, 0x0E70, 0x0} /*57.750000 MHz*/ ,
+ {{' ','D','S','3'}, 0x1070, 0x1} /*65.750000 MHz*/ ,
+ {{' ','D','S','4'}, 0x1350, 0xA} /*77.250000 MHz*/ ,
+ {{' ','D','S','5'}, 0x1550, 0x0} /*85.250000 MHz*/ ,
+ {{' ','D','S','6'}, 0x2A10, 0x0} /*168.250000 MHz*/ ,
+ {{' ','D','S','7'}, 0x2C10, 0x7} /*176.250000 MHz*/ ,
+ {{' ','D','S','8'}, 0x2E10, 0x3} /*184.250000 MHz*/ ,
+ {{' ','D','S','9'}, 0x3010, 0xE} /*192.250000 MHz*/ ,
+ {{'D','S','1','0'}, 0x3210, 0x3} /*200.250000 MHz*/ ,
+ {{'D','S','1','1'}, 0x3410, 0x0} /*208.250000 MHz*/ ,
+ {{'D','S','1','2'}, 0x3610, 0x0} /*216.250000 MHz*/ ,
+ {{'D','S','1','3'}, 0x75D0, 0x1} /*471.250000 MHz*/ ,
+ {{'D','S','1','4'}, 0x77D0, 0x3} /*479.250000 MHz*/ ,
+ {{'D','S','1','5'}, 0x79D0, 0xC} /*487.250000 MHz*/ ,
+ {{'D','S','1','6'}, 0x7BD0, 0xF} /*495.250000 MHz*/ ,
+ {{'D','S','1','7'}, 0x7DD0, 0xC} /*503.250000 MHz*/ ,
+ {{'D','S','1','8'}, 0x7FD0, 0xE} /*511.250000 MHz*/ ,
+ {{'D','S','1','9'}, 0x81D0, 0x0} /*519.250000 MHz*/ ,
+ {{'D','S','2','0'}, 0x83D0, 0x2} /*527.250000 MHz*/ ,
+ {{'D','S','2','1'}, 0x85D0, 0x4} /*535.250000 MHz*/ ,
+ {{'D','S','2','2'}, 0x87D0, 0x0} /*543.250000 MHz*/ ,
+ {{'D','S','2','3'}, 0x89D0, 0x0} /*551.250000 MHz*/ ,
+ {{'D','S','2','4'}, 0x8BD0, 0xF} /*559.250000 MHz*/ ,
+ {{'D','S','2','5'}, 0x97D0, 0xC} /*607.250000 MHz*/ ,
+ {{'D','S','2','6'}, 0x99D0, 0xD} /*615.250000 MHz*/ ,
+ {{'D','S','2','7'}, 0x9BD0, 0xF} /*623.250000 MHz*/ ,
+ {{'D','S','2','8'}, 0x9DD0, 0xE} /*631.250000 MHz*/ ,
+ {{'D','S','2','9'}, 0x9FD0, 0x6} /*639.250000 MHz*/ ,
+ {{'D','S','3','0'}, 0xA1D0, 0xB} /*647.250000 MHz*/ ,
+ {{'D','S','3','1'}, 0xA3D0, 0xF} /*655.250000 MHz*/ ,
+ {{'D','S','3','2'}, 0xA5D0, 0xD} /*663.250000 MHz*/ ,
+ {{'D','S','3','3'}, 0xA7D0, 0xF} /*671.250000 MHz*/ ,
+ {{'D','S','3','4'}, 0xA9D0, 0xD} /*679.250000 MHz*/ ,
+ {{'D','S','3','5'}, 0xABD0, 0x0} /*687.250000 MHz*/ ,
+ {{'D','S','3','6'}, 0xADD0, 0xE} /*695.250000 MHz*/ ,
+ {{'D','S','3','7'}, 0xAFD0, 0x2} /*703.250000 MHz*/ ,
+ {{'D','S','3','8'}, 0xB1D0, 0x0} /*711.250000 MHz*/ ,
+ {{'D','S','3','9'}, 0xB3D0, 0x5} /*719.250000 MHz*/ ,
+ {{'D','S','4','0'}, 0xB5D0, 0x1} /*727.250000 MHz*/ ,
+ {{'D','S','4','1'}, 0xB7D0, 0x2} /*735.250000 MHz*/ ,
+ {{'D','S','4','2'}, 0xB9D0, 0x3} /*743.250000 MHz*/ ,
+ {{'D','S','4','3'}, 0xBBD0, 0x2} /*751.250000 MHz*/ ,
+ {{'D','S','4','4'}, 0xBDD0, 0xE} /*759.250000 MHz*/ ,
+ {{'D','S','4','5'}, 0xBFD0, 0xF} /*767.250000 MHz*/ ,
+ {{'D','S','4','6'}, 0xC1D0, 0x3} /*775.250000 MHz*/ ,
+ {{'D','S','4','7'}, 0xC3D0, 0xD} /*783.250000 MHz*/ ,
+ {{'D','S','4','8'}, 0xC5D0, 0xE} /*791.250000 MHz*/ ,
+ {{'D','S','4','9'}, 0xC7D0, 0xF} /*799.250000 MHz*/ ,
+ {{'D','S','5','0'}, 0xC9D0, 0xC} /*807.250000 MHz*/ ,
+ {{'D','S','5','1'}, 0xCBD0, 0x4} /*815.250000 MHz*/ ,
+ {{'D','S','5','2'}, 0xCDD0, 0xE} /*823.250000 MHz*/ ,
+ {{'D','S','5','3'}, 0xCFD0, 0x2} /*831.250000 MHz*/ ,
+ {{'D','S','5','4'}, 0xD1D0, 0x5} /*839.250000 MHz*/ ,
+ {{'D','S','5','5'}, 0xD3D0, 0x7} /*847.250000 MHz*/ ,
+ {{'D','S','5','6'}, 0xD5D0, 0x1} /*855.250000 MHz*/ ,
+ {{'D','S','5','7'}, 0xD7D0, 0x2} /*863.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_china_analog_air = {
+ 57,
+ XC3028_channels_china_analog_air
+};
+
+XC3028_CHANNEL XC3028_channels_china_analog_cable[99] = {
+ {{' ','D','S','1'}, 0x0C70, 0xB} /*49.750000 MHz*/ ,
+ {{' ','D','S','2'}, 0x0E70, 0x0} /*57.750000 MHz*/ ,
+ {{' ','D','S','3'}, 0x1070, 0x1} /*65.750000 MHz*/ ,
+ {{' ','D','S','4'}, 0x1350, 0xA} /*77.250000 MHz*/ ,
+ {{' ','D','S','5'}, 0x1550, 0x0} /*85.250000 MHz*/ ,
+ {{' ','D','S','6'}, 0x2A10, 0x0} /*168.250000 MHz*/ ,
+ {{' ','D','S','7'}, 0x2C10, 0x7} /*176.250000 MHz*/ ,
+ {{' ','D','S','8'}, 0x2E10, 0x3} /*184.250000 MHz*/ ,
+ {{' ','D','S','9'}, 0x3010, 0xE} /*192.250000 MHz*/ ,
+ {{'D','S','1','0'}, 0x3210, 0x3} /*200.250000 MHz*/ ,
+ {{'D','S','1','1'}, 0x3410, 0x0} /*208.250000 MHz*/ ,
+ {{'D','S','1','2'}, 0x3610, 0x0} /*216.250000 MHz*/ ,
+ {{' ',' ','Z','1'}, 0x1C10, 0x7} /*112.250000 MHz*/ ,
+ {{' ',' ','Z','2'}, 0x1E10, 0x4} /*120.250000 MHz*/ ,
+ {{' ',' ','Z','3'}, 0x2010, 0xA} /*128.250000 MHz*/ ,
+ {{' ',' ','Z','4'}, 0x2210, 0x1} /*136.250000 MHz*/ ,
+ {{' ',' ','Z','5'}, 0x2410, 0xB} /*144.250000 MHz*/ ,
+ {{' ',' ','Z','6'}, 0x2610, 0x3} /*152.250000 MHz*/ ,
+ {{' ',' ','Z','7'}, 0x2810, 0xE} /*160.250000 MHz*/ ,
+ {{' ',' ','Z','8'}, 0x3810, 0x5} /*224.250000 MHz*/ ,
+ {{' ',' ','Z','9'}, 0x3A10, 0x3} /*232.250000 MHz*/ ,
+ {{' ','Z','1','0'}, 0x3C10, 0xE} /*240.250000 MHz*/ ,
+ {{' ','Z','1','1'}, 0x3E10, 0x1} /*248.250000 MHz*/ ,
+ {{' ','Z','1','2'}, 0x4010, 0x4} /*256.250000 MHz*/ ,
+ {{' ','Z','1','3'}, 0x4210, 0x2} /*264.250000 MHz*/ ,
+ {{' ','Z','1','4'}, 0x4410, 0x7} /*272.250000 MHz*/ ,
+ {{' ','Z','1','5'}, 0x4610, 0x2} /*280.250000 MHz*/ ,
+ {{' ','Z','1','6'}, 0x4810, 0xF} /*288.250000 MHz*/ ,
+ {{' ','Z','1','7'}, 0x4A10, 0x3} /*296.250000 MHz*/ ,
+ {{' ','Z','1','8'}, 0x4C10, 0xE} /*304.250000 MHz*/ ,
+ {{' ','Z','1','9'}, 0x4E10, 0xC} /*312.250000 MHz*/ ,
+ {{' ','Z','2','0'}, 0x5010, 0xF} /*320.250000 MHz*/ ,
+ {{' ','Z','2','1'}, 0x5210, 0x2} /*328.250000 MHz*/ ,
+ {{' ','Z','2','2'}, 0x5410, 0x6} /*336.250000 MHz*/ ,
+ {{' ','Z','2','3'}, 0x5610, 0x0} /*344.250000 MHz*/ ,
+ {{' ','Z','2','4'}, 0x5810, 0xD} /*352.250000 MHz*/ ,
+ {{' ','Z','2','5'}, 0x5A10, 0x0} /*360.250000 MHz*/ ,
+ {{' ','Z','2','6'}, 0x5C10, 0x0} /*368.250000 MHz*/ ,
+ {{' ','Z','2','7'}, 0x5E10, 0x0} /*376.250000 MHz*/ ,
+ {{' ','Z','2','8'}, 0x6010, 0x0} /*384.250000 MHz*/ ,
+ {{' ','Z','2','9'}, 0x6210, 0x0} /*392.250000 MHz*/ ,
+ {{' ','Z','3','0'}, 0x6410, 0xF} /*400.250000 MHz*/ ,
+ {{' ','Z','3','1'}, 0x6610, 0x6} /*408.250000 MHz*/ ,
+ {{' ','Z','3','2'}, 0x6810, 0xE} /*416.250000 MHz*/ ,
+ {{' ','Z','3','3'}, 0x6A10, 0xC} /*424.250000 MHz*/ ,
+ {{' ','Z','3','4'}, 0x6C10, 0x3} /*432.250000 MHz*/ ,
+ {{' ','Z','3','5'}, 0x6E10, 0x7} /*440.250000 MHz*/ ,
+ {{' ','Z','3','6'}, 0x7010, 0xA} /*448.250000 MHz*/ ,
+ {{' ','Z','3','7'}, 0x7210, 0x2} /*456.250000 MHz*/ ,
+ {{'D','S','1','3'}, 0x75D0, 0x1} /*471.250000 MHz*/ ,
+ {{'D','S','1','4'}, 0x77D0, 0x3} /*479.250000 MHz*/ ,
+ {{'D','S','1','5'}, 0x79D0, 0xC} /*487.250000 MHz*/ ,
+ {{'D','S','1','6'}, 0x7BD0, 0xF} /*495.250000 MHz*/ ,
+ {{'D','S','1','7'}, 0x7DD0, 0xC} /*503.250000 MHz*/ ,
+ {{'D','S','1','8'}, 0x7FD0, 0xE} /*511.250000 MHz*/ ,
+ {{'D','S','1','9'}, 0x81D0, 0x0} /*519.250000 MHz*/ ,
+ {{'D','S','2','0'}, 0x83D0, 0x2} /*527.250000 MHz*/ ,
+ {{'D','S','2','1'}, 0x85D0, 0x4} /*535.250000 MHz*/ ,
+ {{'D','S','2','2'}, 0x87D0, 0x0} /*543.250000 MHz*/ ,
+ {{'D','S','2','3'}, 0x89D0, 0x0} /*551.250000 MHz*/ ,
+ {{'D','S','2','4'}, 0x8BD0, 0xF} /*559.250000 MHz*/ ,
+ {{' ','Z','3','8'}, 0x8DD0, 0xA} /*567.250000 MHz*/ ,
+ {{' ','Z','3','9'}, 0x8FD0, 0xE} /*575.250000 MHz*/ ,
+ {{' ','Z','4','0'}, 0x91D0, 0x0} /*583.250000 MHz*/ ,
+ {{' ','Z','4','1'}, 0x93D0, 0xF} /*591.250000 MHz*/ ,
+ {{' ','Z','4','2'}, 0x95D0, 0x1} /*599.250000 MHz*/ ,
+ {{'D','S','2','5'}, 0x97D0, 0xC} /*607.250000 MHz*/ ,
+ {{'D','S','2','6'}, 0x99D0, 0xD} /*615.250000 MHz*/ ,
+ {{'D','S','2','7'}, 0x9BD0, 0xF} /*623.250000 MHz*/ ,
+ {{'D','S','2','8'}, 0x9DD0, 0xE} /*631.250000 MHz*/ ,
+ {{'D','S','2','9'}, 0x9FD0, 0x6} /*639.250000 MHz*/ ,
+ {{'D','S','3','0'}, 0xA1D0, 0xB} /*647.250000 MHz*/ ,
+ {{'D','S','3','1'}, 0xA3D0, 0xF} /*655.250000 MHz*/ ,
+ {{'D','S','3','2'}, 0xA5D0, 0xD} /*663.250000 MHz*/ ,
+ {{'D','S','3','3'}, 0xA7D0, 0xF} /*671.250000 MHz*/ ,
+ {{'D','S','3','4'}, 0xA9D0, 0xD} /*679.250000 MHz*/ ,
+ {{'D','S','3','5'}, 0xABD0, 0x0} /*687.250000 MHz*/ ,
+ {{'D','S','3','6'}, 0xADD0, 0xE} /*695.250000 MHz*/ ,
+ {{'D','S','3','7'}, 0xAFD0, 0x2} /*703.250000 MHz*/ ,
+ {{'D','S','3','8'}, 0xB1D0, 0x0} /*711.250000 MHz*/ ,
+ {{'D','S','3','9'}, 0xB3D0, 0x5} /*719.250000 MHz*/ ,
+ {{'D','S','4','0'}, 0xB5D0, 0x1} /*727.250000 MHz*/ ,
+ {{'D','S','4','1'}, 0xB7D0, 0x2} /*735.250000 MHz*/ ,
+ {{'D','S','4','2'}, 0xB9D0, 0x3} /*743.250000 MHz*/ ,
+ {{'D','S','4','3'}, 0xBBD0, 0x2} /*751.250000 MHz*/ ,
+ {{'D','S','4','4'}, 0xBDD0, 0xE} /*759.250000 MHz*/ ,
+ {{'D','S','4','5'}, 0xBFD0, 0xF} /*767.250000 MHz*/ ,
+ {{'D','S','4','6'}, 0xC1D0, 0x3} /*775.250000 MHz*/ ,
+ {{'D','S','4','7'}, 0xC3D0, 0xD} /*783.250000 MHz*/ ,
+ {{'D','S','4','8'}, 0xC5D0, 0xE} /*791.250000 MHz*/ ,
+ {{'D','S','4','9'}, 0xC7D0, 0xF} /*799.250000 MHz*/ ,
+ {{'D','S','5','0'}, 0xC9D0, 0xC} /*807.250000 MHz*/ ,
+ {{'D','S','5','1'}, 0xCBD0, 0x4} /*815.250000 MHz*/ ,
+ {{'D','S','5','2'}, 0xCDD0, 0xE} /*823.250000 MHz*/ ,
+ {{'D','S','5','3'}, 0xCFD0, 0x2} /*831.250000 MHz*/ ,
+ {{'D','S','5','4'}, 0xD1D0, 0x5} /*839.250000 MHz*/ ,
+ {{'D','S','5','5'}, 0xD3D0, 0x7} /*847.250000 MHz*/ ,
+ {{'D','S','5','6'}, 0xD5D0, 0x1} /*855.250000 MHz*/ ,
+ {{'D','S','5','7'}, 0xD7D0, 0x2} /*863.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_china_analog_cable = {
+ 99,
+ XC3028_channels_china_analog_cable
+};
+
+XC3028_CHANNEL XC3028_channels_china_digital_air[57] = {
+ {{' ','D','S','1'}, 0x0C70, 0x0} /*49.750000 MHz*/ ,
+ {{' ','D','S','2'}, 0x0E70, 0x0} /*57.750000 MHz*/ ,
+ {{' ','D','S','3'}, 0x1070, 0x0} /*65.750000 MHz*/ ,
+ {{' ','D','S','4'}, 0x1350, 0x0} /*77.250000 MHz*/ ,
+ {{' ','D','S','5'}, 0x1550, 0x0} /*85.250000 MHz*/ ,
+ {{' ','D','S','6'}, 0x2A10, 0x0} /*168.250000 MHz*/ ,
+ {{' ','D','S','7'}, 0x2C10, 0x0} /*176.250000 MHz*/ ,
+ {{' ','D','S','8'}, 0x2E10, 0x0} /*184.250000 MHz*/ ,
+ {{' ','D','S','9'}, 0x3010, 0x0} /*192.250000 MHz*/ ,
+ {{'D','S','1','0'}, 0x3210, 0x0} /*200.250000 MHz*/ ,
+ {{'D','S','1','1'}, 0x3410, 0x0} /*208.250000 MHz*/ ,
+ {{'D','S','1','2'}, 0x3610, 0x0} /*216.250000 MHz*/ ,
+ {{'D','S','1','3'}, 0x75D0, 0x0} /*471.250000 MHz*/ ,
+ {{'D','S','1','4'}, 0x77D0, 0x0} /*479.250000 MHz*/ ,
+ {{'D','S','1','5'}, 0x79D0, 0x0} /*487.250000 MHz*/ ,
+ {{'D','S','1','6'}, 0x7BD0, 0x0} /*495.250000 MHz*/ ,
+ {{'D','S','1','7'}, 0x7DD0, 0x0} /*503.250000 MHz*/ ,
+ {{'D','S','1','8'}, 0x7FD0, 0x0} /*511.250000 MHz*/ ,
+ {{'D','S','1','9'}, 0x81D0, 0x0} /*519.250000 MHz*/ ,
+ {{'D','S','2','0'}, 0x83D0, 0x0} /*527.250000 MHz*/ ,
+ {{'D','S','2','1'}, 0x85D0, 0x0} /*535.250000 MHz*/ ,
+ {{'D','S','2','2'}, 0x87D0, 0x0} /*543.250000 MHz*/ ,
+ {{'D','S','2','3'}, 0x89D0, 0x0} /*551.250000 MHz*/ ,
+ {{'D','S','2','4'}, 0x8BD0, 0x0} /*559.250000 MHz*/ ,
+ {{'D','S','2','5'}, 0x97D0, 0x0} /*607.250000 MHz*/ ,
+ {{'D','S','2','6'}, 0x99D0, 0x0} /*615.250000 MHz*/ ,
+ {{'D','S','2','7'}, 0x9BD0, 0x0} /*623.250000 MHz*/ ,
+ {{'D','S','2','8'}, 0x9DD0, 0x0} /*631.250000 MHz*/ ,
+ {{'D','S','2','9'}, 0x9FD0, 0x0} /*639.250000 MHz*/ ,
+ {{'D','S','3','0'}, 0xA1D0, 0x0} /*647.250000 MHz*/ ,
+ {{'D','S','3','1'}, 0xA3D0, 0x0} /*655.250000 MHz*/ ,
+ {{'D','S','3','2'}, 0xA5D0, 0x0} /*663.250000 MHz*/ ,
+ {{'D','S','3','3'}, 0xA7D0, 0x0} /*671.250000 MHz*/ ,
+ {{'D','S','3','4'}, 0xA9D0, 0x0} /*679.250000 MHz*/ ,
+ {{'D','S','3','5'}, 0xABD0, 0x0} /*687.250000 MHz*/ ,
+ {{'D','S','3','6'}, 0xADD0, 0x0} /*695.250000 MHz*/ ,
+ {{'D','S','3','7'}, 0xAFD0, 0x0} /*703.250000 MHz*/ ,
+ {{'D','S','3','8'}, 0xB1D0, 0x0} /*711.250000 MHz*/ ,
+ {{'D','S','3','9'}, 0xB3D0, 0x0} /*719.250000 MHz*/ ,
+ {{'D','S','4','0'}, 0xB5D0, 0x0} /*727.250000 MHz*/ ,
+ {{'D','S','4','1'}, 0xB7D0, 0x0} /*735.250000 MHz*/ ,
+ {{'D','S','4','2'}, 0xB9D0, 0x0} /*743.250000 MHz*/ ,
+ {{'D','S','4','3'}, 0xBBD0, 0x0} /*751.250000 MHz*/ ,
+ {{'D','S','4','4'}, 0xBDD0, 0x0} /*759.250000 MHz*/ ,
+ {{'D','S','4','5'}, 0xBFD0, 0x0} /*767.250000 MHz*/ ,
+ {{'D','S','4','6'}, 0xC1D0, 0x0} /*775.250000 MHz*/ ,
+ {{'D','S','4','7'}, 0xC3D0, 0x0} /*783.250000 MHz*/ ,
+ {{'D','S','4','8'}, 0xC5D0, 0x0} /*791.250000 MHz*/ ,
+ {{'D','S','4','9'}, 0xC7D0, 0x0} /*799.250000 MHz*/ ,
+ {{'D','S','5','0'}, 0xC9D0, 0x0} /*807.250000 MHz*/ ,
+ {{'D','S','5','1'}, 0xCBD0, 0x0} /*815.250000 MHz*/ ,
+ {{'D','S','5','2'}, 0xCDD0, 0x0} /*823.250000 MHz*/ ,
+ {{'D','S','5','3'}, 0xCFD0, 0x0} /*831.250000 MHz*/ ,
+ {{'D','S','5','4'}, 0xD1D0, 0x0} /*839.250000 MHz*/ ,
+ {{'D','S','5','5'}, 0xD3D0, 0x0} /*847.250000 MHz*/ ,
+ {{'D','S','5','6'}, 0xD5D0, 0x0} /*855.250000 MHz*/ ,
+ {{'D','S','5','7'}, 0xD7D0, 0x0} /*863.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_china_digital_air = {
+ 57,
+ XC3028_channels_china_digital_air
+};
+
+XC3028_CHANNEL XC3028_channels_china_digital_cable[99] = {
+ {{' ','D','S','1'}, 0x0C70, 0x0} /*49.750000 MHz*/ ,
+ {{' ','D','S','2'}, 0x0E70, 0x0} /*57.750000 MHz*/ ,
+ {{' ','D','S','3'}, 0x1070, 0x0} /*65.750000 MHz*/ ,
+ {{' ','D','S','4'}, 0x1350, 0x0} /*77.250000 MHz*/ ,
+ {{' ','D','S','5'}, 0x1550, 0x0} /*85.250000 MHz*/ ,
+ {{' ','D','S','6'}, 0x2A10, 0x0} /*168.250000 MHz*/ ,
+ {{' ','D','S','7'}, 0x2C10, 0x0} /*176.250000 MHz*/ ,
+ {{' ','D','S','8'}, 0x2E10, 0x0} /*184.250000 MHz*/ ,
+ {{' ','D','S','9'}, 0x3010, 0x0} /*192.250000 MHz*/ ,
+ {{'D','S','1','0'}, 0x3210, 0x0} /*200.250000 MHz*/ ,
+ {{'D','S','1','1'}, 0x3410, 0x0} /*208.250000 MHz*/ ,
+ {{'D','S','1','2'}, 0x3610, 0x0} /*216.250000 MHz*/ ,
+ {{' ',' ','Z','1'}, 0x1C10, 0x0} /*112.250000 MHz*/ ,
+ {{' ',' ','Z','2'}, 0x1E10, 0x0} /*120.250000 MHz*/ ,
+ {{' ',' ','Z','3'}, 0x2010, 0x0} /*128.250000 MHz*/ ,
+ {{' ',' ','Z','4'}, 0x2210, 0x0} /*136.250000 MHz*/ ,
+ {{' ',' ','Z','5'}, 0x2410, 0x0} /*144.250000 MHz*/ ,
+ {{' ',' ','Z','6'}, 0x2610, 0x0} /*152.250000 MHz*/ ,
+ {{' ',' ','Z','7'}, 0x2810, 0x0} /*160.250000 MHz*/ ,
+ {{' ',' ','Z','8'}, 0x3810, 0x0} /*224.250000 MHz*/ ,
+ {{' ',' ','Z','9'}, 0x3A10, 0x0} /*232.250000 MHz*/ ,
+ {{' ','Z','1','0'}, 0x3C10, 0x0} /*240.250000 MHz*/ ,
+ {{' ','Z','1','1'}, 0x3E10, 0x0} /*248.250000 MHz*/ ,
+ {{' ','Z','1','2'}, 0x4010, 0x0} /*256.250000 MHz*/ ,
+ {{' ','Z','1','3'}, 0x4210, 0x0} /*264.250000 MHz*/ ,
+ {{' ','Z','1','4'}, 0x4410, 0x0} /*272.250000 MHz*/ ,
+ {{' ','Z','1','5'}, 0x4610, 0x0} /*280.250000 MHz*/ ,
+ {{' ','Z','1','6'}, 0x4810, 0x0} /*288.250000 MHz*/ ,
+ {{' ','Z','1','7'}, 0x4A10, 0x0} /*296.250000 MHz*/ ,
+ {{' ','Z','1','8'}, 0x4C10, 0x0} /*304.250000 MHz*/ ,
+ {{' ','Z','1','9'}, 0x4E10, 0x0} /*312.250000 MHz*/ ,
+ {{' ','Z','2','0'}, 0x5010, 0x0} /*320.250000 MHz*/ ,
+ {{' ','Z','2','1'}, 0x5210, 0x0} /*328.250000 MHz*/ ,
+ {{' ','Z','2','2'}, 0x5410, 0x0} /*336.250000 MHz*/ ,
+ {{' ','Z','2','3'}, 0x5610, 0x0} /*344.250000 MHz*/ ,
+ {{' ','Z','2','4'}, 0x5810, 0x0} /*352.250000 MHz*/ ,
+ {{' ','Z','2','5'}, 0x5A10, 0x0} /*360.250000 MHz*/ ,
+ {{' ','Z','2','6'}, 0x5C10, 0x0} /*368.250000 MHz*/ ,
+ {{' ','Z','2','7'}, 0x5E10, 0x0} /*376.250000 MHz*/ ,
+ {{' ','Z','2','8'}, 0x6010, 0x0} /*384.250000 MHz*/ ,
+ {{' ','Z','2','9'}, 0x6210, 0x0} /*392.250000 MHz*/ ,
+ {{' ','Z','3','0'}, 0x6410, 0x0} /*400.250000 MHz*/ ,
+ {{' ','Z','3','1'}, 0x6610, 0x0} /*408.250000 MHz*/ ,
+ {{' ','Z','3','2'}, 0x6810, 0x0} /*416.250000 MHz*/ ,
+ {{' ','Z','3','3'}, 0x6A10, 0x0} /*424.250000 MHz*/ ,
+ {{' ','Z','3','4'}, 0x6C10, 0x0} /*432.250000 MHz*/ ,
+ {{' ','Z','3','5'}, 0x6E10, 0x0} /*440.250000 MHz*/ ,
+ {{' ','Z','3','6'}, 0x7010, 0x0} /*448.250000 MHz*/ ,
+ {{' ','Z','3','7'}, 0x7210, 0x0} /*456.250000 MHz*/ ,
+ {{'D','S','1','3'}, 0x75D0, 0x0} /*471.250000 MHz*/ ,
+ {{'D','S','1','4'}, 0x77D0, 0x0} /*479.250000 MHz*/ ,
+ {{'D','S','1','5'}, 0x79D0, 0x0} /*487.250000 MHz*/ ,
+ {{'D','S','1','6'}, 0x7BD0, 0x0} /*495.250000 MHz*/ ,
+ {{'D','S','1','7'}, 0x7DD0, 0x0} /*503.250000 MHz*/ ,
+ {{'D','S','1','8'}, 0x7FD0, 0x0} /*511.250000 MHz*/ ,
+ {{'D','S','1','9'}, 0x81D0, 0x0} /*519.250000 MHz*/ ,
+ {{'D','S','2','0'}, 0x83D0, 0x0} /*527.250000 MHz*/ ,
+ {{'D','S','2','1'}, 0x85D0, 0x0} /*535.250000 MHz*/ ,
+ {{'D','S','2','2'}, 0x87D0, 0x0} /*543.250000 MHz*/ ,
+ {{'D','S','2','3'}, 0x89D0, 0x0} /*551.250000 MHz*/ ,
+ {{'D','S','2','4'}, 0x8BD0, 0x0} /*559.250000 MHz*/ ,
+ {{' ','Z','3','8'}, 0x8DD0, 0x0} /*567.250000 MHz*/ ,
+ {{' ','Z','3','9'}, 0x8FD0, 0x0} /*575.250000 MHz*/ ,
+ {{' ','Z','4','0'}, 0x91D0, 0x0} /*583.250000 MHz*/ ,
+ {{' ','Z','4','1'}, 0x93D0, 0x0} /*591.250000 MHz*/ ,
+ {{' ','Z','4','2'}, 0x95D0, 0x0} /*599.250000 MHz*/ ,
+ {{'D','S','2','5'}, 0x97D0, 0x0} /*607.250000 MHz*/ ,
+ {{'D','S','2','6'}, 0x99D0, 0x0} /*615.250000 MHz*/ ,
+ {{'D','S','2','7'}, 0x9BD0, 0x0} /*623.250000 MHz*/ ,
+ {{'D','S','2','8'}, 0x9DD0, 0x0} /*631.250000 MHz*/ ,
+ {{'D','S','2','9'}, 0x9FD0, 0x0} /*639.250000 MHz*/ ,
+ {{'D','S','3','0'}, 0xA1D0, 0x0} /*647.250000 MHz*/ ,
+ {{'D','S','3','1'}, 0xA3D0, 0x0} /*655.250000 MHz*/ ,
+ {{'D','S','3','2'}, 0xA5D0, 0x0} /*663.250000 MHz*/ ,
+ {{'D','S','3','3'}, 0xA7D0, 0x0} /*671.250000 MHz*/ ,
+ {{'D','S','3','4'}, 0xA9D0, 0x0} /*679.250000 MHz*/ ,
+ {{'D','S','3','5'}, 0xABD0, 0x0} /*687.250000 MHz*/ ,
+ {{'D','S','3','6'}, 0xADD0, 0x0} /*695.250000 MHz*/ ,
+ {{'D','S','3','7'}, 0xAFD0, 0x0} /*703.250000 MHz*/ ,
+ {{'D','S','3','8'}, 0xB1D0, 0x0} /*711.250000 MHz*/ ,
+ {{'D','S','3','9'}, 0xB3D0, 0x0} /*719.250000 MHz*/ ,
+ {{'D','S','4','0'}, 0xB5D0, 0x0} /*727.250000 MHz*/ ,
+ {{'D','S','4','1'}, 0xB7D0, 0x0} /*735.250000 MHz*/ ,
+ {{'D','S','4','2'}, 0xB9D0, 0x0} /*743.250000 MHz*/ ,
+ {{'D','S','4','3'}, 0xBBD0, 0x0} /*751.250000 MHz*/ ,
+ {{'D','S','4','4'}, 0xBDD0, 0x0} /*759.250000 MHz*/ ,
+ {{'D','S','4','5'}, 0xBFD0, 0x0} /*767.250000 MHz*/ ,
+ {{'D','S','4','6'}, 0xC1D0, 0x0} /*775.250000 MHz*/ ,
+ {{'D','S','4','7'}, 0xC3D0, 0x0} /*783.250000 MHz*/ ,
+ {{'D','S','4','8'}, 0xC5D0, 0x0} /*791.250000 MHz*/ ,
+ {{'D','S','4','9'}, 0xC7D0, 0x0} /*799.250000 MHz*/ ,
+ {{'D','S','5','0'}, 0xC9D0, 0x0} /*807.250000 MHz*/ ,
+ {{'D','S','5','1'}, 0xCBD0, 0x0} /*815.250000 MHz*/ ,
+ {{'D','S','5','2'}, 0xCDD0, 0x0} /*823.250000 MHz*/ ,
+ {{'D','S','5','3'}, 0xCFD0, 0x0} /*831.250000 MHz*/ ,
+ {{'D','S','5','4'}, 0xD1D0, 0x0} /*839.250000 MHz*/ ,
+ {{'D','S','5','5'}, 0xD3D0, 0x0} /*847.250000 MHz*/ ,
+ {{'D','S','5','6'}, 0xD5D0, 0x0} /*855.250000 MHz*/ ,
+ {{'D','S','5','7'}, 0xD7D0, 0x0} /*863.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_china_digital_cable = {
+ 99,
+ XC3028_channels_china_digital_cable
+};
+
+XC3028_CHANNEL XC3028_channels_australia_air[56] = {
+ {{' ',' ',' ','0'}, 0x0B90, 0x0} /*46.250000 MHz*/ ,
+ {{' ',' ',' ','1'}, 0x0E50, 0x0} /*57.250000 MHz*/ ,
+ {{' ',' ',' ','2'}, 0x1010, 0x0} /*64.250000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x1590, 0x0} /*86.250000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x17D0, 0x0} /*95.250000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x1990, 0x0} /*102.250000 MHz*/ ,
+ {{' ',' ','5','A'}, 0x2290, 0x0} /*138.250000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x2BD0, 0x0} /*175.250000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x2D90, 0x0} /*182.250000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x2F50, 0x0} /*189.250000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x3110, 0x0} /*196.250000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3450, 0x0} /*209.250000 MHz*/ ,
+ {{' ',' ','1','1'}, 0x3610, 0x0} /*216.250000 MHz*/ ,
+ {{' ',' ','1','2'}, 0x37D0, 0x0} /*223.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x83D0, 0x0} /*527.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x8590, 0x0} /*534.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x8750, 0x0} /*541.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x8910, 0x0} /*548.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x8AD0, 0x0} /*555.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x8C90, 0x0} /*562.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x8E50, 0x0} /*569.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x9010, 0x0} /*576.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x91D0, 0x0} /*583.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x9390, 0x0} /*590.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x9550, 0x0} /*597.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x9710, 0x0} /*604.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x98D0, 0x0} /*611.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x9A90, 0x0} /*618.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x9C50, 0x0} /*625.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0x9E10, 0x0} /*632.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0x9FD0, 0x0} /*639.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0xA190, 0x0} /*646.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0xA350, 0x0} /*653.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0xA510, 0x0} /*660.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0xA6D0, 0x0} /*667.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0xA890, 0x0} /*674.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0xAA50, 0x0} /*681.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0xAC10, 0x0} /*688.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0xADD0, 0x0} /*695.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0xAF90, 0x0} /*702.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0xB150, 0x0} /*709.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0xB310, 0x0} /*716.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0xB4D0, 0x0} /*723.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0xB690, 0x0} /*730.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0xB850, 0x0} /*737.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0xBA10, 0x0} /*744.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0xBBD0, 0x0} /*751.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0xBD90, 0x0} /*758.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0xBF50, 0x0} /*765.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0xC110, 0x0} /*772.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0xC2D0, 0x0} /*779.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0xC490, 0x0} /*786.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0xC650, 0x0} /*793.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0xC810, 0x0} /*800.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0xC9D0, 0x0} /*807.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0xCB90, 0x0} /*814.250000 MHz*/
+};
+
+XC3028_CHANNEL_MAP XC3028_channel_map_australia_air = {
+ 56,
+ XC3028_channels_australia_air
+};
+
+XC3028_CHANNEL XC3028_channels_australia_cable[80] = {
+ {{' ',' ','1','1'}, 0x1590, 0x0} /*86.250000 MHz*/ ,
+ {{' ',' ','1','2'}, 0x17D0, 0x0} /*95.250000 MHz*/ ,
+ {{' ',' ','1','3'}, 0x1990, 0x0} /*102.250000 MHz*/ ,
+ {{' ',' ','1','4'}, 0x1B90, 0x0} /*110.250000 MHz*/ ,
+ {{' ',' ','1','5'}, 0x1D50, 0x0} /*117.250000 MHz*/ ,
+ {{' ',' ','1','6'}, 0x1F10, 0x0} /*124.250000 MHz*/ ,
+ {{' ',' ','1','7'}, 0x20D0, 0x0} /*131.250000 MHz*/ ,
+ {{' ',' ','1','8'}, 0x2290, 0x0} /*138.250000 MHz*/ ,
+ {{' ',' ','1','9'}, 0x24D0, 0x0} /*147.250000 MHz*/ ,
+ {{' ',' ','2','0'}, 0x2690, 0x0} /*154.250000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x2850, 0x0} /*161.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x2A10, 0x0} /*168.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x2BD0, 0x0} /*175.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x2D90, 0x0} /*182.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x2F50, 0x0} /*189.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x3110, 0x0} /*196.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x3450, 0x0} /*209.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x3610, 0x0} /*216.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x3810, 0x0} /*224.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x39D0, 0x0} /*231.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x3B90, 0x0} /*238.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x3D50, 0x0} /*245.250000 MHz*/ ,
+ {{' ',' ',' ','1'}, 0x3F10, 0x0} /*252.250000 MHz*/ ,
+ {{' ',' ',' ','2'}, 0x40D0, 0x0} /*259.250000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x4290, 0x0} /*266.250000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x4410, 0x0} /*272.250000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x4610, 0x0} /*280.250000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x47D0, 0x0} /*287.250000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x4990, 0x0} /*294.250000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x4B50, 0x0} /*301.250000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x4D10, 0x0} /*308.250000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x4ED0, 0x0} /*315.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x5090, 0x0} /*322.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x5250, 0x0} /*329.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x5410, 0x0} /*336.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x55D0, 0x0} /*343.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x5790, 0x0} /*350.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x5950, 0x0} /*357.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x5B10, 0x0} /*364.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x5CD0, 0x0} /*371.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x5E90, 0x0} /*378.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x6050, 0x0} /*385.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0x6250, 0x0} /*393.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0x63D0, 0x0} /*399.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0x6590, 0x0} /*406.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0x6750, 0x0} /*413.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0x6910, 0x0} /*420.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0x6AD0, 0x0} /*427.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0x6C90, 0x0} /*434.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0x6E50, 0x0} /*441.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0x7010, 0x0} /*448.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0x71D0, 0x0} /*455.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0x7390, 0x0} /*462.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0x7550, 0x0} /*469.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0x7710, 0x0} /*476.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0x78D0, 0x0} /*483.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0x7A90, 0x0} /*490.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0x7C50, 0x0} /*497.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0x7E10, 0x0} /*504.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0x7FD0, 0x0} /*511.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0x8190, 0x0} /*518.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0x83D0, 0x0} /*527.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0x8590, 0x0} /*534.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0x8750, 0x0} /*541.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0x8910, 0x0} /*548.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0x8AD0, 0x0} /*555.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0x8C90, 0x0} /*562.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0x8E50, 0x0} /*569.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0x9010, 0x0} /*576.250000 MHz*/ ,
+ {{' ',' ','7','0'}, 0x91D0, 0x0} /*583.250000 MHz*/ ,
+ {{' ',' ','7','1'}, 0x9390, 0x0} /*590.250000 MHz*/ ,
+ {{' ',' ','7','2'}, 0x9550, 0x0} /*597.250000 MHz*/ ,
+ {{' ',' ','7','3'}, 0x9710, 0x0} /*604.250000 MHz*/ ,
+ {{' ',' ','7','4'}, 0x98D0, 0x0} /*611.250000 MHz*/ ,
+ {{' ',' ','7','5'}, 0x9A90, 0x0} /*618.250000 MHz*/ ,
+ {{' ',' ','7','6'}, 0x9C50, 0x0} /*625.250000 MHz*/ ,
+ {{' ',' ','7','7'}, 0x9E10, 0x0} /*632.250000 MHz*/ ,
+ {{' ',' ','7','8'}, 0x9FD0, 0x0} /*639.250000 MHz*/ ,
+ {{' ',' ','7','9'}, 0xA190, 0x0} /*646.250000 MHz*/ ,
+ {{' ',' ','8','0'}, 0xA350, 0x0} /*653.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_australia_cable = {
+ 80,
+ XC3028_channels_australia_cable
+};
+
+XC3028_CHANNEL XC3028_channels_digital_air[68] = {
+ {{' ',' ',' ','2'}, 0x0DD0, 0x0} /*55.250000 MHz*/ ,
+ {{' ',' ',' ','3'}, 0x0F50, 0x0} /*61.250000 MHz*/ ,
+ {{' ',' ',' ','4'}, 0x10D0, 0x0} /*67.250000 MHz*/ ,
+ {{' ',' ',' ','5'}, 0x1350, 0x0} /*77.250000 MHz*/ ,
+ {{' ',' ',' ','6'}, 0x14D0, 0x0} /*83.250000 MHz*/ ,
+ {{' ',' ',' ','7'}, 0x2BD0, 0x0} /*175.250000 MHz*/ ,
+ {{' ',' ',' ','8'}, 0x2D50, 0x0} /*181.250000 MHz*/ ,
+ {{' ',' ',' ','9'}, 0x2ED0, 0x0} /*187.250000 MHz*/ ,
+ {{' ',' ','1','0'}, 0x3050, 0x0} /*193.250000 MHz*/ ,
+ {{' ',' ','1','1'}, 0x31D0, 0x0} /*199.250000 MHz*/ ,
+ {{' ',' ','1','2'}, 0x3350, 0x0} /*205.250000 MHz*/ ,
+ {{' ',' ','1','3'}, 0x34D0, 0x0} /*211.250000 MHz*/ ,
+ {{' ',' ','1','4'}, 0x75D0, 0x0} /*471.250000 MHz*/ ,
+ {{' ',' ','1','5'}, 0x7750, 0x0} /*477.250000 MHz*/ ,
+ {{' ',' ','1','6'}, 0x78D0, 0x0} /*483.250000 MHz*/ ,
+ {{' ',' ','1','7'}, 0x7A50, 0x0} /*489.250000 MHz*/ ,
+ {{' ',' ','1','8'}, 0x7BD0, 0x0} /*495.250000 MHz*/ ,
+ {{' ',' ','1','9'}, 0x7D50, 0x0} /*501.250000 MHz*/ ,
+ {{' ',' ','2','0'}, 0x7ED0, 0x0} /*507.250000 MHz*/ ,
+ {{' ',' ','2','1'}, 0x8050, 0x0} /*513.250000 MHz*/ ,
+ {{' ',' ','2','2'}, 0x81D0, 0x0} /*519.250000 MHz*/ ,
+ {{' ',' ','2','3'}, 0x8350, 0x0} /*525.250000 MHz*/ ,
+ {{' ',' ','2','4'}, 0x84D0, 0x0} /*531.250000 MHz*/ ,
+ {{' ',' ','2','5'}, 0x8650, 0x0} /*537.250000 MHz*/ ,
+ {{' ',' ','2','6'}, 0x87D0, 0x0} /*543.250000 MHz*/ ,
+ {{' ',' ','2','7'}, 0x8950, 0x0} /*549.250000 MHz*/ ,
+ {{' ',' ','2','8'}, 0x8AD0, 0x0} /*555.250000 MHz*/ ,
+ {{' ',' ','2','9'}, 0x8C50, 0x0} /*561.250000 MHz*/ ,
+ {{' ',' ','3','0'}, 0x8DD0, 0x0} /*567.250000 MHz*/ ,
+ {{' ',' ','3','1'}, 0x8F50, 0x0} /*573.250000 MHz*/ ,
+ {{' ',' ','3','2'}, 0x90D0, 0x0} /*579.250000 MHz*/ ,
+ {{' ',' ','3','3'}, 0x9250, 0x0} /*585.250000 MHz*/ ,
+ {{' ',' ','3','4'}, 0x93D0, 0x0} /*591.250000 MHz*/ ,
+ {{' ',' ','3','5'}, 0x9550, 0x0} /*597.250000 MHz*/ ,
+ {{' ',' ','3','6'}, 0x96D0, 0x0} /*603.250000 MHz*/ ,
+ {{' ',' ','3','7'}, 0x9850, 0x0} /*609.250000 MHz*/ ,
+ {{' ',' ','3','8'}, 0x99D0, 0x0} /*615.250000 MHz*/ ,
+ {{' ',' ','3','9'}, 0x9B50, 0x0} /*621.250000 MHz*/ ,
+ {{' ',' ','4','0'}, 0x9CD0, 0x0} /*627.250000 MHz*/ ,
+ {{' ',' ','4','1'}, 0x9E50, 0x0} /*633.250000 MHz*/ ,
+ {{' ',' ','4','2'}, 0x9FD0, 0x0} /*639.250000 MHz*/ ,
+ {{' ',' ','4','3'}, 0xA150, 0x0} /*645.250000 MHz*/ ,
+ {{' ',' ','4','4'}, 0xA2D0, 0x0} /*651.250000 MHz*/ ,
+ {{' ',' ','4','5'}, 0xA450, 0x0} /*657.250000 MHz*/ ,
+ {{' ',' ','4','6'}, 0xA5D0, 0x0} /*663.250000 MHz*/ ,
+ {{' ',' ','4','7'}, 0xA750, 0x0} /*669.250000 MHz*/ ,
+ {{' ',' ','4','8'}, 0xA8D0, 0x0} /*675.250000 MHz*/ ,
+ {{' ',' ','4','9'}, 0xAA50, 0x0} /*681.250000 MHz*/ ,
+ {{' ',' ','5','0'}, 0xABD0, 0x0} /*687.250000 MHz*/ ,
+ {{' ',' ','5','1'}, 0xAD50, 0x0} /*693.250000 MHz*/ ,
+ {{' ',' ','5','2'}, 0xAED0, 0x0} /*699.250000 MHz*/ ,
+ {{' ',' ','5','3'}, 0xB050, 0x0} /*705.250000 MHz*/ ,
+ {{' ',' ','5','4'}, 0xB1D0, 0x0} /*711.250000 MHz*/ ,
+ {{' ',' ','5','5'}, 0xB350, 0x0} /*717.250000 MHz*/ ,
+ {{' ',' ','5','6'}, 0xB4D0, 0x0} /*723.250000 MHz*/ ,
+ {{' ',' ','5','7'}, 0xB650, 0x0} /*729.250000 MHz*/ ,
+ {{' ',' ','5','8'}, 0xB7D0, 0x0} /*735.250000 MHz*/ ,
+ {{' ',' ','5','9'}, 0xB950, 0x0} /*741.250000 MHz*/ ,
+ {{' ',' ','6','0'}, 0xBAD0, 0x0} /*747.250000 MHz*/ ,
+ {{' ',' ','6','1'}, 0xBC50, 0x0} /*753.250000 MHz*/ ,
+ {{' ',' ','6','2'}, 0xBDD0, 0x0} /*759.250000 MHz*/ ,
+ {{' ',' ','6','3'}, 0xBF50, 0x0} /*765.250000 MHz*/ ,
+ {{' ',' ','6','4'}, 0xC0D0, 0x0} /*771.250000 MHz*/ ,
+ {{' ',' ','6','5'}, 0xC250, 0x0} /*777.250000 MHz*/ ,
+ {{' ',' ','6','6'}, 0xC3D0, 0x0} /*783.250000 MHz*/ ,
+ {{' ',' ','6','7'}, 0xC550, 0x0} /*789.250000 MHz*/ ,
+ {{' ',' ','6','8'}, 0xC6D0, 0x0} /*795.250000 MHz*/ ,
+ {{' ',' ','6','9'}, 0xC850, 0x0} /*801.250000 MHz*/
+};
+XC3028_CHANNEL_MAP XC3028_channel_map_digital_air = {
+ 68,
+ XC3028_channels_digital_air
+};
+
+
+#endif
+
diff --git a/api/xc3028_control.c b/api/xc3028_control.c
new file mode 100644
index 0000000..fc5ce53
--- /dev/null
+++ b/api/xc3028_control.c
@@ -0,0 +1,549 @@
+//
+// Automatically generated C source file for
+// control of the XC3028 via the i2c interface.
+//
+// Filename : xc3028_control.c
+// Generated : 7/3/2007 2:48:24 PM
+//
+// (c) 2007, Xceive Corporation
+//
+//
+// Disclaimer:
+//
+// Xceive assumes no responsibility for any consequences arising from the use
+// of this computer code, nor from any infringement of patents or the rights of
+// third parties that may result from its use. No license is granted by
+// implication or otherwise under any patent or other rights of Xceive. The
+// customer is responsible for assuring that proper design and operating
+// safeguards are observed to minimize inherent and procedural hazards. Xceive
+// assumes no responsibility for applications assistance or customer product
+// design.
+// The present computer code is not authorized for use in medical, life-support
+// equipment, or any other application involving a potential risk of severe
+// property or environmental damage, personal injury, or death without prior
+// express written approval of Xceive. Any such use is understood to be
+// entirely at the user's risk.
+//
+// History:
+//
+// 8/4/2005 rpp : Changes for firmware v2.2
+// Changed 32-bit i2c register writes to have subaddress msb = 1:
+// 1) Power-down (0x0008_0000 => 0x8008_0000)
+// 2) S-Code sequence (0x2000_0000 => 0xA000_0000)
+// 3) Set RF Channel (0x0002_0000 => 0x8002_0000)
+//
+//
+
+
+
+//#include <math.h> //for Linux
+#include "xc3028_control.h"
+#include "xc3028_channelmaps.h"
+#include "xc3028_scodes.h"
+#include "xc3028_firmwares.h"
+
+
+#define XCEIVE_XC3028_SUBADDR_FREQ_ERROR 0x0001
+#define XCEIVE_XC3028_SUBADDR_LOCK 0x0002
+#define XCEIVE_XC3028_SUBADDR_VERSION 0x0004
+#define XCEIVE_XC3028_SUBADDR_PRODUCT_ID 0x0008
+#define XCEIVE_XC3028_SUBADDR_HSYNC_FREQ 0x0010
+#define XCEIVE_XC3028_SUBADDR_FRAME_LINES 0x0020
+#define XCEIVE_XC3028_SUBADDR_QUALITY 0x0040
+#define XCEIVE_XC3028_SUBADDR_ADC_ENVELOPE 0x0100
+
+
+/* *************************************************************** */
+/* GLOBAL VARIABLES */
+/* *************************************************************** */
+
+XC3028_TV_MODE XC3028_current_tv_mode = {0,0,0};
+XC3028_CHANNEL_MAP *XC3028_current_channel_map_ptr = 0;
+XC3028_CHANNEL XC3028_current_channel = {{' ',' ',' ',' '}, 0, 0};
+
+
+
+/* *************************************************************** */
+/* *************************************************************** */
+/* */
+/* FOLLOWING FUNCTIONS TO BE IMPLEMENTED BY CUSTOMER */
+/* */
+/* *************************************************************** */
+/* *************************************************************** */
+
+
+int xc3028_send_i2c_data(unsigned char *bytes_to_send, int nb_bytes_to_send);
+int xc3028_read_i2c_data(unsigned char *bytes_received, int nb_bytes_to_receive);
+int xc3028_reset();
+int xc3028_wait(int wait_ms);
+
+
+
+
+
+
+/* *************************************************************** */
+/* *************************************************************** */
+/* */
+/* CODE PROVIDED BY XCEIVE */
+/* */
+/* *************************************************************** */
+/* *************************************************************** */
+
+
+
+int xc3028_load_i2c_sequence(XC3028_I2C_SEQUENCE i2c_sequence)
+{
+
+ int i,nbytes_to_send,pos,result;
+ unsigned int length, index;
+ unsigned char buf[XC3028_MAX_I2C_WRITE_LENGTH];
+
+ index=0;
+
+ while ((i2c_sequence.sequence[index]!=0xFF) || (i2c_sequence.sequence[index+1]!=0xFF)) {
+
+ length = i2c_sequence.sequence[index]*256 + i2c_sequence.sequence[index+1];
+
+ if (length==0x0000) {
+ //this is in fact a RESET command
+ result = xc3028_reset();
+ index+=2;
+ if (result!=XC3028_RESULT_SUCCESS)
+ return result;
+ } else if (length & 0x8000) {
+ //this is in fact a WAIT command
+ result = xc3028_wait(length & 0x7FFF);
+ index+=2;
+ if (result!=XC3028_RESULT_SUCCESS)
+ return result;
+ } else {
+ //send i2c data whilst ensuring individual transactions do
+ //not exceed XC3028_MAX_I2C_WRITE_LENGTH bytes
+ index+=2;
+ buf[0] = i2c_sequence.sequence[index];
+ pos = 1;
+ while (pos < length) {
+
+ if ( (length-pos) > XC3028_MAX_I2C_WRITE_LENGTH-1) {
+ nbytes_to_send = XC3028_MAX_I2C_WRITE_LENGTH;
+ } else {
+ nbytes_to_send = (length-pos+1);
+ }
+
+ for (i=1;i<nbytes_to_send;i++) {
+ buf[i] = i2c_sequence.sequence[index+pos+i-1];
+ }
+
+ result = xc3028_send_i2c_data(buf, nbytes_to_send);
+
+ if (result!=XC3028_RESULT_SUCCESS)
+ return result;
+
+ pos += nbytes_to_send-1;
+ }
+ index+=length;
+ }
+ }
+
+
+ return XC3028_RESULT_SUCCESS;
+}
+
+
+int xc3028_get_reg(unsigned short int subaddr, unsigned short int *data)
+{
+ unsigned char buf[2];
+ int result;
+
+ buf[0]=(subaddr>>8) & 0xFF;
+ buf[1]=subaddr & 0xFF;
+ result = xc3028_send_i2c_data(buf, 2);
+ if (result!=XC3028_RESULT_SUCCESS)
+ return result;
+
+ result = xc3028_read_i2c_data(buf, 2);
+ if (result!=XC3028_RESULT_SUCCESS)
+ return result;
+
+ (*data) = buf[0];
+ (*data) = ((*data) << 8) + buf[1];
+
+ return XC3028_RESULT_SUCCESS;
+}
+
+
+int xc3028_initialize(XC3028_TV_MODE* new_tv_mode_ptr, XC3028_CHANNEL_MAP* new_channel_map_ptr)
+{
+
+ int result;
+ int base_firmware_changed = (new_tv_mode_ptr->base_firmware_ptr != XC3028_current_tv_mode.base_firmware_ptr);
+ int std_firmware_changed = (new_tv_mode_ptr->std_firmware_ptr != XC3028_current_tv_mode.std_firmware_ptr);
+
+ // if base firmware has changed, then do hardware reset and reload base
+ // firmware file
+ if (base_firmware_changed) {
+ result = xc3028_reset();
+ if (result!=XC3028_RESULT_SUCCESS)
+ return result;
+
+ result = xc3028_load_i2c_sequence(*(new_tv_mode_ptr->base_firmware_ptr));
+ if (result!=XC3028_RESULT_SUCCESS)
+ return result;
+ }
+
+ // if base firmware has changed -or- standard-specific firmware has
+ // changed then reload standard-specific firmware file
+ if (base_firmware_changed || std_firmware_changed) {
+ result = xc3028_load_i2c_sequence(*(new_tv_mode_ptr->std_firmware_ptr));
+ if (result!=XC3028_RESULT_SUCCESS)
+ return result;
+ }
+
+ XC3028_current_tv_mode = *new_tv_mode_ptr;
+ XC3028_current_channel_map_ptr = new_channel_map_ptr;
+
+ // if base firmware has changed -or- standard-specific firmware has
+ // changed then re-write RF channel
+
+ if (base_firmware_changed || std_firmware_changed) {
+ //do not return error if channel is incorrect...
+ xc3028_set_channel(XC3028_current_channel);
+ }
+
+ return XC3028_RESULT_SUCCESS;
+}
+
+int xc3028_shutdown()
+{
+ //unsigned char buf[4] = {0x00, 0x08, 0x00, 0x00};
+ unsigned char buf[4] = {0x80, 0x08, 0x00, 0x00}; //modified for firmware v2.2
+ int res;
+
+ xc3028_send_i2c_data(buf, 4); //no ack check
+
+ //reset current firmware pointers to force firmware reload
+ //during subsequent call to xc3028_initialize()
+ XC3028_current_tv_mode.base_firmware_ptr=0;
+ XC3028_current_tv_mode.std_firmware_ptr=0;
+
+ return 0;
+}
+
+int xc3028_set_frequency(long frequency_in_hz)
+{
+ unsigned int frequency_code;
+ int result;
+ XC3028_CHANNEL new_channel;
+
+ if (XC3028_current_channel_map_ptr == 0)
+ return XC3028_RESULT_NO_CHANNELMAP_SPECIFIED;
+
+// if ((frequency_in_mhz>1023) || (frequency_in_mhz<1))
+ if ((frequency_in_hz>1023000000) || (frequency_in_hz<1))
+ return XC3028_RESULT_OUT_OF_RANGE;
+
+// frequency_code = (unsigned int)floor(frequency_in_mhz/0.015625);
+ frequency_code = (unsigned int)(frequency_in_hz/15625);
+
+ new_channel.frequency = frequency_code;
+ new_channel.dcode = 0xFF;
+
+ return xc3028_set_channel(new_channel);
+}
+
+
+int xc3028_send_scode(unsigned char dcode)
+{
+ unsigned char buf[4];
+ int result;
+
+ //buf[0] = 0x20;
+ buf[0] = 0xA0; // modified for firmware v2.2
+ buf[1] = 0x00;
+ buf[2] = 0x00;
+ buf[3] = 0x00;
+
+ if (XC3028_current_tv_mode.scode_table_ptr==0) {
+ return XC3028_RESULT_SUCCESS;
+ }
+
+ result = xc3028_send_i2c_data(buf, 4);
+ if (result!=XC3028_RESULT_SUCCESS)
+ return result;
+
+ result = xc3028_send_i2c_data((*(XC3028_current_tv_mode.scode_table_ptr))[dcode], 12);
+ if (result!=XC3028_RESULT_SUCCESS)
+ return result;
+
+ buf[0] = 0x00;
+ buf[1] = 0x8C;
+
+ result = xc3028_send_i2c_data(buf, 2);
+ if (result!=XC3028_RESULT_SUCCESS)
+ return result;
+
+ return XC3028_RESULT_SUCCESS;
+}
+
+int xc3028_set_channel(XC3028_CHANNEL new_channel)
+{
+ int i,result;
+ unsigned int frequency;
+ unsigned char dcode;
+ unsigned char buf[4];
+
+ XC3028_current_channel = new_channel;
+
+ frequency = new_channel.frequency;
+ if (frequency==0) {
+ if (XC3028_current_channel_map_ptr == 0) {
+ return XC3028_RESULT_NO_CHANNELMAP_SPECIFIED;
+ }
+
+ //lookup frequency from table using identifier
+ for (i=0;i<XC3028_current_channel_map_ptr->nb_channels;i++) {
+ if ( (XC3028_current_channel_map_ptr->channels[i].identifier[0] == new_channel.identifier[0]) &&
+ (XC3028_current_channel_map_ptr->channels[i].identifier[1] == new_channel.identifier[1]) &&
+ (XC3028_current_channel_map_ptr->channels[i].identifier[2] == new_channel.identifier[2]) &&
+ (XC3028_current_channel_map_ptr->channels[i].identifier[3] == new_channel.identifier[3]) ) {
+ frequency = XC3028_current_channel_map_ptr->channels[i].frequency;
+ }
+ }
+ }
+
+ if (frequency==0)
+ return XC3028_RESULT_INVALID_CHANNEL_IDENTIFIER;
+
+ /* if supplied dcode is 0xFF, then lookup dcode using current channel map */
+ dcode = new_channel.dcode;
+ if (dcode==0xFF) {
+ if (XC3028_current_channel_map_ptr == 0) {
+ return XC3028_RESULT_NO_CHANNELMAP_SPECIFIED;
+ }
+
+ dcode=0; //default value if no close channel found
+ for (i=0;i<(XC3028_current_channel_map_ptr->nb_channels);i++) {
+ if ( (frequency > XC3028_current_channel_map_ptr->channels[i].frequency - 64) &&
+ (frequency < XC3028_current_channel_map_ptr->channels[i].frequency + 64) ) {
+ dcode = XC3028_current_channel_map_ptr->channels[i].dcode;
+ }
+ }
+ }
+
+ result = xc3028_send_scode(dcode);
+ if (result!=XC3028_RESULT_SUCCESS)
+ return result;
+
+ //buf[0] = 0x00;
+ buf[0] = 0x80; // modified for firmware v2.2
+ buf[1] = 0x02;
+ buf[2] = 0x00;
+ buf[3] = 0x00;
+
+ result = xc3028_send_i2c_data(buf, 4);
+ if (result!=XC3028_RESULT_SUCCESS)
+ return result;
+
+ buf[0] = 0x00;
+ buf[1] = dcode & 0x0F;
+ buf[2] = (frequency>>8) % 256;
+ buf[3] = (frequency) % 256;
+
+ return xc3028_send_i2c_data(buf, 4);
+}
+
+// Obtain current frequency error of XC3028.
+// Refer to datasheet for values.
+int xc3028_get_frequency_error(long *frequency_error_hz)
+{
+ unsigned short int data;
+ short int signed_data;
+ int result;
+
+ result = xc3028_get_reg(XCEIVE_XC3028_SUBADDR_FREQ_ERROR, &data);
+ if (result)
+ return result;
+
+ signed_data = (short int)data;
+ (*frequency_error_hz) = signed_data * 15625;
+
+ return 0;
+}
+
+// Obtain current lock status of XC3028.
+// Refer to datasheet for values.
+int xc3028_get_lock_status(unsigned short int *lock_status)
+{
+ return xc3028_get_reg(XCEIVE_XC3028_SUBADDR_LOCK, lock_status);
+}
+
+// Obtain Version codes from XC3028.
+// Refer to datasheet for values.
+int xc3028_get_version(unsigned char* hw_majorversion,
+ unsigned char* hw_minorversion,
+ unsigned char* fw_majorversion,
+ unsigned char* fw_minorversion)
+{
+ unsigned short int data;
+ int result;
+
+ result = xc3028_get_reg(XCEIVE_XC3028_SUBADDR_VERSION, &data);
+ if (result)
+ return result;
+
+ (*hw_majorversion) = (data>>12) & 0x0F;
+ (*hw_minorversion) = (data>>8) & 0x0F;
+ (*fw_majorversion) = (data>>4) & 0x0F;
+ (*fw_minorversion) = (data) & 0x0F;
+
+ return 0;
+ }
+
+ // Obtain Product ID from XC3028.
+ // Refer to datasheet for values.
+int xc3028_get_product_id(unsigned short int *product_id) {
+ return xc3028_get_reg(XCEIVE_XC3028_SUBADDR_PRODUCT_ID, product_id);
+ }
+
+ // Obtain current horizontal video frequency as measured by XC3028.
+ // Refer to datasheet for values.
+int xc3028_get_hsync_freq(long *hsync_freq_hz)
+ {
+ unsigned short int data;
+ int result;
+
+ result = xc3028_get_reg(XCEIVE_XC3028_SUBADDR_HSYNC_FREQ, &data);
+ if (result)
+ return result;
+
+ (*hsync_freq_hz) = (data&0x0fff)*7630;
+
+ return 0;
+ }
+
+ // Obtain current number of lines per frame as measured by XC3028.
+ // Refer to datasheet for values.
+int xc3028_get_frame_lines(unsigned short int *frame_lines)
+ {
+ unsigned short int data;
+ int result;
+
+ result = xc3028_get_reg(XCEIVE_XC3028_SUBADDR_FRAME_LINES, &data);
+ if (result)
+ return result;
+
+ (*frame_lines) = (data & 0x03ff);
+
+ return 0;
+ }
+
+ // Obtain current video signal quality as measured by XC3028.
+ // Refer to datasheet for values.
+int xc3028_get_quality(unsigned short int *quality)
+ {
+ return xc3028_get_reg(XCEIVE_XC3028_SUBADDR_QUALITY, quality);
+ }
+
+// Scan via 2.5MHz increments from freq_min to freq_max and update table
+// with frequencies of channels found. For all channels that lock, we do
+// additional check on carrier stability and quality level
+int xc3028_full_scan(unsigned int freq_min, unsigned int freq_max, int freq_list_size, unsigned int *freq_list, int *nb_freq_found )
+ {
+ int num_channels = 0;
+ XC3028_CHANNEL curr_channel;
+ unsigned short int lock_status;
+ long freq_error, min_freq_error, max_freq_error;
+ unsigned short int quality, max_quality;
+ int res;
+
+ curr_channel.frequency = freq_min;
+ curr_channel.dcode = 0xFF;
+
+ while ((num_channels<freq_list_size) && (curr_channel.frequency<freq_max)) {
+
+ res=xc3028_set_channel(curr_channel);
+ if (res!=XC3028_RESULT_SUCCESS)
+ return res;
+
+ *nb_freq_found = num_channels;
+
+ //poll lock register
+ lock_status=0;
+ while (!lock_status) {
+ res=xc3028_get_lock_status(&lock_status);
+ if (res!=XC3028_RESULT_SUCCESS)
+ return res;
+ }
+
+ if (lock_status!=1) {
+ //no channel found
+ curr_channel.frequency += 160; // 160*15.625khz = 2.5 MHz
+ } else {
+ //locked
+
+ xc3028_wait(6);
+
+ res=xc3028_get_frequency_error(&freq_error);
+ if (res!=XC3028_RESULT_SUCCESS) return res;
+ max_freq_error = freq_error;
+ min_freq_error = freq_error;
+
+ res=xc3028_get_quality(&quality);
+ if (res!=XC3028_RESULT_SUCCESS) return res;
+ max_quality=quality;
+
+ xc3028_wait(6);
+
+ res=xc3028_get_frequency_error(&freq_error);
+ if (res!=XC3028_RESULT_SUCCESS) return res;
+ max_freq_error = (max_freq_error>freq_error) ? max_freq_error : freq_error;
+ min_freq_error = (min_freq_error<freq_error) ? min_freq_error : freq_error;
+
+ res=xc3028_get_quality(&quality);
+ if (res!=XC3028_RESULT_SUCCESS) return res;
+ max_quality=(max_quality>quality) ? max_quality : quality;
+
+ xc3028_wait(6);
+
+ res=xc3028_get_frequency_error(&freq_error);
+ if (res!=XC3028_RESULT_SUCCESS) return res;
+ max_freq_error = (max_freq_error>freq_error) ? max_freq_error : freq_error;
+ min_freq_error = (min_freq_error<freq_error) ? min_freq_error : freq_error;
+
+ res=xc3028_get_quality(&quality);
+ if (res!=XC3028_RESULT_SUCCESS) return res;
+ max_quality=(max_quality>quality) ? max_quality : quality;
+
+
+ //We got lock, but now we check that carrier is stable and that quality is sufficient
+ if (((max_freq_error-min_freq_error)<60000) && (max_quality>0)) {
+ //add new channel
+// freq_list[num_channels]=curr_channel.frequency + floor(freq_error / 15625.0);
+ freq_list[num_channels]=(int) (curr_channel.frequency + (unsigned int)(freq_error / 15625));
+
+ if (num_channels>0) {
+ //checking for duplicate in table
+ if ((freq_list[num_channels-1]<freq_list[num_channels]+4) && (freq_list[num_channels-1]>freq_list[num_channels]-4) ) {
+ //previous channel is same: cancel new entry
+ num_channels--;
+ }
+ }
+
+ num_channels++;
+
+ // update channel frequency for next scan step
+ curr_channel.frequency += 384; // 384*15.625khz = 6 MHz
+ } else {
+ // update channel frequency for next scan step
+ curr_channel.frequency += 160; // 160*15.625khz = 2.5 MHz
+ }
+ }
+ }
+
+ (*nb_freq_found) = num_channels;
+
+ return XC3028_RESULT_SUCCESS;
+ }
+
+
diff --git a/api/xc3028_control.h b/api/xc3028_control.h
new file mode 100644
index 0000000..14e32fe
--- /dev/null
+++ b/api/xc3028_control.h
@@ -0,0 +1,180 @@
+//
+// Automatically generated C header file for
+// control of the XC3028L via the i2c interface.
+//
+// Filename : xc3028_control.h
+// Generated : 7/3/2007 2:48:24 PM
+//
+// (c) 2007, Xceive Corporation
+//
+//
+// Disclaimer:
+//
+// Xceive assumes no responsibility for any consequences arising from the use
+// of this computer code, nor from any infringement of patents or the rights of
+// third parties that may result from its use. No license is granted by
+// implication or otherwise under any patent or other rights of Xceive. The
+// customer is responsible for assuring that proper design and operating
+// safeguards are observed to minimize inherent and procedural hazards. Xceive
+// assumes no responsibility for applications assistance or customer product
+// design.
+// The present computer code is not authorized for use in medical, life-support
+// equipment, or any other application involving a potential risk of severe
+// property or environmental damage, personal injury, or death without prior
+// express written approval of Xceive. Any such use is understood to be
+// entirely at the user's risk.
+//
+//
+
+#ifndef __XC3028_CONTROL_H
+#define __XC3028_CONTROL_H
+
+/* *********************************************************************** */
+/* Defines */
+/* *********************************************************************** */
+
+#define XC3028_MAX_I2C_WRITE_LENGTH 52
+
+#define XC3028_RESULT_SUCCESS 0
+#define XC3028_RESULT_RESET_FAILURE 1
+#define XC3028_RESULT_I2C_WRITE_FAILURE 2
+#define XC3028_RESULT_I2C_READ_FAILURE 3
+#define XC3028_RESULT_WAIT_FAILURE 4
+#define XC3028_RESULT_OUT_OF_RANGE 5
+#define XC3028_RESULT_INVALID_CHANNEL_IDENTIFIER 6
+#define XC3028_RESULT_NO_CHANNELMAP_SPECIFIED 7
+
+/* *********************************************************************** */
+/* Type Declarations */
+/* *********************************************************************** */
+
+/*
+ This represents an I2C firmware file encoded as a string of unsigned char.
+ Format is as follows:
+
+ char[0 ]=len0_MSB -> len = len_MSB * 256 + len_LSB
+ char[1 ]=len0_LSB -> length of first write transaction
+ char[2 ]=data0 -> first byte to be sent
+ char[3 ]=data1
+ char[4 ]=data2
+ char[ ]=...
+ char[M ]=dataN -> last byte to be sent
+ char[M+1]=len1_MSB -> len = len_MSB * 256 + len_LSB
+ char[M+2]=len1_LSB -> length of second write transaction
+ char[M+3]=data0
+ char[M+4]=data1
+ ...
+ etc.
+
+ The [len] value should be interpreted as follows:
+
+ len= len_MSB _ len_LSB
+ len=1111_1111_1111_1111 : End of I2C_SEQUENCE
+ len=0000_0000_0000_0000 : Reset command: Do hardware reset
+ len=0NNN_NNNN_NNNN_NNNN : Normal transaction: number of bytes = {1:32767)
+ len=1WWW_WWWW_WWWW_WWWW : Wait command: wait for {1:32767} ms
+
+ For the RESET and WAIT commands, the two following bytes will contain
+ immediately the length of the following transaction.
+
+*/
+
+
+typedef struct {
+ unsigned char *sequence;
+} XC3028_I2C_SEQUENCE;
+
+typedef unsigned char XC3028_SCODE_TABLE[16][12];
+
+typedef struct {
+ char identifier[4];
+ unsigned int frequency;
+ unsigned char dcode;
+} XC3028_CHANNEL;
+
+typedef struct {
+ int nb_channels;
+ XC3028_CHANNEL *channels;
+} XC3028_CHANNEL_MAP;
+
+typedef struct {
+ XC3028_I2C_SEQUENCE *base_firmware_ptr;
+ XC3028_I2C_SEQUENCE *std_firmware_ptr;
+ XC3028_SCODE_TABLE *scode_table_ptr;
+} XC3028_TV_MODE;
+
+typedef struct _XC3028_Current_Modes
+{
+ XC3028_TV_MODE XC3028_current_tv_mode;
+ XC3028_CHANNEL_MAP *XC3028_current_channel_map_ptr;
+ XC3028_CHANNEL XC3028_current_channel;
+}XC3028_Current_Modes;
+
+/* *********************************************************************** */
+/* Dummy functions to be implemented by customer */
+/* *********************************************************************** */
+
+// Sends data bytes to xc3028 via I2C starting with
+// bytes_to_send[0] and ending with bytes_to_send[nb_bytes_to_send-1]
+// Returns one of the XCEIVE_XC3028_RESULT result codes listed above
+int i2c_send_to_xc3028(unsigned char *bytes_to_send, int nb_bytes_to_send);
+// Reads data bytes from xc3028 via I2C starting with
+// bytes_received[0] and ending with bytes_received[nb_bytes_to_receive-1]
+// Returns one of the XCEIVE_XC3028_RESULT result codes listed above
+int i2c_receive_from_xc3028(unsigned char *bytes_received, int nb_bytes_to_receive);
+// Does hardware reset
+// Returns one of the XCEIVE_XC3028_RESULT result codes listed above
+int reset_xc3028();
+// Waits for wait_ms milliseconds
+// Returns one of the XCEIVE_XC3028_RESULT result codes listed above
+int wait_xc3028(int wait_ms);
+
+/* *********************************************************************** */
+/* Functions implemented in xc3028_init.c file */
+/* All return one of the XCEIVE_XC3028_RESULT result codes as listed above */
+/* *********************************************************************** */
+
+// Initialize device according to supplied tv mode.
+// Supplied channel map will be used for future calls to xc3028_set_channel.
+int xc3028_initialize(XC3028_TV_MODE* new_tv_mode_ptr, XC3028_CHANNEL_MAP* new_channel_map_ptr);
+
+// Switch to new RF channel.
+// Set channel.frequency=0 to enable lookup of frequency+dcode using channel.identifier
+// Set channel.dcode to 0xFF to enable dcode lookup from channel map, otherwise
+// provided value is used instead.
+int xc3028_set_channel(XC3028_CHANNEL new_channel);
+
+int xc3028_set_frequency(long frequency_in_hz);
+
+// Power-down device.
+// To restart, call xc3028_initialize().
+int xc3028_shutdown();
+
+// Get current frequency error.
+int xc3028_get_frequency_error(long *frequency_error_hz);
+
+// Get lock status.
+int xc3028_get_lock_status(unsigned short int *lock_status);
+
+// Get device version information.
+int xc3028_get_version( unsigned char* hw_majorversion,unsigned char* hw_minorversion,
+ unsigned char* fw_majorversion, unsigned char* fw_minorversion);
+
+// Get device product ID.
+int xc3028_get_product_id(unsigned short int *product_id);
+
+// Get horizontal sync frequency.
+int xc3028_get_hsync_freq(long *hsync_freq_hz);
+
+// Get number of lines per frame.
+int xc3028_get_frame_lines(unsigned short int *frame_lines);
+
+// Get quality estimate.
+int xc3028_get_quality(unsigned short int *quality);
+
+// Do full scan for channels
+int xc3028_full_scan(unsigned int freq_min, unsigned int freq_max, int freq_list_size, unsigned int *freq_list, int *nb_freq_found);
+
+#endif
+
+
diff --git a/api/xc3028_firmwares.h b/api/xc3028_firmwares.h
new file mode 100644
index 0000000..349e057
--- /dev/null
+++ b/api/xc3028_firmwares.h
@@ -0,0 +1,16191 @@
+//
+// Automatically generated C header file for
+// control of the XC3028L via the i2c interface.
+//
+// Filename : xc3028_firmwares.h
+// Generated : 7/3/2007 2:48:22 PM
+// Firmware version : 3.6
+//
+// (c) 2007, Xceive Corporation
+//
+
+#ifndef __XC3028_FIRMWARES_H
+#define __XC3028_FIRMWARES_H
+
+#include "xc3028_scodes.h"
+#include "xc3028_control.h"
+
+
+// *************************************************************
+// *** LIST OF AVAILABLE TV_MODES
+// *** TV_MODE is selected during call to xc3028_initialize()
+// ***
+// *** 1) XC3028_tv_mode_m_n_ntsc_pal_btsc_if
+// *** 2) XC3028_tv_mode_m_n_ntsc_pal_btsc_if_lcd
+// *** 3) XC3028_tv_mode_m_n_ntsc_pal_btsc_if_lcd_nogd
+// *** 4) XC3028_tv_mode_m_n_ntsc_pal_a2_if
+// *** 5) XC3028_tv_mode_m_n_ntsc_pal_a2_if_lcd
+// *** 6) XC3028_tv_mode_m_n_ntsc_pal_a2_if_lcd_nogd
+// *** 7) XC3028_tv_mode_m_n_ntsc_pal_mts
+// *** 8) XC3028_tv_mode_m_n_ntsc_pal_mts_lcd
+// *** 9) XC3028_tv_mode_m_n_ntsc_pal_mts_lcd_nogd
+// *** 10) XC3028_tv_mode_m_n_ntsc_pal_a2_mono
+// *** 11) XC3028_tv_mode_m_n_ntsc_pal_a2_mono_lcd
+// *** 12) XC3028_tv_mode_m_n_ntsc_pal_a2_mono_lcd_nogd
+// *** 13) XC3028_tv_mode_m_n_ntsc_pal_eiaj
+// *** 14) XC3028_tv_mode_i_pal_nicam
+// *** 15) XC3028_tv_mode_b_g_pal_a2_a
+// *** 16) XC3028_tv_mode_b_g_pal_nicam_a
+// *** 17) XC3028_tv_mode_b_g_pal_a2_b
+// *** 18) XC3028_tv_mode_b_g_pal_nicam_b
+// *** 19) XC3028_tv_mode_l_secam_nicam
+// *** 20) XC3028_tv_mode_lp_secam_nicam
+// *** 21) XC3028_tv_mode_d_k_pal_a2
+// *** 22) XC3028_tv_mode_d_k_pal_nicam
+// *** 23) XC3028_tv_mode_d_k_secam_a2_dk1
+// *** 24) XC3028_tv_mode_d_k_secam_a2_l_dk3
+// *** 25) XC3028_tv_mode_fm_radio_input2
+// *** 26) XC3028_tv_mode_fm_radio_input1
+// *** 27) XC3028_tv_mode_dtv6_atsc_lg_6_0mhz
+// *** 28) XC3028_tv_mode_dtv6_atsc_ati_6_38mhz
+// *** 29) XC3028_tv_mode_dtv6_atsc_oren_5_38mhz
+// *** 30) XC3028_tv_mode_dtv6_atsc_oren_3_6mhz
+// *** 31) XC3028_tv_mode_dtv6_atsc_toyota_3_88mhz
+// *** 32) XC3028_tv_mode_dtv6_atsc_toyota_7_94mhz
+// *** 33) XC3028_tv_mode_dtv6_qam_6_0mhz
+// *** 34) XC3028_tv_mode_dtv8_dibcom_5_2mhz
+// *** 35) XC3028_tv_mode_dtv78_dibcom_5_2mhz
+// *** 36) XC3028_tv_mode_dtv7_dibcom_5_2mhz
+// *** 37) XC3028_tv_mode_dtv6_zarlink_qam_4_56mhz
+// *** 38) XC3028_tv_mode_dtv8_zarlink_4_56mhz
+// *** 39) XC3028_tv_mode_dtv78_zarlink_4_56mhz
+// *** 40) XC3028_tv_mode_dtv7_zarlink_4_56mhz
+// *** 41) XC3028_tv_mode_dtv8_china_temporary
+// *** 42) XC3028_tv_mode_i_pal_nicam_mono
+// *** 43) XC3028_tv_mode_b_g_pal_a2_a_mono
+// *** 44) XC3028_tv_mode_b_g_pal_nicam_a_mono
+// *** 45) XC3028_tv_mode_b_g_pal_a2_b_mono
+// *** 46) XC3028_tv_mode_b_g_pal_nicam_b_mono
+// *** 47) XC3028_tv_mode_d_k_pal_a2_mono
+// *** 48) XC3028_tv_mode_d_k_pal_nicam_mono
+// *** 49) XC3028_tv_mode_d_k_secam_a2_dk1_mono
+// *** 50) XC3028_tv_mode_d_k_secam_a2_l_dk3_mono
+// *** 51) XC3028_tv_mode_dtv6_afatech_qam_4_56mhz
+// *** 52) XC3028_tv_mode_dtv8_afatech_4_56mhz
+// *** 53) XC3028_tv_mode_dtv7_afatech_4_56mhz
+// ***
+// *************************************************************
+
+// ************************************************************
+// *** BASE FIRMWARE FILES
+// *** These declarations are not used directly by user
+// ************************************************************
+
+unsigned char XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init_SEQUENCE[9146] = {
+
+ 0x00, 0x00, /* RESET */
+ 0x0D, 0x53, /* Length = 3411 bytes */
+ 0x2A, 0x02, 0x19, 0xE0, 0x00, 0x07, 0xF5, 0xD4, 0x00, 0xC4,
+ 0xF0, 0xD6, 0xAE, 0xC6, 0x10, 0xD5, 0xF5, 0xC5, 0x7A, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x01, 0xC4, 0xF0, 0xD6, 0x51, 0xC6,
+ 0x02, 0xD5, 0x99, 0xC5, 0xA3, 0xE0, 0x04, 0x07, 0xD8, 0xD4,
+ 0x03, 0xC4, 0xF0, 0xD6, 0x04, 0xD5, 0x87, 0xC5, 0x06, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x04, 0xC4, 0xF0, 0xD6, 0x00, 0xD5,
+ 0x1F, 0xC5, 0x2C, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0x05, 0xC4,
+ 0xF0, 0xD6, 0x00, 0xC6, 0x06, 0xD5, 0x00, 0xC5, 0x40, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x06, 0xC4, 0xF0, 0xD6, 0x80, 0xD5,
+ 0xCD, 0xC5, 0x20, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0x07, 0xC4,
+ 0xF0, 0xD6, 0x00, 0xC6, 0xC0, 0xD5, 0x05, 0xC5, 0x2F, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x09, 0xC4, 0xF0, 0xD6, 0xC0, 0xC6,
+ 0x42, 0xD5, 0x67, 0xC5, 0x3C, 0xE0, 0x04, 0x07, 0xD8, 0xD4,
+ 0x0F, 0xC4, 0xF0, 0xD6, 0x3F, 0xC6, 0xC0, 0xD5, 0x11, 0xC5,
+ 0x11, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0x06, 0xC4, 0xF0, 0xD6,
+ 0x00, 0xC6, 0x24, 0xD5, 0x0E, 0xC5, 0x2E, 0xE0, 0x04, 0x07,
+ 0xD8, 0xD4, 0xFF, 0xC4, 0xFF, 0xF4, 0x09, 0xD4, 0x0F, 0xC4,
+ 0x70, 0xE0, 0x04, 0x07, 0xE7, 0x86, 0x69, 0x86, 0x69, 0xA2,
+ 0x61, 0xD4, 0x06, 0xC4, 0xF0, 0xD6, 0x00, 0xC6, 0x24, 0xD5,
+ 0xC0, 0xC5, 0x20, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0xFF, 0xC4,
+ 0xFF, 0xF4, 0x09, 0xD4, 0x0F, 0xC4, 0x70, 0xE0, 0x04, 0x07,
+ 0xE7, 0x86, 0x69, 0x86, 0x69, 0x12, 0x62, 0x98, 0x21, 0xF8,
+ 0x05, 0x02, 0x88, 0xF2, 0x0D, 0xD8, 0x80, 0x4C, 0x28, 0xF8,
+ 0x05, 0x02, 0x94, 0xE0, 0x00, 0x07, 0x82, 0xD4, 0x0E, 0xC4,
+ 0xF0, 0xD6, 0x00, 0xD5, 0x00, 0xE0, 0x04, 0x07, 0xD8, 0xD0,
+ 0x01, 0xC0, 0x70, 0xE0, 0x00, 0x07, 0xE7, 0xD3, 0x0F, 0x71,
+ 0x23, 0xF1, 0x01, 0x04, 0x7F, 0xD0, 0x60, 0xD1, 0x00, 0xC1,
+ 0x40, 0xD2, 0x0B, 0x00, 0x02, 0xF0, 0x1C, 0xA0, 0x03, 0xD1,
+ 0x00, 0xF0, 0x1C, 0xD0, 0x01, 0xD1, 0x03, 0xD2, 0x03, 0xD3,
+ 0x01, 0xE0, 0x00, 0x07, 0xBF, 0xD4, 0x9E, 0xA4, 0x45, 0xD5,
+ 0x10, 0xC5, 0x01, 0xF4, 0x5C, 0xD5, 0x40, 0xC5, 0x0B, 0xA4,
+ 0x43, 0xF4, 0x5C, 0xD3, 0x00, 0xC3, 0xF0, 0xD5, 0xD6, 0xD4,
+ 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3, 0x01, 0xC3, 0xF0, 0xD5,
+ 0x03, 0xC5, 0x19, 0xD4, 0x01, 0xE0, 0x03, 0x07, 0xD8, 0xD3,
+ 0x03, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD3, 0x04, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD3, 0x05, 0xC3, 0xF0, 0xD5, 0x00, 0xD4,
+ 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3, 0x06, 0xC3, 0xF0, 0xD5,
+ 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3, 0x07, 0xC3,
+ 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3,
+ 0x09, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD3, 0x0E, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD3, 0x0F, 0xC3, 0xF0, 0xD5, 0x00, 0xD4,
+ 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD0,
+ 0xFF, 0xC0, 0x03, 0xD1, 0x54, 0xD3, 0x01, 0xC3, 0xF0, 0xD5,
+ 0x03, 0xC5, 0x99, 0xD4, 0x01, 0xC4, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0,
+ 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2,
+ 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1,
+ 0x4C, 0xA1, 0x13, 0xD5, 0x00, 0xC5, 0x19, 0xD4, 0x01, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD5, 0x00, 0xC5, 0x99, 0xD4, 0x01, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3,
+ 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84,
+ 0x46, 0xD2, 0x00, 0xC2, 0x40, 0x34, 0x42, 0xF5, 0x18, 0xE0,
+ 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x23, 0xC5,
+ 0x19, 0xD4, 0x02, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x23, 0xC5,
+ 0x99, 0xD4, 0x02, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3,
+ 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2,
+ 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05,
+ 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x20, 0xC5, 0x19, 0xD4,
+ 0x02, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD5, 0x20, 0xC5, 0x99, 0xD4, 0x02, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C,
+ 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5,
+ 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5,
+ 0x23, 0xC5, 0x19, 0xD4, 0x03, 0xC4, 0xF0, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5,
+ 0x23, 0xC5, 0x99, 0xD4, 0x03, 0xC4, 0xF0, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3,
+ 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84,
+ 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0,
+ 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x20, 0xC5,
+ 0x19, 0xD4, 0x03, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x20, 0xC5, 0x99, 0xD4,
+ 0x03, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07,
+ 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34,
+ 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1,
+ 0x13, 0xD5, 0x23, 0xC5, 0x19, 0xD4, 0x04, 0xC4, 0xF0, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD5, 0x23, 0xC5, 0x99, 0xD4, 0x04, 0xC4, 0xF0, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C,
+ 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5,
+ 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5,
+ 0x20, 0xC5, 0x19, 0xD4, 0x04, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x20, 0xC5,
+ 0x99, 0xD4, 0x04, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0,
+ 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2,
+ 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1,
+ 0x4C, 0xA1, 0x13, 0xD5, 0x23, 0xC5, 0x19, 0xD4, 0x05, 0xC4,
+ 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD5, 0x23, 0xC5, 0x99, 0xD4, 0x05, 0xC4,
+ 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07,
+ 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34,
+ 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1,
+ 0x13, 0xD5, 0x20, 0xC5, 0x19, 0xD4, 0x05, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5,
+ 0x20, 0xC5, 0x99, 0xD4, 0x05, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3,
+ 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2,
+ 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05,
+ 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x23, 0xC5, 0x19, 0xD4,
+ 0x06, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x23, 0xC5, 0x99, 0xD4,
+ 0x06, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0,
+ 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2,
+ 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1,
+ 0x4C, 0xA1, 0x13, 0xD5, 0x20, 0xC5, 0x19, 0xD4, 0x06, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD5, 0x20, 0xC5, 0x99, 0xD4, 0x06, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3,
+ 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84,
+ 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0,
+ 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x00, 0xD4,
+ 0x00, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xEC,
+ 0xAF, 0xD1, 0x54, 0xD2, 0xA0, 0xF1, 0x2C, 0xA1, 0x13, 0xD2,
+ 0x90, 0xC2, 0x01, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0x44, 0xC2,
+ 0x01, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0xDC, 0xC2, 0x02, 0xF1,
+ 0x2C, 0xA1, 0x13, 0xD2, 0x3C, 0xC2, 0x02, 0xF1, 0x2C, 0xA1,
+ 0x13, 0xD2, 0x58, 0xC2, 0x04, 0xF1, 0x2C, 0xA1, 0x13, 0xD2,
+ 0x2C, 0xC2, 0x03, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0x3C, 0xC2,
+ 0x06, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0x88, 0xC2, 0x04, 0xF1,
+ 0x2C, 0xA1, 0x13, 0xD2, 0x04, 0xC2, 0x09, 0xF1, 0x2C, 0xA1,
+ 0x13, 0xD2, 0xD0, 0xC2, 0x06, 0xF1, 0x2C, 0xA1, 0x13, 0xD2,
+ 0x20, 0xC2, 0x0D, 0xF1, 0x2C, 0xA1, 0x13, 0xD5, 0x0E, 0xD6,
+ 0x00, 0xD7, 0x03, 0xD8, 0x0E, 0xE0, 0x05, 0x07, 0xBF, 0xD5,
+ 0x0F, 0xD6, 0x12, 0xD7, 0x14, 0xE0, 0x05, 0x07, 0xA3, 0xD6,
+ 0x0E, 0xD7, 0x0E, 0xE0, 0x05, 0x07, 0xA3, 0xD5, 0xFF, 0xC5,
+ 0xFF, 0xF5, 0x09, 0xD5, 0x01, 0xC5, 0x80, 0xD6, 0x02, 0xE0,
+ 0x05, 0x07, 0xD8, 0xD4, 0x0F, 0xC4, 0xF0, 0xD5, 0x01, 0xC5,
+ 0x01, 0xD6, 0x30, 0xC6, 0x40, 0xE0, 0x07, 0x07, 0x16, 0x87,
+ 0x7C, 0xD8, 0xBC, 0xF8, 0x7C, 0x1E, 0xEB, 0xE0, 0x04, 0x07,
+ 0xD8, 0xD0, 0x00, 0xD1, 0x16, 0xD2, 0x16, 0xD3, 0x01, 0xE0,
+ 0x00, 0x07, 0xBF, 0xD0, 0x01, 0xD1, 0x07, 0xD2, 0x08, 0xD3,
+ 0x00, 0xE0, 0x00, 0x07, 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xD4,
+ 0x00, 0xC4, 0xA0, 0xF4, 0x09, 0xD0, 0x00, 0xE0, 0x00, 0x07,
+ 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xD4, 0x0F, 0xC4, 0xF0, 0xD5,
+ 0xFE, 0xC5, 0xFE, 0xD6, 0x30, 0xC6, 0x40, 0xE0, 0x07, 0x07,
+ 0x16, 0x87, 0x7C, 0x1E, 0xEB, 0xE0, 0x04, 0x07, 0xD8, 0xC6,
+ 0xC0, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0xFF, 0xC4, 0xFF, 0xF4,
+ 0x09, 0xD4, 0x0F, 0xC4, 0x70, 0xE0, 0x04, 0x07, 0xE7, 0xDA,
+ 0xFF, 0x27, 0x6E, 0x2D, 0x5A, 0x88, 0x5F, 0x88, 0x83, 0x87,
+ 0x78, 0xDA, 0x8E, 0xAA, 0xA7, 0xFA, 0x7C, 0xAA, 0xA9, 0xFA,
+ 0x8C, 0xAA, 0xA9, 0xFA, 0x9C, 0xD4, 0x0F, 0xC4, 0xF0, 0xD5,
+ 0xFE, 0xC5, 0xFE, 0xD6, 0x3F, 0xC6, 0xC0, 0xD6, 0x30, 0xC6,
+ 0x40, 0xE0, 0x07, 0x07, 0x16, 0x87, 0x7C, 0x1E, 0xEB, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD0, 0x01, 0xE0, 0x00, 0x07, 0xBF, 0xD0,
+ 0x01, 0xD1, 0x16, 0xD2, 0x16, 0xD3, 0x01, 0xE0, 0x00, 0x07,
+ 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xD2, 0x60, 0xA2, 0x23, 0xF1,
+ 0x28, 0xA2, 0x23, 0xF0, 0x28, 0xD2, 0x00, 0xD4, 0x00, 0xD3,
+ 0x00, 0xD5, 0x04, 0xE0, 0x06, 0x07, 0x38, 0x02, 0x26, 0x04,
+ 0x48, 0x03, 0x37, 0xB5, 0x52, 0xF5, 0x05, 0x05, 0x2F, 0x82,
+ 0x29, 0x84, 0x49, 0x83, 0x39, 0x25, 0x43, 0x24, 0x23, 0xD2,
+ 0x60, 0xA2, 0x23, 0xF2, 0x1C, 0xA2, 0x23, 0xF2, 0x0C, 0xD7,
+ 0x70, 0xC7, 0x0D, 0xA6, 0x41, 0xE0, 0x06, 0x07, 0x1D, 0xD6,
+ 0xBD, 0xF6, 0x7C, 0xD7, 0x0A, 0xC7, 0x0B, 0xA6, 0x41, 0xE0,
+ 0x06, 0x07, 0x1D, 0xD6, 0xBE, 0xF6, 0x7C, 0xD7, 0x51, 0xC7,
+ 0x0A, 0xA6, 0x41, 0xE0, 0x06, 0x07, 0x1D, 0xD6, 0xBF, 0xF6,
+ 0x7C, 0xD0, 0xD3, 0xC0, 0x01, 0xD1, 0xE0, 0xC1, 0x01, 0x32,
+ 0x04, 0xA2, 0x23, 0x82, 0x23, 0x33, 0x15, 0xA3, 0x33, 0x83,
+ 0x33, 0xD6, 0x80, 0x14, 0x26, 0x26, 0x44, 0x86, 0x6F, 0x18,
+ 0x46, 0xD6, 0xBA, 0xF6, 0x8C, 0xD6, 0x80, 0x14, 0x26, 0x26,
+ 0x44, 0x86, 0x6F, 0x18, 0x46, 0xD9, 0x03, 0x29, 0x89, 0x99,
+ 0x9E, 0x98, 0x86, 0x19, 0x89, 0xA9, 0x97, 0x89, 0x92, 0xA8,
+ 0x90, 0xD6, 0x41, 0xC6, 0x24, 0xF8, 0x01, 0x05, 0x79, 0x06,
+ 0x69, 0xD8, 0xBB, 0xF8, 0x6C, 0xD6, 0x80, 0x14, 0x26, 0x26,
+ 0x44, 0x86, 0x6F, 0x18, 0x46, 0xD9, 0x0C, 0x29, 0x89, 0x99,
+ 0x9E, 0xD6, 0x12, 0x28, 0x86, 0x98, 0x8E, 0x09, 0x89, 0xF9,
+ 0x0D, 0xA9, 0x9F, 0xA9, 0x9B, 0xD7, 0x0F, 0x4C, 0x97, 0x56,
+ 0x7D, 0x26, 0x96, 0x46, 0x87, 0xD7, 0x08, 0xD8, 0x0B, 0xD9,
+ 0x04, 0xE0, 0x06, 0x07, 0xBF, 0xD6, 0x80, 0x14, 0x26, 0x26,
+ 0x44, 0x86, 0x6F, 0x18, 0x46, 0xD9, 0x06, 0x29, 0x89, 0x99,
+ 0x9E, 0xB9, 0x9C, 0xF9, 0x0D, 0xD7, 0x0F, 0x4C, 0x97, 0x56,
+ 0x7D, 0x29, 0x96, 0x49, 0x87, 0xA7, 0x90, 0x26, 0x97, 0xD7,
+ 0x18, 0xD8, 0x1B, 0xD9, 0x05, 0xE0, 0x06, 0x07, 0xBF, 0xD5,
+ 0x0E, 0xC5, 0x70, 0xE0, 0x05, 0x07, 0xE7, 0x87, 0x74, 0x87,
+ 0x7F, 0x87, 0x7F, 0xD5, 0x01, 0xF7, 0x01, 0x05, 0xB9, 0xD5,
+ 0x02, 0xB7, 0x76, 0xF7, 0x01, 0x05, 0xB9, 0xD5, 0x00, 0xD6,
+ 0x0C, 0xD7, 0x0D, 0xD8, 0x0E, 0xE0, 0x05, 0x07, 0xBF, 0xD5,
+ 0x00, 0xD6, 0x0E, 0xD7, 0x0E, 0xD8, 0x0E, 0xE0, 0x05, 0x07,
+ 0xA3, 0xD6, 0x12, 0xD7, 0x14, 0xE0, 0x05, 0x07, 0xBF, 0xED,
+ 0xD5, 0xD2, 0x00, 0xC2, 0x13, 0x33, 0x12, 0x04, 0x13, 0x15,
+ 0x13, 0x5C, 0xC0, 0x5D, 0x0D, 0x23, 0xCD, 0xF3, 0x05, 0x05,
+ 0xD4, 0xA0, 0x11, 0xF0, 0x02, 0xF0, 0x0E, 0xF0, 0x0E, 0xE0,
+ 0x00, 0x07, 0xF9, 0xE0, 0x00, 0x07, 0xF5, 0xF0, 0x0E, 0xEE,
+ 0x36, 0xF0, 0x0A, 0xFB, 0x08, 0xF9, 0x18, 0xBA, 0x9A, 0xB6,
+ 0x62, 0x1C, 0xB6, 0x1C, 0x8A, 0xF6, 0x18, 0xF8, 0x01, 0x06,
+ 0x1B, 0xFB, 0x01, 0x06, 0x4A, 0xB9, 0x92, 0xF9, 0x05, 0x05,
+ 0xEF, 0xDA, 0x13, 0xF8, 0x28, 0xFA, 0x84, 0xBB, 0xB2, 0xFB,
+ 0x01, 0x06, 0x4A, 0xBB, 0xB8, 0xFB, 0x01, 0x06, 0x1F, 0xD7,
+ 0x00, 0xC7, 0x94, 0xF7, 0x78, 0xD9, 0x00, 0xC9, 0xFF, 0x19,
+ 0x79, 0xF9, 0x01, 0x06, 0x4C, 0xD7, 0x00, 0xC7, 0xD0, 0xF9,
+ 0x78, 0xD8, 0x00, 0xF7, 0x8C, 0xF9, 0x05, 0x06, 0x1B, 0xD8,
+ 0x12, 0xF8, 0x88, 0xF2, 0x8C, 0xA8, 0x83, 0xD9, 0x00, 0xF8,
+ 0x9C, 0xDA, 0x10, 0xFA, 0xA8, 0xA8, 0x83, 0xF8, 0xAC, 0xD8,
+ 0x00, 0xD7, 0x00, 0xC7, 0x64, 0xF7, 0x8C, 0xD8, 0x11, 0xF8,
+ 0x88, 0xF4, 0x8C, 0xD8, 0x00, 0xC8, 0x8C, 0xD9, 0x01, 0xF8,
+ 0x9C, 0xF0, 0x06, 0xF0, 0x02, 0xD9, 0x13, 0xFA, 0x98, 0xF2,
+ 0xAC, 0xEE, 0x0E, 0xD8, 0x00, 0xD7, 0x00, 0xC7, 0x60, 0xF7,
+ 0x8C, 0xD8, 0x0E, 0xF8, 0x88, 0xF4, 0x8C, 0xD8, 0x0F, 0xF8,
+ 0x88, 0xF2, 0x8C, 0xA8, 0x83, 0xD9, 0x00, 0xF8, 0x9C, 0xDA,
+ 0x0D, 0xFA, 0xA8, 0xA8, 0x83, 0xF8, 0xAC, 0xD8, 0x00, 0xC8,
+ 0x8C, 0xD9, 0x05, 0xF8, 0x9C, 0xF0, 0x06, 0xF0, 0x02, 0xD9,
+ 0x00, 0xC9, 0xAC, 0xD8, 0x0C, 0xFA, 0x80, 0xF9, 0xAC, 0xD9,
+ 0x00, 0xC9, 0x08, 0xD7, 0x00, 0xC7, 0x34, 0xF7, 0x9C, 0xC9,
+ 0x38, 0xD7, 0x00, 0xC7, 0x44, 0xF7, 0x9C, 0xC9, 0x20, 0xD7,
+ 0x00, 0xC7, 0x48, 0xF7, 0x9C, 0xD8, 0x15, 0xF2, 0x8C, 0xF0,
+ 0x06, 0xEE, 0x4B, 0xF0, 0x0A, 0xD7, 0x15, 0xD8, 0x00, 0xC8,
+ 0x30, 0xF8, 0x7C, 0xD7, 0x00, 0xC7, 0x98, 0xF6, 0x78, 0xD8,
+ 0x1A, 0xF8, 0x6C, 0xD8, 0x00, 0xC8, 0xAC, 0xDA, 0x20, 0xF8,
+ 0xAC, 0xD9, 0x20, 0xDA, 0x0A, 0xCA, 0xF0, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x14, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x11, 0xCA, 0xF7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x15, 0xCA,
+ 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xD8, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x30, 0xCA, 0xC8, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x7C, 0xCA, 0xF8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x00, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x94, 0xCA,
+ 0xC7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x78, 0xCA, 0xF7, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xD8, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x98, 0xCA, 0xC8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x88, 0xCA, 0xF9, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x9C, 0xCA,
+ 0xF8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xDA, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xDB, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x64, 0xCA, 0xCB, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0xAC, 0xCA, 0xFB, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0xFF, 0xCA,
+ 0xD8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x07, 0xCA, 0xC8, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x6C, 0xCA, 0x26, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x7C, 0xCA, 0xF6, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x63, 0xCA, 0xA6, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x6C, 0xCA,
+ 0x26, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x9C, 0xCA, 0xF6, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x63, 0xCA, 0xA6, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x15, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x67, 0xCA, 0x17, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x01, 0xCA,
+ 0xF7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x43, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x72, 0xCA, 0xB7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x01, 0xCA, 0xF7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x43, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x06, 0xCA, 0xF0, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x42, 0xCA, 0xE8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0xEC, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0xFF, 0xCA,
+ 0xC7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x11, 0xCA, 0xF7, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0xFF, 0xCA, 0xEF, 0xF9, 0xAC, 0xF7,
+ 0x7C, 0xD8, 0x00, 0xD7, 0x00, 0xC7, 0x64, 0xF7, 0x8C, 0xD7,
+ 0x14, 0xF7, 0x11, 0xEE, 0x4A, 0xF0, 0x0E, 0x44, 0xDC, 0xF4,
+ 0x05, 0x07, 0x13, 0xD4, 0x01, 0x7F, 0xC4, 0x7C, 0x1C, 0x13,
+ 0x43, 0x61, 0x13, 0xA2, 0x31, 0x6C, 0xCD, 0xB2, 0x22, 0xA4,
+ 0x20, 0xF4, 0x05, 0x07, 0x06, 0xA1, 0x01, 0xD4, 0x0F, 0x14,
+ 0x43, 0x60, 0x04, 0x70, 0x04, 0xA4, 0x33, 0x71, 0x14, 0xEF,
+ 0x15, 0xA1, 0x01, 0xD0, 0x00, 0xF0, 0x02, 0xD0, 0x01, 0xC0,
+ 0x70, 0xE0, 0x00, 0x07, 0xE7, 0xD1, 0x0F, 0x70, 0x21, 0xF0,
+ 0x02, 0x83, 0x03, 0xA5, 0x31, 0xD4, 0x58, 0xC4, 0x4F, 0xE0,
+ 0x04, 0x06, 0xFD, 0x22, 0x14, 0x34, 0x15, 0x85, 0x3F, 0xE0,
+ 0x04, 0x06, 0xFD, 0x82, 0x29, 0x82, 0x29, 0x02, 0x24, 0xD1,
+ 0x22, 0x11, 0x12, 0xD6, 0x00, 0x4F, 0xE1, 0xD8, 0x01, 0x17,
+ 0x87, 0x21, 0x17, 0xD6, 0x10, 0x4F, 0xE1, 0xF7, 0x05, 0x07,
+ 0x37, 0xD1, 0x1F, 0xF0, 0x02, 0xD0, 0x00, 0xD1, 0x02, 0xE0,
+ 0x00, 0x07, 0x45, 0xD1, 0x00, 0xD2, 0x01, 0xE0, 0x01, 0x07,
+ 0x45, 0xD2, 0x01, 0xD3, 0x02, 0xE0, 0x02, 0x07, 0x45, 0xF0,
+ 0x02, 0xD3, 0x00, 0xC3, 0xC0, 0xD4, 0x00, 0xD5, 0x0F, 0xD6,
+ 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xD3, 0xC6, 0xC3, 0x10, 0xD4,
+ 0x10, 0xD5, 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xE0,
+ 0x03, 0x07, 0xA8, 0xD3, 0xC6, 0xC3, 0x10, 0x87, 0x1E, 0x87,
+ 0x76, 0x1F, 0xF7, 0x87, 0x0E, 0x87, 0x7C, 0x1F, 0xF7, 0xD4,
+ 0x10, 0xD5, 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xE0,
+ 0x03, 0x07, 0xA8, 0xD3, 0x10, 0xC3, 0x27, 0xF3, 0x09, 0xD3,
+ 0x01, 0xD4, 0x1F, 0xD5, 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07,
+ 0xBF, 0xE0, 0x03, 0x07, 0xA8, 0xD3, 0x10, 0xC3, 0x27, 0xF3,
+ 0x09, 0xD3, 0x00, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0xD3,
+ 0xFF, 0xC3, 0x03, 0x2C, 0x4F, 0xD3, 0x00, 0xD4, 0x1F, 0xD5,
+ 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xE0, 0x03, 0x07,
+ 0xA8, 0xF0, 0x02, 0xD0, 0x00, 0xD1, 0x2C, 0xE0, 0x00, 0x07,
+ 0xD4, 0xF0, 0x02, 0xA4, 0x43, 0xF4, 0x0D, 0xD7, 0x01, 0x2D,
+ 0xCB, 0xD6, 0x10, 0x5E, 0x0E, 0xF6, 0x01, 0x07, 0x96, 0xD6,
+ 0x10, 0x16, 0x06, 0x67, 0x76, 0x65, 0x56, 0x1F, 0xF7, 0x3F,
+ 0xF5, 0xEF, 0x9A, 0x67, 0x70, 0x65, 0x50, 0x1E, 0xE7, 0x3E,
+ 0xE5, 0x17, 0x10, 0x55, 0xDC, 0x85, 0x52, 0xB5, 0x52, 0x00,
+ 0x05, 0x84, 0x43, 0xF7, 0x05, 0x07, 0x89, 0xF0, 0x02, 0xE0,
+ 0x00, 0x07, 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xF0, 0x02, 0xD0,
+ 0x60, 0xF1, 0x08, 0xD6, 0x00, 0xC6, 0xF0, 0xD3, 0x01, 0xD2,
+ 0x10, 0xA0, 0x03, 0xF7, 0x08, 0xA0, 0x03, 0xF8, 0x08, 0x24,
+ 0xDF, 0xF4, 0x01, 0x07, 0xB7, 0xE0, 0x06, 0x07, 0xD8, 0xA6,
+ 0x63, 0x81, 0x13, 0xB2, 0x22, 0xF2, 0x05, 0x07, 0xAE, 0xD0,
+ 0x60, 0xF0, 0x1C, 0xF0, 0x02, 0xAA, 0x01, 0xA6, 0x11, 0xA7,
+ 0x21, 0xD4, 0x60, 0xF5, 0x48, 0xDB, 0x01, 0x6B, 0xB3, 0x15,
+ 0x5F, 0xF4, 0x5C, 0xA4, 0x43, 0x8B, 0x32, 0x04, 0x4B, 0xF8,
+ 0x48, 0xA4, 0x43, 0xF9, 0x48, 0xE0, 0x06, 0x07, 0x87, 0xF4,
+ 0x9C, 0xB4, 0x42, 0xF4, 0x8C, 0xF0, 0x02, 0xC0, 0x80, 0xE0,
+ 0x00, 0x07, 0xD8, 0xF0, 0x02, 0xF0, 0x0A, 0xD3, 0x00, 0xC3,
+ 0x9C, 0xF3, 0x1C, 0xC3, 0xA0, 0xF3, 0x2C, 0xC3, 0xA4, 0xF3,
+ 0x0C, 0xD3, 0x00, 0xC3, 0xA8, 0xF3, 0x38, 0xF3, 0x01, 0x07,
+ 0xE0, 0xF0, 0x06, 0xF0, 0x02, 0xF0, 0x0A, 0xD2, 0x00, 0xC2,
+ 0xA4, 0xF2, 0x0C, 0xC2, 0xA8, 0xF1, 0x28, 0xF1, 0x01, 0x07,
+ 0xEC, 0xC2, 0x9C, 0xF1, 0x28, 0xC2, 0xA0, 0xF2, 0x28, 0xF0,
+ 0x06, 0xF0, 0x02, 0xD1, 0x00, 0xC1, 0x98, 0xF1, 0x0C, 0xF0,
+ 0x02, 0xD1, 0x00, 0xC1, 0x94, 0xF0, 0x18, 0xC1, 0x98, 0xF1,
+ 0x18, 0xF0, 0x02, 0xED, 0xDC, 0x90, 0x00, 0x88, 0x00, 0x30,
+ 0x00, 0x34, 0x00, 0x24, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0xDD, 0x3D, 0xD7, 0x00, 0x15, 0x00, 0x1A, 0x0A, 0x19, 0x00,
+ 0x1E, 0x00, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xA0, 0x01, 0x76, 0x01, 0x38, 0x02,
+ 0xC0, 0x02, 0x30, 0x04, 0x20, 0x03, 0x60, 0x06, 0x5C, 0x04,
+ 0xBC, 0x09, 0x60, 0x07, 0x9C, 0x0D, 0x70, 0xFF, 0xFF, 0x7A,
+ 0xF5, 0x10, 0xAE, 0x70, 0xA5, 0x22, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x17, 0x00, 0x04, 0x2C, 0x5F, 0x00, 0x00, 0x03,
+ 0x00, 0x06, 0x00, 0x27, 0xC5, 0x21, 0xF0, 0x16, 0x27, 0xC0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x67, 0x42, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x00, 0x1C, 0xFE,
+ 0xFE, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x30, 0x00, 0x0C, 0x08, 0x30, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x02, 0x00, 0x21, 0x00, 0x00, 0x00, 0x0C, 0x00,
+ 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x2C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x50, 0x00, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x0A, 0x03, 0xA9, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0F, 0x00,
+ 0x08, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x64, /* WAIT 100[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFF, 0x00, 0x00, 0xCD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x05, 0x01, 0x96,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x02, 0xB8, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x01, 0x00, 0xE6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x08, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xE6, 0xB2, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x2C, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xE4, 0xD2, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x40, 0x12, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x01, 0x96,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x06, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x96, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xE1, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xF0, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x00, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xCF, 0xF8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x2C, 0xD3, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x60, 0x03, 0x0C, 0xCF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0D, 0xD3, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x0C, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x54, 0xD3, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0xD3, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xAA, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0xCE, 0xA1, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x04, 0xC6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x0F, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x1A, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xDE, 0xD0, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0xDC, 0xF1, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x68, 0xD0, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0x13, 0xF1, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0xB0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xF0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x11, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x1D, 0xD0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x08, 0xF0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x29, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x01, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xF0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x29, 0xE9, 0x96,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x06, 0xC2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x3C, 0xD3, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x0C, 0xD3, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x9A, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0xBD, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xF0, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x05, 0xAA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x00, 0xD0, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x28, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xB2, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x5E, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB0, 0xD5, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x21, 0x03, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x53, 0x24, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x11, 0x34, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x93, 0x11, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x08, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x53, 0xB3, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x01, 0x01, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x01, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0xD1,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x06, 0x5F, 0xEF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0x09, 0x5C, 0xC2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xF4, 0xF3, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x62, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xF6, 0xD0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x11, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x01, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x02, 0x7E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x6E, 0xD0, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x89, 0xF3, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x01, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x1A, 0xD2, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x28, 0xD3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xFE, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x3E, 0xC2, 0xFF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x09, 0xD6, 0x8A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x68, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x87, 0xD5, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x8E, 0xF3, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x23, 0xA4, 0x49,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB5, 0x52, 0xF5, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x7C, 0xD3, 0x6C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xEF, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x62, 0xD2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0xAA, 0xF3, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0xFC, 0xC4, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xF4, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x8F, 0xA2, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x2C, 0x93, 0x2B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x01, 0x01, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x00, 0xF6, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x00, 0xE0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xF0, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0E, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xBD, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x7D, 0xCD, 0xB2, 0x1E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x02, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xDB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xDA, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xD2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xCF, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xCC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xC9, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xC2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xBE, 0x80, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x0B, 0xF0, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x02, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xDF, 0xF0, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x02, 0xD1, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x18, 0x92, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3C, 0xDE, 0x82, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3C, 0xCE, 0xEA, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x36, 0xC0, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x02, 0xD0, 0xD4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x0B, 0xEA, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xD1,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x02, 0xD0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x40, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x80, 0x1A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x0B, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x02, 0xD1, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x05, 0xC7, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAA, 0x71, 0xE0, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x74, 0xD7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x10, 0x15, 0x45,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x01, 0x01, 0xE9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB6, 0x46, 0xE9, 0xEC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x74, 0xC7, 0xD5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x45, 0x8B, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x74, 0xF7, 0x84, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x64, 0xD7, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x57, 0x82, 0x25,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x0B, 0x02, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x40, 0x5F, 0xFE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x23, 0xA3, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x23, 0xD3, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x38, 0xA3, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x23, 0x70, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x02, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xF4, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xF0, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x57, 0xF0, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x08, 0xF9, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xBA, 0x9A, 0xB6, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1C, 0xB6, 0x1C, 0x8A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x18, 0xF8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x3C, 0xFB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x6B, 0xB9, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x02, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x13, 0xF8, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x84, 0xBB, 0xB2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x01, 0x02, 0x6B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xBB, 0xB8, 0xFB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x40, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0xD0, 0xF9, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xF7, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x02, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x12, 0xF8, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x8C, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x00, 0xF8, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x10, 0xFA, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x83, 0xF8, 0xAC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x64, 0xF7, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x11, 0xF8, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x8C, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC8, 0x8C, 0xD9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x9C, 0xF0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD9, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x98, 0xF2, 0xAC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x2F, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x8C, 0xD8, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x88, 0xF4, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x0F, 0xF8, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x8C, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x00, 0xF8, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x0D, 0xFA, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x83, 0xF8, 0xAC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xC8, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x05, 0xF8, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x06, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x00, 0xC9, 0xAC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x0C, 0xFA, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0xAC, 0xD9, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC9, 0x08, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x34, 0xF7, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC9, 0x38, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x44, 0xF7, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC9, 0x20, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x48, 0xF7, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x15, 0xF2, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x06, 0xEA, 0x6C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0E, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0xB3, 0xA0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x08, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x7C, 0xA0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x08, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x7C, 0xA0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x08, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x7D, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x6E, 0xF1, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xC6, 0xB0, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xF0, 0xD6, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x01, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xC7, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x09, 0xD7, 0x71,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xD1, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x8E, 0xA8, 0x51,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x38, 0xA7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x03, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x38, 0xA3, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x38, 0xA3, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1A, 0x85, 0xB8, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1C, 0x8A, 0xAA, 0x63,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1D, 0xA5, 0x29, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x02, 0xA5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x05, 0x02, 0xAA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x03, 0xA2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x02, 0xD9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x92, 0xA1, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xA2, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x02, 0xBB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x51, 0xF7, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x11, 0xE0, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xB8, 0xF5, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x12, 0x67, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xBB, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x39, 0xEA, 0xAC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x25, 0x77, 0xA2, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x01, 0x18, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x24, 0x02, 0x44, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x12, 0x43, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x03, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0xD9, 0xD3, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x3C, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x08, 0xD0, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x04, 0x40, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x08, 0x03, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x3C, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x3C, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x6E, 0xF1, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x7E, 0xD1, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x04, 0x1F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x02, 0x6E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x05, 0x02, 0x7E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x9F, 0xD3, 0xB4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x03, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0x10, 0xF2, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x0C, 0xA2, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x35, 0xB4, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x05, 0x02, 0xE4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xD2, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x0C, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xF4, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x45, 0x84, 0x44,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB3, 0x28, 0xF8, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x23, 0xF5, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x11, 0xDA, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x09, 0x04, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x0F, 0xE0, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x1F, 0xE0, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xF6, 0xC9, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x09, 0xB9, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x00, 0xE0, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xF0, 0xA9, 0x41,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAA, 0x11, 0xB3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x38, 0xE0, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xB8, 0x44, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x79, 0x5E, 0x54,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x27, 0x7A, 0xDA, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4F, 0xA9, 0x17, 0x7F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAA, 0x40, 0x27, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x27, 0x79, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x1B, 0xF2, 0x4C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x91, 0xEA, 0xF7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x9A, 0x41, 0x10, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x97, 0x13, 0x27, 0x7F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xF0, 0xF7, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xEB, 0xA2, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x04, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xBA, 0x18, 0xFA, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xF0, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x04, 0xDB, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0xB3, 0x19, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0xA6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x99, 0x91, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x6B, 0x4B, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0xB8, 0xA5, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x58, 0x19, 0x96,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x03, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0x5D, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x92, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x29, 0xD1, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEB, 0x29, 0xA7, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x1C, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0xB5, 0xF8, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x8C, 0xA2, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x02, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x5E, 0x99, 0x27,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x03, 0x5E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB7, 0x76, 0xF7, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0x55, 0xF6, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0x55, 0xF9, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x89, 0x5E, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xBA, 0xA2, 0x1B, 0x96,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x49, 0xBA, 0x9A, 0x91,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x29, 0x9A, 0xF9, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x73, 0xF7, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x08, 0x89, 0x99, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x03, 0xA6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0xB3, 0xF7, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x8E, 0x4B, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0xB8, 0xA5, 0xB5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x58, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xA7, 0xEB, 0xA6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4B, 0x04, 0xF6, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x05, 0x03, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x03, 0x5D, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x92, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x29, 0xD0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEB, 0x29, 0xF7, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0xB5, 0xF8, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x0D, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x8C, 0xA2, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x12, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x96, 0x99, 0x27,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x03, 0x96,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x73, 0xF7, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0x55, 0xF6, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0x55, 0xF9, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x89, 0xB5, 0x52,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x58, 0x16, 0xA6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x69, 0xBA, 0xA2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1B, 0x96, 0x49, 0xBA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x9A, 0x91, 0x29, 0x9A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x73, 0xF7, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x08, 0x89, 0x99, 0x17,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x03, 0xA6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0xB3, 0xA7, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x1C, 0xDB, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4B, 0x14, 0xF6, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0xB3, 0xFA, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0xB5, 0xF9, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0xA6, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xA7, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x21, 0x84, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB4, 0x42, 0x22, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0x31, 0xF5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x53, 0x5E, 0xD2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xD0, 0x1F, 0xFA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x01, 0x03, 0xAD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xF5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x25, 0x54, 0xF1, 0x5C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD3, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x32, 0x1E, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x3A, 0xA9, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x9E, 0xD5, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0x1D, 0xD3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x28, 0xA2, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x28, 0xA2, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x28, 0xA2, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x28, 0x83, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x66, 0x33, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x36, 0xB6, 0x83, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x33, 0xB3, 0x5C, 0xF4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x43, 0xCE, 0xB9, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x01, 0x03, 0xD7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xF2, 0xC6, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4E, 0xCA, 0x1F, 0xF6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0x03, 0xA2, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x73, 0x23, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x73, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xC0, 0xB2, 0x2E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x28, 0xF5, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xE8, 0x23, 0x3A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x01, 0x03, 0xE8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0x70, 0x3B, 0x4B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0xBC, 0xAB, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0x10, 0x4E, 0x5B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2A, 0x1A, 0xFA, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xEF, 0xF2, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xF4, 0xD7, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x70, 0xE0, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0xD7, 0xFF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0xD7, 0x24, 0xC7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x8F, 0x83, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x28, 0xD7, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x77, 0xF8, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x42, 0x80, 0xA7, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x78, 0x43, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x79, 0xF8, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x44, 0x80, 0xD6, 0x9E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x98, 0x21, 0x22, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x20, 0x01, 0xF0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x10, 0xF7, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x07, 0x42, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x27, 0xF6, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x69, 0xF6, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x69, 0xF6, 0x4C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x69, 0xF6, 0x5C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x08, 0xC7, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x83, 0xA6, 0x63,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x8C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xBC, 0xF6, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x0F, 0xC3, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x01, 0xC4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x38, 0xC5, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1D, 0xDA, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x8B, 0xC5, 0xC0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1D, 0xD0, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x8B, 0xD6, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x01, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xC4, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x09, 0xD7, 0x71,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0xFE, 0xC4, 0xFE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x07, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD2, 0xE3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x22, 0xD3, 0x5B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x0B, 0xF1, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x1F, 0xA4, 0x4B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x01, 0x04, 0x49,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x33, 0x32, 0x83, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB4, 0x42, 0xEC, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x08, 0xC4, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x04, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x33, 0x85, 0x53,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x33, 0x35, 0x83, 0x39,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x11, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xD2, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x28, 0xD7, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4F, 0xF3, 0xD5, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xAA, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0xD4, 0x2A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4E, 0xC3, 0xD7, 0x1E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4F, 0xF3, 0x87, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x76, 0xD6, 0xED,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4F, 0x3C, 0xD4, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x27, 0x74, 0xD5, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x74, 0x94, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x01, 0x04, 0xB2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0x94, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x05, 0x04, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x28, 0x83, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x01, 0x97, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x01, 0x04, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB3, 0x36, 0xD5, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x11, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0x3F, 0xF8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x55, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0x97, 0x3B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x01, 0x04, 0x84,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB3, 0x3C, 0x3F, 0xF8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x03, 0xD6, 0x77,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x8D, 0xF4, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0xAE, 0x08, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x43, 0x84, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x08, 0x84, 0xF7, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x52, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x4C, 0xA7, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x06, 0xD6, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEC, 0xB2, 0xA2, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x28, 0x87, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0E, 0xD6, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x05, 0xF4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xB2, 0xA2, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x28, 0x83, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB3, 0x36, 0x94, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x34, 0xF4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xAC, 0xD4, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xF8, 0xD4, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x74, 0xD5, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xDA, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0xA7, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x75, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0x86, 0x53,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x00, 0xC4, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1C, 0xCA, 0xD8, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x83, 0x86, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x08, 0x86, 0xF5, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x83, 0xF6, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x04, 0x07, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x11, 0x83, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD2, 0x54,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x28, 0x16, 0x50,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0xD0, 0x40, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x2F, 0xA3, 0x39,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x38, 0x16, 0x50,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0x0D, 0x40, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x25, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x28, 0x4D, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x05, 0x04, 0xD3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x01, 0x86, 0x4F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x7D, 0xE9, 0xD6, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x65, 0x74, 0x45,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x73, 0x35, 0x70, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x20, 0x00, 0x23, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x24, 0x44, 0x80, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x3F, 0x84, 0x4F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x40, 0x16, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x53, 0x24, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x09, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x40, 0x82, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x36, 0x04, 0x5E, 0xE3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x62, 0xB6, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x26, 0x62, 0x10, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x23, 0xB5, 0x52,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x05, 0x04, 0xF1,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0x72, 0x36, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0x01, 0x06, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x6F, 0x80, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x11, 0xD5, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x20, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0xD3, 0x8D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0x67, 0x51,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x79, 0x87, 0x77,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x06, 0xD6, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x01, 0xD5, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xFC, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0x87, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x03, 0xD6, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD5, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x58, 0xB2, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x05, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB7, 0x14, 0xD5, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xB0, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0xC2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x37, 0x12, 0xD5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xB4, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0xD2, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x33, 0x12, 0xA7, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0D, 0xD6, 0xCF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x4C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0x27, 0xF5, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xD5, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0x70, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x85, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x75, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0xD8, 0x2E, 0xE8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x0F, 0x4C, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x26, 0x64, 0x94, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x25, 0x54, 0x13, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x36, 0x1F, 0xE9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x95, 0x21, 0x1D, 0xF9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x20, 0x05, 0xF0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x50, 0x22, 0x27,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x33, 0x13, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x39, 0x13, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xED, 0x2C, 0x10, 0xED,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x8B, 0xF5, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD4, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x48, 0xD5, 0x5E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x12, 0x51, 0xD5, 0x77,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0x02, 0x11, 0x51,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x0F, 0xD5, 0x96,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0x3D, 0x1E, 0xE5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1D, 0xD5, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x68, 0xD3, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0xB0, 0xD4, 0xBF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x48, 0xF1, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x6C, 0xD3, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x90, 0xD4, 0xBE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x48, 0xD4, 0xB2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x3C, 0xD4, 0xC0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x2C, 0xD3, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x40, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x01, 0x2D, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8B, 0x92, 0x0B, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB6, 0x34, 0x16, 0x6B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8B, 0x19, 0x2F, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x08, 0xD7, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x47, 0xAB, 0x07, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x73, 0x0A, 0x67,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8A, 0xA3, 0xD2, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x01, 0xD5, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x5A, 0x85, 0x5B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2A, 0x52, 0xAA, 0xA5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8A, 0xA5, 0x5C, 0xA6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0x7A, 0x2C, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x85, 0xF2, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x05, 0x94,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xF2, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x80, 0x02, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x13, 0x32, 0x09, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2A, 0x52, 0x8A, 0xA4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0xA0, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xA5, 0xA9, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x01, 0x89, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x89, 0xDB, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xCB, 0x01, 0x46, 0x9B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x62, 0x06, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x8C, 0xFA, 0x6C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x16,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x0C, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xD0, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xF0, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xC1, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x06, 0xC2, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0xC3, 0xFB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4D, 0x3C, 0xD3, 0x64,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0xF8, 0x4E, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x20, 0xDE, 0xD2, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x40, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x82, 0x3A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x2D, 0xD8, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC8, 0x01, 0x15, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x01, 0x05, 0xCF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x39, 0xC8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x82, 0xF5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xCF, 0xD2, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0xD8, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x73, 0x38, 0xD8, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x64, 0x48, 0x84, 0x4B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x34, 0x18, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x01, 0x05, 0xE0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB8, 0x78, 0xB1, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x01, 0x05, 0xE0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x28, 0x80, 0xF8, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xB3, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0xFF, 0xF2, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0xD1, 0x2B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xC1, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x0E, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x8B, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xF0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xEC, 0xD3, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x02, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xD1, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0x81, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x02, 0x2D, 0xDE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x0D, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x82, 0xF0, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xDF, 0xD3, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x44, 0xFE, 0xF3, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x45, 0xEF, 0x2D, 0xC9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2C, 0xC5, 0xF0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x3A, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xDF, 0xD5, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xD3, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x28, 0xF5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x3D, 0xF6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x28, 0xD5, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xD8, 0xDB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x01, 0x06, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x0D, 0x5E, 0xC9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x0D, 0xF6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x31, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x54, 0xDA, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0xA8, 0xD0, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0x2B, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x9B, 0xFA, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x01, 0xEE, 0x54,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x83, 0xF5, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x5B, 0xFA, 0x5C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x15, 0xE0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xD0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x54, 0xDA, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0xA8, 0xDA, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x01, 0x06, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x31, 0xFA, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x01, 0xEE, 0x54,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0xA8, 0xDB, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x47, 0xD3, 0x46, 0x3D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x06, 0x50,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x01, 0x06, 0x51,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0xB9, 0xDB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0xBC, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x3A, 0xFB, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x3B, 0xFA, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x01, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8B, 0x38, 0x16, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAB, 0x60, 0xFB, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x5B, 0xF6, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x84, 0xF4, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8A, 0x29, 0xDB, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xAB, 0xA9, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x06, 0x6A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0xB4, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x6E, 0xDB, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x00, 0xC5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x70, 0xD5, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0xC0, 0xFB, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x70, 0xD5, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x70, 0x46, 0xB4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x85, 0xF9, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2A, 0x69, 0x9A, 0xAE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x6A, 0xB4, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x05, 0x06, 0x7E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x75, 0x17, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x7F, 0x17, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x00, 0xC9, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x95, 0x09, 0x9B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x8C, 0xFA, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x01, 0x2F, 0xBA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x9A, 0xA2, 0x19, 0x9A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x00, 0xCA, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0xA9, 0x47, 0x9B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x08, 0x09, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x99, 0x89, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x97, 0xD9, 0x81,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x5C, 0xD9, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x8C, 0xD7, 0x15,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x01, 0x06, 0xA5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x08, 0x09, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x99, 0x89, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x96, 0xD9, 0x81,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x5C, 0xA7, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x07, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x87, 0xF7, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x09, 0x77, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0xB6, 0x17, 0x7C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x1D, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x82, 0xF6, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x63, 0xD7, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x07, 0x84, 0x49,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x05, 0x06, 0xBA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x41, 0xD8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0xBC, 0x13, 0x41,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xD1, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xD0, 0x16,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x12, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xD0, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x02, 0xF0, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0xD1, 0xB2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x18, 0xD2, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x28, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xFE, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0xAF, 0xD5, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0x01, 0x5F, 0x3D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x82, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x08, 0xD6, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x80, 0xC7, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0x3F, 0xD5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x33, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0xD7, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x78, 0xF7, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0xFD, 0xD6, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC6, 0x0B, 0xD8, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0x3E, 0xF7, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0xF9, 0xD8, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x60, 0xC6, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0x3E, 0xF7, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0xF9, 0xD8, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x0A, 0xD7, 0x81,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x21, 0xA9, 0x41,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x01, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x75, 0xA4, 0x81,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x82, 0x4D, 0x49,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8A, 0x29, 0xDB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xAB, 0xAB, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x29, 0xB9, 0xD8, 0x19,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x08, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x82, 0x18, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0x85, 0xD6, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x30, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0xF5, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x1F, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0xEE, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x4C, 0xD6, 0x1D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x42, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x4C, 0xEF, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x0F, 0xD6, 0x1D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x42, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x4C, 0xD6, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0xEE, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x4C, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x55, 0xD9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x92, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x4B, 0x8A, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x03, 0x2F, 0xAB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0xB6, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x3B, 0xDA, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2E, 0x2A, 0xFA, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x3B, 0xDA, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xCA, 0x04, 0xEF, 0x3D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x00, 0xCA, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x89, 0x54, 0x09, 0x9A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x00, 0xDA, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xCA, 0xA0, 0xE0, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x8B, 0xD7, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x7B, 0x97, 0xE0, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x8B, 0x6B, 0x97,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x0A, 0x07, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x51, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x60, 0xF1, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x00, 0xC4, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x10, 0xA0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x08, 0xA0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x08, 0xD3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xDF, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x60, 0xE0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x8B, 0xA4, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x81, 0x13, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x07, 0x56,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x60, 0xF0, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD3, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x38, 0x85, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x01, 0x66, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1C, 0xCA, 0xF3, 0x4C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x33, 0x03, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x38, 0xA9, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x0D, 0xD5, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x1D, 0x88, 0x19,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x01, 0x27, 0xD6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x66, 0x65, 0x67, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1C, 0xCA, 0x3C, 0xCB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x85, 0x57, 0xC5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x72, 0xB7, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x57, 0x89, 0x93,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x05, 0x07, 0x77,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x4C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x80, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x8B, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0A, 0xD3, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x9C, 0xF3, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0xA0, 0xF3, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0xA4, 0xF3, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0xC3, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x38, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x93, 0xF0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD6, 0xBB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x68, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x4C, 0xD2, 0x67,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x3C, 0xD3, 0xC0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x02, 0xF1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xA7, 0xA2, 0x61,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x80, 0xC3, 0x8D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x09, 0xC1, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x60, 0xD1, 0xFF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0xFD, 0xF0, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x20, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0xD2, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0xDE, 0x80, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2C, 0xCD, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xC1, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x0C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xC1, 0x94,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x18, 0xC1, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x18, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0A, 0xD2, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0xA4, 0xF2, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0xA8, 0xF1, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x01, 0x07, 0xC8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x9C, 0xF1, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0xA0, 0xF2, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x06, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x08, 0xC2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x0B, 0xC3, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x48, 0x00, 0x24,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x85, 0xF5, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x26, 0x05, 0x96, 0x6E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0x06, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x82, 0xF1, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x0D, 0xD2, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x28, 0xD2, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x28, 0xD6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC6, 0x20, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x87, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x97, 0x7C, 0xA2, 0x71,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x81, 0xF8, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x78, 0x10, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x40, 0x71, 0xA1, 0x71,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x20, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0xD4, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x0E, 0xD4, 0x63, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x0F, 0xF4, 0x11, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x14, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x05, 0x90, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x00, 0x30, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x34, 0x00, 0x24, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x6C, 0x00, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x02, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x39, 0x9A, 0x00, 0x15,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x24, 0x08, 0xCD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x28, 0x00, 0x51,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x12, 0x39,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x0C, 0x80, 0xF0, 0xF7, 0x3E, 0x75, 0xC1, 0x8A, 0xE4, 0x02,
+ 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x05, 0x0F, 0xEE, 0xAA, 0x5F, 0xEA, 0x90,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x06, 0x00, 0x0A, 0x4D, 0x8C, 0xF2, 0xD8, 0xCF, 0x30, 0x79,
+ 0x9F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x0B, 0x0D, 0xA4, 0x6C,
+ 0x00, 0x10, /* Length = 16 bytes */
+ 0x0A, 0x01, 0x67, 0x24, 0x40, 0x08, 0xC3, 0x20, 0x10, 0x64,
+ 0x3C, 0xFA, 0xF7, 0xE1, 0x0C, 0x2C,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x09, 0x0B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x10, 0x13,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x16, 0x12,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1F, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x01, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x10,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 9146 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init = {
+ XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init_SEQUENCE
+};
+
+unsigned char XC3028_base_firmware_i2c_files_base_firmwares_8mhz_mts_init_SEQUENCE[9032] = {
+
+ 0x00, 0x00, /* RESET */
+ 0x0D, 0x53, /* Length = 3411 bytes */
+ 0x2A, 0x02, 0x19, 0xE0, 0x00, 0x07, 0xF5, 0xD4, 0x00, 0xC4,
+ 0xF0, 0xD6, 0xAE, 0xC6, 0x10, 0xD5, 0xF5, 0xC5, 0x7A, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x01, 0xC4, 0xF0, 0xD6, 0x51, 0xC6,
+ 0x02, 0xD5, 0x99, 0xC5, 0xA3, 0xE0, 0x04, 0x07, 0xD8, 0xD4,
+ 0x03, 0xC4, 0xF0, 0xD6, 0x04, 0xD5, 0x87, 0xC5, 0x06, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x04, 0xC4, 0xF0, 0xD6, 0x00, 0xD5,
+ 0x1F, 0xC5, 0x2C, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0x05, 0xC4,
+ 0xF0, 0xD6, 0x00, 0xC6, 0x06, 0xD5, 0x00, 0xC5, 0x40, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x06, 0xC4, 0xF0, 0xD6, 0x80, 0xD5,
+ 0xCD, 0xC5, 0x20, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0x07, 0xC4,
+ 0xF0, 0xD6, 0x00, 0xC6, 0xC0, 0xD5, 0x05, 0xC5, 0x2F, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x09, 0xC4, 0xF0, 0xD6, 0xC0, 0xC6,
+ 0x42, 0xD5, 0x67, 0xC5, 0x3C, 0xE0, 0x04, 0x07, 0xD8, 0xD4,
+ 0x0F, 0xC4, 0xF0, 0xD6, 0x3F, 0xC6, 0xC0, 0xD5, 0x11, 0xC5,
+ 0x11, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0x06, 0xC4, 0xF0, 0xD6,
+ 0x00, 0xC6, 0x24, 0xD5, 0x0E, 0xC5, 0x2E, 0xE0, 0x04, 0x07,
+ 0xD8, 0xD4, 0xFF, 0xC4, 0xFF, 0xF4, 0x09, 0xD4, 0x0F, 0xC4,
+ 0x70, 0xE0, 0x04, 0x07, 0xE7, 0x86, 0x69, 0x86, 0x69, 0xA2,
+ 0x61, 0xD4, 0x06, 0xC4, 0xF0, 0xD6, 0x00, 0xC6, 0x24, 0xD5,
+ 0xC0, 0xC5, 0x20, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0xFF, 0xC4,
+ 0xFF, 0xF4, 0x09, 0xD4, 0x0F, 0xC4, 0x70, 0xE0, 0x04, 0x07,
+ 0xE7, 0x86, 0x69, 0x86, 0x69, 0x12, 0x62, 0x98, 0x21, 0xF8,
+ 0x05, 0x02, 0x88, 0xF2, 0x0D, 0xD8, 0x80, 0x4C, 0x28, 0xF8,
+ 0x05, 0x02, 0x94, 0xE0, 0x00, 0x07, 0x82, 0xD4, 0x0E, 0xC4,
+ 0xF0, 0xD6, 0x00, 0xD5, 0x00, 0xE0, 0x04, 0x07, 0xD8, 0xD0,
+ 0x01, 0xC0, 0x70, 0xE0, 0x00, 0x07, 0xE7, 0xD3, 0x0F, 0x71,
+ 0x23, 0xF1, 0x01, 0x04, 0x7F, 0xD0, 0x60, 0xD1, 0x00, 0xC1,
+ 0x40, 0xD2, 0x0B, 0x00, 0x02, 0xF0, 0x1C, 0xA0, 0x03, 0xD1,
+ 0x00, 0xF0, 0x1C, 0xD0, 0x01, 0xD1, 0x03, 0xD2, 0x03, 0xD3,
+ 0x01, 0xE0, 0x00, 0x07, 0xBF, 0xD4, 0x9E, 0xA4, 0x45, 0xD5,
+ 0x10, 0xC5, 0x01, 0xF4, 0x5C, 0xD5, 0x40, 0xC5, 0x0B, 0xA4,
+ 0x43, 0xF4, 0x5C, 0xD3, 0x00, 0xC3, 0xF0, 0xD5, 0xD6, 0xD4,
+ 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3, 0x01, 0xC3, 0xF0, 0xD5,
+ 0x03, 0xC5, 0x19, 0xD4, 0x01, 0xE0, 0x03, 0x07, 0xD8, 0xD3,
+ 0x03, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD3, 0x04, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD3, 0x05, 0xC3, 0xF0, 0xD5, 0x00, 0xD4,
+ 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3, 0x06, 0xC3, 0xF0, 0xD5,
+ 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3, 0x07, 0xC3,
+ 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3,
+ 0x09, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD3, 0x0E, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD3, 0x0F, 0xC3, 0xF0, 0xD5, 0x00, 0xD4,
+ 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD0,
+ 0xFF, 0xC0, 0x03, 0xD1, 0x54, 0xD3, 0x01, 0xC3, 0xF0, 0xD5,
+ 0x03, 0xC5, 0x99, 0xD4, 0x01, 0xC4, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0,
+ 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2,
+ 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1,
+ 0x4C, 0xA1, 0x13, 0xD5, 0x00, 0xC5, 0x19, 0xD4, 0x01, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD5, 0x00, 0xC5, 0x99, 0xD4, 0x01, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3,
+ 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84,
+ 0x46, 0xD2, 0x00, 0xC2, 0x40, 0x34, 0x42, 0xF5, 0x18, 0xE0,
+ 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x23, 0xC5,
+ 0x19, 0xD4, 0x02, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x23, 0xC5,
+ 0x99, 0xD4, 0x02, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3,
+ 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2,
+ 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05,
+ 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x20, 0xC5, 0x19, 0xD4,
+ 0x02, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD5, 0x20, 0xC5, 0x99, 0xD4, 0x02, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C,
+ 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5,
+ 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5,
+ 0x23, 0xC5, 0x19, 0xD4, 0x03, 0xC4, 0xF0, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5,
+ 0x23, 0xC5, 0x99, 0xD4, 0x03, 0xC4, 0xF0, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3,
+ 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84,
+ 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0,
+ 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x20, 0xC5,
+ 0x19, 0xD4, 0x03, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x20, 0xC5, 0x99, 0xD4,
+ 0x03, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07,
+ 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34,
+ 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1,
+ 0x13, 0xD5, 0x23, 0xC5, 0x19, 0xD4, 0x04, 0xC4, 0xF0, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD5, 0x23, 0xC5, 0x99, 0xD4, 0x04, 0xC4, 0xF0, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C,
+ 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5,
+ 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5,
+ 0x20, 0xC5, 0x19, 0xD4, 0x04, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x20, 0xC5,
+ 0x99, 0xD4, 0x04, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0,
+ 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2,
+ 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1,
+ 0x4C, 0xA1, 0x13, 0xD5, 0x23, 0xC5, 0x19, 0xD4, 0x05, 0xC4,
+ 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD5, 0x23, 0xC5, 0x99, 0xD4, 0x05, 0xC4,
+ 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07,
+ 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34,
+ 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1,
+ 0x13, 0xD5, 0x20, 0xC5, 0x19, 0xD4, 0x05, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5,
+ 0x20, 0xC5, 0x99, 0xD4, 0x05, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3,
+ 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2,
+ 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05,
+ 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x23, 0xC5, 0x19, 0xD4,
+ 0x06, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x23, 0xC5, 0x99, 0xD4,
+ 0x06, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0,
+ 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2,
+ 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1,
+ 0x4C, 0xA1, 0x13, 0xD5, 0x20, 0xC5, 0x19, 0xD4, 0x06, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD5, 0x20, 0xC5, 0x99, 0xD4, 0x06, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3,
+ 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84,
+ 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0,
+ 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x00, 0xD4,
+ 0x00, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xEC,
+ 0xAF, 0xD1, 0x54, 0xD2, 0xA0, 0xF1, 0x2C, 0xA1, 0x13, 0xD2,
+ 0x90, 0xC2, 0x01, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0x44, 0xC2,
+ 0x01, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0xDC, 0xC2, 0x02, 0xF1,
+ 0x2C, 0xA1, 0x13, 0xD2, 0x3C, 0xC2, 0x02, 0xF1, 0x2C, 0xA1,
+ 0x13, 0xD2, 0x58, 0xC2, 0x04, 0xF1, 0x2C, 0xA1, 0x13, 0xD2,
+ 0x2C, 0xC2, 0x03, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0x3C, 0xC2,
+ 0x06, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0x88, 0xC2, 0x04, 0xF1,
+ 0x2C, 0xA1, 0x13, 0xD2, 0x04, 0xC2, 0x09, 0xF1, 0x2C, 0xA1,
+ 0x13, 0xD2, 0xD0, 0xC2, 0x06, 0xF1, 0x2C, 0xA1, 0x13, 0xD2,
+ 0x20, 0xC2, 0x0D, 0xF1, 0x2C, 0xA1, 0x13, 0xD5, 0x0E, 0xD6,
+ 0x00, 0xD7, 0x03, 0xD8, 0x0E, 0xE0, 0x05, 0x07, 0xBF, 0xD5,
+ 0x0F, 0xD6, 0x12, 0xD7, 0x14, 0xE0, 0x05, 0x07, 0xA3, 0xD6,
+ 0x0E, 0xD7, 0x0E, 0xE0, 0x05, 0x07, 0xA3, 0xD5, 0xFF, 0xC5,
+ 0xFF, 0xF5, 0x09, 0xD5, 0x01, 0xC5, 0x80, 0xD6, 0x02, 0xE0,
+ 0x05, 0x07, 0xD8, 0xD4, 0x0F, 0xC4, 0xF0, 0xD5, 0x01, 0xC5,
+ 0x01, 0xD6, 0x30, 0xC6, 0x40, 0xE0, 0x07, 0x07, 0x16, 0x87,
+ 0x7C, 0xD8, 0xBC, 0xF8, 0x7C, 0x1E, 0xEB, 0xE0, 0x04, 0x07,
+ 0xD8, 0xD0, 0x00, 0xD1, 0x16, 0xD2, 0x16, 0xD3, 0x01, 0xE0,
+ 0x00, 0x07, 0xBF, 0xD0, 0x01, 0xD1, 0x07, 0xD2, 0x08, 0xD3,
+ 0x00, 0xE0, 0x00, 0x07, 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xD4,
+ 0x00, 0xC4, 0xA0, 0xF4, 0x09, 0xD0, 0x00, 0xE0, 0x00, 0x07,
+ 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xD4, 0x0F, 0xC4, 0xF0, 0xD5,
+ 0xFE, 0xC5, 0xFE, 0xD6, 0x30, 0xC6, 0x40, 0xE0, 0x07, 0x07,
+ 0x16, 0x87, 0x7C, 0x1E, 0xEB, 0xE0, 0x04, 0x07, 0xD8, 0xC6,
+ 0xC0, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0xFF, 0xC4, 0xFF, 0xF4,
+ 0x09, 0xD4, 0x0F, 0xC4, 0x70, 0xE0, 0x04, 0x07, 0xE7, 0xDA,
+ 0xFF, 0x27, 0x6E, 0x2D, 0x5A, 0x88, 0x5F, 0x88, 0x83, 0x87,
+ 0x78, 0xDA, 0x8E, 0xAA, 0xA7, 0xFA, 0x7C, 0xAA, 0xA9, 0xFA,
+ 0x8C, 0xAA, 0xA9, 0xFA, 0x9C, 0xD4, 0x0F, 0xC4, 0xF0, 0xD5,
+ 0xFE, 0xC5, 0xFE, 0xD6, 0x3F, 0xC6, 0xC0, 0xD6, 0x30, 0xC6,
+ 0x40, 0xE0, 0x07, 0x07, 0x16, 0x87, 0x7C, 0x1E, 0xEB, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD0, 0x01, 0xE0, 0x00, 0x07, 0xBF, 0xD0,
+ 0x01, 0xD1, 0x16, 0xD2, 0x16, 0xD3, 0x01, 0xE0, 0x00, 0x07,
+ 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xD2, 0x60, 0xA2, 0x23, 0xF1,
+ 0x28, 0xA2, 0x23, 0xF0, 0x28, 0xD2, 0x00, 0xD4, 0x00, 0xD3,
+ 0x00, 0xD5, 0x04, 0xE0, 0x06, 0x07, 0x38, 0x02, 0x26, 0x04,
+ 0x48, 0x03, 0x37, 0xB5, 0x52, 0xF5, 0x05, 0x05, 0x2F, 0x82,
+ 0x29, 0x84, 0x49, 0x83, 0x39, 0x25, 0x43, 0x24, 0x23, 0xD2,
+ 0x60, 0xA2, 0x23, 0xF2, 0x1C, 0xA2, 0x23, 0xF2, 0x0C, 0xD7,
+ 0x70, 0xC7, 0x0D, 0xA6, 0x41, 0xE0, 0x06, 0x07, 0x1D, 0xD6,
+ 0xBD, 0xF6, 0x7C, 0xD7, 0x0A, 0xC7, 0x0B, 0xA6, 0x41, 0xE0,
+ 0x06, 0x07, 0x1D, 0xD6, 0xBE, 0xF6, 0x7C, 0xD7, 0x51, 0xC7,
+ 0x0A, 0xA6, 0x41, 0xE0, 0x06, 0x07, 0x1D, 0xD6, 0xBF, 0xF6,
+ 0x7C, 0xD0, 0xD3, 0xC0, 0x01, 0xD1, 0xE0, 0xC1, 0x01, 0x32,
+ 0x04, 0xA2, 0x23, 0x82, 0x23, 0x33, 0x15, 0xA3, 0x33, 0x83,
+ 0x33, 0xD6, 0x80, 0x14, 0x26, 0x26, 0x44, 0x86, 0x6F, 0x18,
+ 0x46, 0xD6, 0xBA, 0xF6, 0x8C, 0xD6, 0x80, 0x14, 0x26, 0x26,
+ 0x44, 0x86, 0x6F, 0x18, 0x46, 0xD9, 0x03, 0x29, 0x89, 0x99,
+ 0x9E, 0x98, 0x86, 0x19, 0x89, 0xA9, 0x97, 0x89, 0x92, 0xA8,
+ 0x90, 0xD6, 0x41, 0xC6, 0x24, 0xF8, 0x01, 0x05, 0x79, 0x06,
+ 0x69, 0xD8, 0xBB, 0xF8, 0x6C, 0xD6, 0x80, 0x14, 0x26, 0x26,
+ 0x44, 0x86, 0x6F, 0x18, 0x46, 0xD9, 0x0C, 0x29, 0x89, 0x99,
+ 0x9E, 0xD6, 0x12, 0x28, 0x86, 0x98, 0x8E, 0x09, 0x89, 0xF9,
+ 0x0D, 0xA9, 0x9F, 0xA9, 0x9B, 0xD7, 0x0F, 0x4C, 0x97, 0x56,
+ 0x7D, 0x26, 0x96, 0x46, 0x87, 0xD7, 0x08, 0xD8, 0x0B, 0xD9,
+ 0x04, 0xE0, 0x06, 0x07, 0xBF, 0xD6, 0x80, 0x14, 0x26, 0x26,
+ 0x44, 0x86, 0x6F, 0x18, 0x46, 0xD9, 0x06, 0x29, 0x89, 0x99,
+ 0x9E, 0xB9, 0x9C, 0xF9, 0x0D, 0xD7, 0x0F, 0x4C, 0x97, 0x56,
+ 0x7D, 0x29, 0x96, 0x49, 0x87, 0xA7, 0x90, 0x26, 0x97, 0xD7,
+ 0x18, 0xD8, 0x1B, 0xD9, 0x05, 0xE0, 0x06, 0x07, 0xBF, 0xD5,
+ 0x0E, 0xC5, 0x70, 0xE0, 0x05, 0x07, 0xE7, 0x87, 0x74, 0x87,
+ 0x7F, 0x87, 0x7F, 0xD5, 0x01, 0xF7, 0x01, 0x05, 0xB9, 0xD5,
+ 0x02, 0xB7, 0x76, 0xF7, 0x01, 0x05, 0xB9, 0xD5, 0x00, 0xD6,
+ 0x0C, 0xD7, 0x0D, 0xD8, 0x0E, 0xE0, 0x05, 0x07, 0xBF, 0xD5,
+ 0x00, 0xD6, 0x0E, 0xD7, 0x0E, 0xD8, 0x0E, 0xE0, 0x05, 0x07,
+ 0xA3, 0xD6, 0x12, 0xD7, 0x14, 0xE0, 0x05, 0x07, 0xBF, 0xED,
+ 0xD5, 0xD2, 0x00, 0xC2, 0x13, 0x33, 0x12, 0x04, 0x13, 0x15,
+ 0x13, 0x5C, 0xC0, 0x5D, 0x0D, 0x23, 0xCD, 0xF3, 0x05, 0x05,
+ 0xD4, 0xA0, 0x11, 0xF0, 0x02, 0xF0, 0x0E, 0xF0, 0x0E, 0xE0,
+ 0x00, 0x07, 0xF9, 0xE0, 0x00, 0x07, 0xF5, 0xF0, 0x0E, 0xEE,
+ 0x36, 0xF0, 0x0A, 0xFB, 0x08, 0xF9, 0x18, 0xBA, 0x9A, 0xB6,
+ 0x62, 0x1C, 0xB6, 0x1C, 0x8A, 0xF6, 0x18, 0xF8, 0x01, 0x06,
+ 0x1B, 0xFB, 0x01, 0x06, 0x4A, 0xB9, 0x92, 0xF9, 0x05, 0x05,
+ 0xEF, 0xDA, 0x13, 0xF8, 0x28, 0xFA, 0x84, 0xBB, 0xB2, 0xFB,
+ 0x01, 0x06, 0x4A, 0xBB, 0xB8, 0xFB, 0x01, 0x06, 0x1F, 0xD7,
+ 0x00, 0xC7, 0x94, 0xF7, 0x78, 0xD9, 0x00, 0xC9, 0xFF, 0x19,
+ 0x79, 0xF9, 0x01, 0x06, 0x4C, 0xD7, 0x00, 0xC7, 0xD0, 0xF9,
+ 0x78, 0xD8, 0x00, 0xF7, 0x8C, 0xF9, 0x05, 0x06, 0x1B, 0xD8,
+ 0x12, 0xF8, 0x88, 0xF2, 0x8C, 0xA8, 0x83, 0xD9, 0x00, 0xF8,
+ 0x9C, 0xDA, 0x10, 0xFA, 0xA8, 0xA8, 0x83, 0xF8, 0xAC, 0xD8,
+ 0x00, 0xD7, 0x00, 0xC7, 0x64, 0xF7, 0x8C, 0xD8, 0x11, 0xF8,
+ 0x88, 0xF4, 0x8C, 0xD8, 0x00, 0xC8, 0x8C, 0xD9, 0x01, 0xF8,
+ 0x9C, 0xF0, 0x06, 0xF0, 0x02, 0xD9, 0x13, 0xFA, 0x98, 0xF2,
+ 0xAC, 0xEE, 0x0E, 0xD8, 0x00, 0xD7, 0x00, 0xC7, 0x60, 0xF7,
+ 0x8C, 0xD8, 0x0E, 0xF8, 0x88, 0xF4, 0x8C, 0xD8, 0x0F, 0xF8,
+ 0x88, 0xF2, 0x8C, 0xA8, 0x83, 0xD9, 0x00, 0xF8, 0x9C, 0xDA,
+ 0x0D, 0xFA, 0xA8, 0xA8, 0x83, 0xF8, 0xAC, 0xD8, 0x00, 0xC8,
+ 0x8C, 0xD9, 0x05, 0xF8, 0x9C, 0xF0, 0x06, 0xF0, 0x02, 0xD9,
+ 0x00, 0xC9, 0xAC, 0xD8, 0x0C, 0xFA, 0x80, 0xF9, 0xAC, 0xD9,
+ 0x00, 0xC9, 0x08, 0xD7, 0x00, 0xC7, 0x34, 0xF7, 0x9C, 0xC9,
+ 0x38, 0xD7, 0x00, 0xC7, 0x44, 0xF7, 0x9C, 0xC9, 0x20, 0xD7,
+ 0x00, 0xC7, 0x48, 0xF7, 0x9C, 0xD8, 0x15, 0xF2, 0x8C, 0xF0,
+ 0x06, 0xEE, 0x4B, 0xF0, 0x0A, 0xD7, 0x15, 0xD8, 0x00, 0xC8,
+ 0x30, 0xF8, 0x7C, 0xD7, 0x00, 0xC7, 0x98, 0xF6, 0x78, 0xD8,
+ 0x1A, 0xF8, 0x6C, 0xD8, 0x00, 0xC8, 0xAC, 0xDA, 0x20, 0xF8,
+ 0xAC, 0xD9, 0x20, 0xDA, 0x0A, 0xCA, 0xF0, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x14, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x11, 0xCA, 0xF7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x15, 0xCA,
+ 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xD8, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x30, 0xCA, 0xC8, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x7C, 0xCA, 0xF8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x00, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x94, 0xCA,
+ 0xC7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x78, 0xCA, 0xF7, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xD8, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x98, 0xCA, 0xC8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x88, 0xCA, 0xF9, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x9C, 0xCA,
+ 0xF8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xDA, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xDB, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x64, 0xCA, 0xCB, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0xAC, 0xCA, 0xFB, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0xFF, 0xCA,
+ 0xD8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x07, 0xCA, 0xC8, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x6C, 0xCA, 0x26, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x7C, 0xCA, 0xF6, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x63, 0xCA, 0xA6, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x6C, 0xCA,
+ 0x26, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x9C, 0xCA, 0xF6, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x63, 0xCA, 0xA6, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x15, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x67, 0xCA, 0x17, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x01, 0xCA,
+ 0xF7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x43, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x72, 0xCA, 0xB7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x01, 0xCA, 0xF7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x43, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x06, 0xCA, 0xF0, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x42, 0xCA, 0xE8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0xEC, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0xFF, 0xCA,
+ 0xC7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x11, 0xCA, 0xF7, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0xFF, 0xCA, 0xEF, 0xF9, 0xAC, 0xF7,
+ 0x7C, 0xD8, 0x00, 0xD7, 0x00, 0xC7, 0x64, 0xF7, 0x8C, 0xD7,
+ 0x14, 0xF7, 0x11, 0xEE, 0x4A, 0xF0, 0x0E, 0x44, 0xDC, 0xF4,
+ 0x05, 0x07, 0x13, 0xD4, 0x01, 0x7F, 0xC4, 0x7C, 0x1C, 0x13,
+ 0x43, 0x61, 0x13, 0xA2, 0x31, 0x6C, 0xCD, 0xB2, 0x22, 0xA4,
+ 0x20, 0xF4, 0x05, 0x07, 0x06, 0xA1, 0x01, 0xD4, 0x0F, 0x14,
+ 0x43, 0x60, 0x04, 0x70, 0x04, 0xA4, 0x33, 0x71, 0x14, 0xEF,
+ 0x15, 0xA1, 0x01, 0xD0, 0x00, 0xF0, 0x02, 0xD0, 0x01, 0xC0,
+ 0x70, 0xE0, 0x00, 0x07, 0xE7, 0xD1, 0x0F, 0x70, 0x21, 0xF0,
+ 0x02, 0x83, 0x03, 0xA5, 0x31, 0xD4, 0x58, 0xC4, 0x4F, 0xE0,
+ 0x04, 0x06, 0xFD, 0x22, 0x14, 0x34, 0x15, 0x85, 0x3F, 0xE0,
+ 0x04, 0x06, 0xFD, 0x82, 0x29, 0x82, 0x29, 0x02, 0x24, 0xD1,
+ 0x22, 0x11, 0x12, 0xD6, 0x00, 0x4F, 0xE1, 0xD8, 0x01, 0x17,
+ 0x87, 0x21, 0x17, 0xD6, 0x10, 0x4F, 0xE1, 0xF7, 0x05, 0x07,
+ 0x37, 0xD1, 0x1F, 0xF0, 0x02, 0xD0, 0x00, 0xD1, 0x02, 0xE0,
+ 0x00, 0x07, 0x45, 0xD1, 0x00, 0xD2, 0x01, 0xE0, 0x01, 0x07,
+ 0x45, 0xD2, 0x01, 0xD3, 0x02, 0xE0, 0x02, 0x07, 0x45, 0xF0,
+ 0x02, 0xD3, 0x00, 0xC3, 0xC0, 0xD4, 0x00, 0xD5, 0x0F, 0xD6,
+ 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xD3, 0xC6, 0xC3, 0x10, 0xD4,
+ 0x10, 0xD5, 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xE0,
+ 0x03, 0x07, 0xA8, 0xD3, 0xC6, 0xC3, 0x10, 0x87, 0x1E, 0x87,
+ 0x76, 0x1F, 0xF7, 0x87, 0x0E, 0x87, 0x7C, 0x1F, 0xF7, 0xD4,
+ 0x10, 0xD5, 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xE0,
+ 0x03, 0x07, 0xA8, 0xD3, 0x10, 0xC3, 0x27, 0xF3, 0x09, 0xD3,
+ 0x01, 0xD4, 0x1F, 0xD5, 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07,
+ 0xBF, 0xE0, 0x03, 0x07, 0xA8, 0xD3, 0x10, 0xC3, 0x27, 0xF3,
+ 0x09, 0xD3, 0x00, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0xD3,
+ 0xFF, 0xC3, 0x03, 0x2C, 0x4F, 0xD3, 0x00, 0xD4, 0x1F, 0xD5,
+ 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xE0, 0x03, 0x07,
+ 0xA8, 0xF0, 0x02, 0xD0, 0x00, 0xD1, 0x2C, 0xE0, 0x00, 0x07,
+ 0xD4, 0xF0, 0x02, 0xA4, 0x43, 0xF4, 0x0D, 0xD7, 0x01, 0x2D,
+ 0xCB, 0xD6, 0x10, 0x5E, 0x0E, 0xF6, 0x01, 0x07, 0x96, 0xD6,
+ 0x10, 0x16, 0x06, 0x67, 0x76, 0x65, 0x56, 0x1F, 0xF7, 0x3F,
+ 0xF5, 0xEF, 0x9A, 0x67, 0x70, 0x65, 0x50, 0x1E, 0xE7, 0x3E,
+ 0xE5, 0x17, 0x10, 0x55, 0xDC, 0x85, 0x52, 0xB5, 0x52, 0x00,
+ 0x05, 0x84, 0x43, 0xF7, 0x05, 0x07, 0x89, 0xF0, 0x02, 0xE0,
+ 0x00, 0x07, 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xF0, 0x02, 0xD0,
+ 0x60, 0xF1, 0x08, 0xD6, 0x00, 0xC6, 0xF0, 0xD3, 0x01, 0xD2,
+ 0x10, 0xA0, 0x03, 0xF7, 0x08, 0xA0, 0x03, 0xF8, 0x08, 0x24,
+ 0xDF, 0xF4, 0x01, 0x07, 0xB7, 0xE0, 0x06, 0x07, 0xD8, 0xA6,
+ 0x63, 0x81, 0x13, 0xB2, 0x22, 0xF2, 0x05, 0x07, 0xAE, 0xD0,
+ 0x60, 0xF0, 0x1C, 0xF0, 0x02, 0xAA, 0x01, 0xA6, 0x11, 0xA7,
+ 0x21, 0xD4, 0x60, 0xF5, 0x48, 0xDB, 0x01, 0x6B, 0xB3, 0x15,
+ 0x5F, 0xF4, 0x5C, 0xA4, 0x43, 0x8B, 0x32, 0x04, 0x4B, 0xF8,
+ 0x48, 0xA4, 0x43, 0xF9, 0x48, 0xE0, 0x06, 0x07, 0x87, 0xF4,
+ 0x9C, 0xB4, 0x42, 0xF4, 0x8C, 0xF0, 0x02, 0xC0, 0x80, 0xE0,
+ 0x00, 0x07, 0xD8, 0xF0, 0x02, 0xF0, 0x0A, 0xD3, 0x00, 0xC3,
+ 0x9C, 0xF3, 0x1C, 0xC3, 0xA0, 0xF3, 0x2C, 0xC3, 0xA4, 0xF3,
+ 0x0C, 0xD3, 0x00, 0xC3, 0xA8, 0xF3, 0x38, 0xF3, 0x01, 0x07,
+ 0xE0, 0xF0, 0x06, 0xF0, 0x02, 0xF0, 0x0A, 0xD2, 0x00, 0xC2,
+ 0xA4, 0xF2, 0x0C, 0xC2, 0xA8, 0xF1, 0x28, 0xF1, 0x01, 0x07,
+ 0xEC, 0xC2, 0x9C, 0xF1, 0x28, 0xC2, 0xA0, 0xF2, 0x28, 0xF0,
+ 0x06, 0xF0, 0x02, 0xD1, 0x00, 0xC1, 0x98, 0xF1, 0x0C, 0xF0,
+ 0x02, 0xD1, 0x00, 0xC1, 0x94, 0xF0, 0x18, 0xC1, 0x98, 0xF1,
+ 0x18, 0xF0, 0x02, 0xED, 0xDC, 0x90, 0x00, 0x88, 0x00, 0x30,
+ 0x00, 0x34, 0x00, 0x24, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0xDD, 0x3D, 0xD7, 0x00, 0x15, 0x00, 0x1A, 0x0A, 0x19, 0x00,
+ 0x1E, 0x00, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xA0, 0x01, 0x76, 0x01, 0x38, 0x02,
+ 0xC0, 0x02, 0x30, 0x04, 0x20, 0x03, 0x60, 0x06, 0x5C, 0x04,
+ 0xBC, 0x09, 0x60, 0x07, 0x9C, 0x0D, 0x70, 0xFF, 0xFF, 0x7A,
+ 0xF5, 0x10, 0xAE, 0x70, 0xA5, 0x22, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x17, 0x00, 0x04, 0x2C, 0x5F, 0x00, 0x00, 0x03,
+ 0x00, 0x06, 0x00, 0x27, 0xC5, 0x21, 0xF0, 0x16, 0x27, 0xC0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x67, 0x42, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x00, 0x1C, 0xFE,
+ 0xFE, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x30, 0x00, 0x0C, 0x08, 0x30, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x02, 0x00, 0x21, 0x00, 0x00, 0x00, 0x0C, 0x00,
+ 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x2C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x50, 0x00, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x0A, 0x03, 0xA9, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0F, 0x00,
+ 0x08, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x64, /* WAIT 100[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFF, 0x00, 0x00, 0xF3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x05, 0x01, 0x9D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x02, 0xB8, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x01, 0x01, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x08, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x0C, 0xB2, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x2C, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x0A, 0xD2, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x40, 0x12, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x01, 0x9D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x06, 0xC7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x9D, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xEB, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xF0, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x00, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xF5, 0xF8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x52, 0xD3, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0xD3, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0xD3, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x60, 0x03, 0x0C, 0xCF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0D, 0xD3, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x0C, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x5B, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xA7, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0xD8, 0xA1, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x04, 0xCD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x0F, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x21, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xE5, 0xD0, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0xDC, 0xF1, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x8E, 0xD0, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0x13, 0xF1, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0xB0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xF0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x37, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x43, 0xD0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x12, 0xF0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x4F, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x01, 0x26,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xF0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x4F, 0xE9, 0x9D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x06, 0xCC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x62, 0xD3, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x0C, 0xD3, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x9A, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0xC7, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xF0, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x05, 0xA7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x26, 0xD0, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x28, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xAF, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x84, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB0, 0xD5, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x21, 0x03, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x53, 0x24, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x11, 0x34, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x93, 0x11, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x12, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x79, 0xB3, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x01, 0x01, 0x26,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x01, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0xD1,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x06, 0x5F, 0xEF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0x09, 0x5C, 0xC2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xF4, 0xF3, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x88, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x00, 0xD0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x37, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x01, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x02, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x94, 0xD0, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x89, 0xF3, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x01, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x21, 0xD2, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x28, 0xD3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xFE, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x64, 0xC2, 0xFF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x09, 0xE9, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x04, 0x07, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0E, 0xF0, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0x7D, 0xCD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x1E, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x07, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xE2, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xE1,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xD9, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xD6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xD3, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xC9, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xC5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x0A, 0x80, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0xEA, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xDF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0D, 0xEA, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0xB9, 0xF1, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x92, 0x11, 0x3C, 0xDE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x22, 0x3C, 0xCE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x09, 0xD0, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x20, 0xEA, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0xD4, 0xC0, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x09, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xD1, 0xEA, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x03, 0xC0, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x1A, 0x80, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xEA, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x03, 0xD7, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x60, 0xE0, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0xAA, 0x71,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x0A, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x74, 0xD7, 0xD5, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x45, 0xF5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xF0, 0xB6, 0x46,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0xF3, 0x74, 0xC7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0D, 0x06, 0x45,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8B, 0xB8, 0x74, 0xF7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x42, 0x15, 0x64,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x0D, 0x22, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x25, 0xD3, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x23, 0xD3, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xFE, 0x22, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x20, 0x22, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0xB9, 0xF3, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x34, 0x22, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x70, 0x21, 0xEA, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xF4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0E, 0xEA, 0x5E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0A, 0xFB, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x18, 0xBA, 0x9A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB6, 0x62, 0x1C, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1C, 0x8A, 0xF6, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x01, 0x02, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x01, 0x02, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB9, 0x92, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x1F, 0xDA, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x28, 0xFA, 0x84,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xBB, 0xB2, 0xFB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x72, 0xBB, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x01, 0x02, 0x47,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x78, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x8C, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x43, 0xD8, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x88, 0xF2, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x83, 0xD9, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x9C, 0xDA, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0xA8, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0xAC, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x64,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x8C, 0xD8, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x88, 0xF4, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xC8, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x01, 0xF8, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x06, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x13, 0xFA, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0xAC, 0xEA, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x60, 0xF7, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x0E, 0xF8, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x8C, 0xD8, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x88, 0xF2, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x83, 0xD9, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x9C, 0xDA, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0xA8, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0xAC, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC8, 0x8C, 0xD9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x9C, 0xF0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD9, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC9, 0xAC, 0xD8, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x80, 0xF9, 0xAC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x00, 0xC9, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0xC9, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x44,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0xC9, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0xD8, 0x15,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x8C, 0xF0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x73, 0xF0, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xD0, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x03, 0xF2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x02, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x05, 0xF2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x02, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x05, 0xF2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x02, 0x84,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x02, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x05, 0x02, 0xCD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x12, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x03, 0xF7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x12, 0xD7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x0A, 0xF7, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x71, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x04, 0xD3, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x51, 0xF6, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x01, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xBF, 0xF5, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x33, 0xF8, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x37, 0x1A, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB8, 0x62, 0x1C, 0x8A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAA, 0x63, 0x1D, 0xA5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x29, 0x89, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xAC, 0xF6, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xB1, 0xA0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x08, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xE0, 0xEA, 0x99,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x03, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x18, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xC2, 0xA9, 0x51,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x38, 0xA8, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x03, 0xBF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x38, 0x12, 0x67,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x02, 0xC2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xA3, 0x39,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0xB3, 0x25, 0x77,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x62, 0xD8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x18, 0x82, 0x24, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x44, 0x18, 0x23, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x43, 0x08, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x30, 0xEA, 0xE0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0xF0, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xF1, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x8E, 0xD3, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x40, 0x13, 0xF3, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x32, 0xF0, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x04, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x02, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x05, 0x02, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x0F, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x26, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x75, 0xF1, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x85, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xD2, 0x9F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0xB4, 0xD4, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xC1, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x1C, 0xF3, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0xA3, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB4, 0x42, 0xF4, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xEB, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x8E, 0xD6, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x28, 0x84, 0x45,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x44, 0xB3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x38, 0xA3, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x38, 0xA9, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x00, 0xE0, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x43, 0xD9, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x09, 0x04, 0x26,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x09, 0x06, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC9, 0x0A, 0xF9, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB9, 0x92, 0xDA, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x09, 0x03, 0xF7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x41, 0xAA, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB3, 0x28, 0xFB, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x09, 0x03, 0xBF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x44, 0x69, 0x07, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x54, 0x27, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x00, 0x4F, 0xA9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x7F, 0xAA, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x27, 0x7A, 0x27, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x01, 0x03, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x4C, 0xA7, 0x91,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0xFE, 0x9A, 0x41,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0x0E, 0x97, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x27, 0x7F, 0x2F, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x02, 0xF2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0xD6, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xBA, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x05, 0x02, 0xF7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD4, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x8E, 0xD7, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x01, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xAD, 0x99, 0x91,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4B, 0x14, 0xF6, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0xB3, 0xF9, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x96, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x47, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0x10, 0x2D, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x04, 0xEB, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x79, 0xF7, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x73, 0xA5, 0xB5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x58, 0xF7, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x13, 0x19, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x99, 0x27, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x65, 0xB7, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x2C, 0xA5, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x58, 0xA5, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x58, 0x19, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x69, 0xBA, 0xA2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1B, 0x96, 0x49, 0xBA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x9A, 0x91, 0x29, 0x9A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x0D, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0x08, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x99, 0x07, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xAD, 0xD7, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x0C, 0xDB, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4B, 0x04, 0xF6, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0xB5, 0xF9, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x03, 0xAE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEB, 0xAD, 0x4B, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0xB8, 0xF6, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x7D, 0xA0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0x01, 0x2D, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x04, 0xEB, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x0C, 0xA5, 0xB5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x58, 0xF8, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x73, 0xF7, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x03, 0x19, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0x9D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x99, 0x27, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x9D, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x2C, 0xA5, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x58, 0xA5, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x58, 0x19, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB5, 0x52, 0xFA, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0xA6, 0x5E, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xBA, 0xA2, 0x1B, 0x96,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x49, 0xBA, 0x9A, 0x91,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x29, 0x9A, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0x08, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x99, 0x17, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xAD, 0xD7, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x79, 0xF7, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x8E, 0x4B, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0xB8, 0xA5, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x58, 0xA5, 0xB5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x58, 0x16, 0xA6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x03, 0xAE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0x94, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x42, 0xB4, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x42, 0xA5, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x0D, 0x05, 0x53,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0xD2, 0x5F, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1F, 0xFA, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xB4, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x0D, 0x25, 0x54,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x5C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0x5E, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1E, 0x0A, 0x5E, 0x3A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x13, 0xD2, 0x9E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x00, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1D, 0xD3, 0xF4, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x23, 0xFB, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x23, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x23, 0xF6, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x36, 0x86, 0x66,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x33, 0xB3, 0x36, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x36, 0x33, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5C, 0xF4, 0x43, 0xCE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB9, 0x92, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xDE, 0xD6, 0xF2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC6, 0x03, 0x4E, 0xCA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1F, 0xF6, 0x10, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x23, 0x94, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x34, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x03, 0xC7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x2E, 0xFB, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x05, 0x03, 0xEF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x3A, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xEF, 0xC4, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3B, 0x4B, 0xF2, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAB, 0xB3, 0xC5, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4E, 0x5B, 0x2A, 0x1A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x01, 0x03, 0xF6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0xBC, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0xF4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x0F, 0xC7, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0xFF, 0x22, 0xD7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x24, 0xC7, 0x83, 0x8F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x33, 0x82, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x8E, 0xA7, 0x77,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x78, 0x42, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x79, 0xF8, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x43, 0x80, 0xA7, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x78, 0x44, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x9E, 0x98, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x28, 0x20, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x04, 0x17,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x68, 0xD8, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x42, 0x78, 0x82, 0x27,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x2C, 0xA6, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x3C, 0xA6, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x4C, 0xA6, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x5C, 0xD7, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x20, 0xE0, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x88, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x63, 0xF6, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD6, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x68, 0xD3, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0xF0, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0x01, 0xD5, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0x40, 0x1D, 0xDA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x07, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0xC0, 0x1D, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x07, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x12, 0xD7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0x14, 0xF4, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x71, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xD4, 0xFE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0xFE, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x8B, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0xE3, 0xC2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x5B, 0xC3, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x0D, 0xA4, 0x1F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x4B, 0xF4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x50, 0x33, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x34, 0xB4, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEC, 0x4A, 0xD4, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0x20, 0xE0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x83, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x85, 0x53, 0x33, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x39, 0xD2, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x8E, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x12, 0x4F, 0xF3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x03, 0xD6, 0xAA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x2A, 0x4E, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x1E, 0x4F, 0xF3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x72, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xED, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0x4F, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x0F, 0x27, 0x74,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x02, 0xD6, 0x74,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x01, 0xF4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xB9, 0xA2, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x03, 0xF4, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x9F, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x33, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x97, 0x35, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x7F, 0xB3, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x08, 0xD6, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3F, 0xF8, 0xD6, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x97, 0x3B, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x8B, 0xB3, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3F, 0xF8, 0xD5, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x77, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0xD8, 0x8D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x88, 0xD8, 0xAE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x08, 0x87, 0x94, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x42, 0x08, 0x84,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x88, 0xD6, 0x52,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x4C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x31, 0xD5, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x9C, 0xEC, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x35, 0xD5, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x98, 0x94, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x01, 0x04, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0xF7, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x75, 0xB3, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x31, 0x23, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x01, 0x04, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x03, 0x2F, 0xF8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x0C, 0x07, 0x74,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0E, 0xD6, 0xDA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x31, 0xD6, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x53, 0xD4, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0xF0, 0x1C, 0xCA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x60, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x62, 0x08, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x88, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x88, 0xE0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x8B, 0xD2, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x18, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x54, 0xF5, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x50, 0x5D, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x40, 0x65, 0xA3, 0x2F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x39, 0xF5, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x50, 0x5D, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x40, 0x65, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xA2, 0x25,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xF4, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4D, 0x0C, 0xF5, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xDA, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x28, 0xD5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x4F, 0x7D, 0xE9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x10, 0x15, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x74, 0x45, 0x73, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x70, 0x05, 0x20, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x33, 0x24, 0x44,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x0F, 0x83, 0x3F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x4F, 0x15, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x43, 0x23, 0x53,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x24, 0x60, 0xD5, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xC0, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x03, 0x36, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0xE3, 0x86, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB6, 0x62, 0x26, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0x06, 0x82, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB5, 0x52, 0xF5, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xF8, 0xC5, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x36, 0x05, 0xC5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x65, 0x86, 0x6F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x65, 0xA7, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x02, 0xD6, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x8D, 0xF3, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x67, 0x51, 0xA7, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x77, 0xD5, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x37, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0xA7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x02, 0xD6, 0xFC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x09, 0xD5, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x10, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x8B, 0xF3, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x02, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x3B, 0xB7, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0C, 0xD6, 0xB0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x05, 0x37, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0D, 0xD6, 0xB4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x68, 0x33, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x31, 0xD5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xCF, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x4C, 0xC5, 0x27,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x09, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x06, 0xC5, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x85, 0x73, 0x86, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x01, 0x2D, 0xD8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2E, 0xE8, 0xD4, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4C, 0xC3, 0x26, 0x64,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x31, 0x25, 0x54,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x13, 0x35, 0x03, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1F, 0xE9, 0x95, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1D, 0xF9, 0x20, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x05, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x27, 0xA3, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x13, 0x37, 0x84, 0x39,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x13, 0x34, 0xED, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0xED, 0xD5, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x3C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x87, 0xF1, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x5E, 0x11, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x0F, 0xD3, 0x96,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xEF, 0x1D, 0xDF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x10, 0xD4, 0xBE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x48, 0xF1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x6B, 0xA2, 0x25,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0xBF, 0xF5, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0xB2, 0xF4, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x0E, 0xD4, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x07, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x18, 0x8B, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x0B, 0xB9, 0xB6, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x6B, 0x8B, 0x19,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xB8, 0xDA, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x12, 0x47, 0xAB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x79, 0x07, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x0A, 0x67, 0x8A, 0xA3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x80, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x10, 0x05, 0x5A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x85, 0x5B, 0x2A, 0x52,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAA, 0xA5, 0x8A, 0xA5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5C, 0xA6, 0x5D, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2C, 0x89, 0xDA, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0xA8, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x91, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x0D, 0xD3, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x23, 0x13, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x38, 0x2A, 0x52,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8A, 0xA4, 0x16, 0xA0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x05, 0xA2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x60, 0xD8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x89, 0x92, 0x19, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x00, 0xCB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x46, 0x9B, 0x86, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x68, 0xDA, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x6C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x16, 0xD1, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0xB9, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x1C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0xFF, 0xD2, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x60, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0xD3, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0xFB, 0x4D, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x64, 0xC3, 0xF8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4E, 0xC3, 0x20, 0xDE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x0A, 0xC2, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x33, 0xD4, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4C, 0xC3, 0xD3, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x13, 0x34, 0xD2, 0x26,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x80, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x8B, 0xD2, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x40, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x82, 0x3A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x2D, 0xD8, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC8, 0x01, 0x15, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x01, 0x05, 0xD9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x39, 0xC8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x82, 0xF5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xD9, 0xD2, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0xD8, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x73, 0x38, 0xD8, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x64, 0x48, 0x84, 0x4B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x34, 0x18, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x01, 0x05, 0xEA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB8, 0x78, 0xB1, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x01, 0x05, 0xEA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x28, 0x80, 0xF8, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xB0, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0xFF, 0xF2, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0xD1, 0x2B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xC1, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x0E, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x8B, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xF0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xF6, 0xD3, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x02, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xD1, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0x81, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x02, 0x2D, 0xDE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x0D, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x82, 0xF0, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xDF, 0xD3, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x44, 0xFE, 0xF3, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x45, 0xEF, 0x2D, 0xC9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2C, 0xC5, 0xF0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x44, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xDF, 0xD5, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xD3, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x32, 0xF5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x3D, 0xF6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x32, 0xD5, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xD8, 0xDB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x01, 0x06, 0x3B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x0D, 0x5E, 0xC9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x0D, 0xF6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x3B, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x5E, 0xDA, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0xA8, 0xD0, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0x2B, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x9B, 0xFA, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x01, 0xEE, 0x5E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x83, 0xF5, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x5B, 0xFA, 0x5C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x15, 0xE0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xD0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x5E, 0xDA, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0xA8, 0xDA, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x01, 0x06, 0x4D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x31, 0xFA, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x01, 0xEE, 0x5E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0xA8, 0xDB, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x47, 0xD3, 0x46, 0x3D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x06, 0x5A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x01, 0x06, 0x5B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0xB9, 0xDB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0xBC, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x44, 0xFB, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x3B, 0xFA, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x01, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8B, 0x38, 0x16, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAB, 0x60, 0xFB, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x65, 0xF6, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x84, 0xF4, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8A, 0x29, 0xDB, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xAB, 0xA9, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x06, 0x74,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0xB4, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x78, 0xDB, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x00, 0xC5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x7A, 0xD5, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0xC0, 0xFB, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x7A, 0xD5, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x70, 0x46, 0xB4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x85, 0xF9, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2A, 0x69, 0x9A, 0xAE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x6A, 0xB4, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x05, 0x06, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x75, 0x17, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x89, 0x17, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x00, 0xC9, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x95, 0x09, 0x9B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x8C, 0xFA, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x01, 0x2F, 0xBA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x9A, 0xA2, 0x19, 0x9A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x00, 0xCA, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0xA9, 0x47, 0x9B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x08, 0x09, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x99, 0x89, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x97, 0xD9, 0x81,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x5C, 0xD9, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x8C, 0xD7, 0x15,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x01, 0x06, 0xAF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x08, 0x09, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x99, 0x89, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x96, 0xD9, 0x81,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x5C, 0xA7, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x07, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x87, 0xF7, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x09, 0x77, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0xB6, 0x17, 0x7C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x1D, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x82, 0xF6, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x63, 0xD7, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x07, 0x84, 0x49,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x05, 0x06, 0xC4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x41, 0xD8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0xC6, 0x13, 0x41,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xD1, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xD0, 0x16,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x12, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xD0, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x02, 0xF0, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0xD1, 0xB2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x18, 0xD2, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x28, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x08, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0xB9, 0xD6, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC6, 0x01, 0x5F, 0x3E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x82, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x08, 0xD6, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0xBC, 0xF7, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x07, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x40, 0xC6, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x89, 0x5F, 0x3E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x06, 0xFC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x86, 0xD6, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC6, 0x09, 0x5F, 0x3E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x06, 0xFC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x02, 0xD6, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x81, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0xA7, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x41, 0xA6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x05, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x81, 0xD9, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4D, 0x49, 0x8A, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x01, 0x2F, 0xAB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAB, 0xB3, 0x29, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x19, 0xC8, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x08, 0x07, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x82, 0x18, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0x85, 0xD6, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x30, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0xF5, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x23, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0xEE, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x4C, 0xD6, 0x1D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x42, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x4C, 0xEF, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x0F, 0xD6, 0x1D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x42, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x4C, 0xD6, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0xEE, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x4C, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x5F, 0xD9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x92, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x4B, 0x8A, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x03, 0x2F, 0xAB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0xB6, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x3B, 0xDA, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xCA, 0x04, 0xEF, 0x3D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x00, 0xCA, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x89, 0x54, 0x09, 0x9A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x00, 0xDA, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xCA, 0xA0, 0xE0, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x8B, 0xD7, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x7B, 0x97, 0xE0, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x8B, 0x6B, 0x97,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x0A, 0x07, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x68, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x51, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x60, 0xF1, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x00, 0xC4, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x10, 0xA0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x08, 0xA0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x08, 0xD3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xDF, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x60, 0xE0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x8B, 0xA4, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x81, 0x13, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x07, 0x56,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x60, 0xF0, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD3, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x38, 0x85, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x01, 0x66, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1C, 0xCA, 0xF3, 0x4C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x33, 0x03, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x38, 0xA9, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x0D, 0xD5, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x1D, 0x88, 0x19,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x01, 0x27, 0xD6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x66, 0x65, 0x67, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1C, 0xCA, 0x3C, 0xCB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x85, 0x57, 0xC5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x72, 0xB7, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x57, 0x89, 0x93,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x05, 0x07, 0x77,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x4C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x80, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x8B, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0A, 0xD3, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x9C, 0xF3, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0xA0, 0xF3, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0xA4, 0xF3, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0xC3, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x38, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x93, 0xF0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD6, 0xBB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x68, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x4C, 0xD2, 0x67,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x3C, 0xD3, 0xC0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x02, 0xF1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xA7, 0xA2, 0x61,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x80, 0xC3, 0x8D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x09, 0xC1, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x60, 0xD1, 0xFF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0xFD, 0xF0, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x20, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0xD2, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0xDE, 0x80, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2C, 0xCD, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xC1, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x0C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xC1, 0x94,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x18, 0xC1, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x18, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0A, 0xD2, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0xA4, 0xF2, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0xA8, 0xF1, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x01, 0x07, 0xC8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x9C, 0xF1, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0xA0, 0xF2, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x06, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x08, 0xC2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x0B, 0xC3, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x48, 0x00, 0x24,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x85, 0xF5, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x26, 0x05, 0x96, 0x6E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0x06, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x82, 0xF1, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x0D, 0xD2, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x28, 0xD2, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x28, 0xD6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC6, 0x20, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x87, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x97, 0x7C, 0xA2, 0x71,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x81, 0xF8, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x78, 0x10, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x40, 0x71, 0xA1, 0x71,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x20, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0xD4, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x0E, 0xD4, 0x63, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x0F, 0xF4, 0x11, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x14, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x0C, 0x90, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x00, 0x30, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x34, 0x00, 0x24, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x6C, 0x00, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x02, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x39, 0xA1, 0x00, 0x15,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x24, 0x08, 0xF3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x28, 0x00, 0x51,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x12, 0x39,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x0C, 0x80, 0xF0, 0xF7, 0x3E, 0x75, 0xC1, 0x8A, 0xE4, 0x02,
+ 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x05, 0x0F, 0xEE, 0xAA, 0x5F, 0xEA, 0x90,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x06, 0x00, 0x0A, 0x4D, 0x8C, 0xF2, 0xD8, 0xCF, 0x30, 0x79,
+ 0x9F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x0B, 0x0D, 0xA4, 0x6C,
+ 0x00, 0x10, /* Length = 16 bytes */
+ 0x0A, 0x01, 0x67, 0x24, 0x40, 0x08, 0xC3, 0x20, 0x10, 0x64,
+ 0x3C, 0xFA, 0xF7, 0xE1, 0x0C, 0x2C,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x09, 0x0B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x10, 0x13,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x16, 0x12,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1F, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x01, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x10,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 9032 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_base_firmware_i2c_files_base_firmwares_8mhz_mts_init = {
+ XC3028_base_firmware_i2c_files_base_firmwares_8mhz_mts_init_SEQUENCE
+};
+
+unsigned char XC3028_base_firmware_i2c_files_base_firmwares_fm_init_SEQUENCE[9056] = {
+
+ 0x00, 0x00, /* RESET */
+ 0x0D, 0x53, /* Length = 3411 bytes */
+ 0x2A, 0x02, 0x19, 0xE0, 0x00, 0x07, 0xF5, 0xD4, 0x00, 0xC4,
+ 0xF0, 0xD6, 0xAE, 0xC6, 0x10, 0xD5, 0xF5, 0xC5, 0x7A, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x01, 0xC4, 0xF0, 0xD6, 0x51, 0xC6,
+ 0x02, 0xD5, 0x99, 0xC5, 0xA3, 0xE0, 0x04, 0x07, 0xD8, 0xD4,
+ 0x03, 0xC4, 0xF0, 0xD6, 0x04, 0xD5, 0x87, 0xC5, 0x06, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x04, 0xC4, 0xF0, 0xD6, 0x00, 0xD5,
+ 0x1F, 0xC5, 0x2C, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0x05, 0xC4,
+ 0xF0, 0xD6, 0x00, 0xC6, 0x06, 0xD5, 0x00, 0xC5, 0x40, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x06, 0xC4, 0xF0, 0xD6, 0x80, 0xD5,
+ 0xCD, 0xC5, 0x20, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0x07, 0xC4,
+ 0xF0, 0xD6, 0x00, 0xC6, 0xC0, 0xD5, 0x05, 0xC5, 0x2F, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x09, 0xC4, 0xF0, 0xD6, 0xC0, 0xC6,
+ 0x42, 0xD5, 0x67, 0xC5, 0x3C, 0xE0, 0x04, 0x07, 0xD8, 0xD4,
+ 0x0F, 0xC4, 0xF0, 0xD6, 0x3F, 0xC6, 0xC0, 0xD5, 0x11, 0xC5,
+ 0x11, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0x06, 0xC4, 0xF0, 0xD6,
+ 0x00, 0xC6, 0x24, 0xD5, 0x0E, 0xC5, 0x2E, 0xE0, 0x04, 0x07,
+ 0xD8, 0xD4, 0xFF, 0xC4, 0xFF, 0xF4, 0x09, 0xD4, 0x0F, 0xC4,
+ 0x70, 0xE0, 0x04, 0x07, 0xE7, 0x86, 0x69, 0x86, 0x69, 0xA2,
+ 0x61, 0xD4, 0x06, 0xC4, 0xF0, 0xD6, 0x00, 0xC6, 0x24, 0xD5,
+ 0xC0, 0xC5, 0x20, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0xFF, 0xC4,
+ 0xFF, 0xF4, 0x09, 0xD4, 0x0F, 0xC4, 0x70, 0xE0, 0x04, 0x07,
+ 0xE7, 0x86, 0x69, 0x86, 0x69, 0x12, 0x62, 0x98, 0x21, 0xF8,
+ 0x05, 0x02, 0x88, 0xF2, 0x0D, 0xD8, 0x80, 0x4C, 0x28, 0xF8,
+ 0x05, 0x02, 0x94, 0xE0, 0x00, 0x07, 0x82, 0xD4, 0x0E, 0xC4,
+ 0xF0, 0xD6, 0x00, 0xD5, 0x00, 0xE0, 0x04, 0x07, 0xD8, 0xD0,
+ 0x01, 0xC0, 0x70, 0xE0, 0x00, 0x07, 0xE7, 0xD3, 0x0F, 0x71,
+ 0x23, 0xF1, 0x01, 0x04, 0x7F, 0xD0, 0x60, 0xD1, 0x00, 0xC1,
+ 0x40, 0xD2, 0x0B, 0x00, 0x02, 0xF0, 0x1C, 0xA0, 0x03, 0xD1,
+ 0x00, 0xF0, 0x1C, 0xD0, 0x01, 0xD1, 0x03, 0xD2, 0x03, 0xD3,
+ 0x01, 0xE0, 0x00, 0x07, 0xBF, 0xD4, 0x9E, 0xA4, 0x45, 0xD5,
+ 0x10, 0xC5, 0x01, 0xF4, 0x5C, 0xD5, 0x40, 0xC5, 0x0B, 0xA4,
+ 0x43, 0xF4, 0x5C, 0xD3, 0x00, 0xC3, 0xF0, 0xD5, 0xD6, 0xD4,
+ 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3, 0x01, 0xC3, 0xF0, 0xD5,
+ 0x03, 0xC5, 0x19, 0xD4, 0x01, 0xE0, 0x03, 0x07, 0xD8, 0xD3,
+ 0x03, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD3, 0x04, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD3, 0x05, 0xC3, 0xF0, 0xD5, 0x00, 0xD4,
+ 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3, 0x06, 0xC3, 0xF0, 0xD5,
+ 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3, 0x07, 0xC3,
+ 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3,
+ 0x09, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD3, 0x0E, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD3, 0x0F, 0xC3, 0xF0, 0xD5, 0x00, 0xD4,
+ 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD0,
+ 0xFF, 0xC0, 0x03, 0xD1, 0x54, 0xD3, 0x01, 0xC3, 0xF0, 0xD5,
+ 0x03, 0xC5, 0x99, 0xD4, 0x01, 0xC4, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0,
+ 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2,
+ 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1,
+ 0x4C, 0xA1, 0x13, 0xD5, 0x00, 0xC5, 0x19, 0xD4, 0x01, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD5, 0x00, 0xC5, 0x99, 0xD4, 0x01, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3,
+ 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84,
+ 0x46, 0xD2, 0x00, 0xC2, 0x40, 0x34, 0x42, 0xF5, 0x18, 0xE0,
+ 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x23, 0xC5,
+ 0x19, 0xD4, 0x02, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x23, 0xC5,
+ 0x99, 0xD4, 0x02, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3,
+ 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2,
+ 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05,
+ 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x20, 0xC5, 0x19, 0xD4,
+ 0x02, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD5, 0x20, 0xC5, 0x99, 0xD4, 0x02, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C,
+ 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5,
+ 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5,
+ 0x23, 0xC5, 0x19, 0xD4, 0x03, 0xC4, 0xF0, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5,
+ 0x23, 0xC5, 0x99, 0xD4, 0x03, 0xC4, 0xF0, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3,
+ 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84,
+ 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0,
+ 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x20, 0xC5,
+ 0x19, 0xD4, 0x03, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x20, 0xC5, 0x99, 0xD4,
+ 0x03, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07,
+ 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34,
+ 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1,
+ 0x13, 0xD5, 0x23, 0xC5, 0x19, 0xD4, 0x04, 0xC4, 0xF0, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD5, 0x23, 0xC5, 0x99, 0xD4, 0x04, 0xC4, 0xF0, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C,
+ 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5,
+ 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5,
+ 0x20, 0xC5, 0x19, 0xD4, 0x04, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x20, 0xC5,
+ 0x99, 0xD4, 0x04, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0,
+ 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2,
+ 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1,
+ 0x4C, 0xA1, 0x13, 0xD5, 0x23, 0xC5, 0x19, 0xD4, 0x05, 0xC4,
+ 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD5, 0x23, 0xC5, 0x99, 0xD4, 0x05, 0xC4,
+ 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07,
+ 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34,
+ 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1,
+ 0x13, 0xD5, 0x20, 0xC5, 0x19, 0xD4, 0x05, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5,
+ 0x20, 0xC5, 0x99, 0xD4, 0x05, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3,
+ 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2,
+ 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05,
+ 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x23, 0xC5, 0x19, 0xD4,
+ 0x06, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x23, 0xC5, 0x99, 0xD4,
+ 0x06, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0,
+ 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2,
+ 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1,
+ 0x4C, 0xA1, 0x13, 0xD5, 0x20, 0xC5, 0x19, 0xD4, 0x06, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD5, 0x20, 0xC5, 0x99, 0xD4, 0x06, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3,
+ 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84,
+ 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0,
+ 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x00, 0xD4,
+ 0x00, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xEC,
+ 0xAF, 0xD1, 0x54, 0xD2, 0xA0, 0xF1, 0x2C, 0xA1, 0x13, 0xD2,
+ 0x90, 0xC2, 0x01, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0x44, 0xC2,
+ 0x01, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0xDC, 0xC2, 0x02, 0xF1,
+ 0x2C, 0xA1, 0x13, 0xD2, 0x3C, 0xC2, 0x02, 0xF1, 0x2C, 0xA1,
+ 0x13, 0xD2, 0x58, 0xC2, 0x04, 0xF1, 0x2C, 0xA1, 0x13, 0xD2,
+ 0x2C, 0xC2, 0x03, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0x3C, 0xC2,
+ 0x06, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0x88, 0xC2, 0x04, 0xF1,
+ 0x2C, 0xA1, 0x13, 0xD2, 0x04, 0xC2, 0x09, 0xF1, 0x2C, 0xA1,
+ 0x13, 0xD2, 0xD0, 0xC2, 0x06, 0xF1, 0x2C, 0xA1, 0x13, 0xD2,
+ 0x20, 0xC2, 0x0D, 0xF1, 0x2C, 0xA1, 0x13, 0xD5, 0x0E, 0xD6,
+ 0x00, 0xD7, 0x03, 0xD8, 0x0E, 0xE0, 0x05, 0x07, 0xBF, 0xD5,
+ 0x0F, 0xD6, 0x12, 0xD7, 0x14, 0xE0, 0x05, 0x07, 0xA3, 0xD6,
+ 0x0E, 0xD7, 0x0E, 0xE0, 0x05, 0x07, 0xA3, 0xD5, 0xFF, 0xC5,
+ 0xFF, 0xF5, 0x09, 0xD5, 0x01, 0xC5, 0x80, 0xD6, 0x02, 0xE0,
+ 0x05, 0x07, 0xD8, 0xD4, 0x0F, 0xC4, 0xF0, 0xD5, 0x01, 0xC5,
+ 0x01, 0xD6, 0x30, 0xC6, 0x40, 0xE0, 0x07, 0x07, 0x16, 0x87,
+ 0x7C, 0xD8, 0xBC, 0xF8, 0x7C, 0x1E, 0xEB, 0xE0, 0x04, 0x07,
+ 0xD8, 0xD0, 0x00, 0xD1, 0x16, 0xD2, 0x16, 0xD3, 0x01, 0xE0,
+ 0x00, 0x07, 0xBF, 0xD0, 0x01, 0xD1, 0x07, 0xD2, 0x08, 0xD3,
+ 0x00, 0xE0, 0x00, 0x07, 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xD4,
+ 0x00, 0xC4, 0xA0, 0xF4, 0x09, 0xD0, 0x00, 0xE0, 0x00, 0x07,
+ 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xD4, 0x0F, 0xC4, 0xF0, 0xD5,
+ 0xFE, 0xC5, 0xFE, 0xD6, 0x30, 0xC6, 0x40, 0xE0, 0x07, 0x07,
+ 0x16, 0x87, 0x7C, 0x1E, 0xEB, 0xE0, 0x04, 0x07, 0xD8, 0xC6,
+ 0xC0, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0xFF, 0xC4, 0xFF, 0xF4,
+ 0x09, 0xD4, 0x0F, 0xC4, 0x70, 0xE0, 0x04, 0x07, 0xE7, 0xDA,
+ 0xFF, 0x27, 0x6E, 0x2D, 0x5A, 0x88, 0x5F, 0x88, 0x83, 0x87,
+ 0x78, 0xDA, 0x8E, 0xAA, 0xA7, 0xFA, 0x7C, 0xAA, 0xA9, 0xFA,
+ 0x8C, 0xAA, 0xA9, 0xFA, 0x9C, 0xD4, 0x0F, 0xC4, 0xF0, 0xD5,
+ 0xFE, 0xC5, 0xFE, 0xD6, 0x3F, 0xC6, 0xC0, 0xD6, 0x30, 0xC6,
+ 0x40, 0xE0, 0x07, 0x07, 0x16, 0x87, 0x7C, 0x1E, 0xEB, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD0, 0x01, 0xE0, 0x00, 0x07, 0xBF, 0xD0,
+ 0x01, 0xD1, 0x16, 0xD2, 0x16, 0xD3, 0x01, 0xE0, 0x00, 0x07,
+ 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xD2, 0x60, 0xA2, 0x23, 0xF1,
+ 0x28, 0xA2, 0x23, 0xF0, 0x28, 0xD2, 0x00, 0xD4, 0x00, 0xD3,
+ 0x00, 0xD5, 0x04, 0xE0, 0x06, 0x07, 0x38, 0x02, 0x26, 0x04,
+ 0x48, 0x03, 0x37, 0xB5, 0x52, 0xF5, 0x05, 0x05, 0x2F, 0x82,
+ 0x29, 0x84, 0x49, 0x83, 0x39, 0x25, 0x43, 0x24, 0x23, 0xD2,
+ 0x60, 0xA2, 0x23, 0xF2, 0x1C, 0xA2, 0x23, 0xF2, 0x0C, 0xD7,
+ 0x70, 0xC7, 0x0D, 0xA6, 0x41, 0xE0, 0x06, 0x07, 0x1D, 0xD6,
+ 0xBD, 0xF6, 0x7C, 0xD7, 0x0A, 0xC7, 0x0B, 0xA6, 0x41, 0xE0,
+ 0x06, 0x07, 0x1D, 0xD6, 0xBE, 0xF6, 0x7C, 0xD7, 0x51, 0xC7,
+ 0x0A, 0xA6, 0x41, 0xE0, 0x06, 0x07, 0x1D, 0xD6, 0xBF, 0xF6,
+ 0x7C, 0xD0, 0xD3, 0xC0, 0x01, 0xD1, 0xE0, 0xC1, 0x01, 0x32,
+ 0x04, 0xA2, 0x23, 0x82, 0x23, 0x33, 0x15, 0xA3, 0x33, 0x83,
+ 0x33, 0xD6, 0x80, 0x14, 0x26, 0x26, 0x44, 0x86, 0x6F, 0x18,
+ 0x46, 0xD6, 0xBA, 0xF6, 0x8C, 0xD6, 0x80, 0x14, 0x26, 0x26,
+ 0x44, 0x86, 0x6F, 0x18, 0x46, 0xD9, 0x03, 0x29, 0x89, 0x99,
+ 0x9E, 0x98, 0x86, 0x19, 0x89, 0xA9, 0x97, 0x89, 0x92, 0xA8,
+ 0x90, 0xD6, 0x41, 0xC6, 0x24, 0xF8, 0x01, 0x05, 0x79, 0x06,
+ 0x69, 0xD8, 0xBB, 0xF8, 0x6C, 0xD6, 0x80, 0x14, 0x26, 0x26,
+ 0x44, 0x86, 0x6F, 0x18, 0x46, 0xD9, 0x0C, 0x29, 0x89, 0x99,
+ 0x9E, 0xD6, 0x12, 0x28, 0x86, 0x98, 0x8E, 0x09, 0x89, 0xF9,
+ 0x0D, 0xA9, 0x9F, 0xA9, 0x9B, 0xD7, 0x0F, 0x4C, 0x97, 0x56,
+ 0x7D, 0x26, 0x96, 0x46, 0x87, 0xD7, 0x08, 0xD8, 0x0B, 0xD9,
+ 0x04, 0xE0, 0x06, 0x07, 0xBF, 0xD6, 0x80, 0x14, 0x26, 0x26,
+ 0x44, 0x86, 0x6F, 0x18, 0x46, 0xD9, 0x06, 0x29, 0x89, 0x99,
+ 0x9E, 0xB9, 0x9C, 0xF9, 0x0D, 0xD7, 0x0F, 0x4C, 0x97, 0x56,
+ 0x7D, 0x29, 0x96, 0x49, 0x87, 0xA7, 0x90, 0x26, 0x97, 0xD7,
+ 0x18, 0xD8, 0x1B, 0xD9, 0x05, 0xE0, 0x06, 0x07, 0xBF, 0xD5,
+ 0x0E, 0xC5, 0x70, 0xE0, 0x05, 0x07, 0xE7, 0x87, 0x74, 0x87,
+ 0x7F, 0x87, 0x7F, 0xD5, 0x01, 0xF7, 0x01, 0x05, 0xB9, 0xD5,
+ 0x02, 0xB7, 0x76, 0xF7, 0x01, 0x05, 0xB9, 0xD5, 0x00, 0xD6,
+ 0x0C, 0xD7, 0x0D, 0xD8, 0x0E, 0xE0, 0x05, 0x07, 0xBF, 0xD5,
+ 0x00, 0xD6, 0x0E, 0xD7, 0x0E, 0xD8, 0x0E, 0xE0, 0x05, 0x07,
+ 0xA3, 0xD6, 0x12, 0xD7, 0x14, 0xE0, 0x05, 0x07, 0xBF, 0xED,
+ 0xD5, 0xD2, 0x00, 0xC2, 0x13, 0x33, 0x12, 0x04, 0x13, 0x15,
+ 0x13, 0x5C, 0xC0, 0x5D, 0x0D, 0x23, 0xCD, 0xF3, 0x05, 0x05,
+ 0xD4, 0xA0, 0x11, 0xF0, 0x02, 0xF0, 0x0E, 0xF0, 0x0E, 0xE0,
+ 0x00, 0x07, 0xF9, 0xE0, 0x00, 0x07, 0xF5, 0xF0, 0x0E, 0xEE,
+ 0x36, 0xF0, 0x0A, 0xFB, 0x08, 0xF9, 0x18, 0xBA, 0x9A, 0xB6,
+ 0x62, 0x1C, 0xB6, 0x1C, 0x8A, 0xF6, 0x18, 0xF8, 0x01, 0x06,
+ 0x1B, 0xFB, 0x01, 0x06, 0x4A, 0xB9, 0x92, 0xF9, 0x05, 0x05,
+ 0xEF, 0xDA, 0x13, 0xF8, 0x28, 0xFA, 0x84, 0xBB, 0xB2, 0xFB,
+ 0x01, 0x06, 0x4A, 0xBB, 0xB8, 0xFB, 0x01, 0x06, 0x1F, 0xD7,
+ 0x00, 0xC7, 0x94, 0xF7, 0x78, 0xD9, 0x00, 0xC9, 0xFF, 0x19,
+ 0x79, 0xF9, 0x01, 0x06, 0x4C, 0xD7, 0x00, 0xC7, 0xD0, 0xF9,
+ 0x78, 0xD8, 0x00, 0xF7, 0x8C, 0xF9, 0x05, 0x06, 0x1B, 0xD8,
+ 0x12, 0xF8, 0x88, 0xF2, 0x8C, 0xA8, 0x83, 0xD9, 0x00, 0xF8,
+ 0x9C, 0xDA, 0x10, 0xFA, 0xA8, 0xA8, 0x83, 0xF8, 0xAC, 0xD8,
+ 0x00, 0xD7, 0x00, 0xC7, 0x64, 0xF7, 0x8C, 0xD8, 0x11, 0xF8,
+ 0x88, 0xF4, 0x8C, 0xD8, 0x00, 0xC8, 0x8C, 0xD9, 0x01, 0xF8,
+ 0x9C, 0xF0, 0x06, 0xF0, 0x02, 0xD9, 0x13, 0xFA, 0x98, 0xF2,
+ 0xAC, 0xEE, 0x0E, 0xD8, 0x00, 0xD7, 0x00, 0xC7, 0x60, 0xF7,
+ 0x8C, 0xD8, 0x0E, 0xF8, 0x88, 0xF4, 0x8C, 0xD8, 0x0F, 0xF8,
+ 0x88, 0xF2, 0x8C, 0xA8, 0x83, 0xD9, 0x00, 0xF8, 0x9C, 0xDA,
+ 0x0D, 0xFA, 0xA8, 0xA8, 0x83, 0xF8, 0xAC, 0xD8, 0x00, 0xC8,
+ 0x8C, 0xD9, 0x05, 0xF8, 0x9C, 0xF0, 0x06, 0xF0, 0x02, 0xD9,
+ 0x00, 0xC9, 0xAC, 0xD8, 0x0C, 0xFA, 0x80, 0xF9, 0xAC, 0xD9,
+ 0x00, 0xC9, 0x08, 0xD7, 0x00, 0xC7, 0x34, 0xF7, 0x9C, 0xC9,
+ 0x38, 0xD7, 0x00, 0xC7, 0x44, 0xF7, 0x9C, 0xC9, 0x20, 0xD7,
+ 0x00, 0xC7, 0x48, 0xF7, 0x9C, 0xD8, 0x15, 0xF2, 0x8C, 0xF0,
+ 0x06, 0xEE, 0x4B, 0xF0, 0x0A, 0xD7, 0x15, 0xD8, 0x00, 0xC8,
+ 0x30, 0xF8, 0x7C, 0xD7, 0x00, 0xC7, 0x98, 0xF6, 0x78, 0xD8,
+ 0x1A, 0xF8, 0x6C, 0xD8, 0x00, 0xC8, 0xAC, 0xDA, 0x20, 0xF8,
+ 0xAC, 0xD9, 0x20, 0xDA, 0x0A, 0xCA, 0xF0, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x14, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x11, 0xCA, 0xF7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x15, 0xCA,
+ 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xD8, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x30, 0xCA, 0xC8, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x7C, 0xCA, 0xF8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x00, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x94, 0xCA,
+ 0xC7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x78, 0xCA, 0xF7, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xD8, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x98, 0xCA, 0xC8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x88, 0xCA, 0xF9, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x9C, 0xCA,
+ 0xF8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xDA, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xDB, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x64, 0xCA, 0xCB, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0xAC, 0xCA, 0xFB, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0xFF, 0xCA,
+ 0xD8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x07, 0xCA, 0xC8, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x6C, 0xCA, 0x26, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x7C, 0xCA, 0xF6, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x63, 0xCA, 0xA6, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x6C, 0xCA,
+ 0x26, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x9C, 0xCA, 0xF6, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x63, 0xCA, 0xA6, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x15, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x67, 0xCA, 0x17, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x01, 0xCA,
+ 0xF7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x43, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x72, 0xCA, 0xB7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x01, 0xCA, 0xF7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x43, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x06, 0xCA, 0xF0, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x42, 0xCA, 0xE8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0xEC, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0xFF, 0xCA,
+ 0xC7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x11, 0xCA, 0xF7, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0xFF, 0xCA, 0xEF, 0xF9, 0xAC, 0xF7,
+ 0x7C, 0xD8, 0x00, 0xD7, 0x00, 0xC7, 0x64, 0xF7, 0x8C, 0xD7,
+ 0x14, 0xF7, 0x11, 0xEE, 0x4A, 0xF0, 0x0E, 0x44, 0xDC, 0xF4,
+ 0x05, 0x07, 0x13, 0xD4, 0x01, 0x7F, 0xC4, 0x7C, 0x1C, 0x13,
+ 0x43, 0x61, 0x13, 0xA2, 0x31, 0x6C, 0xCD, 0xB2, 0x22, 0xA4,
+ 0x20, 0xF4, 0x05, 0x07, 0x06, 0xA1, 0x01, 0xD4, 0x0F, 0x14,
+ 0x43, 0x60, 0x04, 0x70, 0x04, 0xA4, 0x33, 0x71, 0x14, 0xEF,
+ 0x15, 0xA1, 0x01, 0xD0, 0x00, 0xF0, 0x02, 0xD0, 0x01, 0xC0,
+ 0x70, 0xE0, 0x00, 0x07, 0xE7, 0xD1, 0x0F, 0x70, 0x21, 0xF0,
+ 0x02, 0x83, 0x03, 0xA5, 0x31, 0xD4, 0x58, 0xC4, 0x4F, 0xE0,
+ 0x04, 0x06, 0xFD, 0x22, 0x14, 0x34, 0x15, 0x85, 0x3F, 0xE0,
+ 0x04, 0x06, 0xFD, 0x82, 0x29, 0x82, 0x29, 0x02, 0x24, 0xD1,
+ 0x22, 0x11, 0x12, 0xD6, 0x00, 0x4F, 0xE1, 0xD8, 0x01, 0x17,
+ 0x87, 0x21, 0x17, 0xD6, 0x10, 0x4F, 0xE1, 0xF7, 0x05, 0x07,
+ 0x37, 0xD1, 0x1F, 0xF0, 0x02, 0xD0, 0x00, 0xD1, 0x02, 0xE0,
+ 0x00, 0x07, 0x45, 0xD1, 0x00, 0xD2, 0x01, 0xE0, 0x01, 0x07,
+ 0x45, 0xD2, 0x01, 0xD3, 0x02, 0xE0, 0x02, 0x07, 0x45, 0xF0,
+ 0x02, 0xD3, 0x00, 0xC3, 0xC0, 0xD4, 0x00, 0xD5, 0x0F, 0xD6,
+ 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xD3, 0xC6, 0xC3, 0x10, 0xD4,
+ 0x10, 0xD5, 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xE0,
+ 0x03, 0x07, 0xA8, 0xD3, 0xC6, 0xC3, 0x10, 0x87, 0x1E, 0x87,
+ 0x76, 0x1F, 0xF7, 0x87, 0x0E, 0x87, 0x7C, 0x1F, 0xF7, 0xD4,
+ 0x10, 0xD5, 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xE0,
+ 0x03, 0x07, 0xA8, 0xD3, 0x10, 0xC3, 0x27, 0xF3, 0x09, 0xD3,
+ 0x01, 0xD4, 0x1F, 0xD5, 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07,
+ 0xBF, 0xE0, 0x03, 0x07, 0xA8, 0xD3, 0x10, 0xC3, 0x27, 0xF3,
+ 0x09, 0xD3, 0x00, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0xD3,
+ 0xFF, 0xC3, 0x03, 0x2C, 0x4F, 0xD3, 0x00, 0xD4, 0x1F, 0xD5,
+ 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xE0, 0x03, 0x07,
+ 0xA8, 0xF0, 0x02, 0xD0, 0x00, 0xD1, 0x2C, 0xE0, 0x00, 0x07,
+ 0xD4, 0xF0, 0x02, 0xA4, 0x43, 0xF4, 0x0D, 0xD7, 0x01, 0x2D,
+ 0xCB, 0xD6, 0x10, 0x5E, 0x0E, 0xF6, 0x01, 0x07, 0x96, 0xD6,
+ 0x10, 0x16, 0x06, 0x67, 0x76, 0x65, 0x56, 0x1F, 0xF7, 0x3F,
+ 0xF5, 0xEF, 0x9A, 0x67, 0x70, 0x65, 0x50, 0x1E, 0xE7, 0x3E,
+ 0xE5, 0x17, 0x10, 0x55, 0xDC, 0x85, 0x52, 0xB5, 0x52, 0x00,
+ 0x05, 0x84, 0x43, 0xF7, 0x05, 0x07, 0x89, 0xF0, 0x02, 0xE0,
+ 0x00, 0x07, 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xF0, 0x02, 0xD0,
+ 0x60, 0xF1, 0x08, 0xD6, 0x00, 0xC6, 0xF0, 0xD3, 0x01, 0xD2,
+ 0x10, 0xA0, 0x03, 0xF7, 0x08, 0xA0, 0x03, 0xF8, 0x08, 0x24,
+ 0xDF, 0xF4, 0x01, 0x07, 0xB7, 0xE0, 0x06, 0x07, 0xD8, 0xA6,
+ 0x63, 0x81, 0x13, 0xB2, 0x22, 0xF2, 0x05, 0x07, 0xAE, 0xD0,
+ 0x60, 0xF0, 0x1C, 0xF0, 0x02, 0xAA, 0x01, 0xA6, 0x11, 0xA7,
+ 0x21, 0xD4, 0x60, 0xF5, 0x48, 0xDB, 0x01, 0x6B, 0xB3, 0x15,
+ 0x5F, 0xF4, 0x5C, 0xA4, 0x43, 0x8B, 0x32, 0x04, 0x4B, 0xF8,
+ 0x48, 0xA4, 0x43, 0xF9, 0x48, 0xE0, 0x06, 0x07, 0x87, 0xF4,
+ 0x9C, 0xB4, 0x42, 0xF4, 0x8C, 0xF0, 0x02, 0xC0, 0x80, 0xE0,
+ 0x00, 0x07, 0xD8, 0xF0, 0x02, 0xF0, 0x0A, 0xD3, 0x00, 0xC3,
+ 0x9C, 0xF3, 0x1C, 0xC3, 0xA0, 0xF3, 0x2C, 0xC3, 0xA4, 0xF3,
+ 0x0C, 0xD3, 0x00, 0xC3, 0xA8, 0xF3, 0x38, 0xF3, 0x01, 0x07,
+ 0xE0, 0xF0, 0x06, 0xF0, 0x02, 0xF0, 0x0A, 0xD2, 0x00, 0xC2,
+ 0xA4, 0xF2, 0x0C, 0xC2, 0xA8, 0xF1, 0x28, 0xF1, 0x01, 0x07,
+ 0xEC, 0xC2, 0x9C, 0xF1, 0x28, 0xC2, 0xA0, 0xF2, 0x28, 0xF0,
+ 0x06, 0xF0, 0x02, 0xD1, 0x00, 0xC1, 0x98, 0xF1, 0x0C, 0xF0,
+ 0x02, 0xD1, 0x00, 0xC1, 0x94, 0xF0, 0x18, 0xC1, 0x98, 0xF1,
+ 0x18, 0xF0, 0x02, 0xED, 0xDC, 0x90, 0x00, 0x88, 0x00, 0x30,
+ 0x00, 0x34, 0x00, 0x24, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0xDD, 0x3D, 0xD7, 0x00, 0x15, 0x00, 0x1A, 0x0A, 0x19, 0x00,
+ 0x1E, 0x00, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xA0, 0x01, 0x76, 0x01, 0x38, 0x02,
+ 0xC0, 0x02, 0x30, 0x04, 0x20, 0x03, 0x60, 0x06, 0x5C, 0x04,
+ 0xBC, 0x09, 0x60, 0x07, 0x9C, 0x0D, 0x70, 0xFF, 0xFF, 0x7A,
+ 0xF5, 0x10, 0xAE, 0x70, 0xA5, 0x22, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x17, 0x00, 0x04, 0x2C, 0x5F, 0x00, 0x00, 0x03,
+ 0x00, 0x06, 0x00, 0x27, 0xC5, 0x21, 0xF0, 0x16, 0x27, 0xC0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x67, 0x42, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x00, 0x1C, 0xFE,
+ 0xFE, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x30, 0x00, 0x0C, 0x08, 0x30, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x02, 0x00, 0x21, 0x00, 0x00, 0x00, 0x0C, 0x00,
+ 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x2C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x50, 0x00, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x0A, 0x03, 0xA9, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0F, 0x00,
+ 0x08, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x64, /* WAIT 100[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFF, 0x00, 0x00, 0xEC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x05, 0x01, 0xA0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x02, 0xB8, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x01, 0x01, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x08, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x11, 0xB2, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x2C, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x06, 0xB2, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x00, 0xC2, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x12, 0x02, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xA0, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x8E, 0xE9, 0xA0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x05, 0xB2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0xA0, 0xD2, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x08, 0xD4, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x6D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x56,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0xA0, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xF0, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x00, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xEE, 0xF8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x50, 0xD3, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0xD3, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xAA, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x9F, 0xA1, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x04, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x0F, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x24, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xE8, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xC7, 0xD0, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0xDC, 0xE9, 0x8F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x0A, 0xC1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x09, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB0, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x40, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x05, 0x01, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xE9, 0x41,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x01, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x05, 0xD9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x01, 0x4D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xF0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x23, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x01, 0x4D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0xA0, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x93, 0xE9, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x87, 0xF3, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x88, 0xF3, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x02, 0xD2, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x08, 0xD4, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x6D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x56,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x95,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x06, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x12, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xAA, 0xE9, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x10, 0xD1, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x01, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB0, 0xD5, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x21, 0x03, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x53, 0x24, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x11, 0x34, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x93, 0x11, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xD9, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x7C, 0xB3, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x01, 0x01, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x01, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0xD1,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x05, 0x5F, 0xEF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x05, 0x01, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x05, 0xC7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x05, 0xE9, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x01, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x01, 0x8F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x02, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x95, 0xD0, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x89, 0xF3, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x01, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x24, 0xD2, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x28, 0xD3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xFE, 0xD2, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x27, 0xF3, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x9A, 0xE9, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x04, 0x07, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0E, 0xF0, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0x7D, 0xCD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x1E, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x0A, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xE5, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xE4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xDC, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xD9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xD6, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xD3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xCC, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xC8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x0A, 0x80, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0xEA, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xDF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0D, 0xEA, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0xB9, 0xF1, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x92, 0x11, 0x3C, 0xDE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x22, 0x3C, 0xCE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x0C, 0xD0, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x20, 0xEA, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0xD4, 0xC0, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x0C, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xD1, 0xEA, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x03, 0xC0, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x1A, 0x80, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xEA, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x03, 0xD7, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x60, 0xE0, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0xAA, 0x71,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x0A, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x74, 0xD7, 0xD5, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x45, 0xF5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xF3, 0xB6, 0x46,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0xF6, 0x74, 0xC7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0D, 0x06, 0x45,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8B, 0xB8, 0x74, 0xF7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x42, 0x15, 0x64,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x0D, 0x22, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x25, 0xD3, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x23, 0xD3, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xFE, 0x22, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x20, 0x22, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0xB9, 0xF3, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x34, 0x22, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x70, 0x21, 0xEA, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xF4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0E, 0xEA, 0x61,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0A, 0xFB, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x18, 0xBA, 0x9A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB6, 0x62, 0x1C, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1C, 0x8A, 0xF6, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x01, 0x02, 0x46,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x01, 0x02, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB9, 0x92, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x22, 0xDA, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x28, 0xFA, 0x84,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xBB, 0xB2, 0xFB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x75, 0xBB, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x01, 0x02, 0x4A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x78, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x8C, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x46, 0xD8, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x88, 0xF2, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x83, 0xD9, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x9C, 0xDA, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0xA8, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0xAC, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x64,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x8C, 0xD8, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x88, 0xF4, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xC8, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x01, 0xF8, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x06, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x13, 0xFA, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0xAC, 0xEA, 0x39,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x60, 0xF7, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x0E, 0xF8, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x8C, 0xD8, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x88, 0xF2, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x83, 0xD9, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x9C, 0xDA, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0xA8, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0xAC, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC8, 0x8C, 0xD9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x9C, 0xF0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD9, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC9, 0xAC, 0xD8, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x80, 0xF9, 0xAC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x00, 0xC9, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0xC9, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x44,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0xC9, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0xD8, 0x15,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x8C, 0xF0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x76, 0xF0, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xD0, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x03, 0xF2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x02, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x05, 0xF2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x02, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x05, 0xF2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x02, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x02, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x05, 0x02, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x12, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x03, 0xFA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x12, 0xD7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x0A, 0xF7, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x71, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x82, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x04, 0xD3, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x51, 0xF6, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x01, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xC2, 0xF5, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x33, 0xF8, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x37, 0x1A, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB8, 0x62, 0x1C, 0x8A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAA, 0x63, 0x1D, 0xA5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x29, 0x89, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xAF, 0xF6, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xB4, 0xA0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x08, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xE3, 0xEA, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x03, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x18, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xC5, 0xA9, 0x51,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x38, 0xA8, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x03, 0xC2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x38, 0x12, 0x67,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x02, 0xC5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xA3, 0x39,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0xB6, 0x25, 0x77,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x62, 0xD8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x18, 0x82, 0x24, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x44, 0x18, 0x23, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x43, 0x08, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x33, 0xEA, 0xE3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0xF0, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xF1, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x8E, 0xD3, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x40, 0x13, 0xF3, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x32, 0xF0, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x04, 0x46,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x02, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x05, 0x02, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x0F, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x29, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x78, 0xF1, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x88, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xD2, 0x9F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0xB4, 0xD4, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xC1, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x1C, 0xF3, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0xA3, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB4, 0x42, 0xF4, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xEE, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x8E, 0xD6, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x28, 0x84, 0x45,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x44, 0xB3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x38, 0xA3, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x38, 0xA9, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x00, 0xE0, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x46, 0xD9, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x09, 0x04, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x09, 0x05, 0xC7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC9, 0x0A, 0xF9, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB9, 0x92, 0xDA, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x09, 0x03, 0xFA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x41, 0xAA, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB3, 0x28, 0xFB, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x09, 0x03, 0xC2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x44, 0x69, 0x07, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x54, 0x27, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x00, 0x4F, 0xA9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x7F, 0xAA, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x27, 0x7A, 0x27, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x01, 0x03, 0x25,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x4C, 0xA7, 0x91,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEB, 0x01, 0x9A, 0x41,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0x0E, 0x97, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x27, 0x7F, 0x2F, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x02, 0xF5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0xD6, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xBA, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x05, 0x02, 0xFA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD4, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x8E, 0xD7, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x01, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xB0, 0x99, 0x91,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4B, 0x14, 0xF6, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0xB3, 0xF9, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x96, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x4A, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0x10, 0x2D, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x04, 0xEB, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x79, 0xF7, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x73, 0xA5, 0xB5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x58, 0xF7, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x13, 0x19, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x99, 0x27, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x68, 0xB7, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x2C, 0xA5, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x58, 0xA5, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x58, 0x19, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x69, 0xBA, 0xA2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1B, 0x96, 0x49, 0xBA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x9A, 0x91, 0x29, 0x9A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x0D, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0x08, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x99, 0x07, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xB0, 0xD7, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x0C, 0xDB, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4B, 0x04, 0xF6, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0xB5, 0xF9, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x03, 0xB1,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEB, 0xB0, 0x4B, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0xB8, 0xF6, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x80, 0xA0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0x01, 0x2D, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x04, 0xEB, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x0C, 0xA5, 0xB5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x58, 0xF8, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x73, 0xF7, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x03, 0x19, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0xA0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x99, 0x27, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xA0, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x2C, 0xA5, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x58, 0xA5, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x58, 0x19, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB5, 0x52, 0xFA, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0xA6, 0x5E, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xBA, 0xA2, 0x1B, 0x96,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x49, 0xBA, 0x9A, 0x91,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x29, 0x9A, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0x08, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x99, 0x17, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xB0, 0xD7, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x79, 0xF7, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x8E, 0x4B, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0xB8, 0xA5, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x58, 0xA5, 0xB5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x58, 0x16, 0xA6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x03, 0xB1,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0x94, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x42, 0xB4, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x42, 0xA5, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x0D, 0x05, 0x53,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0xD2, 0x5F, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1F, 0xFA, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xB7, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x0D, 0x25, 0x54,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x5C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0x5E, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1E, 0x0A, 0x5E, 0x3A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x13, 0xD2, 0x9E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x00, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1D, 0xD3, 0xF4, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x23, 0xFB, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x23, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x23, 0xF6, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x36, 0x86, 0x66,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x33, 0xB3, 0x36, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x36, 0x33, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5C, 0xF4, 0x43, 0xCE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB9, 0x92, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xE1, 0xD6, 0xF2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC6, 0x03, 0x4E, 0xCA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1F, 0xF6, 0x10, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x23, 0x94, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x34, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x03, 0xCA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x2E, 0xFB, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x05, 0x03, 0xF2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x3A, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xF2, 0xC4, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3B, 0x4B, 0xF2, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAB, 0xB3, 0xC5, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4E, 0x5B, 0x2A, 0x1A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x01, 0x03, 0xF9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0xBC, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0xF4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x0F, 0xC7, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0xFF, 0x22, 0xD7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x24, 0xC7, 0x83, 0x8F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x33, 0x82, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x8E, 0xA7, 0x77,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x78, 0x42, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x79, 0xF8, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x43, 0x80, 0xA7, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x78, 0x44, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x9E, 0x98, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x28, 0x20, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x04, 0x1A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x68, 0xD8, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x42, 0x78, 0x82, 0x27,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x2C, 0xA6, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x3C, 0xA6, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x4C, 0xA6, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x5C, 0xD7, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x20, 0xE0, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x88, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x63, 0xF6, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD6, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x68, 0xD3, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0xF0, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0x01, 0xD5, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0x40, 0x1D, 0xDA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x07, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0xC0, 0x1D, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x07, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x12, 0xD7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0x14, 0xF4, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x71, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x82, 0xD4, 0xFE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0xFE, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x86, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0xE3, 0xC2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x5B, 0xC3, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x0D, 0xA4, 0x1F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x4B, 0xF4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x53, 0x33, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x34, 0xB4, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEC, 0x4D, 0xD4, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0x20, 0xE0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x83, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x85, 0x53, 0x33, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x39, 0xD2, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x8E, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x12, 0x4F, 0xF3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x03, 0xD6, 0xAA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x2A, 0x4E, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x1E, 0x4F, 0xF3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x72, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xED, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x37, 0x4F, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x0F, 0x27, 0x74,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x02, 0xD6, 0x74,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x01, 0xF4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xBC, 0xA2, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x03, 0xF4, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xA2, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x33, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x97, 0x35, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x82, 0xB3, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x08, 0xD6, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3F, 0xF8, 0xD6, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x97, 0x3B, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x8E, 0xB3, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3F, 0xF8, 0xD5, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x77, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x37, 0xD8, 0x8D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x88, 0xD8, 0xAE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x08, 0x87, 0x94, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x42, 0x08, 0x84,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x88, 0xD6, 0x52,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x1B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x31, 0xD5, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x9C, 0xEC, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x35, 0xD5, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x98, 0x94, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x01, 0x04, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0xF7, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x75, 0xB3, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x31, 0x23, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x01, 0x04, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x03, 0x2F, 0xF8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x0C, 0x07, 0x74,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0E, 0xD6, 0xDA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x31, 0xD6, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x53, 0xD4, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0xF0, 0x1C, 0xCA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x60, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x62, 0x08, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x88, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x88, 0xE0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x86, 0xD2, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x18, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x82, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x54, 0xF5, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x50, 0x5D, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x40, 0x65, 0xA3, 0x2F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x39, 0xF5, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x50, 0x5D, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x40, 0x65, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xA2, 0x25,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xF4, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4D, 0x0C, 0xF5, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xDD, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x28, 0xD5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x4F, 0x7D, 0xE9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x10, 0x15, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x74, 0x45, 0x73, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x70, 0x05, 0x20, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x33, 0x24, 0x44,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x0F, 0x83, 0x3F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x4F, 0x15, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x43, 0x23, 0x53,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x24, 0x60, 0xD5, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xC0, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x03, 0x36, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0xE3, 0x86, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB6, 0x62, 0x26, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0x06, 0x82, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB5, 0x52, 0xF5, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xFB, 0xC5, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x36, 0x05, 0xC5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x65, 0x86, 0x6F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x65, 0xA7, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x02, 0xD6, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x8D, 0xF3, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x67, 0x51, 0xA7, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x77, 0xD5, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x37, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x37, 0xA7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x02, 0xD6, 0xFC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x09, 0xD5, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x10, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x37, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x8B, 0xF3, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x02, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x3E, 0xB7, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0C, 0xD6, 0xB0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x05, 0x37, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0D, 0xD6, 0xB4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x68, 0x33, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x31, 0xD5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xCF, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x1B, 0xC5, 0x27,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x09, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x06, 0xC5, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x85, 0x73, 0x86, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x01, 0x2D, 0xD8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2E, 0xE8, 0xD4, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4C, 0xC3, 0x26, 0x64,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x31, 0x25, 0x54,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x13, 0x35, 0x03, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1F, 0xE9, 0x95, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1D, 0xF9, 0x20, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x05, 0x5A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x27, 0xA3, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x13, 0x37, 0x84, 0x39,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x13, 0x34, 0xED, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0xED, 0xD5, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x3C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x01, 0x2D, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8B, 0x92, 0xB6, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x33, 0xAA, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x80, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x10, 0x05, 0x5A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x85, 0x5B, 0xDA, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xCA, 0x01, 0x5E, 0xA3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0xFD, 0xCB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5C, 0x3B, 0x5F, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xB8, 0x1E, 0xAB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x01, 0xDB, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0x2B, 0xBA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x19, 0x2B, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2A, 0x52, 0xAA, 0xA5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8A, 0xA5, 0x5C, 0xA6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0x7A, 0x2C, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x53, 0x2A, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAA, 0xA5, 0x8A, 0xA5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0x7A, 0x1C, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB9, 0x52, 0x2A, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAA, 0xA5, 0x8A, 0xA5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0xA6, 0x1C, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x01, 0x05, 0x94,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x24, 0xF1, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x33, 0x24, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4D, 0x3B, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x78, 0xD2, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x80, 0x13, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x85, 0xFA, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x38, 0x2A, 0x52,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8A, 0xA4, 0x16, 0xA0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x05, 0xA5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x60, 0xD8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x89, 0x92, 0x19, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x00, 0xCB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x46, 0x9B, 0x86, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x68, 0xDA, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x6C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x16, 0xD1, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0xB9, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x1C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0xFF, 0xF2, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0xD1, 0x2B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xC1, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x0E, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x86, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xF0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xBD, 0xD3, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x02, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x82, 0xD1, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0x81, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x02, 0x2D, 0xDE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x0D, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x82, 0xF0, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xDF, 0xD3, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x44, 0xFE, 0xF3, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x45, 0xEF, 0x2D, 0xC9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2C, 0xC5, 0xF0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x0B, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xDF, 0xD5, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xD3, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xF9, 0xF5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x3D, 0xF6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xF9, 0xD5, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xD8, 0xDB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x01, 0x06, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x0D, 0x5E, 0xC9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x0D, 0xF6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x02, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x25, 0xDA, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0xA8, 0xD0, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0x2B, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x9B, 0xFA, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x01, 0xEE, 0x25,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x83, 0xF5, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x5B, 0xFA, 0x5C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x15, 0xE0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x82, 0xD0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x25, 0xDA, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0xA8, 0xDA, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x01, 0x06, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x31, 0xFA, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x01, 0xEE, 0x25,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0xA8, 0xDB, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x47, 0xD3, 0x46, 0x3D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x06, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x01, 0x06, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0xB9, 0xDB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0xBC, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x0B, 0xFB, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x3B, 0xFA, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x01, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8B, 0x38, 0x16, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAB, 0x60, 0xFB, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x2C, 0xF6, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x84, 0xF4, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8A, 0x29, 0xDB, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xAB, 0xA9, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x06, 0x3B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0xB4, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x3F, 0xDB, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x00, 0xC5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x41, 0xD5, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0xC0, 0xFB, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x41, 0xD5, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x70, 0x46, 0xB4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x85, 0xF9, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2A, 0x69, 0x9A, 0xAE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x6A, 0xB4, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x05, 0x06, 0x4F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x75, 0x17, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x50, 0x17, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x00, 0xC9, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x95, 0x09, 0x9B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x8C, 0xFA, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x01, 0x2F, 0xBA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x9A, 0xA2, 0x19, 0x9A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x00, 0xCA, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0xA9, 0x47, 0x9B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x08, 0x09, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x99, 0x89, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x97, 0xD9, 0x81,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x5C, 0xD9, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x8C, 0xD7, 0x15,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x07, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x01, 0x06, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x08, 0x09, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x99, 0x89, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x96, 0xD9, 0x81,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x5C, 0xA7, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x07, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x87, 0xF7, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x09, 0x77, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0xB6, 0x17, 0x7C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x1D, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x82, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x82, 0xF6, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x63, 0xD7, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x07, 0x84, 0x49,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x05, 0x06, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x41, 0xD8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x8D, 0x13, 0x41,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xD1, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x82, 0xD0, 0x16,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x12, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x82, 0xD0, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x02, 0xF0, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0xD1, 0xB2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x18, 0xD2, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x28, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xCF, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x80, 0xD6, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC6, 0x01, 0x5F, 0x3E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x82, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x08, 0xD6, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x01, 0xC5, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x0F, 0x77, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x06, 0xCB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x40, 0xC6, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x89, 0x5F, 0x3E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x06, 0xC7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x86, 0xD6, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC6, 0x09, 0x5F, 0x3E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x06, 0xC7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x02, 0xD6, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x81, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x37, 0xA7, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x41, 0xA6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x05, 0x5E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x81, 0xD9, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4D, 0x49, 0x8A, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x01, 0x2F, 0xAB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAB, 0xB3, 0x29, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x19, 0xC8, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x08, 0x07, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x82, 0x18, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x1C, 0xD7, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xD7, 0xEE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x1B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x63, 0xD7, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x1B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x06, 0x26,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x01, 0x2D, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x89, 0x54, 0xDA, 0x4F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xCA, 0x05, 0x09, 0x9A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x00, 0xDA, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xCA, 0xA0, 0xE0, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x86, 0xD7, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x7B, 0x97, 0xE0, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x86, 0x6B, 0x97,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x0A, 0x07, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xA4, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x0D, 0xD7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0xCB, 0xD6, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x0E, 0xF6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x0E, 0xD6, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x06, 0x67, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x65, 0x56, 0x1F, 0xF7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3F, 0xF5, 0xEF, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x67, 0x70, 0x65, 0x50,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1E, 0xE7, 0x3E, 0xE5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x10, 0x55, 0xDC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x85, 0x52, 0xB5, 0x52,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x84, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x07, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x37, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x20, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x60, 0xF1, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x00, 0xC4, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x10, 0xA0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x08, 0xA0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x08, 0xD3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xDF, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x2F, 0xE0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x86, 0xA4, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x81, 0x13, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x07, 0x25,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x60, 0xF0, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD3, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x38, 0x85, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x01, 0x66, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1C, 0xCA, 0xF3, 0x4C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x33, 0x03, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x38, 0xA9, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x0D, 0xD5, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x1D, 0x88, 0x19,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x01, 0x27, 0xD6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x66, 0x65, 0x67, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1C, 0xCA, 0x3C, 0xCB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x85, 0x57, 0xC5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x72, 0xB7, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x57, 0x89, 0x93,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x05, 0x07, 0x46,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x4C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x60, 0xF1, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x00, 0xC6, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x01, 0xD2, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x03, 0xF7, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x03, 0xF8, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x24, 0xDF, 0xF4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x65, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x86, 0xA6, 0x63,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x81, 0x13, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x07, 0x5C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x60, 0xF0, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xAA, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x11, 0xA7, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x60, 0xF5, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x01, 0x6B, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x5F, 0xF4, 0x5C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x43, 0x8B, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x4B, 0xF8, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x43, 0xF9, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x06, 0xFF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x9C, 0xB4, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x8C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x80, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x86, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0A, 0xD3, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x9C, 0xF3, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0xA0, 0xF3, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0xA4, 0xF3, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0xC3, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x38, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x8E, 0xF0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x4C, 0xD2, 0x67,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x3C, 0xD3, 0xC0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x02, 0xF1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xA1, 0xD2, 0x47,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x24, 0xD3, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x8D, 0xD1, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0xF0, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x86, 0xD6, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x68, 0xD2, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x40, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x37, 0xD0, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0xFF, 0xC1, 0xFD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x1C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x02, 0xC0, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x03, 0x2D, 0xDE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x13, 0x2C, 0xCD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0x98, 0xF1, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0x94, 0xF0, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0x98, 0xF1, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xF0, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x00, 0xC2, 0xA4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x0C, 0xC2, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x28, 0xF1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC8, 0xC2, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x28, 0xC2, 0xA0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x28, 0xF0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x08, 0xD3, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x20, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x94, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x24, 0xD5, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x58, 0x26, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x96, 0x6E, 0x10, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD1, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x18, 0xF1, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x86, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x89, 0xF5, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x01, 0xC6, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x78, 0x97, 0x7C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x71, 0xD4, 0x81,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x48, 0x17, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0x35, 0x40, 0x71,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x71, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x09, 0xC0, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x08, 0x0E, 0xD4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x63, 0x14, 0x0F, 0xF4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x11, 0x23, 0x80, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xEA, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x90, 0x00, 0x88, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x30, 0x00, 0x34, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x24, 0x00, 0x6C, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x10, 0x39, 0xA4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x15, 0x00, 0x24,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x08, 0xEC, 0x00, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x51, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x12, 0x39,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x0C, 0x80, 0xF0, 0xF7, 0x3E, 0x75, 0xC1, 0x8A, 0xE4, 0x02,
+ 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x05, 0x13, 0xEE, 0xAA, 0x5F, 0xEA, 0x90,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x06, 0x00, 0x0A, 0x4D, 0x8C, 0xF2, 0xD8, 0xCF, 0x30, 0x79,
+ 0x9F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x0B, 0x04, 0xA4, 0x6C,
+ 0x00, 0x10, /* Length = 16 bytes */
+ 0x0A, 0x01, 0x23, 0x24, 0x40, 0x08, 0xC3, 0x20, 0x10, 0x64,
+ 0x3C, 0xFA, 0xF7, 0xE1, 0x0C, 0x2C,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x09, 0x0B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x10, 0x13,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x16, 0x12,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1F, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x01, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x10,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 9056 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_base_firmware_i2c_files_base_firmwares_fm_init = {
+ XC3028_base_firmware_i2c_files_base_firmwares_fm_init_SEQUENCE
+};
+
+unsigned char XC3028_base_firmware_i2c_files_base_firmwares_fm_input1_init_SEQUENCE[9070] = {
+
+ 0x00, 0x00, /* RESET */
+ 0x0D, 0x53, /* Length = 3411 bytes */
+ 0x2A, 0x02, 0x19, 0xE0, 0x00, 0x07, 0xF5, 0xD4, 0x00, 0xC4,
+ 0xF0, 0xD6, 0xAE, 0xC6, 0x10, 0xD5, 0xF5, 0xC5, 0x7A, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x01, 0xC4, 0xF0, 0xD6, 0x51, 0xC6,
+ 0x02, 0xD5, 0x99, 0xC5, 0xA3, 0xE0, 0x04, 0x07, 0xD8, 0xD4,
+ 0x03, 0xC4, 0xF0, 0xD6, 0x04, 0xD5, 0x87, 0xC5, 0x06, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x04, 0xC4, 0xF0, 0xD6, 0x00, 0xD5,
+ 0x1F, 0xC5, 0x2C, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0x05, 0xC4,
+ 0xF0, 0xD6, 0x00, 0xC6, 0x06, 0xD5, 0x00, 0xC5, 0x40, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x06, 0xC4, 0xF0, 0xD6, 0x80, 0xD5,
+ 0xCD, 0xC5, 0x20, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0x07, 0xC4,
+ 0xF0, 0xD6, 0x00, 0xC6, 0xC0, 0xD5, 0x05, 0xC5, 0x2F, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x09, 0xC4, 0xF0, 0xD6, 0xC0, 0xC6,
+ 0x42, 0xD5, 0x67, 0xC5, 0x3C, 0xE0, 0x04, 0x07, 0xD8, 0xD4,
+ 0x0F, 0xC4, 0xF0, 0xD6, 0x3F, 0xC6, 0xC0, 0xD5, 0x11, 0xC5,
+ 0x11, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0x06, 0xC4, 0xF0, 0xD6,
+ 0x00, 0xC6, 0x24, 0xD5, 0x0E, 0xC5, 0x2E, 0xE0, 0x04, 0x07,
+ 0xD8, 0xD4, 0xFF, 0xC4, 0xFF, 0xF4, 0x09, 0xD4, 0x0F, 0xC4,
+ 0x70, 0xE0, 0x04, 0x07, 0xE7, 0x86, 0x69, 0x86, 0x69, 0xA2,
+ 0x61, 0xD4, 0x06, 0xC4, 0xF0, 0xD6, 0x00, 0xC6, 0x24, 0xD5,
+ 0xC0, 0xC5, 0x20, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0xFF, 0xC4,
+ 0xFF, 0xF4, 0x09, 0xD4, 0x0F, 0xC4, 0x70, 0xE0, 0x04, 0x07,
+ 0xE7, 0x86, 0x69, 0x86, 0x69, 0x12, 0x62, 0x98, 0x21, 0xF8,
+ 0x05, 0x02, 0x88, 0xF2, 0x0D, 0xD8, 0x80, 0x4C, 0x28, 0xF8,
+ 0x05, 0x02, 0x94, 0xE0, 0x00, 0x07, 0x82, 0xD4, 0x0E, 0xC4,
+ 0xF0, 0xD6, 0x00, 0xD5, 0x00, 0xE0, 0x04, 0x07, 0xD8, 0xD0,
+ 0x01, 0xC0, 0x70, 0xE0, 0x00, 0x07, 0xE7, 0xD3, 0x0F, 0x71,
+ 0x23, 0xF1, 0x01, 0x04, 0x7F, 0xD0, 0x60, 0xD1, 0x00, 0xC1,
+ 0x40, 0xD2, 0x0B, 0x00, 0x02, 0xF0, 0x1C, 0xA0, 0x03, 0xD1,
+ 0x00, 0xF0, 0x1C, 0xD0, 0x01, 0xD1, 0x03, 0xD2, 0x03, 0xD3,
+ 0x01, 0xE0, 0x00, 0x07, 0xBF, 0xD4, 0x9E, 0xA4, 0x45, 0xD5,
+ 0x10, 0xC5, 0x01, 0xF4, 0x5C, 0xD5, 0x40, 0xC5, 0x0B, 0xA4,
+ 0x43, 0xF4, 0x5C, 0xD3, 0x00, 0xC3, 0xF0, 0xD5, 0xD6, 0xD4,
+ 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3, 0x01, 0xC3, 0xF0, 0xD5,
+ 0x03, 0xC5, 0x19, 0xD4, 0x01, 0xE0, 0x03, 0x07, 0xD8, 0xD3,
+ 0x03, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD3, 0x04, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD3, 0x05, 0xC3, 0xF0, 0xD5, 0x00, 0xD4,
+ 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3, 0x06, 0xC3, 0xF0, 0xD5,
+ 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3, 0x07, 0xC3,
+ 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3,
+ 0x09, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD3, 0x0E, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD3, 0x0F, 0xC3, 0xF0, 0xD5, 0x00, 0xD4,
+ 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD0,
+ 0xFF, 0xC0, 0x03, 0xD1, 0x54, 0xD3, 0x01, 0xC3, 0xF0, 0xD5,
+ 0x03, 0xC5, 0x99, 0xD4, 0x01, 0xC4, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0,
+ 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2,
+ 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1,
+ 0x4C, 0xA1, 0x13, 0xD5, 0x00, 0xC5, 0x19, 0xD4, 0x01, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD5, 0x00, 0xC5, 0x99, 0xD4, 0x01, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3,
+ 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84,
+ 0x46, 0xD2, 0x00, 0xC2, 0x40, 0x34, 0x42, 0xF5, 0x18, 0xE0,
+ 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x23, 0xC5,
+ 0x19, 0xD4, 0x02, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x23, 0xC5,
+ 0x99, 0xD4, 0x02, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3,
+ 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2,
+ 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05,
+ 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x20, 0xC5, 0x19, 0xD4,
+ 0x02, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD5, 0x20, 0xC5, 0x99, 0xD4, 0x02, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C,
+ 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5,
+ 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5,
+ 0x23, 0xC5, 0x19, 0xD4, 0x03, 0xC4, 0xF0, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5,
+ 0x23, 0xC5, 0x99, 0xD4, 0x03, 0xC4, 0xF0, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3,
+ 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84,
+ 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0,
+ 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x20, 0xC5,
+ 0x19, 0xD4, 0x03, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x20, 0xC5, 0x99, 0xD4,
+ 0x03, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07,
+ 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34,
+ 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1,
+ 0x13, 0xD5, 0x23, 0xC5, 0x19, 0xD4, 0x04, 0xC4, 0xF0, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD5, 0x23, 0xC5, 0x99, 0xD4, 0x04, 0xC4, 0xF0, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C,
+ 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5,
+ 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5,
+ 0x20, 0xC5, 0x19, 0xD4, 0x04, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x20, 0xC5,
+ 0x99, 0xD4, 0x04, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0,
+ 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2,
+ 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1,
+ 0x4C, 0xA1, 0x13, 0xD5, 0x23, 0xC5, 0x19, 0xD4, 0x05, 0xC4,
+ 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD5, 0x23, 0xC5, 0x99, 0xD4, 0x05, 0xC4,
+ 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07,
+ 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34,
+ 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1,
+ 0x13, 0xD5, 0x20, 0xC5, 0x19, 0xD4, 0x05, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5,
+ 0x20, 0xC5, 0x99, 0xD4, 0x05, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3,
+ 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2,
+ 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05,
+ 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x23, 0xC5, 0x19, 0xD4,
+ 0x06, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x23, 0xC5, 0x99, 0xD4,
+ 0x06, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0,
+ 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2,
+ 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1,
+ 0x4C, 0xA1, 0x13, 0xD5, 0x20, 0xC5, 0x19, 0xD4, 0x06, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD5, 0x20, 0xC5, 0x99, 0xD4, 0x06, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3,
+ 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84,
+ 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0,
+ 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x00, 0xD4,
+ 0x00, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xEC,
+ 0xAF, 0xD1, 0x54, 0xD2, 0xA0, 0xF1, 0x2C, 0xA1, 0x13, 0xD2,
+ 0x90, 0xC2, 0x01, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0x44, 0xC2,
+ 0x01, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0xDC, 0xC2, 0x02, 0xF1,
+ 0x2C, 0xA1, 0x13, 0xD2, 0x3C, 0xC2, 0x02, 0xF1, 0x2C, 0xA1,
+ 0x13, 0xD2, 0x58, 0xC2, 0x04, 0xF1, 0x2C, 0xA1, 0x13, 0xD2,
+ 0x2C, 0xC2, 0x03, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0x3C, 0xC2,
+ 0x06, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0x88, 0xC2, 0x04, 0xF1,
+ 0x2C, 0xA1, 0x13, 0xD2, 0x04, 0xC2, 0x09, 0xF1, 0x2C, 0xA1,
+ 0x13, 0xD2, 0xD0, 0xC2, 0x06, 0xF1, 0x2C, 0xA1, 0x13, 0xD2,
+ 0x20, 0xC2, 0x0D, 0xF1, 0x2C, 0xA1, 0x13, 0xD5, 0x0E, 0xD6,
+ 0x00, 0xD7, 0x03, 0xD8, 0x0E, 0xE0, 0x05, 0x07, 0xBF, 0xD5,
+ 0x0F, 0xD6, 0x12, 0xD7, 0x14, 0xE0, 0x05, 0x07, 0xA3, 0xD6,
+ 0x0E, 0xD7, 0x0E, 0xE0, 0x05, 0x07, 0xA3, 0xD5, 0xFF, 0xC5,
+ 0xFF, 0xF5, 0x09, 0xD5, 0x01, 0xC5, 0x80, 0xD6, 0x02, 0xE0,
+ 0x05, 0x07, 0xD8, 0xD4, 0x0F, 0xC4, 0xF0, 0xD5, 0x01, 0xC5,
+ 0x01, 0xD6, 0x30, 0xC6, 0x40, 0xE0, 0x07, 0x07, 0x16, 0x87,
+ 0x7C, 0xD8, 0xBC, 0xF8, 0x7C, 0x1E, 0xEB, 0xE0, 0x04, 0x07,
+ 0xD8, 0xD0, 0x00, 0xD1, 0x16, 0xD2, 0x16, 0xD3, 0x01, 0xE0,
+ 0x00, 0x07, 0xBF, 0xD0, 0x01, 0xD1, 0x07, 0xD2, 0x08, 0xD3,
+ 0x00, 0xE0, 0x00, 0x07, 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xD4,
+ 0x00, 0xC4, 0xA0, 0xF4, 0x09, 0xD0, 0x00, 0xE0, 0x00, 0x07,
+ 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xD4, 0x0F, 0xC4, 0xF0, 0xD5,
+ 0xFE, 0xC5, 0xFE, 0xD6, 0x30, 0xC6, 0x40, 0xE0, 0x07, 0x07,
+ 0x16, 0x87, 0x7C, 0x1E, 0xEB, 0xE0, 0x04, 0x07, 0xD8, 0xC6,
+ 0xC0, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0xFF, 0xC4, 0xFF, 0xF4,
+ 0x09, 0xD4, 0x0F, 0xC4, 0x70, 0xE0, 0x04, 0x07, 0xE7, 0xDA,
+ 0xFF, 0x27, 0x6E, 0x2D, 0x5A, 0x88, 0x5F, 0x88, 0x83, 0x87,
+ 0x78, 0xDA, 0x8E, 0xAA, 0xA7, 0xFA, 0x7C, 0xAA, 0xA9, 0xFA,
+ 0x8C, 0xAA, 0xA9, 0xFA, 0x9C, 0xD4, 0x0F, 0xC4, 0xF0, 0xD5,
+ 0xFE, 0xC5, 0xFE, 0xD6, 0x3F, 0xC6, 0xC0, 0xD6, 0x30, 0xC6,
+ 0x40, 0xE0, 0x07, 0x07, 0x16, 0x87, 0x7C, 0x1E, 0xEB, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD0, 0x01, 0xE0, 0x00, 0x07, 0xBF, 0xD0,
+ 0x01, 0xD1, 0x16, 0xD2, 0x16, 0xD3, 0x01, 0xE0, 0x00, 0x07,
+ 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xD2, 0x60, 0xA2, 0x23, 0xF1,
+ 0x28, 0xA2, 0x23, 0xF0, 0x28, 0xD2, 0x00, 0xD4, 0x00, 0xD3,
+ 0x00, 0xD5, 0x04, 0xE0, 0x06, 0x07, 0x38, 0x02, 0x26, 0x04,
+ 0x48, 0x03, 0x37, 0xB5, 0x52, 0xF5, 0x05, 0x05, 0x2F, 0x82,
+ 0x29, 0x84, 0x49, 0x83, 0x39, 0x25, 0x43, 0x24, 0x23, 0xD2,
+ 0x60, 0xA2, 0x23, 0xF2, 0x1C, 0xA2, 0x23, 0xF2, 0x0C, 0xD7,
+ 0x70, 0xC7, 0x0D, 0xA6, 0x41, 0xE0, 0x06, 0x07, 0x1D, 0xD6,
+ 0xBD, 0xF6, 0x7C, 0xD7, 0x0A, 0xC7, 0x0B, 0xA6, 0x41, 0xE0,
+ 0x06, 0x07, 0x1D, 0xD6, 0xBE, 0xF6, 0x7C, 0xD7, 0x51, 0xC7,
+ 0x0A, 0xA6, 0x41, 0xE0, 0x06, 0x07, 0x1D, 0xD6, 0xBF, 0xF6,
+ 0x7C, 0xD0, 0xD3, 0xC0, 0x01, 0xD1, 0xE0, 0xC1, 0x01, 0x32,
+ 0x04, 0xA2, 0x23, 0x82, 0x23, 0x33, 0x15, 0xA3, 0x33, 0x83,
+ 0x33, 0xD6, 0x80, 0x14, 0x26, 0x26, 0x44, 0x86, 0x6F, 0x18,
+ 0x46, 0xD6, 0xBA, 0xF6, 0x8C, 0xD6, 0x80, 0x14, 0x26, 0x26,
+ 0x44, 0x86, 0x6F, 0x18, 0x46, 0xD9, 0x03, 0x29, 0x89, 0x99,
+ 0x9E, 0x98, 0x86, 0x19, 0x89, 0xA9, 0x97, 0x89, 0x92, 0xA8,
+ 0x90, 0xD6, 0x41, 0xC6, 0x24, 0xF8, 0x01, 0x05, 0x79, 0x06,
+ 0x69, 0xD8, 0xBB, 0xF8, 0x6C, 0xD6, 0x80, 0x14, 0x26, 0x26,
+ 0x44, 0x86, 0x6F, 0x18, 0x46, 0xD9, 0x0C, 0x29, 0x89, 0x99,
+ 0x9E, 0xD6, 0x12, 0x28, 0x86, 0x98, 0x8E, 0x09, 0x89, 0xF9,
+ 0x0D, 0xA9, 0x9F, 0xA9, 0x9B, 0xD7, 0x0F, 0x4C, 0x97, 0x56,
+ 0x7D, 0x26, 0x96, 0x46, 0x87, 0xD7, 0x08, 0xD8, 0x0B, 0xD9,
+ 0x04, 0xE0, 0x06, 0x07, 0xBF, 0xD6, 0x80, 0x14, 0x26, 0x26,
+ 0x44, 0x86, 0x6F, 0x18, 0x46, 0xD9, 0x06, 0x29, 0x89, 0x99,
+ 0x9E, 0xB9, 0x9C, 0xF9, 0x0D, 0xD7, 0x0F, 0x4C, 0x97, 0x56,
+ 0x7D, 0x29, 0x96, 0x49, 0x87, 0xA7, 0x90, 0x26, 0x97, 0xD7,
+ 0x18, 0xD8, 0x1B, 0xD9, 0x05, 0xE0, 0x06, 0x07, 0xBF, 0xD5,
+ 0x0E, 0xC5, 0x70, 0xE0, 0x05, 0x07, 0xE7, 0x87, 0x74, 0x87,
+ 0x7F, 0x87, 0x7F, 0xD5, 0x01, 0xF7, 0x01, 0x05, 0xB9, 0xD5,
+ 0x02, 0xB7, 0x76, 0xF7, 0x01, 0x05, 0xB9, 0xD5, 0x00, 0xD6,
+ 0x0C, 0xD7, 0x0D, 0xD8, 0x0E, 0xE0, 0x05, 0x07, 0xBF, 0xD5,
+ 0x00, 0xD6, 0x0E, 0xD7, 0x0E, 0xD8, 0x0E, 0xE0, 0x05, 0x07,
+ 0xA3, 0xD6, 0x12, 0xD7, 0x14, 0xE0, 0x05, 0x07, 0xBF, 0xED,
+ 0xD5, 0xD2, 0x00, 0xC2, 0x13, 0x33, 0x12, 0x04, 0x13, 0x15,
+ 0x13, 0x5C, 0xC0, 0x5D, 0x0D, 0x23, 0xCD, 0xF3, 0x05, 0x05,
+ 0xD4, 0xA0, 0x11, 0xF0, 0x02, 0xF0, 0x0E, 0xF0, 0x0E, 0xE0,
+ 0x00, 0x07, 0xF9, 0xE0, 0x00, 0x07, 0xF5, 0xF0, 0x0E, 0xEE,
+ 0x36, 0xF0, 0x0A, 0xFB, 0x08, 0xF9, 0x18, 0xBA, 0x9A, 0xB6,
+ 0x62, 0x1C, 0xB6, 0x1C, 0x8A, 0xF6, 0x18, 0xF8, 0x01, 0x06,
+ 0x1B, 0xFB, 0x01, 0x06, 0x4A, 0xB9, 0x92, 0xF9, 0x05, 0x05,
+ 0xEF, 0xDA, 0x13, 0xF8, 0x28, 0xFA, 0x84, 0xBB, 0xB2, 0xFB,
+ 0x01, 0x06, 0x4A, 0xBB, 0xB8, 0xFB, 0x01, 0x06, 0x1F, 0xD7,
+ 0x00, 0xC7, 0x94, 0xF7, 0x78, 0xD9, 0x00, 0xC9, 0xFF, 0x19,
+ 0x79, 0xF9, 0x01, 0x06, 0x4C, 0xD7, 0x00, 0xC7, 0xD0, 0xF9,
+ 0x78, 0xD8, 0x00, 0xF7, 0x8C, 0xF9, 0x05, 0x06, 0x1B, 0xD8,
+ 0x12, 0xF8, 0x88, 0xF2, 0x8C, 0xA8, 0x83, 0xD9, 0x00, 0xF8,
+ 0x9C, 0xDA, 0x10, 0xFA, 0xA8, 0xA8, 0x83, 0xF8, 0xAC, 0xD8,
+ 0x00, 0xD7, 0x00, 0xC7, 0x64, 0xF7, 0x8C, 0xD8, 0x11, 0xF8,
+ 0x88, 0xF4, 0x8C, 0xD8, 0x00, 0xC8, 0x8C, 0xD9, 0x01, 0xF8,
+ 0x9C, 0xF0, 0x06, 0xF0, 0x02, 0xD9, 0x13, 0xFA, 0x98, 0xF2,
+ 0xAC, 0xEE, 0x0E, 0xD8, 0x00, 0xD7, 0x00, 0xC7, 0x60, 0xF7,
+ 0x8C, 0xD8, 0x0E, 0xF8, 0x88, 0xF4, 0x8C, 0xD8, 0x0F, 0xF8,
+ 0x88, 0xF2, 0x8C, 0xA8, 0x83, 0xD9, 0x00, 0xF8, 0x9C, 0xDA,
+ 0x0D, 0xFA, 0xA8, 0xA8, 0x83, 0xF8, 0xAC, 0xD8, 0x00, 0xC8,
+ 0x8C, 0xD9, 0x05, 0xF8, 0x9C, 0xF0, 0x06, 0xF0, 0x02, 0xD9,
+ 0x00, 0xC9, 0xAC, 0xD8, 0x0C, 0xFA, 0x80, 0xF9, 0xAC, 0xD9,
+ 0x00, 0xC9, 0x08, 0xD7, 0x00, 0xC7, 0x34, 0xF7, 0x9C, 0xC9,
+ 0x38, 0xD7, 0x00, 0xC7, 0x44, 0xF7, 0x9C, 0xC9, 0x20, 0xD7,
+ 0x00, 0xC7, 0x48, 0xF7, 0x9C, 0xD8, 0x15, 0xF2, 0x8C, 0xF0,
+ 0x06, 0xEE, 0x4B, 0xF0, 0x0A, 0xD7, 0x15, 0xD8, 0x00, 0xC8,
+ 0x30, 0xF8, 0x7C, 0xD7, 0x00, 0xC7, 0x98, 0xF6, 0x78, 0xD8,
+ 0x1A, 0xF8, 0x6C, 0xD8, 0x00, 0xC8, 0xAC, 0xDA, 0x20, 0xF8,
+ 0xAC, 0xD9, 0x20, 0xDA, 0x0A, 0xCA, 0xF0, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x14, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x11, 0xCA, 0xF7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x15, 0xCA,
+ 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xD8, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x30, 0xCA, 0xC8, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x7C, 0xCA, 0xF8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x00, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x94, 0xCA,
+ 0xC7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x78, 0xCA, 0xF7, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xD8, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x98, 0xCA, 0xC8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x88, 0xCA, 0xF9, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x9C, 0xCA,
+ 0xF8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xDA, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xDB, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x64, 0xCA, 0xCB, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0xAC, 0xCA, 0xFB, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0xFF, 0xCA,
+ 0xD8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x07, 0xCA, 0xC8, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x6C, 0xCA, 0x26, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x7C, 0xCA, 0xF6, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x63, 0xCA, 0xA6, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x6C, 0xCA,
+ 0x26, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x9C, 0xCA, 0xF6, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x63, 0xCA, 0xA6, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x15, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x67, 0xCA, 0x17, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x01, 0xCA,
+ 0xF7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x43, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x72, 0xCA, 0xB7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x01, 0xCA, 0xF7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x43, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x06, 0xCA, 0xF0, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x42, 0xCA, 0xE8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0xEC, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0xFF, 0xCA,
+ 0xC7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x11, 0xCA, 0xF7, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0xFF, 0xCA, 0xEF, 0xF9, 0xAC, 0xF7,
+ 0x7C, 0xD8, 0x00, 0xD7, 0x00, 0xC7, 0x64, 0xF7, 0x8C, 0xD7,
+ 0x14, 0xF7, 0x11, 0xEE, 0x4A, 0xF0, 0x0E, 0x44, 0xDC, 0xF4,
+ 0x05, 0x07, 0x13, 0xD4, 0x01, 0x7F, 0xC4, 0x7C, 0x1C, 0x13,
+ 0x43, 0x61, 0x13, 0xA2, 0x31, 0x6C, 0xCD, 0xB2, 0x22, 0xA4,
+ 0x20, 0xF4, 0x05, 0x07, 0x06, 0xA1, 0x01, 0xD4, 0x0F, 0x14,
+ 0x43, 0x60, 0x04, 0x70, 0x04, 0xA4, 0x33, 0x71, 0x14, 0xEF,
+ 0x15, 0xA1, 0x01, 0xD0, 0x00, 0xF0, 0x02, 0xD0, 0x01, 0xC0,
+ 0x70, 0xE0, 0x00, 0x07, 0xE7, 0xD1, 0x0F, 0x70, 0x21, 0xF0,
+ 0x02, 0x83, 0x03, 0xA5, 0x31, 0xD4, 0x58, 0xC4, 0x4F, 0xE0,
+ 0x04, 0x06, 0xFD, 0x22, 0x14, 0x34, 0x15, 0x85, 0x3F, 0xE0,
+ 0x04, 0x06, 0xFD, 0x82, 0x29, 0x82, 0x29, 0x02, 0x24, 0xD1,
+ 0x22, 0x11, 0x12, 0xD6, 0x00, 0x4F, 0xE1, 0xD8, 0x01, 0x17,
+ 0x87, 0x21, 0x17, 0xD6, 0x10, 0x4F, 0xE1, 0xF7, 0x05, 0x07,
+ 0x37, 0xD1, 0x1F, 0xF0, 0x02, 0xD0, 0x00, 0xD1, 0x02, 0xE0,
+ 0x00, 0x07, 0x45, 0xD1, 0x00, 0xD2, 0x01, 0xE0, 0x01, 0x07,
+ 0x45, 0xD2, 0x01, 0xD3, 0x02, 0xE0, 0x02, 0x07, 0x45, 0xF0,
+ 0x02, 0xD3, 0x00, 0xC3, 0xC0, 0xD4, 0x00, 0xD5, 0x0F, 0xD6,
+ 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xD3, 0xC6, 0xC3, 0x10, 0xD4,
+ 0x10, 0xD5, 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xE0,
+ 0x03, 0x07, 0xA8, 0xD3, 0xC6, 0xC3, 0x10, 0x87, 0x1E, 0x87,
+ 0x76, 0x1F, 0xF7, 0x87, 0x0E, 0x87, 0x7C, 0x1F, 0xF7, 0xD4,
+ 0x10, 0xD5, 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xE0,
+ 0x03, 0x07, 0xA8, 0xD3, 0x10, 0xC3, 0x27, 0xF3, 0x09, 0xD3,
+ 0x01, 0xD4, 0x1F, 0xD5, 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07,
+ 0xBF, 0xE0, 0x03, 0x07, 0xA8, 0xD3, 0x10, 0xC3, 0x27, 0xF3,
+ 0x09, 0xD3, 0x00, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0xD3,
+ 0xFF, 0xC3, 0x03, 0x2C, 0x4F, 0xD3, 0x00, 0xD4, 0x1F, 0xD5,
+ 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xE0, 0x03, 0x07,
+ 0xA8, 0xF0, 0x02, 0xD0, 0x00, 0xD1, 0x2C, 0xE0, 0x00, 0x07,
+ 0xD4, 0xF0, 0x02, 0xA4, 0x43, 0xF4, 0x0D, 0xD7, 0x01, 0x2D,
+ 0xCB, 0xD6, 0x10, 0x5E, 0x0E, 0xF6, 0x01, 0x07, 0x96, 0xD6,
+ 0x10, 0x16, 0x06, 0x67, 0x76, 0x65, 0x56, 0x1F, 0xF7, 0x3F,
+ 0xF5, 0xEF, 0x9A, 0x67, 0x70, 0x65, 0x50, 0x1E, 0xE7, 0x3E,
+ 0xE5, 0x17, 0x10, 0x55, 0xDC, 0x85, 0x52, 0xB5, 0x52, 0x00,
+ 0x05, 0x84, 0x43, 0xF7, 0x05, 0x07, 0x89, 0xF0, 0x02, 0xE0,
+ 0x00, 0x07, 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xF0, 0x02, 0xD0,
+ 0x60, 0xF1, 0x08, 0xD6, 0x00, 0xC6, 0xF0, 0xD3, 0x01, 0xD2,
+ 0x10, 0xA0, 0x03, 0xF7, 0x08, 0xA0, 0x03, 0xF8, 0x08, 0x24,
+ 0xDF, 0xF4, 0x01, 0x07, 0xB7, 0xE0, 0x06, 0x07, 0xD8, 0xA6,
+ 0x63, 0x81, 0x13, 0xB2, 0x22, 0xF2, 0x05, 0x07, 0xAE, 0xD0,
+ 0x60, 0xF0, 0x1C, 0xF0, 0x02, 0xAA, 0x01, 0xA6, 0x11, 0xA7,
+ 0x21, 0xD4, 0x60, 0xF5, 0x48, 0xDB, 0x01, 0x6B, 0xB3, 0x15,
+ 0x5F, 0xF4, 0x5C, 0xA4, 0x43, 0x8B, 0x32, 0x04, 0x4B, 0xF8,
+ 0x48, 0xA4, 0x43, 0xF9, 0x48, 0xE0, 0x06, 0x07, 0x87, 0xF4,
+ 0x9C, 0xB4, 0x42, 0xF4, 0x8C, 0xF0, 0x02, 0xC0, 0x80, 0xE0,
+ 0x00, 0x07, 0xD8, 0xF0, 0x02, 0xF0, 0x0A, 0xD3, 0x00, 0xC3,
+ 0x9C, 0xF3, 0x1C, 0xC3, 0xA0, 0xF3, 0x2C, 0xC3, 0xA4, 0xF3,
+ 0x0C, 0xD3, 0x00, 0xC3, 0xA8, 0xF3, 0x38, 0xF3, 0x01, 0x07,
+ 0xE0, 0xF0, 0x06, 0xF0, 0x02, 0xF0, 0x0A, 0xD2, 0x00, 0xC2,
+ 0xA4, 0xF2, 0x0C, 0xC2, 0xA8, 0xF1, 0x28, 0xF1, 0x01, 0x07,
+ 0xEC, 0xC2, 0x9C, 0xF1, 0x28, 0xC2, 0xA0, 0xF2, 0x28, 0xF0,
+ 0x06, 0xF0, 0x02, 0xD1, 0x00, 0xC1, 0x98, 0xF1, 0x0C, 0xF0,
+ 0x02, 0xD1, 0x00, 0xC1, 0x94, 0xF0, 0x18, 0xC1, 0x98, 0xF1,
+ 0x18, 0xF0, 0x02, 0xED, 0xDC, 0x90, 0x00, 0x88, 0x00, 0x30,
+ 0x00, 0x34, 0x00, 0x24, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0xDD, 0x3D, 0xD7, 0x00, 0x15, 0x00, 0x1A, 0x0A, 0x19, 0x00,
+ 0x1E, 0x00, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xA0, 0x01, 0x76, 0x01, 0x38, 0x02,
+ 0xC0, 0x02, 0x30, 0x04, 0x20, 0x03, 0x60, 0x06, 0x5C, 0x04,
+ 0xBC, 0x09, 0x60, 0x07, 0x9C, 0x0D, 0x70, 0xFF, 0xFF, 0x7A,
+ 0xF5, 0x10, 0xAE, 0x70, 0xA5, 0x22, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x17, 0x00, 0x04, 0x2C, 0x5F, 0x00, 0x00, 0x03,
+ 0x00, 0x06, 0x00, 0x27, 0xC5, 0x21, 0xF0, 0x16, 0x27, 0xC0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x67, 0x42, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x00, 0x1C, 0xFE,
+ 0xFE, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x30, 0x00, 0x0C, 0x08, 0x30, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x02, 0x00, 0x21, 0x00, 0x00, 0x00, 0x0C, 0x00,
+ 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x2C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x50, 0x00, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x0A, 0x03, 0xA9, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0F, 0x00,
+ 0x08, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x64, /* WAIT 100[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFF, 0x00, 0x00, 0xEC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x05, 0x01, 0xA0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x02, 0xB8, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x01, 0x01, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x08, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x11, 0xB2, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x2C, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x06, 0xB2, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x00, 0xC2, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x12, 0x02, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xA0, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x8E, 0xE9, 0xA0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x05, 0xB2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0xA0, 0xD2, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x08, 0xD4, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x6D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x56,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0xA0, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xF0, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x00, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xEE, 0xF8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x50, 0xD3, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0xD3, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xAA, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x9F, 0xA1, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x04, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x0F, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x24, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xE8, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xC7, 0xD0, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0xDC, 0xE9, 0x8F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x0A, 0xC1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x09, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB0, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x40, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x05, 0x01, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xE9, 0x41,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x01, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x05, 0xD9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x01, 0x4D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xF0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x23, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x01, 0x4D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0xA0, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x93, 0xE9, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x87, 0xF3, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x88, 0xF3, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x95,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x06, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x12, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x07, 0xD3, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x00, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x6D, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x56, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xAA, 0xE9, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x10, 0xD1, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x01, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB0, 0xD5, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x21, 0x03, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x53, 0x24, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x11, 0x34, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x93, 0x11, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xD9, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x7C, 0xB3, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x01, 0x01, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x01, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0xD1,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x05, 0x5F, 0xEF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x05, 0x01, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x05, 0xC7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x05, 0xE9, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x01, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x01, 0x8F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x02, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x95, 0xD0, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x89, 0xF3, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x01, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x24, 0xD2, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x28, 0xD3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xFE, 0xD2, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x27, 0xF3, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x9A, 0xE9, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x04, 0x07, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0E, 0xF0, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0x7D, 0xCD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x1E, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x0A, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xE5, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xE4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xDC, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xD9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xD6, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xD3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xCC, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xC8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x0A, 0x80, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0xEA, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xDF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0D, 0xEA, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0xB9, 0xF1, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x92, 0x11, 0x3C, 0xDE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x22, 0x3C, 0xCE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x0C, 0xD0, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x20, 0xEA, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0xD4, 0xC0, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x0C, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xD1, 0xEA, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x03, 0xC0, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x1A, 0x80, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xEA, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x03, 0xD7, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x60, 0xE0, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0xAA, 0x71,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x0A, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x74, 0xD7, 0xD5, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x45, 0xF5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xF3, 0xB6, 0x46,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0xF6, 0x74, 0xC7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0D, 0x06, 0x45,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8B, 0xB8, 0x74, 0xF7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x42, 0x15, 0x64,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x0D, 0x22, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x25, 0xD3, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x23, 0xD3, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xFE, 0x22, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x20, 0x22, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0xB9, 0xF3, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x34, 0x22, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x70, 0x21, 0xEA, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xF4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0E, 0xEA, 0x61,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0A, 0xFB, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x18, 0xBA, 0x9A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB6, 0x62, 0x1C, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1C, 0x8A, 0xF6, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x01, 0x02, 0x46,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x01, 0x02, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB9, 0x92, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x22, 0xDA, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x28, 0xFA, 0x84,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xBB, 0xB2, 0xFB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x75, 0xBB, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x01, 0x02, 0x4A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x78, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x8C, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x46, 0xD8, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x88, 0xF2, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x83, 0xD9, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x9C, 0xDA, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0xA8, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0xAC, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x64,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x8C, 0xD8, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x88, 0xF4, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xC8, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x01, 0xF8, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x06, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x13, 0xFA, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0xAC, 0xEA, 0x39,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x60, 0xF7, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x0E, 0xF8, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x8C, 0xD8, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x88, 0xF2, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x83, 0xD9, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x9C, 0xDA, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0xA8, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0xAC, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC8, 0x8C, 0xD9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x9C, 0xF0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD9, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC9, 0xAC, 0xD8, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x80, 0xF9, 0xAC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x00, 0xC9, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0xC9, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x44,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0xC9, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0xD8, 0x15,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x8C, 0xF0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x76, 0xF0, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xD0, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x03, 0xF2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x02, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x05, 0xF2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x02, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x05, 0xF2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x02, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x02, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x05, 0x02, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x12, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x03, 0xFA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x12, 0xD7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x0A, 0xF7, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x71, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x82, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x04, 0xD3, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x51, 0xF6, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x01, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xC2, 0xF5, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x33, 0xF8, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x37, 0x1A, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB8, 0x62, 0x1C, 0x8A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAA, 0x63, 0x1D, 0xA5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x29, 0x89, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xAF, 0xF6, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xB4, 0xA0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x08, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xE3, 0xEA, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x03, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x18, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xC5, 0xA9, 0x51,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x38, 0xA8, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x03, 0xC2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x38, 0x12, 0x67,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x02, 0xC5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xA3, 0x39,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0xB6, 0x25, 0x77,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x62, 0xD8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x18, 0x82, 0x24, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x44, 0x18, 0x23, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x43, 0x08, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x33, 0xEA, 0xE3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0xF0, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xF1, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x8E, 0xD3, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x40, 0x13, 0xF3, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x32, 0xF0, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x04, 0x46,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x02, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x05, 0x02, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x0F, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x29, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x78, 0xF1, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x88, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xD2, 0x9F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0xB4, 0xD4, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xC1, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x1C, 0xF3, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0xA3, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB4, 0x42, 0xF4, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xEE, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x8E, 0xD6, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x28, 0x84, 0x45,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x44, 0xB3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x38, 0xA3, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x38, 0xA9, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x00, 0xE0, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x46, 0xD9, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x09, 0x04, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x09, 0x05, 0xC7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC9, 0x0A, 0xF9, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB9, 0x92, 0xDA, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x09, 0x03, 0xFA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x41, 0xAA, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB3, 0x28, 0xFB, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x09, 0x03, 0xC2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x44, 0x69, 0x07, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x54, 0x27, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x00, 0x4F, 0xA9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x7F, 0xAA, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x27, 0x7A, 0x27, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x01, 0x03, 0x25,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x4C, 0xA7, 0x91,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEB, 0x01, 0x9A, 0x41,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0x0E, 0x97, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x27, 0x7F, 0x2F, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x02, 0xF5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0xD6, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xBA, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x05, 0x02, 0xFA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD4, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x8E, 0xD7, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x01, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xB0, 0x99, 0x91,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4B, 0x14, 0xF6, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0xB3, 0xF9, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x96, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x4A, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0x10, 0x2D, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x04, 0xEB, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x79, 0xF7, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x73, 0xA5, 0xB5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x58, 0xF7, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x13, 0x19, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x99, 0x27, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x68, 0xB7, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x2C, 0xA5, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x58, 0xA5, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x58, 0x19, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x69, 0xBA, 0xA2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1B, 0x96, 0x49, 0xBA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x9A, 0x91, 0x29, 0x9A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x0D, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0x08, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x99, 0x07, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xB0, 0xD7, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x0C, 0xDB, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4B, 0x04, 0xF6, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0xB5, 0xF9, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x03, 0xB1,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEB, 0xB0, 0x4B, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0xB8, 0xF6, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x80, 0xA0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0x01, 0x2D, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x04, 0xEB, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x0C, 0xA5, 0xB5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x58, 0xF8, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x73, 0xF7, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x03, 0x19, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0xA0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x99, 0x27, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xA0, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x2C, 0xA5, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x58, 0xA5, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x58, 0x19, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB5, 0x52, 0xFA, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0xA6, 0x5E, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xBA, 0xA2, 0x1B, 0x96,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x49, 0xBA, 0x9A, 0x91,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x29, 0x9A, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0x08, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x99, 0x17, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xB0, 0xD7, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x79, 0xF7, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x8E, 0x4B, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0xB8, 0xA5, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x58, 0xA5, 0xB5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x58, 0x16, 0xA6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x03, 0xB1,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0x94, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x42, 0xB4, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x42, 0xA5, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x0D, 0x05, 0x53,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0xD2, 0x5F, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1F, 0xFA, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xB7, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x0D, 0x25, 0x54,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x5C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0x5E, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1E, 0x0A, 0x5E, 0x3A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x13, 0xD2, 0x9E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x00, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1D, 0xD3, 0xF4, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x23, 0xFB, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x23, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x23, 0xF6, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x36, 0x86, 0x66,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x33, 0xB3, 0x36, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x36, 0x33, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5C, 0xF4, 0x43, 0xCE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB9, 0x92, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xE1, 0xD6, 0xF2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC6, 0x03, 0x4E, 0xCA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1F, 0xF6, 0x10, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x23, 0x94, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x34, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x03, 0xCA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x2E, 0xFB, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x05, 0x03, 0xF2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x3A, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xF2, 0xC4, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3B, 0x4B, 0xF2, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAB, 0xB3, 0xC5, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4E, 0x5B, 0x2A, 0x1A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x01, 0x03, 0xF9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0xBC, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0xF4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x0F, 0xC7, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0xFF, 0x22, 0xD7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x24, 0xC7, 0x83, 0x8F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x33, 0x82, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x8E, 0xA7, 0x77,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x78, 0x42, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x79, 0xF8, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x43, 0x80, 0xA7, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x78, 0x44, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x9E, 0x98, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x28, 0x20, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x04, 0x1A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x68, 0xD8, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x42, 0x78, 0x82, 0x27,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x2C, 0xA6, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x3C, 0xA6, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x4C, 0xA6, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x5C, 0xD7, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x20, 0xE0, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x88, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x63, 0xF6, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD6, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x68, 0xD3, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0xF0, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0x01, 0xD5, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0x40, 0x1D, 0xDA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x07, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0xC0, 0x1D, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x07, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x12, 0xD7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0x14, 0xF4, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x71, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x82, 0xD4, 0xFE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0xFE, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x86, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0xE3, 0xC2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x5B, 0xC3, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x0D, 0xA4, 0x1F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x4B, 0xF4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x53, 0x33, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x34, 0xB4, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEC, 0x4D, 0xD4, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0x20, 0xE0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x83, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x85, 0x53, 0x33, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x39, 0xD2, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x8E, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x12, 0x4F, 0xF3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x03, 0xD6, 0xAA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x2A, 0x4E, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x1E, 0x4F, 0xF3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x72, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xED, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x37, 0x4F, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x0F, 0x27, 0x74,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x02, 0xD6, 0x74,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x01, 0xF4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xBC, 0xA2, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x03, 0xF4, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xA2, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x33, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x97, 0x35, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x82, 0xB3, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x08, 0xD6, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3F, 0xF8, 0xD6, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x97, 0x3B, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x8E, 0xB3, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3F, 0xF8, 0xD5, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x77, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x37, 0xD8, 0x8D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x88, 0xD8, 0xAE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x08, 0x87, 0x94, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x42, 0x08, 0x84,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x88, 0xD6, 0x52,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x1B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x31, 0xD5, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x9C, 0xEC, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x35, 0xD5, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x98, 0x94, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x01, 0x04, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0xF7, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x75, 0xB3, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x31, 0x23, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x01, 0x04, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x03, 0x2F, 0xF8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x0C, 0x07, 0x74,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0E, 0xD6, 0xDA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x31, 0xD6, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x53, 0xD4, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0xF0, 0x1C, 0xCA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x60, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x62, 0x08, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x88, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x88, 0xE0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x86, 0xD2, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x18, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x82, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x54, 0xF5, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x50, 0x5D, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x40, 0x65, 0xA3, 0x2F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x39, 0xF5, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x50, 0x5D, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x40, 0x65, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xA2, 0x25,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xF4, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4D, 0x0C, 0xF5, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xDD, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x28, 0xD5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x4F, 0x7D, 0xE9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x10, 0x15, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x74, 0x45, 0x73, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x70, 0x05, 0x20, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x33, 0x24, 0x44,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x0F, 0x83, 0x3F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x4F, 0x15, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x43, 0x23, 0x53,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x24, 0x60, 0xD5, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xC0, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x03, 0x36, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0xE3, 0x86, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB6, 0x62, 0x26, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0x06, 0x82, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB5, 0x52, 0xF5, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xFB, 0xC5, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x36, 0x05, 0xC5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x65, 0x86, 0x6F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x65, 0xA7, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x02, 0xD6, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x8D, 0xF3, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x67, 0x51, 0xA7, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x77, 0xD5, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x37, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x37, 0xA7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x02, 0xD6, 0xFC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x09, 0xD5, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x10, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x37, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x8B, 0xF3, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x02, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x3E, 0xB7, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0C, 0xD6, 0xB0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x05, 0x37, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0D, 0xD6, 0xB4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x68, 0x33, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x31, 0xD5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xCF, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x1B, 0xC5, 0x27,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x09, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x06, 0xC5, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x85, 0x73, 0x86, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x01, 0x2D, 0xD8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2E, 0xE8, 0xD4, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4C, 0xC3, 0x26, 0x64,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x31, 0x25, 0x54,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x13, 0x35, 0x03, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1F, 0xE9, 0x95, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1D, 0xF9, 0x20, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x05, 0x5A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x27, 0xA3, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x13, 0x37, 0x84, 0x39,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x13, 0x34, 0xED, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0xED, 0xD5, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x3C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x01, 0x2D, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8B, 0x92, 0xB6, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x33, 0xAA, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x80, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x10, 0x05, 0x5A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x85, 0x5B, 0xDA, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xCA, 0x01, 0x5E, 0xA3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0xFD, 0xCB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5C, 0x3B, 0x5F, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xB8, 0x1E, 0xAB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x01, 0xDB, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0x2B, 0xBA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x19, 0x2B, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2A, 0x52, 0xAA, 0xA5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8A, 0xA5, 0x5C, 0xA6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0x7A, 0x2C, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x53, 0x2A, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAA, 0xA5, 0x8A, 0xA5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0x7A, 0x1C, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB9, 0x52, 0x2A, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAA, 0xA5, 0x8A, 0xA5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0xA6, 0x1C, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x01, 0x05, 0x94,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x24, 0xF1, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x33, 0x24, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4D, 0x3B, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x78, 0xD2, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x80, 0x13, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x85, 0xFA, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x38, 0x2A, 0x52,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8A, 0xA4, 0x16, 0xA0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x05, 0xA5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x60, 0xD8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x89, 0x92, 0x19, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x00, 0xCB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x46, 0x9B, 0x86, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x68, 0xDA, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x6C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x16, 0xD1, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0xB9, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x1C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0xFF, 0xF2, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0xD1, 0x2B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xC1, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x0E, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x86, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xF0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xBD, 0xD3, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x02, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x82, 0xD1, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0x81, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x02, 0x2D, 0xDE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x0D, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x82, 0xF0, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xDF, 0xD3, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x44, 0xFE, 0xF3, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x45, 0xEF, 0x2D, 0xC9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2C, 0xC5, 0xF0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x0B, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xDF, 0xD5, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xD3, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xF9, 0xF5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x3D, 0xF6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xF9, 0xD5, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xD8, 0xDB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x01, 0x06, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x0D, 0x5E, 0xC9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x0D, 0xF6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x02, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x25, 0xDA, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0xA8, 0xD0, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0x2B, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x9B, 0xFA, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x01, 0xEE, 0x25,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x83, 0xF5, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x5B, 0xFA, 0x5C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x15, 0xE0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x82, 0xD0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x25, 0xDA, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0xA8, 0xDA, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x01, 0x06, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x31, 0xFA, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x01, 0xEE, 0x25,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0xA8, 0xDB, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x47, 0xD3, 0x46, 0x3D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x06, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x01, 0x06, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0xB9, 0xDB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0xBC, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x0B, 0xFB, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x3B, 0xFA, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x01, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8B, 0x38, 0x16, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAB, 0x60, 0xFB, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x2C, 0xF6, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x84, 0xF4, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8A, 0x29, 0xDB, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xAB, 0xA9, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x06, 0x3B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0xB4, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x3F, 0xDB, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x00, 0xC5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x41, 0xD5, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0xC0, 0xFB, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x41, 0xD5, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x70, 0x46, 0xB4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x85, 0xF9, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2A, 0x69, 0x9A, 0xAE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x6A, 0xB4, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x05, 0x06, 0x4F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x75, 0x17, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x50, 0x17, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x00, 0xC9, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x95, 0x09, 0x9B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x8C, 0xFA, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x01, 0x2F, 0xBA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x9A, 0xA2, 0x19, 0x9A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x00, 0xCA, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0xA9, 0x47, 0x9B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x08, 0x09, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x99, 0x89, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x97, 0xD9, 0x81,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x5C, 0xD9, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x8C, 0xD7, 0x15,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x07, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x01, 0x06, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x08, 0x09, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x99, 0x89, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x96, 0xD9, 0x81,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x5C, 0xA7, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x07, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x87, 0xF7, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x09, 0x77, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0xB6, 0x17, 0x7C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x1D, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x82, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x82, 0xF6, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x63, 0xD7, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x07, 0x84, 0x49,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x05, 0x06, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x41, 0xD8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x8D, 0x13, 0x41,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xD1, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x82, 0xD0, 0x16,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x12, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x82, 0xD0, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x02, 0xF0, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0xD1, 0xB2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x18, 0xD2, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x28, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xCF, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x80, 0xD6, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC6, 0x01, 0x5F, 0x3E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x82, 0x07, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x08, 0xD6, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x01, 0xC5, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x0F, 0x77, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x06, 0xCB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x40, 0xC6, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x89, 0x5F, 0x3E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x06, 0xC7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x86, 0xD6, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC6, 0x09, 0x5F, 0x3E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x06, 0xC7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x02, 0xD6, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x81, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x37, 0xA7, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x41, 0xA6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x05, 0x5E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x81, 0xD9, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4D, 0x49, 0x8A, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x01, 0x2F, 0xAB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAB, 0xB3, 0x29, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x19, 0xC8, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x08, 0x07, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x82, 0x18, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x1C, 0xD7, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xD7, 0xEE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x1B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x63, 0xD7, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x1B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x06, 0x26,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x01, 0x2D, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x89, 0x54, 0xDA, 0x4F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xCA, 0x05, 0x09, 0x9A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x00, 0xDA, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xCA, 0xA0, 0xE0, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x86, 0xD7, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x7B, 0x97, 0xE0, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x86, 0x6B, 0x97,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x0A, 0x07, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xA4, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x0D, 0xD7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0xCB, 0xD6, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x0E, 0xF6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x0E, 0xD6, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x06, 0x67, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x65, 0x56, 0x1F, 0xF7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3F, 0xF5, 0xEF, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x67, 0x70, 0x65, 0x50,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1E, 0xE7, 0x3E, 0xE5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x10, 0x55, 0xDC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x85, 0x52, 0xB5, 0x52,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x84, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x07, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x37, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x20, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x60, 0xF1, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x00, 0xC4, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x10, 0xA0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x08, 0xA0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x08, 0xD3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xDF, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x2F, 0xE0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x86, 0xA4, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x81, 0x13, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x07, 0x25,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x60, 0xF0, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD3, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x38, 0x85, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x01, 0x66, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1C, 0xCA, 0xF3, 0x4C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x33, 0x03, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x38, 0xA9, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x0D, 0xD5, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x1D, 0x88, 0x19,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x01, 0x27, 0xD6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x66, 0x65, 0x67, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1C, 0xCA, 0x3C, 0xCB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x85, 0x57, 0xC5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x72, 0xB7, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x57, 0x89, 0x93,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x05, 0x07, 0x46,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x4C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x60, 0xF1, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x00, 0xC6, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x01, 0xD2, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x03, 0xF7, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x03, 0xF8, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x24, 0xDF, 0xF4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x65, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x86, 0xA6, 0x63,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x81, 0x13, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x07, 0x5C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x60, 0xF0, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xAA, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x11, 0xA7, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x60, 0xF5, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x01, 0x6B, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x5F, 0xF4, 0x5C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x43, 0x8B, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x4B, 0xF8, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x43, 0xF9, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x06, 0xFF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x9C, 0xB4, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x8C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x80, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x86, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0A, 0xD3, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x9C, 0xF3, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0xA0, 0xF3, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0xA4, 0xF3, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0xC3, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x38, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x8E, 0xF0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x4C, 0xD2, 0x67,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x3C, 0xD3, 0xC0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x02, 0xF1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xA1, 0xD2, 0x47,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x24, 0xD3, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x8D, 0xD1, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0xF0, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x86, 0xD6, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x68, 0xD2, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x40, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x37, 0xD0, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0xFF, 0xC1, 0xFD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x1C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x02, 0xC0, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x03, 0x2D, 0xDE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x13, 0x2C, 0xCD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0x98, 0xF1, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0x94, 0xF0, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0x98, 0xF1, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xF0, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x00, 0xC2, 0xA4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x0C, 0xC2, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x28, 0xF1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC8, 0xC2, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x28, 0xC2, 0xA0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x28, 0xF0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x08, 0xD3, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x20, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x94, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x24, 0xD5, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x58, 0x26, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x96, 0x6E, 0x10, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD1, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x18, 0xF1, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x86, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x89, 0xF5, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x01, 0xC6, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x78, 0x97, 0x7C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x71, 0xD4, 0x81,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x48, 0x17, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0x35, 0x40, 0x71,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x71, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x09, 0xC0, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x08, 0x0E, 0xD4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x63, 0x14, 0x0F, 0xF4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x11, 0x23, 0x80, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xEA, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x90, 0x00, 0x88, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x30, 0x00, 0x34, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x24, 0x00, 0x6C, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x10, 0x39, 0xA4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x15, 0x00, 0x24,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x08, 0xEC, 0x00, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x51, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x12, 0x39,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x0C, 0x80, 0xF0, 0xF7, 0x3E, 0x75, 0xC1, 0x8A, 0xE4, 0x02,
+ 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x05, 0x13, 0xEE, 0xAA, 0x5F, 0xEA, 0x90,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x06, 0x00, 0x0A, 0x4D, 0x8C, 0xF2, 0xD8, 0xCF, 0x30, 0x09,
+ 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x0B, 0x04, 0xA4, 0x6C,
+ 0x00, 0x10, /* Length = 16 bytes */
+ 0x0A, 0x01, 0x23, 0x24, 0x40, 0x08, 0xC3, 0x20, 0x10, 0x64,
+ 0x3C, 0xFA, 0xF7, 0xE1, 0x0C, 0x2C,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x09, 0x0B,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x1B, 0x06, 0x28, 0x10, 0x60, 0x20, 0x91, 0xCD, 0x18,
+ 0x0B, 0x2E,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x10, 0x13,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x16, 0x12,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1F, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x01, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x10,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 9070 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_base_firmware_i2c_files_base_firmwares_fm_input1_init = {
+ XC3028_base_firmware_i2c_files_base_firmwares_fm_input1_init_SEQUENCE
+};
+
+unsigned char XC3028_base_firmware_i2c_files_base_firmwares_init_SEQUENCE[9134] = {
+
+ 0x00, 0x00, /* RESET */
+ 0x0D, 0x53, /* Length = 3411 bytes */
+ 0x2A, 0x02, 0x19, 0xE0, 0x00, 0x07, 0xF5, 0xD4, 0x00, 0xC4,
+ 0xF0, 0xD6, 0xAE, 0xC6, 0x10, 0xD5, 0xF5, 0xC5, 0x7A, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x01, 0xC4, 0xF0, 0xD6, 0x51, 0xC6,
+ 0x02, 0xD5, 0x99, 0xC5, 0xA3, 0xE0, 0x04, 0x07, 0xD8, 0xD4,
+ 0x03, 0xC4, 0xF0, 0xD6, 0x04, 0xD5, 0x87, 0xC5, 0x06, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x04, 0xC4, 0xF0, 0xD6, 0x00, 0xD5,
+ 0x1F, 0xC5, 0x2C, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0x05, 0xC4,
+ 0xF0, 0xD6, 0x00, 0xC6, 0x06, 0xD5, 0x00, 0xC5, 0x40, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x06, 0xC4, 0xF0, 0xD6, 0x80, 0xD5,
+ 0xCD, 0xC5, 0x20, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0x07, 0xC4,
+ 0xF0, 0xD6, 0x00, 0xC6, 0xC0, 0xD5, 0x05, 0xC5, 0x2F, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x09, 0xC4, 0xF0, 0xD6, 0xC0, 0xC6,
+ 0x42, 0xD5, 0x67, 0xC5, 0x3C, 0xE0, 0x04, 0x07, 0xD8, 0xD4,
+ 0x0F, 0xC4, 0xF0, 0xD6, 0x3F, 0xC6, 0xC0, 0xD5, 0x11, 0xC5,
+ 0x11, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0x06, 0xC4, 0xF0, 0xD6,
+ 0x00, 0xC6, 0x24, 0xD5, 0x0E, 0xC5, 0x2E, 0xE0, 0x04, 0x07,
+ 0xD8, 0xD4, 0xFF, 0xC4, 0xFF, 0xF4, 0x09, 0xD4, 0x0F, 0xC4,
+ 0x70, 0xE0, 0x04, 0x07, 0xE7, 0x86, 0x69, 0x86, 0x69, 0xA2,
+ 0x61, 0xD4, 0x06, 0xC4, 0xF0, 0xD6, 0x00, 0xC6, 0x24, 0xD5,
+ 0xC0, 0xC5, 0x20, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0xFF, 0xC4,
+ 0xFF, 0xF4, 0x09, 0xD4, 0x0F, 0xC4, 0x70, 0xE0, 0x04, 0x07,
+ 0xE7, 0x86, 0x69, 0x86, 0x69, 0x12, 0x62, 0x98, 0x21, 0xF8,
+ 0x05, 0x02, 0x88, 0xF2, 0x0D, 0xD8, 0x80, 0x4C, 0x28, 0xF8,
+ 0x05, 0x02, 0x94, 0xE0, 0x00, 0x07, 0x82, 0xD4, 0x0E, 0xC4,
+ 0xF0, 0xD6, 0x00, 0xD5, 0x00, 0xE0, 0x04, 0x07, 0xD8, 0xD0,
+ 0x01, 0xC0, 0x70, 0xE0, 0x00, 0x07, 0xE7, 0xD3, 0x0F, 0x71,
+ 0x23, 0xF1, 0x01, 0x04, 0x7F, 0xD0, 0x60, 0xD1, 0x00, 0xC1,
+ 0x40, 0xD2, 0x0B, 0x00, 0x02, 0xF0, 0x1C, 0xA0, 0x03, 0xD1,
+ 0x00, 0xF0, 0x1C, 0xD0, 0x01, 0xD1, 0x03, 0xD2, 0x03, 0xD3,
+ 0x01, 0xE0, 0x00, 0x07, 0xBF, 0xD4, 0x9E, 0xA4, 0x45, 0xD5,
+ 0x10, 0xC5, 0x01, 0xF4, 0x5C, 0xD5, 0x40, 0xC5, 0x0B, 0xA4,
+ 0x43, 0xF4, 0x5C, 0xD3, 0x00, 0xC3, 0xF0, 0xD5, 0xD6, 0xD4,
+ 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3, 0x01, 0xC3, 0xF0, 0xD5,
+ 0x03, 0xC5, 0x19, 0xD4, 0x01, 0xE0, 0x03, 0x07, 0xD8, 0xD3,
+ 0x03, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD3, 0x04, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD3, 0x05, 0xC3, 0xF0, 0xD5, 0x00, 0xD4,
+ 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3, 0x06, 0xC3, 0xF0, 0xD5,
+ 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3, 0x07, 0xC3,
+ 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3,
+ 0x09, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD3, 0x0E, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD3, 0x0F, 0xC3, 0xF0, 0xD5, 0x00, 0xD4,
+ 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD0,
+ 0xFF, 0xC0, 0x03, 0xD1, 0x54, 0xD3, 0x01, 0xC3, 0xF0, 0xD5,
+ 0x03, 0xC5, 0x99, 0xD4, 0x01, 0xC4, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0,
+ 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2,
+ 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1,
+ 0x4C, 0xA1, 0x13, 0xD5, 0x00, 0xC5, 0x19, 0xD4, 0x01, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD5, 0x00, 0xC5, 0x99, 0xD4, 0x01, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3,
+ 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84,
+ 0x46, 0xD2, 0x00, 0xC2, 0x40, 0x34, 0x42, 0xF5, 0x18, 0xE0,
+ 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x23, 0xC5,
+ 0x19, 0xD4, 0x02, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x23, 0xC5,
+ 0x99, 0xD4, 0x02, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3,
+ 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2,
+ 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05,
+ 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x20, 0xC5, 0x19, 0xD4,
+ 0x02, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD5, 0x20, 0xC5, 0x99, 0xD4, 0x02, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C,
+ 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5,
+ 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5,
+ 0x23, 0xC5, 0x19, 0xD4, 0x03, 0xC4, 0xF0, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5,
+ 0x23, 0xC5, 0x99, 0xD4, 0x03, 0xC4, 0xF0, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3,
+ 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84,
+ 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0,
+ 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x20, 0xC5,
+ 0x19, 0xD4, 0x03, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x20, 0xC5, 0x99, 0xD4,
+ 0x03, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07,
+ 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34,
+ 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1,
+ 0x13, 0xD5, 0x23, 0xC5, 0x19, 0xD4, 0x04, 0xC4, 0xF0, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD5, 0x23, 0xC5, 0x99, 0xD4, 0x04, 0xC4, 0xF0, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C,
+ 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5,
+ 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5,
+ 0x20, 0xC5, 0x19, 0xD4, 0x04, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x20, 0xC5,
+ 0x99, 0xD4, 0x04, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0,
+ 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2,
+ 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1,
+ 0x4C, 0xA1, 0x13, 0xD5, 0x23, 0xC5, 0x19, 0xD4, 0x05, 0xC4,
+ 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD5, 0x23, 0xC5, 0x99, 0xD4, 0x05, 0xC4,
+ 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07,
+ 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34,
+ 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1,
+ 0x13, 0xD5, 0x20, 0xC5, 0x19, 0xD4, 0x05, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5,
+ 0x20, 0xC5, 0x99, 0xD4, 0x05, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3,
+ 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2,
+ 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05,
+ 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x23, 0xC5, 0x19, 0xD4,
+ 0x06, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x23, 0xC5, 0x99, 0xD4,
+ 0x06, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0,
+ 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2,
+ 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1,
+ 0x4C, 0xA1, 0x13, 0xD5, 0x20, 0xC5, 0x19, 0xD4, 0x06, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD5, 0x20, 0xC5, 0x99, 0xD4, 0x06, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3,
+ 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84,
+ 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0,
+ 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x00, 0xD4,
+ 0x00, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xEC,
+ 0xAF, 0xD1, 0x54, 0xD2, 0xA0, 0xF1, 0x2C, 0xA1, 0x13, 0xD2,
+ 0x90, 0xC2, 0x01, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0x44, 0xC2,
+ 0x01, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0xDC, 0xC2, 0x02, 0xF1,
+ 0x2C, 0xA1, 0x13, 0xD2, 0x3C, 0xC2, 0x02, 0xF1, 0x2C, 0xA1,
+ 0x13, 0xD2, 0x58, 0xC2, 0x04, 0xF1, 0x2C, 0xA1, 0x13, 0xD2,
+ 0x2C, 0xC2, 0x03, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0x3C, 0xC2,
+ 0x06, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0x88, 0xC2, 0x04, 0xF1,
+ 0x2C, 0xA1, 0x13, 0xD2, 0x04, 0xC2, 0x09, 0xF1, 0x2C, 0xA1,
+ 0x13, 0xD2, 0xD0, 0xC2, 0x06, 0xF1, 0x2C, 0xA1, 0x13, 0xD2,
+ 0x20, 0xC2, 0x0D, 0xF1, 0x2C, 0xA1, 0x13, 0xD5, 0x0E, 0xD6,
+ 0x00, 0xD7, 0x03, 0xD8, 0x0E, 0xE0, 0x05, 0x07, 0xBF, 0xD5,
+ 0x0F, 0xD6, 0x12, 0xD7, 0x14, 0xE0, 0x05, 0x07, 0xA3, 0xD6,
+ 0x0E, 0xD7, 0x0E, 0xE0, 0x05, 0x07, 0xA3, 0xD5, 0xFF, 0xC5,
+ 0xFF, 0xF5, 0x09, 0xD5, 0x01, 0xC5, 0x80, 0xD6, 0x02, 0xE0,
+ 0x05, 0x07, 0xD8, 0xD4, 0x0F, 0xC4, 0xF0, 0xD5, 0x01, 0xC5,
+ 0x01, 0xD6, 0x30, 0xC6, 0x40, 0xE0, 0x07, 0x07, 0x16, 0x87,
+ 0x7C, 0xD8, 0xBC, 0xF8, 0x7C, 0x1E, 0xEB, 0xE0, 0x04, 0x07,
+ 0xD8, 0xD0, 0x00, 0xD1, 0x16, 0xD2, 0x16, 0xD3, 0x01, 0xE0,
+ 0x00, 0x07, 0xBF, 0xD0, 0x01, 0xD1, 0x07, 0xD2, 0x08, 0xD3,
+ 0x00, 0xE0, 0x00, 0x07, 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xD4,
+ 0x00, 0xC4, 0xA0, 0xF4, 0x09, 0xD0, 0x00, 0xE0, 0x00, 0x07,
+ 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xD4, 0x0F, 0xC4, 0xF0, 0xD5,
+ 0xFE, 0xC5, 0xFE, 0xD6, 0x30, 0xC6, 0x40, 0xE0, 0x07, 0x07,
+ 0x16, 0x87, 0x7C, 0x1E, 0xEB, 0xE0, 0x04, 0x07, 0xD8, 0xC6,
+ 0xC0, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0xFF, 0xC4, 0xFF, 0xF4,
+ 0x09, 0xD4, 0x0F, 0xC4, 0x70, 0xE0, 0x04, 0x07, 0xE7, 0xDA,
+ 0xFF, 0x27, 0x6E, 0x2D, 0x5A, 0x88, 0x5F, 0x88, 0x83, 0x87,
+ 0x78, 0xDA, 0x8E, 0xAA, 0xA7, 0xFA, 0x7C, 0xAA, 0xA9, 0xFA,
+ 0x8C, 0xAA, 0xA9, 0xFA, 0x9C, 0xD4, 0x0F, 0xC4, 0xF0, 0xD5,
+ 0xFE, 0xC5, 0xFE, 0xD6, 0x3F, 0xC6, 0xC0, 0xD6, 0x30, 0xC6,
+ 0x40, 0xE0, 0x07, 0x07, 0x16, 0x87, 0x7C, 0x1E, 0xEB, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD0, 0x01, 0xE0, 0x00, 0x07, 0xBF, 0xD0,
+ 0x01, 0xD1, 0x16, 0xD2, 0x16, 0xD3, 0x01, 0xE0, 0x00, 0x07,
+ 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xD2, 0x60, 0xA2, 0x23, 0xF1,
+ 0x28, 0xA2, 0x23, 0xF0, 0x28, 0xD2, 0x00, 0xD4, 0x00, 0xD3,
+ 0x00, 0xD5, 0x04, 0xE0, 0x06, 0x07, 0x38, 0x02, 0x26, 0x04,
+ 0x48, 0x03, 0x37, 0xB5, 0x52, 0xF5, 0x05, 0x05, 0x2F, 0x82,
+ 0x29, 0x84, 0x49, 0x83, 0x39, 0x25, 0x43, 0x24, 0x23, 0xD2,
+ 0x60, 0xA2, 0x23, 0xF2, 0x1C, 0xA2, 0x23, 0xF2, 0x0C, 0xD7,
+ 0x70, 0xC7, 0x0D, 0xA6, 0x41, 0xE0, 0x06, 0x07, 0x1D, 0xD6,
+ 0xBD, 0xF6, 0x7C, 0xD7, 0x0A, 0xC7, 0x0B, 0xA6, 0x41, 0xE0,
+ 0x06, 0x07, 0x1D, 0xD6, 0xBE, 0xF6, 0x7C, 0xD7, 0x51, 0xC7,
+ 0x0A, 0xA6, 0x41, 0xE0, 0x06, 0x07, 0x1D, 0xD6, 0xBF, 0xF6,
+ 0x7C, 0xD0, 0xD3, 0xC0, 0x01, 0xD1, 0xE0, 0xC1, 0x01, 0x32,
+ 0x04, 0xA2, 0x23, 0x82, 0x23, 0x33, 0x15, 0xA3, 0x33, 0x83,
+ 0x33, 0xD6, 0x80, 0x14, 0x26, 0x26, 0x44, 0x86, 0x6F, 0x18,
+ 0x46, 0xD6, 0xBA, 0xF6, 0x8C, 0xD6, 0x80, 0x14, 0x26, 0x26,
+ 0x44, 0x86, 0x6F, 0x18, 0x46, 0xD9, 0x03, 0x29, 0x89, 0x99,
+ 0x9E, 0x98, 0x86, 0x19, 0x89, 0xA9, 0x97, 0x89, 0x92, 0xA8,
+ 0x90, 0xD6, 0x41, 0xC6, 0x24, 0xF8, 0x01, 0x05, 0x79, 0x06,
+ 0x69, 0xD8, 0xBB, 0xF8, 0x6C, 0xD6, 0x80, 0x14, 0x26, 0x26,
+ 0x44, 0x86, 0x6F, 0x18, 0x46, 0xD9, 0x0C, 0x29, 0x89, 0x99,
+ 0x9E, 0xD6, 0x12, 0x28, 0x86, 0x98, 0x8E, 0x09, 0x89, 0xF9,
+ 0x0D, 0xA9, 0x9F, 0xA9, 0x9B, 0xD7, 0x0F, 0x4C, 0x97, 0x56,
+ 0x7D, 0x26, 0x96, 0x46, 0x87, 0xD7, 0x08, 0xD8, 0x0B, 0xD9,
+ 0x04, 0xE0, 0x06, 0x07, 0xBF, 0xD6, 0x80, 0x14, 0x26, 0x26,
+ 0x44, 0x86, 0x6F, 0x18, 0x46, 0xD9, 0x06, 0x29, 0x89, 0x99,
+ 0x9E, 0xB9, 0x9C, 0xF9, 0x0D, 0xD7, 0x0F, 0x4C, 0x97, 0x56,
+ 0x7D, 0x29, 0x96, 0x49, 0x87, 0xA7, 0x90, 0x26, 0x97, 0xD7,
+ 0x18, 0xD8, 0x1B, 0xD9, 0x05, 0xE0, 0x06, 0x07, 0xBF, 0xD5,
+ 0x0E, 0xC5, 0x70, 0xE0, 0x05, 0x07, 0xE7, 0x87, 0x74, 0x87,
+ 0x7F, 0x87, 0x7F, 0xD5, 0x01, 0xF7, 0x01, 0x05, 0xB9, 0xD5,
+ 0x02, 0xB7, 0x76, 0xF7, 0x01, 0x05, 0xB9, 0xD5, 0x00, 0xD6,
+ 0x0C, 0xD7, 0x0D, 0xD8, 0x0E, 0xE0, 0x05, 0x07, 0xBF, 0xD5,
+ 0x00, 0xD6, 0x0E, 0xD7, 0x0E, 0xD8, 0x0E, 0xE0, 0x05, 0x07,
+ 0xA3, 0xD6, 0x12, 0xD7, 0x14, 0xE0, 0x05, 0x07, 0xBF, 0xED,
+ 0xD5, 0xD2, 0x00, 0xC2, 0x13, 0x33, 0x12, 0x04, 0x13, 0x15,
+ 0x13, 0x5C, 0xC0, 0x5D, 0x0D, 0x23, 0xCD, 0xF3, 0x05, 0x05,
+ 0xD4, 0xA0, 0x11, 0xF0, 0x02, 0xF0, 0x0E, 0xF0, 0x0E, 0xE0,
+ 0x00, 0x07, 0xF9, 0xE0, 0x00, 0x07, 0xF5, 0xF0, 0x0E, 0xEE,
+ 0x36, 0xF0, 0x0A, 0xFB, 0x08, 0xF9, 0x18, 0xBA, 0x9A, 0xB6,
+ 0x62, 0x1C, 0xB6, 0x1C, 0x8A, 0xF6, 0x18, 0xF8, 0x01, 0x06,
+ 0x1B, 0xFB, 0x01, 0x06, 0x4A, 0xB9, 0x92, 0xF9, 0x05, 0x05,
+ 0xEF, 0xDA, 0x13, 0xF8, 0x28, 0xFA, 0x84, 0xBB, 0xB2, 0xFB,
+ 0x01, 0x06, 0x4A, 0xBB, 0xB8, 0xFB, 0x01, 0x06, 0x1F, 0xD7,
+ 0x00, 0xC7, 0x94, 0xF7, 0x78, 0xD9, 0x00, 0xC9, 0xFF, 0x19,
+ 0x79, 0xF9, 0x01, 0x06, 0x4C, 0xD7, 0x00, 0xC7, 0xD0, 0xF9,
+ 0x78, 0xD8, 0x00, 0xF7, 0x8C, 0xF9, 0x05, 0x06, 0x1B, 0xD8,
+ 0x12, 0xF8, 0x88, 0xF2, 0x8C, 0xA8, 0x83, 0xD9, 0x00, 0xF8,
+ 0x9C, 0xDA, 0x10, 0xFA, 0xA8, 0xA8, 0x83, 0xF8, 0xAC, 0xD8,
+ 0x00, 0xD7, 0x00, 0xC7, 0x64, 0xF7, 0x8C, 0xD8, 0x11, 0xF8,
+ 0x88, 0xF4, 0x8C, 0xD8, 0x00, 0xC8, 0x8C, 0xD9, 0x01, 0xF8,
+ 0x9C, 0xF0, 0x06, 0xF0, 0x02, 0xD9, 0x13, 0xFA, 0x98, 0xF2,
+ 0xAC, 0xEE, 0x0E, 0xD8, 0x00, 0xD7, 0x00, 0xC7, 0x60, 0xF7,
+ 0x8C, 0xD8, 0x0E, 0xF8, 0x88, 0xF4, 0x8C, 0xD8, 0x0F, 0xF8,
+ 0x88, 0xF2, 0x8C, 0xA8, 0x83, 0xD9, 0x00, 0xF8, 0x9C, 0xDA,
+ 0x0D, 0xFA, 0xA8, 0xA8, 0x83, 0xF8, 0xAC, 0xD8, 0x00, 0xC8,
+ 0x8C, 0xD9, 0x05, 0xF8, 0x9C, 0xF0, 0x06, 0xF0, 0x02, 0xD9,
+ 0x00, 0xC9, 0xAC, 0xD8, 0x0C, 0xFA, 0x80, 0xF9, 0xAC, 0xD9,
+ 0x00, 0xC9, 0x08, 0xD7, 0x00, 0xC7, 0x34, 0xF7, 0x9C, 0xC9,
+ 0x38, 0xD7, 0x00, 0xC7, 0x44, 0xF7, 0x9C, 0xC9, 0x20, 0xD7,
+ 0x00, 0xC7, 0x48, 0xF7, 0x9C, 0xD8, 0x15, 0xF2, 0x8C, 0xF0,
+ 0x06, 0xEE, 0x4B, 0xF0, 0x0A, 0xD7, 0x15, 0xD8, 0x00, 0xC8,
+ 0x30, 0xF8, 0x7C, 0xD7, 0x00, 0xC7, 0x98, 0xF6, 0x78, 0xD8,
+ 0x1A, 0xF8, 0x6C, 0xD8, 0x00, 0xC8, 0xAC, 0xDA, 0x20, 0xF8,
+ 0xAC, 0xD9, 0x20, 0xDA, 0x0A, 0xCA, 0xF0, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x14, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x11, 0xCA, 0xF7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x15, 0xCA,
+ 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xD8, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x30, 0xCA, 0xC8, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x7C, 0xCA, 0xF8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x00, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x94, 0xCA,
+ 0xC7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x78, 0xCA, 0xF7, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xD8, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x98, 0xCA, 0xC8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x88, 0xCA, 0xF9, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x9C, 0xCA,
+ 0xF8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xDA, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xDB, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x64, 0xCA, 0xCB, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0xAC, 0xCA, 0xFB, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0xFF, 0xCA,
+ 0xD8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x07, 0xCA, 0xC8, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x6C, 0xCA, 0x26, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x7C, 0xCA, 0xF6, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x63, 0xCA, 0xA6, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x6C, 0xCA,
+ 0x26, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x9C, 0xCA, 0xF6, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x63, 0xCA, 0xA6, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x15, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x67, 0xCA, 0x17, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x01, 0xCA,
+ 0xF7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x43, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x72, 0xCA, 0xB7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x01, 0xCA, 0xF7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x43, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x06, 0xCA, 0xF0, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x42, 0xCA, 0xE8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0xEC, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0xFF, 0xCA,
+ 0xC7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x11, 0xCA, 0xF7, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0xFF, 0xCA, 0xEF, 0xF9, 0xAC, 0xF7,
+ 0x7C, 0xD8, 0x00, 0xD7, 0x00, 0xC7, 0x64, 0xF7, 0x8C, 0xD7,
+ 0x14, 0xF7, 0x11, 0xEE, 0x4A, 0xF0, 0x0E, 0x44, 0xDC, 0xF4,
+ 0x05, 0x07, 0x13, 0xD4, 0x01, 0x7F, 0xC4, 0x7C, 0x1C, 0x13,
+ 0x43, 0x61, 0x13, 0xA2, 0x31, 0x6C, 0xCD, 0xB2, 0x22, 0xA4,
+ 0x20, 0xF4, 0x05, 0x07, 0x06, 0xA1, 0x01, 0xD4, 0x0F, 0x14,
+ 0x43, 0x60, 0x04, 0x70, 0x04, 0xA4, 0x33, 0x71, 0x14, 0xEF,
+ 0x15, 0xA1, 0x01, 0xD0, 0x00, 0xF0, 0x02, 0xD0, 0x01, 0xC0,
+ 0x70, 0xE0, 0x00, 0x07, 0xE7, 0xD1, 0x0F, 0x70, 0x21, 0xF0,
+ 0x02, 0x83, 0x03, 0xA5, 0x31, 0xD4, 0x58, 0xC4, 0x4F, 0xE0,
+ 0x04, 0x06, 0xFD, 0x22, 0x14, 0x34, 0x15, 0x85, 0x3F, 0xE0,
+ 0x04, 0x06, 0xFD, 0x82, 0x29, 0x82, 0x29, 0x02, 0x24, 0xD1,
+ 0x22, 0x11, 0x12, 0xD6, 0x00, 0x4F, 0xE1, 0xD8, 0x01, 0x17,
+ 0x87, 0x21, 0x17, 0xD6, 0x10, 0x4F, 0xE1, 0xF7, 0x05, 0x07,
+ 0x37, 0xD1, 0x1F, 0xF0, 0x02, 0xD0, 0x00, 0xD1, 0x02, 0xE0,
+ 0x00, 0x07, 0x45, 0xD1, 0x00, 0xD2, 0x01, 0xE0, 0x01, 0x07,
+ 0x45, 0xD2, 0x01, 0xD3, 0x02, 0xE0, 0x02, 0x07, 0x45, 0xF0,
+ 0x02, 0xD3, 0x00, 0xC3, 0xC0, 0xD4, 0x00, 0xD5, 0x0F, 0xD6,
+ 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xD3, 0xC6, 0xC3, 0x10, 0xD4,
+ 0x10, 0xD5, 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xE0,
+ 0x03, 0x07, 0xA8, 0xD3, 0xC6, 0xC3, 0x10, 0x87, 0x1E, 0x87,
+ 0x76, 0x1F, 0xF7, 0x87, 0x0E, 0x87, 0x7C, 0x1F, 0xF7, 0xD4,
+ 0x10, 0xD5, 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xE0,
+ 0x03, 0x07, 0xA8, 0xD3, 0x10, 0xC3, 0x27, 0xF3, 0x09, 0xD3,
+ 0x01, 0xD4, 0x1F, 0xD5, 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07,
+ 0xBF, 0xE0, 0x03, 0x07, 0xA8, 0xD3, 0x10, 0xC3, 0x27, 0xF3,
+ 0x09, 0xD3, 0x00, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0xD3,
+ 0xFF, 0xC3, 0x03, 0x2C, 0x4F, 0xD3, 0x00, 0xD4, 0x1F, 0xD5,
+ 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xE0, 0x03, 0x07,
+ 0xA8, 0xF0, 0x02, 0xD0, 0x00, 0xD1, 0x2C, 0xE0, 0x00, 0x07,
+ 0xD4, 0xF0, 0x02, 0xA4, 0x43, 0xF4, 0x0D, 0xD7, 0x01, 0x2D,
+ 0xCB, 0xD6, 0x10, 0x5E, 0x0E, 0xF6, 0x01, 0x07, 0x96, 0xD6,
+ 0x10, 0x16, 0x06, 0x67, 0x76, 0x65, 0x56, 0x1F, 0xF7, 0x3F,
+ 0xF5, 0xEF, 0x9A, 0x67, 0x70, 0x65, 0x50, 0x1E, 0xE7, 0x3E,
+ 0xE5, 0x17, 0x10, 0x55, 0xDC, 0x85, 0x52, 0xB5, 0x52, 0x00,
+ 0x05, 0x84, 0x43, 0xF7, 0x05, 0x07, 0x89, 0xF0, 0x02, 0xE0,
+ 0x00, 0x07, 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xF0, 0x02, 0xD0,
+ 0x60, 0xF1, 0x08, 0xD6, 0x00, 0xC6, 0xF0, 0xD3, 0x01, 0xD2,
+ 0x10, 0xA0, 0x03, 0xF7, 0x08, 0xA0, 0x03, 0xF8, 0x08, 0x24,
+ 0xDF, 0xF4, 0x01, 0x07, 0xB7, 0xE0, 0x06, 0x07, 0xD8, 0xA6,
+ 0x63, 0x81, 0x13, 0xB2, 0x22, 0xF2, 0x05, 0x07, 0xAE, 0xD0,
+ 0x60, 0xF0, 0x1C, 0xF0, 0x02, 0xAA, 0x01, 0xA6, 0x11, 0xA7,
+ 0x21, 0xD4, 0x60, 0xF5, 0x48, 0xDB, 0x01, 0x6B, 0xB3, 0x15,
+ 0x5F, 0xF4, 0x5C, 0xA4, 0x43, 0x8B, 0x32, 0x04, 0x4B, 0xF8,
+ 0x48, 0xA4, 0x43, 0xF9, 0x48, 0xE0, 0x06, 0x07, 0x87, 0xF4,
+ 0x9C, 0xB4, 0x42, 0xF4, 0x8C, 0xF0, 0x02, 0xC0, 0x80, 0xE0,
+ 0x00, 0x07, 0xD8, 0xF0, 0x02, 0xF0, 0x0A, 0xD3, 0x00, 0xC3,
+ 0x9C, 0xF3, 0x1C, 0xC3, 0xA0, 0xF3, 0x2C, 0xC3, 0xA4, 0xF3,
+ 0x0C, 0xD3, 0x00, 0xC3, 0xA8, 0xF3, 0x38, 0xF3, 0x01, 0x07,
+ 0xE0, 0xF0, 0x06, 0xF0, 0x02, 0xF0, 0x0A, 0xD2, 0x00, 0xC2,
+ 0xA4, 0xF2, 0x0C, 0xC2, 0xA8, 0xF1, 0x28, 0xF1, 0x01, 0x07,
+ 0xEC, 0xC2, 0x9C, 0xF1, 0x28, 0xC2, 0xA0, 0xF2, 0x28, 0xF0,
+ 0x06, 0xF0, 0x02, 0xD1, 0x00, 0xC1, 0x98, 0xF1, 0x0C, 0xF0,
+ 0x02, 0xD1, 0x00, 0xC1, 0x94, 0xF0, 0x18, 0xC1, 0x98, 0xF1,
+ 0x18, 0xF0, 0x02, 0xED, 0xDC, 0x90, 0x00, 0x88, 0x00, 0x30,
+ 0x00, 0x34, 0x00, 0x24, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0xDD, 0x3D, 0xD7, 0x00, 0x15, 0x00, 0x1A, 0x0A, 0x19, 0x00,
+ 0x1E, 0x00, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xA0, 0x01, 0x76, 0x01, 0x38, 0x02,
+ 0xC0, 0x02, 0x30, 0x04, 0x20, 0x03, 0x60, 0x06, 0x5C, 0x04,
+ 0xBC, 0x09, 0x60, 0x07, 0x9C, 0x0D, 0x70, 0xFF, 0xFF, 0x7A,
+ 0xF5, 0x10, 0xAE, 0x70, 0xA5, 0x22, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x17, 0x00, 0x04, 0x2C, 0x5F, 0x00, 0x00, 0x03,
+ 0x00, 0x06, 0x00, 0x27, 0xC5, 0x21, 0xF0, 0x16, 0x27, 0xC0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x67, 0x42, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x00, 0x1C, 0xFE,
+ 0xFE, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x30, 0x00, 0x0C, 0x08, 0x30, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x02, 0x00, 0x21, 0x00, 0x00, 0x00, 0x0C, 0x00,
+ 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x2C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x50, 0x00, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x0A, 0x03, 0xA9, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0F, 0x00,
+ 0x08, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x64, /* WAIT 100[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFF, 0x00, 0x00, 0xD1,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x05, 0x01, 0xA6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x02, 0xB8, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x01, 0x00, 0xEA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x08, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xEA, 0xB2, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x2C, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xE8, 0xD2, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x40, 0x12, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x01, 0xA6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x06, 0xAC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0xA6, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xD0, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xF0, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x00, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xD3, 0xF8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x2E, 0xD3, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0xD3, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0xD3, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x60, 0x03, 0x0C, 0xCF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0D, 0xD3, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x0C, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x99, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0xBD, 0xA1, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x04, 0xD6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x0F, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x2A, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xEE, 0xD0, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0xDC, 0xF1, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x78, 0xD0, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0x0A, 0xF1, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0x1E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xF0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x13, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x1F, 0xD0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xF7, 0xF0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x2B, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x01, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xF0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x2B, 0xE9, 0xA6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x06, 0xB1,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x4C, 0xD3, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x0C, 0xD3, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0xD2, 0x25,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x02, 0x12, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x12, 0xD5, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0x3B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x0A, 0xD5, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x9E, 0xA3, 0x3D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x4C, 0xA3, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x5C, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x92, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0xAC, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xF0, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x05, 0x99,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x02, 0xD0, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x28, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xA1, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x6E, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x89, 0xD5, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x21, 0x03, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x53, 0x24, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x11, 0x34, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x93, 0x11, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xF7, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x63, 0xB3, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x01, 0x01, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x01, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0xD1,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x06, 0x5F, 0xEF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0x09, 0x5C, 0xC2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xF4, 0xF3, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x72, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xE5, 0xD0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x13, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x01, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x02, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x7E, 0xD0, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x89, 0xF3, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x01, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x2A, 0xD2, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x28, 0xD3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xFE, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x4E, 0xC2, 0xFF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x09, 0xD6, 0x8A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x68, 0xF7, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x97, 0xD5, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x8E, 0xF3, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x23, 0xA4, 0x49,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB5, 0x52, 0xF5, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x8C, 0xD3, 0x6C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xEF, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x72, 0xD7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0xAA, 0xF3, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0xFC, 0xC4, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xF4, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x9F, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x7C, 0x93, 0x7B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x01, 0x01, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xF6, 0x7C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x02, 0xE0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xF0, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0E, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xBD, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x7D, 0xCD, 0xB2, 0x1E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x02, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xEB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xEA, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xE2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xDF, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xDC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xD9, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xD2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xCE, 0x80, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x0B, 0xF0, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x12, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xDF, 0xF0, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x12, 0xD1, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x18, 0x92, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3C, 0xDE, 0x82, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3C, 0xCE, 0xEA, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x36, 0xC0, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x12, 0xD0, 0xD4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x0B, 0xEA, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xD1,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x12, 0xD0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x40, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x80, 0x1A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x0B, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x12, 0xD1, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x05, 0xC7, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAA, 0x71, 0xE0, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x74, 0xD7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x10, 0x15, 0x45,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x01, 0x01, 0xF9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB6, 0x46, 0xE9, 0xFC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x74, 0xC7, 0xD5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x45, 0x8B, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x74, 0xF7, 0x84, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x64, 0xD7, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x57, 0x82, 0x25,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x0B, 0x02, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x40, 0x5F, 0xFE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x23, 0xA3, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x23, 0xD3, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x38, 0xA3, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x23, 0x70, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x12, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xF4, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xF0, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x67, 0xF0, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x08, 0xF9, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xBA, 0x9A, 0xB6, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1C, 0xB6, 0x1C, 0x8A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x18, 0xF8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x4C, 0xFB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x7B, 0xB9, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x02, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x13, 0xF8, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x84, 0xBB, 0xB2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x01, 0x02, 0x7B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xBB, 0xB8, 0xFB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x50, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0xD0, 0xF9, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xF7, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x02, 0x4C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x12, 0xF8, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x8C, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x00, 0xF8, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x10, 0xFA, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x83, 0xF8, 0xAC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x64, 0xF7, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x11, 0xF8, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x8C, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC8, 0x8C, 0xD9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x9C, 0xF0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD9, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x98, 0xF2, 0xAC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x3F, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x8C, 0xD8, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x88, 0xF4, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x0F, 0xF8, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x8C, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x00, 0xF8, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x0D, 0xFA, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x83, 0xF8, 0xAC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xC8, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x05, 0xF8, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x06, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x00, 0xC9, 0xAC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x0C, 0xFA, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0xAC, 0xD9, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC9, 0x08, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x34, 0xF7, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC9, 0x38, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x44, 0xF7, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC9, 0x20, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x48, 0xF7, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x15, 0xF2, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x06, 0xEA, 0x7C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0E, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0xB3, 0xA0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x08, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x8C, 0xA0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x08, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x8C, 0xA0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x08, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x8D, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x7E, 0xF1, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xD6, 0xB0, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x00, 0xD6, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x01, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x76, 0xC7, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x09, 0xD7, 0x71,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xD1, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x8E, 0xA8, 0x51,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x38, 0xA7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x03, 0xC8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x38, 0xA3, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x38, 0xA3, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1A, 0x85, 0xB8, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1C, 0x8A, 0xAA, 0x63,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1D, 0xA5, 0x29, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x02, 0xB5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x05, 0x02, 0xBA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x03, 0xA2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x02, 0xE9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0xA2, 0xA1, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xA2, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x02, 0xCB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x51, 0xF7, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x11, 0xE0, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xC8, 0xF5, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x12, 0x67, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xCB, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x39, 0xEA, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x25, 0x77, 0xA2, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x01, 0x18, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x24, 0x02, 0x44, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x12, 0x43, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x03, 0x39,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0xE9, 0xD3, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x3C, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x08, 0xD0, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x04, 0x40, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x08, 0x03, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x3C, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x4C, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x7E, 0xF1, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x8E, 0xD1, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x04, 0x2F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x02, 0x7E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x05, 0x02, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x9F, 0xD3, 0xB4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x03, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0x10, 0xF2, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x0C, 0xA2, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x35, 0xB4, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x05, 0x02, 0xF4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xD2, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x0C, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xF4, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x45, 0x84, 0x44,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB3, 0x28, 0xF8, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x23, 0xF5, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x11, 0xDA, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x09, 0x04, 0x4C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x0F, 0xE0, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x2F, 0xE0, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xE5, 0xC9, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x09, 0xB9, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x00, 0xE0, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x00, 0xA9, 0x41,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAA, 0x11, 0xB3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x38, 0xE0, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xC8, 0x44, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x79, 0x5E, 0x54,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x27, 0x7A, 0xDA, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4F, 0xA9, 0x17, 0x7F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAA, 0x40, 0x27, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x27, 0x79, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x2B, 0xF2, 0x4C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x91, 0xEB, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x9A, 0x41, 0x10, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x97, 0x13, 0x27, 0x7F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xF0, 0xF7, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xFB, 0xA2, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x04, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xBA, 0x18, 0xFA, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x00, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x04, 0xDB, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0xB3, 0x19, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x99, 0x91, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x7B, 0x4B, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0xB8, 0xA5, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x58, 0x19, 0x96,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x03, 0x50,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0x5D, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x92, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x39, 0xD1, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEB, 0x39, 0xA7, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x1C, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0xB5, 0xF8, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x8C, 0xA2, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x02, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x6E, 0x99, 0x27,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x03, 0x6E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB7, 0x76, 0xF7, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0x55, 0xF6, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0x55, 0xF9, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x89, 0x5E, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xBA, 0xA2, 0x1B, 0x96,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x49, 0xBA, 0x9A, 0x91,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x29, 0x9A, 0xF9, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x73, 0xF7, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x08, 0x89, 0x99, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x03, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0xB3, 0xF7, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x8E, 0x4B, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0xB8, 0xA5, 0xB5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x58, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xB7, 0xEB, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4B, 0x04, 0xF6, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x05, 0x03, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x03, 0x5D, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x92, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x39, 0xD0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEB, 0x39, 0xF7, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0xB5, 0xF8, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x0D, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x8C, 0xA2, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x12, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xA6, 0x99, 0x27,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x03, 0xA6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x73, 0xF7, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0x55, 0xF6, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0x55, 0xF9, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x89, 0xB5, 0x52,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x58, 0x16, 0xA6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x69, 0xBA, 0xA2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1B, 0x96, 0x49, 0xBA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x9A, 0x91, 0x29, 0x9A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x73, 0xF7, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x08, 0x89, 0x99, 0x17,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x03, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0xB3, 0xA7, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x1C, 0xDB, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4B, 0x14, 0xF6, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0xB3, 0xFA, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0xB5, 0xF9, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0xA6, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xB7, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x21, 0x84, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB4, 0x42, 0x22, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0x31, 0xF5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x53, 0x5E, 0xD2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xD0, 0x1F, 0xFA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x01, 0x03, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xF5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x25, 0x54, 0xF1, 0x5C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD3, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x32, 0x1E, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x3A, 0xA9, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x9E, 0xD5, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0x1D, 0xD3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x28, 0xA2, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x28, 0xA2, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x28, 0xA2, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x28, 0x83, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x66, 0x33, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x36, 0xB6, 0x83, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x33, 0xB3, 0x5C, 0xF4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x43, 0xCE, 0xB9, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x01, 0x03, 0xE7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xF2, 0xC6, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4E, 0xCA, 0x1F, 0xF6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0x03, 0xA2, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x73, 0x23, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x73, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xD0, 0xB2, 0x2E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x28, 0xF5, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xF8, 0x23, 0x3A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x01, 0x03, 0xF8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0x70, 0x3B, 0x4B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0xBC, 0xAB, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0x10, 0x4E, 0x5B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2A, 0x1A, 0xFA, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xFF, 0xF2, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xF4, 0xD7, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x70, 0xE0, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0xD7, 0xFF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0xD7, 0x24, 0xC7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x8F, 0x83, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x28, 0xD7, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x77, 0xF8, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x42, 0x80, 0xA7, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x78, 0x43, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x79, 0xF8, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x44, 0x80, 0xD6, 0x9E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x98, 0x21, 0x22, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x20, 0x01, 0xF0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x20, 0xF7, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x07, 0x42, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x27, 0xF6, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x69, 0xF6, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x69, 0xF6, 0x4C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x69, 0xF6, 0x5C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x08, 0xC7, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x83, 0xA6, 0x63,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x8C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xBC, 0xF6, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x0F, 0xC3, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x01, 0xC4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x38, 0xC5, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1D, 0xDA, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x7A, 0xC5, 0xC0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1D, 0xD0, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x7A, 0xD6, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x01, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x76, 0xC4, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x09, 0xD7, 0x71,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0xFE, 0xC4, 0xFE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x07, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD2, 0xE3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x22, 0xD3, 0x5B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x0B, 0xF1, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x1F, 0xA4, 0x4B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x01, 0x04, 0x59,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x33, 0x32, 0x83, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB4, 0x42, 0xEC, 0x53,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x08, 0xC4, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x04, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x33, 0x85, 0x53,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x33, 0x35, 0x83, 0x39,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x11, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x76, 0xD2, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x28, 0xD7, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4F, 0xF3, 0xD5, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xAA, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x57, 0xD4, 0x2A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4E, 0xC3, 0xD7, 0x1E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4F, 0xF3, 0x87, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x76, 0xD6, 0xED,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4F, 0x3C, 0xD4, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x27, 0x74, 0xD5, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x74, 0x94, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x01, 0x04, 0xC2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0x94, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x05, 0x04, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x28, 0x83, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x01, 0x97, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x01, 0x04, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB3, 0x36, 0xD5, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x11, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x57, 0x3F, 0xF8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x55, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x57, 0x97, 0x3B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x01, 0x04, 0x94,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB3, 0x3C, 0x3F, 0xF8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x03, 0xD6, 0x77,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x8D, 0xF4, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0xAE, 0x08, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x43, 0x84, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x08, 0x84, 0xF7, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x52, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x3B, 0xA7, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x06, 0xD6, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEC, 0xC2, 0xA2, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x28, 0x87, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0E, 0xD6, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x05, 0xF4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xC2, 0xA2, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x28, 0x83, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB3, 0x36, 0x94, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x34, 0xF4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xBC, 0xD4, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xF8, 0xD4, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x74, 0xD5, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xDA, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x57, 0xA7, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x75, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x57, 0x86, 0x53,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x00, 0xC4, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1C, 0xCA, 0xD8, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x83, 0x86, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x08, 0x86, 0xF5, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x83, 0xF6, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x04, 0x07, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x11, 0x83, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD2, 0x54,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x28, 0x16, 0x50,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0xD0, 0x40, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x2F, 0xA3, 0x39,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x38, 0x16, 0x50,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0x0D, 0x40, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x25, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x28, 0x4D, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x05, 0x04, 0xE3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x01, 0x86, 0x4F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x7D, 0xE9, 0xD6, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x65, 0x74, 0x45,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x73, 0x35, 0x70, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x20, 0x00, 0x23, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x24, 0x44, 0x80, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x3F, 0x84, 0x4F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x40, 0x16, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x53, 0x24, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x09, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x40, 0x82, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x36, 0x04, 0x5E, 0xE3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x62, 0xB6, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x26, 0x62, 0x10, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x23, 0xB5, 0x52,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x05, 0x05, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0x72, 0x36, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0x01, 0x06, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x6F, 0x80, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x11, 0xD5, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x20, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x57, 0xD3, 0x8D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0x67, 0x51,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x79, 0x87, 0x77,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x06, 0xD6, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x01, 0xD5, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xFC, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x57, 0x87, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x03, 0xD6, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD5, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x58, 0xB2, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x05, 0x44,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB7, 0x14, 0xD5, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xB0, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x57, 0xC2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x37, 0x12, 0xD5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xB4, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x57, 0xD2, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x33, 0x12, 0xA7, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0D, 0xD6, 0xCF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x3B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0x27, 0xF5, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xD5, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0x70, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x85, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x75, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0xD8, 0x2E, 0xE8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x0F, 0x4C, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x26, 0x64, 0x94, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x25, 0x54, 0x13, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x36, 0x1F, 0xE9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x95, 0x21, 0x1D, 0xF9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x20, 0x05, 0xF0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x60, 0x22, 0x27,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x33, 0x13, 0x37,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x39, 0x13, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xED, 0x3C, 0x10, 0xED,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x8B, 0xF5, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x18, 0x8B, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x0B, 0xB9, 0xB6, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x6B, 0x8B, 0x19,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xB8, 0xDA, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x12, 0x47, 0xAB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x79, 0x07, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x0A, 0x67, 0x8A, 0xA3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x80, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x10, 0x05, 0x5A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x85, 0x5B, 0x2A, 0x52,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAA, 0xA5, 0x8A, 0xA5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5C, 0xA6, 0x5D, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2C, 0x89, 0xDA, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0xA8, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x83, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x0D, 0xD3, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x23, 0x13, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x38, 0x2A, 0x52,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8A, 0xA4, 0x16, 0xA0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x05, 0x94,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x60, 0xD8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x89, 0x92, 0x19, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x00, 0xCB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x46, 0x9B, 0x86, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x68, 0xDA, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x6C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x16, 0xD1, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0xB9, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x1C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0x40, 0xD2, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x60, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0xD3, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0xFB, 0x4D, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x64, 0xC3, 0xF8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4E, 0xC3, 0x20, 0xDE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x03, 0xC2, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x3A, 0x82, 0x2D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x07, 0xC8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x82, 0xF5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xBE, 0xD8, 0x39,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC8, 0x01, 0x15, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x01, 0x05, 0xBE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x00, 0xA2, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x0B, 0x73, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x0A, 0x64, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x4B, 0x07, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x18, 0x72, 0xF8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xCF, 0xB8, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB1, 0x12, 0xF1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xCF, 0x28, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x05, 0x05, 0xA2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xC2, 0xFF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x09, 0xD3, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x2B, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x76, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0xF0, 0xD0, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x05, 0x05, 0xDB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x23, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x7A, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0xD0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x03, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x76, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x87, 0xF0, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x81, 0x0F, 0xD2, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0xDE, 0xF1, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xD0, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x1C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0xDF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x70, 0x44, 0xFE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x0D, 0x45, 0xEF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0xC9, 0x2C, 0xC5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x06, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0xDF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0A, 0x5F, 0xD3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x01, 0x06, 0x17,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x0D, 0x5E, 0x3D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x01, 0x06, 0x17,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0A, 0x5F, 0xD8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x01, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x20, 0xF5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0xC9, 0xFB, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x01, 0x06, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xEE, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x89, 0xF9, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x82, 0xF0, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2B, 0x30, 0x09, 0x9B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x9C, 0xD0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x43, 0xDA, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0xA8, 0x05, 0x5B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x5C, 0xD4, 0x15,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x04, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x02, 0xEE, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x86, 0xF3, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x89, 0xF1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x32, 0xA9, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x9C, 0xD0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x43, 0xF9, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x30, 0x47, 0xD3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x46, 0x3D, 0xF7, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x3F, 0xF6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x40, 0xDA, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x01, 0xFA, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0xEE, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x0D, 0x09, 0x3B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x9C, 0xD0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0x8B, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x0B, 0xAB, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x05, 0x06, 0x4A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x0D, 0xD4, 0x84,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x48, 0x8A, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x03, 0x2F, 0xAB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0xB6, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x59, 0xA9, 0xB4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x06, 0x5D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x00, 0xD5, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0x01, 0xEE, 0x5F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x00, 0xD9, 0xC0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x98, 0xEE, 0x5F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x00, 0xDB, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x46, 0xB4, 0xD9, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x98, 0x2A, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x9A, 0xAE, 0x06, 0x6A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB4, 0x42, 0xF4, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x6D, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x08, 0x17, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x76, 0xEE, 0x6E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x65, 0xD9, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC9, 0x02, 0x09, 0x95,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x9B, 0xDA, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0xA8, 0xDB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xBA, 0x9A, 0xA2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x9A, 0xDA, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xCA, 0x08, 0x16, 0xA9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x47, 0x9B, 0xD9, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x79, 0x88, 0x99,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x89, 0x88, 0x15, 0x97,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x81, 0xF9, 0x5C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x83, 0xF9, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x15, 0xE0, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x76, 0xFB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x94, 0xD9, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x69, 0x88, 0x99,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x89, 0x88, 0x15, 0x96,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x81, 0xF9, 0x5C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x75, 0xE0, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x7A, 0xD7, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x78, 0xD8, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x77, 0x78, 0x88, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x7C, 0xD6, 0x1D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD6, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x68, 0xA6, 0x63,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x08, 0x04, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x49, 0xF6, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0xA9, 0x03, 0x41,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x01, 0xEE, 0xAB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x13, 0x41, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x2C, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x76, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x2C, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x16, 0xD1, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0xB9, 0xD1, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x1C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x89, 0xF0, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0xB2, 0xF1, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x87, 0xF2, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x05, 0xED,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x06, 0x9E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x80, 0xC5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0x3D, 0x88, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xD5, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x76, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x57, 0xD7, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x0C, 0x5F, 0x3F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0D, 0xD6, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0xBC, 0xF7, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x06, 0xEC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x40, 0xC6, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x89, 0x5F, 0x3E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x06, 0xE8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x86, 0xD6, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC6, 0x09, 0x5F, 0x3E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x06, 0xE8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x02, 0xD6, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x81, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x57, 0xA7, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x41, 0xA6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x05, 0x64,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x81, 0xD9, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4D, 0x49, 0x8A, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x01, 0x2F, 0xAB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAB, 0xB3, 0x29, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x19, 0xE0, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x76, 0xD8, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x18, 0x48, 0xA5, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x1C, 0xD7, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x05, 0x07, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xD7, 0xEE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x3B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x1D, 0xD7, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x3B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEF, 0x17, 0xD8, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x1D, 0xD7, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x3B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x1C, 0xD7, 0xEE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x3B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x06, 0x44,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x01, 0x2D, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x07, 0x3A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8A, 0x29, 0xDB, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xAB, 0xA9, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x07, 0x2A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x08, 0x2E, 0x2A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x05, 0x07, 0x2A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x32, 0xCA, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEF, 0x2C, 0xDA, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xCA, 0x04, 0x89, 0x54,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x9A, 0xDB, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x0F, 0xCA, 0xA0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x0A, 0x07, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x08, 0x7B, 0x97,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x0A, 0x07, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x6B, 0x97, 0xE0, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x7A, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x07, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x08, 0xD4, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0xF0, 0xD2, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x03, 0xF5, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x03, 0xF6, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x01, 0x2F, 0xDF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x01, 0x07, 0x4F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x04, 0x07, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x43, 0x81, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x45, 0xD0, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x1C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x60, 0xF4, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x85, 0x03, 0xD6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x66, 0x65, 0x1C, 0xCA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x4C, 0xA3, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x30, 0xF4, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x23, 0xF9, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0F, 0x2D, 0x1D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x19, 0xD6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x27, 0xD6, 0x66, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x67, 0x75, 0x1C, 0xCA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3C, 0xCB, 0x16, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x57, 0xC5, 0x87, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB7, 0x72, 0x05, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x89, 0x93, 0xF6, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x66, 0xF3, 0x4C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xC0, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xF0, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0xC3, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0xC3, 0xA0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x2C, 0xC3, 0xA4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x0C, 0xD3, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0xA8, 0xF3, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x01, 0x07, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x06, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x02, 0xC0, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x03, 0x2D, 0xDE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x13, 0x2C, 0xCD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD6, 0xBB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x68, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x4C, 0xD2, 0x67,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x3C, 0xD3, 0xC0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x02, 0xF1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x9F, 0xA2, 0x61,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x80, 0xC3, 0x8D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x09, 0xC1, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xBD, 0xF4, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x01, 0x81, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x4D, 0xF1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xAD, 0xD6, 0xBF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x68, 0xEF, 0xAF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xBD, 0xF4, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x68, 0xD2, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x40, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x57, 0xD0, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0xFF, 0xC1, 0xFD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x1C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xC1, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x0C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xC1, 0x94,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x18, 0xC1, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x18, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0A, 0xD2, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0xA4, 0xF2, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0xA8, 0xF1, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x01, 0x07, 0xC8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x9C, 0xF1, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0xA0, 0xF2, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x06, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x08, 0xC2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x0B, 0xC3, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x48, 0x00, 0x24,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x85, 0xF5, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x26, 0x05, 0x96, 0x6E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0x06, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x82, 0xF1, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x0D, 0xD2, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x28, 0xD2, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x28, 0xD6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC6, 0x20, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x87, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x97, 0x7C, 0xA2, 0x71,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x81, 0xF8, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x78, 0x10, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x40, 0x71, 0xA1, 0x71,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x20, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0xD4, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x0E, 0xD4, 0x63, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x0F, 0xF4, 0x11, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x14, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x15, 0x90, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x00, 0x30, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x34, 0x00, 0x24, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x6C, 0x00, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x02, 0x16,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x39, 0xAA, 0x00, 0x15,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x24, 0x08, 0xD1,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x28, 0x00, 0x51,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x12, 0x39,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x0C, 0x80, 0xF0, 0xF7, 0x3E, 0x75, 0xC1, 0x8A, 0xE4, 0x02,
+ 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x05, 0x13, 0xEE, 0xAA, 0x50, 0x6A, 0x90,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x06, 0x00, 0x0A, 0x4D, 0x8C, 0xF2, 0xD8, 0xCF, 0x30, 0x79,
+ 0x9F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x0B, 0x09, 0x24, 0x6C,
+ 0x00, 0x10, /* Length = 16 bytes */
+ 0x0A, 0x01, 0x67, 0x24, 0x40, 0x0C, 0x85, 0x00, 0x10, 0x64,
+ 0x3C, 0xFA, 0xF7, 0xE1, 0x0C, 0x2C,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x09, 0x0B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x10, 0x13,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x16, 0x12,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1F, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x01, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x10,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 9134 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_base_firmware_i2c_files_base_firmwares_init = {
+ XC3028_base_firmware_i2c_files_base_firmwares_init_SEQUENCE
+};
+
+unsigned char XC3028_base_firmware_i2c_files_base_firmwares_mts_init_SEQUENCE[9008] = {
+
+ 0x00, 0x00, /* RESET */
+ 0x0D, 0x53, /* Length = 3411 bytes */
+ 0x2A, 0x02, 0x19, 0xE0, 0x00, 0x07, 0xF5, 0xD4, 0x00, 0xC4,
+ 0xF0, 0xD6, 0xAE, 0xC6, 0x10, 0xD5, 0xF5, 0xC5, 0x7A, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x01, 0xC4, 0xF0, 0xD6, 0x51, 0xC6,
+ 0x02, 0xD5, 0x99, 0xC5, 0xA3, 0xE0, 0x04, 0x07, 0xD8, 0xD4,
+ 0x03, 0xC4, 0xF0, 0xD6, 0x04, 0xD5, 0x87, 0xC5, 0x06, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x04, 0xC4, 0xF0, 0xD6, 0x00, 0xD5,
+ 0x1F, 0xC5, 0x2C, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0x05, 0xC4,
+ 0xF0, 0xD6, 0x00, 0xC6, 0x06, 0xD5, 0x00, 0xC5, 0x40, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x06, 0xC4, 0xF0, 0xD6, 0x80, 0xD5,
+ 0xCD, 0xC5, 0x20, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0x07, 0xC4,
+ 0xF0, 0xD6, 0x00, 0xC6, 0xC0, 0xD5, 0x05, 0xC5, 0x2F, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD4, 0x09, 0xC4, 0xF0, 0xD6, 0xC0, 0xC6,
+ 0x42, 0xD5, 0x67, 0xC5, 0x3C, 0xE0, 0x04, 0x07, 0xD8, 0xD4,
+ 0x0F, 0xC4, 0xF0, 0xD6, 0x3F, 0xC6, 0xC0, 0xD5, 0x11, 0xC5,
+ 0x11, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0x06, 0xC4, 0xF0, 0xD6,
+ 0x00, 0xC6, 0x24, 0xD5, 0x0E, 0xC5, 0x2E, 0xE0, 0x04, 0x07,
+ 0xD8, 0xD4, 0xFF, 0xC4, 0xFF, 0xF4, 0x09, 0xD4, 0x0F, 0xC4,
+ 0x70, 0xE0, 0x04, 0x07, 0xE7, 0x86, 0x69, 0x86, 0x69, 0xA2,
+ 0x61, 0xD4, 0x06, 0xC4, 0xF0, 0xD6, 0x00, 0xC6, 0x24, 0xD5,
+ 0xC0, 0xC5, 0x20, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0xFF, 0xC4,
+ 0xFF, 0xF4, 0x09, 0xD4, 0x0F, 0xC4, 0x70, 0xE0, 0x04, 0x07,
+ 0xE7, 0x86, 0x69, 0x86, 0x69, 0x12, 0x62, 0x98, 0x21, 0xF8,
+ 0x05, 0x02, 0x88, 0xF2, 0x0D, 0xD8, 0x80, 0x4C, 0x28, 0xF8,
+ 0x05, 0x02, 0x94, 0xE0, 0x00, 0x07, 0x82, 0xD4, 0x0E, 0xC4,
+ 0xF0, 0xD6, 0x00, 0xD5, 0x00, 0xE0, 0x04, 0x07, 0xD8, 0xD0,
+ 0x01, 0xC0, 0x70, 0xE0, 0x00, 0x07, 0xE7, 0xD3, 0x0F, 0x71,
+ 0x23, 0xF1, 0x01, 0x04, 0x7F, 0xD0, 0x60, 0xD1, 0x00, 0xC1,
+ 0x40, 0xD2, 0x0B, 0x00, 0x02, 0xF0, 0x1C, 0xA0, 0x03, 0xD1,
+ 0x00, 0xF0, 0x1C, 0xD0, 0x01, 0xD1, 0x03, 0xD2, 0x03, 0xD3,
+ 0x01, 0xE0, 0x00, 0x07, 0xBF, 0xD4, 0x9E, 0xA4, 0x45, 0xD5,
+ 0x10, 0xC5, 0x01, 0xF4, 0x5C, 0xD5, 0x40, 0xC5, 0x0B, 0xA4,
+ 0x43, 0xF4, 0x5C, 0xD3, 0x00, 0xC3, 0xF0, 0xD5, 0xD6, 0xD4,
+ 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3, 0x01, 0xC3, 0xF0, 0xD5,
+ 0x03, 0xC5, 0x19, 0xD4, 0x01, 0xE0, 0x03, 0x07, 0xD8, 0xD3,
+ 0x03, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD3, 0x04, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD3, 0x05, 0xC3, 0xF0, 0xD5, 0x00, 0xD4,
+ 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3, 0x06, 0xC3, 0xF0, 0xD5,
+ 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3, 0x07, 0xC3,
+ 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD3,
+ 0x09, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD3, 0x0E, 0xC3, 0xF0, 0xD5, 0x00, 0xD4, 0x00, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD3, 0x0F, 0xC3, 0xF0, 0xD5, 0x00, 0xD4,
+ 0x00, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD0,
+ 0xFF, 0xC0, 0x03, 0xD1, 0x54, 0xD3, 0x01, 0xC3, 0xF0, 0xD5,
+ 0x03, 0xC5, 0x99, 0xD4, 0x01, 0xC4, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0,
+ 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2,
+ 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1,
+ 0x4C, 0xA1, 0x13, 0xD5, 0x00, 0xC5, 0x19, 0xD4, 0x01, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD5, 0x00, 0xC5, 0x99, 0xD4, 0x01, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3,
+ 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84,
+ 0x46, 0xD2, 0x00, 0xC2, 0x40, 0x34, 0x42, 0xF5, 0x18, 0xE0,
+ 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x23, 0xC5,
+ 0x19, 0xD4, 0x02, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x23, 0xC5,
+ 0x99, 0xD4, 0x02, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3,
+ 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2,
+ 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05,
+ 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x20, 0xC5, 0x19, 0xD4,
+ 0x02, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD5, 0x20, 0xC5, 0x99, 0xD4, 0x02, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C,
+ 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5,
+ 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5,
+ 0x23, 0xC5, 0x19, 0xD4, 0x03, 0xC4, 0xF0, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5,
+ 0x23, 0xC5, 0x99, 0xD4, 0x03, 0xC4, 0xF0, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3,
+ 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84,
+ 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0,
+ 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x20, 0xC5,
+ 0x19, 0xD4, 0x03, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x20, 0xC5, 0x99, 0xD4,
+ 0x03, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07,
+ 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34,
+ 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1,
+ 0x13, 0xD5, 0x23, 0xC5, 0x19, 0xD4, 0x04, 0xC4, 0xF0, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD5, 0x23, 0xC5, 0x99, 0xD4, 0x04, 0xC4, 0xF0, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C,
+ 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5,
+ 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5,
+ 0x20, 0xC5, 0x19, 0xD4, 0x04, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x20, 0xC5,
+ 0x99, 0xD4, 0x04, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0,
+ 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2,
+ 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1,
+ 0x4C, 0xA1, 0x13, 0xD5, 0x23, 0xC5, 0x19, 0xD4, 0x05, 0xC4,
+ 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD5, 0x23, 0xC5, 0x99, 0xD4, 0x05, 0xC4,
+ 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6,
+ 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07,
+ 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34,
+ 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1,
+ 0x13, 0xD5, 0x20, 0xC5, 0x19, 0xD4, 0x05, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5,
+ 0x20, 0xC5, 0x99, 0xD4, 0x05, 0xD3, 0x01, 0xC3, 0xF0, 0xE0,
+ 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3,
+ 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2,
+ 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05,
+ 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x23, 0xC5, 0x19, 0xD4,
+ 0x06, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD5, 0x23, 0xC5, 0x99, 0xD4,
+ 0x06, 0xC4, 0xF0, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07,
+ 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3, 0x01, 0xC3, 0x70, 0xE0,
+ 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84, 0x46, 0xD2, 0x00, 0xC2,
+ 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0, 0x04, 0x05, 0xC9, 0xF1,
+ 0x4C, 0xA1, 0x13, 0xD5, 0x20, 0xC5, 0x19, 0xD4, 0x06, 0xD3,
+ 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6,
+ 0x09, 0xD5, 0x20, 0xC5, 0x99, 0xD4, 0x06, 0xD3, 0x01, 0xC3,
+ 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xD6, 0x14, 0xF6, 0x09, 0xD3,
+ 0x01, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0x2C, 0xC0, 0x84,
+ 0x46, 0xD2, 0x00, 0xC2, 0x42, 0x34, 0x42, 0xF5, 0x18, 0xE0,
+ 0x04, 0x05, 0xC9, 0xF1, 0x4C, 0xA1, 0x13, 0xD5, 0x00, 0xD4,
+ 0x00, 0xD3, 0x01, 0xC3, 0xF0, 0xE0, 0x03, 0x07, 0xD8, 0xEC,
+ 0xAF, 0xD1, 0x54, 0xD2, 0xA0, 0xF1, 0x2C, 0xA1, 0x13, 0xD2,
+ 0x90, 0xC2, 0x01, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0x44, 0xC2,
+ 0x01, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0xDC, 0xC2, 0x02, 0xF1,
+ 0x2C, 0xA1, 0x13, 0xD2, 0x3C, 0xC2, 0x02, 0xF1, 0x2C, 0xA1,
+ 0x13, 0xD2, 0x58, 0xC2, 0x04, 0xF1, 0x2C, 0xA1, 0x13, 0xD2,
+ 0x2C, 0xC2, 0x03, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0x3C, 0xC2,
+ 0x06, 0xF1, 0x2C, 0xA1, 0x13, 0xD2, 0x88, 0xC2, 0x04, 0xF1,
+ 0x2C, 0xA1, 0x13, 0xD2, 0x04, 0xC2, 0x09, 0xF1, 0x2C, 0xA1,
+ 0x13, 0xD2, 0xD0, 0xC2, 0x06, 0xF1, 0x2C, 0xA1, 0x13, 0xD2,
+ 0x20, 0xC2, 0x0D, 0xF1, 0x2C, 0xA1, 0x13, 0xD5, 0x0E, 0xD6,
+ 0x00, 0xD7, 0x03, 0xD8, 0x0E, 0xE0, 0x05, 0x07, 0xBF, 0xD5,
+ 0x0F, 0xD6, 0x12, 0xD7, 0x14, 0xE0, 0x05, 0x07, 0xA3, 0xD6,
+ 0x0E, 0xD7, 0x0E, 0xE0, 0x05, 0x07, 0xA3, 0xD5, 0xFF, 0xC5,
+ 0xFF, 0xF5, 0x09, 0xD5, 0x01, 0xC5, 0x80, 0xD6, 0x02, 0xE0,
+ 0x05, 0x07, 0xD8, 0xD4, 0x0F, 0xC4, 0xF0, 0xD5, 0x01, 0xC5,
+ 0x01, 0xD6, 0x30, 0xC6, 0x40, 0xE0, 0x07, 0x07, 0x16, 0x87,
+ 0x7C, 0xD8, 0xBC, 0xF8, 0x7C, 0x1E, 0xEB, 0xE0, 0x04, 0x07,
+ 0xD8, 0xD0, 0x00, 0xD1, 0x16, 0xD2, 0x16, 0xD3, 0x01, 0xE0,
+ 0x00, 0x07, 0xBF, 0xD0, 0x01, 0xD1, 0x07, 0xD2, 0x08, 0xD3,
+ 0x00, 0xE0, 0x00, 0x07, 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xD4,
+ 0x00, 0xC4, 0xA0, 0xF4, 0x09, 0xD0, 0x00, 0xE0, 0x00, 0x07,
+ 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xD4, 0x0F, 0xC4, 0xF0, 0xD5,
+ 0xFE, 0xC5, 0xFE, 0xD6, 0x30, 0xC6, 0x40, 0xE0, 0x07, 0x07,
+ 0x16, 0x87, 0x7C, 0x1E, 0xEB, 0xE0, 0x04, 0x07, 0xD8, 0xC6,
+ 0xC0, 0xE0, 0x04, 0x07, 0xD8, 0xD4, 0xFF, 0xC4, 0xFF, 0xF4,
+ 0x09, 0xD4, 0x0F, 0xC4, 0x70, 0xE0, 0x04, 0x07, 0xE7, 0xDA,
+ 0xFF, 0x27, 0x6E, 0x2D, 0x5A, 0x88, 0x5F, 0x88, 0x83, 0x87,
+ 0x78, 0xDA, 0x8E, 0xAA, 0xA7, 0xFA, 0x7C, 0xAA, 0xA9, 0xFA,
+ 0x8C, 0xAA, 0xA9, 0xFA, 0x9C, 0xD4, 0x0F, 0xC4, 0xF0, 0xD5,
+ 0xFE, 0xC5, 0xFE, 0xD6, 0x3F, 0xC6, 0xC0, 0xD6, 0x30, 0xC6,
+ 0x40, 0xE0, 0x07, 0x07, 0x16, 0x87, 0x7C, 0x1E, 0xEB, 0xE0,
+ 0x04, 0x07, 0xD8, 0xD0, 0x01, 0xE0, 0x00, 0x07, 0xBF, 0xD0,
+ 0x01, 0xD1, 0x16, 0xD2, 0x16, 0xD3, 0x01, 0xE0, 0x00, 0x07,
+ 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xD2, 0x60, 0xA2, 0x23, 0xF1,
+ 0x28, 0xA2, 0x23, 0xF0, 0x28, 0xD2, 0x00, 0xD4, 0x00, 0xD3,
+ 0x00, 0xD5, 0x04, 0xE0, 0x06, 0x07, 0x38, 0x02, 0x26, 0x04,
+ 0x48, 0x03, 0x37, 0xB5, 0x52, 0xF5, 0x05, 0x05, 0x2F, 0x82,
+ 0x29, 0x84, 0x49, 0x83, 0x39, 0x25, 0x43, 0x24, 0x23, 0xD2,
+ 0x60, 0xA2, 0x23, 0xF2, 0x1C, 0xA2, 0x23, 0xF2, 0x0C, 0xD7,
+ 0x70, 0xC7, 0x0D, 0xA6, 0x41, 0xE0, 0x06, 0x07, 0x1D, 0xD6,
+ 0xBD, 0xF6, 0x7C, 0xD7, 0x0A, 0xC7, 0x0B, 0xA6, 0x41, 0xE0,
+ 0x06, 0x07, 0x1D, 0xD6, 0xBE, 0xF6, 0x7C, 0xD7, 0x51, 0xC7,
+ 0x0A, 0xA6, 0x41, 0xE0, 0x06, 0x07, 0x1D, 0xD6, 0xBF, 0xF6,
+ 0x7C, 0xD0, 0xD3, 0xC0, 0x01, 0xD1, 0xE0, 0xC1, 0x01, 0x32,
+ 0x04, 0xA2, 0x23, 0x82, 0x23, 0x33, 0x15, 0xA3, 0x33, 0x83,
+ 0x33, 0xD6, 0x80, 0x14, 0x26, 0x26, 0x44, 0x86, 0x6F, 0x18,
+ 0x46, 0xD6, 0xBA, 0xF6, 0x8C, 0xD6, 0x80, 0x14, 0x26, 0x26,
+ 0x44, 0x86, 0x6F, 0x18, 0x46, 0xD9, 0x03, 0x29, 0x89, 0x99,
+ 0x9E, 0x98, 0x86, 0x19, 0x89, 0xA9, 0x97, 0x89, 0x92, 0xA8,
+ 0x90, 0xD6, 0x41, 0xC6, 0x24, 0xF8, 0x01, 0x05, 0x79, 0x06,
+ 0x69, 0xD8, 0xBB, 0xF8, 0x6C, 0xD6, 0x80, 0x14, 0x26, 0x26,
+ 0x44, 0x86, 0x6F, 0x18, 0x46, 0xD9, 0x0C, 0x29, 0x89, 0x99,
+ 0x9E, 0xD6, 0x12, 0x28, 0x86, 0x98, 0x8E, 0x09, 0x89, 0xF9,
+ 0x0D, 0xA9, 0x9F, 0xA9, 0x9B, 0xD7, 0x0F, 0x4C, 0x97, 0x56,
+ 0x7D, 0x26, 0x96, 0x46, 0x87, 0xD7, 0x08, 0xD8, 0x0B, 0xD9,
+ 0x04, 0xE0, 0x06, 0x07, 0xBF, 0xD6, 0x80, 0x14, 0x26, 0x26,
+ 0x44, 0x86, 0x6F, 0x18, 0x46, 0xD9, 0x06, 0x29, 0x89, 0x99,
+ 0x9E, 0xB9, 0x9C, 0xF9, 0x0D, 0xD7, 0x0F, 0x4C, 0x97, 0x56,
+ 0x7D, 0x29, 0x96, 0x49, 0x87, 0xA7, 0x90, 0x26, 0x97, 0xD7,
+ 0x18, 0xD8, 0x1B, 0xD9, 0x05, 0xE0, 0x06, 0x07, 0xBF, 0xD5,
+ 0x0E, 0xC5, 0x70, 0xE0, 0x05, 0x07, 0xE7, 0x87, 0x74, 0x87,
+ 0x7F, 0x87, 0x7F, 0xD5, 0x01, 0xF7, 0x01, 0x05, 0xB9, 0xD5,
+ 0x02, 0xB7, 0x76, 0xF7, 0x01, 0x05, 0xB9, 0xD5, 0x00, 0xD6,
+ 0x0C, 0xD7, 0x0D, 0xD8, 0x0E, 0xE0, 0x05, 0x07, 0xBF, 0xD5,
+ 0x00, 0xD6, 0x0E, 0xD7, 0x0E, 0xD8, 0x0E, 0xE0, 0x05, 0x07,
+ 0xA3, 0xD6, 0x12, 0xD7, 0x14, 0xE0, 0x05, 0x07, 0xBF, 0xED,
+ 0xD5, 0xD2, 0x00, 0xC2, 0x13, 0x33, 0x12, 0x04, 0x13, 0x15,
+ 0x13, 0x5C, 0xC0, 0x5D, 0x0D, 0x23, 0xCD, 0xF3, 0x05, 0x05,
+ 0xD4, 0xA0, 0x11, 0xF0, 0x02, 0xF0, 0x0E, 0xF0, 0x0E, 0xE0,
+ 0x00, 0x07, 0xF9, 0xE0, 0x00, 0x07, 0xF5, 0xF0, 0x0E, 0xEE,
+ 0x36, 0xF0, 0x0A, 0xFB, 0x08, 0xF9, 0x18, 0xBA, 0x9A, 0xB6,
+ 0x62, 0x1C, 0xB6, 0x1C, 0x8A, 0xF6, 0x18, 0xF8, 0x01, 0x06,
+ 0x1B, 0xFB, 0x01, 0x06, 0x4A, 0xB9, 0x92, 0xF9, 0x05, 0x05,
+ 0xEF, 0xDA, 0x13, 0xF8, 0x28, 0xFA, 0x84, 0xBB, 0xB2, 0xFB,
+ 0x01, 0x06, 0x4A, 0xBB, 0xB8, 0xFB, 0x01, 0x06, 0x1F, 0xD7,
+ 0x00, 0xC7, 0x94, 0xF7, 0x78, 0xD9, 0x00, 0xC9, 0xFF, 0x19,
+ 0x79, 0xF9, 0x01, 0x06, 0x4C, 0xD7, 0x00, 0xC7, 0xD0, 0xF9,
+ 0x78, 0xD8, 0x00, 0xF7, 0x8C, 0xF9, 0x05, 0x06, 0x1B, 0xD8,
+ 0x12, 0xF8, 0x88, 0xF2, 0x8C, 0xA8, 0x83, 0xD9, 0x00, 0xF8,
+ 0x9C, 0xDA, 0x10, 0xFA, 0xA8, 0xA8, 0x83, 0xF8, 0xAC, 0xD8,
+ 0x00, 0xD7, 0x00, 0xC7, 0x64, 0xF7, 0x8C, 0xD8, 0x11, 0xF8,
+ 0x88, 0xF4, 0x8C, 0xD8, 0x00, 0xC8, 0x8C, 0xD9, 0x01, 0xF8,
+ 0x9C, 0xF0, 0x06, 0xF0, 0x02, 0xD9, 0x13, 0xFA, 0x98, 0xF2,
+ 0xAC, 0xEE, 0x0E, 0xD8, 0x00, 0xD7, 0x00, 0xC7, 0x60, 0xF7,
+ 0x8C, 0xD8, 0x0E, 0xF8, 0x88, 0xF4, 0x8C, 0xD8, 0x0F, 0xF8,
+ 0x88, 0xF2, 0x8C, 0xA8, 0x83, 0xD9, 0x00, 0xF8, 0x9C, 0xDA,
+ 0x0D, 0xFA, 0xA8, 0xA8, 0x83, 0xF8, 0xAC, 0xD8, 0x00, 0xC8,
+ 0x8C, 0xD9, 0x05, 0xF8, 0x9C, 0xF0, 0x06, 0xF0, 0x02, 0xD9,
+ 0x00, 0xC9, 0xAC, 0xD8, 0x0C, 0xFA, 0x80, 0xF9, 0xAC, 0xD9,
+ 0x00, 0xC9, 0x08, 0xD7, 0x00, 0xC7, 0x34, 0xF7, 0x9C, 0xC9,
+ 0x38, 0xD7, 0x00, 0xC7, 0x44, 0xF7, 0x9C, 0xC9, 0x20, 0xD7,
+ 0x00, 0xC7, 0x48, 0xF7, 0x9C, 0xD8, 0x15, 0xF2, 0x8C, 0xF0,
+ 0x06, 0xEE, 0x4B, 0xF0, 0x0A, 0xD7, 0x15, 0xD8, 0x00, 0xC8,
+ 0x30, 0xF8, 0x7C, 0xD7, 0x00, 0xC7, 0x98, 0xF6, 0x78, 0xD8,
+ 0x1A, 0xF8, 0x6C, 0xD8, 0x00, 0xC8, 0xAC, 0xDA, 0x20, 0xF8,
+ 0xAC, 0xD9, 0x20, 0xDA, 0x0A, 0xCA, 0xF0, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x14, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x11, 0xCA, 0xF7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x15, 0xCA,
+ 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xD8, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x30, 0xCA, 0xC8, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x7C, 0xCA, 0xF8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x00, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x94, 0xCA,
+ 0xC7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x78, 0xCA, 0xF7, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xD8, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x98, 0xCA, 0xC8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x88, 0xCA, 0xF9, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x9C, 0xCA,
+ 0xF8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xDA, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x00, 0xCA, 0xDB, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x64, 0xCA, 0xCB, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0xAC, 0xCA, 0xFB, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0xFF, 0xCA,
+ 0xD8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x07, 0xCA, 0xC8, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x6C, 0xCA, 0x26, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x7C, 0xCA, 0xF6, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x63, 0xCA, 0xA6, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x6C, 0xCA,
+ 0x26, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x9C, 0xCA, 0xF6, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x63, 0xCA, 0xA6, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x15, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x67, 0xCA, 0x17, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x01, 0xCA,
+ 0xF7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x43, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x72, 0xCA, 0xB7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0x01, 0xCA, 0xF7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x43, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0x06, 0xCA, 0xF0, 0xF9, 0xAC, 0xA9,
+ 0x93, 0xDA, 0x42, 0xCA, 0xE8, 0xF9, 0xAC, 0xA9, 0x93, 0xDA,
+ 0xEC, 0xCA, 0xD7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0xFF, 0xCA,
+ 0xC7, 0xF9, 0xAC, 0xA9, 0x93, 0xDA, 0x11, 0xCA, 0xF7, 0xF9,
+ 0xAC, 0xA9, 0x93, 0xDA, 0xFF, 0xCA, 0xEF, 0xF9, 0xAC, 0xF7,
+ 0x7C, 0xD8, 0x00, 0xD7, 0x00, 0xC7, 0x64, 0xF7, 0x8C, 0xD7,
+ 0x14, 0xF7, 0x11, 0xEE, 0x4A, 0xF0, 0x0E, 0x44, 0xDC, 0xF4,
+ 0x05, 0x07, 0x13, 0xD4, 0x01, 0x7F, 0xC4, 0x7C, 0x1C, 0x13,
+ 0x43, 0x61, 0x13, 0xA2, 0x31, 0x6C, 0xCD, 0xB2, 0x22, 0xA4,
+ 0x20, 0xF4, 0x05, 0x07, 0x06, 0xA1, 0x01, 0xD4, 0x0F, 0x14,
+ 0x43, 0x60, 0x04, 0x70, 0x04, 0xA4, 0x33, 0x71, 0x14, 0xEF,
+ 0x15, 0xA1, 0x01, 0xD0, 0x00, 0xF0, 0x02, 0xD0, 0x01, 0xC0,
+ 0x70, 0xE0, 0x00, 0x07, 0xE7, 0xD1, 0x0F, 0x70, 0x21, 0xF0,
+ 0x02, 0x83, 0x03, 0xA5, 0x31, 0xD4, 0x58, 0xC4, 0x4F, 0xE0,
+ 0x04, 0x06, 0xFD, 0x22, 0x14, 0x34, 0x15, 0x85, 0x3F, 0xE0,
+ 0x04, 0x06, 0xFD, 0x82, 0x29, 0x82, 0x29, 0x02, 0x24, 0xD1,
+ 0x22, 0x11, 0x12, 0xD6, 0x00, 0x4F, 0xE1, 0xD8, 0x01, 0x17,
+ 0x87, 0x21, 0x17, 0xD6, 0x10, 0x4F, 0xE1, 0xF7, 0x05, 0x07,
+ 0x37, 0xD1, 0x1F, 0xF0, 0x02, 0xD0, 0x00, 0xD1, 0x02, 0xE0,
+ 0x00, 0x07, 0x45, 0xD1, 0x00, 0xD2, 0x01, 0xE0, 0x01, 0x07,
+ 0x45, 0xD2, 0x01, 0xD3, 0x02, 0xE0, 0x02, 0x07, 0x45, 0xF0,
+ 0x02, 0xD3, 0x00, 0xC3, 0xC0, 0xD4, 0x00, 0xD5, 0x0F, 0xD6,
+ 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xD3, 0xC6, 0xC3, 0x10, 0xD4,
+ 0x10, 0xD5, 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xE0,
+ 0x03, 0x07, 0xA8, 0xD3, 0xC6, 0xC3, 0x10, 0x87, 0x1E, 0x87,
+ 0x76, 0x1F, 0xF7, 0x87, 0x0E, 0x87, 0x7C, 0x1F, 0xF7, 0xD4,
+ 0x10, 0xD5, 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xE0,
+ 0x03, 0x07, 0xA8, 0xD3, 0x10, 0xC3, 0x27, 0xF3, 0x09, 0xD3,
+ 0x01, 0xD4, 0x1F, 0xD5, 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07,
+ 0xBF, 0xE0, 0x03, 0x07, 0xA8, 0xD3, 0x10, 0xC3, 0x27, 0xF3,
+ 0x09, 0xD3, 0x00, 0xC3, 0x70, 0xE0, 0x03, 0x07, 0xE7, 0xD3,
+ 0xFF, 0xC3, 0x03, 0x2C, 0x4F, 0xD3, 0x00, 0xD4, 0x1F, 0xD5,
+ 0x1F, 0xD6, 0x00, 0xE0, 0x03, 0x07, 0xBF, 0xE0, 0x03, 0x07,
+ 0xA8, 0xF0, 0x02, 0xD0, 0x00, 0xD1, 0x2C, 0xE0, 0x00, 0x07,
+ 0xD4, 0xF0, 0x02, 0xA4, 0x43, 0xF4, 0x0D, 0xD7, 0x01, 0x2D,
+ 0xCB, 0xD6, 0x10, 0x5E, 0x0E, 0xF6, 0x01, 0x07, 0x96, 0xD6,
+ 0x10, 0x16, 0x06, 0x67, 0x76, 0x65, 0x56, 0x1F, 0xF7, 0x3F,
+ 0xF5, 0xEF, 0x9A, 0x67, 0x70, 0x65, 0x50, 0x1E, 0xE7, 0x3E,
+ 0xE5, 0x17, 0x10, 0x55, 0xDC, 0x85, 0x52, 0xB5, 0x52, 0x00,
+ 0x05, 0x84, 0x43, 0xF7, 0x05, 0x07, 0x89, 0xF0, 0x02, 0xE0,
+ 0x00, 0x07, 0xBF, 0xE0, 0x04, 0x07, 0xA8, 0xF0, 0x02, 0xD0,
+ 0x60, 0xF1, 0x08, 0xD6, 0x00, 0xC6, 0xF0, 0xD3, 0x01, 0xD2,
+ 0x10, 0xA0, 0x03, 0xF7, 0x08, 0xA0, 0x03, 0xF8, 0x08, 0x24,
+ 0xDF, 0xF4, 0x01, 0x07, 0xB7, 0xE0, 0x06, 0x07, 0xD8, 0xA6,
+ 0x63, 0x81, 0x13, 0xB2, 0x22, 0xF2, 0x05, 0x07, 0xAE, 0xD0,
+ 0x60, 0xF0, 0x1C, 0xF0, 0x02, 0xAA, 0x01, 0xA6, 0x11, 0xA7,
+ 0x21, 0xD4, 0x60, 0xF5, 0x48, 0xDB, 0x01, 0x6B, 0xB3, 0x15,
+ 0x5F, 0xF4, 0x5C, 0xA4, 0x43, 0x8B, 0x32, 0x04, 0x4B, 0xF8,
+ 0x48, 0xA4, 0x43, 0xF9, 0x48, 0xE0, 0x06, 0x07, 0x87, 0xF4,
+ 0x9C, 0xB4, 0x42, 0xF4, 0x8C, 0xF0, 0x02, 0xC0, 0x80, 0xE0,
+ 0x00, 0x07, 0xD8, 0xF0, 0x02, 0xF0, 0x0A, 0xD3, 0x00, 0xC3,
+ 0x9C, 0xF3, 0x1C, 0xC3, 0xA0, 0xF3, 0x2C, 0xC3, 0xA4, 0xF3,
+ 0x0C, 0xD3, 0x00, 0xC3, 0xA8, 0xF3, 0x38, 0xF3, 0x01, 0x07,
+ 0xE0, 0xF0, 0x06, 0xF0, 0x02, 0xF0, 0x0A, 0xD2, 0x00, 0xC2,
+ 0xA4, 0xF2, 0x0C, 0xC2, 0xA8, 0xF1, 0x28, 0xF1, 0x01, 0x07,
+ 0xEC, 0xC2, 0x9C, 0xF1, 0x28, 0xC2, 0xA0, 0xF2, 0x28, 0xF0,
+ 0x06, 0xF0, 0x02, 0xD1, 0x00, 0xC1, 0x98, 0xF1, 0x0C, 0xF0,
+ 0x02, 0xD1, 0x00, 0xC1, 0x94, 0xF0, 0x18, 0xC1, 0x98, 0xF1,
+ 0x18, 0xF0, 0x02, 0xED, 0xDC, 0x90, 0x00, 0x88, 0x00, 0x30,
+ 0x00, 0x34, 0x00, 0x24, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0xDD, 0x3D, 0xD7, 0x00, 0x15, 0x00, 0x1A, 0x0A, 0x19, 0x00,
+ 0x1E, 0x00, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xA0, 0x01, 0x76, 0x01, 0x38, 0x02,
+ 0xC0, 0x02, 0x30, 0x04, 0x20, 0x03, 0x60, 0x06, 0x5C, 0x04,
+ 0xBC, 0x09, 0x60, 0x07, 0x9C, 0x0D, 0x70, 0xFF, 0xFF, 0x7A,
+ 0xF5, 0x10, 0xAE, 0x70, 0xA5, 0x22, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x17, 0x00, 0x04, 0x2C, 0x5F, 0x00, 0x00, 0x03,
+ 0x00, 0x06, 0x00, 0x27, 0xC5, 0x21, 0xF0, 0x16, 0x27, 0xC0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x67, 0x42, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x00, 0x1C, 0xFE,
+ 0xFE, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x30, 0x00, 0x0C, 0x08, 0x30, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x02, 0x00, 0x21, 0x00, 0x00, 0x00, 0x0C, 0x00,
+ 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x2C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x50, 0x00, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x0A, 0x03, 0xA9, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0F, 0x00,
+ 0x08, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x64, /* WAIT 100[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFF, 0x00, 0x00, 0xFB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x05, 0x01, 0xA3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x02, 0xB8, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x01, 0x01, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x08, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x14, 0xB2, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x2C, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x12, 0xD2, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x40, 0x12, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x01, 0xA3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x06, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0xA3, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xDA, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xF0, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x00, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xFD, 0xF8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x58, 0xD3, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0xD3, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0xD3, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x60, 0x03, 0x0C, 0xCF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0D, 0xD3, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x0C, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x96, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0xC7, 0xA1, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x04, 0xD3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x0F, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x27, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xEB, 0xD0, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0xDC, 0xF1, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x94, 0xD0, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0x13, 0xF1, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xF0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x3D, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x49, 0xD0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x01, 0xF0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x55, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x01, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xF0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x55, 0xE9, 0xA3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x06, 0xBB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x68, 0xD3, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x0C, 0xD3, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x92, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0xB6, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xF0, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x05, 0x96,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x2C, 0xD0, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x28, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x9E, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x8A, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x89, 0xD5, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x21, 0x03, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x53, 0x24, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x11, 0x34, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x93, 0x11, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x01, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x7F, 0xB3, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x01, 0x01, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x01, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0xD1,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x06, 0x5F, 0xEF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0x09, 0x5C, 0xC2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xF4, 0xF3, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x8E, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xEF, 0xD0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x3D, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x01, 0x94,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x02, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0x9A, 0xD0, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x89, 0xF3, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x01, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x27, 0xD2, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x28, 0xD3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xFE, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x6A, 0xC2, 0xFF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x09, 0xE9, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x04, 0x07, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0E, 0xF0, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xBD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0x7D, 0xCD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x1E, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x0D, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xE8, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xE7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xDF, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xDC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xD9, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xD6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xCF, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x01, 0xCB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x0A, 0x80, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x08, 0xEA, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xDF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0D, 0xEA, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0xB9, 0xF1, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x92, 0x11, 0x3C, 0xDE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x22, 0x3C, 0xCE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x0F, 0xD0, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x20, 0xEA, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0xD4, 0xC0, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x0F, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xD1, 0xEA, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x03, 0xC0, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x1A, 0x80, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xEA, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x03, 0xD7, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x60, 0xE0, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0xAA, 0x71,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x0A, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x74, 0xD7, 0xD5, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x45, 0xF5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0xF6, 0xB6, 0x46,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE9, 0xF9, 0x74, 0xC7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0D, 0x06, 0x45,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8B, 0xB8, 0x74, 0xF7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x42, 0x15, 0x64,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x0D, 0x22, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x25, 0xD3, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x23, 0xD3, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0xFE, 0x22, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x20, 0x22, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0xB9, 0xF3, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x34, 0x22, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x70, 0x21, 0xEA, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xF4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0E, 0xEA, 0x64,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0A, 0xFB, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x18, 0xBA, 0x9A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB6, 0x62, 0x1C, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1C, 0x8A, 0xF6, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x01, 0x02, 0x49,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x01, 0x02, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB9, 0x92, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x25, 0xDA, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x28, 0xFA, 0x84,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xBB, 0xB2, 0xFB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x78, 0xBB, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x01, 0x02, 0x4D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x78, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x8C, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x49, 0xD8, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x88, 0xF2, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x83, 0xD9, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x9C, 0xDA, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0xA8, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0xAC, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x64,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x8C, 0xD8, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x88, 0xF4, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xC8, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x01, 0xF8, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x06, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x13, 0xFA, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0xAC, 0xEA, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x60, 0xF7, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x0E, 0xF8, 0x88,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x8C, 0xD8, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x88, 0xF2, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x83, 0xD9, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x9C, 0xDA, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0xA8, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0xAC, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC8, 0x8C, 0xD9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x9C, 0xF0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD9, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC9, 0xAC, 0xD8, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x80, 0xF9, 0xAC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x00, 0xC9, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0xC9, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x44,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0xC9, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x00, 0xC7, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0xD8, 0x15,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x8C, 0xF0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x79, 0xF0, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xD0, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x03, 0xF2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x02, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x05, 0xF2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x02, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x05, 0xF2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x02, 0x8A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x02, 0x7B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x05, 0x02, 0xD3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x12, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x03, 0xFD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x12, 0xD7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x0A, 0xF7, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x71, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x76, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x04, 0xD3, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA8, 0x51, 0xF6, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x01, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xC5, 0xF5, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x33, 0xF8, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x37, 0x1A, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB8, 0x62, 0x1C, 0x8A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAA, 0x63, 0x1D, 0xA5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x29, 0x89, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xB2, 0xF6, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xB7, 0xA0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x08, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xE6, 0xEA, 0x9F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x03, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x18, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xC8, 0xA9, 0x51,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x38, 0xA8, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x03, 0xC5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x38, 0x12, 0x67,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x05, 0x02, 0xC8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xA3, 0x39,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0xB9, 0x25, 0x77,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x62, 0xD8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x18, 0x82, 0x24, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x44, 0x18, 0x23, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x43, 0x08, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x36, 0xEA, 0xE6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0xF0, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xF1, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x8E, 0xD3, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x40, 0x13, 0xF3, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x32, 0xF0, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x04, 0x49,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x02, 0x7B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x05, 0x02, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x0F, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x2C, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x7B, 0xF1, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x8B, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xD2, 0x9F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0xB4, 0xD4, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xC1, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x1C, 0xF3, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0xA3, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB4, 0x42, 0xF4, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0xF1, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x8E, 0xD6, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x28, 0x84, 0x45,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x44, 0xB3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x38, 0xA3, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x38, 0xA9, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x00, 0xE0, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x49, 0xD9, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x09, 0x04, 0x2C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x09, 0x05, 0xEF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC9, 0x0A, 0xF9, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB9, 0x92, 0xDA, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x09, 0x03, 0xFD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x41, 0xAA, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB3, 0x28, 0xFB, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x09, 0x03, 0xC5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x44, 0x69, 0x07, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x54, 0x27, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x00, 0x4F, 0xA9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x7F, 0xAA, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x27, 0x7A, 0x27, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x01, 0x03, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x4C, 0xA7, 0x91,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEB, 0x04, 0x9A, 0x41,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0x0E, 0x97, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x27, 0x7F, 0x2F, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x05, 0x02, 0xF8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0xD6, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xBA, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x05, 0x02, 0xFD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD4, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x8E, 0xD7, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x01, 0xF9, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xB3, 0x99, 0x91,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4B, 0x14, 0xF6, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0xB3, 0xF9, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x96, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x4D, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0x10, 0x2D, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x04, 0xEB, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x79, 0xF7, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x73, 0xA5, 0xB5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x58, 0xF7, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x13, 0x19, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0x6B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x99, 0x27, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x6B, 0xB7, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x2C, 0xA5, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x58, 0xA5, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x58, 0x19, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0x69, 0xBA, 0xA2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1B, 0x96, 0x49, 0xBA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x9A, 0x91, 0x29, 0x9A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x0D, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0x08, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x99, 0x07, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xB3, 0xD7, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x0C, 0xDB, 0x8E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4B, 0x04, 0xF6, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA5, 0xB5, 0xF9, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x03, 0xB4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEB, 0xB3, 0x4B, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0xB8, 0xF6, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x83, 0xA0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0x01, 0x2D, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x04, 0xEB, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x0C, 0xA5, 0xB5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x58, 0xF8, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x73, 0xF7, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x03, 0x19, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x03, 0xA3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x99, 0x27, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xA3, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x2C, 0xA5, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x58, 0xA5, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x58, 0x19, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB5, 0x52, 0xFA, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0xA6, 0x5E, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xBA, 0xA2, 0x1B, 0x96,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x49, 0xBA, 0x9A, 0x91,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x29, 0x9A, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x9C, 0x08, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x99, 0x17, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xB3, 0xD7, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x79, 0xF7, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x8E, 0x4B, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0xB8, 0xA5, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x58, 0xA5, 0xB5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x58, 0x16, 0xA6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x03, 0xB4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0x94, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x42, 0xB4, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x42, 0xA5, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x0D, 0x05, 0x53,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0xD2, 0x5F, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1F, 0xFA, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xBA, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x0D, 0x25, 0x54,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x5C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0x5E, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1E, 0x0A, 0x5E, 0x3A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x13, 0xD2, 0x9E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x00, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1D, 0xD3, 0xF4, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x23, 0xFB, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x23, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x23, 0xF6, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x36, 0x86, 0x66,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x33, 0xB3, 0x36, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x36, 0x33, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5C, 0xF4, 0x43, 0xCE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB9, 0x92, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xE4, 0xD6, 0xF2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC6, 0x03, 0x4E, 0xCA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1F, 0xF6, 0x10, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x23, 0x94, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x34, 0xA7, 0x73,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x03, 0xCD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x2E, 0xFB, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x05, 0x03, 0xF5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x3A, 0xF3, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0xF5, 0xC4, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3B, 0x4B, 0xF2, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xAB, 0xB3, 0xC5, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4E, 0x5B, 0x2A, 0x1A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x01, 0x03, 0xFC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0xBC, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0xF4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x0F, 0xC7, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x07, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0xFF, 0x22, 0xD7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x24, 0xC7, 0x83, 0x8F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x33, 0x82, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x8E, 0xA7, 0x77,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x78, 0x42, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x79, 0xF8, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x43, 0x80, 0xA7, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x78, 0x44, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x9E, 0x98, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x28, 0x20, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x04, 0x1D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x68, 0xD8, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x42, 0x78, 0x82, 0x27,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x2C, 0xA6, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x3C, 0xA6, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x4C, 0xA6, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x5C, 0xD7, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x20, 0xE0, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x88, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x63, 0xF6, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD6, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x68, 0xD3, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0xF0, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0x01, 0xD5, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0x40, 0x1D, 0xDA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x07, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0xC0, 0x1D, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x07, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x12, 0xD7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0x14, 0xF4, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x71, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x76, 0xD4, 0xFE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0xFE, 0xE0, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x7A, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0xE3, 0xC2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x5B, 0xC3, 0x0B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x0D, 0xA4, 0x1F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x4B, 0xF4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x56, 0x33, 0x32,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x34, 0xB4, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEC, 0x50, 0xD4, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0x20, 0xE0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x83, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x85, 0x53, 0x33, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x39, 0xD2, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x8E, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x12, 0x4F, 0xF3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x03, 0xD6, 0xAA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x2A, 0x4E, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x1E, 0x4F, 0xF3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x72, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xED, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x57, 0x4F, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x0F, 0x27, 0x74,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x02, 0xD6, 0x74,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x01, 0xF4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xBF, 0xA2, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x03, 0xF4, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xA5, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x33, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x97, 0x35, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x85, 0xB3, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x08, 0xD6, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3F, 0xF8, 0xD6, 0x55,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x97, 0x3B, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0x91, 0xB3, 0x3C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3F, 0xF8, 0xD5, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x77, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x57, 0xD8, 0x8D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x88, 0xD8, 0xAE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x08, 0x87, 0x94, 0x43,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x42, 0x08, 0x84,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x88, 0xD6, 0x52,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x3B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x31, 0xD5, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x9C, 0xEC, 0xBF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0xF3, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x35, 0xD5, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x98, 0x94, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x01, 0x04, 0xBF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA2, 0x29, 0xF7, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x75, 0xB3, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x31, 0x23, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x01, 0x04, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x03, 0x2F, 0xF8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x0C, 0x07, 0x74,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0E, 0xD6, 0xDA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x31, 0xD6, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x53, 0xD4, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0xF0, 0x1C, 0xCA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x60, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x62, 0x08, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x88, 0xA8, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x88, 0xE0, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x7A, 0xD2, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x83, 0x18, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x76, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x54, 0xF5, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x50, 0x5D, 0xD0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x40, 0x65, 0xA3, 0x2F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA3, 0x39, 0xF5, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x50, 0x5D, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x40, 0x65, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xA2, 0x25,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xF4, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4D, 0x0C, 0xF5, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xE0, 0xB2, 0x22,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x28, 0xD5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x4F, 0x7D, 0xE9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x10, 0x15, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x74, 0x45, 0x73, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x70, 0x05, 0x20, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x23, 0x33, 0x24, 0x44,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x0F, 0x83, 0x3F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x4F, 0x15, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x43, 0x23, 0x53,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x24, 0x60, 0xD5, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xC0, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x03, 0x36, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0xE3, 0x86, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB6, 0x62, 0x26, 0x62,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0x06, 0x82, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB5, 0x52, 0xF5, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x04, 0xFE, 0xC5, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x36, 0x05, 0xC5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x65, 0x86, 0x6F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x65, 0xA7, 0x11,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x02, 0xD6, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x8D, 0xF3, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x67, 0x51, 0xA7, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x77, 0xD5, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x37, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x57, 0xA7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x02, 0xD6, 0xFC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x87, 0x09, 0xD5, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x10, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x57, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x8B, 0xF3, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x02, 0xF2, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x41, 0xB7, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0C, 0xD6, 0xB0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x05, 0x37, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0D, 0xD6, 0xB4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x68, 0x33, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x31, 0xD5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xCF, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x3B, 0xC5, 0x27,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x09, 0xB0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x06, 0xC5, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x05, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x85, 0x73, 0x86, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x01, 0x2D, 0xD8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2E, 0xE8, 0xD4, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4C, 0xC3, 0x26, 0x64,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x31, 0x25, 0x54,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x13, 0x35, 0x03, 0x36,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1F, 0xE9, 0x95, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x1D, 0xF9, 0x20, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x05, 0x5D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x22, 0x27, 0xA3, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x13, 0x37, 0x84, 0x39,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x13, 0x34, 0xED, 0x39,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0xED, 0xD5, 0x8B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x3C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x01, 0x2D, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8B, 0x92, 0x0B, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB6, 0x34, 0x16, 0x6B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8B, 0x19, 0x2F, 0xB8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x08, 0xD7, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x47, 0xAB, 0x07, 0x79,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x73, 0x0A, 0x67,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8A, 0xA3, 0xD2, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x01, 0xD5, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x5A, 0x85, 0x5B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2A, 0x52, 0xAA, 0xA5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8A, 0xA5, 0x5C, 0xA6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5D, 0x7A, 0x2C, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x85, 0xF2, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x01, 0x05, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xF2, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x80, 0x02, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x13, 0x32, 0x09, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2A, 0x52, 0x8A, 0xA4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0xA0, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x91, 0xA9, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x01, 0x89, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x89, 0xDB, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xCB, 0x01, 0x46, 0x9B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x86, 0x62, 0x06, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x8C, 0xFA, 0x6C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x16,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x0C, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x76, 0xD0, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xF0, 0x1C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xC1, 0xFF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x06, 0xC2, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0xC3, 0xFB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x4D, 0x3C, 0xD3, 0x64,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0xF8, 0x4E, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x20, 0xDE, 0xD2, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x20, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x83, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0xFF, 0x4C, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0x13, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x26, 0xC2, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x03, 0xC2, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x82, 0x3A, 0x82, 0x2D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x07, 0xC8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x15, 0x82, 0xF5, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xC8, 0xD8, 0x39,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC8, 0x01, 0x15, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x01, 0x05, 0xC8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x00, 0xA2, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x0B, 0x73, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x0A, 0x64, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x4B, 0x07, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x18, 0x72, 0xF8, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xD9, 0xB8, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB1, 0x12, 0xF1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0xD9, 0x28, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF8, 0x05, 0x05, 0x9F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xB9, 0xC2, 0xFF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF2, 0x09, 0xD3, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x2B, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x76, 0xD1, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC1, 0xF0, 0xD0, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB0, 0x02, 0xA1, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x05, 0x05, 0xE5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x23, 0xE0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x7A, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0xD0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x03, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x76, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x87, 0xF0, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x81, 0x0F, 0xD2, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0xDE, 0xF1, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA1, 0x13, 0xD0, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x1C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0xDF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x70, 0x44, 0xFE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x0D, 0x45, 0xEF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0xC9, 0x2C, 0xC5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x01, 0x06, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x02, 0x07, 0xDF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0A, 0x5F, 0xD3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x01, 0x06, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x0D, 0x5E, 0x3D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x01, 0x06, 0x21,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0A, 0x5F, 0xD8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x01, 0xF7, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x2A, 0xF5, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5E, 0xC9, 0xFB, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x01, 0x06, 0x2A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x00, 0xEE, 0x4D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x89, 0xF9, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x82, 0xF0, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2B, 0x30, 0x09, 0x9B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x9C, 0xD0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x4D, 0xDA, 0x83,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0xA8, 0x05, 0x5B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x5C, 0xD4, 0x15,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x04, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x02, 0xEE, 0x4D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x86, 0xF3, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x89, 0xF1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x3C, 0xA9, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x9C, 0xD0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEE, 0x4D, 0xF9, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x30, 0x47, 0xD3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x46, 0x3D, 0xF7, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x49, 0xF6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x4A, 0xDA, 0xB9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x01, 0xFA, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x01, 0xEE, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x0D, 0x09, 0x3B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0x9C, 0xD0, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0x8B, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x16, 0x0B, 0xAB, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x05, 0x06, 0x54,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x0D, 0xD4, 0x84,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x48, 0x8A, 0x29,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x03, 0x2F, 0xAB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0xB6, 0xF9, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x63, 0xA9, 0xB4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x06, 0x67,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDB, 0x00, 0xD5, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC5, 0x01, 0xEE, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x00, 0xD9, 0xC0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFB, 0x98, 0xEE, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x00, 0xDB, 0x70,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x46, 0xB4, 0xD9, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x98, 0x2A, 0x69,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x9A, 0xAE, 0x06, 0x6A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB4, 0x42, 0xF4, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x77, 0xD7, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC7, 0x08, 0x17, 0x75,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x76, 0xEE, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x65, 0xD9, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC9, 0x02, 0x09, 0x95,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x9B, 0xDA, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xFA, 0xA8, 0xDB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xBA, 0x9A, 0xA2,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x19, 0x9A, 0xDA, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xCA, 0x08, 0x16, 0xA9,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x47, 0x9B, 0xD9, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x79, 0x88, 0x99,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x89, 0x88, 0x15, 0x97,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x81, 0xF9, 0x5C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x83, 0xF9, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x15, 0xE0, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x76, 0xFB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0x9E, 0xD9, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x69, 0x88, 0x99,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x89, 0x88, 0x15, 0x96,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x81, 0xF9, 0x5C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x75, 0xE0, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x7A, 0xD7, 0x87,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x78, 0xD8, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x77, 0x78, 0x88, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x7C, 0xD6, 0x1D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD6, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x68, 0xA6, 0x63,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x08, 0x04, 0x07,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x84, 0x49, 0xF6, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0xB3, 0x03, 0x41,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x01, 0xEE, 0xB5,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x13, 0x41, 0xD8, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x2C, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x76, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x2C, 0xD1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x16, 0xD1, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x76,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0xB9, 0xD1, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x1C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x89, 0xF0, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0xB2, 0xF1, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x87, 0xF2, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x05, 0xF7,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x06, 0xA8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x80, 0xC6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0x3E, 0x88, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x87, 0xD5, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x76, 0xE0, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x57, 0xD7, 0xBC,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF7, 0x78, 0xF7, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0xEF, 0xD6, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC6, 0x0B, 0xD8, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0x3E, 0xF7, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0xEB, 0xD8, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x60, 0xC6, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x5F, 0x3E, 0xF7, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x06, 0xEB, 0xD8, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x0A, 0xD7, 0x81,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA7, 0x21, 0xA9, 0x41,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA6, 0x01, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x05, 0x61, 0xA4, 0x81,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x82, 0x4D, 0x49,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8A, 0x29, 0xDB, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xAB, 0xAB, 0xB3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x29, 0xB9, 0xD8, 0x19,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC8, 0x80, 0xE0, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x7A, 0xD8, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x18, 0x48, 0xA5, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x1C, 0xD7, 0x30,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x05, 0x07, 0x12,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD8, 0x00, 0xD7, 0xEE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x3B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x1D, 0xD7, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x3B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEF, 0x1B, 0xD8, 0x0F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x1D, 0xD7, 0x42,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x3B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0x1C, 0xD7, 0xEE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x06, 0x07, 0x3B,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x06, 0x4E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD9, 0x01, 0x2D, 0x92,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x01, 0x07, 0x3A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x8A, 0x29, 0xDB, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2F, 0xAB, 0xA9, 0xB6,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF9, 0x05, 0x07, 0x2A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x32, 0xCA, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEF, 0x2C, 0xDA, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xCA, 0x04, 0x89, 0x54,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x09, 0x9A, 0xDB, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xDA, 0x0F, 0xCA, 0xA0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x0A, 0x07, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD7, 0x08, 0x7B, 0x97,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x0A, 0x07, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x6B, 0x97, 0xE0, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x7A, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x07, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x08, 0xD4, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC4, 0xF0, 0xD2, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x03, 0xF5, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA0, 0x03, 0xF6, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x01, 0x2F, 0xDF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x01, 0x07, 0x4F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x04, 0x07, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA4, 0x43, 0x81, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB2, 0x22, 0xF2, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x45, 0xD0, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x1C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x60, 0xF4, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x85, 0x03, 0xD6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x66, 0x65, 0x1C, 0xCA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x4C, 0xA3, 0x33,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x03, 0x30, 0xF4, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xA9, 0x23, 0xF9, 0x0D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x0F, 0x2D, 0x1D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x19, 0xD6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x27, 0xD6, 0x66, 0x65,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x67, 0x75, 0x1C, 0xCA,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x3C, 0xCB, 0x16, 0x85,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x57, 0xC5, 0x87, 0x72,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xB7, 0x72, 0x05, 0x57,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x89, 0x93, 0xF6, 0x05,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x66, 0xF3, 0x4C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xC0, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xF0, 0x0A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x00, 0xC3, 0x9C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x1C, 0xC3, 0xA0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x2C, 0xC3, 0xA4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x0C, 0xD3, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0xA8, 0xF3, 0x38,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x01, 0x07, 0x82,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x06, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD0, 0x02, 0xC0, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x00, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x03, 0x2D, 0xDE,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x13, 0x2C, 0xCD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD6, 0xBB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF6, 0x68, 0xD4, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x4C, 0xD2, 0x67,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x3C, 0xD3, 0xC0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC3, 0x02, 0xF1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x9F, 0xA2, 0x61,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x80, 0xC3, 0x8D,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x09, 0xC1, 0xF0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x01, 0x07, 0x7A,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xBD, 0xF4, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x01, 0x81, 0x03,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x2D, 0x4D, 0xF1, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xAD, 0xD6, 0xBF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x68, 0xEF, 0xAF,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD6, 0xBD, 0xF4, 0x68,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF4, 0x68, 0xD2, 0x0E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x40, 0xE0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0x57, 0xD0, 0x60,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0xFF, 0xC1, 0xFD,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x1C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xC1, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x0C, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x00, 0xC1, 0x94,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x18, 0xC1, 0x98,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x18, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x0A, 0xD2, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0xA4, 0xF2, 0x0C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0xA8, 0xF1, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x01, 0x07, 0xC8,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0x9C, 0xF1, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC2, 0xA0, 0xF2, 0x28,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x06, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD2, 0x08, 0xC2, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD3, 0x0B, 0xC3, 0x20,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xE0, 0x03, 0x07, 0xC3,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x94, 0x48, 0x00, 0x24,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD5, 0x85, 0xF5, 0x58,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x26, 0x05, 0x96, 0x6E,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x10, 0x06, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD1, 0x82, 0xF1, 0x18,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF1, 0x0D, 0xD2, 0x86,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF3, 0x28, 0xD2, 0x89,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF5, 0x28, 0xD6, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC6, 0x20, 0xE0, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0x87, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x97, 0x7C, 0xA2, 0x71,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xD4, 0x81, 0xF8, 0x48,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x17, 0x78, 0x10, 0x35,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x40, 0x71, 0xA1, 0x71,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xF0, 0x02, 0xD0, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xC0, 0x20, 0xE0, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x07, 0xC3, 0xD4, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x0E, 0xD4, 0x63, 0x14,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x0F, 0xF4, 0x11, 0x23,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x14, 0xF0, 0x02,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0xEA, 0x12, 0x90, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x88, 0x00, 0x30, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x34, 0x00, 0x24, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x6C, 0x00, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x02, 0x13,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x39, 0xA7, 0x00, 0x15,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x24, 0x08, 0xFB,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x28, 0x00, 0x51,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x12, 0x39,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x0C, 0x80, 0xF0, 0xF7, 0x3E, 0x75, 0xC1, 0x8A, 0xE4, 0x02,
+ 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x05, 0x0F, 0xEE, 0xAA, 0x5F, 0xEA, 0x90,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x06, 0x00, 0x0A, 0x4D, 0x8C, 0xF2, 0xD8, 0xCF, 0x30, 0x79,
+ 0x9F,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x0B, 0x0D, 0xA4, 0x6C,
+ 0x00, 0x10, /* Length = 16 bytes */
+ 0x0A, 0x01, 0x67, 0x24, 0x40, 0x08, 0xC3, 0x20, 0x10, 0x64,
+ 0x3C, 0xFA, 0xF7, 0xE1, 0x0C, 0x2C,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x09, 0x0B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x10, 0x13,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x16, 0x12,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1F, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x01, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x10,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x02, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 9008 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_base_firmware_i2c_files_base_firmwares_mts_init = {
+ XC3028_base_firmware_i2c_files_base_firmwares_mts_init_SEQUENCE
+};
+
+
+// ************************************************************
+// *** STANDARD-SPECIFIC FIRMWARE FILES
+// *** These declarations are not used directly by user
+// ************************************************************
+
+unsigned char XC3028_std_firmware_bg_pal_a2_a_SEQUENCE[163] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x5E, 0x00, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x01, 0xB6, 0x15, 0x16, 0xB1, 0xA6, 0xD2, 0xA9, 0x12,
+ 0x41, 0x66,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x1B, 0xD2, 0x9B, 0x92, 0x02, 0x96, 0xC1, 0x96, 0x56,
+ 0x59, 0x12,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 163 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_bg_pal_a2_a = {
+ XC3028_std_firmware_bg_pal_a2_a_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_bg_pal_a2_a_mts_SEQUENCE[171] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x5E, 0x00, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1B,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x01, 0xB6, 0x15, 0x16, 0xB1, 0xA6, 0xD2, 0xA9, 0x12,
+ 0x41, 0x66,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x10, 0x32, 0x00, 0x00, 0x02, 0xE4, 0x81, 0x00, 0x06,
+ 0xA9, 0x04,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x09, 0x90, 0x09, 0x06, 0x64, 0x02, 0x41,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x40,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 171 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_bg_pal_a2_a_mts = {
+ XC3028_std_firmware_bg_pal_a2_a_mts_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_bg_pal_a2_b_SEQUENCE[163] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x5E, 0x00, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x01, 0xB6, 0x15, 0x16, 0xB1, 0xA6, 0xD2, 0xA9, 0x12,
+ 0x41, 0x66,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x1B, 0xD2, 0x9B, 0x92, 0x02, 0x96, 0xC1, 0x96, 0x56,
+ 0x59, 0x12,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 163 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_bg_pal_a2_b = {
+ XC3028_std_firmware_bg_pal_a2_b_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_bg_pal_a2_b_mts_SEQUENCE[171] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x5E, 0x00, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1B,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x01, 0xB6, 0x15, 0x16, 0xB1, 0xA6, 0xD2, 0xA9, 0x12,
+ 0x41, 0x66,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x10, 0x32, 0x00, 0x00, 0x02, 0xE4, 0x81, 0x00, 0x06,
+ 0xA9, 0x04,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x09, 0x90, 0x09, 0x06, 0x64, 0x02, 0x41,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x40,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 171 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_bg_pal_a2_b_mts = {
+ XC3028_std_firmware_bg_pal_a2_b_mts_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_bg_pal_nicam_a_SEQUENCE[163] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x5E, 0x00, 0xA2,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x01, 0xB6, 0x15, 0x16, 0xB1, 0xA6, 0xD2, 0xA9, 0x12,
+ 0x41, 0x66,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x0A, 0xE2, 0x9E, 0xD8, 0x02, 0x52, 0x41, 0xA9, 0x86,
+ 0x66, 0x23,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 163 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_bg_pal_nicam_a = {
+ XC3028_std_firmware_bg_pal_nicam_a_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_bg_pal_nicam_a_mts_SEQUENCE[171] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x5E, 0x00, 0xA2,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1B,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x01, 0xB6, 0x15, 0x16, 0xB1, 0xA6, 0xD2, 0xA9, 0x12,
+ 0x41, 0x66,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x10, 0x32, 0x00, 0x00, 0x02, 0xE4, 0x81, 0x00, 0x06,
+ 0xA9, 0x04,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x09, 0x90, 0x09, 0x06, 0x64, 0x02, 0x41,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x40,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 171 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_bg_pal_nicam_a_mts = {
+ XC3028_std_firmware_bg_pal_nicam_a_mts_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_bg_pal_nicam_b_SEQUENCE[163] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x5E, 0x00, 0xA2,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x01, 0xB6, 0x15, 0x16, 0xB1, 0xA6, 0xD2, 0xA9, 0x12,
+ 0x41, 0x66,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x0A, 0xE2, 0x9E, 0xD8, 0x02, 0x52, 0x41, 0xA9, 0x86,
+ 0x66, 0x23,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 163 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_bg_pal_nicam_b = {
+ XC3028_std_firmware_bg_pal_nicam_b_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_bg_pal_nicam_b_mts_SEQUENCE[171] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x5E, 0x00, 0xA2,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1B,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x01, 0xB6, 0x15, 0x16, 0xB1, 0xA6, 0xD2, 0xA9, 0x12,
+ 0x41, 0x66,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x10, 0x32, 0x00, 0x00, 0x02, 0xE4, 0x81, 0x00, 0x06,
+ 0xA9, 0x04,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x09, 0x90, 0x09, 0x06, 0x64, 0x02, 0x41,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x40,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 171 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_bg_pal_nicam_b_mts = {
+ XC3028_std_firmware_bg_pal_nicam_b_mts_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_dk_pal_a2_SEQUENCE[163] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x1E, 0x00, 0x2F,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x1F, 0xE4, 0xED, 0xB8, 0x06, 0xDC, 0x81, 0x59, 0x86,
+ 0xA6, 0x14,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 163 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_dk_pal_a2 = {
+ XC3028_std_firmware_dk_pal_a2_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_dk_pal_a2_mts_SEQUENCE[171] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x1E, 0x00, 0x2F,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1B,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x0E, 0x15, 0x6D, 0xB8, 0x07, 0x76, 0x01, 0x66, 0x86,
+ 0xA4, 0x1B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x09, 0x90, 0x09, 0x06, 0x64, 0x02, 0x41,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x40,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 171 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_dk_pal_a2_mts = {
+ XC3028_std_firmware_dk_pal_a2_mts_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_dk_pal_nicam_SEQUENCE[163] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x1E, 0x00, 0xA5,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x18, 0x42, 0x5F, 0x00, 0x04, 0x9E, 0xC1, 0x98, 0x06,
+ 0x96, 0x13,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 163 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_dk_pal_nicam = {
+ XC3028_std_firmware_dk_pal_nicam_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_dk_pal_nicam_mts_SEQUENCE[171] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x1E, 0x00, 0xA5,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1B,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x09, 0x04, 0xDC, 0x80, 0x04, 0x95, 0xA1, 0x55, 0x06,
+ 0x59, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x09, 0x90, 0x09, 0x06, 0x64, 0x02, 0x41,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x40,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 171 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_dk_pal_nicam_mts = {
+ XC3028_std_firmware_dk_pal_nicam_mts_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_dk_secam_a2_dk1_SEQUENCE[163] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x1E, 0x00, 0x2D,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x13, 0x54, 0x98, 0xD8, 0x04, 0xDE, 0x01, 0x52, 0x46,
+ 0x54, 0x09,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 163 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_dk_secam_a2_dk1 = {
+ XC3028_std_firmware_dk_secam_a2_dk1_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_dk_secam_a2_dk1_mts_SEQUENCE[171] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x1E, 0x00, 0x2D,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1B,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x1E, 0x44, 0x92, 0x90, 0x04, 0xE4, 0x91, 0x5A, 0x86,
+ 0x59, 0x9B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x09, 0x90, 0x09, 0x06, 0x64, 0x02, 0x41,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x40,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 171 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_dk_secam_a2_dk1_mts = {
+ XC3028_std_firmware_dk_secam_a2_dk1_mts_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_dk_secam_a2_l_dk3_SEQUENCE[163] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x1E, 0x00, 0xB1,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x18, 0x42, 0x5F, 0x00, 0x04, 0x9E, 0xC1, 0x98, 0x06,
+ 0x96, 0x13,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 163 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_dk_secam_a2_l_dk3 = {
+ XC3028_std_firmware_dk_secam_a2_l_dk3_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_dk_secam_a2_l_dk3_mts_SEQUENCE[171] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x1E, 0x00, 0xB1,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1B,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x09, 0x04, 0xDC, 0x80, 0x04, 0x95, 0xA1, 0x55, 0x06,
+ 0x59, 0x02,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x09, 0x90, 0x09, 0x06, 0x64, 0x02, 0x41,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x40,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 171 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_dk_secam_a2_l_dk3_mts = {
+ XC3028_std_firmware_dk_secam_a2_l_dk3_mts_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_dtv6_atsc_2633_SEQUENCE[151] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x25, 0x01, 0x72,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x18,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x1B, 0x19, 0xB5, 0x29, 0xAB, 0x09, 0x55, 0x44,
+ 0x05, 0x65,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x18, 0x08, 0x00, 0x00, 0x50, 0x20, 0xC3, 0x45, 0x23,
+ 0x2B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x02, 0xD5, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xFF, 0xEF, 0xFF,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x02,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x01,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB4, 0x00, 0xB4,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x1A, 0x82, 0x4B, 0x72, 0x05, 0xB6, 0xC1, 0xA5, 0xA6,
+ 0x69, 0x23,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0x33,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x06,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 151 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_dtv6_atsc_2633 = {
+ XC3028_std_firmware_dtv6_atsc_2633_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_dtv6_qam_2620_SEQUENCE[151] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x2D, 0x01, 0x72,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x18,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xC2, 0xA4, 0x49,
+ 0x0D, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x02, 0xD5, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xFF, 0xEF, 0xFF,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x02,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x01,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB4, 0x00, 0xB4,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x1C, 0xF2, 0x4D, 0xE0, 0x00, 0x0B, 0x61, 0x66, 0x06,
+ 0x69, 0x13,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x06,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 151 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_dtv6_qam_2620 = {
+ XC3028_std_firmware_dtv6_qam_2620_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_dtv6_qam_2633_SEQUENCE[151] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x2D, 0x01, 0x72,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x18,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xC2, 0xA4, 0x49,
+ 0x0D, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x02, 0xD5, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xFF, 0xEF, 0xFF,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x02,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x01,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB4, 0x00, 0xB4,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x1A, 0x82, 0x4B, 0x72, 0x05, 0xB6, 0xC1, 0xA5, 0xA6,
+ 0x69, 0x23,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0x33,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x06,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 151 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_dtv6_qam_2633 = {
+ XC3028_std_firmware_dtv6_qam_2633_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_dtv7_2620_SEQUENCE[151] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x37, 0x01, 0x72,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x18,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xC2, 0xA4, 0x49,
+ 0x0D, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x02, 0xD5, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xFF, 0xEF, 0xFF,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x03,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x01,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB4, 0x00, 0xB4,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x1A, 0x83, 0x25, 0xB4, 0x03, 0x6E, 0x01, 0x96, 0x86,
+ 0xA8, 0x1C,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x06,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 151 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_dtv7_2620 = {
+ XC3028_std_firmware_dtv7_2620_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_dtv7_2633_SEQUENCE[151] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x37, 0x01, 0x72,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x18,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xC2, 0xA4, 0x49,
+ 0x0D, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x02, 0xD5, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xFF, 0xEF, 0xFF,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x03,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x01,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB4, 0x00, 0xB4,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x1C, 0xF2, 0x4D, 0xE0, 0x00, 0x0B, 0x61, 0x66, 0x06,
+ 0x69, 0x13,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0x33,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x06,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 151 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_dtv7_2633 = {
+ XC3028_std_firmware_dtv7_2633_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_dtv78_2620_SEQUENCE[151] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x77, 0x01, 0x72,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x18,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xC2, 0xA4, 0x49,
+ 0x0D, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x02, 0xD5, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xFF, 0xEF, 0xFF,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x03,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x01,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB4, 0x00, 0xB4,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x1A, 0x83, 0x25, 0xB4, 0x03, 0x6E, 0x01, 0x96, 0x86,
+ 0xA8, 0x1C,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x06,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 151 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_dtv78_2620 = {
+ XC3028_std_firmware_dtv78_2620_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_dtv78_2633_SEQUENCE[151] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x77, 0x01, 0x72,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x18,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xC2, 0xA4, 0x49,
+ 0x0D, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x02, 0xD5, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xFF, 0xEF, 0xFF,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x03,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x01,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB4, 0x00, 0xB4,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x1C, 0xF2, 0x4D, 0xE0, 0x00, 0x0B, 0x61, 0x66, 0x06,
+ 0x69, 0x13,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0x33,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x06,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 151 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_dtv78_2633 = {
+ XC3028_std_firmware_dtv78_2633_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_dtv8_2620_SEQUENCE[151] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x37, 0x01, 0x72,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x18,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xC2, 0xA4, 0x49,
+ 0x0D, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x02, 0xD5, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xFF, 0xEF, 0xFF,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x03,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x01,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB4, 0x00, 0xB4,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x1A, 0x83, 0x25, 0xB4, 0x03, 0x6E, 0x01, 0x96, 0x86,
+ 0xA8, 0x1C,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x06,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 151 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_dtv8_2620 = {
+ XC3028_std_firmware_dtv8_2620_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_dtv8_2633_SEQUENCE[151] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x02, 0x37, 0x01, 0x72,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x18,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xC2, 0xA4, 0x49,
+ 0x0D, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x02, 0xD5, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xFF, 0xEF, 0xFF,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x03,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x01,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB4, 0x00, 0xB4,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x1C, 0xF2, 0x4D, 0xE0, 0x00, 0x0B, 0x61, 0x66, 0x06,
+ 0x69, 0x13,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0x33,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x06,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 151 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_dtv8_2633 = {
+ XC3028_std_firmware_dtv8_2633_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_fm_SEQUENCE[137] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xCC, 0x00, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x1B, 0x19, 0xB5, 0x29, 0xAB, 0x09, 0x55, 0x44,
+ 0x05, 0x65,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x02, 0xD5, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xFF, 0xEF, 0xFF,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x0D, 0x86, 0x51, 0xD2, 0x35, 0xA4, 0x92, 0xA5, 0xB5,
+ 0x25, 0x65,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x1D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x82, 0x96, 0x46,
+ 0x9A, 0x1C,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 137 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_fm = {
+ XC3028_std_firmware_fm_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_i_pal_nicam_SEQUENCE[163] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x1E, 0x00, 0xA1,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x1B, 0x22, 0x4A, 0x4C, 0x05, 0x2F, 0x01, 0xAA, 0x86,
+ 0x68, 0x2B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 163 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_i_pal_nicam = {
+ XC3028_std_firmware_i_pal_nicam_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_i_pal_nicam_mts_SEQUENCE[171] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x1E, 0x00, 0xA1,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1B,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x18, 0x42, 0x5F, 0x00, 0x04, 0x9E, 0xC1, 0x98, 0x06,
+ 0x96, 0x13,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x09, 0x90, 0x09, 0x06, 0x64, 0x02, 0x41,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x40,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 171 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_i_pal_nicam_mts = {
+ XC3028_std_firmware_i_pal_nicam_mts_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_l_secam_nicam_SEQUENCE[163] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x12, 0x00, 0x85,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x8B, 0x02, 0xD5, 0x55, 0xC7, 0xF5, 0x7E, 0x14,
+ 0x87, 0xA4, 0x3D,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x18, 0x42, 0x5F, 0x00, 0x04, 0x9E, 0xC1, 0x98, 0x06,
+ 0x96, 0x13,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x4C,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x0A,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x09, 0x08, 0x04, 0x42, 0x42, 0x01, 0x10,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 163 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_l_secam_nicam = {
+ XC3028_std_firmware_l_secam_nicam_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_lp_secam_nicam_SEQUENCE[163] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x01, 0x12, 0x00, 0x85,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x6C, 0x25, 0x82, 0x38, 0xA4, 0x49, 0xA9, 0x24,
+ 0x96, 0x69,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x14, 0x08, 0x30, 0x10, 0x6C, 0x18, 0x12, 0x0D, 0x19,
+ 0x32, 0xAD,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x8B, 0x02, 0xD5, 0x55, 0xC7, 0xF5, 0x7E, 0x14,
+ 0x87, 0xA4, 0x3D,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x18, 0x42, 0x5F, 0x00, 0x04, 0x9E, 0xC1, 0x98, 0x06,
+ 0x96, 0x13,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x4C,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x0A,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x09, 0x08, 0x04, 0x42, 0x42, 0x01, 0x10,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 163 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_lp_secam_nicam = {
+ XC3028_std_firmware_lp_secam_nicam_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_mn_ntscpal_a2_SEQUENCE[163] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xCC, 0x00, 0x2B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x1B, 0x19, 0xB5, 0x29, 0xAB, 0x09, 0x55, 0x44,
+ 0x05, 0x65,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x18, 0x08, 0x00, 0x00, 0x6C, 0x18, 0x16, 0x8C, 0x49,
+ 0x2A, 0xAB,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x0D, 0x86, 0x51, 0xD2, 0x35, 0xA4, 0x92, 0xA5, 0xB5,
+ 0x25, 0x65,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x0A, 0x52, 0x64, 0x92, 0x00, 0x52, 0x4D, 0x59, 0x66,
+ 0x66, 0x94,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 163 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_mn_ntscpal_a2 = {
+ XC3028_std_firmware_mn_ntscpal_a2_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_mn_ntscpal_a2_lcd_SEQUENCE[163] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xCC, 0x00, 0x2B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x1B, 0x19, 0xB5, 0x29, 0xAB, 0x09, 0x55, 0x44,
+ 0x05, 0x65,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x18, 0x08, 0x00, 0x00, 0x6C, 0x18, 0x16, 0x8C, 0x49,
+ 0x2A, 0xAB,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x06, 0x93, 0x28, 0x96, 0x49, 0x34, 0xC8, 0xDA, 0x5A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x0D, 0x86, 0x51, 0xD2, 0x35, 0xA4, 0x92, 0xA5, 0xB5,
+ 0x25, 0x65,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x0A, 0x52, 0x64, 0x92, 0x00, 0x52, 0x4D, 0x59, 0x66,
+ 0x66, 0x94,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 163 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_mn_ntscpal_a2_lcd = {
+ XC3028_std_firmware_mn_ntscpal_a2_lcd_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_mn_ntscpal_a2_lcd_nogd_SEQUENCE[163] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xCC, 0x00, 0x2B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x1B, 0x19, 0xB5, 0x29, 0xAB, 0x09, 0x55, 0x44,
+ 0x05, 0x65,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x18, 0x08, 0x00, 0x00, 0x6C, 0x18, 0x16, 0x8C, 0x49,
+ 0x2A, 0xAB,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x06, 0x93, 0x28, 0x96, 0x49, 0x34, 0xC8, 0xDA, 0x5A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x01,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x09, 0x02, 0x5B, 0x6C, 0x00, 0x4B, 0x81, 0x56, 0x46,
+ 0x69, 0x0B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 163 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_mn_ntscpal_a2_lcd_nogd = {
+ XC3028_std_firmware_mn_ntscpal_a2_lcd_nogd_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_mn_ntscpal_a2_mts_SEQUENCE[171] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xCC, 0x00, 0x2B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1B,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x1B, 0x19, 0xB5, 0x29, 0xAB, 0x09, 0x55, 0x44,
+ 0x05, 0x65,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x18, 0x08, 0x00, 0x00, 0x6C, 0x18, 0x16, 0x8C, 0x49,
+ 0x2A, 0xAB,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x0D, 0x86, 0x51, 0xD2, 0x35, 0xA4, 0x92, 0xA5, 0xB5,
+ 0x25, 0x65,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x1B, 0x22, 0x4A, 0x49, 0x00, 0x38, 0xC1, 0x55, 0x66,
+ 0x12, 0x0A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x09, 0x90, 0x09, 0x06, 0x64, 0x02, 0x41,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x40,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 171 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_mn_ntscpal_a2_mts = {
+ XC3028_std_firmware_mn_ntscpal_a2_mts_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_mn_ntscpal_btsc_SEQUENCE[163] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xCC, 0x00, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x1B, 0x19, 0xB5, 0x29, 0xAB, 0x09, 0x55, 0x44,
+ 0x05, 0x65,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x18, 0x08, 0x00, 0x00, 0x6C, 0x18, 0x16, 0x8C, 0x49,
+ 0x2A, 0xAB,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x0D, 0x86, 0x51, 0xD2, 0x35, 0xA4, 0x92, 0xA5, 0xB5,
+ 0x25, 0x65,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x09, 0x02, 0x5B, 0x6C, 0x00, 0x4B, 0x81, 0x56, 0x46,
+ 0x69, 0x0B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 163 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_mn_ntscpal_btsc = {
+ XC3028_std_firmware_mn_ntscpal_btsc_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_mn_ntscpal_btsc_lcd_SEQUENCE[163] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xCC, 0x00, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x1B, 0x19, 0xB5, 0x29, 0xAB, 0x09, 0x55, 0x44,
+ 0x05, 0x65,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x18, 0x08, 0x00, 0x00, 0x6C, 0x18, 0x16, 0x8C, 0x49,
+ 0x2A, 0xAB,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x06, 0x93, 0x28, 0x96, 0x49, 0x34, 0xC8, 0xDA, 0x5A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x0D, 0x86, 0x51, 0xD2, 0x35, 0xA4, 0x92, 0xA5, 0xB5,
+ 0x25, 0x65,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x09, 0x02, 0x5B, 0x6C, 0x00, 0x4B, 0x81, 0x56, 0x46,
+ 0x69, 0x0B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 163 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_mn_ntscpal_btsc_lcd = {
+ XC3028_std_firmware_mn_ntscpal_btsc_lcd_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_mn_ntscpal_btsc_lcd_nogd_SEQUENCE[163] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xCC, 0x00, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x1B, 0x19, 0xB5, 0x29, 0xAB, 0x09, 0x55, 0x44,
+ 0x05, 0x65,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x18, 0x08, 0x00, 0x00, 0x6C, 0x18, 0x16, 0x8C, 0x49,
+ 0x2A, 0xAB,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x06, 0x93, 0x28, 0x96, 0x49, 0x34, 0xC8, 0xDA, 0x5A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x09, 0x02, 0x5B, 0x6C, 0x00, 0x4B, 0x81, 0x56, 0x46,
+ 0x69, 0x0B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 163 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_mn_ntscpal_btsc_lcd_nogd = {
+ XC3028_std_firmware_mn_ntscpal_btsc_lcd_nogd_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_mn_ntscpal_eiaj_SEQUENCE[163] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xCC, 0x00, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x1B, 0x19, 0xB5, 0x29, 0xAB, 0x09, 0x55, 0x44,
+ 0x05, 0x65,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x18, 0x08, 0x00, 0x00, 0x6C, 0x18, 0x16, 0x8C, 0x49,
+ 0x2A, 0xAB,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x0D, 0x86, 0x51, 0xD2, 0x35, 0xA4, 0x92, 0xA5, 0xB5,
+ 0x25, 0x65,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x09, 0x02, 0x5B, 0x6C, 0x00, 0x4B, 0x81, 0x56, 0x46,
+ 0x69, 0x0B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x29,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x06,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 163 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_mn_ntscpal_eiaj = {
+ XC3028_std_firmware_mn_ntscpal_eiaj_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_mn_ntscpal_mts_SEQUENCE[171] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xCC, 0x20, 0x06,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1B,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x1B, 0x19, 0xB5, 0x29, 0xAB, 0x09, 0x55, 0x44,
+ 0x05, 0x65,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x18, 0x08, 0x00, 0x00, 0x6C, 0x18, 0x16, 0x8C, 0x49,
+ 0x2A, 0xAB,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x0D, 0x86, 0x51, 0xD2, 0x35, 0xA4, 0x92, 0xA5, 0xB5,
+ 0x25, 0x65,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x09, 0x02, 0x5B, 0x6C, 0x00, 0x4B, 0x81, 0x56, 0x46,
+ 0x69, 0x0B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x32,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x0A,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x09, 0x90, 0x09, 0x06, 0x64, 0x02, 0x41,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x40,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 171 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_mn_ntscpal_mts = {
+ XC3028_std_firmware_mn_ntscpal_mts_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_mn_ntscpal_mts_lcd_SEQUENCE[171] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xCC, 0x20, 0x06,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1B,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x1B, 0x19, 0xB5, 0x29, 0xAB, 0x09, 0x55, 0x44,
+ 0x05, 0x65,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x18, 0x08, 0x00, 0x00, 0x6C, 0x18, 0x16, 0x8C, 0x49,
+ 0x2A, 0xAB,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x06, 0x93, 0x28, 0x96, 0x49, 0x34, 0xC8, 0xDA, 0x5A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x0D, 0x86, 0x51, 0xD2, 0x35, 0xA4, 0x92, 0xA5, 0xB5,
+ 0x25, 0x65,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x09, 0x02, 0x5B, 0x6C, 0x00, 0x4B, 0x81, 0x56, 0x46,
+ 0x69, 0x0B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x32,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x0A,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x09, 0x90, 0x09, 0x06, 0x64, 0x02, 0x41,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x40,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 171 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_mn_ntscpal_mts_lcd = {
+ XC3028_std_firmware_mn_ntscpal_mts_lcd_SEQUENCE
+};
+
+unsigned char XC3028_std_firmware_mn_ntscpal_mts_lcd_nogd_SEQUENCE[171] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0xCC, 0x20, 0x06,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2B, 0x1B,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x14, 0x01, 0x1B, 0x19, 0xB5, 0x29, 0xAB, 0x09, 0x55, 0x44,
+ 0x05, 0x65,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x13, 0x18, 0x08, 0x00, 0x00, 0x6C, 0x18, 0x16, 0x8C, 0x49,
+ 0x2A, 0xAB,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x0D, 0x01, 0x4B, 0x03, 0x97, 0x55, 0xC7, 0xD7, 0x00, 0xA1,
+ 0xEB, 0x8F, 0x5C,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x1A, 0x06, 0x93, 0x28, 0x96, 0x49, 0x34, 0xC8, 0xDA, 0x5A,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x2D, 0x01,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x18, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x1D, 0x00,
+ 0x00, 0x07, /* Length = 7 bytes */
+ 0x0F, 0x00, 0x29, 0x56, 0xB0, 0x00, 0xB6,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x20, 0x00,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x1E, 0x09, 0x02, 0x5B, 0x6C, 0x00, 0x4B, 0x81, 0x56, 0x46,
+ 0x69, 0x0B,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x22, 0x32,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x23, 0x0A,
+ 0x00, 0x09, /* Length = 9 bytes */
+ 0x25, 0x00, 0x09, 0x90, 0x09, 0x06, 0x64, 0x02, 0x41,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x26, 0xCC,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x29, 0x40,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x21, 0x03,
+ 0x00, 0x02, /* Length = 2 bytes */
+ 0x00, 0x8C,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 171 BYTES */
+};
+
+XC3028_I2C_SEQUENCE XC3028_std_firmware_mn_ntscpal_mts_lcd_nogd = {
+ XC3028_std_firmware_mn_ntscpal_mts_lcd_nogd_SEQUENCE
+};
+
+
+// ************************************************************
+// *** TV_MODES
+// *** These are used when calling xc3028_initialize()
+// ************************************************************
+
+XC3028_TV_MODE XC3028_tv_mode_m_n_ntsc_pal_btsc_if = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_init,
+ &XC3028_std_firmware_mn_ntscpal_btsc,
+ &XC3028_scode_table_4500000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_m_n_ntsc_pal_btsc_if_lcd = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_init,
+ &XC3028_std_firmware_mn_ntscpal_btsc_lcd,
+ &XC3028_scode_table_4500000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_m_n_ntsc_pal_btsc_if_lcd_nogd = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_init,
+ &XC3028_std_firmware_mn_ntscpal_btsc_lcd_nogd,
+ &XC3028_scode_table_4500000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_m_n_ntsc_pal_a2_if = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_init,
+ &XC3028_std_firmware_mn_ntscpal_a2,
+ &XC3028_scode_table_4600000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_m_n_ntsc_pal_a2_if_lcd = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_init,
+ &XC3028_std_firmware_mn_ntscpal_a2_lcd,
+ &XC3028_scode_table_4600000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_m_n_ntsc_pal_a2_if_lcd_nogd = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_init,
+ &XC3028_std_firmware_mn_ntscpal_a2_lcd_nogd,
+ &XC3028_scode_table_4600000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_m_n_ntsc_pal_mts = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_mts_init,
+ &XC3028_std_firmware_mn_ntscpal_mts,
+ &XC3028_scode_table_4500000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_m_n_ntsc_pal_mts_lcd = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_mts_init,
+ &XC3028_std_firmware_mn_ntscpal_mts_lcd,
+ &XC3028_scode_table_4500000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_m_n_ntsc_pal_mts_lcd_nogd = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_mts_init,
+ &XC3028_std_firmware_mn_ntscpal_mts_lcd_nogd,
+ &XC3028_scode_table_4500000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_m_n_ntsc_pal_a2_mono = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_mts_init,
+ &XC3028_std_firmware_mn_ntscpal_a2_mts,
+ &XC3028_scode_table_4320000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_m_n_ntsc_pal_a2_mono_lcd = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_mts_init,
+ &XC3028_std_firmware_mn_ntscpal_mts_lcd,
+ &XC3028_scode_table_4500000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_m_n_ntsc_pal_a2_mono_lcd_nogd = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_mts_init,
+ &XC3028_std_firmware_mn_ntscpal_mts_lcd_nogd,
+ &XC3028_scode_table_4500000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_m_n_ntsc_pal_eiaj = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_mts_init,
+ &XC3028_std_firmware_mn_ntscpal_eiaj,
+ &XC3028_scode_table_4500000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_i_pal_nicam = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_i_pal_nicam,
+ &XC3028_scode_table_6240000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_b_g_pal_a2_a = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_bg_pal_a2_a,
+ &XC3028_scode_table_5640000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_b_g_pal_nicam_a = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_bg_pal_nicam_a,
+ &XC3028_scode_table_5740000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_b_g_pal_a2_b = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_bg_pal_a2_b,
+ &XC3028_scode_table_5640000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_b_g_pal_nicam_b = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_bg_pal_nicam_b,
+ &XC3028_scode_table_5740000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_l_secam_nicam = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_l_secam_nicam,
+ &XC3028_scode_table_6000000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_lp_secam_nicam = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_lp_secam_nicam,
+ &XC3028_scode_table_6000000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_d_k_pal_a2 = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_dk_pal_a2,
+ &XC3028_scode_table_6600000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_d_k_pal_nicam = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_dk_pal_nicam,
+ &XC3028_scode_table_6000000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_d_k_secam_a2_dk1 = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_dk_secam_a2_dk1,
+ &XC3028_scode_table_6340000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_d_k_secam_a2_l_dk3 = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_dk_secam_a2_l_dk3,
+ &XC3028_scode_table_6000000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_fm_radio_input2 = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_fm_init,
+ &XC3028_std_firmware_fm,
+ 0
+};
+
+XC3028_TV_MODE XC3028_tv_mode_fm_radio_input1 = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_fm_input1_init,
+ &XC3028_std_firmware_fm,
+ 0
+};
+
+XC3028_TV_MODE XC3028_tv_mode_dtv6_atsc_lg_6_0mhz = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_init,
+ &XC3028_std_firmware_dtv6_atsc_2633,
+ &XC3028_scode_table_6200000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_dtv6_atsc_ati_6_38mhz = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_init,
+ &XC3028_std_firmware_dtv6_atsc_2633,
+ &XC3028_scode_table_6580000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_dtv6_atsc_oren_5_38mhz = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_init,
+ &XC3028_std_firmware_dtv6_atsc_2633,
+ &XC3028_scode_table_5580000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_dtv6_atsc_oren_3_6mhz = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_init,
+ &XC3028_std_firmware_dtv6_atsc_2633,
+ &XC3028_scode_table_3800000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_dtv6_atsc_toyota_3_88mhz = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_init,
+ &XC3028_std_firmware_dtv6_atsc_2633,
+ &XC3028_scode_table_4080000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_dtv6_atsc_toyota_7_94mhz = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_init,
+ &XC3028_std_firmware_dtv6_atsc_2633,
+ &XC3028_scode_table_8140000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_dtv6_qam_6_0mhz = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_init,
+ &XC3028_std_firmware_dtv6_qam_2633,
+ &XC3028_scode_table_6200000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_dtv8_dibcom_5_2mhz = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_dtv8_2633,
+ &XC3028_scode_table_5200000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_dtv78_dibcom_5_2mhz = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_dtv78_2633,
+ &XC3028_scode_table_5200000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_dtv7_dibcom_5_2mhz = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_dtv7_2633,
+ &XC3028_scode_table_5900000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_dtv6_zarlink_qam_4_56mhz = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_init,
+ &XC3028_std_firmware_dtv6_qam_2620,
+ &XC3028_scode_table_4760000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_dtv8_zarlink_4_56mhz = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_dtv8_2620,
+ &XC3028_scode_table_4560000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_dtv78_zarlink_4_56mhz = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_dtv78_2620,
+ &XC3028_scode_table_4560000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_dtv7_zarlink_4_56mhz = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_dtv7_2620,
+ &XC3028_scode_table_5260000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_dtv8_china_temporary = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_dtv8_2633,
+ &XC3028_scode_table_5400000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_i_pal_nicam_mono = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_mts_init,
+ &XC3028_std_firmware_i_pal_nicam_mts,
+ &XC3028_scode_table_6000000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_b_g_pal_a2_a_mono = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_mts_init,
+ &XC3028_std_firmware_bg_pal_a2_a_mts,
+ &XC3028_scode_table_5320000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_b_g_pal_nicam_a_mono = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_mts_init,
+ &XC3028_std_firmware_bg_pal_nicam_a_mts,
+ &XC3028_scode_table_5320000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_b_g_pal_a2_b_mono = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_mts_init,
+ &XC3028_std_firmware_bg_pal_a2_b_mts,
+ &XC3028_scode_table_5320000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_b_g_pal_nicam_b_mono = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_mts_init,
+ &XC3028_std_firmware_bg_pal_nicam_b_mts,
+ &XC3028_scode_table_5320000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_d_k_pal_a2_mono = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_mts_init,
+ &XC3028_std_firmware_dk_pal_a2_mts,
+ &XC3028_scode_table_6680000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_d_k_pal_nicam_mono = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_mts_init,
+ &XC3028_std_firmware_dk_pal_nicam_mts,
+ &XC3028_scode_table_6500000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_d_k_secam_a2_dk1_mono = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_mts_init,
+ &XC3028_std_firmware_dk_secam_a2_dk1_mts,
+ &XC3028_scode_table_6320000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_d_k_secam_a2_l_dk3_mono = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_mts_init,
+ &XC3028_std_firmware_dk_secam_a2_l_dk3_mts,
+ &XC3028_scode_table_6500000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_dtv6_afatech_qam_4_56mhz = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_init,
+ &XC3028_std_firmware_dtv6_qam_2620,
+ &XC3028_scode_table_4760000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_dtv8_afatech_4_56mhz = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_dtv8_2620,
+ &XC3028_scode_table_4560000
+};
+
+XC3028_TV_MODE XC3028_tv_mode_dtv7_afatech_4_56mhz = {
+ &XC3028_base_firmware_i2c_files_base_firmwares_8mhz_init,
+ &XC3028_std_firmware_dtv7_2620,
+ &XC3028_scode_table_5260000
+};
+
+#endif
+
diff --git a/api/xc3028_scodes.h b/api/xc3028_scodes.h
new file mode 100644
index 0000000..431c226
--- /dev/null
+++ b/api/xc3028_scodes.h
@@ -0,0 +1,664 @@
+//
+// Automatically generated C header file for
+// control of the XC3028L via the i2c interface.
+//
+// Filename : xc3028_scodes.h
+// Generated : 7/3/2007 2:48:23 PM
+//
+// (c) 2007, Xceive Corporation
+//
+
+#ifndef __XC3028_SCODES_H
+#define __XC3028_SCODES_H
+
+#include "xc3028_control.h"
+
+XC3028_SCODE_TABLE XC3028_scode_table_5400000 = {
+ { 0x1E, 0x1A, 0x83, 0x25, 0xB4, 0x03, 0x6E, 0x01, 0x96, 0x86, 0xA8, 0x1C },
+ { 0x1E, 0x1E, 0x43, 0xBF, 0xE0, 0x02, 0xDB, 0xC1, 0xAA, 0x06, 0x9A, 0x24 },
+ { 0x1E, 0x1F, 0x13, 0x87, 0x18, 0x02, 0x93, 0x91, 0x44, 0x86, 0x96, 0x8C },
+ { 0x1E, 0x0B, 0x23, 0x76, 0x18, 0x02, 0x9B, 0x6D, 0x54, 0x46, 0x9A, 0x44 },
+ { 0x1E, 0x19, 0xD3, 0x00, 0xD8, 0x02, 0x9B, 0x91, 0x42, 0x86, 0xAA, 0x96 },
+ { 0x1E, 0x15, 0x32, 0xDB, 0x94, 0x02, 0x49, 0x25, 0x69, 0x86, 0x96, 0x5B },
+ { 0x1E, 0x1C, 0xF2, 0xE4, 0xB8, 0x02, 0x49, 0x25, 0x65, 0x86, 0x9A, 0x95 },
+ { 0x1E, 0x1D, 0xC2, 0xE4, 0xB4, 0x02, 0x5C, 0xA1, 0x5A, 0x46, 0x9A, 0x14 },
+ { 0x1E, 0x1E, 0xE2, 0x9B, 0x6E, 0x02, 0x52, 0x4D, 0xA9, 0x56, 0x65, 0x5A },
+ { 0x1E, 0x0D, 0x02, 0xB7, 0x18, 0x02, 0x4A, 0x49, 0xA8, 0x46, 0x65, 0x5A },
+ { 0x1E, 0x0B, 0xA2, 0x9C, 0xE0, 0x02, 0x49, 0x25, 0x9A, 0x06, 0x6A, 0x9D },
+ { 0x1E, 0x14, 0xD2, 0x94, 0xE0, 0x02, 0x9B, 0x6D, 0x99, 0x06, 0x5A, 0x94 },
+ { 0x1E, 0x01, 0x72, 0xDC, 0xB8, 0x02, 0x92, 0x49, 0xA9, 0x86, 0x65, 0xA3 },
+ { 0x1E, 0x0A, 0xA2, 0xED, 0x18, 0x02, 0xE4, 0x91, 0xA4, 0x86, 0x55, 0x59 },
+ { 0x1E, 0x14, 0x92, 0xDB, 0x6D, 0x83, 0x25, 0x01, 0x99, 0xA6, 0x54, 0x21 },
+ { 0x1E, 0x09, 0x93, 0x24, 0x90, 0x03, 0x6D, 0xA1, 0xA5, 0x46, 0x6A, 0x14 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_4760000 = {
+ { 0x1E, 0x1C, 0xF2, 0x4D, 0xE0, 0x00, 0x0B, 0x61, 0x66, 0x06, 0x69, 0x13 },
+ { 0x1E, 0x09, 0x62, 0x49, 0x29, 0x00, 0x00, 0x41, 0x66, 0xA6, 0x66, 0x23 },
+ { 0x1E, 0x09, 0xD2, 0x52, 0x92, 0x00, 0x02, 0x49, 0x6A, 0x96, 0x69, 0xA4 },
+ { 0x1E, 0x03, 0x72, 0x54, 0x92, 0x00, 0x00, 0x09, 0x65, 0x66, 0x6A, 0x95 },
+ { 0x1E, 0x0C, 0x72, 0x5C, 0x92, 0x00, 0x49, 0x25, 0x6A, 0x56, 0x59, 0x5A },
+ { 0x1E, 0x1B, 0xD2, 0x65, 0x00, 0x00, 0x52, 0x81, 0x68, 0x06, 0x5A, 0x13 },
+ { 0x1E, 0x0C, 0x82, 0x70, 0xD8, 0x00, 0x5B, 0x71, 0x52, 0x46, 0x65, 0x8B },
+ { 0x1E, 0x06, 0x32, 0x5B, 0x90, 0x00, 0x52, 0x4D, 0x5A, 0x86, 0x6A, 0x5C },
+ { 0x1E, 0x19, 0xE2, 0x93, 0x92, 0x02, 0x52, 0x49, 0x6A, 0x96, 0xAA, 0x65 },
+ { 0x1E, 0x07, 0x92, 0x92, 0x48, 0x02, 0x49, 0x49, 0x65, 0x86, 0xA9, 0x95 },
+ { 0x1E, 0x1C, 0x52, 0xA4, 0x92, 0x00, 0x01, 0x49, 0x69, 0x56, 0x56, 0x52 },
+ { 0x1E, 0x13, 0x72, 0xA8, 0x18, 0x00, 0x00, 0x01, 0x50, 0x86, 0x59, 0x4A },
+ { 0x1E, 0x19, 0xF2, 0x9C, 0x18, 0x00, 0x0B, 0xA1, 0x54, 0x86, 0x56, 0x0A },
+ { 0x1E, 0x11, 0x72, 0x93, 0x78, 0x00, 0x13, 0x91, 0x59, 0x46, 0x55, 0x49 },
+ { 0x1E, 0x03, 0x52, 0x92, 0x54, 0x00, 0x00, 0xC1, 0x55, 0x86, 0x42, 0x0A },
+ { 0x1E, 0x18, 0x52, 0x49, 0x2E, 0x00, 0x13, 0x81, 0x69, 0x96, 0x66, 0x1B }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_6580000 = {
+ { 0x1E, 0x1B, 0xE4, 0xDB, 0x92, 0x06, 0xE8, 0xC1, 0x66, 0x96, 0x92, 0x1B },
+ { 0x1E, 0x03, 0x14, 0xE5, 0xB8, 0x06, 0xDC, 0x91, 0x5A, 0x86, 0xAA, 0x9E },
+ { 0x1E, 0x0E, 0x44, 0x92, 0x4D, 0x84, 0x92, 0x51, 0x69, 0x66, 0x5A, 0x9C },
+ { 0x1E, 0x0A, 0xE4, 0x9B, 0x94, 0x04, 0x80, 0xC1, 0x6A, 0x46, 0x41, 0x19 },
+ { 0x1E, 0x1E, 0xD4, 0xB6, 0x18, 0x04, 0x92, 0xA1, 0x64, 0x86, 0x66, 0x13 },
+ { 0x1E, 0x13, 0x54, 0x98, 0xD8, 0x04, 0xDE, 0x01, 0x52, 0x46, 0x54, 0x09 },
+ { 0x1E, 0x03, 0xD4, 0x95, 0xD8, 0x04, 0xE5, 0xA1, 0x56, 0x86, 0x65, 0x12 },
+ { 0x1E, 0x0A, 0x02, 0x49, 0x54, 0x05, 0x38, 0xC1, 0xA9, 0x86, 0x51, 0x21 },
+ { 0x1E, 0x18, 0x84, 0x9E, 0x18, 0x09, 0x36, 0xC1, 0x98, 0x46, 0x95, 0x12 },
+ { 0x1E, 0x0B, 0xD4, 0x93, 0x74, 0x06, 0xDB, 0x6D, 0x96, 0x86, 0x56, 0x9B },
+ { 0x1E, 0x09, 0xD4, 0xE7, 0x00, 0x06, 0xC6, 0x01, 0xA4, 0x06, 0x44, 0x11 },
+ { 0x1E, 0x1C, 0x54, 0xDC, 0xB8, 0x06, 0xDB, 0x91, 0x99, 0x86, 0x69, 0x5B },
+ { 0x1E, 0x1C, 0xF5, 0x28, 0x18, 0x07, 0x20, 0xC1, 0x90, 0x46, 0x62, 0x0B },
+ { 0x1E, 0x01, 0x35, 0xBF, 0x00, 0x07, 0xB6, 0xC1, 0xA8, 0x06, 0x6A, 0x1C },
+ { 0x1E, 0x0E, 0x15, 0x6D, 0xB8, 0x07, 0x76, 0x01, 0x66, 0x86, 0xA4, 0x1B },
+ { 0x1E, 0x0A, 0x35, 0x38, 0xD8, 0x07, 0x25, 0xA1, 0x52, 0x86, 0xA6, 0x14 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_4500000 = {
+ { 0x1E, 0x09, 0x02, 0x5B, 0x6C, 0x00, 0x4B, 0x81, 0x56, 0x46, 0x69, 0x0B },
+ { 0x1E, 0x02, 0xB2, 0x54, 0xE0, 0x00, 0x92, 0x6D, 0x59, 0x06, 0x59, 0x8B },
+ { 0x1E, 0x1D, 0xC2, 0x52, 0x92, 0x00, 0xA4, 0x91, 0x56, 0x96, 0x66, 0x94 },
+ { 0x1E, 0x19, 0x42, 0x49, 0x54, 0x00, 0xDB, 0x6D, 0x59, 0x46, 0x55, 0x49 },
+ { 0x1E, 0x0F, 0x72, 0x4B, 0x6E, 0x00, 0xE4, 0x81, 0x5A, 0x56, 0x6A, 0x14 },
+ { 0x1E, 0x1D, 0xE2, 0x4B, 0xB4, 0x01, 0x24, 0x91, 0x55, 0x86, 0x69, 0x4B },
+ { 0x1E, 0x18, 0xD2, 0x49, 0x54, 0x01, 0x6F, 0x01, 0x56, 0x46, 0x98, 0x0B },
+ { 0x1E, 0x1B, 0xA0, 0x00, 0x09, 0x00, 0xDC, 0xA1, 0xAA, 0x96, 0x96, 0x2B },
+ { 0x1E, 0x06, 0xB2, 0x4A, 0x92, 0x00, 0x12, 0x49, 0x69, 0x56, 0x6A, 0x95 },
+ { 0x1E, 0x1A, 0x02, 0x4B, 0x00, 0x00, 0x09, 0x31, 0x64, 0x06, 0x69, 0x8C },
+ { 0x1E, 0x1E, 0xB2, 0x49, 0x6E, 0x00, 0x01, 0x49, 0x65, 0x96, 0x66, 0x94 },
+ { 0x1E, 0x0C, 0xD2, 0x53, 0x18, 0x00, 0x01, 0x29, 0x68, 0x86, 0x6A, 0x9D },
+ { 0x1E, 0x0B, 0x22, 0x52, 0x6E, 0x00, 0x4A, 0x61, 0x66, 0x66, 0x55, 0x19 },
+ { 0x1E, 0x1A, 0x12, 0x5C, 0x00, 0x00, 0x52, 0x91, 0x64, 0x06, 0x56, 0x8B },
+ { 0x1E, 0x00, 0x72, 0x6D, 0xD8, 0x00, 0x6D, 0xA1, 0x66, 0x46, 0x56, 0x12 },
+ { 0x1E, 0x09, 0xE2, 0x65, 0xD8, 0x00, 0x54, 0x91, 0x56, 0x86, 0x69, 0x94 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_4600000 = {
+ { 0x1E, 0x1A, 0x82, 0x5B, 0xD8, 0x00, 0x54, 0x91, 0x66, 0x46, 0x56, 0x93 },
+ { 0x1E, 0x0E, 0x42, 0x46, 0x00, 0x00, 0x65, 0xA1, 0x44, 0x06, 0x65, 0x02 },
+ { 0x1E, 0x1D, 0x32, 0x64, 0xD8, 0x00, 0x53, 0x71, 0x56, 0x86, 0x6A, 0x54 },
+ { 0x1E, 0x09, 0x02, 0x5B, 0x6C, 0x00, 0x4B, 0x81, 0x56, 0x46, 0x69, 0x0B },
+ { 0x1E, 0x02, 0xB2, 0x54, 0xE0, 0x00, 0x92, 0x6D, 0x59, 0x06, 0x59, 0x8B },
+ { 0x1E, 0x1D, 0xC2, 0x52, 0x92, 0x00, 0xA4, 0x91, 0x56, 0x96, 0x66, 0x94 },
+ { 0x1E, 0x19, 0x42, 0x49, 0x54, 0x00, 0xDB, 0x6D, 0x59, 0x46, 0x55, 0x49 },
+ { 0x1E, 0x0F, 0x72, 0x4B, 0x6E, 0x00, 0xE4, 0x81, 0x5A, 0x56, 0x6A, 0x14 },
+ { 0x1E, 0x0C, 0x32, 0x9B, 0x80, 0x00, 0x0B, 0x91, 0x55, 0x06, 0x59, 0x42 },
+ { 0x1E, 0x1F, 0x52, 0x94, 0xD8, 0x00, 0x12, 0x6D, 0x56, 0x46, 0x5A, 0x8C },
+ { 0x1E, 0x0E, 0xC2, 0x49, 0x78, 0x00, 0x1C, 0x81, 0x6A, 0x86, 0x66, 0x23 },
+ { 0x1E, 0x0D, 0x22, 0x4A, 0x50, 0x00, 0x09, 0x61, 0x69, 0x46, 0x65, 0x12 },
+ { 0x1E, 0x01, 0xB2, 0x4A, 0x78, 0x00, 0x09, 0x25, 0x66, 0x86, 0x6A, 0x9D },
+ { 0x1E, 0x11, 0x12, 0x49, 0x4D, 0x80, 0x02, 0x6D, 0x65, 0x66, 0x65, 0x52 },
+ { 0x1E, 0x18, 0xC2, 0x55, 0xA0, 0x00, 0x00, 0x25, 0x6A, 0x06, 0x69, 0x9C },
+ { 0x1E, 0x0F, 0xE2, 0x52, 0x72, 0x00, 0x4B, 0x01, 0x65, 0xA6, 0x54, 0x19 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_4320000 = {
+ { 0x1E, 0x1B, 0x22, 0x4A, 0x49, 0x00, 0x38, 0xC1, 0x55, 0x66, 0x12, 0x0A },
+ { 0x1E, 0x0C, 0x52, 0x49, 0x29, 0x81, 0x3F, 0x01, 0x55, 0xA6, 0x98, 0x13 },
+ { 0x1E, 0x0A, 0xF0, 0x00, 0x4E, 0x00, 0xEE, 0xC1, 0xAA, 0x96, 0xA9, 0x2C },
+ { 0x1E, 0x1D, 0x90, 0x00, 0x05, 0x00, 0x92, 0x49, 0xA9, 0xA6, 0x99, 0x6B },
+ { 0x1E, 0x1D, 0x20, 0x01, 0x90, 0x00, 0xA4, 0xA1, 0xAA, 0x46, 0xA5, 0x23 },
+ { 0x1E, 0x1F, 0x90, 0x02, 0x92, 0x00, 0x92, 0x49, 0xA9, 0x96, 0xA9, 0xA5 },
+ { 0x1E, 0x15, 0x90, 0x05, 0xB4, 0x00, 0x4A, 0xC1, 0xA5, 0x46, 0x9A, 0x14 },
+ { 0x1E, 0x1C, 0xC0, 0x02, 0x52, 0x00, 0x52, 0x71, 0xA5, 0x96, 0x9A, 0x5C },
+ { 0x1E, 0x1A, 0xF2, 0x5B, 0x6C, 0x00, 0x53, 0x71, 0x65, 0x46, 0x59, 0x4A },
+ { 0x1E, 0x0E, 0x42, 0x46, 0x00, 0x00, 0x65, 0xA1, 0x44, 0x06, 0x65, 0x02 },
+ { 0x1E, 0x09, 0x72, 0x5B, 0x98, 0x00, 0x49, 0x49, 0x59, 0x86, 0x65, 0x52 },
+ { 0x1E, 0x0C, 0x22, 0x52, 0xE0, 0x00, 0x49, 0x25, 0x5A, 0x06, 0x6A, 0x54 },
+ { 0x1E, 0x0D, 0x82, 0x55, 0xB4, 0x00, 0x9C, 0xC1, 0x55, 0x46, 0x5A, 0x03 },
+ { 0x1E, 0x0A, 0x62, 0x49, 0x29, 0x00, 0x9B, 0x71, 0x5A, 0x96, 0x6A, 0x5C },
+ { 0x1E, 0x0E, 0x82, 0x4A, 0x6E, 0x00, 0xED, 0xC1, 0x5A, 0x96, 0x55, 0x19 },
+ { 0x1E, 0x1B, 0x92, 0x4D, 0x18, 0x01, 0x36, 0xC1, 0x54, 0x46, 0x59, 0x02 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_6240000 = {
+ { 0x1E, 0x1B, 0x22, 0x4A, 0x4C, 0x05, 0x2F, 0x01, 0xAA, 0x86, 0x68, 0x2B },
+ { 0x1E, 0x01, 0xF2, 0x4A, 0x6E, 0x04, 0x30, 0xC1, 0xA6, 0x56, 0x11, 0x19 },
+ { 0x1E, 0x0C, 0x52, 0x52, 0x49, 0x85, 0x24, 0x81, 0xA9, 0x96, 0x99, 0x23 },
+ { 0x1E, 0x0D, 0x02, 0x52, 0x49, 0x84, 0xDB, 0x81, 0xA5, 0x66, 0x99, 0x1B },
+ { 0x1E, 0x02, 0x52, 0x6E, 0xC0, 0x04, 0xDD, 0xA1, 0xA9, 0x06, 0xA5, 0x1B },
+ { 0x1E, 0x06, 0x52, 0x66, 0xC0, 0x04, 0x93, 0x81, 0x96, 0x06, 0x99, 0x13 },
+ { 0x1E, 0x14, 0x32, 0x53, 0x6D, 0x84, 0xB0, 0xC1, 0x9A, 0x96, 0xA2, 0x24 },
+ { 0x1E, 0x01, 0xB2, 0x49, 0x25, 0x04, 0x94, 0x01, 0x9A, 0x96, 0xA4, 0x23 },
+ { 0x1E, 0x1E, 0x45, 0x2E, 0xD8, 0x07, 0x36, 0xC1, 0x66, 0x46, 0xA9, 0x14 },
+ { 0x1E, 0x11, 0x14, 0xDE, 0x18, 0x06, 0xE5, 0xA1, 0x64, 0x86, 0x99, 0x13 },
+ { 0x1E, 0x14, 0x74, 0xED, 0xE0, 0x06, 0xDE, 0x01, 0x56, 0x06, 0xA8, 0x0C },
+ { 0x1E, 0x12, 0x54, 0x92, 0xB4, 0x04, 0x92, 0x71, 0x6A, 0x86, 0x59, 0xA3 },
+ { 0x1E, 0x0A, 0xE4, 0x9B, 0x94, 0x04, 0x80, 0xC1, 0x6A, 0x46, 0x41, 0x19 },
+ { 0x1E, 0x1E, 0xD4, 0xB6, 0x18, 0x04, 0x92, 0xA1, 0x64, 0x86, 0x66, 0x13 },
+ { 0x1E, 0x19, 0x84, 0x9C, 0xB4, 0x04, 0xDB, 0x6D, 0x55, 0x46, 0x59, 0x42 },
+ { 0x1E, 0x18, 0xE4, 0x93, 0x92, 0x04, 0xDB, 0xA1, 0x55, 0x96, 0x65, 0x0A }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_5640000 = {
+ { 0x1E, 0x1B, 0xD2, 0x9B, 0x92, 0x02, 0x96, 0xC1, 0x96, 0x56, 0x59, 0x12 },
+ { 0x1E, 0x15, 0x32, 0x93, 0x6E, 0x02, 0xA8, 0xC1, 0x95, 0x66, 0x61, 0x12 },
+ { 0x1E, 0x0A, 0x42, 0xDC, 0x92, 0x02, 0x94, 0x91, 0xA6, 0x56, 0x65, 0x9B },
+ { 0x1E, 0x1E, 0x72, 0xC7, 0x00, 0x02, 0xEF, 0x01, 0x84, 0x06, 0x58, 0x0A },
+ { 0x1E, 0x09, 0x32, 0xDD, 0xA0, 0x03, 0x2E, 0xC1, 0x9A, 0x06, 0x55, 0x19 },
+ { 0x1E, 0x03, 0x53, 0x2D, 0xA0, 0x03, 0xB0, 0x01, 0xA6, 0x06, 0x60, 0x1A },
+ { 0x1E, 0x0A, 0xB3, 0x24, 0xB4, 0x03, 0x20, 0xC1, 0x95, 0x46, 0x92, 0x0B },
+ { 0x1E, 0x1F, 0xC3, 0x86, 0x00, 0x02, 0xE7, 0x01, 0x84, 0x06, 0x98, 0x0B },
+ { 0x1E, 0x18, 0x42, 0x5F, 0x00, 0x04, 0x9E, 0xC1, 0x98, 0x06, 0x96, 0x13 },
+ { 0x1E, 0x1D, 0xA2, 0x57, 0x18, 0x04, 0x9B, 0x6D, 0x94, 0x86, 0xA5, 0x94 },
+ { 0x1E, 0x1A, 0xA2, 0x49, 0x26, 0x02, 0x49, 0x29, 0x99, 0xA6, 0x55, 0x61 },
+ { 0x1E, 0x1D, 0x62, 0x4B, 0x6E, 0x02, 0x4A, 0xA1, 0x96, 0x56, 0x5A, 0x13 },
+ { 0x1E, 0x00, 0xB2, 0x49, 0x24, 0x82, 0x53, 0xA1, 0x95, 0xA6, 0x5A, 0x1B },
+ { 0x1E, 0x03, 0xD2, 0x93, 0xB4, 0x02, 0x6E, 0x01, 0xA5, 0x86, 0x68, 0x1B },
+ { 0x1E, 0x16, 0xD2, 0x9B, 0x6E, 0x02, 0x53, 0x01, 0xA5, 0x96, 0x68, 0x1B },
+ { 0x1E, 0x1E, 0x42, 0xAD, 0x00, 0x02, 0x4B, 0x91, 0x94, 0x06, 0x69, 0x4B }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_5740000 = {
+ { 0x1E, 0x0A, 0xE2, 0x9E, 0xD8, 0x02, 0x52, 0x41, 0xA9, 0x86, 0x66, 0x23 },
+ { 0x1E, 0x13, 0xB2, 0x86, 0xD8, 0x02, 0x4A, 0x71, 0x89, 0x86, 0x66, 0x5B },
+ { 0x1E, 0x0B, 0xA2, 0x9C, 0xE0, 0x02, 0x49, 0x25, 0x9A, 0x06, 0x6A, 0x9D },
+ { 0x1E, 0x0E, 0x82, 0x93, 0xA0, 0x02, 0x9C, 0x91, 0x99, 0x06, 0x59, 0x93 },
+ { 0x1E, 0x1C, 0xF2, 0xDB, 0x92, 0x02, 0x9B, 0x6D, 0xA9, 0x56, 0x69, 0x9C },
+ { 0x1E, 0x1C, 0x42, 0xED, 0x18, 0x02, 0xDD, 0xC1, 0xA8, 0x86, 0x5A, 0x23 },
+ { 0x1E, 0x1B, 0x32, 0xE5, 0xD8, 0x02, 0xDD, 0xA1, 0x96, 0x46, 0x65, 0x12 },
+ { 0x1E, 0x1C, 0x53, 0x26, 0xC0, 0x03, 0x70, 0xC1, 0xAA, 0x06, 0x52, 0x22 },
+ { 0x1E, 0x0F, 0xF2, 0x52, 0x49, 0x04, 0xDC, 0x81, 0xA6, 0x56, 0x95, 0x1A },
+ { 0x1E, 0x0A, 0x12, 0x65, 0xD8, 0x04, 0xDB, 0x6D, 0xA5, 0x46, 0xA5, 0x53 },
+ { 0x1E, 0x06, 0x52, 0x66, 0xC0, 0x04, 0x93, 0x81, 0x96, 0x06, 0x99, 0x13 },
+ { 0x1E, 0x0F, 0x22, 0x53, 0x6C, 0x04, 0xA4, 0x91, 0x99, 0x86, 0xA5, 0x5B },
+ { 0x1E, 0x0B, 0x22, 0x49, 0x49, 0x04, 0x94, 0xA1, 0x9A, 0xA6, 0xA9, 0x2C },
+ { 0x1E, 0x18, 0xF2, 0x4D, 0x00, 0x02, 0x4B, 0xA1, 0x94, 0x06, 0x5A, 0x0B },
+ { 0x1E, 0x1E, 0x72, 0x49, 0xB4, 0x02, 0x56, 0xC1, 0x95, 0x86, 0x56, 0x12 },
+ { 0x1E, 0x1C, 0x12, 0x95, 0x18, 0x02, 0x6D, 0xC1, 0xA8, 0x46, 0x55, 0x19 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_6000000 = {
+ { 0x1E, 0x18, 0x42, 0x5F, 0x00, 0x04, 0x9E, 0xC1, 0x98, 0x06, 0x96, 0x13 },
+ { 0x1E, 0x1D, 0xA2, 0x57, 0x18, 0x04, 0x9B, 0x6D, 0x94, 0x86, 0xA5, 0x94 },
+ { 0x1E, 0x16, 0xF2, 0x49, 0x72, 0x04, 0x92, 0xA1, 0x99, 0x66, 0xAA, 0x1D },
+ { 0x1E, 0x18, 0xF2, 0x4D, 0x00, 0x02, 0x4B, 0xA1, 0x94, 0x06, 0x5A, 0x0B },
+ { 0x1E, 0x1E, 0x72, 0x49, 0xB4, 0x02, 0x56, 0xC1, 0x95, 0x86, 0x56, 0x12 },
+ { 0x1E, 0x09, 0x22, 0x94, 0x98, 0x02, 0x46, 0x01, 0xA6, 0x46, 0x44, 0x19 },
+ { 0x1E, 0x0A, 0xE2, 0x9E, 0xD8, 0x02, 0x52, 0x41, 0xA9, 0x86, 0x66, 0x23 },
+ { 0x1E, 0x0D, 0x02, 0xB7, 0x18, 0x02, 0x4A, 0x49, 0xA8, 0x46, 0x65, 0x5A },
+ { 0x1E, 0x1E, 0xD4, 0xB6, 0x18, 0x04, 0x92, 0xA1, 0x64, 0x86, 0x66, 0x13 },
+ { 0x1E, 0x19, 0x84, 0x9C, 0xB4, 0x04, 0xDB, 0x6D, 0x55, 0x46, 0x59, 0x42 },
+ { 0x1E, 0x18, 0xE4, 0x93, 0x92, 0x04, 0xDB, 0xA1, 0x55, 0x96, 0x65, 0x0A },
+ { 0x1E, 0x0C, 0x42, 0x4A, 0x80, 0x05, 0x25, 0xC1, 0xAA, 0x06, 0x65, 0x22 },
+ { 0x1E, 0x07, 0x72, 0x4A, 0x49, 0x85, 0xFF, 0x01, 0xA5, 0x56, 0x94, 0x12 },
+ { 0x1E, 0x0A, 0xB2, 0x53, 0x92, 0x05, 0x2E, 0x01, 0xAA, 0x66, 0x98, 0x2B },
+ { 0x1E, 0x1C, 0x32, 0x5C, 0x92, 0x04, 0xE4, 0x91, 0xA9, 0xA6, 0x99, 0xAC },
+ { 0x1E, 0x12, 0xD2, 0x7F, 0xE0, 0x04, 0xDB, 0x81, 0xA6, 0x06, 0xAA, 0x1D }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_6600000 = {
+ { 0x1E, 0x0A, 0x84, 0xDB, 0xD8, 0x06, 0xDB, 0x91, 0x6A, 0x46, 0x99, 0x9C },
+ { 0x1E, 0x08, 0xB4, 0xF8, 0x00, 0x06, 0xDB, 0xC1, 0x50, 0x06, 0xA5, 0x03 },
+ { 0x1E, 0x09, 0x04, 0xDC, 0x80, 0x04, 0x95, 0xA1, 0x55, 0x06, 0x59, 0x02 },
+ { 0x1E, 0x1D, 0x84, 0x93, 0x18, 0x04, 0xA4, 0xA1, 0x64, 0x86, 0x56, 0x12 },
+ { 0x1E, 0x00, 0x54, 0xA5, 0xC0, 0x04, 0x9D, 0x01, 0x66, 0x06, 0x68, 0x13 },
+ { 0x1E, 0x1A, 0x74, 0xA6, 0x18, 0x04, 0x92, 0x49, 0x54, 0x46, 0x69, 0x43 },
+ { 0x1E, 0x19, 0x34, 0x92, 0x60, 0x04, 0xE8, 0xC1, 0x59, 0x06, 0x51, 0x09 },
+ { 0x1E, 0x0A, 0x54, 0x92, 0x4E, 0x04, 0xDB, 0x01, 0x55, 0x56, 0x68, 0x03 },
+ { 0x1E, 0x02, 0x94, 0xA4, 0xD8, 0x09, 0x24, 0xC1, 0x9A, 0x46, 0x95, 0x1A },
+ { 0x1E, 0x06, 0x54, 0x93, 0x6C, 0x09, 0x25, 0xC1, 0x9A, 0x46, 0xA5, 0x1B },
+ { 0x1E, 0x1B, 0xB4, 0xDD, 0xD8, 0x06, 0xE5, 0xC1, 0xA6, 0x46, 0x5A, 0x1B },
+ { 0x1E, 0x10, 0x74, 0xE7, 0x18, 0x06, 0xDC, 0x91, 0x98, 0x86, 0x65, 0x5A },
+ { 0x1E, 0x15, 0x75, 0x2F, 0xE0, 0x07, 0x06, 0xC1, 0xA5, 0x06, 0x4A, 0x13 },
+ { 0x1E, 0x12, 0xD5, 0x46, 0x18, 0x07, 0x6E, 0xC1, 0x88, 0x86, 0x65, 0x1A },
+ { 0x1E, 0x1D, 0x05, 0xF8, 0xD8, 0x07, 0xB6, 0xC1, 0x51, 0x86, 0xA5, 0x0B },
+ { 0x1E, 0x04, 0xD5, 0x25, 0xB8, 0x07, 0x36, 0xC1, 0x66, 0x46, 0x99, 0x13 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_6340000 = {
+ { 0x1E, 0x13, 0x54, 0x98, 0xD8, 0x04, 0xDE, 0x01, 0x52, 0x46, 0x54, 0x09 },
+ { 0x1E, 0x18, 0xE4, 0x93, 0x92, 0x04, 0xDB, 0xA1, 0x55, 0x96, 0x65, 0x0A },
+ { 0x1E, 0x02, 0x92, 0x49, 0x2C, 0x05, 0x30, 0xC1, 0xA9, 0x46, 0x62, 0x1B },
+ { 0x1E, 0x1A, 0x82, 0x4B, 0x72, 0x05, 0xB6, 0xC1, 0xA5, 0xA6, 0x69, 0x23 },
+ { 0x1E, 0x10, 0xD2, 0x52, 0x4E, 0x05, 0x6E, 0xC1, 0xAA, 0x66, 0xA9, 0x2C },
+ { 0x1E, 0x0F, 0xF2, 0x52, 0x49, 0x04, 0xDC, 0x81, 0xA6, 0x56, 0x95, 0x1A },
+ { 0x1E, 0x1B, 0xE2, 0x67, 0x18, 0x04, 0xE6, 0x01, 0xA8, 0x86, 0xA8, 0x24 },
+ { 0x1E, 0x06, 0x52, 0x66, 0xC0, 0x04, 0x93, 0x81, 0x96, 0x06, 0x99, 0x13 },
+ { 0x1E, 0x1A, 0x05, 0x76, 0xC0, 0x07, 0xB6, 0x01, 0x99, 0x06, 0x54, 0x11 },
+ { 0x1E, 0x0B, 0x15, 0x86, 0x00, 0x07, 0x68, 0xC1, 0x48, 0x06, 0x91, 0x0A },
+ { 0x1E, 0x1E, 0x45, 0x2E, 0xD8, 0x07, 0x36, 0xC1, 0x66, 0x46, 0xA9, 0x14 },
+ { 0x1E, 0x11, 0x14, 0xDE, 0x18, 0x06, 0xE5, 0xA1, 0x64, 0x86, 0x99, 0x13 },
+ { 0x1E, 0x1F, 0xE4, 0xED, 0xB8, 0x06, 0xDC, 0x81, 0x59, 0x86, 0xA6, 0x14 },
+ { 0x1E, 0x12, 0x54, 0x92, 0xB4, 0x04, 0x92, 0x71, 0x6A, 0x86, 0x59, 0xA3 },
+ { 0x1E, 0x0A, 0xE4, 0x9B, 0x94, 0x04, 0x80, 0xC1, 0x6A, 0x46, 0x41, 0x19 },
+ { 0x1E, 0x1E, 0xD4, 0xB6, 0x18, 0x04, 0x92, 0xA1, 0x64, 0x86, 0x66, 0x13 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_6200000 = {
+ { 0x1E, 0x1A, 0x82, 0x4B, 0x72, 0x05, 0xB6, 0xC1, 0xA5, 0xA6, 0x69, 0x23 },
+ { 0x1E, 0x10, 0xD2, 0x52, 0x4E, 0x05, 0x6E, 0xC1, 0xAA, 0x66, 0xA9, 0x2C },
+ { 0x1E, 0x0A, 0x62, 0x52, 0x98, 0x04, 0xDE, 0xC1, 0xA5, 0x86, 0x99, 0x1B },
+ { 0x1E, 0x0A, 0x12, 0x65, 0xD8, 0x04, 0xDB, 0x6D, 0xA5, 0x46, 0xA5, 0x53 },
+ { 0x1E, 0x06, 0x52, 0x66, 0xC0, 0x04, 0x93, 0x81, 0x96, 0x06, 0x99, 0x13 },
+ { 0x1E, 0x1C, 0xF2, 0x52, 0x70, 0x04, 0xBF, 0x01, 0x99, 0x46, 0x98, 0x13 },
+ { 0x1E, 0x1D, 0x52, 0x52, 0x50, 0x04, 0x93, 0xA1, 0x95, 0x86, 0xA5, 0x13 },
+ { 0x1E, 0x1D, 0xB2, 0x4A, 0x90, 0x02, 0x49, 0x25, 0x99, 0x86, 0x56, 0x9B },
+ { 0x1E, 0x0A, 0x84, 0xDB, 0xD8, 0x06, 0xDB, 0x91, 0x6A, 0x46, 0x99, 0x9C },
+ { 0x1E, 0x08, 0xB4, 0xF8, 0x00, 0x06, 0xDB, 0xC1, 0x50, 0x06, 0xA5, 0x03 },
+ { 0x1E, 0x16, 0x54, 0xDB, 0x92, 0x04, 0x93, 0x61, 0x55, 0x96, 0x59, 0x0A },
+ { 0x1E, 0x0A, 0x44, 0x92, 0xD8, 0x04, 0xAD, 0xC1, 0x66, 0x86, 0x56, 0x1A },
+ { 0x1E, 0x00, 0x54, 0xA5, 0xC0, 0x04, 0x9D, 0x01, 0x66, 0x06, 0x68, 0x13 },
+ { 0x1E, 0x19, 0xD4, 0x9C, 0xE0, 0x04, 0xDB, 0x71, 0x5A, 0x06, 0x56, 0x52 },
+ { 0x1E, 0x03, 0xD4, 0x95, 0xD8, 0x04, 0xE5, 0xA1, 0x56, 0x86, 0x65, 0x12 },
+ { 0x1E, 0x02, 0x92, 0x49, 0x2C, 0x05, 0x30, 0xC1, 0xA9, 0x46, 0x62, 0x1B }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_5580000 = {
+ { 0x1E, 0x1F, 0x72, 0x92, 0x60, 0x02, 0x9B, 0x91, 0x95, 0x06, 0x65, 0x8B },
+ { 0x1E, 0x08, 0xD2, 0xE7, 0x00, 0x02, 0x92, 0x4D, 0xA8, 0x06, 0x6A, 0x9D },
+ { 0x1E, 0x06, 0x32, 0xE5, 0xB8, 0x02, 0xDB, 0x71, 0x99, 0x86, 0x65, 0x9B },
+ { 0x1E, 0x19, 0x63, 0x24, 0x80, 0x03, 0x24, 0x01, 0xAA, 0x06, 0x68, 0x23 },
+ { 0x1E, 0x04, 0x13, 0x2D, 0xB8, 0x03, 0x86, 0x01, 0x99, 0x46, 0x88, 0x13 },
+ { 0x1E, 0x1C, 0x03, 0x76, 0x18, 0x03, 0x27, 0x01, 0x98, 0x86, 0xA8, 0x1C },
+ { 0x1E, 0x10, 0x32, 0x00, 0x00, 0x02, 0xE4, 0x81, 0x00, 0x06, 0xA9, 0x04 },
+ { 0x1E, 0x0D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x81, 0x69, 0x86, 0x9A, 0x1C },
+ { 0x1E, 0x0C, 0x22, 0x52, 0x4D, 0x84, 0x92, 0x49, 0x96, 0x66, 0xA5, 0x5B },
+ { 0x1E, 0x1D, 0xB2, 0x4A, 0x90, 0x02, 0x49, 0x25, 0x99, 0x86, 0x56, 0x9B },
+ { 0x1E, 0x19, 0xA2, 0x4A, 0x98, 0x02, 0x49, 0x4D, 0x95, 0x46, 0x5A, 0x4B },
+ { 0x1E, 0x0A, 0x82, 0x92, 0x49, 0x82, 0x5E, 0x01, 0xA9, 0xA6, 0x58, 0x2A },
+ { 0x1E, 0x0B, 0x92, 0x92, 0x58, 0x02, 0x5E, 0x01, 0xA5, 0x46, 0x64, 0x12 },
+ { 0x1E, 0x08, 0x72, 0xA6, 0xD8, 0x02, 0x49, 0x29, 0xA5, 0x86, 0x65, 0x5A },
+ { 0x1E, 0x09, 0x82, 0xA4, 0xB4, 0x02, 0x49, 0x25, 0x96, 0x46, 0x69, 0x94 },
+ { 0x1E, 0x0F, 0x92, 0x93, 0x6D, 0x82, 0x9C, 0x81, 0x9A, 0xA6, 0x56, 0x2A }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_3800000 = {
+ { 0x1E, 0x1A, 0x80, 0x10, 0xD8, 0x00, 0x0A, 0x6D, 0xA2, 0x46, 0xA9, 0x9D },
+ { 0x1E, 0x0D, 0x70, 0x12, 0x18, 0x00, 0x01, 0x25, 0xA4, 0x46, 0xA5, 0x53 },
+ { 0x1E, 0x12, 0xF0, 0x1D, 0xD8, 0x00, 0x02, 0x71, 0xAA, 0x46, 0xAA, 0x65 },
+ { 0x1E, 0x09, 0xC0, 0x25, 0xE0, 0x12, 0x49, 0x49, 0xA9, 0x05, 0x55, 0x58 },
+ { 0x1E, 0x0D, 0x00, 0x2D, 0xD8, 0x12, 0x4C, 0x81, 0xAA, 0x45, 0x56, 0x21 },
+ { 0x1E, 0x1D, 0xE0, 0x24, 0x92, 0x12, 0x5D, 0xA1, 0x9A, 0x55, 0x56, 0x19 },
+ { 0x1E, 0x08, 0xB0, 0x1B, 0xB8, 0x12, 0x5B, 0x91, 0x9A, 0x45, 0x65, 0x59 },
+ { 0x1E, 0x1A, 0xA0, 0x1F, 0xE0, 0x12, 0x56, 0x01, 0x95, 0x05, 0x68, 0x0A },
+ { 0x1E, 0x16, 0x30, 0x00, 0x29, 0x00, 0x49, 0x49, 0xA6, 0x56, 0xA6, 0x5C },
+ { 0x1E, 0x08, 0x20, 0x00, 0x12, 0x00, 0x00, 0x91, 0xA5, 0x56, 0x95, 0x52 },
+ { 0x1E, 0x0F, 0x30, 0x09, 0x40, 0x00, 0x02, 0x71, 0xA9, 0x06, 0x99, 0x9C },
+ { 0x1E, 0x04, 0x90, 0x0A, 0x92, 0x00, 0x00, 0x41, 0xAA, 0x56, 0x99, 0x23 },
+ { 0x1E, 0x1A, 0xF0, 0x08, 0xD8, 0x00, 0x0D, 0x01, 0xA1, 0x46, 0x98, 0x13 },
+ { 0x1E, 0x0A, 0x30, 0x0A, 0xB8, 0x00, 0x13, 0x71, 0xA5, 0x46, 0x99, 0x53 },
+ { 0x1E, 0x05, 0x30, 0x09, 0x6D, 0x80, 0x24, 0xC1, 0xA5, 0xA6, 0xA6, 0x24 },
+ { 0x1E, 0x0D, 0xE0, 0x12, 0xA0, 0x00, 0x13, 0xC1, 0xAA, 0x06, 0xAA, 0x25 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_4080000 = {
+ { 0x1E, 0x1E, 0x40, 0x01, 0x6E, 0x00, 0x6D, 0xC1, 0xA5, 0x66, 0xAA, 0x1D },
+ { 0x1E, 0x04, 0xF0, 0x00, 0x00, 0x80, 0x52, 0x51, 0xA6, 0x66, 0xA9, 0xA5 },
+ { 0x1E, 0x17, 0x30, 0x00, 0x4E, 0x00, 0x4A, 0x01, 0xA6, 0x66, 0xA4, 0x23 },
+ { 0x1E, 0x08, 0x20, 0x00, 0x12, 0x00, 0x00, 0x91, 0xA5, 0x56, 0x95, 0x52 },
+ { 0x1E, 0x0E, 0x30, 0x09, 0x29, 0x00, 0x01, 0x49, 0xA9, 0x96, 0x99, 0x63 },
+ { 0x1E, 0x13, 0xD0, 0x0B, 0x6D, 0x80, 0x00, 0x01, 0xAA, 0xA6, 0x9A, 0xB5 },
+ { 0x1E, 0x0D, 0x40, 0x0B, 0x78, 0x00, 0x09, 0x29, 0xA6, 0x86, 0x99, 0xA4 },
+ { 0x1E, 0x02, 0x10, 0x0A, 0x4E, 0x00, 0x1B, 0x71, 0xA5, 0x66, 0x95, 0x5A },
+ { 0x1E, 0x1D, 0xE2, 0x4B, 0xB4, 0x01, 0x24, 0x91, 0x55, 0x86, 0x69, 0x4B },
+ { 0x1E, 0x18, 0xD2, 0x49, 0x54, 0x01, 0x6F, 0x01, 0x56, 0x46, 0x98, 0x0B },
+ { 0x1E, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xE0, 0xC1, 0xAA, 0x56, 0x92, 0x23 },
+ { 0x1E, 0x09, 0x10, 0x00, 0x2E, 0x00, 0x92, 0x41, 0xA9, 0xA6, 0x96, 0x2B },
+ { 0x1E, 0x0C, 0xE0, 0x01, 0x29, 0x00, 0xAD, 0xC1, 0xAA, 0x56, 0x95, 0x22 },
+ { 0x1E, 0x01, 0x70, 0x02, 0x50, 0x00, 0x93, 0x61, 0xAA, 0x86, 0xA6, 0x2C },
+ { 0x1E, 0x1F, 0x20, 0x07, 0xE0, 0x00, 0x4C, 0x01, 0xAA, 0x06, 0x98, 0x23 },
+ { 0x1E, 0x06, 0xD0, 0x02, 0x80, 0x00, 0x53, 0x81, 0xA5, 0x06, 0x99, 0x13 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_8140000 = {
+ { 0x1E, 0x13, 0x9B, 0x86, 0xE0, 0x01, 0xF8, 0xC2, 0x49, 0x04, 0x92, 0x12 },
+ { 0x1E, 0x0E, 0x4C, 0x00, 0xD8, 0x00, 0x38, 0x02, 0x02, 0x84, 0x20, 0x19 },
+ { 0x1E, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x04, 0x02, 0x01 },
+ { 0x1E, 0x17, 0xBD, 0xB0, 0xD8, 0x00, 0x06, 0xC1, 0x91, 0x44, 0x0A, 0x0A },
+ { 0x1E, 0x1D, 0x0D, 0x87, 0x18, 0x00, 0x36, 0xC1, 0x44, 0x84, 0x26, 0x0A },
+ { 0x1E, 0x0B, 0x2A, 0x06, 0xD8, 0x01, 0xC0, 0x01, 0x06, 0x84, 0x80, 0x11 },
+ { 0x1E, 0x02, 0x59, 0x25, 0xD8, 0x01, 0x86, 0xC1, 0xAA, 0x44, 0x85, 0x21 },
+ { 0x1E, 0x15, 0x99, 0x6E, 0xC0, 0x0F, 0xC6, 0x01, 0xA6, 0x06, 0x44, 0x19 },
+ { 0x1E, 0x08, 0xC7, 0x6D, 0xB4, 0x0B, 0xB0, 0xC2, 0x96, 0x86, 0x92, 0x23 },
+ { 0x1E, 0x1A, 0x87, 0x7F, 0x18, 0x0B, 0xBF, 0x02, 0x64, 0x46, 0x64, 0x12 },
+ { 0x1E, 0x00, 0xF7, 0x24, 0xE0, 0x0B, 0x6D, 0xC2, 0x56, 0x06, 0x59, 0x12 },
+ { 0x1E, 0x05, 0x76, 0xE6, 0xC0, 0x0C, 0x36, 0xC2, 0x5A, 0x06, 0x25, 0x1A },
+ { 0x1E, 0x0D, 0x19, 0x3F, 0x18, 0x0D, 0x86, 0xC2, 0x94, 0x46, 0x4A, 0x13 },
+ { 0x1E, 0x0E, 0x19, 0xC6, 0xE0, 0x0E, 0x38, 0xC2, 0x8A, 0x06, 0x22, 0x23 },
+ { 0x1E, 0x19, 0xE9, 0x6D, 0xB4, 0x0F, 0xFF, 0x02, 0x56, 0x46, 0x58, 0x12 },
+ { 0x1E, 0x0A, 0x8B, 0x46, 0xD8, 0x01, 0xB6, 0xC2, 0x89, 0x84, 0x99, 0x22 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_5900000 = {
+ { 0x1E, 0x1D, 0x02, 0x49, 0x24, 0x82, 0x49, 0x49, 0x99, 0x66, 0x55, 0x9A },
+ { 0x1E, 0x12, 0x92, 0x4A, 0x4E, 0x02, 0x49, 0x25, 0x96, 0x96, 0x59, 0x9B },
+ { 0x1E, 0x0D, 0x42, 0x92, 0x54, 0x02, 0x52, 0x51, 0xAA, 0x86, 0x5A, 0xAC },
+ { 0x1E, 0x03, 0xD2, 0x93, 0xB4, 0x02, 0x6E, 0x01, 0xA5, 0x86, 0x68, 0x1B },
+ { 0x1E, 0x16, 0xD2, 0x9B, 0x6E, 0x02, 0x53, 0x01, 0xA5, 0x96, 0x68, 0x1B },
+ { 0x1E, 0x1A, 0x62, 0xAE, 0x18, 0x02, 0x4E, 0xC1, 0x98, 0x86, 0x69, 0x1B },
+ { 0x1E, 0x01, 0x12, 0x9D, 0xC0, 0x02, 0x93, 0x71, 0x96, 0x06, 0x55, 0x51 },
+ { 0x1E, 0x18, 0xA2, 0x94, 0xB8, 0x02, 0xAD, 0xC1, 0x96, 0x46, 0x59, 0x12 },
+ { 0x1E, 0x0D, 0xD4, 0x92, 0x6C, 0x04, 0xDD, 0x01, 0x56, 0x86, 0x64, 0x12 },
+ { 0x1E, 0x07, 0x12, 0x4A, 0x4A, 0x05, 0x24, 0xA1, 0xA9, 0xA6, 0x69, 0x2B },
+ { 0x1E, 0x09, 0x62, 0x49, 0x2D, 0x85, 0xC6, 0x01, 0xA6, 0xA6, 0x88, 0x2B },
+ { 0x1E, 0x1C, 0xD2, 0x55, 0xA0, 0x05, 0x30, 0xC1, 0xA9, 0x06, 0xA2, 0x1C },
+ { 0x1E, 0x14, 0x72, 0x5F, 0x18, 0x04, 0xEE, 0xC1, 0xA4, 0x86, 0x9A, 0x1C },
+ { 0x1E, 0x1B, 0x92, 0x6D, 0xB4, 0x04, 0x92, 0x51, 0x9A, 0x86, 0x96, 0xA4 },
+ { 0x1E, 0x18, 0x42, 0x5F, 0x00, 0x04, 0x9E, 0xC1, 0x98, 0x06, 0x96, 0x13 },
+ { 0x1E, 0x0E, 0xD2, 0x53, 0xC0, 0x04, 0x9C, 0xC1, 0x95, 0x06, 0xA9, 0x0C }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_5260000 = {
+ { 0x1E, 0x04, 0x93, 0x24, 0x92, 0x02, 0xAD, 0x01, 0x66, 0xA6, 0xA8, 0x24 },
+ { 0x1E, 0x0F, 0x63, 0x25, 0xD8, 0x02, 0x92, 0x51, 0x59, 0x86, 0xA9, 0x95 },
+ { 0x1E, 0x1F, 0xA2, 0xDB, 0x6D, 0x82, 0x4A, 0xA1, 0x65, 0x96, 0x99, 0x13 },
+ { 0x1E, 0x08, 0xE2, 0xF6, 0xD8, 0x02, 0x52, 0x91, 0x59, 0x86, 0x99, 0x94 },
+ { 0x1E, 0x1E, 0x92, 0xDC, 0x98, 0x02, 0x66, 0xC1, 0x59, 0x46, 0xA9, 0x0C },
+ { 0x1E, 0x0C, 0x72, 0x92, 0x52, 0x02, 0x52, 0x4D, 0x69, 0x56, 0xA9, 0x95 },
+ { 0x1E, 0x09, 0xB2, 0x92, 0x49, 0x02, 0x4B, 0x91, 0x66, 0xA6, 0xA9, 0xA5 },
+ { 0x1E, 0x1E, 0x52, 0x9B, 0x70, 0x00, 0x01, 0x49, 0x65, 0x46, 0x55, 0x49 },
+ { 0x1E, 0x15, 0x32, 0x93, 0x6E, 0x02, 0xA8, 0xC1, 0x95, 0x66, 0x61, 0x12 },
+ { 0x1E, 0x13, 0x12, 0xDB, 0x6E, 0x02, 0x95, 0x01, 0xA6, 0x56, 0x68, 0x1B },
+ { 0x1E, 0x1A, 0xD2, 0xF6, 0x18, 0x02, 0xF8, 0xC1, 0x98, 0x86, 0x51, 0x19 },
+ { 0x1E, 0x0E, 0x52, 0xDC, 0xB4, 0x03, 0x37, 0x01, 0x96, 0x86, 0x64, 0x1A },
+ { 0x1E, 0x1D, 0x73, 0x07, 0xE0, 0x02, 0x3F, 0x01, 0x89, 0x06, 0x24, 0x12 },
+ { 0x1E, 0x1B, 0xA3, 0x40, 0xE0, 0x03, 0x2D, 0xC1, 0x82, 0x06, 0xA9, 0x14 },
+ { 0x1E, 0x10, 0x32, 0x00, 0x00, 0x02, 0xE4, 0x81, 0x00, 0x06, 0xA9, 0x04 },
+ { 0x1E, 0x0D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x81, 0x69, 0x86, 0x9A, 0x1C }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_5320000 = {
+ { 0x1E, 0x1F, 0x13, 0x87, 0x18, 0x02, 0x93, 0x91, 0x44, 0x86, 0x96, 0x8C },
+ { 0x1E, 0x0B, 0x23, 0x76, 0x18, 0x02, 0x9B, 0x6D, 0x54, 0x46, 0x9A, 0x44 },
+ { 0x1E, 0x19, 0xD3, 0x00, 0xD8, 0x02, 0x9B, 0x91, 0x42, 0x86, 0xAA, 0x96 },
+ { 0x1E, 0x09, 0x42, 0xDC, 0xE0, 0x02, 0x4A, 0x71, 0x69, 0x06, 0x95, 0x93 },
+ { 0x1E, 0x1C, 0xF2, 0xE4, 0xB8, 0x02, 0x49, 0x25, 0x65, 0x86, 0x9A, 0x95 },
+ { 0x1E, 0x0C, 0x02, 0xE7, 0xE0, 0x02, 0x65, 0x01, 0x5A, 0x06, 0x94, 0x12 },
+ { 0x1E, 0x18, 0xB2, 0xDB, 0x6E, 0x02, 0x5B, 0x81, 0x56, 0x66, 0xAA, 0x15 },
+ { 0x1E, 0x01, 0x32, 0x90, 0xD8, 0x02, 0x4A, 0x51, 0x61, 0x46, 0xA5, 0x4B },
+ { 0x1E, 0x1E, 0xA2, 0x9B, 0xE0, 0x02, 0x49, 0x6D, 0x99, 0x06, 0x6A, 0x95 },
+ { 0x1E, 0x0E, 0x82, 0x93, 0xA0, 0x02, 0x9C, 0x91, 0x99, 0x06, 0x59, 0x93 },
+ { 0x1E, 0x1C, 0xF2, 0xDB, 0x92, 0x02, 0x9B, 0x6D, 0xA9, 0x56, 0x69, 0x9C },
+ { 0x1E, 0x1C, 0x42, 0xED, 0x18, 0x02, 0xDD, 0xC1, 0xA8, 0x86, 0x5A, 0x23 },
+ { 0x1E, 0x02, 0x32, 0xE4, 0x98, 0x02, 0xDC, 0xC1, 0x95, 0x86, 0x6A, 0x14 },
+ { 0x1E, 0x09, 0x93, 0x24, 0x90, 0x03, 0x6D, 0xA1, 0xA5, 0x46, 0x6A, 0x14 },
+ { 0x1E, 0x1A, 0x83, 0x25, 0xB4, 0x03, 0x6E, 0x01, 0x96, 0x86, 0xA8, 0x1C },
+ { 0x1E, 0x1E, 0x43, 0xBF, 0xE0, 0x02, 0xDB, 0xC1, 0xAA, 0x06, 0x9A, 0x24 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_6680000 = {
+ { 0x1E, 0x0E, 0x15, 0x6D, 0xB8, 0x07, 0x76, 0x01, 0x66, 0x86, 0xA4, 0x1B },
+ { 0x1E, 0x0A, 0x35, 0x38, 0xD8, 0x07, 0x25, 0xA1, 0x52, 0x86, 0xA6, 0x14 },
+ { 0x1E, 0x1B, 0xE4, 0xDB, 0x92, 0x06, 0xE8, 0xC1, 0x66, 0x96, 0x92, 0x1B },
+ { 0x1E, 0x03, 0x14, 0xE5, 0xB8, 0x06, 0xDC, 0x91, 0x5A, 0x86, 0xAA, 0x9E },
+ { 0x1E, 0x12, 0x54, 0x92, 0xB4, 0x04, 0x92, 0x71, 0x6A, 0x86, 0x59, 0xA3 },
+ { 0x1E, 0x0A, 0xE4, 0x9B, 0x94, 0x04, 0x80, 0xC1, 0x6A, 0x46, 0x41, 0x19 },
+ { 0x1E, 0x1E, 0xD4, 0xB6, 0x18, 0x04, 0x92, 0xA1, 0x64, 0x86, 0x66, 0x13 },
+ { 0x1E, 0x19, 0xD4, 0x9C, 0xE0, 0x04, 0xDB, 0x71, 0x5A, 0x06, 0x56, 0x52 },
+ { 0x1E, 0x00, 0x94, 0x93, 0x90, 0x09, 0xC6, 0x01, 0xA6, 0x46, 0x48, 0x1A },
+ { 0x1E, 0x07, 0xF4, 0xA4, 0xB8, 0x09, 0x6E, 0xC1, 0xA6, 0x46, 0x9A, 0x1C },
+ { 0x1E, 0x18, 0x84, 0x9E, 0x18, 0x09, 0x36, 0xC1, 0x98, 0x46, 0x95, 0x12 },
+ { 0x1E, 0x1D, 0xB4, 0x93, 0x6D, 0x86, 0xDD, 0xC1, 0x95, 0x66, 0x56, 0x12 },
+ { 0x1E, 0x1A, 0x44, 0xED, 0xB8, 0x06, 0xF0, 0xC1, 0xA9, 0x46, 0x62, 0x1B },
+ { 0x1E, 0x06, 0x74, 0xDE, 0xD8, 0x07, 0x24, 0x91, 0x96, 0x46, 0x55, 0x51 },
+ { 0x1E, 0x13, 0xB5, 0x24, 0x18, 0x07, 0x24, 0x01, 0x98, 0x46, 0x68, 0x13 },
+ { 0x1E, 0x0B, 0xF5, 0xB6, 0xD8, 0x06, 0x36, 0xC1, 0x9A, 0x86, 0x15, 0x21 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_6500000 = {
+ { 0x1E, 0x09, 0x04, 0xDC, 0x80, 0x04, 0x95, 0xA1, 0x55, 0x06, 0x59, 0x02 },
+ { 0x1E, 0x09, 0xF4, 0x93, 0x72, 0x04, 0xA7, 0x01, 0x65, 0x66, 0x54, 0x11 },
+ { 0x1E, 0x00, 0x54, 0xA5, 0xC0, 0x04, 0x9D, 0x01, 0x66, 0x06, 0x68, 0x13 },
+ { 0x1E, 0x0E, 0xB4, 0xA4, 0x00, 0x04, 0x92, 0x81, 0x54, 0x06, 0x69, 0x03 },
+ { 0x1E, 0x04, 0x74, 0x93, 0x6C, 0x04, 0xF8, 0x01, 0x5A, 0x46, 0x50, 0x11 },
+ { 0x1E, 0x0D, 0x32, 0x49, 0x2C, 0x05, 0x25, 0xA1, 0xAA, 0x46, 0x55, 0x21 },
+ { 0x1E, 0x17, 0x92, 0x4D, 0xB8, 0x05, 0x70, 0xC1, 0xA9, 0x86, 0x62, 0x23 },
+ { 0x1E, 0x03, 0x92, 0x49, 0x52, 0x05, 0x80, 0xC1, 0xA6, 0x66, 0x82, 0x23 },
+ { 0x1E, 0x02, 0x54, 0xDE, 0x18, 0x06, 0xE0, 0xC1, 0xA8, 0x86, 0x51, 0x21 },
+ { 0x1E, 0x1D, 0xC4, 0xED, 0xD8, 0x06, 0xE5, 0x01, 0x9A, 0x86, 0x68, 0x23 },
+ { 0x1E, 0x1F, 0x95, 0x24, 0xB8, 0x07, 0x36, 0xC1, 0xA5, 0x86, 0x5A, 0x1B },
+ { 0x1E, 0x12, 0xD5, 0x46, 0x18, 0x07, 0x6E, 0xC1, 0x88, 0x86, 0x65, 0x1A },
+ { 0x1E, 0x06, 0x95, 0xFF, 0x00, 0x07, 0x86, 0x01, 0x64, 0x06, 0x84, 0x0A },
+ { 0x1E, 0x04, 0xD5, 0x25, 0xB8, 0x07, 0x36, 0xC1, 0x66, 0x46, 0x99, 0x13 },
+ { 0x1E, 0x0A, 0x84, 0xDB, 0xD8, 0x06, 0xDB, 0x91, 0x6A, 0x46, 0x99, 0x9C },
+ { 0x1E, 0x08, 0xB4, 0xF8, 0x00, 0x06, 0xDB, 0xC1, 0x50, 0x06, 0xA5, 0x03 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_6320000 = {
+ { 0x1E, 0x1E, 0x44, 0x92, 0x90, 0x04, 0xE4, 0x91, 0x5A, 0x86, 0x59, 0x9B },
+ { 0x1E, 0x0A, 0x54, 0x92, 0x4E, 0x04, 0xDB, 0x01, 0x55, 0x56, 0x68, 0x03 },
+ { 0x1E, 0x18, 0x92, 0x4B, 0x98, 0x05, 0x70, 0x01, 0xA9, 0x86, 0x50, 0x21 },
+ { 0x1E, 0x09, 0x62, 0x49, 0x2D, 0x85, 0xC6, 0x01, 0xA6, 0xA6, 0x88, 0x2B },
+ { 0x1E, 0x19, 0xE2, 0x54, 0xE0, 0x05, 0x00, 0xC1, 0xAA, 0x06, 0x82, 0x23 },
+ { 0x1E, 0x1C, 0x32, 0x5C, 0x92, 0x04, 0xE4, 0x91, 0xA9, 0xA6, 0x99, 0xAC },
+ { 0x1E, 0x12, 0xD2, 0x7F, 0xE0, 0x04, 0xDB, 0x81, 0xA6, 0x06, 0xAA, 0x1D },
+ { 0x1E, 0x18, 0x42, 0x5F, 0x00, 0x04, 0x9E, 0xC1, 0x98, 0x06, 0x96, 0x13 },
+ { 0x1E, 0x0B, 0xF5, 0xB6, 0xD8, 0x06, 0x36, 0xC1, 0x9A, 0x86, 0x15, 0x21 },
+ { 0x1E, 0x0E, 0x15, 0x6D, 0xB8, 0x07, 0x76, 0x01, 0x66, 0x86, 0xA4, 0x1B },
+ { 0x1E, 0x01, 0xD5, 0x28, 0xD8, 0x07, 0x24, 0x91, 0x52, 0x46, 0xAA, 0x8E },
+ { 0x1E, 0x19, 0xC4, 0xE5, 0x18, 0x06, 0xC0, 0xC1, 0x68, 0x86, 0x82, 0x1B },
+ { 0x1E, 0x1E, 0x14, 0xDB, 0x94, 0x04, 0x92, 0x49, 0x59, 0x46, 0x56, 0x4A },
+ { 0x1E, 0x06, 0x34, 0x90, 0xD8, 0x04, 0x9C, 0x81, 0x61, 0x86, 0x59, 0x12 },
+ { 0x1E, 0x0E, 0xA4, 0x9B, 0x72, 0x04, 0xA4, 0x81, 0x66, 0x66, 0x69, 0x1B },
+ { 0x1E, 0x1B, 0x64, 0xAF, 0xE0, 0x04, 0x97, 0x01, 0x56, 0x06, 0x64, 0x0A }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_4940000 = {
+ { 0x1E, 0x0A, 0x22, 0xA4, 0x92, 0x00, 0x00, 0x01, 0x5A, 0x96, 0x59, 0x9B },
+ { 0x1E, 0x19, 0xF2, 0x9C, 0x18, 0x00, 0x0B, 0xA1, 0x54, 0x86, 0x56, 0x0A },
+ { 0x1E, 0x0C, 0xA2, 0x94, 0x92, 0x00, 0x17, 0x01, 0x59, 0x66, 0x54, 0x11 },
+ { 0x1E, 0x03, 0x52, 0x92, 0x54, 0x00, 0x00, 0xC1, 0x55, 0x86, 0x42, 0x0A },
+ { 0x1E, 0x18, 0x52, 0x49, 0x2E, 0x00, 0x13, 0x81, 0x69, 0x96, 0x66, 0x1B },
+ { 0x1E, 0x1C, 0xF2, 0x4D, 0xE0, 0x00, 0x0B, 0x61, 0x66, 0x06, 0x69, 0x13 },
+ { 0x1E, 0x09, 0x62, 0x49, 0x29, 0x00, 0x00, 0x41, 0x66, 0xA6, 0x66, 0x23 },
+ { 0x1E, 0x1A, 0xE2, 0x52, 0x4A, 0x00, 0x06, 0xC1, 0x6A, 0xA6, 0x6A, 0x2C },
+ { 0x1E, 0x1E, 0x63, 0x2D, 0xB4, 0x02, 0xA4, 0x91, 0x69, 0x86, 0xA9, 0x5C },
+ { 0x1E, 0x19, 0x73, 0x20, 0xD8, 0x02, 0x92, 0x91, 0x51, 0x86, 0xAA, 0x8E },
+ { 0x1E, 0x19, 0x12, 0xE4, 0xC0, 0x02, 0x49, 0x25, 0x69, 0x06, 0x99, 0x53 },
+ { 0x1E, 0x1D, 0xC2, 0xE4, 0xB4, 0x02, 0x5C, 0xA1, 0x5A, 0x46, 0x9A, 0x14 },
+ { 0x1E, 0x18, 0xB2, 0xDB, 0x6E, 0x02, 0x5B, 0x81, 0x56, 0x66, 0xAA, 0x15 },
+ { 0x1E, 0x01, 0x32, 0x90, 0xD8, 0x02, 0x4A, 0x51, 0x61, 0x46, 0xA5, 0x4B },
+ { 0x1E, 0x14, 0x32, 0x9B, 0x6D, 0x80, 0x00, 0x09, 0x69, 0x96, 0x55, 0x59 },
+ { 0x1E, 0x17, 0x72, 0xA4, 0xB8, 0x00, 0x03, 0x6D, 0x65, 0x86, 0x55, 0x92 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_4200000 = {
+ { 0x1E, 0x0A, 0x80, 0x01, 0x4D, 0x80, 0x86, 0xC1, 0xAA, 0x66, 0x89, 0x2B },
+ { 0x1E, 0x0D, 0xE0, 0x02, 0x78, 0x00, 0x95, 0x01, 0xAA, 0x86, 0xA8, 0x2C },
+ { 0x1E, 0x1F, 0x20, 0x07, 0xE0, 0x00, 0x4C, 0x01, 0xAA, 0x06, 0x98, 0x23 },
+ { 0x1E, 0x06, 0xD0, 0x02, 0x80, 0x00, 0x53, 0x81, 0xA5, 0x06, 0x99, 0x13 },
+ { 0x1E, 0x1E, 0x40, 0x01, 0x6E, 0x00, 0x6D, 0xC1, 0xA5, 0x66, 0xAA, 0x1D },
+ { 0x1E, 0x04, 0xF0, 0x00, 0x00, 0x80, 0x52, 0x51, 0xA6, 0x66, 0xA9, 0xA5 },
+ { 0x1E, 0x17, 0x30, 0x00, 0x4E, 0x00, 0x4A, 0x01, 0xA6, 0x66, 0xA4, 0x23 },
+ { 0x1E, 0x08, 0x20, 0x00, 0x12, 0x00, 0x00, 0x91, 0xA5, 0x56, 0x95, 0x52 },
+ { 0x1E, 0x02, 0xB2, 0x54, 0xE0, 0x00, 0x92, 0x6D, 0x59, 0x06, 0x59, 0x8B },
+ { 0x1E, 0x1F, 0x92, 0x52, 0x74, 0x00, 0x9B, 0xA1, 0x55, 0x86, 0x65, 0x0A },
+ { 0x1E, 0x1C, 0x72, 0x49, 0x2E, 0x00, 0xDE, 0xC1, 0x59, 0x96, 0x5A, 0x13 },
+ { 0x1E, 0x10, 0xB2, 0x4B, 0x72, 0x00, 0xDD, 0xC1, 0x59, 0x56, 0x69, 0x0B },
+ { 0x1E, 0x1E, 0xD2, 0x4A, 0x6C, 0x01, 0x68, 0xC1, 0x56, 0x46, 0x62, 0x0B },
+ { 0x1E, 0x1D, 0xF2, 0x49, 0x58, 0x01, 0x24, 0x01, 0x55, 0x86, 0x98, 0x0B },
+ { 0x1E, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xE0, 0xC1, 0xAA, 0x56, 0x92, 0x23 },
+ { 0x1E, 0x15, 0x70, 0x00, 0x24, 0x80, 0x90, 0xC1, 0xA9, 0x56, 0x91, 0x1A }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_3280000 = {
+ { 0x1E, 0x0E, 0x40, 0x00, 0x00, 0x92, 0x4A, 0x6D, 0x99, 0xA5, 0x9A, 0xA4 },
+ { 0x1E, 0x19, 0xB0, 0x01, 0x24, 0x92, 0x53, 0xC1, 0x9A, 0xA5, 0x9A, 0x2B },
+ { 0x1E, 0x04, 0xF0, 0x01, 0x6C, 0x12, 0x6F, 0x01, 0x9A, 0x45, 0x98, 0x1A },
+ { 0x1E, 0x10, 0x50, 0x02, 0x70, 0x12, 0x49, 0x71, 0x99, 0x85, 0xA6, 0x5B },
+ { 0x1E, 0x1C, 0xE0, 0x04, 0xB4, 0x12, 0x49, 0x29, 0x9A, 0x85, 0xA9, 0x63 },
+ { 0x1E, 0x05, 0x10, 0x04, 0xD8, 0x14, 0x93, 0x91, 0x95, 0x45, 0x5A, 0x4A },
+ { 0x1E, 0x16, 0xB0, 0x02, 0x70, 0x14, 0xB8, 0x01, 0x96, 0x85, 0x50, 0x18 },
+ { 0x1E, 0x1E, 0x40, 0x01, 0x29, 0x94, 0x92, 0x49, 0x96, 0x95, 0x66, 0x5A },
+ { 0x1E, 0x11, 0x70, 0x09, 0x29, 0x12, 0xDC, 0xC1, 0x99, 0x55, 0x66, 0x12 },
+ { 0x1E, 0x02, 0x50, 0x0A, 0x49, 0x93, 0x24, 0x91, 0x99, 0xA5, 0x65, 0xA2 },
+ { 0x1E, 0x1E, 0x40, 0x0C, 0xB4, 0x12, 0x30, 0x01, 0x99, 0x45, 0x10, 0x10 },
+ { 0x1E, 0x0A, 0x80, 0x0A, 0x92, 0x12, 0xDE, 0xC1, 0x95, 0xA5, 0x99, 0x1A },
+ { 0x1E, 0x14, 0x70, 0x09, 0x24, 0x92, 0xE4, 0x91, 0x96, 0x55, 0xA9, 0x53 },
+ { 0x1E, 0x0B, 0x20, 0x09, 0x4C, 0x12, 0x93, 0x71, 0x95, 0x45, 0x99, 0x8B },
+ { 0x1E, 0x13, 0x50, 0x00, 0x30, 0x12, 0x9B, 0x71, 0x9A, 0x85, 0xAA, 0xA5 },
+ { 0x1E, 0x0D, 0x00, 0x00, 0x72, 0x12, 0x49, 0x91, 0x99, 0x95, 0x95, 0x9A }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_4000000 = {
+ { 0x1E, 0x08, 0x20, 0x00, 0x12, 0x00, 0x00, 0x91, 0xA5, 0x56, 0x95, 0x52 },
+ { 0x1E, 0x0F, 0x30, 0x09, 0x40, 0x00, 0x02, 0x71, 0xA9, 0x06, 0x99, 0x9C },
+ { 0x1E, 0x0C, 0x30, 0x0A, 0x78, 0x00, 0x00, 0x2D, 0xA9, 0x46, 0x9A, 0x5C },
+ { 0x1E, 0x12, 0xD0, 0x0D, 0xB8, 0x00, 0x0B, 0x6D, 0xA5, 0x86, 0x9A, 0x9D },
+ { 0x1E, 0x0A, 0x30, 0x0A, 0xB8, 0x00, 0x13, 0x71, 0xA5, 0x46, 0x99, 0x53 },
+ { 0x1E, 0x05, 0x30, 0x09, 0x6D, 0x80, 0x24, 0xC1, 0xA5, 0xA6, 0xA6, 0x24 },
+ { 0x1E, 0x0D, 0xE0, 0x12, 0xA0, 0x00, 0x13, 0xC1, 0xAA, 0x06, 0xAA, 0x25 },
+ { 0x1E, 0x1A, 0x80, 0x10, 0xD8, 0x00, 0x0A, 0x6D, 0xA2, 0x46, 0xA9, 0x9D },
+ { 0x1E, 0x0A, 0xF0, 0x00, 0x4E, 0x00, 0xEE, 0xC1, 0xAA, 0x96, 0xA9, 0x2C },
+ { 0x1E, 0x05, 0xB0, 0x00, 0x0D, 0x80, 0x9B, 0x71, 0xA9, 0x56, 0x95, 0x5A },
+ { 0x1E, 0x14, 0x10, 0x01, 0x24, 0x80, 0x9D, 0xA1, 0xA9, 0xA6, 0xAA, 0x2D },
+ { 0x1E, 0x1B, 0x40, 0x03, 0xA0, 0x00, 0x49, 0x25, 0xAA, 0x06, 0x96, 0x63 },
+ { 0x1E, 0x0A, 0x10, 0x03, 0x6E, 0x00, 0x52, 0x71, 0xA5, 0x56, 0x95, 0x93 },
+ { 0x1E, 0x1A, 0xD0, 0x01, 0x6D, 0x80, 0x6D, 0xC1, 0xA6, 0xA6, 0x96, 0x2B },
+ { 0x1E, 0x14, 0x30, 0x00, 0x05, 0x80, 0x53, 0xC1, 0xA6, 0x96, 0xA5, 0x23 },
+ { 0x1E, 0x17, 0x30, 0x00, 0x4E, 0x00, 0x4A, 0x01, 0xA6, 0x66, 0xA4, 0x23 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_3440000 = {
+ { 0x1E, 0x1E, 0x40, 0x0C, 0xB4, 0x12, 0x30, 0x01, 0x99, 0x45, 0x10, 0x10 },
+ { 0x1E, 0x1D, 0x20, 0x0B, 0x6D, 0x93, 0x30, 0xC1, 0x95, 0xA5, 0x91, 0x19 },
+ { 0x1E, 0x0A, 0x80, 0x0A, 0x92, 0x12, 0xDE, 0xC1, 0x95, 0xA5, 0x99, 0x1A },
+ { 0x1E, 0x0B, 0x20, 0x09, 0x4C, 0x12, 0x93, 0x71, 0x95, 0x45, 0x99, 0x8B },
+ { 0x1E, 0x1E, 0x70, 0x00, 0x04, 0x92, 0xAD, 0xA1, 0x9A, 0x95, 0x99, 0x22 },
+ { 0x1E, 0x13, 0x50, 0x00, 0x30, 0x12, 0x9B, 0x71, 0x9A, 0x85, 0xAA, 0xA5 },
+ { 0x1E, 0x0D, 0x00, 0x00, 0x72, 0x12, 0x49, 0x91, 0x99, 0x95, 0x95, 0x9A },
+ { 0x1E, 0x0E, 0x40, 0x00, 0x00, 0x92, 0x4A, 0x6D, 0x99, 0xA5, 0x9A, 0xA4 },
+ { 0x1E, 0x1D, 0xE0, 0x24, 0x92, 0x12, 0x5D, 0xA1, 0x9A, 0x55, 0x56, 0x19 },
+ { 0x1E, 0x1A, 0xA0, 0x1F, 0xE0, 0x12, 0x56, 0x01, 0x95, 0x05, 0x68, 0x0A },
+ { 0x1E, 0x09, 0x40, 0x1B, 0x6D, 0x92, 0x4A, 0xA1, 0x95, 0x55, 0x65, 0x09 },
+ { 0x1E, 0x0A, 0x60, 0x13, 0x6E, 0x12, 0x49, 0x49, 0x9A, 0x95, 0x6A, 0x63 },
+ { 0x1E, 0x17, 0x10, 0x13, 0x72, 0x12, 0xB7, 0x01, 0x95, 0x95, 0x64, 0x11 },
+ { 0x1E, 0x19, 0x90, 0x12, 0x40, 0x12, 0x92, 0x4D, 0x95, 0x05, 0x66, 0x8B },
+ { 0x1E, 0x19, 0x00, 0x09, 0x70, 0x12, 0xDB, 0x61, 0x9A, 0x45, 0x59, 0x19 },
+ { 0x1E, 0x02, 0x50, 0x0A, 0x49, 0x93, 0x24, 0x91, 0x99, 0xA5, 0x65, 0xA2 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_3460000 = {
+ { 0x1E, 0x02, 0x50, 0x0A, 0x49, 0x93, 0x24, 0x91, 0x99, 0xA5, 0x65, 0xA2 },
+ { 0x1E, 0x1E, 0x40, 0x0C, 0xB4, 0x12, 0x30, 0x01, 0x99, 0x45, 0x10, 0x10 },
+ { 0x1E, 0x0A, 0x80, 0x0A, 0x92, 0x12, 0xDE, 0xC1, 0x95, 0xA5, 0x99, 0x1A },
+ { 0x1E, 0x14, 0x70, 0x09, 0x24, 0x92, 0xE4, 0x91, 0x96, 0x55, 0xA9, 0x53 },
+ { 0x1E, 0x0B, 0x20, 0x09, 0x4C, 0x12, 0x93, 0x71, 0x95, 0x45, 0x99, 0x8B },
+ { 0x1E, 0x1E, 0x70, 0x00, 0x04, 0x92, 0xAD, 0xA1, 0x9A, 0x95, 0x99, 0x22 },
+ { 0x1E, 0x13, 0x50, 0x00, 0x30, 0x12, 0x9B, 0x71, 0x9A, 0x85, 0xAA, 0xA5 },
+ { 0x1E, 0x0D, 0x00, 0x00, 0x72, 0x12, 0x49, 0x91, 0x99, 0x95, 0x95, 0x9A },
+ { 0x1E, 0x1B, 0x20, 0x07, 0x18, 0x12, 0x52, 0x49, 0x84, 0x85, 0x55, 0x91 },
+ { 0x1E, 0x08, 0xB0, 0x1B, 0xB8, 0x12, 0x5B, 0x91, 0x9A, 0x45, 0x65, 0x59 },
+ { 0x1E, 0x1A, 0xA0, 0x1F, 0xE0, 0x12, 0x56, 0x01, 0x95, 0x05, 0x68, 0x0A },
+ { 0x1E, 0x09, 0x40, 0x1B, 0x6D, 0x92, 0x4A, 0xA1, 0x95, 0x55, 0x65, 0x09 },
+ { 0x1E, 0x00, 0x90, 0x15, 0xD8, 0x12, 0x9C, 0xA1, 0x96, 0x85, 0x56, 0x19 },
+ { 0x1E, 0x17, 0x10, 0x13, 0x72, 0x12, 0xB7, 0x01, 0x95, 0x95, 0x64, 0x11 },
+ { 0x1E, 0x19, 0x90, 0x12, 0x40, 0x12, 0x92, 0x4D, 0x95, 0x05, 0x66, 0x8B },
+ { 0x1E, 0x11, 0x70, 0x09, 0x29, 0x12, 0xDC, 0xC1, 0x99, 0x55, 0x66, 0x12 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_4450000 = {
+ { 0x1E, 0x0D, 0x82, 0x55, 0xB4, 0x00, 0x9C, 0xC1, 0x55, 0x46, 0x5A, 0x03 },
+ { 0x1E, 0x01, 0xD2, 0x49, 0x52, 0x00, 0x93, 0x91, 0x5A, 0xA6, 0x66, 0x63 },
+ { 0x1E, 0x0E, 0x82, 0x4A, 0x6E, 0x00, 0xED, 0xC1, 0x5A, 0x96, 0x55, 0x19 },
+ { 0x1E, 0x1B, 0x92, 0x4D, 0x18, 0x01, 0x36, 0xC1, 0x54, 0x46, 0x59, 0x02 },
+ { 0x1E, 0x1B, 0x22, 0x4A, 0x49, 0x00, 0x38, 0xC1, 0x55, 0x66, 0x12, 0x0A },
+ { 0x1E, 0x0C, 0x52, 0x49, 0x29, 0x81, 0x3F, 0x01, 0x55, 0xA6, 0x98, 0x13 },
+ { 0x1E, 0x0C, 0xD0, 0x00, 0x29, 0x80, 0xC6, 0xC1, 0xAA, 0x66, 0x86, 0x2B },
+ { 0x1E, 0x15, 0x70, 0x00, 0x24, 0x80, 0x90, 0xC1, 0xA9, 0x56, 0x91, 0x1A },
+ { 0x1E, 0x0B, 0x12, 0x4A, 0x74, 0x00, 0x00, 0x25, 0x65, 0x86, 0x65, 0x52 },
+ { 0x1E, 0x1A, 0xE2, 0x52, 0x4A, 0x00, 0x06, 0xC1, 0x6A, 0xA6, 0x6A, 0x2C },
+ { 0x1E, 0x06, 0x72, 0x55, 0xB4, 0x00, 0x00, 0x25, 0x66, 0x46, 0x6A, 0x54 },
+ { 0x1E, 0x0C, 0x72, 0x5C, 0x92, 0x00, 0x49, 0x25, 0x6A, 0x56, 0x59, 0x5A },
+ { 0x1E, 0x1D, 0x22, 0x66, 0x18, 0x00, 0x5B, 0x6D, 0x64, 0x46, 0x56, 0x8B },
+ { 0x1E, 0x16, 0xD2, 0x6E, 0x00, 0x00, 0x5E, 0xC1, 0x58, 0x06, 0x69, 0x0B },
+ { 0x1E, 0x0E, 0x52, 0x5C, 0x90, 0x00, 0x49, 0x2D, 0x59, 0x46, 0x66, 0x8C },
+ { 0x1E, 0x0C, 0x22, 0x52, 0xE0, 0x00, 0x49, 0x25, 0x5A, 0x06, 0x6A, 0x54 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_8200000 = {
+ { 0x1E, 0x0A, 0x8B, 0x46, 0xD8, 0x01, 0xB6, 0xC2, 0x89, 0x84, 0x99, 0x22 },
+ { 0x1E, 0x03, 0xBB, 0xB6, 0x18, 0x01, 0xF8, 0xC2, 0x58, 0x84, 0x91, 0x19 },
+ { 0x1E, 0x06, 0xBC, 0x30, 0xE0, 0x00, 0x38, 0xC2, 0x12, 0x04, 0x21, 0x11 },
+ { 0x1E, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x04, 0x02, 0x01 },
+ { 0x1E, 0x17, 0xBD, 0xB0, 0xD8, 0x00, 0x06, 0xC1, 0x91, 0x44, 0x0A, 0x0A },
+ { 0x1E, 0x1D, 0x0D, 0x87, 0x18, 0x00, 0x36, 0xC1, 0x44, 0x84, 0x26, 0x0A },
+ { 0x1E, 0x0B, 0x2A, 0x06, 0xD8, 0x01, 0xC0, 0x01, 0x06, 0x84, 0x80, 0x11 },
+ { 0x1E, 0x02, 0x59, 0x25, 0xD8, 0x01, 0x86, 0xC1, 0xAA, 0x44, 0x85, 0x21 },
+ { 0x1E, 0x1E, 0x27, 0x24, 0x92, 0x0B, 0x6D, 0xC2, 0xA6, 0x66, 0xAA, 0x2D },
+ { 0x1E, 0x0E, 0x17, 0x86, 0xE0, 0x0B, 0xC6, 0xC2, 0x8A, 0x06, 0x8A, 0x24 },
+ { 0x1E, 0x17, 0x97, 0x7F, 0x00, 0x0B, 0x80, 0xC2, 0x54, 0x06, 0x41, 0x09 },
+ { 0x1E, 0x0B, 0xD6, 0xDC, 0x94, 0x0B, 0x6E, 0xC2, 0x6A, 0x86, 0x55, 0x29 },
+ { 0x1E, 0x05, 0x76, 0xE6, 0xC0, 0x0C, 0x36, 0xC2, 0x5A, 0x06, 0x25, 0x1A },
+ { 0x1E, 0x1A, 0x99, 0x2D, 0xB8, 0x0D, 0x80, 0x02, 0x99, 0x86, 0x40, 0x21 },
+ { 0x1E, 0x07, 0xB9, 0xFF, 0xE0, 0x0E, 0x3F, 0x02, 0x95, 0x06, 0x24, 0x12 },
+ { 0x1E, 0x1F, 0xB9, 0x26, 0xE0, 0x01, 0xB6, 0xC2, 0x6A, 0x04, 0xAA, 0x24 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_3300000 = {
+ { 0x1E, 0x0D, 0x00, 0x00, 0x72, 0x12, 0x49, 0x91, 0x99, 0x95, 0x95, 0x9A },
+ { 0x1E, 0x0E, 0x40, 0x00, 0x00, 0x92, 0x4A, 0x6D, 0x99, 0xA5, 0x9A, 0xA4 },
+ { 0x1E, 0x19, 0xB0, 0x01, 0x24, 0x92, 0x53, 0xC1, 0x9A, 0xA5, 0x9A, 0x2B },
+ { 0x1E, 0x0D, 0x20, 0x01, 0x2C, 0x12, 0x52, 0x81, 0x99, 0x45, 0xA5, 0x12 },
+ { 0x1E, 0x10, 0x50, 0x02, 0x70, 0x12, 0x49, 0x71, 0x99, 0x85, 0xA6, 0x5B },
+ { 0x1E, 0x1C, 0xE0, 0x04, 0xB4, 0x12, 0x49, 0x29, 0x9A, 0x85, 0xA9, 0x63 },
+ { 0x1E, 0x05, 0x10, 0x04, 0xD8, 0x14, 0x93, 0x91, 0x95, 0x45, 0x5A, 0x4A },
+ { 0x1E, 0x16, 0xB0, 0x02, 0x70, 0x14, 0xB8, 0x01, 0x96, 0x85, 0x50, 0x18 },
+ { 0x1E, 0x19, 0x00, 0x09, 0x70, 0x12, 0xDB, 0x61, 0x9A, 0x45, 0x59, 0x19 },
+ { 0x1E, 0x11, 0x70, 0x09, 0x29, 0x12, 0xDC, 0xC1, 0x99, 0x55, 0x66, 0x12 },
+ { 0x1E, 0x02, 0x50, 0x0A, 0x49, 0x93, 0x24, 0x91, 0x99, 0xA5, 0x65, 0xA2 },
+ { 0x1E, 0x1D, 0x20, 0x0B, 0x6D, 0x93, 0x30, 0xC1, 0x95, 0xA5, 0x91, 0x19 },
+ { 0x1E, 0x0A, 0x80, 0x0A, 0x92, 0x12, 0xDE, 0xC1, 0x95, 0xA5, 0x99, 0x1A },
+ { 0x1E, 0x14, 0x70, 0x09, 0x24, 0x92, 0xE4, 0x91, 0x96, 0x55, 0xA9, 0x53 },
+ { 0x1E, 0x1E, 0x70, 0x00, 0x04, 0x92, 0xAD, 0xA1, 0x9A, 0x95, 0x99, 0x22 },
+ { 0x1E, 0x13, 0x50, 0x00, 0x30, 0x12, 0x9B, 0x71, 0x9A, 0x85, 0xAA, 0xA5 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_5200000 = {
+ { 0x1E, 0x09, 0x42, 0xDC, 0xE0, 0x02, 0x4A, 0x71, 0x69, 0x06, 0x95, 0x93 },
+ { 0x1E, 0x01, 0xF2, 0xED, 0xB4, 0x02, 0x52, 0xC1, 0x69, 0x46, 0x95, 0x12 },
+ { 0x1E, 0x0C, 0x02, 0xE7, 0xE0, 0x02, 0x65, 0x01, 0x5A, 0x06, 0x94, 0x12 },
+ { 0x1E, 0x1F, 0x62, 0xDB, 0x6D, 0x82, 0x52, 0x51, 0x55, 0x56, 0xA6, 0x44 },
+ { 0x1E, 0x01, 0x32, 0x90, 0xD8, 0x02, 0x4A, 0x51, 0x61, 0x46, 0xA5, 0x4B },
+ { 0x1E, 0x16, 0x32, 0x9C, 0x94, 0x00, 0x00, 0x29, 0x69, 0x86, 0x55, 0x59 },
+ { 0x1E, 0x17, 0x72, 0xA4, 0xB8, 0x00, 0x03, 0x6D, 0x65, 0x86, 0x55, 0x92 },
+ { 0x1E, 0x0A, 0x22, 0xA4, 0x92, 0x00, 0x00, 0x01, 0x5A, 0x96, 0x59, 0x9B },
+ { 0x1E, 0x08, 0xD2, 0xE7, 0x00, 0x02, 0x92, 0x4D, 0xA8, 0x06, 0x6A, 0x9D },
+ { 0x1E, 0x1B, 0x32, 0xE5, 0xD8, 0x02, 0xDD, 0xA1, 0x96, 0x46, 0x65, 0x12 },
+ { 0x1E, 0x0C, 0x83, 0x25, 0xE0, 0x03, 0x70, 0xC1, 0xA5, 0x06, 0x61, 0x12 },
+ { 0x1E, 0x0A, 0x53, 0x25, 0xB4, 0x03, 0x47, 0x01, 0x9A, 0x46, 0x88, 0x1B },
+ { 0x1E, 0x1E, 0x43, 0xBF, 0xE0, 0x02, 0xDB, 0xC1, 0xAA, 0x06, 0x9A, 0x24 },
+ { 0x1E, 0x1F, 0x13, 0x87, 0x18, 0x02, 0x93, 0x91, 0x44, 0x86, 0x96, 0x8C },
+ { 0x1E, 0x0B, 0x23, 0x76, 0x18, 0x02, 0x9B, 0x6D, 0x54, 0x46, 0x9A, 0x44 },
+ { 0x1E, 0x19, 0xD3, 0x00, 0xD8, 0x02, 0x9B, 0x91, 0x42, 0x86, 0xAA, 0x96 }
+};
+
+XC3028_SCODE_TABLE XC3028_scode_table_4560000 = {
+ { 0x1E, 0x0E, 0x42, 0x46, 0x00, 0x00, 0x65, 0xA1, 0x44, 0x06, 0x65, 0x02 },
+ { 0x1E, 0x06, 0x32, 0x5B, 0x90, 0x00, 0x52, 0x4D, 0x5A, 0x86, 0x6A, 0x5C },
+ { 0x1E, 0x1E, 0x22, 0x52, 0x49, 0x80, 0x49, 0x51, 0x5A, 0x66, 0x69, 0x5B },
+ { 0x1E, 0x1F, 0x12, 0x56, 0xE0, 0x00, 0x9B, 0x91, 0x59, 0x06, 0x56, 0x4A },
+ { 0x1E, 0x12, 0xF2, 0x52, 0x4C, 0x00, 0x98, 0xC1, 0x55, 0x46, 0x62, 0x03 },
+ { 0x1E, 0x1C, 0x72, 0x49, 0x2E, 0x00, 0xDE, 0xC1, 0x59, 0x96, 0x5A, 0x13 },
+ { 0x1E, 0x10, 0xB2, 0x4B, 0x72, 0x00, 0xDD, 0xC1, 0x59, 0x56, 0x69, 0x0B },
+ { 0x1E, 0x09, 0x82, 0x4A, 0x4D, 0x81, 0x78, 0xC1, 0x56, 0x56, 0x61, 0x0A },
+ { 0x1E, 0x02, 0x12, 0x93, 0x18, 0x00, 0x1D, 0x01, 0x54, 0x86, 0x54, 0x09 },
+ { 0x1E, 0x0E, 0xC2, 0x49, 0x78, 0x00, 0x1C, 0x81, 0x6A, 0x86, 0x66, 0x23 },
+ { 0x1E, 0x0B, 0xE2, 0x4B, 0xD8, 0x00, 0x09, 0x25, 0x69, 0x46, 0x66, 0x94 },
+ { 0x1E, 0x0B, 0x12, 0x4A, 0x74, 0x00, 0x00, 0x25, 0x65, 0x86, 0x65, 0x52 },
+ { 0x1E, 0x1D, 0x02, 0x49, 0x32, 0x00, 0x03, 0x91, 0x65, 0x66, 0x66, 0x53 },
+ { 0x1E, 0x18, 0xC2, 0x55, 0xA0, 0x00, 0x00, 0x25, 0x6A, 0x06, 0x69, 0x9C },
+ { 0x1E, 0x19, 0x32, 0x52, 0x52, 0x00, 0x4E, 0xC1, 0x65, 0x96, 0x55, 0x11 },
+ { 0x1E, 0x1A, 0xF2, 0x5B, 0x6C, 0x00, 0x53, 0x71, 0x65, 0x46, 0x59, 0x4A }
+};
+
+
+#endif
+
diff --git a/api/xc4000_channelmaps.h b/api/xc4000_channelmaps.h
new file mode 100644
index 0000000..ba3d47e
--- /dev/null
+++ b/api/xc4000_channelmaps.h
@@ -0,0 +1,4028 @@
+//
+// Automatically generated C header file for
+// control of the XC4000 via the i2c interface.
+//
+// Filename : xc4000_channelmaps.h
+// Generated : 9/25/2007 4:58:46 PM
+// Firmware version : 1.2
+//
+// (c) 2007 Xceive Corporation
+//
+
+#ifndef __XC4000_CHANNELMAPS_H
+#define __XC4000_CHANNELMAPS_H
+
+typedef struct {
+ char * identifier;
+ unsigned int frequency;
+ unsigned char dcode;
+} XC_CHANNEL;
+
+typedef struct {
+ char *MapType;
+ int nb_channels;
+ XC_CHANNEL *channels;
+} XC_CHANNEL_MAP;
+
+// *************************************************************
+// *** LIST OF AVAILABLE CHANNELMAPS
+// ***
+// *** 1. USA - Analog - Air
+// *** 2. USA - Analog - Cable
+// *** 3. USA - Digital - Air
+// *** 4. USA - Digital - Cable
+// *** 5. Taiwan - Analog - Air
+// *** 6. Taiwan - Analog - Cable
+// *** 7. Taiwan - Digital - Air
+// *** 8. Taiwan - Digital - Cable
+// *** 9. Japan - Analog - Air
+// *** 10. Japan - Analog - Cable
+// *** 11. Japan - Digital - Air
+// *** 12. Japan - Digital - Cable
+// *** 13. CCIR - Analog - Air
+// *** 14. CCIR - Analog - Cable
+// *** 15. CCIR - Digital - Air
+// *** 16. CCIR - Digital - Cable
+// *** 17. India - Analog - Air
+// *** 18. India - Analog - Cable
+// *** 19. India - Digital - Air
+// *** 20. India - Digital - Cable
+// *** 21. France - Analog - Air
+// *** 22. France - Analog - Cable
+// *** 23. France - Digital - Air
+// *** 24. France - Digital - Cable
+// *** 25. UK - Analog - Air
+// *** 26. UK - Analog - Cable
+// *** 27. UK - Digital - Air
+// *** 28. UK - Digital - Cable
+// *** 29. Ireland - Analog - Air
+// *** 30. Ireland - Analog - Cable
+// *** 31. Ireland - Digital - Air
+// *** 32. Ireland - Digital - Cable
+// *** 33. China - Analog - Air
+// *** 34. China - Analog - Cable
+// *** 35. China - Digital - Air
+// *** 36. China - Digital - Cable
+// *** 37. Australia - Analog - Air
+// *** 38. Australia - Analog - Cable
+// *** 39. Australia - Digital - Air
+// *** 40. Australia - Digital - Cable
+// *** 41. OIRT - Analog - Air
+// *** 42. OIRT - Analog - Cable
+// *** 43. OIRT - Digital - Air
+// *** 44. OIRT - Digital - Cable
+// *** 45. USA - FM radio
+// *** 46. Europe - FM radio
+// *** 47. Japan - FM radio
+// *************************************************************
+
+
+// *** 1. USA - Analog - Air
+XC_CHANNEL USA_Analog_Air[] = {
+ {"2", 0x0DD0, 0x0000},
+ {"3", 0x0F50, 0x0000},
+ {"4", 0x10D0, 0x0000},
+ {"5", 0x1350, 0x0000},
+ {"6", 0x14D0, 0x0000},
+ {"7", 0x2BD0, 0x0000},
+ {"8", 0x2D50, 0x0000},
+ {"9", 0x2ED0, 0x0000},
+ {"10", 0x3050, 0x0000},
+ {"11", 0x31D0, 0x0000},
+ {"12", 0x3350, 0x0000},
+ {"13", 0x34D0, 0x0000},
+ {"14", 0x75D0, 0x0000},
+ {"15", 0x7750, 0x0000},
+ {"16", 0x78D0, 0x0000},
+ {"17", 0x7A50, 0x0000},
+ {"18", 0x7BD0, 0x0000},
+ {"19", 0x7D50, 0x0000},
+ {"20", 0x7ED0, 0x0000},
+ {"21", 0x8050, 0x0000},
+ {"22", 0x81D0, 0x0000},
+ {"23", 0x8350, 0x0000},
+ {"24", 0x84D0, 0x0000},
+ {"25", 0x8650, 0x0000},
+ {"26", 0x87D0, 0x0000},
+ {"27", 0x8950, 0x0000},
+ {"28", 0x8AD0, 0x0000},
+ {"29", 0x8C50, 0x0000},
+ {"30", 0x8DD0, 0x0000},
+ {"31", 0x8F50, 0x0000},
+ {"32", 0x90D0, 0x0000},
+ {"33", 0x9250, 0x0000},
+ {"34", 0x93D0, 0x0000},
+ {"35", 0x9550, 0x0000},
+ {"36", 0x96D0, 0x0000},
+ {"37", 0x9850, 0x0000},
+ {"38", 0x99D0, 0x0000},
+ {"39", 0x9B50, 0x0000},
+ {"40", 0x9CD0, 0x0000},
+ {"41", 0x9E50, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA150, 0x0000},
+ {"44", 0xA2D0, 0x0000},
+ {"45", 0xA450, 0x0000},
+ {"46", 0xA5D0, 0x0000},
+ {"47", 0xA750, 0x0000},
+ {"48", 0xA8D0, 0x0000},
+ {"49", 0xAA50, 0x0000},
+ {"50", 0xABD0, 0x0000},
+ {"51", 0xAD50, 0x0000},
+ {"52", 0xAED0, 0x0000},
+ {"53", 0xB050, 0x0000},
+ {"54", 0xB1D0, 0x0000},
+ {"55", 0xB350, 0x0000},
+ {"56", 0xB4D0, 0x0000},
+ {"57", 0xB650, 0x0000},
+ {"58", 0xB7D0, 0x0000},
+ {"59", 0xB950, 0x0000},
+ {"60", 0xBAD0, 0x0000},
+ {"61", 0xBC50, 0x0000},
+ {"62", 0xBDD0, 0x0000},
+ {"63", 0xBF50, 0x0000},
+ {"64", 0xC0D0, 0x0000},
+ {"65", 0xC250, 0x0000},
+ {"66", 0xC3D0, 0x0000},
+ {"67", 0xC550, 0x0000},
+ {"68", 0xC6D0, 0x0000},
+ {"69", 0xC850, 0x0000}};
+
+
+// *** 2. USA - Analog - Cable
+XC_CHANNEL USA_Analog_Cable[] = {
+ {"1", 0x1250, 0x0000},
+ {"2", 0x0DD0, 0x0000},
+ {"3", 0x0F50, 0x0000},
+ {"4", 0x10D0, 0x0000},
+ {"5", 0x1350, 0x0000},
+ {"6", 0x14D0, 0x0000},
+ {"7", 0x2BD0, 0x0000},
+ {"8", 0x2D50, 0x0000},
+ {"9", 0x2ED0, 0x0000},
+ {"10", 0x3050, 0x0000},
+ {"11", 0x31D0, 0x0000},
+ {"12", 0x3350, 0x0000},
+ {"13", 0x34D0, 0x0000},
+ {"14", 0x1E50, 0x0000},
+ {"15", 0x1FD0, 0x0000},
+ {"16", 0x2150, 0x0000},
+ {"17", 0x22D0, 0x0000},
+ {"18", 0x2450, 0x0000},
+ {"19", 0x25D0, 0x0000},
+ {"20", 0x2750, 0x0000},
+ {"21", 0x28D0, 0x0000},
+ {"22", 0x2A50, 0x0000},
+ {"23", 0x3650, 0x0000},
+ {"24", 0x37D0, 0x0000},
+ {"25", 0x3950, 0x0000},
+ {"26", 0x3AD0, 0x0000},
+ {"27", 0x3C50, 0x0000},
+ {"28", 0x3DD0, 0x0000},
+ {"29", 0x3F50, 0x0000},
+ {"30", 0x40D0, 0x0000},
+ {"31", 0x4250, 0x0000},
+ {"32", 0x43D0, 0x0000},
+ {"33", 0x4550, 0x0000},
+ {"34", 0x46D0, 0x0000},
+ {"35", 0x4850, 0x0000},
+ {"36", 0x49D0, 0x0000},
+ {"37", 0x4B50, 0x0000},
+ {"38", 0x4CD0, 0x0000},
+ {"39", 0x4E50, 0x0000},
+ {"40", 0x4FD0, 0x0000},
+ {"41", 0x5150, 0x0000},
+ {"42", 0x52D0, 0x0000},
+ {"43", 0x5450, 0x0000},
+ {"44", 0x55D0, 0x0000},
+ {"45", 0x5750, 0x0000},
+ {"46", 0x58D0, 0x0000},
+ {"47", 0x5A50, 0x0000},
+ {"48", 0x5BD0, 0x0000},
+ {"49", 0x5D50, 0x0000},
+ {"50", 0x5ED0, 0x0000},
+ {"51", 0x6050, 0x0000},
+ {"52", 0x61D0, 0x0000},
+ {"53", 0x6350, 0x0000},
+ {"54", 0x64D0, 0x0000},
+ {"55", 0x6650, 0x0000},
+ {"56", 0x67D0, 0x0000},
+ {"57", 0x6950, 0x0000},
+ {"58", 0x6AD0, 0x0000},
+ {"59", 0x6C50, 0x0000},
+ {"60", 0x6DD0, 0x0000},
+ {"61", 0x6F50, 0x0000},
+ {"62", 0x70D0, 0x0000},
+ {"63", 0x7250, 0x0000},
+ {"64", 0x73D0, 0x0000},
+ {"65", 0x7550, 0x0000},
+ {"66", 0x76D0, 0x0000},
+ {"67", 0x7850, 0x0000},
+ {"68", 0x79D0, 0x0000},
+ {"69", 0x7B50, 0x0000},
+ {"70", 0x7CD0, 0x0000},
+ {"71", 0x7E50, 0x0000},
+ {"72", 0x7FD0, 0x0000},
+ {"73", 0x8150, 0x0000},
+ {"74", 0x82D0, 0x0000},
+ {"75", 0x8450, 0x0000},
+ {"76", 0x85D0, 0x0000},
+ {"77", 0x8750, 0x0000},
+ {"78", 0x88D0, 0x0000},
+ {"79", 0x8A50, 0x0000},
+ {"80", 0x8BD0, 0x0000},
+ {"81", 0x8D50, 0x0000},
+ {"82", 0x8ED0, 0x0000},
+ {"83", 0x9050, 0x0000},
+ {"84", 0x91D0, 0x0000},
+ {"85", 0x9350, 0x0000},
+ {"86", 0x94D0, 0x0000},
+ {"87", 0x9650, 0x0000},
+ {"88", 0x97D0, 0x0000},
+ {"89", 0x9950, 0x0000},
+ {"90", 0x9AD0, 0x0000},
+ {"91", 0x9C50, 0x0000},
+ {"92", 0x9DD0, 0x0000},
+ {"93", 0x9F50, 0x0000},
+ {"94", 0xA0D0, 0x0000},
+ {"95", 0x16D0, 0x0000},
+ {"96", 0x1850, 0x0000},
+ {"97", 0x19D0, 0x0000},
+ {"98", 0x1B51, 0x0000},
+ {"99", 0x1CD1, 0x0000},
+ {"100", 0xA250, 0x0000},
+ {"101", 0xA3D0, 0x0000},
+ {"102", 0xA550, 0x0000},
+ {"103", 0xA6D0, 0x0000},
+ {"104", 0xA850, 0x0000},
+ {"105", 0xA9D0, 0x0000},
+ {"106", 0xAB50, 0x0000},
+ {"107", 0xACD0, 0x0000},
+ {"108", 0xAE50, 0x0000},
+ {"109", 0xAFD0, 0x0000},
+ {"110", 0xB150, 0x0000},
+ {"111", 0xB2D0, 0x0000},
+ {"112", 0xB450, 0x0000},
+ {"113", 0xB5D0, 0x0000},
+ {"114", 0xB750, 0x0000},
+ {"115", 0xB8D0, 0x0000},
+ {"116", 0xBA50, 0x0000},
+ {"117", 0xBBD0, 0x0000},
+ {"118", 0xBD50, 0x0000},
+ {"119", 0xBED0, 0x0000},
+ {"120", 0xC050, 0x0000},
+ {"121", 0xC1D0, 0x0000},
+ {"122", 0xC350, 0x0000},
+ {"123", 0xC4D0, 0x0000},
+ {"124", 0xC650, 0x0000},
+ {"125", 0xC7D0, 0x0000},
+ {"126", 0xC950, 0x0000},
+ {"127", 0xCAD0, 0x0000},
+ {"128", 0xCC50, 0x0000},
+ {"129", 0xCDD0, 0x0000},
+ {"130", 0xCF50, 0x0000},
+ {"131", 0xD0D0, 0x0000},
+ {"132", 0xD250, 0x0000},
+ {"133", 0xD3D0, 0x0000},
+ {"134", 0xD550, 0x0000},
+ {"135", 0xD6D0, 0x0000}};
+
+
+// *** 3. USA - Digital - Air
+XC_CHANNEL USA_Digital_Air[] = {
+ {"2", 0x0DD0, 0x0000},
+ {"3", 0x0F50, 0x0000},
+ {"4", 0x10D0, 0x0000},
+ {"5", 0x1350, 0x0000},
+ {"6", 0x14D0, 0x0000},
+ {"7", 0x2BD0, 0x0000},
+ {"8", 0x2D50, 0x0000},
+ {"9", 0x2ED0, 0x0000},
+ {"10", 0x3050, 0x0000},
+ {"11", 0x31D0, 0x0000},
+ {"12", 0x3350, 0x0000},
+ {"13", 0x34D0, 0x0000},
+ {"14", 0x75D0, 0x0000},
+ {"15", 0x7750, 0x0000},
+ {"16", 0x78D0, 0x0000},
+ {"17", 0x7A50, 0x0000},
+ {"18", 0x7BD0, 0x0000},
+ {"19", 0x7D50, 0x0000},
+ {"20", 0x7ED0, 0x0000},
+ {"21", 0x8050, 0x0000},
+ {"22", 0x81D0, 0x0000},
+ {"23", 0x8350, 0x0000},
+ {"24", 0x84D0, 0x0000},
+ {"25", 0x8650, 0x0000},
+ {"26", 0x87D0, 0x0000},
+ {"27", 0x8950, 0x0000},
+ {"28", 0x8AD0, 0x0000},
+ {"29", 0x8C50, 0x0000},
+ {"30", 0x8DD0, 0x0000},
+ {"31", 0x8F50, 0x0000},
+ {"32", 0x90D0, 0x0000},
+ {"33", 0x9250, 0x0000},
+ {"34", 0x93D0, 0x0000},
+ {"35", 0x9550, 0x0000},
+ {"36", 0x96D0, 0x0000},
+ {"37", 0x9850, 0x0000},
+ {"38", 0x99D0, 0x0000},
+ {"39", 0x9B50, 0x0000},
+ {"40", 0x9CD0, 0x0000},
+ {"41", 0x9E50, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA150, 0x0000},
+ {"44", 0xA2D0, 0x0000},
+ {"45", 0xA450, 0x0000},
+ {"46", 0xA5D0, 0x0000},
+ {"47", 0xA750, 0x0000},
+ {"48", 0xA8D0, 0x0000},
+ {"49", 0xAA50, 0x0000},
+ {"50", 0xABD0, 0x0000},
+ {"51", 0xAD50, 0x0000},
+ {"52", 0xAED0, 0x0000},
+ {"53", 0xB050, 0x0000},
+ {"54", 0xB1D0, 0x0000},
+ {"55", 0xB350, 0x0000},
+ {"56", 0xB4D0, 0x0000},
+ {"57", 0xB650, 0x0000},
+ {"58", 0xB7D0, 0x0000},
+ {"59", 0xB950, 0x0000},
+ {"60", 0xBAD0, 0x0000},
+ {"61", 0xBC50, 0x0000},
+ {"62", 0xBDD0, 0x0000},
+ {"63", 0xBF50, 0x0000},
+ {"64", 0xC0D0, 0x0000},
+ {"65", 0xC250, 0x0000},
+ {"66", 0xC3D0, 0x0000},
+ {"67", 0xC550, 0x0000},
+ {"68", 0xC6D0, 0x0000},
+ {"69", 0xC850, 0x0000}};
+
+
+// *** 4. USA - Digital - Cable
+XC_CHANNEL USA_Digital_Cable[] = {
+ {"1", 0x1250, 0x0000},
+ {"2", 0x0DD0, 0x0000},
+ {"3", 0x0F50, 0x0000},
+ {"4", 0x10D0, 0x0000},
+ {"5", 0x1350, 0x0000},
+ {"6", 0x14D0, 0x0000},
+ {"7", 0x2BD0, 0x0000},
+ {"8", 0x2D50, 0x0000},
+ {"9", 0x2ED0, 0x0000},
+ {"10", 0x3050, 0x0000},
+ {"11", 0x31D0, 0x0000},
+ {"12", 0x3350, 0x0000},
+ {"13", 0x34D0, 0x0000},
+ {"14", 0x1E50, 0x0000},
+ {"15", 0x1FD0, 0x0000},
+ {"16", 0x2150, 0x0000},
+ {"17", 0x22D0, 0x0000},
+ {"18", 0x2450, 0x0000},
+ {"19", 0x25D0, 0x0000},
+ {"20", 0x2750, 0x0000},
+ {"21", 0x28D0, 0x0000},
+ {"22", 0x2A50, 0x0000},
+ {"23", 0x3650, 0x0000},
+ {"24", 0x37D0, 0x0000},
+ {"25", 0x3950, 0x0000},
+ {"26", 0x3AD0, 0x0000},
+ {"27", 0x3C50, 0x0000},
+ {"28", 0x3DD0, 0x0000},
+ {"29", 0x3F50, 0x0000},
+ {"30", 0x40D0, 0x0000},
+ {"31", 0x4250, 0x0000},
+ {"32", 0x43D0, 0x0000},
+ {"33", 0x4550, 0x0000},
+ {"34", 0x46D0, 0x0000},
+ {"35", 0x4850, 0x0000},
+ {"36", 0x49D0, 0x0000},
+ {"37", 0x4B50, 0x0000},
+ {"38", 0x4CD0, 0x0000},
+ {"39", 0x4E50, 0x0000},
+ {"40", 0x4FD0, 0x0000},
+ {"41", 0x5150, 0x0000},
+ {"42", 0x52D0, 0x0000},
+ {"43", 0x5450, 0x0000},
+ {"44", 0x55D0, 0x0000},
+ {"45", 0x5750, 0x0000},
+ {"46", 0x58D0, 0x0000},
+ {"47", 0x5A50, 0x0000},
+ {"48", 0x5BD0, 0x0000},
+ {"49", 0x5D50, 0x0000},
+ {"50", 0x5ED0, 0x0000},
+ {"51", 0x6050, 0x0000},
+ {"52", 0x61D0, 0x0000},
+ {"53", 0x6350, 0x0000},
+ {"54", 0x64D0, 0x0000},
+ {"55", 0x6650, 0x0000},
+ {"56", 0x67D0, 0x0000},
+ {"57", 0x6950, 0x0000},
+ {"58", 0x6AD0, 0x0000},
+ {"59", 0x6C50, 0x0000},
+ {"60", 0x6DD0, 0x0000},
+ {"61", 0x6F50, 0x0000},
+ {"62", 0x70D0, 0x0000},
+ {"63", 0x7250, 0x0000},
+ {"64", 0x73D0, 0x0000},
+ {"65", 0x7550, 0x0000},
+ {"66", 0x76D0, 0x0000},
+ {"67", 0x7850, 0x0000},
+ {"68", 0x79D0, 0x0000},
+ {"69", 0x7B50, 0x0000},
+ {"70", 0x7CD0, 0x0000},
+ {"71", 0x7E50, 0x0000},
+ {"72", 0x7FD0, 0x0000},
+ {"73", 0x8150, 0x0000},
+ {"74", 0x82D0, 0x0000},
+ {"75", 0x8450, 0x0000},
+ {"76", 0x85D0, 0x0000},
+ {"77", 0x8750, 0x0000},
+ {"78", 0x88D0, 0x0000},
+ {"79", 0x8A50, 0x0000},
+ {"80", 0x8BD0, 0x0000},
+ {"81", 0x8D50, 0x0000},
+ {"82", 0x8ED0, 0x0000},
+ {"83", 0x9050, 0x0000},
+ {"84", 0x91D0, 0x0000},
+ {"85", 0x9350, 0x0000},
+ {"86", 0x94D0, 0x0000},
+ {"87", 0x9650, 0x0000},
+ {"88", 0x97D0, 0x0000},
+ {"89", 0x9950, 0x0000},
+ {"90", 0x9AD0, 0x0000},
+ {"91", 0x9C50, 0x0000},
+ {"92", 0x9DD0, 0x0000},
+ {"93", 0x9F50, 0x0000},
+ {"94", 0xA0D0, 0x0000},
+ {"95", 0x16D0, 0x0000},
+ {"96", 0x1850, 0x0000},
+ {"97", 0x19D0, 0x0000},
+ {"98", 0x1B51, 0x0000},
+ {"99", 0x1CD1, 0x0000},
+ {"100", 0xA250, 0x0000},
+ {"101", 0xA3D0, 0x0000},
+ {"102", 0xA550, 0x0000},
+ {"103", 0xA6D0, 0x0000},
+ {"104", 0xA850, 0x0000},
+ {"105", 0xA9D0, 0x0000},
+ {"106", 0xAB50, 0x0000},
+ {"107", 0xACD0, 0x0000},
+ {"108", 0xAE50, 0x0000},
+ {"109", 0xAFD0, 0x0000},
+ {"110", 0xB150, 0x0000},
+ {"111", 0xB2D0, 0x0000},
+ {"112", 0xB450, 0x0000},
+ {"113", 0xB5D0, 0x0000},
+ {"114", 0xB750, 0x0000},
+ {"115", 0xB8D0, 0x0000},
+ {"116", 0xBA50, 0x0000},
+ {"117", 0xBBD0, 0x0000},
+ {"118", 0xBD50, 0x0000},
+ {"119", 0xBED0, 0x0000},
+ {"120", 0xC050, 0x0000},
+ {"121", 0xC1D0, 0x0000},
+ {"122", 0xC350, 0x0000},
+ {"123", 0xC4D0, 0x0000},
+ {"124", 0xC650, 0x0000},
+ {"125", 0xC7D0, 0x0000},
+ {"126", 0xC950, 0x0000},
+ {"127", 0xCAD0, 0x0000},
+ {"128", 0xCC50, 0x0000},
+ {"129", 0xCDD0, 0x0000},
+ {"130", 0xCF50, 0x0000},
+ {"131", 0xD0D0, 0x0000},
+ {"132", 0xD250, 0x0000},
+ {"133", 0xD3D0, 0x0000},
+ {"134", 0xD550, 0x0000},
+ {"135", 0xD6D0, 0x0000}};
+
+
+// *** 5. Taiwan - Analog - Air
+XC_CHANNEL Taiwan_Analog_Air[] = {
+ {"2", 0x0DD0, 0x0000},
+ {"3", 0x0F50, 0x0000},
+ {"4", 0x10D0, 0x0000},
+ {"5", 0x1350, 0x0000},
+ {"6", 0x14D0, 0x0000},
+ {"7", 0x2BD0, 0x0000},
+ {"8", 0x2D50, 0x0000},
+ {"9", 0x2ED0, 0x0000},
+ {"10", 0x3050, 0x0000},
+ {"11", 0x31D0, 0x0000},
+ {"12", 0x3350, 0x0000},
+ {"13", 0x34D0, 0x0000},
+ {"14", 0x75D0, 0x0000},
+ {"15", 0x7750, 0x0000},
+ {"16", 0x78D0, 0x0000},
+ {"17", 0x7A50, 0x0000},
+ {"18", 0x7BD0, 0x0000},
+ {"19", 0x7D50, 0x0000},
+ {"20", 0x7ED0, 0x0000},
+ {"21", 0x8050, 0x0000},
+ {"22", 0x81D0, 0x0000},
+ {"23", 0x8350, 0x0000},
+ {"24", 0x84D0, 0x0000},
+ {"25", 0x8650, 0x0000},
+ {"26", 0x87D0, 0x0000},
+ {"27", 0x8950, 0x0000},
+ {"28", 0x8AD0, 0x0000},
+ {"29", 0x8C50, 0x0000},
+ {"30", 0x8DD0, 0x0000},
+ {"31", 0x8F50, 0x0000},
+ {"32", 0x90D0, 0x0000},
+ {"33", 0x9250, 0x0000},
+ {"34", 0x93D0, 0x0000},
+ {"35", 0x9550, 0x0000},
+ {"36", 0x96D0, 0x0000},
+ {"37", 0x9850, 0x0000},
+ {"38", 0x99D0, 0x0000},
+ {"39", 0x9B50, 0x0000},
+ {"40", 0x9CD0, 0x0000},
+ {"41", 0x9E50, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA150, 0x0000},
+ {"44", 0xA2D0, 0x0000},
+ {"45", 0xA450, 0x0000},
+ {"46", 0xA5D0, 0x0000},
+ {"47", 0xA750, 0x0000},
+ {"48", 0xA8D0, 0x0000},
+ {"49", 0xAA50, 0x0000},
+ {"50", 0xABD0, 0x0000},
+ {"51", 0xAD50, 0x0000},
+ {"52", 0xAED0, 0x0000},
+ {"53", 0xB050, 0x0000},
+ {"54", 0xB1D0, 0x0000},
+ {"55", 0xB350, 0x0000},
+ {"56", 0xB4D0, 0x0000},
+ {"57", 0xB650, 0x0000},
+ {"58", 0xB7D0, 0x0000},
+ {"59", 0xB950, 0x0000},
+ {"60", 0xBAD0, 0x0000},
+ {"61", 0xBC50, 0x0000},
+ {"62", 0xBDD0, 0x0000},
+ {"63", 0xBF50, 0x0000},
+ {"64", 0xC0D0, 0x0000},
+ {"65", 0xC250, 0x0000},
+ {"66", 0xC3D0, 0x0000},
+ {"67", 0xC550, 0x0000},
+ {"68", 0xC6D0, 0x0000},
+ {"69", 0xC850, 0x0000}};
+
+
+// *** 6. Taiwan - Analog - Cable
+XC_CHANNEL Taiwan_Analog_Cable[] = {
+ {"1", 0x1250, 0x0000},
+ {"2", 0x0DD0, 0x0000},
+ {"3", 0x0F50, 0x0000},
+ {"4", 0x10D0, 0x0000},
+ {"5", 0x1350, 0x0000},
+ {"6", 0x14D0, 0x0000},
+ {"7", 0x2BD0, 0x0000},
+ {"8", 0x2D50, 0x0000},
+ {"9", 0x2ED0, 0x0000},
+ {"10", 0x3050, 0x0000},
+ {"11", 0x31D0, 0x0000},
+ {"12", 0x3350, 0x0000},
+ {"13", 0x34D0, 0x0000},
+ {"14", 0x1E50, 0x0000},
+ {"15", 0x1FD0, 0x0000},
+ {"16", 0x2150, 0x0000},
+ {"17", 0x22D0, 0x0000},
+ {"18", 0x2450, 0x0000},
+ {"19", 0x25D0, 0x0000},
+ {"20", 0x2750, 0x0000},
+ {"21", 0x28D0, 0x0000},
+ {"22", 0x2A50, 0x0000},
+ {"23", 0x3650, 0x0000},
+ {"24", 0x37D0, 0x0000},
+ {"25", 0x3950, 0x0000},
+ {"26", 0x3AD0, 0x0000},
+ {"27", 0x3C50, 0x0000},
+ {"28", 0x3DD0, 0x0000},
+ {"29", 0x3F50, 0x0000},
+ {"30", 0x40D0, 0x0000},
+ {"31", 0x4250, 0x0000},
+ {"32", 0x43D0, 0x0000},
+ {"33", 0x4550, 0x0000},
+ {"34", 0x46D0, 0x0000},
+ {"35", 0x4850, 0x0000},
+ {"36", 0x49D0, 0x0000},
+ {"37", 0x4B50, 0x0000},
+ {"38", 0x4CD0, 0x0000},
+ {"39", 0x4E50, 0x0000},
+ {"40", 0x4FD0, 0x0000},
+ {"41", 0x5150, 0x0000},
+ {"42", 0x52D0, 0x0000},
+ {"43", 0x5450, 0x0000},
+ {"44", 0x55D0, 0x0000},
+ {"45", 0x5750, 0x0000},
+ {"46", 0x58D0, 0x0000},
+ {"47", 0x5A50, 0x0000},
+ {"48", 0x5BD0, 0x0000},
+ {"49", 0x5D50, 0x0000},
+ {"50", 0x5ED0, 0x0000},
+ {"51", 0x6050, 0x0000},
+ {"52", 0x61D0, 0x0000},
+ {"53", 0x6350, 0x0000},
+ {"54", 0x64D0, 0x0000},
+ {"55", 0x6650, 0x0000},
+ {"56", 0x67D0, 0x0000},
+ {"57", 0x6950, 0x0000},
+ {"58", 0x6AD0, 0x0000},
+ {"59", 0x6C50, 0x0000},
+ {"60", 0x6DD0, 0x0000},
+ {"61", 0x6F50, 0x0000},
+ {"62", 0x70D0, 0x0000},
+ {"63", 0x7250, 0x0000},
+ {"64", 0x73D0, 0x0000},
+ {"65", 0x7550, 0x0000},
+ {"66", 0x76D0, 0x0000},
+ {"67", 0x7850, 0x0000},
+ {"68", 0x79D0, 0x0000},
+ {"69", 0x7B50, 0x0000},
+ {"70", 0x7CD0, 0x0000},
+ {"71", 0x7E50, 0x0000},
+ {"72", 0x7FD0, 0x0000},
+ {"73", 0x8150, 0x0000},
+ {"74", 0x82D0, 0x0000},
+ {"75", 0x8450, 0x0000},
+ {"76", 0x85D0, 0x0000},
+ {"77", 0x8750, 0x0000},
+ {"78", 0x88D0, 0x0000},
+ {"79", 0x8A50, 0x0000},
+ {"80", 0x8BD0, 0x0000},
+ {"81", 0x8D50, 0x0000},
+ {"82", 0x8ED0, 0x0000},
+ {"83", 0x9050, 0x0000},
+ {"84", 0x91D0, 0x0000},
+ {"85", 0x9350, 0x0000},
+ {"86", 0x94D0, 0x0000},
+ {"87", 0x9650, 0x0000},
+ {"88", 0x97D0, 0x0000},
+ {"89", 0x9950, 0x0000},
+ {"90", 0x9AD0, 0x0000},
+ {"91", 0x9C50, 0x0000},
+ {"92", 0x9DD0, 0x0000},
+ {"93", 0x9F50, 0x0000},
+ {"94", 0xA0D0, 0x0000},
+ {"95", 0x16D0, 0x0000},
+ {"96", 0x1850, 0x0000},
+ {"97", 0x19D0, 0x0000},
+ {"98", 0x1B51, 0x0000},
+ {"99", 0x1CD1, 0x0000},
+ {"100", 0xA250, 0x0000},
+ {"101", 0xA3D0, 0x0000},
+ {"102", 0xA550, 0x0000},
+ {"103", 0xA6D0, 0x0000},
+ {"104", 0xA850, 0x0000},
+ {"105", 0xA9D0, 0x0000},
+ {"106", 0xAB50, 0x0000},
+ {"107", 0xACD0, 0x0000},
+ {"108", 0xAE50, 0x0000},
+ {"109", 0xAFD0, 0x0000},
+ {"110", 0xB150, 0x0000},
+ {"111", 0xB2D0, 0x0000},
+ {"112", 0xB450, 0x0000},
+ {"113", 0xB5D0, 0x0000},
+ {"114", 0xB750, 0x0000},
+ {"115", 0xB8D0, 0x0000},
+ {"116", 0xBA50, 0x0000},
+ {"117", 0xBBD0, 0x0000},
+ {"118", 0xBD50, 0x0000},
+ {"119", 0xBED0, 0x0000},
+ {"120", 0xC050, 0x0000},
+ {"121", 0xC1D0, 0x0000},
+ {"122", 0xC350, 0x0000},
+ {"123", 0xC4D0, 0x0000},
+ {"124", 0xC650, 0x0000},
+ {"125", 0xC7D0, 0x0000},
+ {"126", 0xC950, 0x0000},
+ {"127", 0xCAD0, 0x0000},
+ {"128", 0xCC50, 0x0000},
+ {"129", 0xCDD0, 0x0000},
+ {"130", 0xCF50, 0x0000},
+ {"131", 0xD0D0, 0x0000},
+ {"132", 0xD250, 0x0000},
+ {"133", 0xD3D0, 0x0000},
+ {"134", 0xD550, 0x0000},
+ {"135", 0xD6D0, 0x0000}};
+
+
+// *** 7. Taiwan - Digital - Air
+XC_CHANNEL Taiwan_Digital_Air[] = {
+ {"2", 0x0DD0, 0x0000},
+ {"3", 0x0F50, 0x0000},
+ {"4", 0x10D0, 0x0000},
+ {"5", 0x1350, 0x0000},
+ {"6", 0x14D0, 0x0000},
+ {"7", 0x2BD0, 0x0000},
+ {"8", 0x2D50, 0x0000},
+ {"9", 0x2ED0, 0x0000},
+ {"10", 0x3050, 0x0000},
+ {"11", 0x31D0, 0x0000},
+ {"12", 0x3350, 0x0000},
+ {"13", 0x34D0, 0x0000},
+ {"14", 0x75D0, 0x0000},
+ {"15", 0x7750, 0x0000},
+ {"16", 0x78D0, 0x0000},
+ {"17", 0x7A50, 0x0000},
+ {"18", 0x7BD0, 0x0000},
+ {"19", 0x7D50, 0x0000},
+ {"20", 0x7ED0, 0x0000},
+ {"21", 0x8050, 0x0000},
+ {"22", 0x81D0, 0x0000},
+ {"23", 0x8350, 0x0000},
+ {"24", 0x84D0, 0x0000},
+ {"25", 0x8650, 0x0000},
+ {"26", 0x87D0, 0x0000},
+ {"27", 0x8950, 0x0000},
+ {"28", 0x8AD0, 0x0000},
+ {"29", 0x8C50, 0x0000},
+ {"30", 0x8DD0, 0x0000},
+ {"31", 0x8F50, 0x0000},
+ {"32", 0x90D0, 0x0000},
+ {"33", 0x9250, 0x0000},
+ {"34", 0x93D0, 0x0000},
+ {"35", 0x9550, 0x0000},
+ {"36", 0x96D0, 0x0000},
+ {"37", 0x9850, 0x0000},
+ {"38", 0x99D0, 0x0000},
+ {"39", 0x9B50, 0x0000},
+ {"40", 0x9CD0, 0x0000},
+ {"41", 0x9E50, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA150, 0x0000},
+ {"44", 0xA2D0, 0x0000},
+ {"45", 0xA450, 0x0000},
+ {"46", 0xA5D0, 0x0000},
+ {"47", 0xA750, 0x0000},
+ {"48", 0xA8D0, 0x0000},
+ {"49", 0xAA50, 0x0000},
+ {"50", 0xABD0, 0x0000},
+ {"51", 0xAD50, 0x0000},
+ {"52", 0xAED0, 0x0000},
+ {"53", 0xB050, 0x0000},
+ {"54", 0xB1D0, 0x0000},
+ {"55", 0xB350, 0x0000},
+ {"56", 0xB4D0, 0x0000},
+ {"57", 0xB650, 0x0000},
+ {"58", 0xB7D0, 0x0000},
+ {"59", 0xB950, 0x0000},
+ {"60", 0xBAD0, 0x0000},
+ {"61", 0xBC50, 0x0000},
+ {"62", 0xBDD0, 0x0000},
+ {"63", 0xBF50, 0x0000},
+ {"64", 0xC0D0, 0x0000},
+ {"65", 0xC250, 0x0000},
+ {"66", 0xC3D0, 0x0000},
+ {"67", 0xC550, 0x0000},
+ {"68", 0xC6D0, 0x0000},
+ {"69", 0xC850, 0x0000}};
+
+
+// *** 8. Taiwan - Digital - Cable
+XC_CHANNEL Taiwan_Digital_Cable[] = {
+ {"1", 0x1250, 0x0000},
+ {"2", 0x0DD0, 0x0000},
+ {"3", 0x0F50, 0x0000},
+ {"4", 0x10D0, 0x0000},
+ {"5", 0x1350, 0x0000},
+ {"6", 0x14D0, 0x0000},
+ {"7", 0x2BD0, 0x0000},
+ {"8", 0x2D50, 0x0000},
+ {"9", 0x2ED0, 0x0000},
+ {"10", 0x3050, 0x0000},
+ {"11", 0x31D0, 0x0000},
+ {"12", 0x3350, 0x0000},
+ {"13", 0x34D0, 0x0000},
+ {"14", 0x1E50, 0x0000},
+ {"15", 0x1FD0, 0x0000},
+ {"16", 0x2150, 0x0000},
+ {"17", 0x22D0, 0x0000},
+ {"18", 0x2450, 0x0000},
+ {"19", 0x25D0, 0x0000},
+ {"20", 0x2750, 0x0000},
+ {"21", 0x28D0, 0x0000},
+ {"22", 0x2A50, 0x0000},
+ {"23", 0x3650, 0x0000},
+ {"24", 0x37D0, 0x0000},
+ {"25", 0x3950, 0x0000},
+ {"26", 0x3AD0, 0x0000},
+ {"27", 0x3C50, 0x0000},
+ {"28", 0x3DD0, 0x0000},
+ {"29", 0x3F50, 0x0000},
+ {"30", 0x40D0, 0x0000},
+ {"31", 0x4250, 0x0000},
+ {"32", 0x43D0, 0x0000},
+ {"33", 0x4550, 0x0000},
+ {"34", 0x46D0, 0x0000},
+ {"35", 0x4850, 0x0000},
+ {"36", 0x49D0, 0x0000},
+ {"37", 0x4B50, 0x0000},
+ {"38", 0x4CD0, 0x0000},
+ {"39", 0x4E50, 0x0000},
+ {"40", 0x4FD0, 0x0000},
+ {"41", 0x5150, 0x0000},
+ {"42", 0x52D0, 0x0000},
+ {"43", 0x5450, 0x0000},
+ {"44", 0x55D0, 0x0000},
+ {"45", 0x5750, 0x0000},
+ {"46", 0x58D0, 0x0000},
+ {"47", 0x5A50, 0x0000},
+ {"48", 0x5BD0, 0x0000},
+ {"49", 0x5D50, 0x0000},
+ {"50", 0x5ED0, 0x0000},
+ {"51", 0x6050, 0x0000},
+ {"52", 0x61D0, 0x0000},
+ {"53", 0x6350, 0x0000},
+ {"54", 0x64D0, 0x0000},
+ {"55", 0x6650, 0x0000},
+ {"56", 0x67D0, 0x0000},
+ {"57", 0x6950, 0x0000},
+ {"58", 0x6AD0, 0x0000},
+ {"59", 0x6C50, 0x0000},
+ {"60", 0x6DD0, 0x0000},
+ {"61", 0x6F50, 0x0000},
+ {"62", 0x70D0, 0x0000},
+ {"63", 0x7250, 0x0000},
+ {"64", 0x73D0, 0x0000},
+ {"65", 0x7550, 0x0000},
+ {"66", 0x76D0, 0x0000},
+ {"67", 0x7850, 0x0000},
+ {"68", 0x79D0, 0x0000},
+ {"69", 0x7B50, 0x0000},
+ {"70", 0x7CD0, 0x0000},
+ {"71", 0x7E50, 0x0000},
+ {"72", 0x7FD0, 0x0000},
+ {"73", 0x8150, 0x0000},
+ {"74", 0x82D0, 0x0000},
+ {"75", 0x8450, 0x0000},
+ {"76", 0x85D0, 0x0000},
+ {"77", 0x8750, 0x0000},
+ {"78", 0x88D0, 0x0000},
+ {"79", 0x8A50, 0x0000},
+ {"80", 0x8BD0, 0x0000},
+ {"81", 0x8D50, 0x0000},
+ {"82", 0x8ED0, 0x0000},
+ {"83", 0x9050, 0x0000},
+ {"84", 0x91D0, 0x0000},
+ {"85", 0x9350, 0x0000},
+ {"86", 0x94D0, 0x0000},
+ {"87", 0x9650, 0x0000},
+ {"88", 0x97D0, 0x0000},
+ {"89", 0x9950, 0x0000},
+ {"90", 0x9AD0, 0x0000},
+ {"91", 0x9C50, 0x0000},
+ {"92", 0x9DD0, 0x0000},
+ {"93", 0x9F50, 0x0000},
+ {"94", 0xA0D0, 0x0000},
+ {"95", 0x16D0, 0x0000},
+ {"96", 0x1850, 0x0000},
+ {"97", 0x19D0, 0x0000},
+ {"98", 0x1B51, 0x0000},
+ {"99", 0x1CD1, 0x0000},
+ {"100", 0xA250, 0x0000},
+ {"101", 0xA3D0, 0x0000},
+ {"102", 0xA550, 0x0000},
+ {"103", 0xA6D0, 0x0000},
+ {"104", 0xA850, 0x0000},
+ {"105", 0xA9D0, 0x0000},
+ {"106", 0xAB50, 0x0000},
+ {"107", 0xACD0, 0x0000},
+ {"108", 0xAE50, 0x0000},
+ {"109", 0xAFD0, 0x0000},
+ {"110", 0xB150, 0x0000},
+ {"111", 0xB2D0, 0x0000},
+ {"112", 0xB450, 0x0000},
+ {"113", 0xB5D0, 0x0000},
+ {"114", 0xB750, 0x0000},
+ {"115", 0xB8D0, 0x0000},
+ {"116", 0xBA50, 0x0000},
+ {"117", 0xBBD0, 0x0000},
+ {"118", 0xBD50, 0x0000},
+ {"119", 0xBED0, 0x0000},
+ {"120", 0xC050, 0x0000},
+ {"121", 0xC1D0, 0x0000},
+ {"122", 0xC350, 0x0000},
+ {"123", 0xC4D0, 0x0000},
+ {"124", 0xC650, 0x0000},
+ {"125", 0xC7D0, 0x0000},
+ {"126", 0xC950, 0x0000},
+ {"127", 0xCAD0, 0x0000},
+ {"128", 0xCC50, 0x0000},
+ {"129", 0xCDD0, 0x0000},
+ {"130", 0xCF50, 0x0000},
+ {"131", 0xD0D0, 0x0000},
+ {"132", 0xD250, 0x0000},
+ {"133", 0xD3D0, 0x0000},
+ {"134", 0xD550, 0x0000},
+ {"135", 0xD6D0, 0x0000}};
+
+
+// *** 9. Japan - Analog - Air
+XC_CHANNEL Japan_Analog_Air[] = {
+ {"1", 0x16D0, 0x0000},
+ {"2", 0x1850, 0x0000},
+ {"3", 0x19D0, 0x0000},
+ {"4", 0x2AD0, 0x0000},
+ {"5", 0x2C50, 0x0000},
+ {"6", 0x2DD0, 0x0000},
+ {"7", 0x2F50, 0x0000},
+ {"8", 0x3050, 0x0000},
+ {"9", 0x31D0, 0x0000},
+ {"10", 0x3350, 0x0000},
+ {"11", 0x34D0, 0x0000},
+ {"12", 0x3650, 0x0000},
+ {"13", 0x75D0, 0x0000},
+ {"14", 0x7750, 0x0000},
+ {"15", 0x78D0, 0x0000},
+ {"16", 0x7A50, 0x0000},
+ {"17", 0x7BD0, 0x0000},
+ {"18", 0x7D50, 0x0000},
+ {"19", 0x7ED0, 0x0000},
+ {"20", 0x8050, 0x0000},
+ {"21", 0x81D0, 0x0000},
+ {"22", 0x8350, 0x0000},
+ {"23", 0x84D0, 0x0000},
+ {"24", 0x8650, 0x0000},
+ {"25", 0x87D0, 0x0000},
+ {"26", 0x8950, 0x0000},
+ {"27", 0x8AD0, 0x0000},
+ {"28", 0x8C50, 0x0000},
+ {"29", 0x8DD0, 0x0000},
+ {"30", 0x8F50, 0x0000},
+ {"31", 0x90D0, 0x0000},
+ {"32", 0x9250, 0x0000},
+ {"33", 0x93D0, 0x0000},
+ {"34", 0x9550, 0x0000},
+ {"35", 0x96D0, 0x0000},
+ {"36", 0x9850, 0x0000},
+ {"37", 0x99D0, 0x0000},
+ {"38", 0x9B50, 0x0000},
+ {"39", 0x9CD0, 0x0000},
+ {"40", 0x9E50, 0x0000},
+ {"41", 0x9FD0, 0x0000},
+ {"42", 0xA150, 0x0000},
+ {"43", 0xA2D0, 0x0000},
+ {"44", 0xA450, 0x0000},
+ {"45", 0xA5D0, 0x0000},
+ {"46", 0xA750, 0x0000},
+ {"47", 0xA8D0, 0x0000},
+ {"48", 0xAA50, 0x0000},
+ {"49", 0xABD0, 0x0000},
+ {"50", 0xAD50, 0x0000},
+ {"51", 0xAED0, 0x0000},
+ {"52", 0xB050, 0x0000},
+ {"53", 0xB1D0, 0x0000},
+ {"54", 0xB350, 0x0000},
+ {"55", 0xB4D0, 0x0000},
+ {"56", 0xB650, 0x0000},
+ {"57", 0xB7D0, 0x0000},
+ {"58", 0xB950, 0x0000},
+ {"59", 0xBAD0, 0x0000},
+ {"60", 0xBC50, 0x0000},
+ {"61", 0xBDD0, 0x0000},
+ {"62", 0xBF50, 0x0000}};
+
+
+// *** 10. Japan - Analog - Cable
+XC_CHANNEL Japan_Analog_Cable[] = {
+ {"1", 0x16D0, 0x0000},
+ {"2", 0x1850, 0x0000},
+ {"3", 0x19D0, 0x0000},
+ {"M1", 0x1B50, 0x0000},
+ {"M2", 0x1CD0, 0x0000},
+ {"M3", 0x1E50, 0x0000},
+ {"M4", 0x1FD0, 0x0000},
+ {"M5", 0x2150, 0x0000},
+ {"M6", 0x22D0, 0x0000},
+ {"M7", 0x2450, 0x0000},
+ {"M8", 0x25D0, 0x0000},
+ {"M9", 0x2750, 0x0000},
+ {"M10", 0x2950, 0x0000},
+ {"4", 0x2AD0, 0x0000},
+ {"5", 0x2C50, 0x0000},
+ {"6", 0x2DD0, 0x0000},
+ {"7", 0x2F50, 0x0000},
+ {"8", 0x3050, 0x0000},
+ {"9", 0x31D0, 0x0000},
+ {"10", 0x3350, 0x0000},
+ {"11", 0x34D0, 0x0000},
+ {"S1", 0x37D0, 0x0000},
+ {"S2", 0x39D0, 0x0000},
+ {"S3", 0x3B50, 0x0000},
+ {"S4", 0x3CD0, 0x0000},
+ {"S5", 0x3E50, 0x0000},
+ {"S6", 0x3F50, 0x0000},
+ {"S7", 0x40D0, 0x0000},
+ {"S8", 0x4250, 0x0000},
+ {"S9", 0x43D0, 0x0000},
+ {"S10", 0x4550, 0x0000},
+ {"S11", 0x46D0, 0x0000},
+ {"S12", 0x4850, 0x0000},
+ {"S13", 0x49D0, 0x0000},
+ {"S14", 0x4B50, 0x0000},
+ {"S15", 0x4CD0, 0x0000},
+ {"S16", 0x4E50, 0x0000},
+ {"S17", 0x4FD0, 0x0000},
+ {"S18", 0x5150, 0x0000},
+ {"S19", 0x52D0, 0x0000},
+ {"S20", 0x5450, 0x0000},
+ {"S21", 0x55D0, 0x0000},
+ {"S22", 0x5750, 0x0000},
+ {"S23", 0x58D0, 0x0000},
+ {"S24", 0x5A50, 0x0000},
+ {"S25", 0x5BD0, 0x0000},
+ {"S26", 0x5D50, 0x0000},
+ {"S27", 0x5ED0, 0x0000},
+ {"S28", 0x6050, 0x0000},
+ {"S29", 0x61D0, 0x0000},
+ {"S30", 0x6350, 0x0000},
+ {"S31", 0x64D0, 0x0000},
+ {"S32", 0x6650, 0x0000},
+ {"S33", 0x67D0, 0x0000},
+ {"S34", 0x6950, 0x0000},
+ {"S35", 0x6AD0, 0x0000},
+ {"S36", 0x6C50, 0x0000},
+ {"S37", 0x6DD0, 0x0000},
+ {"S38", 0x6F50, 0x0000},
+ {"S39", 0x70D0, 0x0000},
+ {"S40", 0x7250, 0x0000},
+ {"S41", 0x73D0, 0x0000}};
+
+
+// *** 11. Japan - Digital - Air
+XC_CHANNEL Japan_Digital_Air[] = {
+ {"1", 0x16D0, 0x0000},
+ {"2", 0x1850, 0x0000},
+ {"3", 0x19D0, 0x0000},
+ {"4", 0x2AD0, 0x0000},
+ {"5", 0x2C50, 0x0000},
+ {"6", 0x2DD0, 0x0000},
+ {"7", 0x2F50, 0x0000},
+ {"8", 0x3050, 0x0000},
+ {"9", 0x31D0, 0x0000},
+ {"10", 0x3350, 0x0000},
+ {"11", 0x34D0, 0x0000},
+ {"12", 0x3650, 0x0000},
+ {"13", 0x75D0, 0x0000},
+ {"14", 0x7750, 0x0000},
+ {"15", 0x78D0, 0x0000},
+ {"16", 0x7A50, 0x0000},
+ {"17", 0x7BD0, 0x0000},
+ {"18", 0x7D50, 0x0000},
+ {"19", 0x7ED0, 0x0000},
+ {"20", 0x8050, 0x0000},
+ {"21", 0x81D0, 0x0000},
+ {"22", 0x8350, 0x0000},
+ {"23", 0x84D0, 0x0000},
+ {"24", 0x8650, 0x0000},
+ {"25", 0x87D0, 0x0000},
+ {"26", 0x8950, 0x0000},
+ {"27", 0x8AD0, 0x0000},
+ {"28", 0x8C50, 0x0000},
+ {"29", 0x8DD0, 0x0000},
+ {"30", 0x8F50, 0x0000},
+ {"31", 0x90D0, 0x0000},
+ {"32", 0x9250, 0x0000},
+ {"33", 0x93D0, 0x0000},
+ {"34", 0x9550, 0x0000},
+ {"35", 0x96D0, 0x0000},
+ {"36", 0x9850, 0x0000},
+ {"37", 0x99D0, 0x0000},
+ {"38", 0x9B50, 0x0000},
+ {"39", 0x9CD0, 0x0000},
+ {"40", 0x9E50, 0x0000},
+ {"41", 0x9FD0, 0x0000},
+ {"42", 0xA150, 0x0000},
+ {"43", 0xA2D0, 0x0000},
+ {"44", 0xA450, 0x0000},
+ {"45", 0xA5D0, 0x0000},
+ {"46", 0xA750, 0x0000},
+ {"47", 0xA8D0, 0x0000},
+ {"48", 0xAA50, 0x0000},
+ {"49", 0xABD0, 0x0000},
+ {"50", 0xAD50, 0x0000},
+ {"51", 0xAED0, 0x0000},
+ {"52", 0xB050, 0x0000},
+ {"53", 0xB1D0, 0x0000},
+ {"54", 0xB350, 0x0000},
+ {"55", 0xB4D0, 0x0000},
+ {"56", 0xB650, 0x0000},
+ {"57", 0xB7D0, 0x0000},
+ {"58", 0xB950, 0x0000},
+ {"59", 0xBAD0, 0x0000},
+ {"60", 0xBC50, 0x0000},
+ {"61", 0xBDD0, 0x0000},
+ {"62", 0xBF50, 0x0000}};
+
+
+// *** 12. Japan - Digital - Cable
+XC_CHANNEL Japan_Digital_Cable[] = {
+ {"1", 0x16D0, 0x0000},
+ {"2", 0x1850, 0x0000},
+ {"3", 0x19D0, 0x0000},
+ {"M1", 0x1B50, 0x0000},
+ {"M2", 0x1CD0, 0x0000},
+ {"M3", 0x1E50, 0x0000},
+ {"M4", 0x1FD0, 0x0000},
+ {"M5", 0x2150, 0x0000},
+ {"M6", 0x22D0, 0x0000},
+ {"M7", 0x2450, 0x0000},
+ {"M8", 0x25D0, 0x0000},
+ {"M9", 0x2750, 0x0000},
+ {"M10", 0x2950, 0x0000},
+ {"4", 0x2AD0, 0x0000},
+ {"5", 0x2C50, 0x0000},
+ {"6", 0x2DD0, 0x0000},
+ {"7", 0x2F50, 0x0000},
+ {"8", 0x3050, 0x0000},
+ {"9", 0x31D0, 0x0000},
+ {"10", 0x3350, 0x0000},
+ {"11", 0x34D0, 0x0000},
+ {"S1", 0x37D0, 0x0000},
+ {"S2", 0x39D0, 0x0000},
+ {"S3", 0x3B50, 0x0000},
+ {"S4", 0x3CD0, 0x0000},
+ {"S5", 0x3E50, 0x0000},
+ {"S6", 0x3F50, 0x0000},
+ {"S7", 0x40D0, 0x0000},
+ {"S8", 0x4250, 0x0000},
+ {"S9", 0x43D0, 0x0000},
+ {"S10", 0x4550, 0x0000},
+ {"S11", 0x46D0, 0x0000},
+ {"S12", 0x4850, 0x0000},
+ {"S13", 0x49D0, 0x0000},
+ {"S14", 0x4B50, 0x0000},
+ {"S15", 0x4CD0, 0x0000},
+ {"S16", 0x4E50, 0x0000},
+ {"S17", 0x4FD0, 0x0000},
+ {"S18", 0x5150, 0x0000},
+ {"S19", 0x52D0, 0x0000},
+ {"S20", 0x5450, 0x0000},
+ {"S21", 0x55D0, 0x0000},
+ {"S22", 0x5750, 0x0000},
+ {"S23", 0x58D0, 0x0000},
+ {"S24", 0x5A50, 0x0000},
+ {"S25", 0x5BD0, 0x0000},
+ {"S26", 0x5D50, 0x0000},
+ {"S27", 0x5ED0, 0x0000},
+ {"S28", 0x6050, 0x0000},
+ {"S29", 0x61D0, 0x0000},
+ {"S30", 0x6350, 0x0000},
+ {"S31", 0x64D0, 0x0000},
+ {"S32", 0x6650, 0x0000},
+ {"S33", 0x67D0, 0x0000},
+ {"S34", 0x6950, 0x0000},
+ {"S35", 0x6AD0, 0x0000},
+ {"S36", 0x6C50, 0x0000},
+ {"S37", 0x6DD0, 0x0000},
+ {"S38", 0x6F50, 0x0000},
+ {"S39", 0x70D0, 0x0000},
+ {"S40", 0x7250, 0x0000},
+ {"S41", 0x73D0, 0x0000}};
+
+
+// *** 13. CCIR - Analog - Air
+XC_CHANNEL CCIR_Analog_Air[] = {
+ {"2", 0x0C10, 0x0000},
+ {"3", 0x0DD0, 0x0000},
+ {"4", 0x0F90, 0x0000},
+ {"5", 0x2BD0, 0x0000},
+ {"6", 0x2D90, 0x0000},
+ {"7", 0x2F50, 0x0000},
+ {"8", 0x3110, 0x0000},
+ {"9", 0x32D0, 0x0000},
+ {"10", 0x3490, 0x0000},
+ {"11", 0x3650, 0x0000},
+ {"12", 0x3810, 0x0000},
+ {"21", 0x75D0, 0x0000},
+ {"22", 0x77D0, 0x0000},
+ {"23", 0x79D0, 0x0000},
+ {"24", 0x7BD0, 0x0000},
+ {"25", 0x7DD0, 0x0000},
+ {"26", 0x7FD0, 0x0000},
+ {"27", 0x81D0, 0x0000},
+ {"28", 0x83D0, 0x0000},
+ {"29", 0x85D0, 0x0000},
+ {"30", 0x87D0, 0x0000},
+ {"31", 0x89D0, 0x0000},
+ {"32", 0x8BD0, 0x0000},
+ {"33", 0x8DD0, 0x0000},
+ {"34", 0x8FD0, 0x0000},
+ {"35", 0x91D0, 0x0000},
+ {"36", 0x93D0, 0x0000},
+ {"37", 0x95D0, 0x0000},
+ {"38", 0x97D0, 0x0000},
+ {"39", 0x99D0, 0x0000},
+ {"40", 0x9BD0, 0x0000},
+ {"41", 0x9DD0, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA1D0, 0x0000},
+ {"44", 0xA3D0, 0x0000},
+ {"45", 0xA5D0, 0x0000},
+ {"46", 0xA7D0, 0x0000},
+ {"47", 0xA9D0, 0x0000},
+ {"48", 0xABD0, 0x0000},
+ {"49", 0xADD0, 0x0000},
+ {"50", 0xAFD0, 0x0000},
+ {"51", 0xB1D0, 0x0000},
+ {"52", 0xB3D0, 0x0000},
+ {"53", 0xB5D0, 0x0000},
+ {"54", 0xB7D0, 0x0000},
+ {"55", 0xB9D0, 0x0000},
+ {"56", 0xBBD0, 0x0000},
+ {"57", 0xBDD0, 0x0000},
+ {"58", 0xBFD0, 0x0000},
+ {"59", 0xC1D0, 0x0000},
+ {"60", 0xC3D0, 0x0000},
+ {"61", 0xC5D0, 0x0000},
+ {"62", 0xC7D0, 0x0000},
+ {"63", 0xC9D0, 0x0000},
+ {"64", 0xCBD0, 0x0000},
+ {"65", 0xCDD0, 0x0000},
+ {"66", 0xCFD0, 0x0000},
+ {"67", 0xD1D0, 0x0000},
+ {"68", 0xD3D0, 0x0000},
+ {"69", 0xD5D0, 0x0000}};
+
+
+// *** 14. CCIR - Analog - Cable
+XC_CHANNEL CCIR_Analog_Cable[] = {
+ {"E2", 0x0C10, 0x0000},
+ {"E3", 0x0DD0, 0x0000},
+ {"E4", 0x0F90, 0x0000},
+ {"X", 0x1150, 0x0000},
+ {"Y", 0x1310, 0x0000},
+ {"Z", 0x14D0, 0x0000},
+ {"Z", 0x1690, 0x0000},
+ {"Z", 0x1850, 0x0000},
+ {"S1", 0x1A50, 0x0000},
+ {"S2", 0x1C10, 0x0000},
+ {"S3", 0x1DD0, 0x0000},
+ {"S4", 0x1F90, 0x0000},
+ {"S5", 0x2150, 0x0000},
+ {"S6", 0x2310, 0x0000},
+ {"S7", 0x24D0, 0x0000},
+ {"S8", 0x2690, 0x0000},
+ {"S9", 0x2850, 0x0000},
+ {"S10", 0x2A10, 0x0000},
+ {"E5", 0x2BD0, 0x0000},
+ {"E6", 0x2D90, 0x0000},
+ {"E7", 0x2F50, 0x0000},
+ {"E8", 0x3110, 0x0000},
+ {"E9", 0x32D0, 0x0000},
+ {"E10", 0x3490, 0x0000},
+ {"E11", 0x3650, 0x0000},
+ {"E12", 0x3810, 0x0000},
+ {"S11", 0x39D0, 0x0000},
+ {"S12", 0x3B90, 0x0000},
+ {"S13", 0x3D50, 0x0000},
+ {"S14", 0x3F10, 0x0000},
+ {"S15", 0x40D0, 0x0000},
+ {"S16", 0x4290, 0x0000},
+ {"S17", 0x4450, 0x0000},
+ {"S18", 0x4610, 0x0000},
+ {"S19", 0x47D0, 0x0000},
+ {"S20", 0x4990, 0x0000},
+ {"S21", 0x4BD0, 0x0000},
+ {"S22", 0x4DD0, 0x0000},
+ {"S23", 0x4FD0, 0x0000},
+ {"S24", 0x51D0, 0x0000},
+ {"S25", 0x53D0, 0x0000},
+ {"S26", 0x55D0, 0x0000},
+ {"S27", 0x57D0, 0x0000},
+ {"S28", 0x59D0, 0x0000},
+ {"S29", 0x5BD0, 0x0000},
+ {"S30", 0x5DD0, 0x0000},
+ {"S31", 0x5FD0, 0x0000},
+ {"S32", 0x61D0, 0x0000},
+ {"S33", 0x63D0, 0x0000},
+ {"S34", 0x65D0, 0x0000},
+ {"S35", 0x67D0, 0x0000},
+ {"S36", 0x69D0, 0x0000},
+ {"S37", 0x6BD0, 0x0000},
+ {"S38", 0x6DD0, 0x0000},
+ {"S39", 0x6FD0, 0x0000},
+ {"S40", 0x71D0, 0x0000},
+ {"S41", 0x73D0, 0x0000}};
+
+
+// *** 15. CCIR - Digital - Air
+XC_CHANNEL CCIR_Digital_Air[] = {
+ {"2", 0x0C10, 0x0000},
+ {"3", 0x0DD0, 0x0000},
+ {"4", 0x0F90, 0x0000},
+ {"5", 0x2BD0, 0x0000},
+ {"6", 0x2D90, 0x0000},
+ {"7", 0x2F50, 0x0000},
+ {"8", 0x3110, 0x0000},
+ {"9", 0x32D0, 0x0000},
+ {"10", 0x3490, 0x0000},
+ {"11", 0x3650, 0x0000},
+ {"12", 0x3810, 0x0000},
+ {"21", 0x75D0, 0x0000},
+ {"22", 0x77D0, 0x0000},
+ {"23", 0x79D0, 0x0000},
+ {"24", 0x7BD0, 0x0000},
+ {"25", 0x7DD0, 0x0000},
+ {"26", 0x7FD0, 0x0000},
+ {"27", 0x81D0, 0x0000},
+ {"28", 0x83D0, 0x0000},
+ {"29", 0x85D0, 0x0000},
+ {"30", 0x87D0, 0x0000},
+ {"31", 0x89D0, 0x0000},
+ {"32", 0x8BD0, 0x0000},
+ {"33", 0x8DD0, 0x0000},
+ {"34", 0x8FD0, 0x0000},
+ {"35", 0x91D0, 0x0000},
+ {"36", 0x93D0, 0x0000},
+ {"37", 0x95D0, 0x0000},
+ {"38", 0x97D0, 0x0000},
+ {"39", 0x99D0, 0x0000},
+ {"40", 0x9BD0, 0x0000},
+ {"41", 0x9DD0, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA1D0, 0x0000},
+ {"44", 0xA3D0, 0x0000},
+ {"45", 0xA5D0, 0x0000},
+ {"46", 0xA7D0, 0x0000},
+ {"47", 0xA9D0, 0x0000},
+ {"48", 0xABD0, 0x0000},
+ {"49", 0xADD0, 0x0000},
+ {"50", 0xAFD0, 0x0000},
+ {"51", 0xB1D0, 0x0000},
+ {"52", 0xB3D0, 0x0000},
+ {"53", 0xB5D0, 0x0000},
+ {"54", 0xB7D0, 0x0000},
+ {"55", 0xB9D0, 0x0000},
+ {"56", 0xBBD0, 0x0000},
+ {"57", 0xBDD0, 0x0000},
+ {"58", 0xBFD0, 0x0000},
+ {"59", 0xC1D0, 0x0000},
+ {"60", 0xC3D0, 0x0000},
+ {"61", 0xC5D0, 0x0000},
+ {"62", 0xC7D0, 0x0000},
+ {"63", 0xC9D0, 0x0000},
+ {"64", 0xCBD0, 0x0000},
+ {"65", 0xCDD0, 0x0000},
+ {"66", 0xCFD0, 0x0000},
+ {"67", 0xD1D0, 0x0000},
+ {"68", 0xD3D0, 0x0000},
+ {"69", 0xD5D0, 0x0000}};
+
+
+// *** 16. CCIR - Digital - Cable
+XC_CHANNEL CCIR_Digital_Cable[] = {
+ {"E2", 0x0C10, 0x0000},
+ {"E3", 0x0DD0, 0x0000},
+ {"E4", 0x0F90, 0x0000},
+ {"X", 0x1150, 0x0000},
+ {"Y", 0x1310, 0x0000},
+ {"Z", 0x14D0, 0x0000},
+ {"Z", 0x1690, 0x0000},
+ {"Z", 0x1850, 0x0000},
+ {"S1", 0x1A50, 0x0000},
+ {"S2", 0x1C10, 0x0000},
+ {"S3", 0x1DD0, 0x0000},
+ {"S4", 0x1F90, 0x0000},
+ {"S5", 0x2150, 0x0000},
+ {"S6", 0x2310, 0x0000},
+ {"S7", 0x24D0, 0x0000},
+ {"S8", 0x2690, 0x0000},
+ {"S9", 0x2850, 0x0000},
+ {"S10", 0x2A10, 0x0000},
+ {"E5", 0x2BD0, 0x0000},
+ {"E6", 0x2D90, 0x0000},
+ {"E7", 0x2F50, 0x0000},
+ {"E8", 0x3110, 0x0000},
+ {"E9", 0x32D0, 0x0000},
+ {"E10", 0x3490, 0x0000},
+ {"E11", 0x3650, 0x0000},
+ {"E12", 0x3810, 0x0000},
+ {"S11", 0x39D0, 0x0000},
+ {"S12", 0x3B90, 0x0000},
+ {"S13", 0x3D50, 0x0000},
+ {"S14", 0x3F10, 0x0000},
+ {"S15", 0x40D0, 0x0000},
+ {"S16", 0x4290, 0x0000},
+ {"S17", 0x4450, 0x0000},
+ {"S18", 0x4610, 0x0000},
+ {"S19", 0x47D0, 0x0000},
+ {"S20", 0x4990, 0x0000},
+ {"S21", 0x4BD0, 0x0000},
+ {"S22", 0x4DD0, 0x0000},
+ {"S23", 0x4FD0, 0x0000},
+ {"S24", 0x51D0, 0x0000},
+ {"S25", 0x53D0, 0x0000},
+ {"S26", 0x55D0, 0x0000},
+ {"S27", 0x57D0, 0x0000},
+ {"S28", 0x59D0, 0x0000},
+ {"S29", 0x5BD0, 0x0000},
+ {"S30", 0x5DD0, 0x0000},
+ {"S31", 0x5FD0, 0x0000},
+ {"S32", 0x61D0, 0x0000},
+ {"S33", 0x63D0, 0x0000},
+ {"S34", 0x65D0, 0x0000},
+ {"S35", 0x67D0, 0x0000},
+ {"S36", 0x69D0, 0x0000},
+ {"S37", 0x6BD0, 0x0000},
+ {"S38", 0x6DD0, 0x0000},
+ {"S39", 0x6FD0, 0x0000},
+ {"S40", 0x71D0, 0x0000},
+ {"S41", 0x73D0, 0x0000}};
+
+
+// *** 17. India - Analog - Air
+XC_CHANNEL India_Analog_Air[] = {
+ {"2", 0x0C10, 0x0000},
+ {"3", 0x0DD0, 0x0000},
+ {"4", 0x0F90, 0x0000},
+ {"X", 0x1150, 0x0000},
+ {"Y", 0x1310, 0x0000},
+ {"Z", 0x14D0, 0x0000},
+ {"Z", 0x1690, 0x0000},
+ {"Z", 0x1850, 0x0000},
+ {"S1", 0x1A50, 0x0000},
+ {"S2", 0x1C10, 0x0000},
+ {"S3", 0x1DD0, 0x0000},
+ {"S4", 0x1F90, 0x0000},
+ {"S5", 0x2150, 0x0000},
+ {"S6", 0x2310, 0x0000},
+ {"S7", 0x24D0, 0x0000},
+ {"S8", 0x2690, 0x0000},
+ {"S9", 0x2850, 0x0000},
+ {"S10", 0x2A10, 0x0000},
+ {"5", 0x2BD0, 0x0000},
+ {"6", 0x2D90, 0x0000},
+ {"7", 0x2F50, 0x0000},
+ {"8", 0x3110, 0x0000},
+ {"9", 0x32D0, 0x0000},
+ {"10", 0x3490, 0x0000},
+ {"11", 0x3650, 0x0000},
+ {"12", 0x3810, 0x0000},
+ {"S11", 0x39D0, 0x0000},
+ {"S12", 0x3B90, 0x0000},
+ {"S13", 0x3D50, 0x0000},
+ {"S14", 0x3F10, 0x0000},
+ {"S15", 0x40D0, 0x0000},
+ {"S16", 0x4290, 0x0000},
+ {"S17", 0x4450, 0x0000},
+ {"S18", 0x4610, 0x0000},
+ {"S19", 0x47D0, 0x0000},
+ {"S20", 0x4990, 0x0000},
+ {"S21", 0x4BD0, 0x0000},
+ {"S22", 0x4DD0, 0x0000},
+ {"S23", 0x4FD0, 0x0000},
+ {"S24", 0x51D0, 0x0000},
+ {"S25", 0x53D0, 0x0000},
+ {"S26", 0x55D0, 0x0000},
+ {"S27", 0x57D0, 0x0000},
+ {"S28", 0x59D0, 0x0000},
+ {"S29", 0x5BD0, 0x0000},
+ {"S30", 0x5DD0, 0x0000},
+ {"S31", 0x5FD0, 0x0000},
+ {"S32", 0x61D0, 0x0000},
+ {"S33", 0x63D0, 0x0000},
+ {"S34", 0x65D0, 0x0000},
+ {"S35", 0x67D0, 0x0000},
+ {"S36", 0x69D0, 0x0000},
+ {"S37", 0x6BD0, 0x0000},
+ {"S38", 0x6DD0, 0x0000},
+ {"S39", 0x6FD0, 0x0000},
+ {"S40", 0x71D0, 0x0000},
+ {"S41", 0x73D0, 0x0000},
+ {"21", 0x75D0, 0x0000},
+ {"22", 0x77D0, 0x0000},
+ {"23", 0x79D0, 0x0000},
+ {"24", 0x7BD0, 0x0000},
+ {"25", 0x7DD0, 0x0000},
+ {"26", 0x7FD0, 0x0000},
+ {"27", 0x81D0, 0x0000},
+ {"28", 0x83D0, 0x0000},
+ {"29", 0x85D0, 0x0000},
+ {"30", 0x87D0, 0x0000},
+ {"31", 0x89D0, 0x0000},
+ {"32", 0x8BD0, 0x0000},
+ {"33", 0x8DD0, 0x0000},
+ {"34", 0x8FD0, 0x0000},
+ {"35", 0x91D0, 0x0000},
+ {"36", 0x93D0, 0x0000},
+ {"37", 0x95D0, 0x0000},
+ {"38", 0x97D0, 0x0000},
+ {"39", 0x99D0, 0x0000},
+ {"40", 0x9BD0, 0x0000},
+ {"41", 0x9DD0, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA1D0, 0x0000},
+ {"44", 0xA3D0, 0x0000},
+ {"45", 0xA5D0, 0x0000},
+ {"46", 0xA7D0, 0x0000},
+ {"47", 0xA9D0, 0x0000},
+ {"48", 0xABD0, 0x0000},
+ {"49", 0xADD0, 0x0000},
+ {"50", 0xAFD0, 0x0000},
+ {"51", 0xB1D0, 0x0000},
+ {"52", 0xB3D0, 0x0000},
+ {"53", 0xB5D0, 0x0000},
+ {"54", 0xB7D0, 0x0000},
+ {"55", 0xB9D0, 0x0000},
+ {"56", 0xBBD0, 0x0000},
+ {"57", 0xBDD0, 0x0000},
+ {"58", 0xBFD0, 0x0000},
+ {"59", 0xC1D0, 0x0000},
+ {"60", 0xC3D0, 0x0000},
+ {"61", 0xC5D0, 0x0000},
+ {"62", 0xC7D0, 0x0000},
+ {"63", 0xC9D0, 0x0000},
+ {"64", 0xCBD0, 0x0000},
+ {"65", 0xCDD0, 0x0000},
+ {"66", 0xCFD0, 0x0000},
+ {"67", 0xD1D0, 0x0000},
+ {"68", 0xD3D0, 0x0000},
+ {"69", 0xD5D0, 0x0000}};
+
+
+// *** 18. India - Analog - Cable
+XC_CHANNEL India_Analog_Cable[] = {
+ {"2", 0x0C10, 0x0000},
+ {"3", 0x0DD0, 0x0000},
+ {"4", 0x0F90, 0x0000},
+ {"X", 0x1150, 0x0000},
+ {"Y", 0x1310, 0x0000},
+ {"Z", 0x14D0, 0x0000},
+ {"Z", 0x1690, 0x0000},
+ {"Z", 0x1850, 0x0000},
+ {"S1", 0x1A50, 0x0000},
+ {"S2", 0x1C10, 0x0000},
+ {"S3", 0x1DD0, 0x0000},
+ {"S4", 0x1F90, 0x0000},
+ {"S5", 0x2150, 0x0000},
+ {"S6", 0x2310, 0x0000},
+ {"S7", 0x24D0, 0x0000},
+ {"S8", 0x2690, 0x0000},
+ {"S9", 0x2850, 0x0000},
+ {"S10", 0x2A10, 0x0000},
+ {"5", 0x2BD0, 0x0000},
+ {"6", 0x2D90, 0x0000},
+ {"7", 0x2F50, 0x0000},
+ {"8", 0x3110, 0x0000},
+ {"9", 0x32D0, 0x0000},
+ {"10", 0x3490, 0x0000},
+ {"11", 0x3650, 0x0000},
+ {"12", 0x3810, 0x0000},
+ {"S11", 0x39D0, 0x0000},
+ {"S12", 0x3B90, 0x0000},
+ {"S13", 0x3D50, 0x0000},
+ {"S14", 0x3F10, 0x0000},
+ {"S15", 0x40D0, 0x0000},
+ {"S16", 0x4290, 0x0000},
+ {"S17", 0x4450, 0x0000},
+ {"S18", 0x4610, 0x0000},
+ {"S19", 0x47D0, 0x0000},
+ {"S20", 0x4990, 0x0000},
+ {"S21", 0x4BD0, 0x0000},
+ {"S22", 0x4DD0, 0x0000},
+ {"S23", 0x4FD0, 0x0000},
+ {"S24", 0x51D0, 0x0000},
+ {"S25", 0x53D0, 0x0000},
+ {"S26", 0x55D0, 0x0000},
+ {"S27", 0x57D0, 0x0000},
+ {"S28", 0x59D0, 0x0000},
+ {"S29", 0x5BD0, 0x0000},
+ {"S30", 0x5DD0, 0x0000},
+ {"S31", 0x5FD0, 0x0000},
+ {"S32", 0x61D0, 0x0000},
+ {"S33", 0x63D0, 0x0000},
+ {"S34", 0x65D0, 0x0000},
+ {"S35", 0x67D0, 0x0000},
+ {"S36", 0x69D0, 0x0000},
+ {"S37", 0x6BD0, 0x0000},
+ {"S38", 0x6DD0, 0x0000},
+ {"S39", 0x6FD0, 0x0000},
+ {"S40", 0x71D0, 0x0000},
+ {"S41", 0x73D0, 0x0000},
+ {"21", 0x75D0, 0x0000},
+ {"22", 0x77D0, 0x0000},
+ {"23", 0x79D0, 0x0000},
+ {"24", 0x7BD0, 0x0000},
+ {"25", 0x7DD0, 0x0000},
+ {"26", 0x7FD0, 0x0000},
+ {"27", 0x81D0, 0x0000},
+ {"28", 0x83D0, 0x0000},
+ {"29", 0x85D0, 0x0000},
+ {"30", 0x87D0, 0x0000},
+ {"31", 0x89D0, 0x0000},
+ {"32", 0x8BD0, 0x0000},
+ {"33", 0x8DD0, 0x0000},
+ {"34", 0x8FD0, 0x0000},
+ {"35", 0x91D0, 0x0000},
+ {"36", 0x93D0, 0x0000},
+ {"37", 0x95D0, 0x0000},
+ {"38", 0x97D0, 0x0000},
+ {"39", 0x99D0, 0x0000},
+ {"40", 0x9BD0, 0x0000},
+ {"41", 0x9DD0, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA1D0, 0x0000},
+ {"44", 0xA3D0, 0x0000},
+ {"45", 0xA5D0, 0x0000},
+ {"46", 0xA7D0, 0x0000},
+ {"47", 0xA9D0, 0x0000},
+ {"48", 0xABD0, 0x0000},
+ {"49", 0xADD0, 0x0000},
+ {"50", 0xAFD0, 0x0000},
+ {"51", 0xB1D0, 0x0000},
+ {"52", 0xB3D0, 0x0000},
+ {"53", 0xB5D0, 0x0000},
+ {"54", 0xB7D0, 0x0000},
+ {"55", 0xB9D0, 0x0000},
+ {"56", 0xBBD0, 0x0000},
+ {"57", 0xBDD0, 0x0000},
+ {"58", 0xBFD0, 0x0000},
+ {"59", 0xC1D0, 0x0000},
+ {"60", 0xC3D0, 0x0000},
+ {"61", 0xC5D0, 0x0000},
+ {"62", 0xC7D0, 0x0000},
+ {"63", 0xC9D0, 0x0000},
+ {"64", 0xCBD0, 0x0000},
+ {"65", 0xCDD0, 0x0000},
+ {"66", 0xCFD0, 0x0000},
+ {"67", 0xD1D0, 0x0000},
+ {"68", 0xD3D0, 0x0000},
+ {"69", 0xD5D0, 0x0000}};
+
+
+// *** 19. India - Digital - Air
+XC_CHANNEL India_Digital_Air[] = {
+ {"2", 0x0C10, 0x0000},
+ {"3", 0x0DD0, 0x0000},
+ {"4", 0x0F90, 0x0000},
+ {"X", 0x1150, 0x0000},
+ {"Y", 0x1310, 0x0000},
+ {"Z", 0x14D0, 0x0000},
+ {"Z", 0x1690, 0x0000},
+ {"Z", 0x1850, 0x0000},
+ {"S1", 0x1A50, 0x0000},
+ {"S2", 0x1C10, 0x0000},
+ {"S3", 0x1DD0, 0x0000},
+ {"S4", 0x1F90, 0x0000},
+ {"S5", 0x2150, 0x0000},
+ {"S6", 0x2310, 0x0000},
+ {"S7", 0x24D0, 0x0000},
+ {"S8", 0x2690, 0x0000},
+ {"S9", 0x2850, 0x0000},
+ {"S10", 0x2A10, 0x0000},
+ {"5", 0x2BD0, 0x0000},
+ {"6", 0x2D90, 0x0000},
+ {"7", 0x2F50, 0x0000},
+ {"8", 0x3110, 0x0000},
+ {"9", 0x32D0, 0x0000},
+ {"10", 0x3490, 0x0000},
+ {"11", 0x3650, 0x0000},
+ {"12", 0x3810, 0x0000},
+ {"S11", 0x39D0, 0x0000},
+ {"S12", 0x3B90, 0x0000},
+ {"S13", 0x3D50, 0x0000},
+ {"S14", 0x3F10, 0x0000},
+ {"S15", 0x40D0, 0x0000},
+ {"S16", 0x4290, 0x0000},
+ {"S17", 0x4450, 0x0000},
+ {"S18", 0x4610, 0x0000},
+ {"S19", 0x47D0, 0x0000},
+ {"S20", 0x4990, 0x0000},
+ {"S21", 0x4BD0, 0x0000},
+ {"S22", 0x4DD0, 0x0000},
+ {"S23", 0x4FD0, 0x0000},
+ {"S24", 0x51D0, 0x0000},
+ {"S25", 0x53D0, 0x0000},
+ {"S26", 0x55D0, 0x0000},
+ {"S27", 0x57D0, 0x0000},
+ {"S28", 0x59D0, 0x0000},
+ {"S29", 0x5BD0, 0x0000},
+ {"S30", 0x5DD0, 0x0000},
+ {"S31", 0x5FD0, 0x0000},
+ {"S32", 0x61D0, 0x0000},
+ {"S33", 0x63D0, 0x0000},
+ {"S34", 0x65D0, 0x0000},
+ {"S35", 0x67D0, 0x0000},
+ {"S36", 0x69D0, 0x0000},
+ {"S37", 0x6BD0, 0x0000},
+ {"S38", 0x6DD0, 0x0000},
+ {"S39", 0x6FD0, 0x0000},
+ {"S40", 0x71D0, 0x0000},
+ {"S41", 0x73D0, 0x0000},
+ {"21", 0x75D0, 0x0000},
+ {"22", 0x77D0, 0x0000},
+ {"23", 0x79D0, 0x0000},
+ {"24", 0x7BD0, 0x0000},
+ {"25", 0x7DD0, 0x0000},
+ {"26", 0x7FD0, 0x0000},
+ {"27", 0x81D0, 0x0000},
+ {"28", 0x83D0, 0x0000},
+ {"29", 0x85D0, 0x0000},
+ {"30", 0x87D0, 0x0000},
+ {"31", 0x89D0, 0x0000},
+ {"32", 0x8BD0, 0x0000},
+ {"33", 0x8DD0, 0x0000},
+ {"34", 0x8FD0, 0x0000},
+ {"35", 0x91D0, 0x0000},
+ {"36", 0x93D0, 0x0000},
+ {"37", 0x95D0, 0x0000},
+ {"38", 0x97D0, 0x0000},
+ {"39", 0x99D0, 0x0000},
+ {"40", 0x9BD0, 0x0000},
+ {"41", 0x9DD0, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA1D0, 0x0000},
+ {"44", 0xA3D0, 0x0000},
+ {"45", 0xA5D0, 0x0000},
+ {"46", 0xA7D0, 0x0000},
+ {"47", 0xA9D0, 0x0000},
+ {"48", 0xABD0, 0x0000},
+ {"49", 0xADD0, 0x0000},
+ {"50", 0xAFD0, 0x0000},
+ {"51", 0xB1D0, 0x0000},
+ {"52", 0xB3D0, 0x0000},
+ {"53", 0xB5D0, 0x0000},
+ {"54", 0xB7D0, 0x0000},
+ {"55", 0xB9D0, 0x0000},
+ {"56", 0xBBD0, 0x0000},
+ {"57", 0xBDD0, 0x0000},
+ {"58", 0xBFD0, 0x0000},
+ {"59", 0xC1D0, 0x0000},
+ {"60", 0xC3D0, 0x0000},
+ {"61", 0xC5D0, 0x0000},
+ {"62", 0xC7D0, 0x0000},
+ {"63", 0xC9D0, 0x0000},
+ {"64", 0xCBD0, 0x0000},
+ {"65", 0xCDD0, 0x0000},
+ {"66", 0xCFD0, 0x0000},
+ {"67", 0xD1D0, 0x0000},
+ {"68", 0xD3D0, 0x0000},
+ {"69", 0xD5D0, 0x0000}};
+
+
+// *** 20. India - Digital - Cable
+XC_CHANNEL India_Digital_Cable[] = {
+ {"2", 0x0C10, 0x0000},
+ {"3", 0x0DD0, 0x0000},
+ {"4", 0x0F90, 0x0000},
+ {"X", 0x1150, 0x0000},
+ {"Y", 0x1310, 0x0000},
+ {"Z", 0x14D0, 0x0000},
+ {"Z", 0x1690, 0x0000},
+ {"Z", 0x1850, 0x0000},
+ {"S1", 0x1A50, 0x0000},
+ {"S2", 0x1C10, 0x0000},
+ {"S3", 0x1DD0, 0x0000},
+ {"S4", 0x1F90, 0x0000},
+ {"S5", 0x2150, 0x0000},
+ {"S6", 0x2310, 0x0000},
+ {"S7", 0x24D0, 0x0000},
+ {"S8", 0x2690, 0x0000},
+ {"S9", 0x2850, 0x0000},
+ {"S10", 0x2A10, 0x0000},
+ {"5", 0x2BD0, 0x0000},
+ {"6", 0x2D90, 0x0000},
+ {"7", 0x2F50, 0x0000},
+ {"8", 0x3110, 0x0000},
+ {"9", 0x32D0, 0x0000},
+ {"10", 0x3490, 0x0000},
+ {"11", 0x3650, 0x0000},
+ {"12", 0x3810, 0x0000},
+ {"S11", 0x39D0, 0x0000},
+ {"S12", 0x3B90, 0x0000},
+ {"S13", 0x3D50, 0x0000},
+ {"S14", 0x3F10, 0x0000},
+ {"S15", 0x40D0, 0x0000},
+ {"S16", 0x4290, 0x0000},
+ {"S17", 0x4450, 0x0000},
+ {"S18", 0x4610, 0x0000},
+ {"S19", 0x47D0, 0x0000},
+ {"S20", 0x4990, 0x0000},
+ {"S21", 0x4BD0, 0x0000},
+ {"S22", 0x4DD0, 0x0000},
+ {"S23", 0x4FD0, 0x0000},
+ {"S24", 0x51D0, 0x0000},
+ {"S25", 0x53D0, 0x0000},
+ {"S26", 0x55D0, 0x0000},
+ {"S27", 0x57D0, 0x0000},
+ {"S28", 0x59D0, 0x0000},
+ {"S29", 0x5BD0, 0x0000},
+ {"S30", 0x5DD0, 0x0000},
+ {"S31", 0x5FD0, 0x0000},
+ {"S32", 0x61D0, 0x0000},
+ {"S33", 0x63D0, 0x0000},
+ {"S34", 0x65D0, 0x0000},
+ {"S35", 0x67D0, 0x0000},
+ {"S36", 0x69D0, 0x0000},
+ {"S37", 0x6BD0, 0x0000},
+ {"S38", 0x6DD0, 0x0000},
+ {"S39", 0x6FD0, 0x0000},
+ {"S40", 0x71D0, 0x0000},
+ {"S41", 0x73D0, 0x0000},
+ {"21", 0x75D0, 0x0000},
+ {"22", 0x77D0, 0x0000},
+ {"23", 0x79D0, 0x0000},
+ {"24", 0x7BD0, 0x0000},
+ {"25", 0x7DD0, 0x0000},
+ {"26", 0x7FD0, 0x0000},
+ {"27", 0x81D0, 0x0000},
+ {"28", 0x83D0, 0x0000},
+ {"29", 0x85D0, 0x0000},
+ {"30", 0x87D0, 0x0000},
+ {"31", 0x89D0, 0x0000},
+ {"32", 0x8BD0, 0x0000},
+ {"33", 0x8DD0, 0x0000},
+ {"34", 0x8FD0, 0x0000},
+ {"35", 0x91D0, 0x0000},
+ {"36", 0x93D0, 0x0000},
+ {"37", 0x95D0, 0x0000},
+ {"38", 0x97D0, 0x0000},
+ {"39", 0x99D0, 0x0000},
+ {"40", 0x9BD0, 0x0000},
+ {"41", 0x9DD0, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA1D0, 0x0000},
+ {"44", 0xA3D0, 0x0000},
+ {"45", 0xA5D0, 0x0000},
+ {"46", 0xA7D0, 0x0000},
+ {"47", 0xA9D0, 0x0000},
+ {"48", 0xABD0, 0x0000},
+ {"49", 0xADD0, 0x0000},
+ {"50", 0xAFD0, 0x0000},
+ {"51", 0xB1D0, 0x0000},
+ {"52", 0xB3D0, 0x0000},
+ {"53", 0xB5D0, 0x0000},
+ {"54", 0xB7D0, 0x0000},
+ {"55", 0xB9D0, 0x0000},
+ {"56", 0xBBD0, 0x0000},
+ {"57", 0xBDD0, 0x0000},
+ {"58", 0xBFD0, 0x0000},
+ {"59", 0xC1D0, 0x0000},
+ {"60", 0xC3D0, 0x0000},
+ {"61", 0xC5D0, 0x0000},
+ {"62", 0xC7D0, 0x0000},
+ {"63", 0xC9D0, 0x0000},
+ {"64", 0xCBD0, 0x0000},
+ {"65", 0xCDD0, 0x0000},
+ {"66", 0xCFD0, 0x0000},
+ {"67", 0xD1D0, 0x0000},
+ {"68", 0xD3D0, 0x0000},
+ {"69", 0xD5D0, 0x0000}};
+
+
+// *** 21. France - Analog - Air
+XC_CHANNEL France_Analog_Air[] = {
+ {"A1", 0x0BF0, 0x0000},
+ {"B", 0x0DF0, 0x0000},
+ {"C1", 0x0F20, 0x0000},
+ {"C", 0x0FF0, 0x0000},
+ {"1", 0x2C00, 0x0000},
+ {"2", 0x2E00, 0x0000},
+ {"3", 0x3000, 0x0000},
+ {"4", 0x3200, 0x0000},
+ {"5", 0x3400, 0x0000},
+ {"6", 0x3600, 0x0000},
+ {"21", 0x75D0, 0x0000},
+ {"22", 0x77D0, 0x0000},
+ {"23", 0x79D0, 0x0000},
+ {"24", 0x7BD0, 0x0000},
+ {"25", 0x7DD0, 0x0000},
+ {"26", 0x7FD0, 0x0000},
+ {"27", 0x81D0, 0x0000},
+ {"28", 0x83D0, 0x0000},
+ {"29", 0x85D0, 0x0000},
+ {"30", 0x87D0, 0x0000},
+ {"31", 0x89D0, 0x0000},
+ {"32", 0x8BD0, 0x0000},
+ {"33", 0x8DD0, 0x0000},
+ {"34", 0x8FD0, 0x0000},
+ {"35", 0x91D0, 0x0000},
+ {"36", 0x93D0, 0x0000},
+ {"37", 0x95D0, 0x0000},
+ {"38", 0x97D0, 0x0000},
+ {"39", 0x99D0, 0x0000},
+ {"40", 0x9BD0, 0x0000},
+ {"41", 0x9DD0, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA1D0, 0x0000},
+ {"44", 0xA3D0, 0x0000},
+ {"45", 0xA5D0, 0x0000},
+ {"46", 0xA7D0, 0x0000},
+ {"47", 0xA9D0, 0x0000},
+ {"48", 0xABD0, 0x0000},
+ {"49", 0xADD0, 0x0000},
+ {"50", 0xAFD0, 0x0000},
+ {"51", 0xB1D0, 0x0000},
+ {"52", 0xB3D0, 0x0000},
+ {"53", 0xB5D0, 0x0000},
+ {"54", 0xB7D0, 0x0000},
+ {"55", 0xB9D0, 0x0000},
+ {"56", 0xBBD0, 0x0000},
+ {"57", 0xBDD0, 0x0000},
+ {"58", 0xBFD0, 0x0000},
+ {"59", 0xC1D0, 0x0000},
+ {"60", 0xC3D0, 0x0000},
+ {"61", 0xC5D0, 0x0000},
+ {"62", 0xC7D0, 0x0000},
+ {"63", 0xC9D0, 0x0000},
+ {"64", 0xCBD0, 0x0000},
+ {"65", 0xCDD0, 0x0000},
+ {"66", 0xCFD0, 0x0000},
+ {"67", 0xD1D0, 0x0000},
+ {"68", 0xD3D0, 0x0000},
+ {"69", 0xD5D0, 0x0000}};
+
+
+// *** 22. France - Analog - Cable
+XC_CHANNEL France_Analog_Cable[] = {
+ {"A1", 0x0BF0, 0x0000},
+ {"B", 0x0DF0, 0x0000},
+ {"C1", 0x0F20, 0x0000},
+ {"C", 0x0FF0, 0x0000},
+ {"1", 0x2C00, 0x0000},
+ {"2", 0x2E00, 0x0000},
+ {"3", 0x3000, 0x0000},
+ {"4", 0x3200, 0x0000},
+ {"5", 0x3400, 0x0000},
+ {"6", 0x3600, 0x0000},
+ {"SC", 0x1E00, 0x0000},
+ {"SC", 0x2000, 0x0000},
+ {"SC", 0x2200, 0x0000},
+ {"SC", 0x2400, 0x0000},
+ {"SC", 0x2600, 0x0000},
+ {"SC", 0x2800, 0x0000},
+ {"SC", 0x2A00, 0x0000},
+ {"SC", 0x3800, 0x0000},
+ {"SC", 0x3A00, 0x0000},
+ {"SC", 0x3C00, 0x0000},
+ {"SC", 0x3E00, 0x0000},
+ {"SC", 0x4000, 0x0000},
+ {"SC", 0x4200, 0x0000},
+ {"SC", 0x4400, 0x0000},
+ {"SC", 0x4600, 0x0000},
+ {"SC", 0x4800, 0x0000},
+ {"SC", 0x4BD0, 0x0000},
+ {"SC", 0x4ED0, 0x0000},
+ {"SC", 0x51D0, 0x0000},
+ {"SC", 0x54D0, 0x0000},
+ {"SC", 0x57D0, 0x0000},
+ {"SC", 0x5AD0, 0x0000},
+ {"SC", 0x5DD0, 0x0000},
+ {"SC", 0x60D0, 0x0000},
+ {"SC", 0x63D0, 0x0000},
+ {"SC", 0x66D0, 0x0000},
+ {"SC", 0x69D0, 0x0000},
+ {"SC", 0x6CD0, 0x0000},
+ {"SC", 0x6FD0, 0x0000},
+ {"SC", 0x72D0, 0x0000},
+ {"21", 0x75D0, 0x0000},
+ {"22", 0x77D0, 0x0000},
+ {"23", 0x79D0, 0x0000},
+ {"24", 0x7BD0, 0x0000},
+ {"25", 0x7DD0, 0x0000},
+ {"26", 0x7FD0, 0x0000},
+ {"27", 0x81D0, 0x0000},
+ {"28", 0x83D0, 0x0000},
+ {"29", 0x85D0, 0x0000},
+ {"30", 0x87D0, 0x0000},
+ {"31", 0x89D0, 0x0000},
+ {"32", 0x8BD0, 0x0000},
+ {"33", 0x8DD0, 0x0000},
+ {"34", 0x8FD0, 0x0000},
+ {"35", 0x91D0, 0x0000},
+ {"36", 0x93D0, 0x0000},
+ {"37", 0x95D0, 0x0000},
+ {"38", 0x97D0, 0x0000},
+ {"39", 0x99D0, 0x0000},
+ {"40", 0x9BD0, 0x0000},
+ {"41", 0x9DD0, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA1D0, 0x0000},
+ {"44", 0xA3D0, 0x0000},
+ {"45", 0xA5D0, 0x0000},
+ {"46", 0xA7D0, 0x0000},
+ {"47", 0xA9D0, 0x0000},
+ {"48", 0xABD0, 0x0000},
+ {"49", 0xADD0, 0x0000},
+ {"50", 0xAFD0, 0x0000},
+ {"51", 0xB1D0, 0x0000},
+ {"52", 0xB3D0, 0x0000},
+ {"53", 0xB5D0, 0x0000},
+ {"54", 0xB7D0, 0x0000},
+ {"55", 0xB9D0, 0x0000},
+ {"56", 0xBBD0, 0x0000},
+ {"57", 0xBDD0, 0x0000},
+ {"58", 0xBFD0, 0x0000},
+ {"59", 0xC1D0, 0x0000},
+ {"60", 0xC3D0, 0x0000},
+ {"61", 0xC5D0, 0x0000},
+ {"62", 0xC7D0, 0x0000},
+ {"63", 0xC9D0, 0x0000},
+ {"64", 0xCBD0, 0x0000},
+ {"65", 0xCDD0, 0x0000},
+ {"66", 0xCFD0, 0x0000},
+ {"67", 0xD1D0, 0x0000},
+ {"68", 0xD3D0, 0x0000},
+ {"69", 0xD5D0, 0x0000}};
+
+
+// *** 23. France - Digital - Air
+XC_CHANNEL France_Digital_Air[] = {
+ {"A1", 0x0BF0, 0x0000},
+ {"B", 0x0DF0, 0x0000},
+ {"C1", 0x0F20, 0x0000},
+ {"C", 0x0FF0, 0x0000},
+ {"1", 0x2C00, 0x0000},
+ {"2", 0x2E00, 0x0000},
+ {"3", 0x3000, 0x0000},
+ {"4", 0x3200, 0x0000},
+ {"5", 0x3400, 0x0000},
+ {"6", 0x3600, 0x0000},
+ {"21", 0x75D0, 0x0000},
+ {"22", 0x77D0, 0x0000},
+ {"23", 0x79D0, 0x0000},
+ {"24", 0x7BD0, 0x0000},
+ {"25", 0x7DD0, 0x0000},
+ {"26", 0x7FD0, 0x0000},
+ {"27", 0x81D0, 0x0000},
+ {"28", 0x83D0, 0x0000},
+ {"29", 0x85D0, 0x0000},
+ {"30", 0x87D0, 0x0000},
+ {"31", 0x89D0, 0x0000},
+ {"32", 0x8BD0, 0x0000},
+ {"33", 0x8DD0, 0x0000},
+ {"34", 0x8FD0, 0x0000},
+ {"35", 0x91D0, 0x0000},
+ {"36", 0x93D0, 0x0000},
+ {"37", 0x95D0, 0x0000},
+ {"38", 0x97D0, 0x0000},
+ {"39", 0x99D0, 0x0000},
+ {"40", 0x9BD0, 0x0000},
+ {"41", 0x9DD0, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA1D0, 0x0000},
+ {"44", 0xA3D0, 0x0000},
+ {"45", 0xA5D0, 0x0000},
+ {"46", 0xA7D0, 0x0000},
+ {"47", 0xA9D0, 0x0000},
+ {"48", 0xABD0, 0x0000},
+ {"49", 0xADD0, 0x0000},
+ {"50", 0xAFD0, 0x0000},
+ {"51", 0xB1D0, 0x0000},
+ {"52", 0xB3D0, 0x0000},
+ {"53", 0xB5D0, 0x0000},
+ {"54", 0xB7D0, 0x0000},
+ {"55", 0xB9D0, 0x0000},
+ {"56", 0xBBD0, 0x0000},
+ {"57", 0xBDD0, 0x0000},
+ {"58", 0xBFD0, 0x0000},
+ {"59", 0xC1D0, 0x0000},
+ {"60", 0xC3D0, 0x0000},
+ {"61", 0xC5D0, 0x0000},
+ {"62", 0xC7D0, 0x0000},
+ {"63", 0xC9D0, 0x0000},
+ {"64", 0xCBD0, 0x0000},
+ {"65", 0xCDD0, 0x0000},
+ {"66", 0xCFD0, 0x0000},
+ {"67", 0xD1D0, 0x0000},
+ {"68", 0xD3D0, 0x0000},
+ {"69", 0xD5D0, 0x0000}};
+
+
+// *** 24. France - Digital - Cable
+XC_CHANNEL France_Digital_Cable[] = {
+ {"A1", 0x0BF0, 0x0000},
+ {"B", 0x0DF0, 0x0000},
+ {"C1", 0x0F20, 0x0000},
+ {"C", 0x0FF0, 0x0000},
+ {"1", 0x2C00, 0x0000},
+ {"2", 0x2E00, 0x0000},
+ {"3", 0x3000, 0x0000},
+ {"4", 0x3200, 0x0000},
+ {"5", 0x3400, 0x0000},
+ {"6", 0x3600, 0x0000},
+ {"SC", 0x1E00, 0x0000},
+ {"SC", 0x2000, 0x0000},
+ {"SC", 0x2200, 0x0000},
+ {"SC", 0x2400, 0x0000},
+ {"SC", 0x2600, 0x0000},
+ {"SC", 0x2800, 0x0000},
+ {"SC", 0x2A00, 0x0000},
+ {"SC", 0x3800, 0x0000},
+ {"SC", 0x3A00, 0x0000},
+ {"SC", 0x3C00, 0x0000},
+ {"SC", 0x3E00, 0x0000},
+ {"SC", 0x4000, 0x0000},
+ {"SC", 0x4200, 0x0000},
+ {"SC", 0x4400, 0x0000},
+ {"SC", 0x4600, 0x0000},
+ {"SC", 0x4800, 0x0000},
+ {"SC", 0x4BD0, 0x0000},
+ {"SC", 0x4ED0, 0x0000},
+ {"SC", 0x51D0, 0x0000},
+ {"SC", 0x54D0, 0x0000},
+ {"SC", 0x57D0, 0x0000},
+ {"SC", 0x5AD0, 0x0000},
+ {"SC", 0x5DD0, 0x0000},
+ {"SC", 0x60D0, 0x0000},
+ {"SC", 0x63D0, 0x0000},
+ {"SC", 0x66D0, 0x0000},
+ {"SC", 0x69D0, 0x0000},
+ {"SC", 0x6CD0, 0x0000},
+ {"SC", 0x6FD0, 0x0000},
+ {"SC", 0x72D0, 0x0000},
+ {"21", 0x75D0, 0x0000},
+ {"22", 0x77D0, 0x0000},
+ {"23", 0x79D0, 0x0000},
+ {"24", 0x7BD0, 0x0000},
+ {"25", 0x7DD0, 0x0000},
+ {"26", 0x7FD0, 0x0000},
+ {"27", 0x81D0, 0x0000},
+ {"28", 0x83D0, 0x0000},
+ {"29", 0x85D0, 0x0000},
+ {"30", 0x87D0, 0x0000},
+ {"31", 0x89D0, 0x0000},
+ {"32", 0x8BD0, 0x0000},
+ {"33", 0x8DD0, 0x0000},
+ {"34", 0x8FD0, 0x0000},
+ {"35", 0x91D0, 0x0000},
+ {"36", 0x93D0, 0x0000},
+ {"37", 0x95D0, 0x0000},
+ {"38", 0x97D0, 0x0000},
+ {"39", 0x99D0, 0x0000},
+ {"40", 0x9BD0, 0x0000},
+ {"41", 0x9DD0, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA1D0, 0x0000},
+ {"44", 0xA3D0, 0x0000},
+ {"45", 0xA5D0, 0x0000},
+ {"46", 0xA7D0, 0x0000},
+ {"47", 0xA9D0, 0x0000},
+ {"48", 0xABD0, 0x0000},
+ {"49", 0xADD0, 0x0000},
+ {"50", 0xAFD0, 0x0000},
+ {"51", 0xB1D0, 0x0000},
+ {"52", 0xB3D0, 0x0000},
+ {"53", 0xB5D0, 0x0000},
+ {"54", 0xB7D0, 0x0000},
+ {"55", 0xB9D0, 0x0000},
+ {"56", 0xBBD0, 0x0000},
+ {"57", 0xBDD0, 0x0000},
+ {"58", 0xBFD0, 0x0000},
+ {"59", 0xC1D0, 0x0000},
+ {"60", 0xC3D0, 0x0000},
+ {"61", 0xC5D0, 0x0000},
+ {"62", 0xC7D0, 0x0000},
+ {"63", 0xC9D0, 0x0000},
+ {"64", 0xCBD0, 0x0000},
+ {"65", 0xCDD0, 0x0000},
+ {"66", 0xCFD0, 0x0000},
+ {"67", 0xD1D0, 0x0000},
+ {"68", 0xD3D0, 0x0000},
+ {"69", 0xD5D0, 0x0000}};
+
+
+// *** 25. UK - Analog - Air
+XC_CHANNEL UK_Analog_Air[] = {
+ {"21", 0x75D0, 0x0000},
+ {"22", 0x77D0, 0x0000},
+ {"23", 0x79D0, 0x0000},
+ {"24", 0x7BD0, 0x0000},
+ {"25", 0x7DD0, 0x0000},
+ {"26", 0x7FD0, 0x0000},
+ {"27", 0x81D0, 0x0000},
+ {"28", 0x83D0, 0x0000},
+ {"29", 0x85D0, 0x0000},
+ {"30", 0x87D0, 0x0000},
+ {"31", 0x89D0, 0x0000},
+ {"32", 0x8BD0, 0x0000},
+ {"33", 0x8DD0, 0x0000},
+ {"34", 0x8FD0, 0x0000},
+ {"35", 0x91D0, 0x0000},
+ {"36", 0x93D0, 0x0000},
+ {"37", 0x95D0, 0x0000},
+ {"38", 0x97D0, 0x0000},
+ {"39", 0x99D0, 0x0000},
+ {"40", 0x9BD0, 0x0000},
+ {"41", 0x9DD0, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA1D0, 0x0000},
+ {"44", 0xA3D0, 0x0000},
+ {"45", 0xA5D0, 0x0000},
+ {"46", 0xA7D0, 0x0000},
+ {"47", 0xA9D0, 0x0000},
+ {"48", 0xABD0, 0x0000},
+ {"49", 0xADD0, 0x0000},
+ {"50", 0xAFD0, 0x0000},
+ {"51", 0xB1D0, 0x0000},
+ {"52", 0xB3D0, 0x0000},
+ {"53", 0xB5D0, 0x0000},
+ {"54", 0xB7D0, 0x0000},
+ {"55", 0xB9D0, 0x0000},
+ {"56", 0xBBD0, 0x0000},
+ {"57", 0xBDD0, 0x0000},
+ {"58", 0xBFD0, 0x0000},
+ {"59", 0xC1D0, 0x0000},
+ {"60", 0xC3D0, 0x0000},
+ {"61", 0xC5D0, 0x0000},
+ {"62", 0xC7D0, 0x0000},
+ {"63", 0xC9D0, 0x0000},
+ {"64", 0xCBD0, 0x0000},
+ {"65", 0xCDD0, 0x0000},
+ {"66", 0xCFD0, 0x0000},
+ {"67", 0xD1D0, 0x0000},
+ {"68", 0xD3D0, 0x0000},
+ {"69", 0xD5D0, 0x0000}};
+
+
+// *** 26. UK - Analog - Cable
+XC_CHANNEL UK_Analog_Cable[] = {
+ {"1", 0x0E00, 0x0000},
+ {"2", 0x1000, 0x0000},
+ {"3", 0x1E00, 0x0000},
+ {"4", 0x2000, 0x0000},
+ {"5", 0x2200, 0x0000},
+ {"6", 0x2400, 0x0000},
+ {"7", 0x2600, 0x0000},
+ {"8", 0x2800, 0x0000},
+ {"9", 0x2A00, 0x0000},
+ {"10", 0x2C00, 0x0000},
+ {"11", 0x2E00, 0x0000},
+ {"12", 0x3000, 0x0000},
+ {"13", 0x3200, 0x0000},
+ {"14", 0x3400, 0x0000},
+ {"15", 0x3600, 0x0000},
+ {"16", 0x3800, 0x0000},
+ {"17", 0x3A00, 0x0000},
+ {"18", 0x3C00, 0x0000},
+ {"19", 0x3E00, 0x0000},
+ {"20", 0x4000, 0x0000},
+ {"21", 0x4200, 0x0000},
+ {"22", 0x4400, 0x0000},
+ {"23", 0x4600, 0x0000},
+ {"24", 0x4800, 0x0000},
+ {"25", 0x4A00, 0x0000},
+ {"26", 0x4C00, 0x0000},
+ {"27", 0x4E00, 0x0000},
+ {"28", 0x5000, 0x0000},
+ {"29", 0x5200, 0x0000},
+ {"30", 0x5400, 0x0000},
+ {"31", 0x5600, 0x0000},
+ {"32", 0x5800, 0x0000},
+ {"33", 0x5A00, 0x0000},
+ {"34", 0x5C00, 0x0000},
+ {"35", 0x5E00, 0x0000},
+ {"36", 0x6000, 0x0000},
+ {"37", 0x6200, 0x0000},
+ {"38", 0x6400, 0x0000},
+ {"39", 0x6600, 0x0000},
+ {"40", 0x6800, 0x0000},
+ {"41", 0x6A00, 0x0000},
+ {"42", 0x6C00, 0x0000},
+ {"43", 0x6E00, 0x0000},
+ {"44", 0x7000, 0x0000},
+ {"45", 0x7200, 0x0000},
+ {"46", 0x7400, 0x0000},
+ {"47", 0x7600, 0x0000},
+ {"48", 0x7800, 0x0000},
+ {"49", 0x7A00, 0x0000},
+ {"50", 0x7C00, 0x0000},
+ {"51", 0x7E00, 0x0000},
+ {"52", 0x8000, 0x0000},
+ {"53", 0x8200, 0x0000},
+ {"54", 0x8400, 0x0000},
+ {"55", 0x8600, 0x0000},
+ {"56", 0x8800, 0x0000},
+ {"57", 0x8A00, 0x0000},
+ {"58", 0x8C00, 0x0000},
+ {"59", 0x8E00, 0x0000},
+ {"60", 0x9000, 0x0000},
+ {"61", 0x9200, 0x0000},
+ {"62", 0x9400, 0x0000},
+ {"63", 0x9600, 0x0000},
+ {"64", 0x9800, 0x0000},
+ {"65", 0x9A00, 0x0000},
+ {"66", 0x9C00, 0x0000},
+ {"67", 0x9E00, 0x0000},
+ {"68", 0xA000, 0x0000},
+ {"69", 0xA200, 0x0000},
+ {"70", 0xA400, 0x0000},
+ {"71", 0xA600, 0x0000},
+ {"72", 0xA800, 0x0000},
+ {"73", 0xAA00, 0x0000},
+ {"74", 0xAC00, 0x0000},
+ {"75", 0xAE00, 0x0000},
+ {"76", 0xB000, 0x0000},
+ {"77", 0xB200, 0x0000},
+ {"78", 0xB400, 0x0000},
+ {"79", 0xB600, 0x0000},
+ {"80", 0xB800, 0x0000},
+ {"81", 0xBA00, 0x0000}};
+
+
+// *** 27. UK - Digital - Air
+XC_CHANNEL UK_Digital_Air[] = {
+ {"21", 0x75D0, 0x0000},
+ {"22", 0x77D0, 0x0000},
+ {"23", 0x79D0, 0x0000},
+ {"24", 0x7BD0, 0x0000},
+ {"25", 0x7DD0, 0x0000},
+ {"26", 0x7FD0, 0x0000},
+ {"27", 0x81D0, 0x0000},
+ {"28", 0x83D0, 0x0000},
+ {"29", 0x85D0, 0x0000},
+ {"30", 0x87D0, 0x0000},
+ {"31", 0x89D0, 0x0000},
+ {"32", 0x8BD0, 0x0000},
+ {"33", 0x8DD0, 0x0000},
+ {"34", 0x8FD0, 0x0000},
+ {"35", 0x91D0, 0x0000},
+ {"36", 0x93D0, 0x0000},
+ {"37", 0x95D0, 0x0000},
+ {"38", 0x97D0, 0x0000},
+ {"39", 0x99D0, 0x0000},
+ {"40", 0x9BD0, 0x0000},
+ {"41", 0x9DD0, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA1D0, 0x0000},
+ {"44", 0xA3D0, 0x0000},
+ {"45", 0xA5D0, 0x0000},
+ {"46", 0xA7D0, 0x0000},
+ {"47", 0xA9D0, 0x0000},
+ {"48", 0xABD0, 0x0000},
+ {"49", 0xADD0, 0x0000},
+ {"50", 0xAFD0, 0x0000},
+ {"51", 0xB1D0, 0x0000},
+ {"52", 0xB3D0, 0x0000},
+ {"53", 0xB5D0, 0x0000},
+ {"54", 0xB7D0, 0x0000},
+ {"55", 0xB9D0, 0x0000},
+ {"56", 0xBBD0, 0x0000},
+ {"57", 0xBDD0, 0x0000},
+ {"58", 0xBFD0, 0x0000},
+ {"59", 0xC1D0, 0x0000},
+ {"60", 0xC3D0, 0x0000},
+ {"61", 0xC5D0, 0x0000},
+ {"62", 0xC7D0, 0x0000},
+ {"63", 0xC9D0, 0x0000},
+ {"64", 0xCBD0, 0x0000},
+ {"65", 0xCDD0, 0x0000},
+ {"66", 0xCFD0, 0x0000},
+ {"67", 0xD1D0, 0x0000},
+ {"68", 0xD3D0, 0x0000},
+ {"69", 0xD5D0, 0x0000}};
+
+
+// *** 28. UK - Digital - Cable
+XC_CHANNEL UK_Digital_Cable[] = {
+ {"1", 0x0E00, 0x0000},
+ {"2", 0x1000, 0x0000},
+ {"3", 0x1E00, 0x0000},
+ {"4", 0x2000, 0x0000},
+ {"5", 0x2200, 0x0000},
+ {"6", 0x2400, 0x0000},
+ {"7", 0x2600, 0x0000},
+ {"8", 0x2800, 0x0000},
+ {"9", 0x2A00, 0x0000},
+ {"10", 0x2C00, 0x0000},
+ {"11", 0x2E00, 0x0000},
+ {"12", 0x3000, 0x0000},
+ {"13", 0x3200, 0x0000},
+ {"14", 0x3400, 0x0000},
+ {"15", 0x3600, 0x0000},
+ {"16", 0x3800, 0x0000},
+ {"17", 0x3A00, 0x0000},
+ {"18", 0x3C00, 0x0000},
+ {"19", 0x3E00, 0x0000},
+ {"20", 0x4000, 0x0000},
+ {"21", 0x4200, 0x0000},
+ {"22", 0x4400, 0x0000},
+ {"23", 0x4600, 0x0000},
+ {"24", 0x4800, 0x0000},
+ {"25", 0x4A00, 0x0000},
+ {"26", 0x4C00, 0x0000},
+ {"27", 0x4E00, 0x0000},
+ {"28", 0x5000, 0x0000},
+ {"29", 0x5200, 0x0000},
+ {"30", 0x5400, 0x0000},
+ {"31", 0x5600, 0x0000},
+ {"32", 0x5800, 0x0000},
+ {"33", 0x5A00, 0x0000},
+ {"34", 0x5C00, 0x0000},
+ {"35", 0x5E00, 0x0000},
+ {"36", 0x6000, 0x0000},
+ {"37", 0x6200, 0x0000},
+ {"38", 0x6400, 0x0000},
+ {"39", 0x6600, 0x0000},
+ {"40", 0x6800, 0x0000},
+ {"41", 0x6A00, 0x0000},
+ {"42", 0x6C00, 0x0000},
+ {"43", 0x6E00, 0x0000},
+ {"44", 0x7000, 0x0000},
+ {"45", 0x7200, 0x0000},
+ {"46", 0x7400, 0x0000},
+ {"47", 0x7600, 0x0000},
+ {"48", 0x7800, 0x0000},
+ {"49", 0x7A00, 0x0000},
+ {"50", 0x7C00, 0x0000},
+ {"51", 0x7E00, 0x0000},
+ {"52", 0x8000, 0x0000},
+ {"53", 0x8200, 0x0000},
+ {"54", 0x8400, 0x0000},
+ {"55", 0x8600, 0x0000},
+ {"56", 0x8800, 0x0000},
+ {"57", 0x8A00, 0x0000},
+ {"58", 0x8C00, 0x0000},
+ {"59", 0x8E00, 0x0000},
+ {"60", 0x9000, 0x0000},
+ {"61", 0x9200, 0x0000},
+ {"62", 0x9400, 0x0000},
+ {"63", 0x9600, 0x0000},
+ {"64", 0x9800, 0x0000},
+ {"65", 0x9A00, 0x0000},
+ {"66", 0x9C00, 0x0000},
+ {"67", 0x9E00, 0x0000},
+ {"68", 0xA000, 0x0000},
+ {"69", 0xA200, 0x0000},
+ {"70", 0xA400, 0x0000},
+ {"71", 0xA600, 0x0000},
+ {"72", 0xA800, 0x0000},
+ {"73", 0xAA00, 0x0000},
+ {"74", 0xAC00, 0x0000},
+ {"75", 0xAE00, 0x0000},
+ {"76", 0xB000, 0x0000},
+ {"77", 0xB200, 0x0000},
+ {"78", 0xB400, 0x0000},
+ {"79", 0xB600, 0x0000},
+ {"80", 0xB800, 0x0000},
+ {"81", 0xBA00, 0x0000}};
+
+
+// *** 29. Ireland - Analog - Air
+XC_CHANNEL Ireland_Analog_Air[] = {
+ {"A", 0x0B70, 0x0000},
+ {"B", 0x0D70, 0x0000},
+ {"C", 0x0F70, 0x0000},
+ {"D", 0x2BD0, 0x0000},
+ {"E", 0x2DD0, 0x0000},
+ {"F", 0x2FD0, 0x0000},
+ {"G", 0x31D0, 0x0000},
+ {"H", 0x33D0, 0x0000},
+ {"J", 0x35D0, 0x0000},
+ {"21", 0x75D0, 0x0000},
+ {"22", 0x77D0, 0x0000},
+ {"23", 0x79D0, 0x0000},
+ {"24", 0x7BD0, 0x0000},
+ {"25", 0x7DD0, 0x0000},
+ {"26", 0x7FD0, 0x0000},
+ {"27", 0x81D0, 0x0000},
+ {"28", 0x83D0, 0x0000},
+ {"29", 0x85D0, 0x0000},
+ {"30", 0x87D0, 0x0000},
+ {"31", 0x89D0, 0x0000},
+ {"32", 0x8BD0, 0x0000},
+ {"33", 0x8DD0, 0x0000},
+ {"34", 0x8FD0, 0x0000},
+ {"35", 0x91D0, 0x0000},
+ {"36", 0x93D0, 0x0000},
+ {"37", 0x95D0, 0x0000},
+ {"38", 0x97D0, 0x0000},
+ {"39", 0x99D0, 0x0000},
+ {"40", 0x9BD0, 0x0000},
+ {"41", 0x9DD0, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA1D0, 0x0000},
+ {"44", 0xA3D0, 0x0000},
+ {"45", 0xA5D0, 0x0000},
+ {"46", 0xA7D0, 0x0000},
+ {"47", 0xA9D0, 0x0000},
+ {"48", 0xABD0, 0x0000},
+ {"49", 0xADD0, 0x0000},
+ {"50", 0xAFD0, 0x0000},
+ {"51", 0xB1D0, 0x0000},
+ {"52", 0xB3D0, 0x0000},
+ {"53", 0xB5D0, 0x0000},
+ {"54", 0xB7D0, 0x0000},
+ {"55", 0xB9D0, 0x0000},
+ {"56", 0xBBD0, 0x0000},
+ {"57", 0xBDD0, 0x0000},
+ {"58", 0xBFD0, 0x0000},
+ {"59", 0xC1D0, 0x0000},
+ {"60", 0xC3D0, 0x0000},
+ {"61", 0xC5D0, 0x0000},
+ {"62", 0xC7D0, 0x0000},
+ {"63", 0xC9D0, 0x0000},
+ {"64", 0xCBD0, 0x0000},
+ {"65", 0xCDD0, 0x0000},
+ {"66", 0xCFD0, 0x0000},
+ {"67", 0xD1D0, 0x0000},
+ {"68", 0xD3D0, 0x0000},
+ {"69", 0xD5D0, 0x0000}};
+
+
+// *** 30. Ireland - Analog - Cable
+XC_CHANNEL Ireland_Analog_Cable[] = {
+ {"1", 0x0E00, 0x0000},
+ {"2", 0x1000, 0x0000},
+ {"3", 0x1E00, 0x0000},
+ {"4", 0x2000, 0x0000},
+ {"5", 0x2200, 0x0000},
+ {"6", 0x2400, 0x0000},
+ {"7", 0x2600, 0x0000},
+ {"8", 0x2800, 0x0000},
+ {"9", 0x2A00, 0x0000},
+ {"10", 0x2C00, 0x0000},
+ {"11", 0x2E00, 0x0000},
+ {"12", 0x3000, 0x0000},
+ {"13", 0x3200, 0x0000},
+ {"14", 0x3400, 0x0000},
+ {"15", 0x3600, 0x0000},
+ {"16", 0x3800, 0x0000},
+ {"17", 0x3A00, 0x0000},
+ {"18", 0x3C00, 0x0000},
+ {"19", 0x3E00, 0x0000},
+ {"20", 0x4000, 0x0000},
+ {"21", 0x4200, 0x0000},
+ {"22", 0x4400, 0x0000},
+ {"23", 0x4600, 0x0000},
+ {"24", 0x4800, 0x0000},
+ {"25", 0x4A00, 0x0000},
+ {"26", 0x4C00, 0x0000},
+ {"27", 0x4E00, 0x0000},
+ {"28", 0x5000, 0x0000},
+ {"29", 0x5200, 0x0000},
+ {"30", 0x5400, 0x0000},
+ {"31", 0x5600, 0x0000},
+ {"32", 0x5800, 0x0000},
+ {"33", 0x5A00, 0x0000},
+ {"34", 0x5C00, 0x0000},
+ {"35", 0x5E00, 0x0000},
+ {"36", 0x6000, 0x0000},
+ {"37", 0x6200, 0x0000},
+ {"38", 0x6400, 0x0000},
+ {"39", 0x6600, 0x0000},
+ {"40", 0x6800, 0x0000},
+ {"41", 0x6A00, 0x0000},
+ {"42", 0x6C00, 0x0000},
+ {"43", 0x6E00, 0x0000},
+ {"44", 0x7000, 0x0000},
+ {"45", 0x7200, 0x0000},
+ {"46", 0x7400, 0x0000},
+ {"47", 0x7600, 0x0000},
+ {"48", 0x7800, 0x0000},
+ {"49", 0x7A00, 0x0000},
+ {"50", 0x7C00, 0x0000},
+ {"51", 0x7E00, 0x0000},
+ {"52", 0x8000, 0x0000},
+ {"53", 0x8200, 0x0000},
+ {"54", 0x8400, 0x0000},
+ {"55", 0x8600, 0x0000},
+ {"56", 0x8800, 0x0000},
+ {"57", 0x8A00, 0x0000},
+ {"58", 0x8C00, 0x0000},
+ {"59", 0x8E00, 0x0000},
+ {"60", 0x9000, 0x0000},
+ {"61", 0x9200, 0x0000},
+ {"62", 0x9400, 0x0000},
+ {"63", 0x9600, 0x0000},
+ {"64", 0x9800, 0x0000},
+ {"65", 0x9A00, 0x0000},
+ {"66", 0x9C00, 0x0000},
+ {"67", 0x9E00, 0x0000},
+ {"68", 0xA000, 0x0000},
+ {"69", 0xA200, 0x0000},
+ {"70", 0xA400, 0x0000},
+ {"71", 0xA600, 0x0000},
+ {"72", 0xA800, 0x0000},
+ {"73", 0xAA00, 0x0000},
+ {"74", 0xAC00, 0x0000},
+ {"75", 0xAE00, 0x0000},
+ {"76", 0xB000, 0x0000},
+ {"77", 0xB200, 0x0000},
+ {"78", 0xB400, 0x0000},
+ {"79", 0xB600, 0x0000},
+ {"80", 0xB800, 0x0000},
+ {"81", 0xBA00, 0x0000}};
+
+
+// *** 31. Ireland - Digital - Air
+XC_CHANNEL Ireland_Digital_Air[] = {
+ {"A", 0x0B70, 0x0000},
+ {"B", 0x0D70, 0x0000},
+ {"C", 0x0F70, 0x0000},
+ {"D", 0x2BD0, 0x0000},
+ {"E", 0x2DD0, 0x0000},
+ {"F", 0x2FD0, 0x0000},
+ {"G", 0x31D0, 0x0000},
+ {"H", 0x33D0, 0x0000},
+ {"J", 0x35D0, 0x0000},
+ {"21", 0x75D0, 0x0000},
+ {"22", 0x77D0, 0x0000},
+ {"23", 0x79D0, 0x0000},
+ {"24", 0x7BD0, 0x0000},
+ {"25", 0x7DD0, 0x0000},
+ {"26", 0x7FD0, 0x0000},
+ {"27", 0x81D0, 0x0000},
+ {"28", 0x83D0, 0x0000},
+ {"29", 0x85D0, 0x0000},
+ {"30", 0x87D0, 0x0000},
+ {"31", 0x89D0, 0x0000},
+ {"32", 0x8BD0, 0x0000},
+ {"33", 0x8DD0, 0x0000},
+ {"34", 0x8FD0, 0x0000},
+ {"35", 0x91D0, 0x0000},
+ {"36", 0x93D0, 0x0000},
+ {"37", 0x95D0, 0x0000},
+ {"38", 0x97D0, 0x0000},
+ {"39", 0x99D0, 0x0000},
+ {"40", 0x9BD0, 0x0000},
+ {"41", 0x9DD0, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA1D0, 0x0000},
+ {"44", 0xA3D0, 0x0000},
+ {"45", 0xA5D0, 0x0000},
+ {"46", 0xA7D0, 0x0000},
+ {"47", 0xA9D0, 0x0000},
+ {"48", 0xABD0, 0x0000},
+ {"49", 0xADD0, 0x0000},
+ {"50", 0xAFD0, 0x0000},
+ {"51", 0xB1D0, 0x0000},
+ {"52", 0xB3D0, 0x0000},
+ {"53", 0xB5D0, 0x0000},
+ {"54", 0xB7D0, 0x0000},
+ {"55", 0xB9D0, 0x0000},
+ {"56", 0xBBD0, 0x0000},
+ {"57", 0xBDD0, 0x0000},
+ {"58", 0xBFD0, 0x0000},
+ {"59", 0xC1D0, 0x0000},
+ {"60", 0xC3D0, 0x0000},
+ {"61", 0xC5D0, 0x0000},
+ {"62", 0xC7D0, 0x0000},
+ {"63", 0xC9D0, 0x0000},
+ {"64", 0xCBD0, 0x0000},
+ {"65", 0xCDD0, 0x0000},
+ {"66", 0xCFD0, 0x0000},
+ {"67", 0xD1D0, 0x0000},
+ {"68", 0xD3D0, 0x0000},
+ {"69", 0xD5D0, 0x0000}};
+
+
+// *** 32. Ireland - Digital - Cable
+XC_CHANNEL Ireland_Digital_Cable[] = {
+ {"1", 0x0E00, 0x0000},
+ {"2", 0x1000, 0x0000},
+ {"3", 0x1E00, 0x0000},
+ {"4", 0x2000, 0x0000},
+ {"5", 0x2200, 0x0000},
+ {"6", 0x2400, 0x0000},
+ {"7", 0x2600, 0x0000},
+ {"8", 0x2800, 0x0000},
+ {"9", 0x2A00, 0x0000},
+ {"10", 0x2C00, 0x0000},
+ {"11", 0x2E00, 0x0000},
+ {"12", 0x3000, 0x0000},
+ {"13", 0x3200, 0x0000},
+ {"14", 0x3400, 0x0000},
+ {"15", 0x3600, 0x0000},
+ {"16", 0x3800, 0x0000},
+ {"17", 0x3A00, 0x0000},
+ {"18", 0x3C00, 0x0000},
+ {"19", 0x3E00, 0x0000},
+ {"20", 0x4000, 0x0000},
+ {"21", 0x4200, 0x0000},
+ {"22", 0x4400, 0x0000},
+ {"23", 0x4600, 0x0000},
+ {"24", 0x4800, 0x0000},
+ {"25", 0x4A00, 0x0000},
+ {"26", 0x4C00, 0x0000},
+ {"27", 0x4E00, 0x0000},
+ {"28", 0x5000, 0x0000},
+ {"29", 0x5200, 0x0000},
+ {"30", 0x5400, 0x0000},
+ {"31", 0x5600, 0x0000},
+ {"32", 0x5800, 0x0000},
+ {"33", 0x5A00, 0x0000},
+ {"34", 0x5C00, 0x0000},
+ {"35", 0x5E00, 0x0000},
+ {"36", 0x6000, 0x0000},
+ {"37", 0x6200, 0x0000},
+ {"38", 0x6400, 0x0000},
+ {"39", 0x6600, 0x0000},
+ {"40", 0x6800, 0x0000},
+ {"41", 0x6A00, 0x0000},
+ {"42", 0x6C00, 0x0000},
+ {"43", 0x6E00, 0x0000},
+ {"44", 0x7000, 0x0000},
+ {"45", 0x7200, 0x0000},
+ {"46", 0x7400, 0x0000},
+ {"47", 0x7600, 0x0000},
+ {"48", 0x7800, 0x0000},
+ {"49", 0x7A00, 0x0000},
+ {"50", 0x7C00, 0x0000},
+ {"51", 0x7E00, 0x0000},
+ {"52", 0x8000, 0x0000},
+ {"53", 0x8200, 0x0000},
+ {"54", 0x8400, 0x0000},
+ {"55", 0x8600, 0x0000},
+ {"56", 0x8800, 0x0000},
+ {"57", 0x8A00, 0x0000},
+ {"58", 0x8C00, 0x0000},
+ {"59", 0x8E00, 0x0000},
+ {"60", 0x9000, 0x0000},
+ {"61", 0x9200, 0x0000},
+ {"62", 0x9400, 0x0000},
+ {"63", 0x9600, 0x0000},
+ {"64", 0x9800, 0x0000},
+ {"65", 0x9A00, 0x0000},
+ {"66", 0x9C00, 0x0000},
+ {"67", 0x9E00, 0x0000},
+ {"68", 0xA000, 0x0000},
+ {"69", 0xA200, 0x0000},
+ {"70", 0xA400, 0x0000},
+ {"71", 0xA600, 0x0000},
+ {"72", 0xA800, 0x0000},
+ {"73", 0xAA00, 0x0000},
+ {"74", 0xAC00, 0x0000},
+ {"75", 0xAE00, 0x0000},
+ {"76", 0xB000, 0x0000},
+ {"77", 0xB200, 0x0000},
+ {"78", 0xB400, 0x0000},
+ {"79", 0xB600, 0x0000},
+ {"80", 0xB800, 0x0000},
+ {"81", 0xBA00, 0x0000}};
+
+
+// *** 33. China - Analog - Air
+XC_CHANNEL China_Analog_Air[] = {
+ {"DS1", 0x0C70, 0x0000},
+ {"DS2", 0x0E70, 0x0000},
+ {"DS3", 0x1070, 0x0000},
+ {"DS4", 0x1350, 0x0000},
+ {"DS5", 0x1550, 0x0000},
+ {"DS6", 0x2A10, 0x0000},
+ {"DS7", 0x2C10, 0x0000},
+ {"DS8", 0x2E10, 0x0000},
+ {"DS9", 0x3010, 0x0000},
+ {"DS10", 0x3210, 0x0000},
+ {"DS11", 0x3410, 0x0000},
+ {"DS12", 0x3610, 0x0000},
+ {"DS13", 0x75D0, 0x0000},
+ {"DS14", 0x77D0, 0x0000},
+ {"DS15", 0x79D0, 0x0000},
+ {"DS16", 0x7BD0, 0x0000},
+ {"DS17", 0x7DD0, 0x0000},
+ {"DS18", 0x7FD0, 0x0000},
+ {"DS19", 0x81D0, 0x0000},
+ {"DS20", 0x83D0, 0x0000},
+ {"DS21", 0x85D0, 0x0000},
+ {"DS22", 0x87D0, 0x0000},
+ {"DS23", 0x89D0, 0x0000},
+ {"DS24", 0x8BD0, 0x0000},
+ {"DS25", 0x97D0, 0x0000},
+ {"DS26", 0x99D0, 0x0000},
+ {"DS27", 0x9BD0, 0x0000},
+ {"DS28", 0x9DD0, 0x0000},
+ {"DS29", 0x9FD0, 0x0000},
+ {"DS30", 0xA1D0, 0x0000},
+ {"DS31", 0xA3D0, 0x0000},
+ {"DS32", 0xA5D0, 0x0000},
+ {"DS33", 0xA7D0, 0x0000},
+ {"DS34", 0xA9D0, 0x0000},
+ {"DS35", 0xABD0, 0x0000},
+ {"DS36", 0xADD0, 0x0000},
+ {"DS37", 0xAFD0, 0x0000},
+ {"DS38", 0xB1D0, 0x0000},
+ {"DS39", 0xB3D0, 0x0000},
+ {"DS40", 0xB5D0, 0x0000},
+ {"DS41", 0xB7D0, 0x0000},
+ {"DS42", 0xB9D0, 0x0000},
+ {"DS43", 0xBBD0, 0x0000},
+ {"DS44", 0xBDD0, 0x0000},
+ {"DS45", 0xBFD0, 0x0000},
+ {"DS46", 0xC1D0, 0x0000},
+ {"DS47", 0xC3D0, 0x0000},
+ {"DS48", 0xC5D0, 0x0000},
+ {"DS49", 0xC7D0, 0x0000},
+ {"DS50", 0xC9D0, 0x0000},
+ {"DS51", 0xCBD0, 0x0000},
+ {"DS52", 0xCDD0, 0x0000},
+ {"DS53", 0xCFD0, 0x0000},
+ {"DS54", 0xD1D0, 0x0000},
+ {"DS55", 0xD3D0, 0x0000},
+ {"DS56", 0xD5D0, 0x0000},
+ {"DS57", 0xD7D0, 0x0000}};
+
+
+// *** 34. China - Analog - Cable
+XC_CHANNEL China_Analog_Cable[] = {
+ {"DS1", 0x0C70, 0x0000},
+ {"DS2", 0x0E70, 0x0000},
+ {"DS3", 0x1070, 0x0000},
+ {"DS4", 0x1350, 0x0000},
+ {"DS5", 0x1550, 0x0000},
+ {"DS6", 0x2A10, 0x0000},
+ {"DS7", 0x2C10, 0x0000},
+ {"DS8", 0x2E10, 0x0000},
+ {"DS9", 0x3010, 0x0000},
+ {"DS10", 0x3210, 0x0000},
+ {"DS11", 0x3410, 0x0000},
+ {"DS12", 0x3610, 0x0000},
+ {"Z1", 0x1C10, 0x0000},
+ {"Z2", 0x1E10, 0x0000},
+ {"Z3", 0x2010, 0x0000},
+ {"Z4", 0x2210, 0x0000},
+ {"Z5", 0x2410, 0x0000},
+ {"Z6", 0x2610, 0x0000},
+ {"Z7", 0x2810, 0x0000},
+ {"Z8", 0x3810, 0x0000},
+ {"Z9", 0x3A10, 0x0000},
+ {"Z10", 0x3C10, 0x0000},
+ {"Z11", 0x3E10, 0x0000},
+ {"Z12", 0x4010, 0x0000},
+ {"Z13", 0x4210, 0x0000},
+ {"Z14", 0x4410, 0x0000},
+ {"Z15", 0x4610, 0x0000},
+ {"Z16", 0x4810, 0x0000},
+ {"Z17", 0x4A10, 0x0000},
+ {"Z18", 0x4C10, 0x0000},
+ {"Z19", 0x4E10, 0x0000},
+ {"Z20", 0x5010, 0x0000},
+ {"Z21", 0x5210, 0x0000},
+ {"Z22", 0x5410, 0x0000},
+ {"Z23", 0x5610, 0x0000},
+ {"Z24", 0x5810, 0x0000},
+ {"Z25", 0x5A10, 0x0000},
+ {"Z26", 0x5C10, 0x0000},
+ {"Z27", 0x5E10, 0x0000},
+ {"Z28", 0x6010, 0x0000},
+ {"Z29", 0x6210, 0x0000},
+ {"Z30", 0x6410, 0x0000},
+ {"Z31", 0x6610, 0x0000},
+ {"Z32", 0x6810, 0x0000},
+ {"Z33", 0x6A10, 0x0000},
+ {"Z34", 0x6C10, 0x0000},
+ {"Z35", 0x6E10, 0x0000},
+ {"Z36", 0x7010, 0x0000},
+ {"Z37", 0x7210, 0x0000},
+ {"DS13", 0x75D0, 0x0000},
+ {"DS14", 0x77D0, 0x0000},
+ {"DS15", 0x79D0, 0x0000},
+ {"DS16", 0x7BD0, 0x0000},
+ {"DS17", 0x7DD0, 0x0000},
+ {"DS18", 0x7FD0, 0x0000},
+ {"DS19", 0x81D0, 0x0000},
+ {"DS20", 0x83D0, 0x0000},
+ {"DS21", 0x85D0, 0x0000},
+ {"DS22", 0x87D0, 0x0000},
+ {"DS23", 0x89D0, 0x0000},
+ {"DS24", 0x8BD0, 0x0000},
+ {"Z38", 0x8DD0, 0x0000},
+ {"Z39", 0x8FD0, 0x0000},
+ {"Z40", 0x91D0, 0x0000},
+ {"Z41", 0x93D0, 0x0000},
+ {"Z42", 0x95D0, 0x0000},
+ {"DS25", 0x97D0, 0x0000},
+ {"DS26", 0x99D0, 0x0000},
+ {"DS27", 0x9BD0, 0x0000},
+ {"DS28", 0x9DD0, 0x0000},
+ {"DS29", 0x9FD0, 0x0000},
+ {"DS30", 0xA1D0, 0x0000},
+ {"DS31", 0xA3D0, 0x0000},
+ {"DS32", 0xA5D0, 0x0000},
+ {"DS33", 0xA7D0, 0x0000},
+ {"DS34", 0xA9D0, 0x0000},
+ {"DS35", 0xABD0, 0x0000},
+ {"DS36", 0xADD0, 0x0000},
+ {"DS37", 0xAFD0, 0x0000},
+ {"DS38", 0xB1D0, 0x0000},
+ {"DS39", 0xB3D0, 0x0000},
+ {"DS40", 0xB5D0, 0x0000},
+ {"DS41", 0xB7D0, 0x0000},
+ {"DS42", 0xB9D0, 0x0000},
+ {"DS43", 0xBBD0, 0x0000},
+ {"DS44", 0xBDD0, 0x0000},
+ {"DS45", 0xBFD0, 0x0000},
+ {"DS46", 0xC1D0, 0x0000},
+ {"DS47", 0xC3D0, 0x0000},
+ {"DS48", 0xC5D0, 0x0000},
+ {"DS49", 0xC7D0, 0x0000},
+ {"DS50", 0xC9D0, 0x0000},
+ {"DS51", 0xCBD0, 0x0000},
+ {"DS52", 0xCDD0, 0x0000},
+ {"DS53", 0xCFD0, 0x0000},
+ {"DS54", 0xD1D0, 0x0000},
+ {"DS55", 0xD3D0, 0x0000},
+ {"DS56", 0xD5D0, 0x0000},
+ {"DS57", 0xD7D0, 0x0000}};
+
+
+// *** 35. China - Digital - Air
+XC_CHANNEL China_Digital_Air[] = {
+ {"DS1", 0x0C70, 0x0000},
+ {"DS2", 0x0E70, 0x0000},
+ {"DS3", 0x1070, 0x0000},
+ {"DS4", 0x1350, 0x0000},
+ {"DS5", 0x1550, 0x0000},
+ {"DS6", 0x2A10, 0x0000},
+ {"DS7", 0x2C10, 0x0000},
+ {"DS8", 0x2E10, 0x0000},
+ {"DS9", 0x3010, 0x0000},
+ {"DS10", 0x3210, 0x0000},
+ {"DS11", 0x3410, 0x0000},
+ {"DS12", 0x3610, 0x0000},
+ {"DS13", 0x75D0, 0x0000},
+ {"DS14", 0x77D0, 0x0000},
+ {"DS15", 0x79D0, 0x0000},
+ {"DS16", 0x7BD0, 0x0000},
+ {"DS17", 0x7DD0, 0x0000},
+ {"DS18", 0x7FD0, 0x0000},
+ {"DS19", 0x81D0, 0x0000},
+ {"DS20", 0x83D0, 0x0000},
+ {"DS21", 0x85D0, 0x0000},
+ {"DS22", 0x87D0, 0x0000},
+ {"DS23", 0x89D0, 0x0000},
+ {"DS24", 0x8BD0, 0x0000},
+ {"DS25", 0x97D0, 0x0000},
+ {"DS26", 0x99D0, 0x0000},
+ {"DS27", 0x9BD0, 0x0000},
+ {"DS28", 0x9DD0, 0x0000},
+ {"DS29", 0x9FD0, 0x0000},
+ {"DS30", 0xA1D0, 0x0000},
+ {"DS31", 0xA3D0, 0x0000},
+ {"DS32", 0xA5D0, 0x0000},
+ {"DS33", 0xA7D0, 0x0000},
+ {"DS34", 0xA9D0, 0x0000},
+ {"DS35", 0xABD0, 0x0000},
+ {"DS36", 0xADD0, 0x0000},
+ {"DS37", 0xAFD0, 0x0000},
+ {"DS38", 0xB1D0, 0x0000},
+ {"DS39", 0xB3D0, 0x0000},
+ {"DS40", 0xB5D0, 0x0000},
+ {"DS41", 0xB7D0, 0x0000},
+ {"DS42", 0xB9D0, 0x0000},
+ {"DS43", 0xBBD0, 0x0000},
+ {"DS44", 0xBDD0, 0x0000},
+ {"DS45", 0xBFD0, 0x0000},
+ {"DS46", 0xC1D0, 0x0000},
+ {"DS47", 0xC3D0, 0x0000},
+ {"DS48", 0xC5D0, 0x0000},
+ {"DS49", 0xC7D0, 0x0000},
+ {"DS50", 0xC9D0, 0x0000},
+ {"DS51", 0xCBD0, 0x0000},
+ {"DS52", 0xCDD0, 0x0000},
+ {"DS53", 0xCFD0, 0x0000},
+ {"DS54", 0xD1D0, 0x0000},
+ {"DS55", 0xD3D0, 0x0000},
+ {"DS56", 0xD5D0, 0x0000},
+ {"DS57", 0xD7D0, 0x0000}};
+
+
+// *** 36. China - Digital - Cable
+XC_CHANNEL China_Digital_Cable[] = {
+ {"DS1", 0x0C70, 0x0000},
+ {"DS2", 0x0E70, 0x0000},
+ {"DS3", 0x1070, 0x0000},
+ {"DS4", 0x1350, 0x0000},
+ {"DS5", 0x1550, 0x0000},
+ {"DS6", 0x2A10, 0x0000},
+ {"DS7", 0x2C10, 0x0000},
+ {"DS8", 0x2E10, 0x0000},
+ {"DS9", 0x3010, 0x0000},
+ {"DS10", 0x3210, 0x0000},
+ {"DS11", 0x3410, 0x0000},
+ {"DS12", 0x3610, 0x0000},
+ {"Z1", 0x1C10, 0x0000},
+ {"Z2", 0x1E10, 0x0000},
+ {"Z3", 0x2010, 0x0000},
+ {"Z4", 0x2210, 0x0000},
+ {"Z5", 0x2410, 0x0000},
+ {"Z6", 0x2610, 0x0000},
+ {"Z7", 0x2810, 0x0000},
+ {"Z8", 0x3810, 0x0000},
+ {"Z9", 0x3A10, 0x0000},
+ {"Z10", 0x3C10, 0x0000},
+ {"Z11", 0x3E10, 0x0000},
+ {"Z12", 0x4010, 0x0000},
+ {"Z13", 0x4210, 0x0000},
+ {"Z14", 0x4410, 0x0000},
+ {"Z15", 0x4610, 0x0000},
+ {"Z16", 0x4810, 0x0000},
+ {"Z17", 0x4A10, 0x0000},
+ {"Z18", 0x4C10, 0x0000},
+ {"Z19", 0x4E10, 0x0000},
+ {"Z20", 0x5010, 0x0000},
+ {"Z21", 0x5210, 0x0000},
+ {"Z22", 0x5410, 0x0000},
+ {"Z23", 0x5610, 0x0000},
+ {"Z24", 0x5810, 0x0000},
+ {"Z25", 0x5A10, 0x0000},
+ {"Z26", 0x5C10, 0x0000},
+ {"Z27", 0x5E10, 0x0000},
+ {"Z28", 0x6010, 0x0000},
+ {"Z29", 0x6210, 0x0000},
+ {"Z30", 0x6410, 0x0000},
+ {"Z31", 0x6610, 0x0000},
+ {"Z32", 0x6810, 0x0000},
+ {"Z33", 0x6A10, 0x0000},
+ {"Z34", 0x6C10, 0x0000},
+ {"Z35", 0x6E10, 0x0000},
+ {"Z36", 0x7010, 0x0000},
+ {"Z37", 0x7210, 0x0000},
+ {"DS13", 0x75D0, 0x0000},
+ {"DS14", 0x77D0, 0x0000},
+ {"DS15", 0x79D0, 0x0000},
+ {"DS16", 0x7BD0, 0x0000},
+ {"DS17", 0x7DD0, 0x0000},
+ {"DS18", 0x7FD0, 0x0000},
+ {"DS19", 0x81D0, 0x0000},
+ {"DS20", 0x83D0, 0x0000},
+ {"DS21", 0x85D0, 0x0000},
+ {"DS22", 0x87D0, 0x0000},
+ {"DS23", 0x89D0, 0x0000},
+ {"DS24", 0x8BD0, 0x0000},
+ {"Z38", 0x8DD0, 0x0000},
+ {"Z39", 0x8FD0, 0x0000},
+ {"Z40", 0x91D0, 0x0000},
+ {"Z41", 0x93D0, 0x0000},
+ {"Z42", 0x95D0, 0x0000},
+ {"DS25", 0x97D0, 0x0000},
+ {"DS26", 0x99D0, 0x0000},
+ {"DS27", 0x9BD0, 0x0000},
+ {"DS28", 0x9DD0, 0x0000},
+ {"DS29", 0x9FD0, 0x0000},
+ {"DS30", 0xA1D0, 0x0000},
+ {"DS31", 0xA3D0, 0x0000},
+ {"DS32", 0xA5D0, 0x0000},
+ {"DS33", 0xA7D0, 0x0000},
+ {"DS34", 0xA9D0, 0x0000},
+ {"DS35", 0xABD0, 0x0000},
+ {"DS36", 0xADD0, 0x0000},
+ {"DS37", 0xAFD0, 0x0000},
+ {"DS38", 0xB1D0, 0x0000},
+ {"DS39", 0xB3D0, 0x0000},
+ {"DS40", 0xB5D0, 0x0000},
+ {"DS41", 0xB7D0, 0x0000},
+ {"DS42", 0xB9D0, 0x0000},
+ {"DS43", 0xBBD0, 0x0000},
+ {"DS44", 0xBDD0, 0x0000},
+ {"DS45", 0xBFD0, 0x0000},
+ {"DS46", 0xC1D0, 0x0000},
+ {"DS47", 0xC3D0, 0x0000},
+ {"DS48", 0xC5D0, 0x0000},
+ {"DS49", 0xC7D0, 0x0000},
+ {"DS50", 0xC9D0, 0x0000},
+ {"DS51", 0xCBD0, 0x0000},
+ {"DS52", 0xCDD0, 0x0000},
+ {"DS53", 0xCFD0, 0x0000},
+ {"DS54", 0xD1D0, 0x0000},
+ {"DS55", 0xD3D0, 0x0000},
+ {"DS56", 0xD5D0, 0x0000},
+ {"DS57", 0xD7D0, 0x0000}};
+
+
+// *** 37. Australia - Analog - Air
+XC_CHANNEL Australia_Analog_Air[] = {
+ {"0", 0x0B90, 0x0000},
+ {"1", 0x0E50, 0x0000},
+ {"2", 0x1010, 0x0000},
+ {"3", 0x1590, 0x0000},
+ {"4", 0x17D0, 0x0000},
+ {"5", 0x1990, 0x0000},
+ {"5A", 0x2290, 0x0000},
+ {"6", 0x2BD0, 0x0000},
+ {"7", 0x2D90, 0x0000},
+ {"8", 0x2F50, 0x0000},
+ {"9", 0x3110, 0x0000},
+ {"10", 0x3450, 0x0000},
+ {"11", 0x3610, 0x0000},
+ {"12", 0x37D0, 0x0000},
+ {"28", 0x83D0, 0x0000},
+ {"29", 0x8590, 0x0000},
+ {"30", 0x8750, 0x0000},
+ {"31", 0x8910, 0x0000},
+ {"32", 0x8AD0, 0x0000},
+ {"33", 0x8C90, 0x0000},
+ {"34", 0x8E50, 0x0000},
+ {"35", 0x9010, 0x0000},
+ {"36", 0x91D0, 0x0000},
+ {"37", 0x9390, 0x0000},
+ {"38", 0x9550, 0x0000},
+ {"39", 0x9710, 0x0000},
+ {"40", 0x98D0, 0x0000},
+ {"41", 0x9A90, 0x0000},
+ {"42", 0x9C50, 0x0000},
+ {"43", 0x9E10, 0x0000},
+ {"44", 0x9FD0, 0x0000},
+ {"45", 0xA190, 0x0000},
+ {"46", 0xA350, 0x0000},
+ {"47", 0xA510, 0x0000},
+ {"48", 0xA6D0, 0x0000},
+ {"49", 0xA890, 0x0000},
+ {"50", 0xAA50, 0x0000},
+ {"51", 0xAC10, 0x0000},
+ {"52", 0xADD0, 0x0000},
+ {"53", 0xAF90, 0x0000},
+ {"54", 0xB150, 0x0000},
+ {"55", 0xB310, 0x0000},
+ {"56", 0xB4D0, 0x0000},
+ {"57", 0xB690, 0x0000},
+ {"58", 0xB850, 0x0000},
+ {"59", 0xBA10, 0x0000},
+ {"60", 0xBBD0, 0x0000},
+ {"61", 0xBD90, 0x0000},
+ {"62", 0xBF50, 0x0000},
+ {"63", 0xC110, 0x0000},
+ {"64", 0xC2D0, 0x0000},
+ {"65", 0xC490, 0x0000},
+ {"66", 0xC650, 0x0000},
+ {"67", 0xC810, 0x0000},
+ {"68", 0xC9D0, 0x0000},
+ {"69", 0xCB90, 0x0000}};
+
+
+// *** 38. Australia - Analog - Cable
+XC_CHANNEL Australia_Analog_Cable[] = {
+ {"11", 0x1590, 0x0000},
+ {"12", 0x17D0, 0x0000},
+ {"13", 0x1990, 0x0000},
+ {"14", 0x1B90, 0x0000},
+ {"15", 0x1D50, 0x0000},
+ {"16", 0x1F10, 0x0000},
+ {"17", 0x20D0, 0x0000},
+ {"18", 0x2290, 0x0000},
+ {"19", 0x24D0, 0x0000},
+ {"20", 0x2690, 0x0000},
+ {"21", 0x2850, 0x0000},
+ {"22", 0x2A10, 0x0000},
+ {"23", 0x2BD0, 0x0000},
+ {"24", 0x2D90, 0x0000},
+ {"25", 0x2F50, 0x0000},
+ {"26", 0x3110, 0x0000},
+ {"27", 0x3450, 0x0000},
+ {"28", 0x3610, 0x0000},
+ {"29", 0x3810, 0x0000},
+ {"30", 0x39D0, 0x0000},
+ {"31", 0x3B90, 0x0000},
+ {"32", 0x3D50, 0x0000},
+ {"1", 0x3F10, 0x0000},
+ {"2", 0x40D0, 0x0000},
+ {"3", 0x4290, 0x0000},
+ {"4", 0x4410, 0x0000},
+ {"5", 0x4610, 0x0000},
+ {"6", 0x47D0, 0x0000},
+ {"7", 0x4990, 0x0000},
+ {"8", 0x4B50, 0x0000},
+ {"9", 0x4D10, 0x0000},
+ {"10", 0x4ED0, 0x0000},
+ {"33", 0x5090, 0x0000},
+ {"34", 0x5250, 0x0000},
+ {"35", 0x5410, 0x0000},
+ {"36", 0x55D0, 0x0000},
+ {"37", 0x5790, 0x0000},
+ {"38", 0x5950, 0x0000},
+ {"39", 0x5B10, 0x0000},
+ {"40", 0x5CD0, 0x0000},
+ {"41", 0x5E90, 0x0000},
+ {"42", 0x6050, 0x0000},
+ {"43", 0x6250, 0x0000},
+ {"44", 0x63D0, 0x0000},
+ {"45", 0x6590, 0x0000},
+ {"46", 0x6750, 0x0000},
+ {"47", 0x6910, 0x0000},
+ {"48", 0x6AD0, 0x0000},
+ {"49", 0x6C90, 0x0000},
+ {"50", 0x6E50, 0x0000},
+ {"51", 0x7010, 0x0000},
+ {"52", 0x71D0, 0x0000},
+ {"53", 0x7390, 0x0000},
+ {"54", 0x7550, 0x0000},
+ {"55", 0x7710, 0x0000},
+ {"56", 0x78D0, 0x0000},
+ {"57", 0x7A90, 0x0000},
+ {"58", 0x7C50, 0x0000},
+ {"59", 0x7E10, 0x0000},
+ {"60", 0x7FD0, 0x0000},
+ {"61", 0x8190, 0x0000},
+ {"62", 0x83D0, 0x0000},
+ {"63", 0x8590, 0x0000},
+ {"64", 0x8750, 0x0000},
+ {"65", 0x8910, 0x0000},
+ {"66", 0x8AD0, 0x0000},
+ {"67", 0x8C90, 0x0000},
+ {"68", 0x8E50, 0x0000},
+ {"69", 0x9010, 0x0000},
+ {"70", 0x91D0, 0x0000},
+ {"71", 0x9390, 0x0000},
+ {"72", 0x9550, 0x0000},
+ {"73", 0x9710, 0x0000},
+ {"74", 0x98D0, 0x0000},
+ {"75", 0x9A90, 0x0000},
+ {"76", 0x9C50, 0x0000},
+ {"77", 0x9E10, 0x0000},
+ {"78", 0x9FD0, 0x0000},
+ {"79", 0xA190, 0x0000},
+ {"80", 0xA350, 0x0000}};
+
+
+// *** 39. Australia - Digital - Air
+XC_CHANNEL Australia_Digital_Air[] = {
+ {"0", 0x0B90, 0x0000},
+ {"1", 0x0E50, 0x0000},
+ {"2", 0x1010, 0x0000},
+ {"3", 0x1590, 0x0000},
+ {"4", 0x17D0, 0x0000},
+ {"5", 0x1990, 0x0000},
+ {"5A", 0x2290, 0x0000},
+ {"6", 0x2BD0, 0x0000},
+ {"7", 0x2D90, 0x0000},
+ {"8", 0x2F50, 0x0000},
+ {"9", 0x3110, 0x0000},
+ {"10", 0x3450, 0x0000},
+ {"11", 0x3610, 0x0000},
+ {"12", 0x37D0, 0x0000},
+ {"28", 0x83D0, 0x0000},
+ {"29", 0x8590, 0x0000},
+ {"30", 0x8750, 0x0000},
+ {"31", 0x8910, 0x0000},
+ {"32", 0x8AD0, 0x0000},
+ {"33", 0x8C90, 0x0000},
+ {"34", 0x8E50, 0x0000},
+ {"35", 0x9010, 0x0000},
+ {"36", 0x91D0, 0x0000},
+ {"37", 0x9390, 0x0000},
+ {"38", 0x9550, 0x0000},
+ {"39", 0x9710, 0x0000},
+ {"40", 0x98D0, 0x0000},
+ {"41", 0x9A90, 0x0000},
+ {"42", 0x9C50, 0x0000},
+ {"43", 0x9E10, 0x0000},
+ {"44", 0x9FD0, 0x0000},
+ {"45", 0xA190, 0x0000},
+ {"46", 0xA350, 0x0000},
+ {"47", 0xA510, 0x0000},
+ {"48", 0xA6D0, 0x0000},
+ {"49", 0xA890, 0x0000},
+ {"50", 0xAA50, 0x0000},
+ {"51", 0xAC10, 0x0000},
+ {"52", 0xADD0, 0x0000},
+ {"53", 0xAF90, 0x0000},
+ {"54", 0xB150, 0x0000},
+ {"55", 0xB310, 0x0000},
+ {"56", 0xB4D0, 0x0000},
+ {"57", 0xB690, 0x0000},
+ {"58", 0xB850, 0x0000},
+ {"59", 0xBA10, 0x0000},
+ {"60", 0xBBD0, 0x0000},
+ {"61", 0xBD90, 0x0000},
+ {"62", 0xBF50, 0x0000},
+ {"63", 0xC110, 0x0000},
+ {"64", 0xC2D0, 0x0000},
+ {"65", 0xC490, 0x0000},
+ {"66", 0xC650, 0x0000},
+ {"67", 0xC810, 0x0000},
+ {"68", 0xC9D0, 0x0000},
+ {"69", 0xCB90, 0x0000}};
+
+
+// *** 40. Australia - Digital - Cable
+XC_CHANNEL Australia_Digital_Cable[] = {
+ {"11", 0x1590, 0x0000},
+ {"12", 0x17D0, 0x0000},
+ {"13", 0x1990, 0x0000},
+ {"14", 0x1B90, 0x0000},
+ {"15", 0x1D50, 0x0000},
+ {"16", 0x1F10, 0x0000},
+ {"17", 0x20D0, 0x0000},
+ {"18", 0x2290, 0x0000},
+ {"19", 0x24D0, 0x0000},
+ {"20", 0x2690, 0x0000},
+ {"21", 0x2850, 0x0000},
+ {"22", 0x2A10, 0x0000},
+ {"23", 0x2BD0, 0x0000},
+ {"24", 0x2D90, 0x0000},
+ {"25", 0x2F50, 0x0000},
+ {"26", 0x3110, 0x0000},
+ {"27", 0x3450, 0x0000},
+ {"28", 0x3610, 0x0000},
+ {"29", 0x3810, 0x0000},
+ {"30", 0x39D0, 0x0000},
+ {"31", 0x3B90, 0x0000},
+ {"32", 0x3D50, 0x0000},
+ {"1", 0x3F10, 0x0000},
+ {"2", 0x40D0, 0x0000},
+ {"3", 0x4290, 0x0000},
+ {"4", 0x4410, 0x0000},
+ {"5", 0x4610, 0x0000},
+ {"6", 0x47D0, 0x0000},
+ {"7", 0x4990, 0x0000},
+ {"8", 0x4B50, 0x0000},
+ {"9", 0x4D10, 0x0000},
+ {"10", 0x4ED0, 0x0000},
+ {"33", 0x5090, 0x0000},
+ {"34", 0x5250, 0x0000},
+ {"35", 0x5410, 0x0000},
+ {"36", 0x55D0, 0x0000},
+ {"37", 0x5790, 0x0000},
+ {"38", 0x5950, 0x0000},
+ {"39", 0x5B10, 0x0000},
+ {"40", 0x5CD0, 0x0000},
+ {"41", 0x5E90, 0x0000},
+ {"42", 0x6050, 0x0000},
+ {"43", 0x6250, 0x0000},
+ {"44", 0x63D0, 0x0000},
+ {"45", 0x6590, 0x0000},
+ {"46", 0x6750, 0x0000},
+ {"47", 0x6910, 0x0000},
+ {"48", 0x6AD0, 0x0000},
+ {"49", 0x6C90, 0x0000},
+ {"50", 0x6E50, 0x0000},
+ {"51", 0x7010, 0x0000},
+ {"52", 0x71D0, 0x0000},
+ {"53", 0x7390, 0x0000},
+ {"54", 0x7550, 0x0000},
+ {"55", 0x7710, 0x0000},
+ {"56", 0x78D0, 0x0000},
+ {"57", 0x7A90, 0x0000},
+ {"58", 0x7C50, 0x0000},
+ {"59", 0x7E10, 0x0000},
+ {"60", 0x7FD0, 0x0000},
+ {"61", 0x8190, 0x0000},
+ {"62", 0x83D0, 0x0000},
+ {"63", 0x8590, 0x0000},
+ {"64", 0x8750, 0x0000},
+ {"65", 0x8910, 0x0000},
+ {"66", 0x8AD0, 0x0000},
+ {"67", 0x8C90, 0x0000},
+ {"68", 0x8E50, 0x0000},
+ {"69", 0x9010, 0x0000},
+ {"70", 0x91D0, 0x0000},
+ {"71", 0x9390, 0x0000},
+ {"72", 0x9550, 0x0000},
+ {"73", 0x9710, 0x0000},
+ {"74", 0x98D0, 0x0000},
+ {"75", 0x9A90, 0x0000},
+ {"76", 0x9C50, 0x0000},
+ {"77", 0x9E10, 0x0000},
+ {"78", 0x9FD0, 0x0000},
+ {"79", 0xA190, 0x0000},
+ {"80", 0xA350, 0x0000}};
+
+
+// *** 41. OIRT - Analog - Air
+XC_CHANNEL OIRT_Analog_Air[] = {
+ {"1", 0x0C70, 0x0000},
+ {"2", 0x0ED0, 0x0000},
+ {"3", 0x1350, 0x0000},
+ {"4", 0x1550, 0x0000},
+ {"5", 0x1750, 0x0000},
+ {"6", 0x2BD0, 0x0000},
+ {"7", 0x2DD0, 0x0000},
+ {"8", 0x2FD0, 0x0000},
+ {"9", 0x31D0, 0x0000},
+ {"10", 0x33D0, 0x0000},
+ {"11", 0x35D0, 0x0000},
+ {"12", 0x37D0, 0x0000},
+ {"21", 0x75D0, 0x0000},
+ {"22", 0x77D0, 0x0000},
+ {"23", 0x79D0, 0x0000},
+ {"24", 0x7BD0, 0x0000},
+ {"25", 0x7DD0, 0x0000},
+ {"26", 0x7FD0, 0x0000},
+ {"27", 0x81D0, 0x0000},
+ {"28", 0x83D0, 0x0000},
+ {"29", 0x85D0, 0x0000},
+ {"30", 0x87D0, 0x0000},
+ {"31", 0x89D0, 0x0000},
+ {"32", 0x8BD0, 0x0000},
+ {"33", 0x8DD0, 0x0000},
+ {"34", 0x8FD0, 0x0000},
+ {"35", 0x91D0, 0x0000},
+ {"36", 0x93D0, 0x0000},
+ {"37", 0x95D0, 0x0000},
+ {"38", 0x97D0, 0x0000},
+ {"39", 0x99D0, 0x0000},
+ {"40", 0x9BD0, 0x0000},
+ {"41", 0x9DD0, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA1D0, 0x0000},
+ {"44", 0xA3D0, 0x0000},
+ {"45", 0xA5D0, 0x0000},
+ {"46", 0xA7D0, 0x0000},
+ {"47", 0xA9D0, 0x0000},
+ {"48", 0xABD0, 0x0000},
+ {"49", 0xADD0, 0x0000},
+ {"50", 0xAFD0, 0x0000},
+ {"51", 0xB1D0, 0x0000},
+ {"52", 0xB3D0, 0x0000},
+ {"53", 0xB5D0, 0x0000},
+ {"54", 0xB7D0, 0x0000},
+ {"55", 0xB9D0, 0x0000},
+ {"56", 0xBBD0, 0x0000},
+ {"57", 0xBDD0, 0x0000},
+ {"58", 0xBFD0, 0x0000},
+ {"59", 0xC1D0, 0x0000},
+ {"60", 0xC3D0, 0x0000},
+ {"61", 0xC5D0, 0x0000},
+ {"62", 0xC7D0, 0x0000},
+ {"63", 0xC9D0, 0x0000},
+ {"64", 0xCBD0, 0x0000},
+ {"65", 0xCDD0, 0x0000},
+ {"66", 0xCFD0, 0x0000},
+ {"67", 0xD1D0, 0x0000},
+ {"68", 0xD3D0, 0x0000},
+ {"69", 0xD5D0, 0x0000}};
+
+
+// *** 42. OIRT - Analog - Cable
+XC_CHANNEL OIRT_Analog_Cable[] = {
+ {"1", 0x0C70, 0x0000},
+ {"2", 0x0ED0, 0x0000},
+ {"3", 0x1350, 0x0000},
+ {"4", 0x1550, 0x0000},
+ {"5", 0x1750, 0x0000},
+ {"6", 0x2BD0, 0x0000},
+ {"7", 0x2DD0, 0x0000},
+ {"8", 0x2FD0, 0x0000},
+ {"9", 0x31D0, 0x0000},
+ {"10", 0x33D0, 0x0000},
+ {"11", 0x35D0, 0x0000},
+ {"12", 0x37D0, 0x0000},
+ {"SC", 0x1C10, 0x0000},
+ {"SC", 0x1E10, 0x0000},
+ {"SC", 0x2010, 0x0000},
+ {"SC", 0x2210, 0x0000},
+ {"SC", 0x2410, 0x0000},
+ {"SC", 0x2610, 0x0000},
+ {"SC", 0x2810, 0x0000},
+ {"SC", 0x3810, 0x0000},
+ {"SC", 0x3A10, 0x0000},
+ {"SC", 0x3C10, 0x0000},
+ {"SC", 0x3E10, 0x0000},
+ {"SC", 0x4010, 0x0000},
+ {"SC", 0x4210, 0x0000},
+ {"SC", 0x4410, 0x0000},
+ {"SC", 0x4610, 0x0000},
+ {"SC", 0x4810, 0x0000},
+ {"SC", 0x4A10, 0x0000},
+ {"SC", 0x4C10, 0x0000},
+ {"SC", 0x4E10, 0x0000},
+ {"SC", 0x5010, 0x0000},
+ {"SC", 0x5210, 0x0000},
+ {"SC", 0x5410, 0x0000},
+ {"SC", 0x5610, 0x0000},
+ {"SC", 0x5810, 0x0000},
+ {"SC", 0x5A10, 0x0000},
+ {"SC", 0x5C10, 0x0000},
+ {"SC", 0x5E10, 0x0000},
+ {"SC", 0x6010, 0x0000},
+ {"SC", 0x6210, 0x0000},
+ {"SC", 0x6410, 0x0000},
+ {"SC", 0x6610, 0x0000},
+ {"SC", 0x6810, 0x0000},
+ {"SC", 0x6A10, 0x0000},
+ {"SC", 0x6C10, 0x0000},
+ {"SC", 0x6E10, 0x0000},
+ {"SC", 0x7010, 0x0000},
+ {"SC", 0x7210, 0x0000},
+ {"SC", 0x7410, 0x0000},
+ {"SC", 0x7610, 0x0000},
+ {"SC", 0x7810, 0x0000},
+ {"SC", 0x7A10, 0x0000},
+ {"SC", 0x7C10, 0x0000}};
+
+
+// *** 43. OIRT - Digital - Air
+XC_CHANNEL OIRT_Digital_Air[] = {
+ {"1", 0x0C70, 0x0000},
+ {"2", 0x0ED0, 0x0000},
+ {"3", 0x1350, 0x0000},
+ {"4", 0x1550, 0x0000},
+ {"5", 0x1750, 0x0000},
+ {"6", 0x2BD0, 0x0000},
+ {"7", 0x2DD0, 0x0000},
+ {"8", 0x2FD0, 0x0000},
+ {"9", 0x31D0, 0x0000},
+ {"10", 0x33D0, 0x0000},
+ {"11", 0x35D0, 0x0000},
+ {"12", 0x37D0, 0x0000},
+ {"21", 0x75D0, 0x0000},
+ {"22", 0x77D0, 0x0000},
+ {"23", 0x79D0, 0x0000},
+ {"24", 0x7BD0, 0x0000},
+ {"25", 0x7DD0, 0x0000},
+ {"26", 0x7FD0, 0x0000},
+ {"27", 0x81D0, 0x0000},
+ {"28", 0x83D0, 0x0000},
+ {"29", 0x85D0, 0x0000},
+ {"30", 0x87D0, 0x0000},
+ {"31", 0x89D0, 0x0000},
+ {"32", 0x8BD0, 0x0000},
+ {"33", 0x8DD0, 0x0000},
+ {"34", 0x8FD0, 0x0000},
+ {"35", 0x91D0, 0x0000},
+ {"36", 0x93D0, 0x0000},
+ {"37", 0x95D0, 0x0000},
+ {"38", 0x97D0, 0x0000},
+ {"39", 0x99D0, 0x0000},
+ {"40", 0x9BD0, 0x0000},
+ {"41", 0x9DD0, 0x0000},
+ {"42", 0x9FD0, 0x0000},
+ {"43", 0xA1D0, 0x0000},
+ {"44", 0xA3D0, 0x0000},
+ {"45", 0xA5D0, 0x0000},
+ {"46", 0xA7D0, 0x0000},
+ {"47", 0xA9D0, 0x0000},
+ {"48", 0xABD0, 0x0000},
+ {"49", 0xADD0, 0x0000},
+ {"50", 0xAFD0, 0x0000},
+ {"51", 0xB1D0, 0x0000},
+ {"52", 0xB3D0, 0x0000},
+ {"53", 0xB5D0, 0x0000},
+ {"54", 0xB7D0, 0x0000},
+ {"55", 0xB9D0, 0x0000},
+ {"56", 0xBBD0, 0x0000},
+ {"57", 0xBDD0, 0x0000},
+ {"58", 0xBFD0, 0x0000},
+ {"59", 0xC1D0, 0x0000},
+ {"60", 0xC3D0, 0x0000},
+ {"61", 0xC5D0, 0x0000},
+ {"62", 0xC7D0, 0x0000},
+ {"63", 0xC9D0, 0x0000},
+ {"64", 0xCBD0, 0x0000},
+ {"65", 0xCDD0, 0x0000},
+ {"66", 0xCFD0, 0x0000},
+ {"67", 0xD1D0, 0x0000},
+ {"68", 0xD3D0, 0x0000},
+ {"69", 0xD5D0, 0x0000}};
+
+
+// *** 44. OIRT - Digital - Cable
+XC_CHANNEL OIRT_Digital_Cable[] = {
+ {"1", 0x0C70, 0x0000},
+ {"2", 0x0ED0, 0x0000},
+ {"3", 0x1350, 0x0000},
+ {"4", 0x1550, 0x0000},
+ {"5", 0x1750, 0x0000},
+ {"6", 0x2BD0, 0x0000},
+ {"7", 0x2DD0, 0x0000},
+ {"8", 0x2FD0, 0x0000},
+ {"9", 0x31D0, 0x0000},
+ {"10", 0x33D0, 0x0000},
+ {"11", 0x35D0, 0x0000},
+ {"12", 0x37D0, 0x0000},
+ {"SC", 0x1C10, 0x0000},
+ {"SC", 0x1E10, 0x0000},
+ {"SC", 0x2010, 0x0000},
+ {"SC", 0x2210, 0x0000},
+ {"SC", 0x2410, 0x0000},
+ {"SC", 0x2610, 0x0000},
+ {"SC", 0x2810, 0x0000},
+ {"SC", 0x3810, 0x0000},
+ {"SC", 0x3A10, 0x0000},
+ {"SC", 0x3C10, 0x0000},
+ {"SC", 0x3E10, 0x0000},
+ {"SC", 0x4010, 0x0000},
+ {"SC", 0x4210, 0x0000},
+ {"SC", 0x4410, 0x0000},
+ {"SC", 0x4610, 0x0000},
+ {"SC", 0x4810, 0x0000},
+ {"SC", 0x4A10, 0x0000},
+ {"SC", 0x4C10, 0x0000},
+ {"SC", 0x4E10, 0x0000},
+ {"SC", 0x5010, 0x0000},
+ {"SC", 0x5210, 0x0000},
+ {"SC", 0x5410, 0x0000},
+ {"SC", 0x5610, 0x0000},
+ {"SC", 0x5810, 0x0000},
+ {"SC", 0x5A10, 0x0000},
+ {"SC", 0x5C10, 0x0000},
+ {"SC", 0x5E10, 0x0000},
+ {"SC", 0x6010, 0x0000},
+ {"SC", 0x6210, 0x0000},
+ {"SC", 0x6410, 0x0000},
+ {"SC", 0x6610, 0x0000},
+ {"SC", 0x6810, 0x0000},
+ {"SC", 0x6A10, 0x0000},
+ {"SC", 0x6C10, 0x0000},
+ {"SC", 0x6E10, 0x0000},
+ {"SC", 0x7010, 0x0000},
+ {"SC", 0x7210, 0x0000},
+ {"SC", 0x7410, 0x0000},
+ {"SC", 0x7610, 0x0000},
+ {"SC", 0x7810, 0x0000},
+ {"SC", 0x7A10, 0x0000},
+ {"SC", 0x7C10, 0x0000}};
+
+
+// *** 45. USA - FM radio
+XC_CHANNEL USA_FM_radio[] = {
+ {"200", 0x15F9, 0x0000},
+ {"201", 0x1606, 0x0000},
+ {"202", 0x1613, 0x0000},
+ {"203", 0x1620, 0x0000},
+ {"204", 0x162C, 0x0000},
+ {"205", 0x1639, 0x0000},
+ {"206", 0x1646, 0x0000},
+ {"207", 0x1653, 0x0000},
+ {"208", 0x1660, 0x0000},
+ {"209", 0x166C, 0x0000},
+ {"210", 0x1679, 0x0000},
+ {"211", 0x1686, 0x0000},
+ {"212", 0x1693, 0x0000},
+ {"213", 0x16A0, 0x0000},
+ {"214", 0x16AC, 0x0000},
+ {"215", 0x16B9, 0x0000},
+ {"216", 0x16C6, 0x0000},
+ {"217", 0x16D3, 0x0000},
+ {"218", 0x16E0, 0x0000},
+ {"219", 0x16EC, 0x0000},
+ {"220", 0x16F9, 0x0000},
+ {"221", 0x1706, 0x0000},
+ {"222", 0x1713, 0x0000},
+ {"223", 0x1720, 0x0000},
+ {"224", 0x172C, 0x0000},
+ {"225", 0x1739, 0x0000},
+ {"226", 0x1746, 0x0000},
+ {"227", 0x1753, 0x0000},
+ {"228", 0x1760, 0x0000},
+ {"229", 0x176C, 0x0000},
+ {"230", 0x1779, 0x0000},
+ {"231", 0x1786, 0x0000},
+ {"232", 0x1793, 0x0000},
+ {"233", 0x17A0, 0x0000},
+ {"234", 0x17AC, 0x0000},
+ {"235", 0x17B9, 0x0000},
+ {"236", 0x17C6, 0x0000},
+ {"237", 0x17D3, 0x0000},
+ {"238", 0x17E0, 0x0000},
+ {"239", 0x17EC, 0x0000},
+ {"240", 0x17F9, 0x0000},
+ {"241", 0x1806, 0x0000},
+ {"242", 0x1813, 0x0000},
+ {"243", 0x1820, 0x0000},
+ {"244", 0x182C, 0x0000},
+ {"245", 0x1839, 0x0000},
+ {"246", 0x1846, 0x0000},
+ {"247", 0x1853, 0x0000},
+ {"248", 0x1860, 0x0000},
+ {"249", 0x186C, 0x0000},
+ {"250", 0x1879, 0x0000},
+ {"251", 0x1886, 0x0000},
+ {"252", 0x1893, 0x0000},
+ {"253", 0x18A0, 0x0000},
+ {"254", 0x18AC, 0x0000},
+ {"255", 0x18B9, 0x0000},
+ {"256", 0x18C6, 0x0000},
+ {"257", 0x18D3, 0x0000},
+ {"258", 0x18E0, 0x0000},
+ {"259", 0x18EC, 0x0000},
+ {"260", 0x18F9, 0x0000},
+ {"261", 0x1906, 0x0000},
+ {"262", 0x1913, 0x0000},
+ {"263", 0x1920, 0x0000},
+ {"264", 0x192C, 0x0000},
+ {"265", 0x1939, 0x0000},
+ {"266", 0x1946, 0x0000},
+ {"267", 0x1953, 0x0000},
+ {"268", 0x1960, 0x0000},
+ {"269", 0x196C, 0x0000},
+ {"270", 0x1979, 0x0000},
+ {"271", 0x1986, 0x0000},
+ {"272", 0x1993, 0x0000},
+ {"273", 0x19A0, 0x0000},
+ {"274", 0x19AC, 0x0000},
+ {"275", 0x19B9, 0x0000},
+ {"276", 0x19C6, 0x0000},
+ {"277", 0x19D3, 0x0000},
+ {"278", 0x19E0, 0x0000},
+ {"279", 0x19EC, 0x0000},
+ {"280", 0x19F9, 0x0000},
+ {"281", 0x1A06, 0x0000},
+ {"282", 0x1A13, 0x0000},
+ {"283", 0x1A20, 0x0000},
+ {"284", 0x1A2C, 0x0000},
+ {"285", 0x1A39, 0x0000},
+ {"286", 0x1A46, 0x0000},
+ {"287", 0x1A53, 0x0000},
+ {"288", 0x1A60, 0x0000},
+ {"289", 0x1A6C, 0x0000},
+ {"290", 0x1A79, 0x0000},
+ {"291", 0x1A86, 0x0000},
+ {"292", 0x1A93, 0x0000},
+ {"293", 0x1AA0, 0x0000},
+ {"294", 0x1AAC, 0x0000},
+ {"295", 0x1AB9, 0x0000},
+ {"296", 0x1AC6, 0x0000},
+ {"297", 0x1AD3, 0x0000},
+ {"298", 0x1AE0, 0x0000},
+ {"299", 0x1AEC, 0x0000},
+ {"300", 0x1AF9, 0x0000}};
+
+
+// *** 46. Europe - FM radio
+XC_CHANNEL Europe_FM_radio[] = {
+ {"87.6FM", 0x15E6, 0x0000},
+ {"87.8FM", 0x15F3, 0x0000},
+ {"88FM", 0x1600, 0x0000},
+ {"88.2FM", 0x160C, 0x0000},
+ {"88.4FM", 0x1619, 0x0000},
+ {"88.6FM", 0x1626, 0x0000},
+ {"88.8FM", 0x1633, 0x0000},
+ {"89FM", 0x1640, 0x0000},
+ {"89.2FM", 0x164C, 0x0000},
+ {"89.4FM", 0x1659, 0x0000},
+ {"89.6FM", 0x1666, 0x0000},
+ {"89.8FM", 0x1673, 0x0000},
+ {"90FM", 0x1680, 0x0000},
+ {"90.2FM", 0x168C, 0x0000},
+ {"90.4FM", 0x1699, 0x0000},
+ {"90.6FM", 0x16A6, 0x0000},
+ {"90.8FM", 0x16B3, 0x0000},
+ {"91FM", 0x16C0, 0x0000},
+ {"91.2FM", 0x16CC, 0x0000},
+ {"91.4FM", 0x16D9, 0x0000},
+ {"91.6FM", 0x16E6, 0x0000},
+ {"91.8FM", 0x16F3, 0x0000},
+ {"92FM", 0x1700, 0x0000},
+ {"92.2FM", 0x170C, 0x0000},
+ {"92.4FM", 0x1719, 0x0000},
+ {"92.6FM", 0x1726, 0x0000},
+ {"92.8FM", 0x1733, 0x0000},
+ {"93FM", 0x1740, 0x0000},
+ {"93.2FM", 0x174C, 0x0000},
+ {"93.4FM", 0x1759, 0x0000},
+ {"93.6FM", 0x1766, 0x0000},
+ {"93.8FM", 0x1773, 0x0000},
+ {"94FM", 0x1780, 0x0000},
+ {"94.2FM", 0x178C, 0x0000},
+ {"94.4FM", 0x1799, 0x0000},
+ {"94.6FM", 0x17A6, 0x0000},
+ {"94.8FM", 0x17B3, 0x0000},
+ {"95FM", 0x17C0, 0x0000},
+ {"95.2FM", 0x17CC, 0x0000},
+ {"95.4FM", 0x17D9, 0x0000},
+ {"95.6FM", 0x17E6, 0x0000},
+ {"95.8FM", 0x17F3, 0x0000},
+ {"96FM", 0x1800, 0x0000},
+ {"96.2FM", 0x180C, 0x0000},
+ {"96.4FM", 0x1819, 0x0000},
+ {"96.6FM", 0x1826, 0x0000},
+ {"96.8FM", 0x1833, 0x0000},
+ {"97FM", 0x1840, 0x0000},
+ {"97.2FM", 0x184C, 0x0000},
+ {"97.4FM", 0x1859, 0x0000},
+ {"97.6FM", 0x1866, 0x0000},
+ {"97.8FM", 0x1873, 0x0000},
+ {"98FM", 0x1880, 0x0000},
+ {"98.2FM", 0x188C, 0x0000},
+ {"98.4FM", 0x1899, 0x0000},
+ {"98.6FM", 0x18A6, 0x0000},
+ {"98.8FM", 0x18B3, 0x0000},
+ {"99FM", 0x18C0, 0x0000},
+ {"99.2FM", 0x18CC, 0x0000},
+ {"99.4FM", 0x18D9, 0x0000},
+ {"99.6FM", 0x18E6, 0x0000},
+ {"99.8FM", 0x18F3, 0x0000},
+ {"100FM", 0x1900, 0x0000},
+ {"100.2FM", 0x190C, 0x0000},
+ {"100.4FM", 0x1919, 0x0000},
+ {"100.6FM", 0x1926, 0x0000},
+ {"100.8FM", 0x1933, 0x0000},
+ {"101FM", 0x1940, 0x0000},
+ {"101.2FM", 0x194C, 0x0000},
+ {"101.4FM", 0x1959, 0x0000},
+ {"101.6FM", 0x1966, 0x0000},
+ {"101.8FM", 0x1973, 0x0000},
+ {"102FM", 0x1980, 0x0000},
+ {"102.2FM", 0x198C, 0x0000},
+ {"102.4FM", 0x1999, 0x0000},
+ {"102.6FM", 0x19A6, 0x0000},
+ {"102.8FM", 0x19B3, 0x0000},
+ {"103FM", 0x19C0, 0x0000},
+ {"103.2FM", 0x19CC, 0x0000},
+ {"103.4FM", 0x19D9, 0x0000},
+ {"103.6FM", 0x19E6, 0x0000},
+ {"103.8FM", 0x19F3, 0x0000},
+ {"104FM", 0x1A00, 0x0000},
+ {"104.2FM", 0x1A0C, 0x0000},
+ {"104.4FM", 0x1A19, 0x0000},
+ {"104.6FM", 0x1A26, 0x0000},
+ {"104.8FM", 0x1A33, 0x0000},
+ {"105FM", 0x1A40, 0x0000},
+ {"105.2FM", 0x1A4C, 0x0000},
+ {"105.4FM", 0x1A59, 0x0000},
+ {"105.6FM", 0x1A66, 0x0000},
+ {"105.8FM", 0x1A73, 0x0000},
+ {"106FM", 0x1A80, 0x0000},
+ {"106.2FM", 0x1A8C, 0x0000},
+ {"106.4FM", 0x1A99, 0x0000},
+ {"106.6FM", 0x1AA6, 0x0000},
+ {"106.8FM", 0x1AB3, 0x0000},
+ {"107FM", 0x1AC0, 0x0000},
+ {"107.2FM", 0x1ACC, 0x0000},
+ {"107.4FM", 0x1AD9, 0x0000},
+ {"107.6FM", 0x1AE6, 0x0000},
+ {"107.8FM", 0x1AF3, 0x0000},
+ {"108FM", 0x1B00, 0x0000}};
+
+
+// *** 47. Japan - FM radio
+XC_CHANNEL Japan_FM_radio[] = {
+ {"76FM", 0x1300, 0x0000},
+ {"76.1FM", 0x1306, 0x0000},
+ {"76.2FM", 0x130C, 0x0000},
+ {"76.3FM", 0x1313, 0x0000},
+ {"76.4FM", 0x1319, 0x0000},
+ {"76.5FM", 0x1320, 0x0000},
+ {"76.6FM", 0x1326, 0x0000},
+ {"76.7FM", 0x132C, 0x0000},
+ {"76.8FM", 0x1333, 0x0000},
+ {"76.9FM", 0x1339, 0x0000},
+ {"77FM", 0x1340, 0x0000},
+ {"77.1FM", 0x1346, 0x0000},
+ {"77.2FM", 0x134C, 0x0000},
+ {"77.3FM", 0x1353, 0x0000},
+ {"77.4FM", 0x1359, 0x0000},
+ {"77.5FM", 0x1360, 0x0000},
+ {"77.6FM", 0x1366, 0x0000},
+ {"77.7FM", 0x136C, 0x0000},
+ {"77.8FM", 0x1373, 0x0000},
+ {"77.9FM", 0x1379, 0x0000},
+ {"78FM", 0x1380, 0x0000},
+ {"78.1FM", 0x1386, 0x0000},
+ {"78.2FM", 0x138C, 0x0000},
+ {"78.3FM", 0x1393, 0x0000},
+ {"78.4FM", 0x1399, 0x0000},
+ {"78.5FM", 0x13A0, 0x0000},
+ {"78.6FM", 0x13A6, 0x0000},
+ {"78.7FM", 0x13AC, 0x0000},
+ {"78.8FM", 0x13B3, 0x0000},
+ {"78.9FM", 0x13B9, 0x0000},
+ {"79FM", 0x13C0, 0x0000},
+ {"79.1FM", 0x13C6, 0x0000},
+ {"79.2FM", 0x13CC, 0x0000},
+ {"79.3FM", 0x13D3, 0x0000},
+ {"79.4FM", 0x13D9, 0x0000},
+ {"79.5FM", 0x13E0, 0x0000},
+ {"79.6FM", 0x13E6, 0x0000},
+ {"79.7FM", 0x13EC, 0x0000},
+ {"79.8FM", 0x13F3, 0x0000},
+ {"79.9FM", 0x13F9, 0x0000},
+ {"80FM", 0x1400, 0x0000},
+ {"80.1FM", 0x1406, 0x0000},
+ {"80.2FM", 0x140C, 0x0000},
+ {"80.3FM", 0x1413, 0x0000},
+ {"80.4FM", 0x1419, 0x0000},
+ {"80.5FM", 0x1420, 0x0000},
+ {"80.6FM", 0x1426, 0x0000},
+ {"80.7FM", 0x142C, 0x0000},
+ {"80.8FM", 0x1433, 0x0000},
+ {"80.9FM", 0x1439, 0x0000},
+ {"81FM", 0x1440, 0x0000},
+ {"81.1FM", 0x1446, 0x0000},
+ {"81.2FM", 0x144C, 0x0000},
+ {"81.3FM", 0x1453, 0x0000},
+ {"81.4FM", 0x1459, 0x0000},
+ {"81.5FM", 0x1460, 0x0000},
+ {"81.6FM", 0x1466, 0x0000},
+ {"81.7FM", 0x146C, 0x0000},
+ {"81.8FM", 0x1473, 0x0000},
+ {"81.9FM", 0x1479, 0x0000},
+ {"82FM", 0x1480, 0x0000},
+ {"82.1FM", 0x1486, 0x0000},
+ {"82.2FM", 0x148C, 0x0000},
+ {"82.3FM", 0x1493, 0x0000},
+ {"82.4FM", 0x1499, 0x0000},
+ {"82.5FM", 0x14A0, 0x0000},
+ {"82.6FM", 0x14A6, 0x0000},
+ {"82.7FM", 0x14AC, 0x0000},
+ {"82.8FM", 0x14B3, 0x0000},
+ {"82.9FM", 0x14B9, 0x0000},
+ {"83FM", 0x14C0, 0x0000},
+ {"83.1FM", 0x14C6, 0x0000},
+ {"83.2FM", 0x14CC, 0x0000},
+ {"83.3FM", 0x14D3, 0x0000},
+ {"83.4FM", 0x14D9, 0x0000},
+ {"83.5FM", 0x14E0, 0x0000},
+ {"83.6FM", 0x14E6, 0x0000},
+ {"83.7FM", 0x14EC, 0x0000},
+ {"83.8FM", 0x14F3, 0x0000},
+ {"83.9FM", 0x14F9, 0x0000},
+ {"84FM", 0x1500, 0x0000},
+ {"84.1FM", 0x1506, 0x0000},
+ {"84.2FM", 0x150C, 0x0000},
+ {"84.3FM", 0x1513, 0x0000},
+ {"84.4FM", 0x1519, 0x0000},
+ {"84.5FM", 0x1520, 0x0000},
+ {"84.6FM", 0x1526, 0x0000},
+ {"84.7FM", 0x152C, 0x0000},
+ {"84.8FM", 0x1533, 0x0000},
+ {"84.9FM", 0x1539, 0x0000},
+ {"85FM", 0x1540, 0x0000},
+ {"85.1FM", 0x1546, 0x0000},
+ {"85.2FM", 0x154C, 0x0000},
+ {"85.3FM", 0x1553, 0x0000},
+ {"85.4FM", 0x1559, 0x0000},
+ {"85.5FM", 0x1560, 0x0000},
+ {"85.6FM", 0x1566, 0x0000},
+ {"85.7FM", 0x156C, 0x0000},
+ {"85.8FM", 0x1573, 0x0000},
+ {"85.9FM", 0x1579, 0x0000},
+ {"86FM", 0x1580, 0x0000},
+ {"86.1FM", 0x1586, 0x0000},
+ {"86.2FM", 0x158C, 0x0000},
+ {"86.3FM", 0x1593, 0x0000},
+ {"86.4FM", 0x1599, 0x0000},
+ {"86.5FM", 0x15A0, 0x0000},
+ {"86.6FM", 0x15A6, 0x0000},
+ {"86.7FM", 0x15AC, 0x0000},
+ {"86.8FM", 0x15B3, 0x0000},
+ {"86.9FM", 0x15B9, 0x0000},
+ {"87FM", 0x15C0, 0x0000},
+ {"87.1FM", 0x15C6, 0x0000},
+ {"87.2FM", 0x15CC, 0x0000},
+ {"87.3FM", 0x15D3, 0x0000},
+ {"87.4FM", 0x15D9, 0x0000},
+ {"87.5FM", 0x15E0, 0x0000},
+ {"87.6FM", 0x15E6, 0x0000},
+ {"87.7FM", 0x15EC, 0x0000},
+ {"87.8FM", 0x15F3, 0x0000},
+ {"87.9FM", 0x15F9, 0x0000},
+ {"88FM", 0x1600, 0x0000},
+ {"88.1FM", 0x1606, 0x0000},
+ {"88.2FM", 0x160C, 0x0000},
+ {"88.3FM", 0x1613, 0x0000},
+ {"88.4FM", 0x1619, 0x0000},
+ {"88.5FM", 0x1620, 0x0000},
+ {"88.6FM", 0x1626, 0x0000},
+ {"88.7FM", 0x162C, 0x0000},
+ {"88.8FM", 0x1633, 0x0000},
+ {"88.9FM", 0x1639, 0x0000},
+ {"89FM", 0x1640, 0x0000},
+ {"89.1FM", 0x1646, 0x0000},
+ {"89.2FM", 0x164C, 0x0000},
+ {"89.3FM", 0x1653, 0x0000},
+ {"89.4FM", 0x1659, 0x0000},
+ {"89.5FM", 0x1660, 0x0000},
+ {"89.6FM", 0x1666, 0x0000},
+ {"89.7FM", 0x166C, 0x0000},
+ {"89.8FM", 0x1673, 0x0000},
+ {"89.9FM", 0x1679, 0x0000},
+ {"90FM", 0x1680, 0x0000}};
+
+
+XC_CHANNEL_MAP AllChannelMaps[] = {
+ {"USA - Analog - Air", 68, USA_Analog_Air},
+ {"USA - Analog - Cable", 135, USA_Analog_Cable},
+ {"USA - Digital - Air", 68, USA_Digital_Air},
+ {"USA - Digital - Cable", 135, USA_Digital_Cable},
+ {"Taiwan - Analog - Air", 68, Taiwan_Analog_Air},
+ {"Taiwan - Analog - Cable", 135, Taiwan_Analog_Cable},
+ {"Taiwan - Digital - Air", 68, Taiwan_Digital_Air},
+ {"Taiwan - Digital - Cable", 135, Taiwan_Digital_Cable},
+ {"Japan - Analog - Air", 62, Japan_Analog_Air},
+ {"Japan - Analog - Cable", 62, Japan_Analog_Cable},
+ {"Japan - Digital - Air", 62, Japan_Digital_Air},
+ {"Japan - Digital - Cable", 62, Japan_Digital_Cable},
+ {"CCIR - Analog - Air", 60, CCIR_Analog_Air},
+ {"CCIR - Analog - Cable", 57, CCIR_Analog_Cable},
+ {"CCIR - Digital - Air", 60, CCIR_Digital_Air},
+ {"CCIR - Digital - Cable", 57, CCIR_Digital_Cable},
+ {"India - Analog - Air", 106, India_Analog_Air},
+ {"India - Analog - Cable", 106, India_Analog_Cable},
+ {"India - Digital - Air", 106, India_Digital_Air},
+ {"India - Digital - Cable", 106, India_Digital_Cable},
+ {"France - Analog - Air", 59, France_Analog_Air},
+ {"France - Analog - Cable", 89, France_Analog_Cable},
+ {"France - Digital - Air", 59, France_Digital_Air},
+ {"France - Digital - Cable", 89, France_Digital_Cable},
+ {"UK - Analog - Air", 49, UK_Analog_Air},
+ {"UK - Analog - Cable", 81, UK_Analog_Cable},
+ {"UK - Digital - Air", 49, UK_Digital_Air},
+ {"UK - Digital - Cable", 81, UK_Digital_Cable},
+ {"Ireland - Analog - Air", 58, Ireland_Analog_Air},
+ {"Ireland - Analog - Cable", 81, Ireland_Analog_Cable},
+ {"Ireland - Digital - Air", 58, Ireland_Digital_Air},
+ {"Ireland - Digital - Cable", 81, Ireland_Digital_Cable},
+ {"China - Analog - Air", 57, China_Analog_Air},
+ {"China - Analog - Cable", 99, China_Analog_Cable},
+ {"China - Digital - Air", 57, China_Digital_Air},
+ {"China - Digital - Cable", 99, China_Digital_Cable},
+ {"Australia - Analog - Air", 56, Australia_Analog_Air},
+ {"Australia - Analog - Cable", 80, Australia_Analog_Cable},
+ {"Australia - Digital - Air", 56, Australia_Digital_Air},
+ {"Australia - Digital - Cable", 80, Australia_Digital_Cable},
+ {"OIRT - Analog - Air", 61, OIRT_Analog_Air},
+ {"OIRT - Analog - Cable", 54, OIRT_Analog_Cable},
+ {"OIRT - Digital - Air", 61, OIRT_Digital_Air},
+ {"OIRT - Digital - Cable", 54, OIRT_Digital_Cable},
+ {"USA - FM radio", 101, USA_FM_radio},
+ {"Europe - FM radio", 103, Europe_FM_radio},
+ {"Japan - FM radio", 141, Japan_FM_radio}};
+
+#endif
diff --git a/api/xc4000_control.c b/api/xc4000_control.c
new file mode 100644
index 0000000..d061c89
--- /dev/null
+++ b/api/xc4000_control.c
@@ -0,0 +1,347 @@
+//
+// control of the XC4000 via the i2c interface.
+//
+// Filename : xc4000_control.cpp
+// Generated : 1/22/2007 4:41:24 PM
+//
+// (c) 2007, Xceive Corporation
+//
+//
+// Disclaimer:
+//
+// Xceive assumes no responsibility for any consequences arising from the use
+// of this computer code, nor from any infringement of patents or the rights of
+// third parties that may result from its use. No license is granted by
+// implication or otherwise under any patent or other rights of Xceive. The
+// customer is responsible for assuring that proper design and operating
+// safeguards are observed to minimize inherent and procedural hazards. Xceive
+// assumes no responsibility for applications assistance or customer product
+// design.
+// The present computer code is not authorized for use in medical, life-support
+// equipment, or any other application involving a potential risk of severe
+// property or environmental damage, personal injury, or death without prior
+// express written approval of Xceive. Any such use is understood to be
+// entirely at the user's risk.
+//
+
+
+//#include <math.h> //for Linux
+#include "xc4000_control.h"
+#include "i2c_driver.h"
+
+#define XREG_INIT 0x00
+#define XREG_VIDEO_MODE 0x01
+#define XREG_AUDIO_MODE 0x02
+#define XREG_RF_FREQ 0x03
+#define XREG_DCODE 0x04
+#define XREG_DIRECTSITTING_MODE 0x05
+#define XREG_SEEK_MODE 0x06
+#define XREG_POWER_DOWN 0x08
+#define XREG_RF_MODE 0x0A
+#define XREG_AMPLITUDE 0x10
+
+#define XREG_ADC_ENV 0x00
+#define XREG_QUALITY 0x01
+#define XREG_FRAME_LINES 0x02
+#define XREG_HSYNC_FREQ 0x03
+#define XREG_LOCK 0x04
+#define XREG_FREQ_ERROR 0x05
+#define XREG_SNR 0x06
+#define XREG_VERSION 0x07
+#define XREG_PRODUCT_ID 0x08
+
+/* *************************************************************** */
+/* *************************************************************** */
+/* */
+/* CODE PROVIDED BY XCEIVE */
+/* */
+/* *************************************************************** */
+/* *************************************************************** */
+int xc_write_reg(unsigned short int regAddr, unsigned short int i2cData)
+{
+ unsigned char buf[4];
+ buf[0] = (regAddr >> 8) & 0xFF;
+ buf[1] = regAddr & 0xFF;
+ buf[2] = (i2cData >> 8) & 0xFF;
+ buf[3] = i2cData & 0xFF;
+ return xc_send_i2c_data(buf, 4);
+}
+
+int xc_read_reg(unsigned short int regAddr, unsigned short int *i2cData)
+{
+ unsigned char buf[2];
+ int result;
+
+ buf[0] = (regAddr >> 8) & 0xFF;
+ buf[1] = regAddr & 0xFF;
+ result = xc_send_i2c_data(buf, 2);
+ if (result!=XC_RESULT_SUCCESS)
+ return result;
+
+ result = xc_read_i2c_data(buf, 2);
+ if (result!=XC_RESULT_SUCCESS)
+ return result;
+
+ *i2cData = buf[0] * 256 + buf[1];
+ return XC_RESULT_SUCCESS;
+}
+
+int xc_load_i2c_sequence(unsigned char i2c_sequence[])
+{
+ int i,nbytes_to_send,result;
+ unsigned int length, pos, index;
+ unsigned char buf[XC_MAX_I2C_WRITE_LENGTH];
+
+ index=0;
+ while ((i2c_sequence[index]!=0xFF) || (i2c_sequence[index+1]!=0xFF))
+ {
+ length = i2c_sequence[index]* 256 + i2c_sequence[index+1];
+ if (length==0x0000)
+ {
+ //this is in fact a RESET command
+ result = xc_reset();
+ index += 2;
+ if (result!=XC_RESULT_SUCCESS)
+ return result;
+ }
+ else if (length & 0x8000)
+ {
+ //this is in fact a WAIT command
+ xc_wait(length & 0x7FFF);
+ index += 2;
+ }
+ else
+ {
+ //send i2c data whilst ensuring individual transactions do
+ //not exceed XC_MAX_I2C_WRITE_LENGTH bytes
+ index += 2;
+ buf[0] = i2c_sequence[index];
+ buf[1] = i2c_sequence[index + 1];
+ pos = 2;
+ while (pos < length)
+ {
+ if ((length - pos) > XC_MAX_I2C_WRITE_LENGTH - 2)
+ {
+ nbytes_to_send = XC_MAX_I2C_WRITE_LENGTH;
+ }
+ else
+ {
+ nbytes_to_send = (length - pos + 2);
+ }
+ for (i=2; i<nbytes_to_send; i++)
+ {
+ buf[i] = i2c_sequence[index + pos + i - 2];
+ }
+ result = xc_send_i2c_data(buf, nbytes_to_send);
+
+ if (result!=XC_RESULT_SUCCESS)
+ return result;
+
+ pos += nbytes_to_send - 2;
+ }
+ index += length;
+ }
+ }
+ return XC_RESULT_SUCCESS;
+}
+
+int xc_initialize()
+{
+ return xc_write_reg(XREG_INIT, 0);
+}
+
+int xc_SetTVStandard(unsigned short int VideoMode, unsigned short int AudioMode)
+{
+ int returnStatus = xc_write_reg(XREG_VIDEO_MODE, VideoMode);
+ if (returnStatus == XC_RESULT_SUCCESS)
+ returnStatus = xc_write_reg(XREG_AUDIO_MODE, AudioMode);
+ return returnStatus;
+}
+
+int xc_shutdown()
+{
+ return xc_write_reg(XREG_POWER_DOWN, 0);
+}
+
+int xc_enter_directsitting_mode()
+{
+ return xc_write_reg(XREG_DIRECTSITTING_MODE, 0);
+}
+
+int xc_exit_directsitting_mode()
+{
+ unsigned char buf[]={0x00,0x00,0x00,0x00,0x88};
+ return xc_send_i2c_data(buf, 5);
+}
+
+int xc_set_RF_frequency(long frequency_in_hz)
+{
+ unsigned int frequency_code;
+ if ((frequency_in_hz>1023000000) || (frequency_in_hz<1000000))
+ return XC_RESULT_OUT_OF_RANGE;
+
+ frequency_code = (unsigned int)(frequency_in_hz / 15625L);
+ return xc_write_reg(XREG_RF_FREQ ,frequency_code);
+}
+
+int xc_set_dcode( int dcode)
+{
+ return xc_write_reg(XREG_DCODE ,dcode&0x0f);
+}
+
+int xc_rf_mode(int mode)
+{
+ return xc_write_reg(XREG_RF_MODE, mode&0x01); // 0 is Air; 1 is cable
+}
+
+
+
+//int xc_set_IF_frequency(long frequency_in_hz)
+//{
+// unsigned int frequency_code = (frequency_in_hz * 1024)/1000000;
+// return xc_write_reg(XREG_IF_OUT ,frequency_code);
+//}
+
+
+int xc_get_ADC_Envelope(unsigned short int *adc_envelope)
+{
+ return xc_read_reg(XREG_ADC_ENV, adc_envelope);
+}
+
+// Obtain current frequency error
+// Refer to datasheet for values.
+int xc_get_frequency_error(long *frequency_error_hz)
+{
+ unsigned short int data;
+ short int signed_data;
+ int result;
+
+ result = xc_read_reg(XREG_FREQ_ERROR, &data);
+ if (result)
+ return result;
+
+ signed_data = (short int)data;
+ (*frequency_error_hz) = signed_data * 15625;
+
+ return 0;
+}
+
+// Obtain current lock status.
+// Refer to datasheet for values.
+int xc_get_lock_status(unsigned short int *lock_status)
+{
+ return xc_read_reg(XREG_LOCK, lock_status);
+}
+
+// Obtain Version codes.
+// Refer to datasheet for values.
+int xc_get_version(unsigned char* hw_majorversion,
+ unsigned char* hw_minorversion,
+ unsigned char* fw_majorversion,
+ unsigned char* fw_minorversion)
+{
+ unsigned short int data;
+ int result;
+
+ result = xc_read_reg(XREG_VERSION, &data);
+ if (result)
+ return result;
+
+ (*hw_majorversion) = (data>>12) & 0x0F;
+ (*hw_minorversion) = (data>>8) & 0x0F;
+ (*fw_majorversion) = (data>>4) & 0x0F;
+ (*fw_minorversion) = (data) & 0x0F;
+
+ return 0;
+}
+
+// Obtain Product ID.
+// Refer to datasheet for values.
+int xc_get_product_id(unsigned short int *product_id)
+{
+ return xc_read_reg(XREG_PRODUCT_ID, product_id);
+}
+
+// Obtain current horizontal video frequency.
+// Refer to datasheet for values.
+int xc_get_hsync_freq(int *hsync_freq_hz)
+{
+ unsigned short int regData;
+ int result;
+
+ result = xc_read_reg(XREG_HSYNC_FREQ, &regData);
+ if (result)
+ return result;
+ (*hsync_freq_hz) = ((regData & 0x0fff) * 763)/100;
+ return result;
+}
+
+ // Obtain current number of lines per frame.
+ // Refer to datasheet for values.
+int xc_get_frame_lines(unsigned short int *frame_lines)
+{
+ return xc_read_reg(XREG_FRAME_LINES, frame_lines);
+}
+
+// Obtain current video signal quality.
+// Refer to datasheet for values.
+int xc_get_quality(unsigned short int *quality)
+{
+ return xc_read_reg(XREG_QUALITY, quality);
+}
+
+unsigned short int WaitForLock()
+{
+ unsigned short int lockState = 0;
+ int watchDogCount = 40;
+ while ((lockState == 0) && (watchDogCount > 0))
+ {
+ xc_get_lock_status(&lockState);
+ if (lockState != 1)
+ {
+ xc_wait(5); // wait 5 ms
+ watchDogCount--;
+ }
+ }
+ return lockState;
+}
+
+int xc_tune_channel(long chnl_freq)//for Linux
+{
+ long freq_error, min_freq_error, max_freq_error;
+ unsigned short int quality, max_quality;
+ int res;
+ int chnl_found = 0;//for Linux
+
+ if (xc_set_RF_frequency(chnl_freq) != XC_RESULT_SUCCESS)
+ return 0;//for Linux
+ if (WaitForLock()== 1)
+ {
+ xc_wait(6);
+ res=xc_get_frequency_error(&freq_error);
+ if (res!=XC_RESULT_SUCCESS) return res;
+ max_freq_error = freq_error;
+ min_freq_error = freq_error;
+
+ xc_wait(6);
+
+ res=xc_get_frequency_error(&freq_error);
+ if (res!=XC_RESULT_SUCCESS) return res;
+ max_freq_error = (max_freq_error>freq_error) ? max_freq_error : freq_error;
+ min_freq_error = (min_freq_error<freq_error) ? min_freq_error : freq_error;
+
+ xc_wait(6);
+
+ res=xc_get_frequency_error(&freq_error);
+ if (res!=XC_RESULT_SUCCESS) return res;
+ max_freq_error = (max_freq_error>freq_error) ? max_freq_error : freq_error;
+ min_freq_error = (min_freq_error<freq_error) ? min_freq_error : freq_error;
+
+ //We got lock, but now we check that carrier is stable and that quality is sufficient
+ if ((max_freq_error-min_freq_error)<60000)
+ chnl_found = 1;//for Linux
+ //add new channel
+
+ }
+ return chnl_found;
+}
diff --git a/api/xc4000_control.h b/api/xc4000_control.h
new file mode 100644
index 0000000..70e97ce
--- /dev/null
+++ b/api/xc4000_control.h
@@ -0,0 +1,145 @@
+//
+// C header file for control of the XC4000 via the i2c interface.
+//
+// Filename : xc4000_control.h
+// Generated : 1/22/2007 4:41:24 PM
+//
+// (c) 2007, Xceive Corporation
+//
+//
+// Disclaimer:
+//
+// Xceive assumes no responsibility for any consequences arising from the use
+// of this computer code, nor from any infringement of patents or the rights of
+// third parties that may result from its use. No license is granted by
+// implication or otherwise under any patent or other rights of Xceive. The
+// customer is responsible for assuring that proper design and operating
+// safeguards are observed to minimize inherent and procedural hazards. Xceive
+// assumes no responsibility for applications assistance or customer product
+// design.
+// The present computer code is not authorized for use in medical, life-support
+// equipment, or any other application involving a potential risk of severe
+// property or environmental damage, personal injury, or death without prior
+// express written approval of Xceive. Any such use is understood to be
+// entirely at the user's risk.
+//
+//
+
+#ifndef __XC4000_CONTROL_H
+#define __XC4000_CONTROL_H
+
+/* *********************************************************************** */
+/* Defines */
+/* *********************************************************************** */
+
+#define XC_MAX_I2C_WRITE_LENGTH 52
+
+#define XC_RESULT_SUCCESS 0
+#define XC_RESULT_RESET_FAILURE 1
+#define XC_RESULT_I2C_WRITE_FAILURE 2
+#define XC_RESULT_I2C_READ_FAILURE 3
+#define XC_RESULT_OUT_OF_RANGE 5
+
+/* *********************************************************************** */
+/* Type Declarations */
+/* *********************************************************************** */
+
+/*
+ This represents an I2C firmware file encoded as a string of unsigned char.
+ Format is as follows:
+
+ char[0 ]=len0_MSB -> len = len_MSB * 256 + len_LSB
+ char[1 ]=len0_LSB -> length of first write transaction
+ char[2 ]=data0 -> first byte to be sent
+ char[3 ]=data1
+ char[4 ]=data2
+ char[ ]=...
+ char[M ]=dataN -> last byte to be sent
+ char[M+1]=len1_MSB -> len = len_MSB * 256 + len_LSB
+ char[M+2]=len1_LSB -> length of second write transaction
+ char[M+3]=data0
+ char[M+4]=data1
+ ...
+ etc.
+
+ The [len] value should be interpreted as follows:
+
+ len= len_MSB _ len_LSB
+ len=1111_1111_1111_1111 : End of I2C_SEQUENCE
+ len=0000_0000_0000_0000 : Reset command: Do hardware reset
+ len=0NNN_NNNN_NNNN_NNNN : Normal transaction: number of bytes = {1:32767)
+ len=1WWW_WWWW_WWWW_WWWW : Wait command: wait for {1:32767} ms
+
+ For the RESET and WAIT commands, the two following bytes will contain
+ immediately the length of the following transaction.
+
+*/
+typedef struct {
+ char *Name;
+ unsigned char *ConfFile;
+ unsigned short VideoMode;
+ unsigned short AudioMode;
+ double SCode;
+} XC_TV_STANDARD;
+
+typedef unsigned char XC4000_SCODE_TABLE[16][13];
+
+// Download firmware
+int xc_load_i2c_sequence(unsigned char i2c_sequence[]);
+
+// Perform calibration and initialize default parameter
+int xc_initialize();
+
+// Initialize device according to supplied tv mode.
+int xc_SetTVStandard(unsigned short int VideoMode, unsigned short int AudioMode);
+
+int xc_set_RF_frequency(long frequency_in_hz);
+
+int xc_set_dcode( int dcode);
+
+//int xc_set_IF_frequency(long frequency_in_hz);
+
+// Power-down device.
+int xc_shutdown();
+
+// enter direct-setting-mode
+int xc_enter_directsitting_mode();
+
+// exit direct-setting-mode
+int xc_exit_directsitting_mode();
+
+// set RF signal source
+int xc_rf_mode(int mode);
+
+
+// Get ADC envelope value.
+int xc_get_ADC_Envelope(unsigned short int *adc_envelope);
+
+// Get current frequency error.
+int xc_get_frequency_error(long *frequency_error_mhz);
+
+// Get lock status.
+int xc_get_lock_status(unsigned short int *lock_status);
+
+// Get device version information.
+int xc_get_version( unsigned char* hw_majorversion,unsigned char* hw_minorversion,
+ unsigned char* fw_majorversion, unsigned char* fw_minorversion);
+
+// Get device product ID.
+int xc_get_product_id(unsigned short int *product_id);
+
+// Get horizontal sync frequency.
+int xc_get_hsync_freq(int *hsync_freq_hz);
+
+// Get number of lines per frame.
+int xc_get_frame_lines(unsigned short int *frame_lines);
+
+// Get quality estimate.
+int xc_get_quality(unsigned short int *quality);
+
+// Tune a channel
+int xc_tune_channel(long chnl_freq); //for Linux
+
+#endif
+
+
diff --git a/api/xc4000_firmwares.h b/api/xc4000_firmwares.h
new file mode 100644
index 0000000..809b3af
--- /dev/null
+++ b/api/xc4000_firmwares.h
@@ -0,0 +1,2993 @@
+//
+// Automatically generated C header file for
+// control of the XC4000 via the i2c interface.
+//
+// Filename : xc4000_firmwares.h
+// Generated : 9/25/2007 4:58:46 PM
+// Firmware version : 1.2
+//
+// (c) 2007, Xceive Corporation
+//
+
+#ifndef __XC4000_FIRMWARES_H
+#define __XC4000_FIRMWARES_H
+
+
+// ************************************************************
+// *** BASE FIRMWARE FILES
+// *** These declarations are not used directly by user
+// ************************************************************
+
+unsigned char XC4000_firmware_SEQUENCE[8236] = {
+
+ 0x00, 0x00, /* RESET */
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x3D, 0x00,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x3D,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x20, 0x04, /* Length = 8196 bytes */
+ 0x00, 0x28, 0x02, 0x49, 0xD0, 0xED, 0xF1, 0x08, 0xF1, 0x01,
+ 0x02, 0xDF, 0xB1, 0x12, 0xF1, 0x01, 0x02, 0x7E, 0xB1, 0x12,
+ 0xF1, 0x01, 0x02, 0x5C, 0xB1, 0x12, 0xF1, 0x01, 0x02, 0x58,
+ 0xF0, 0x19, 0x02, 0x7C, 0xE0, 0x05, 0x0E, 0x41, 0xF0, 0x19,
+ 0x02, 0xDF, 0xE0, 0x05, 0x0F, 0x22, 0xE0, 0x05, 0x0D, 0xCD,
+ 0xD5, 0x01, 0xE0, 0x05, 0x0B, 0x6C, 0xE0, 0x05, 0x0F, 0xBD,
+ 0xD0, 0xF9, 0xC0, 0x01, 0xF1, 0x08, 0xF1, 0x01, 0x02, 0xDF,
+ 0xD0, 0xF7, 0xC0, 0x01, 0xF1, 0x08, 0xF1, 0x01, 0x02, 0xDF,
+ 0xA0, 0x03, 0xF1, 0x08, 0xB1, 0x12, 0xF0, 0x1C, 0xF1, 0x05,
+ 0x02, 0xDF, 0xD1, 0x8D, 0xF0, 0x1C, 0xD5, 0x30, 0xE0, 0x05,
+ 0x07, 0x68, 0xF0, 0x19, 0x02, 0xDF, 0xD1, 0x03, 0xF0, 0x1C,
+ 0xF0, 0x0A, 0xE0, 0x05, 0x0F, 0x22, 0xD5, 0x00, 0xE0, 0x05,
+ 0x08, 0x0B, 0xD0, 0x9B, 0xC0, 0x01, 0x00, 0x05, 0xF2, 0x08,
+ 0xD4, 0xD4, 0xC4, 0x03, 0xE0, 0x05, 0x07, 0x4C, 0xB1, 0x68,
+ 0xF1, 0x01, 0x02, 0x9B, 0x81, 0x23, 0xA1, 0x1B, 0x11, 0x16,
+ 0xF1, 0x01, 0x02, 0x9B, 0xB4, 0x42, 0xF4, 0x05, 0x02, 0x8A,
+ 0xE0, 0x05, 0x0D, 0xCD, 0xF0, 0x19, 0x02, 0xAF, 0xD5, 0x00,
+ 0xE0, 0x05, 0x08, 0x0B, 0x85, 0x52, 0xD0, 0xF1, 0xC0, 0x01,
+ 0x00, 0x05, 0xF2, 0x08, 0xA0, 0x03, 0xF1, 0x08, 0xD0, 0x00,
+ 0xC0, 0xC0, 0xF0, 0x1C, 0xD0, 0x00, 0xC0, 0xC4, 0xF0, 0x2C,
+ 0xE0, 0x05, 0x0D, 0xCD, 0xE0, 0x05, 0x0B, 0x16, 0xF0, 0x06,
+ 0xD5, 0x01, 0xE0, 0x05, 0x0B, 0x6C, 0xE0, 0x05, 0x07, 0x0D,
+ 0xF5, 0x05, 0x02, 0xCB, 0xE0, 0x05, 0x07, 0x39, 0xC1, 0x06,
+ 0x5D, 0xD5, 0xF1, 0x05, 0x02, 0xCB, 0xC1, 0x09, 0x5D, 0x5D,
+ 0xF1, 0x05, 0x02, 0xCB, 0xE0, 0x05, 0x08, 0xBB, 0xB5, 0x54,
+ 0xF5, 0x01, 0x02, 0xD8, 0xB5, 0x52, 0xF5, 0x01, 0x02, 0xD4,
+ 0xF0, 0x19, 0x02, 0xDF, 0xD0, 0x98, 0xC0, 0x01, 0xF3, 0x08,
+ 0xB3, 0x32, 0xF0, 0x3C, 0xF3, 0x05, 0x02, 0xDF, 0xD3, 0x14,
+ 0xF0, 0x3C, 0xD0, 0xEA, 0xF1, 0x08, 0xD0, 0xEB, 0xF0, 0x1C,
+ 0xD1, 0x01, 0xD0, 0xEC, 0xF0, 0x1C, 0xD1, 0x03, 0xD0, 0xED,
+ 0xF0, 0x1C, 0xF0, 0x1B, 0xF0, 0x0E, 0xD0, 0xEC, 0xF2, 0x08,
+ 0xF2, 0x01, 0x03, 0xBE, 0xB2, 0x22, 0xF2, 0x01, 0x02, 0xF8,
+ 0xB2, 0x22, 0xF2, 0x01, 0x03, 0x23, 0xB2, 0x22, 0xF2, 0x01,
+ 0x03, 0x49, 0xB2, 0x22, 0xF2, 0x01, 0x03, 0x7D, 0xB2, 0x22,
+ 0xF2, 0x01, 0x03, 0xBC, 0xB2, 0x22, 0xF2, 0x01, 0x03, 0x56,
+ 0xF0, 0x19, 0x03, 0xBE, 0xD5, 0xFF, 0xE0, 0x05, 0x08, 0x0B,
+ 0xD6, 0x00, 0xC6, 0xBF, 0xF5, 0x05, 0x03, 0x01, 0xD6, 0x00,
+ 0xC6, 0x3F, 0xD5, 0x08, 0xC5, 0xA0, 0xE0, 0x05, 0x07, 0x6C,
+ 0xD2, 0x01, 0xF0, 0x2C, 0xE0, 0x05, 0x0E, 0xDD, 0xD1, 0xE7,
+ 0xD2, 0x00, 0xF1, 0x2C, 0xD6, 0x0C, 0xD5, 0x14, 0xE0, 0x05,
+ 0x07, 0x68, 0xE0, 0x05, 0x08, 0xA2, 0xE0, 0x05, 0x09, 0x34,
+ 0xE0, 0x05, 0x09, 0xCA, 0xE0, 0x05, 0x09, 0x12, 0xD5, 0x20,
+ 0xE0, 0x05, 0x0B, 0x6C, 0xD1, 0x7B, 0xC1, 0x01, 0xD2, 0x28,
+ 0xF1, 0x2C, 0xD2, 0x02, 0xF0, 0x2C, 0xF0, 0x19, 0x03, 0xBE,
+ 0xD6, 0x0E, 0xD5, 0x0E, 0xE0, 0x05, 0x07, 0x68, 0xD5, 0x01,
+ 0xE0, 0x05, 0x0B, 0x6C, 0xE0, 0x05, 0x0E, 0xF6, 0xA4, 0x51,
+ 0xE0, 0x05, 0x0F, 0xBD, 0xF4, 0x05, 0x03, 0xBE, 0xC2, 0x20,
+ 0xF2, 0x09, 0xE0, 0x05, 0x09, 0x12, 0xD2, 0xA0, 0xF2, 0x09,
+ 0xD5, 0x3C, 0xE0, 0x05, 0x07, 0x68, 0xD2, 0xA0, 0xF2, 0x09,
+ 0xE0, 0x05, 0x09, 0x12, 0xE0, 0x05, 0x0B, 0x60, 0xF5, 0x05,
+ 0x03, 0xA5, 0xD5, 0xCC, 0xE0, 0x05, 0x08, 0x0B, 0xF5, 0x05,
+ 0x03, 0xA1, 0xD2, 0x03, 0xF0, 0x2C, 0xE0, 0x05, 0x07, 0x0D,
+ 0xF5, 0x01, 0x03, 0x7B, 0xD1, 0x7B, 0xC1, 0x01, 0xF2, 0x18,
+ 0xF2, 0x01, 0x03, 0x56, 0xB2, 0x22, 0xF1, 0x2C, 0xF0, 0x19,
+ 0x03, 0xBE, 0xD1, 0xF7, 0xF3, 0x18, 0xA3, 0x33, 0xD1, 0xD4,
+ 0xC1, 0x01, 0xF2, 0x18, 0x4E, 0xFE, 0xF2, 0x01, 0x03, 0x65,
+ 0xD1, 0xF2, 0xD2, 0x02, 0xF1, 0x2C, 0xC2, 0x10, 0xF2, 0x09,
+ 0xD2, 0x01, 0x22, 0x32, 0x13, 0x32, 0xD1, 0xF7, 0xF1, 0x3C,
+ 0xD1, 0xCC, 0xC1, 0x01, 0x01, 0x13, 0xF2, 0x18, 0xD1, 0xEA,
+ 0xF4, 0x18, 0x04, 0x42, 0xA1, 0x13, 0xF1, 0x4C, 0xC2, 0x01,
+ 0xF2, 0x09, 0xD1, 0xFC, 0xC1, 0x01, 0xF2, 0x18, 0xA2, 0x23,
+ 0xF1, 0x2C, 0xF0, 0x19, 0x02, 0xF8, 0xD2, 0x04, 0xF0, 0x2C,
+ 0xE0, 0x05, 0x08, 0xBB, 0xF5, 0x01, 0x03, 0x89, 0xB5, 0x52,
+ 0xF5, 0x01, 0x03, 0xBE, 0xB5, 0x52, 0xF5, 0x01, 0x02, 0xF8,
+ 0xF0, 0x19, 0x03, 0x56, 0xD5, 0x20, 0xE0, 0x05, 0x09, 0xF4,
+ 0xD6, 0x12, 0xD5, 0x14, 0xE0, 0x05, 0x07, 0x68, 0xD5, 0x00,
+ 0xC5, 0x81, 0xE0, 0x05, 0x08, 0x66, 0xD1, 0xED, 0xD2, 0x01,
+ 0xF1, 0x2C, 0xD1, 0xF2, 0xF1, 0x2C, 0xD2, 0x05, 0xF0, 0x2C,
+ 0xD6, 0x15, 0xD5, 0x0E, 0xE0, 0x05, 0x07, 0x68, 0xF0, 0x19,
+ 0x03, 0xBE, 0xD6, 0x30, 0xD5, 0x24, 0xE0, 0x05, 0x07, 0x68,
+ 0xD1, 0xF9, 0xC1, 0x01, 0xF2, 0x18, 0xF2, 0x01, 0x03, 0xB1,
+ 0xD6, 0x04, 0xD5, 0x2F, 0xE0, 0x05, 0x07, 0x68, 0xD6, 0x01,
+ 0xE0, 0x05, 0x07, 0x68, 0xD1, 0xED, 0xD2, 0x02, 0xF1, 0x2C,
+ 0xD2, 0x00, 0xF0, 0x2C, 0xD6, 0x15, 0xD5, 0x0E, 0xE0, 0x05,
+ 0x07, 0x68, 0xF0, 0x19, 0x03, 0xBE, 0xF0, 0x19, 0x03, 0xBE,
+ 0xF0, 0x0E, 0xE0, 0x00, 0x07, 0x8B, 0xA3, 0x01, 0xF3, 0x01,
+ 0x04, 0x52, 0xB3, 0x32, 0xF3, 0x01, 0x04, 0x41, 0xB3, 0x32,
+ 0xF3, 0x01, 0x04, 0x3B, 0xB3, 0x32, 0xF3, 0x01, 0x05, 0x68,
+ 0xB3, 0x32, 0xF3, 0x01, 0x04, 0xC8, 0xB3, 0x32, 0xF3, 0x01,
+ 0x04, 0x92, 0xB3, 0x32, 0xF3, 0x01, 0x04, 0x9A, 0xB3, 0x32,
+ 0xF3, 0x01, 0x05, 0x39, 0xB3, 0x32, 0xF3, 0x01, 0x04, 0x8E,
+ 0xB3, 0x32, 0xF3, 0x01, 0x05, 0x51, 0xB3, 0x32, 0xF3, 0x01,
+ 0x04, 0xAF, 0xB3, 0x32, 0xF3, 0x01, 0x05, 0x5F, 0xB3, 0x32,
+ 0xF3, 0x01, 0x05, 0x62, 0xB3, 0x32, 0xF3, 0x01, 0x05, 0x5C,
+ 0xB3, 0x32, 0xF3, 0x01, 0x04, 0xCE, 0xB3, 0x32, 0xF3, 0x01,
+ 0x04, 0xEB, 0xB3, 0x32, 0xF3, 0x01, 0x05, 0x9C, 0xD4, 0x00,
+ 0xC4, 0x80, 0x2F, 0xC4, 0xF3, 0x05, 0x04, 0x0D, 0x84, 0x43,
+ 0x2F, 0xC4, 0xF3, 0x01, 0x05, 0xD6, 0x84, 0x4D, 0x2F, 0xC4,
+ 0xF3, 0x05, 0x04, 0x31, 0x84, 0x43, 0x2F, 0xC4, 0xF3, 0x05,
+ 0x04, 0x1C, 0x84, 0x4F, 0x2F, 0xC4, 0xD2, 0x99, 0xC2, 0x01,
+ 0x02, 0x23, 0xF2, 0x1C, 0xF0, 0x19, 0x05, 0xD4, 0x82, 0x06,
+ 0x82, 0x27, 0xD3, 0xFF, 0xC3, 0x07, 0x4F, 0xEF, 0xF3, 0x01,
+ 0x04, 0x19, 0xD3, 0x68, 0x12, 0x23, 0xF2, 0x14, 0xF0, 0x19,
+ 0x05, 0xD4, 0xF2, 0x1C, 0xF0, 0x19, 0x05, 0xD4, 0xA4, 0x11,
+ 0xD2, 0x99, 0xC2, 0x01, 0xF6, 0x28, 0xA2, 0x23, 0xF5, 0x28,
+ 0xD2, 0x00, 0xC2, 0x80, 0x2E, 0xE4, 0xF2, 0x01, 0x04, 0x2B,
+ 0xE0, 0x04, 0x07, 0x6C, 0xF0, 0x19, 0x04, 0x2F, 0xD2, 0x0F,
+ 0x2C, 0x2C, 0xE0, 0x04, 0x07, 0xE6, 0xF0, 0x19, 0x05, 0xD4,
+ 0xA4, 0x11, 0xE0, 0x04, 0x07, 0x5A, 0xD2, 0x99, 0xC2, 0x01,
+ 0xF2, 0x6C, 0xA2, 0x23, 0xF2, 0x5C, 0xF0, 0x19, 0x05, 0xD4,
+ 0xD2, 0xE9, 0xF2, 0x1C, 0xE0, 0x01, 0x08, 0x73, 0xF0, 0x19,
+ 0x05, 0xD6, 0xE0, 0x04, 0x0B, 0x64, 0xF4, 0x01, 0x04, 0x4C,
+ 0xB4, 0x42, 0xF4, 0x05, 0x05, 0xD6, 0xD3, 0x02, 0x2F, 0xFD,
+ 0xF3, 0x05, 0x05, 0xD6, 0xD2, 0xE8, 0xF2, 0x1C, 0xE0, 0x01,
+ 0x08, 0x14, 0xF0, 0x19, 0x05, 0xD6, 0xE0, 0x00, 0x07, 0x91,
+ 0xD4, 0x29, 0xD5, 0x07, 0xE0, 0x04, 0x07, 0x68, 0xE0, 0x04,
+ 0x0A, 0xF5, 0xD2, 0x22, 0xC2, 0x01, 0xD4, 0x00, 0xD5, 0xF0,
+ 0xF6, 0x28, 0xE0, 0x04, 0x07, 0xDF, 0xA2, 0x23, 0xA4, 0x43,
+ 0xD3, 0x20, 0x5F, 0x4F, 0xF3, 0x01, 0x04, 0x5D, 0xF4, 0x09,
+ 0xD3, 0x80, 0xD2, 0xE6, 0xF2, 0x3C, 0xE0, 0x00, 0x0A, 0x14,
+ 0xE0, 0x00, 0x0C, 0xF3, 0xD5, 0x01, 0xD4, 0x01, 0xE0, 0x04,
+ 0x07, 0x68, 0xD4, 0x03, 0xD5, 0x66, 0xD6, 0x00, 0xE0, 0x04,
+ 0x07, 0xDF, 0xE0, 0x04, 0x0F, 0xCC, 0xE0, 0x04, 0x0D, 0x33,
+ 0xD4, 0x03, 0xD5, 0x66, 0xD6, 0x01, 0xE0, 0x04, 0x07, 0xDF,
+ 0xE0, 0x04, 0x0C, 0x83, 0xE0, 0x04, 0x0C, 0xCB, 0xE0, 0x04,
+ 0x0C, 0xB7, 0xD4, 0x2B, 0xE0, 0x04, 0x07, 0x68, 0xE0, 0x04,
+ 0x0E, 0xDD, 0xF0, 0x19, 0x05, 0xD8, 0xE0, 0x00, 0x09, 0x1C,
+ 0xF0, 0x19, 0x05, 0xD6, 0xD4, 0x00, 0xC4, 0xC0, 0xD5, 0x2E,
+ 0xD6, 0x00, 0xE0, 0x04, 0x07, 0x6C, 0xF0, 0x19, 0x05, 0xD6,
+ 0xD3, 0x07, 0x24, 0xFD, 0x91, 0x18, 0xF4, 0x01, 0x04, 0xA5,
+ 0xD2, 0xCC, 0xC2, 0x01, 0x02, 0x24, 0xF2, 0x1C, 0xF0, 0x19,
+ 0x05, 0xD6, 0xD4, 0x06, 0x93, 0x1F, 0xF3, 0x05, 0x04, 0xAA,
+ 0xA4, 0x11, 0xD2, 0xD4, 0xC2, 0x01, 0xF2, 0x4C, 0xF0, 0x19,
+ 0x05, 0xD6, 0xD2, 0xF1, 0x91, 0x11, 0xF2, 0x1C, 0xD6, 0x01,
+ 0xD3, 0x0C, 0xD4, 0x78, 0xD5, 0x50, 0xF1, 0x01, 0x04, 0xBB,
+ 0xD6, 0x00, 0xD3, 0x08, 0xD4, 0x50, 0xD2, 0xB2, 0xC2, 0x01,
+ 0xF2, 0x3C, 0xA2, 0x23, 0xF2, 0x4C, 0xA2, 0x27, 0xF2, 0x5C,
+ 0xD4, 0x02, 0xD5, 0x33, 0xE0, 0x04, 0x07, 0xA6, 0xF0, 0x19,
+ 0x05, 0xD6, 0xD2, 0xEE, 0xD3, 0x0F, 0x2F, 0xFD, 0xF2, 0x3C,
+ 0xF0, 0x19, 0x05, 0xD6, 0xE0, 0x04, 0x0B, 0x60, 0xF4, 0x05,
+ 0x04, 0xE9, 0xD3, 0x01, 0x2D, 0xDF, 0xD2, 0x84, 0xC2, 0x01,
+ 0xF5, 0x28, 0xD6, 0xFF, 0xC6, 0xDF, 0x83, 0x1E, 0x83, 0x3C,
+ 0x2D, 0xDA, 0x1D, 0xD3, 0xF2, 0x5C, 0xA6, 0x45, 0x11, 0x61,
+ 0xA2, 0x23, 0xF6, 0x28, 0xD3, 0xF8, 0xC3, 0xFF, 0x2E, 0xE3,
+ 0x1E, 0xE1, 0xF2, 0x6C, 0xE0, 0x01, 0x08, 0x14, 0xF0, 0x19,
+ 0x05, 0xD6, 0xA3, 0x13, 0xD2, 0xF9, 0xC2, 0x01, 0xF2, 0x3C,
+ 0xF3, 0x01, 0x05, 0x2E, 0xD4, 0x01, 0xD5, 0x44, 0xD6, 0x01,
+ 0xE0, 0x04, 0x07, 0xA6, 0xD2, 0x1E, 0xC2, 0x01, 0xF5, 0x28,
+ 0xA2, 0x23, 0xF6, 0x28, 0xD3, 0x00, 0xC3, 0x01, 0x2F, 0xF5,
+ 0xF3, 0x05, 0x05, 0x0B, 0xD4, 0x1D, 0xD5, 0xF0, 0xD6, 0x79,
+ 0xC6, 0x7F, 0xE0, 0x04, 0x07, 0xA6, 0xD4, 0x1C, 0xD5, 0x88,
+ 0xD6, 0x01, 0xE0, 0x04, 0x07, 0xA6, 0xD4, 0x1C, 0xD5, 0x11,
+ 0xD6, 0x01, 0xE0, 0x04, 0x07, 0xA6, 0xD5, 0xFB, 0xD6, 0x18,
+ 0xE0, 0x04, 0x07, 0xDF, 0xA5, 0x11, 0xD4, 0x2F, 0xE0, 0x04,
+ 0x07, 0x68, 0xD3, 0xFF, 0x24, 0xDF, 0xB4, 0x42, 0xF4, 0x01,
+ 0x05, 0x1E, 0xD3, 0x00, 0xD2, 0xF7, 0xC2, 0x01, 0xF2, 0x3C,
+ 0xA2, 0x23, 0xD3, 0x8D, 0xF2, 0x3C, 0xD4, 0x30, 0xE0, 0x04,
+ 0x07, 0x68, 0x83, 0x19, 0x85, 0x39, 0xD4, 0x31, 0xE0, 0x04,
+ 0x07, 0x68, 0xF0, 0x19, 0x05, 0xD6, 0xD4, 0x01, 0xD5, 0x44,
+ 0xD6, 0x00, 0xE0, 0x04, 0x07, 0xDF, 0xD4, 0x2F, 0xD5, 0x03,
+ 0xE0, 0x04, 0x07, 0x68, 0xF0, 0x19, 0x05, 0xD6, 0xF1, 0x01,
+ 0x05, 0x4D, 0xB1, 0x12, 0xF1, 0x01, 0x05, 0x43, 0xD3, 0x04,
+ 0xD2, 0xED, 0xF2, 0x3C, 0xF0, 0x19, 0x05, 0xD6, 0xE0, 0x04,
+ 0x0B, 0x60, 0xA3, 0x43, 0xD2, 0xED, 0xF2, 0x3C, 0xB2, 0x22,
+ 0xD3, 0x05, 0xF2, 0x3C, 0xF0, 0x19, 0x05, 0xD6, 0xE0, 0x04,
+ 0x0A, 0xF5, 0xF0, 0x19, 0x05, 0xD6, 0xD2, 0xC0, 0xC2, 0x01,
+ 0xD3, 0x03, 0x24, 0xFD, 0x42, 0x34, 0x81, 0x19, 0xF2, 0x1C,
+ 0xE0, 0x04, 0x0E, 0xF1, 0xF0, 0x19, 0x05, 0xD6, 0xD2, 0xF3,
+ 0xF0, 0x19, 0x05, 0x63, 0xD2, 0xF4, 0xF0, 0x19, 0x05, 0x63,
+ 0xD2, 0xF5, 0xF2, 0x1C, 0xE0, 0x04, 0x0D, 0x33, 0xF0, 0x19,
+ 0x05, 0xD6, 0xF0, 0x1F, 0xF0, 0x3F, 0xE0, 0x04, 0x0A, 0xF5,
+ 0xD3, 0x00, 0xD2, 0xF7, 0xF2, 0x3C, 0xD2, 0xF2, 0xF2, 0x3C,
+ 0xD2, 0xEA, 0xF2, 0x1C, 0xA2, 0x23, 0xF2, 0x1C, 0x81, 0x13,
+ 0xD2, 0xFA, 0xF2, 0x3C, 0xD2, 0xFF, 0xF2, 0x3C, 0xD4, 0x44,
+ 0xE0, 0x04, 0x08, 0x0B, 0xF4, 0x01, 0x05, 0x8D, 0xD3, 0x80,
+ 0xC3, 0x25, 0x4F, 0xDF, 0xA6, 0x33, 0xD2, 0xE8, 0xF4, 0x28,
+ 0xD5, 0x32, 0xE0, 0x04, 0x07, 0x95, 0xF2, 0x4C, 0xE0, 0x04,
+ 0x08, 0x73, 0xE0, 0x04, 0x08, 0x14, 0xD3, 0x80, 0xC3, 0x57,
+ 0x4D, 0xDF, 0xD2, 0xF1, 0xF3, 0x28, 0x26, 0xFD, 0xD4, 0x02,
+ 0xD5, 0xAA, 0xD2, 0xEC, 0xD3, 0x01, 0xF2, 0x3C, 0xF0, 0x1B,
+ 0xF0, 0x3B, 0xF0, 0x19, 0x05, 0xD6, 0xD3, 0x80, 0x2F, 0xFD,
+ 0x83, 0x3D, 0xD2, 0x85, 0xC2, 0x01, 0x02, 0x23, 0xF6, 0x28,
+ 0xD4, 0x07, 0x2C, 0x41, 0xD7, 0xB9, 0xE0, 0x06, 0x07, 0x95,
+ 0xF3, 0x01, 0x05, 0xAE, 0x2C, 0x41, 0xD7, 0x86, 0xE0, 0x06,
+ 0x07, 0x95, 0xF2, 0x6C, 0x86, 0x17, 0xF3, 0x05, 0x05, 0xC0,
+ 0xD3, 0x01, 0x3E, 0xE3, 0xD3, 0xCC, 0x73, 0x36, 0xD2, 0x88,
+ 0xC2, 0x01, 0xF2, 0x3C, 0xD2, 0x95, 0xC2, 0x01, 0xD3, 0x04,
+ 0x13, 0x36, 0xF2, 0x3C, 0xF0, 0x19, 0x05, 0xCE, 0xD3, 0x01,
+ 0x2E, 0xE3, 0x3E, 0xE3, 0xD3, 0x4A, 0x73, 0x36, 0xD2, 0x89,
+ 0xC2, 0x01, 0xF2, 0x3C, 0x83, 0x33, 0xA2, 0x23, 0xF2, 0x3C,
+ 0x83, 0x33, 0xA2, 0x23, 0xF2, 0x3C, 0xE0, 0x04, 0x08, 0x73,
+ 0xE0, 0x04, 0x08, 0x14, 0xF0, 0x19, 0x05, 0xD4, 0xD0, 0x00,
+ 0xC0, 0x40, 0xE0, 0x00, 0x07, 0x91, 0xF0, 0x0E, 0xE0, 0x00,
+ 0x07, 0x8B, 0xA3, 0x01, 0xF3, 0x01, 0x06, 0x63, 0xB3, 0x32,
+ 0xF3, 0x01, 0x06, 0x5C, 0xB3, 0x32, 0xF3, 0x01, 0x06, 0x52,
+ 0xB3, 0x32, 0xF3, 0x01, 0x06, 0x4E, 0xB3, 0x32, 0xF3, 0x01,
+ 0x06, 0x4A, 0xB3, 0x32, 0xF3, 0x01, 0x06, 0x45, 0xB3, 0x32,
+ 0xF3, 0x01, 0x06, 0x56, 0xB3, 0x32, 0xF3, 0x01, 0x06, 0x35,
+ 0xB3, 0x32, 0xF3, 0x01, 0x06, 0x2C, 0xB3, 0x32, 0xF3, 0x01,
+ 0x06, 0x27, 0xD4, 0x00, 0xC4, 0x80, 0x2F, 0xC4, 0xF3, 0x05,
+ 0x06, 0x18, 0x84, 0x43, 0x2F, 0xC4, 0xF3, 0x05, 0x06, 0x08,
+ 0x84, 0x47, 0x2F, 0xC4, 0xF3, 0x05, 0x06, 0x0F, 0xF0, 0x19,
+ 0x06, 0x65, 0x13, 0x04, 0xD2, 0x99, 0xC2, 0x01, 0x02, 0x23,
+ 0xF0, 0x28, 0xF0, 0x19, 0x06, 0x65, 0xD3, 0x1F, 0x2F, 0xCF,
+ 0xD2, 0x01, 0xC2, 0x01, 0xA2, 0x23, 0x02, 0x23, 0xF0, 0x28,
+ 0xF0, 0x19, 0x06, 0x65, 0x82, 0x06, 0x82, 0x27, 0xD3, 0xFF,
+ 0xC3, 0x07, 0x4F, 0xEF, 0xF3, 0x01, 0x06, 0x24, 0xD3, 0x38,
+ 0x12, 0x23, 0xF0, 0x20, 0xF0, 0x19, 0x06, 0x65, 0xF0, 0x28,
+ 0xF0, 0x19, 0x06, 0x65, 0xD2, 0x96, 0xC2, 0x01, 0xF0, 0x28,
+ 0xF0, 0x19, 0x06, 0x65, 0xE0, 0x04, 0x0B, 0x64, 0xD3, 0x64,
+ 0x23, 0x34, 0xD0, 0xA0, 0xC0, 0x0F, 0x00, 0x03, 0xF0, 0x19,
+ 0x06, 0x65, 0xD5, 0x00, 0xC5, 0x70, 0xE0, 0x05, 0x07, 0x5A,
+ 0xD5, 0x0F, 0x2E, 0xF9, 0x87, 0x79, 0x2F, 0xF9, 0x86, 0x68,
+ 0x00, 0x67, 0x80, 0x08, 0x80, 0x08, 0xD6, 0x12, 0x00, 0x06,
+ 0xF0, 0x19, 0x06, 0x65, 0xE0, 0x00, 0x07, 0x1B, 0xF0, 0x0D,
+ 0xF0, 0x19, 0x06, 0x65, 0xD1, 0xF2, 0xF0, 0x18, 0xF0, 0x19,
+ 0x06, 0x65, 0xE0, 0x00, 0x07, 0x39, 0xF0, 0x19, 0x06, 0x65,
+ 0xE0, 0x00, 0x07, 0x4C, 0xF0, 0x19, 0x06, 0x65, 0xD2, 0xFA,
+ 0xF0, 0x28, 0x80, 0x09, 0x80, 0x09, 0xF0, 0x19, 0x06, 0x65,
+ 0xD2, 0x97, 0xC2, 0x01, 0xF0, 0x28, 0x80, 0x0D, 0x80, 0x0B,
+ 0xF0, 0x19, 0x06, 0x65, 0xE0, 0x00, 0x07, 0x02, 0xE0, 0x00,
+ 0x07, 0x91, 0xF0, 0x0E, 0xF0, 0x19, 0x06, 0x95, 0xF0, 0x0A,
+ 0xFB, 0x08, 0xFB, 0x01, 0x06, 0xBE, 0xF7, 0x18, 0xF7, 0x01,
+ 0x06, 0x7B, 0xD8, 0x00, 0xD8, 0x0D, 0x08, 0x87, 0xF6, 0x80,
+ 0xA8, 0x67, 0xF9, 0x28, 0xF8, 0x94, 0x19, 0x7B, 0xF9, 0x01,
+ 0x06, 0xBE, 0xD8, 0x1D, 0xF8, 0x88, 0x78, 0x8B, 0xD9, 0x01,
+ 0x2C, 0x89, 0xF8, 0x05, 0x06, 0xF7, 0xBB, 0xB2, 0xD9, 0x00,
+ 0xC9, 0x04, 0x28, 0xB9, 0x08, 0x58, 0xF9, 0x88, 0xF9, 0x05,
+ 0x06, 0xDC, 0xD9, 0x00, 0xC9, 0x04, 0x27, 0xB9, 0xD9, 0x00,
+ 0xC9, 0xD0, 0x07, 0x97, 0xF9, 0x78, 0xF9, 0x01, 0x06, 0xC1,
+ 0xF9, 0x05, 0x06, 0xEB, 0xF0, 0x0A, 0xD8, 0x15, 0xD7, 0x00,
+ 0xC7, 0xB0, 0xD9, 0x08, 0xDB, 0x00, 0xCB, 0x04, 0xF9, 0x01,
+ 0x06, 0xA5, 0xFA, 0x80, 0xF7, 0xAC, 0xB9, 0x92, 0xA8, 0x83,
+ 0x07, 0x7B, 0xF0, 0x19, 0x06, 0x9C, 0xD7, 0x00, 0xC7, 0xAC,
+ 0xD8, 0x0C, 0xF9, 0x80, 0xF7, 0x9C, 0xA8, 0x83, 0xF9, 0x80,
+ 0xF2, 0x9C, 0x89, 0x9D, 0x89, 0x9F, 0xD7, 0x00, 0xC7, 0x34,
+ 0x17, 0x7B, 0xF9, 0x01, 0x06, 0xBE, 0xA8, 0x83, 0x07, 0x7B,
+ 0xFA, 0x80, 0xFA, 0x01, 0x06, 0xB2, 0xFA, 0xA0, 0xF7, 0xAC,
+ 0xB9, 0x92, 0xF0, 0x19, 0x06, 0xB2, 0xF0, 0x06, 0xF0, 0x19,
+ 0x06, 0xBF, 0xDA, 0x00, 0xCA, 0x1C, 0x17, 0x8A, 0xF7, 0x9C,
+ 0xA9, 0x93, 0xF8, 0x9C, 0xD9, 0x0E, 0x09, 0x9B, 0xF6, 0x90,
+ 0xA9, 0x63, 0xFA, 0x90, 0xF4, 0xAC, 0xA9, 0x93, 0xFA, 0x90,
+ 0xF2, 0xAC, 0xAA, 0xA3, 0xD7, 0x00, 0xFA, 0x7C, 0xAA, 0xA3,
+ 0xF7, 0x60, 0xFA, 0x7C, 0xD8, 0x00, 0xC8, 0x8C, 0xAB, 0xB3,
+ 0xF8, 0xBC, 0xF0, 0x06, 0xF0, 0x02, 0xD9, 0x0E, 0x09, 0x9B,
+ 0xF6, 0x90, 0xA9, 0x63, 0xFA, 0x90, 0xF4, 0xAC, 0xA9, 0x95,
+ 0xFA, 0x90, 0xF2, 0xAC, 0xD8, 0x00, 0xC8, 0x8C, 0xAB, 0xB3,
+ 0xF8, 0xBC, 0xF0, 0x06, 0xF0, 0x02, 0xF8, 0x9C, 0xDA, 0x00,
+ 0xCA, 0x64, 0x07, 0x8A, 0xD9, 0x00, 0xF7, 0x9C, 0xDA, 0x00,
+ 0xCA, 0x1C, 0x17, 0x8A, 0xF7, 0x9C, 0xF0, 0x19, 0x06, 0xDC,
+ 0xBB, 0xB2, 0xD8, 0x00, 0xC8, 0x50, 0xD9, 0x00, 0xC9, 0x04,
+ 0x48, 0x9B, 0xD9, 0x00, 0xF8, 0x9C, 0xF0, 0x06, 0xF0, 0x02,
+ 0xF0, 0x0E, 0xD2, 0x09, 0xC2, 0x20, 0xE0, 0x02, 0x07, 0x5A,
+ 0xD0, 0x08, 0x0D, 0xFC, 0x62, 0x30, 0x0E, 0xEC, 0x10, 0x12,
+ 0x80, 0x04, 0xF0, 0x02, 0xD0, 0x02, 0xC0, 0x20, 0xE0, 0x00,
+ 0x07, 0x5A, 0x81, 0x1D, 0x83, 0x13, 0x82, 0x15, 0x84, 0x17,
+ 0x1F, 0xF4, 0x1D, 0xDE, 0xD0, 0x01, 0x2C, 0xCF, 0x2C, 0xCD,
+ 0xF0, 0x02, 0xD2, 0x01, 0xC2, 0x60, 0xE0, 0x02, 0x07, 0x5A,
+ 0x92, 0x48, 0xD4, 0xE7, 0xF1, 0x48, 0x81, 0x1E, 0x11, 0x21,
+ 0xA4, 0x10, 0xF4, 0x01, 0x07, 0x2B, 0xD4, 0x08, 0x01, 0x14,
+ 0xF0, 0x19, 0x07, 0x2E, 0xD4, 0xF8, 0xC4, 0xFF, 0x01, 0x14,
+ 0x91, 0x18, 0xD4, 0xEA, 0xF3, 0x48, 0xE0, 0x04, 0x0B, 0x5D,
+ 0x10, 0x34, 0xD4, 0xE1, 0xF3, 0x48, 0xF3, 0x0D, 0x40, 0x13,
+ 0xF0, 0x02, 0xD0, 0x08, 0xC0, 0x08, 0xD2, 0x0B, 0xC2, 0x20,
+ 0xE0, 0x02, 0x07, 0x5A, 0x93, 0x38, 0x00, 0x03, 0xD2, 0xE6,
+ 0xF1, 0x28, 0xD3, 0x80, 0xA2, 0x01, 0xE0, 0x02, 0x0C, 0x08,
+ 0x20, 0x21, 0x22, 0x31, 0x92, 0x2E, 0x00, 0x02, 0xF0, 0x02,
+ 0xD2, 0x03, 0xC2, 0x60, 0xE0, 0x02, 0x07, 0x5A, 0x80, 0x3A,
+ 0x80, 0x0B, 0xB0, 0x02, 0xD2, 0x0B, 0x73, 0x32, 0xD2, 0x3F,
+ 0x2C, 0xC2, 0x84, 0x4A, 0x1D, 0x4F, 0xF0, 0x02, 0xF0, 0x0A,
+ 0xD2, 0x00, 0xC2, 0xA4, 0xF2, 0x0C, 0xC2, 0xA8, 0xF1, 0x28,
+ 0xF1, 0x01, 0x07, 0x5F, 0xC2, 0x9C, 0xF1, 0x28, 0xC2, 0xA0,
+ 0xF2, 0x28, 0xF0, 0x06, 0xF0, 0x02, 0xC0, 0x80, 0xE0, 0x00,
+ 0x07, 0x6C, 0xF0, 0x02, 0xF0, 0x0A, 0xD3, 0x00, 0xC3, 0x9C,
+ 0xF3, 0x1C, 0xC3, 0xA0, 0xF3, 0x2C, 0xC3, 0xA4, 0xF3, 0x0C,
+ 0xD3, 0x00, 0xC3, 0xA8, 0xF3, 0x38, 0xF3, 0x01, 0x07, 0x74,
+ 0xF0, 0x06, 0xF0, 0x02, 0xF0, 0x0A, 0xD1, 0x0D, 0xC1, 0x78,
+ 0xD0, 0x00, 0xC0, 0xA4, 0xF0, 0x1C, 0xC0, 0xA0, 0xF0, 0x1C,
+ 0xC0, 0xA4, 0xF0, 0x1C, 0xC0, 0xA8, 0xF1, 0x08, 0xF1, 0x01,
+ 0x07, 0x86, 0xF0, 0x06, 0xF0, 0x02, 0xD1, 0x00, 0xC1, 0x94,
+ 0xF0, 0x18, 0xC1, 0x98, 0xF1, 0x18, 0xF0, 0x02, 0xD1, 0x00,
+ 0xC1, 0x98, 0xF1, 0x0C, 0xF0, 0x02, 0xD4, 0x0F, 0x2F, 0xD4,
+ 0x81, 0x19, 0x2D, 0xD4, 0x11, 0x13, 0xD4, 0x01, 0x64, 0x41,
+ 0x84, 0x42, 0xB4, 0x42, 0x2E, 0x4E, 0x62, 0x23, 0x63, 0x43,
+ 0xA3, 0x33, 0xF3, 0x0D, 0x2C, 0xFC, 0x1C, 0xCE, 0xF0, 0x02,
+ 0xD3, 0x01, 0xC3, 0x01, 0xF4, 0x38, 0x85, 0x03, 0xD6, 0x01,
+ 0x66, 0x65, 0x1C, 0xCA, 0xF3, 0x4C, 0xA3, 0x33, 0x03, 0x30,
+ 0xF4, 0x38, 0xA2, 0x23, 0xF2, 0x0D, 0xD5, 0x0F, 0x2D, 0x1D,
+ 0x88, 0x19, 0xD6, 0x01, 0x2F, 0x2E, 0x66, 0x65, 0x67, 0x75,
+ 0x1C, 0xCA, 0x3C, 0xCB, 0x16, 0x85, 0x57, 0xC5, 0x87, 0x72,
+ 0xB7, 0x72, 0x05, 0x57, 0x82, 0x23, 0xF6, 0x05, 0x07, 0xB6,
+ 0xF3, 0x4C, 0xF0, 0x02, 0xD0, 0x01, 0xC0, 0x01, 0xF1, 0x08,
+ 0xD4, 0x00, 0xC4, 0x74, 0xD2, 0x10, 0xA0, 0x03, 0xF5, 0x08,
+ 0xA0, 0x03, 0xF6, 0x08, 0xD3, 0x01, 0x2F, 0xDF, 0xF3, 0x01,
+ 0x07, 0xD6, 0xE0, 0x04, 0x07, 0x6C, 0xA4, 0x43, 0x81, 0x13,
+ 0xB2, 0x22, 0xF2, 0x05, 0x07, 0xCC, 0xD0, 0x01, 0xC0, 0x01,
+ 0xF0, 0x1C, 0xF0, 0x02, 0xE0, 0x00, 0x07, 0xA6, 0xE0, 0x01,
+ 0x07, 0xC6, 0xE0, 0x01, 0x07, 0x7B, 0xF0, 0x02, 0x83, 0x02,
+ 0xD4, 0xF0, 0xA5, 0x11, 0xE0, 0x03, 0x07, 0xA6, 0xA3, 0x33,
+ 0xA5, 0x21, 0xE0, 0x03, 0x07, 0xDF, 0xF0, 0x02, 0xA5, 0x11,
+ 0xC5, 0xA0, 0xA4, 0x01, 0xA3, 0x21, 0xF6, 0x48, 0xE0, 0x05,
+ 0x07, 0x6C, 0xA4, 0x43, 0xB3, 0x32, 0xF3, 0x05, 0x07, 0xF4,
+ 0xA0, 0x41, 0xF0, 0x02, 0xD2, 0x0F, 0x83, 0x09, 0x13, 0x23,
+ 0x61, 0x13, 0x71, 0x13, 0x2F, 0xCE, 0x71, 0x13, 0xA0, 0x11,
+ 0xF0, 0x02, 0xD1, 0xE9, 0xF1, 0x18, 0xE0, 0x00, 0x07, 0xFD,
+ 0xF0, 0x02, 0xD1, 0xE8, 0xF1, 0x18, 0xE0, 0x00, 0x07, 0xFD,
+ 0xF0, 0x02, 0xD0, 0xFF, 0xE0, 0x00, 0x08, 0x0B, 0xF0, 0x02,
+ 0xE0, 0x05, 0x0B, 0x60, 0xA0, 0x51, 0xD2, 0xFB, 0xF2, 0x5C,
+ 0xA7, 0x01, 0xD5, 0x00, 0xD6, 0xDD, 0xE0, 0x05, 0x07, 0xDF,
+ 0x83, 0x02, 0xD2, 0x84, 0xC2, 0x01, 0x02, 0x23, 0xF6, 0x28,
+ 0xA2, 0x23, 0xF7, 0x28, 0xD5, 0x09, 0xE0, 0x05, 0x07, 0xE6,
+ 0xD3, 0x0F, 0x2D, 0x3E, 0xD5, 0x03, 0xE0, 0x05, 0x0C, 0xDD,
+ 0xD5, 0x00, 0xC5, 0x81, 0xE0, 0x05, 0x08, 0x66, 0xD5, 0xEE,
+ 0xE0, 0x05, 0x08, 0x0B, 0x83, 0x52, 0xF3, 0x0D, 0xA3, 0x33,
+ 0xD2, 0xE1, 0xF2, 0x3C, 0xA7, 0x51, 0xD5, 0x08, 0xD6, 0x77,
+ 0xE0, 0x05, 0x07, 0xDF, 0xD5, 0xDD, 0xE0, 0x05, 0x08, 0x0B,
+ 0xD2, 0xFC, 0xF2, 0x5C, 0xD5, 0x32, 0xE0, 0x05, 0x08, 0x0B,
+ 0xD2, 0x6F, 0xC2, 0x01, 0x02, 0x25, 0xF3, 0x28, 0xD2, 0x6E,
+ 0xC2, 0x01, 0xF2, 0x3C, 0xD2, 0xEB, 0xC2, 0x01, 0x85, 0x52,
+ 0x02, 0x25, 0xD5, 0x0F, 0xD6, 0x30, 0xF7, 0x28, 0xE0, 0x05,
+ 0x07, 0xDF, 0xA2, 0x23, 0xD5, 0x0E, 0xD6, 0x30, 0xF7, 0x28,
+ 0xE0, 0x05, 0x07, 0xDF, 0xD5, 0xBB, 0xE0, 0x05, 0x08, 0x0B,
+ 0xD7, 0x01, 0x67, 0x75, 0xD5, 0x00, 0xD6, 0x87, 0xE0, 0x05,
+ 0x07, 0xDF, 0xF0, 0x02, 0xD2, 0xE8, 0xF3, 0x28, 0xD2, 0x00,
+ 0xC2, 0x80, 0x2F, 0xFE, 0x80, 0x02, 0x80, 0x03, 0x1E, 0xFC,
+ 0xD1, 0x08, 0xC1, 0xA0, 0xE0, 0x01, 0x07, 0x6C, 0xF0, 0x02,
+ 0xD2, 0x95, 0xC2, 0x01, 0xF5, 0x28, 0xD4, 0x1F, 0xE0, 0x04,
+ 0x07, 0x68, 0xD4, 0x54, 0xE0, 0x04, 0x08, 0x06, 0xA5, 0x41,
+ 0xD4, 0x25, 0xE0, 0x04, 0x07, 0x68, 0xD4, 0x86, 0xE0, 0x04,
+ 0x08, 0x06, 0xD2, 0x8C, 0xC2, 0x01, 0x02, 0x24, 0xF5, 0x28,
+ 0x80, 0x53, 0xD4, 0x27, 0xC4, 0x80, 0xE0, 0x04, 0x07, 0x6C,
+ 0xD3, 0x01, 0x2D, 0xCF, 0x80, 0x03, 0x2F, 0xCF, 0xD2, 0x88,
+ 0xC2, 0x01, 0x02, 0x23, 0xF5, 0x28, 0xD4, 0x24, 0xE0, 0x04,
+ 0x07, 0x68, 0x80, 0x07, 0xD3, 0x02, 0x2F, 0xCF, 0x1D, 0xDF,
+ 0xD5, 0x02, 0xD4, 0x1D, 0xE0, 0x04, 0x07, 0x68, 0xE0, 0x04,
+ 0x09, 0x12, 0xF0, 0x02, 0xE0, 0x00, 0x0B, 0x5D, 0xD6, 0x6E,
+ 0xC6, 0x01, 0xF1, 0x68, 0xD6, 0xE1, 0xF3, 0x68, 0xF3, 0x0D,
+ 0xD7, 0x08, 0x02, 0x07, 0x82, 0x29, 0x42, 0x13, 0xD6, 0xE2,
+ 0xF6, 0x2C, 0xA6, 0x21, 0xE0, 0x06, 0x0B, 0xB0, 0xD7, 0x80,
+ 0xC7, 0x01, 0x5C, 0x27, 0xD6, 0x08, 0xD7, 0x66, 0xE0, 0x06,
+ 0x07, 0xA6, 0xF0, 0x02, 0xE0, 0x00, 0x07, 0x1B, 0xD7, 0xC0,
+ 0x4C, 0xF0, 0xF7, 0x0D, 0x4D, 0x0F, 0x2F, 0xC9, 0xF7, 0x01,
+ 0x09, 0x0D, 0xD7, 0x2D, 0x4C, 0xF1, 0xF7, 0x0D, 0x4D, 0x1F,
+ 0x2F, 0xC9, 0xF7, 0x01, 0x09, 0x0D, 0xD7, 0x50, 0x5D, 0xF2,
+ 0xF5, 0x01, 0x08, 0xD5, 0xF7, 0x0D, 0x5C, 0x2F, 0xF4, 0x01,
+ 0x08, 0xE2, 0xF0, 0x19, 0x09, 0x10, 0xD4, 0xE7, 0xF3, 0x48,
+ 0xB3, 0x32, 0xD5, 0xFF, 0xC5, 0xFF, 0x5D, 0x3D, 0xF5, 0x05,
+ 0x08, 0xF6, 0xD1, 0x10, 0xD4, 0xE1, 0xF3, 0x48, 0xF0, 0x19,
+ 0x08, 0xEC, 0xD4, 0xE7, 0xF3, 0x48, 0xA3, 0x33, 0x95, 0x33,
+ 0xF5, 0x01, 0x08, 0xF6, 0xD4, 0xE1, 0xF3, 0x48, 0xF3, 0x0D,
+ 0xD1, 0x10, 0xD4, 0xE7, 0xD5, 0x00, 0xF4, 0x5C, 0xD4, 0xEB,
+ 0xF2, 0x48, 0x42, 0x13, 0xF4, 0x2C, 0xD0, 0x02, 0xF0, 0x19,
+ 0x09, 0x11, 0xF4, 0x3C, 0xD4, 0xF0, 0xF5, 0x48, 0xF5, 0x05,
+ 0x09, 0x04, 0xD4, 0xE4, 0xF7, 0x48, 0x07, 0x73, 0xD6, 0x13,
+ 0xE0, 0x06, 0x07, 0x68, 0xD0, 0x01, 0xF0, 0x19, 0x09, 0x11,
+ 0xD4, 0xE5, 0xF7, 0x48, 0x07, 0x73, 0xD6, 0x15, 0xE0, 0x06,
+ 0x07, 0x68, 0xD0, 0x01, 0xF0, 0x19, 0x09, 0x11, 0xD0, 0x03,
+ 0xF0, 0x19, 0x09, 0x11, 0xD0, 0x00, 0xF0, 0x02, 0xD1, 0x3D,
+ 0xD0, 0x02, 0xE0, 0x00, 0x07, 0x68, 0xC1, 0x01, 0xF1, 0x09,
+ 0xD1, 0x1F, 0xE0, 0x00, 0x07, 0x68, 0xF0, 0x02, 0xE0, 0x02,
+ 0x07, 0x91, 0xC1, 0xFF, 0xF1, 0x09, 0xD3, 0x10, 0xD2, 0x29,
+ 0xE0, 0x02, 0x07, 0x68, 0xD3, 0x00, 0xA4, 0x31, 0xA2, 0x31,
+ 0xE0, 0x02, 0x07, 0xE6, 0xA2, 0x23, 0xD1, 0x0D, 0x5D, 0xED,
+ 0xF1, 0x01, 0x09, 0x27, 0xD1, 0x80, 0xD0, 0xE6, 0xF0, 0x1C,
+ 0xE0, 0x00, 0x0A, 0x14, 0xF0, 0x02, 0xD5, 0xEE, 0xF0, 0x58,
+ 0xF0, 0x01, 0x09, 0x7C, 0xD5, 0x08, 0x16, 0x05, 0xF6, 0x01,
+ 0x09, 0x69, 0xD5, 0x09, 0x16, 0x05, 0xF6, 0x05, 0x09, 0x6A,
+ 0xE0, 0x00, 0x09, 0xAD, 0x83, 0x39, 0xA3, 0x39, 0x83, 0x37,
+ 0xD7, 0x80, 0xD8, 0x01, 0xD0, 0x01, 0x24, 0x73, 0x5E, 0xC1,
+ 0x5D, 0x2C, 0x2E, 0xE9, 0xF6, 0x05, 0x09, 0x5C, 0xA6, 0x33,
+ 0x24, 0x73, 0x5E, 0xC1, 0x5D, 0x2C, 0x2E, 0xE9, 0xF6, 0x05,
+ 0x09, 0x5C, 0xB6, 0x32, 0x24, 0x76, 0x5E, 0xC1, 0x5D, 0x2C,
+ 0x2E, 0xE9, 0xF6, 0x01, 0x09, 0x65, 0xA8, 0x83, 0xF0, 0x0D,
+ 0x47, 0x80, 0xD6, 0x0A, 0x46, 0x6C, 0xF6, 0x05, 0x09, 0x48,
+ 0xF0, 0x19, 0x09, 0x7C, 0xD5, 0xE6, 0xF5, 0x7C, 0xF0, 0x19,
+ 0x09, 0x75, 0xD0, 0x00, 0x96, 0x0F, 0xF6, 0x01, 0x09, 0x6F,
+ 0xD6, 0xF0, 0x1C, 0xC6, 0xD6, 0x80, 0x00, 0x06, 0xD6, 0xFF,
+ 0x2C, 0xC6, 0xD5, 0xE6, 0xF5, 0x0C, 0xD6, 0x00, 0xD5, 0xEF,
+ 0xF5, 0x6C, 0xD5, 0xF0, 0xF5, 0x6C, 0xF0, 0x19, 0x09, 0xAC,
+ 0xD6, 0x80, 0xD5, 0xE6, 0xF5, 0x6C, 0xE0, 0x00, 0x09, 0xAD,
+ 0xD6, 0x40, 0x06, 0x36, 0xD4, 0x80, 0xC4, 0xFF, 0x2C, 0xE8,
+ 0x5E, 0xC1, 0x5D, 0x2C, 0x2E, 0xE9, 0xF6, 0x05, 0x09, 0x90,
+ 0xD6, 0x20, 0x06, 0x36, 0xD4, 0xC0, 0xC4, 0xFF, 0x2C, 0xE8,
+ 0xD5, 0xE2, 0xF6, 0x58, 0x86, 0x64, 0x14, 0x46, 0xD5, 0xE1,
+ 0xF6, 0x58, 0x24, 0x46, 0xD6, 0x80, 0x14, 0x64, 0xA4, 0x43,
+ 0x94, 0x42, 0xD5, 0xEF, 0xF5, 0x4C, 0xD5, 0x6E, 0xC5, 0x01,
+ 0xF6, 0x58, 0x86, 0x62, 0x04, 0x64, 0xD6, 0x40, 0x16, 0x64,
+ 0xF6, 0x05, 0x09, 0xA9, 0xD6, 0x00, 0xF0, 0x19, 0x09, 0xAA,
+ 0xD6, 0x01, 0xD5, 0xF0, 0xF5, 0x6C, 0xF0, 0x02, 0xD5, 0x31,
+ 0xE0, 0x05, 0x08, 0x0B, 0xD4, 0x66, 0xC4, 0x01, 0x04, 0x45,
+ 0xF1, 0x48, 0x82, 0x19, 0x82, 0x29, 0xD5, 0xFF, 0x2D, 0xD5,
+ 0xE0, 0x00, 0x0B, 0x5D, 0xA0, 0x05, 0x80, 0x05, 0xD4, 0xE1,
+ 0xF5, 0x48, 0xB5, 0x52, 0xF5, 0x01, 0x09, 0xC4, 0xA5, 0x11,
+ 0xA1, 0x21, 0xA2, 0x51, 0x11, 0x01, 0x02, 0x02, 0x05, 0x12,
+ 0xA5, 0x53, 0x83, 0x53, 0xF0, 0x02, 0xD5, 0xCC, 0xE0, 0x05,
+ 0x08, 0x0B, 0xF5, 0x01, 0x09, 0xDB, 0xD3, 0xFB, 0xF6, 0x38,
+ 0xD5, 0x1B, 0xE0, 0x05, 0x07, 0x68, 0xD3, 0xE6, 0xD4, 0x80,
+ 0xF3, 0x4C, 0xE0, 0x05, 0x0A, 0x49, 0xF0, 0x19, 0x09, 0xEC,
+ 0xD3, 0xF0, 0xF0, 0x38, 0xD3, 0xFB, 0xF1, 0x38, 0x80, 0x06,
+ 0x16, 0xDC, 0xD5, 0x1B, 0xE0, 0x05, 0x07, 0x68, 0xF0, 0x01,
+ 0x09, 0xEA, 0xE0, 0x05, 0x0A, 0x63, 0xF0, 0x19, 0x09, 0xEC,
+ 0xE0, 0x05, 0x0A, 0x9A, 0xD5, 0x00, 0xE0, 0x05, 0x09, 0xF4,
+ 0xE0, 0x05, 0x0A, 0x14, 0xE0, 0x05, 0x0A, 0x39, 0xF0, 0x02,
+ 0xD3, 0x22, 0xE0, 0x03, 0x08, 0x0B, 0xE0, 0x04, 0x0B, 0x60,
+ 0x2F, 0xF4, 0xD1, 0x91, 0xC1, 0x01, 0x02, 0x14, 0xF6, 0x28,
+ 0x1E, 0xE0, 0xA1, 0x15, 0x01, 0x13, 0xF5, 0x18, 0xD1, 0xE3,
+ 0xF2, 0x18, 0x82, 0x22, 0x05, 0x52, 0x85, 0x52, 0x85, 0x53,
+ 0xD7, 0xCC, 0xE0, 0x07, 0x08, 0x0B, 0xF7, 0x01, 0x0A, 0x0F,
+ 0xD6, 0xC1, 0xC6, 0xA0, 0xD4, 0x2A, 0xC4, 0xE0, 0xE0, 0x04,
+ 0x07, 0x6C, 0xF0, 0x02, 0xD1, 0xE6, 0xF0, 0x18, 0xD5, 0x00,
+ 0xD3, 0x1C, 0xD4, 0x88, 0xE0, 0x03, 0x07, 0xDF, 0xD1, 0x00,
+ 0xB5, 0x02, 0xD3, 0x1D, 0xD4, 0xE8, 0xE0, 0x03, 0x07, 0xDF,
+ 0xD5, 0x0C, 0xD2, 0xF9, 0xC2, 0x01, 0xF2, 0x28, 0xF2, 0x05,
+ 0x0A, 0x2B, 0xD2, 0x80, 0x12, 0x02, 0xF2, 0x01, 0x0A, 0x2D,
+ 0xD1, 0x01, 0xD5, 0x09, 0xD3, 0x1D, 0xD4, 0x30, 0xE0, 0x03,
+ 0x07, 0xDF, 0xC2, 0x01, 0xF2, 0x09, 0xA5, 0x11, 0xD3, 0x1C,
+ 0xD4, 0x88, 0xE0, 0x03, 0x07, 0xDF, 0xF0, 0x02, 0xD3, 0xE6,
+ 0xF0, 0x38, 0xD4, 0x82, 0x4D, 0xC4, 0xD4, 0x85, 0x4E, 0xC4,
+ 0x82, 0x24, 0xD3, 0x65, 0xE0, 0x03, 0x08, 0x0B, 0x24, 0x31,
+ 0x04, 0x42, 0xD3, 0x17, 0xE0, 0x03, 0x07, 0x68, 0xF0, 0x02,
+ 0xE0, 0x00, 0x0B, 0x5D, 0xD4, 0xE2, 0xF1, 0x48, 0x81, 0x18,
+ 0x12, 0x01, 0xA5, 0x20, 0xF5, 0x05, 0x0A, 0x53, 0xF2, 0x0D,
+ 0xD5, 0xE0, 0x12, 0x25, 0x82, 0x28, 0xD5, 0x33, 0xC5, 0x07,
+ 0x05, 0x52, 0xD4, 0xE3, 0xF4, 0x5C, 0xD3, 0xC8, 0xD4, 0xE4,
+ 0xF4, 0x3C, 0xA7, 0x31, 0xD6, 0x13, 0xE0, 0x06, 0x07, 0x68,
+ 0xF0, 0x02, 0xE0, 0x00, 0x0B, 0x5D, 0xD4, 0xE2, 0xF1, 0x48,
+ 0xD4, 0xEF, 0xF3, 0x48, 0x81, 0x18, 0x10, 0x01, 0xD4, 0xE1,
+ 0xF5, 0x48, 0x20, 0x05, 0x85, 0x36, 0x00, 0x05, 0xD4, 0xFC,
+ 0xF1, 0x48, 0xE0, 0x06, 0x0B, 0x60, 0xF6, 0x01, 0x0A, 0x7A,
+ 0xD6, 0x32, 0xE0, 0x06, 0x08, 0x0B, 0xA6, 0x63, 0xD4, 0x77,
+ 0xC4, 0x01, 0x04, 0x46, 0xF4, 0x48, 0xF1, 0x01, 0x0A, 0x86,
+ 0xD5, 0x00, 0xC5, 0x08, 0x14, 0x54, 0x14, 0x04, 0xF0, 0x19,
+ 0x0A, 0x87, 0x14, 0x40, 0xA5, 0x49, 0x87, 0x57, 0x85, 0x76,
+ 0x15, 0x54, 0x85, 0x58, 0xD4, 0xE3, 0xF4, 0x5C, 0xD4, 0xE5,
+ 0xF4, 0x7C, 0xD6, 0x15, 0xE0, 0x06, 0x07, 0x68, 0xD4, 0xE4,
+ 0xF4, 0x3C, 0xA7, 0x31, 0xD6, 0x13, 0xE0, 0x06, 0x07, 0x68,
+ 0xF0, 0x02, 0xE0, 0x00, 0x0B, 0x5D, 0xD4, 0xE2, 0xF1, 0x48,
+ 0x81, 0x18, 0x10, 0x01, 0xA5, 0x00, 0xF5, 0x05, 0x0A, 0xA4,
+ 0xF0, 0x0D, 0x80, 0x08, 0xD6, 0x32, 0xE0, 0x06, 0x08, 0x0B,
+ 0xA5, 0x61, 0xE0, 0x06, 0x0B, 0x60, 0xF6, 0x05, 0x0A, 0xC6,
+ 0xD4, 0xD5, 0xC4, 0x01, 0x04, 0x45, 0xF2, 0x48, 0xA6, 0x01,
+ 0xE0, 0x06, 0x0A, 0xE9, 0xD4, 0xE3, 0xF4, 0x7C, 0xA0, 0x61,
+ 0xD4, 0xFC, 0xF1, 0x48, 0xF1, 0x01, 0x0A, 0xC0, 0x82, 0x29,
+ 0x82, 0x29, 0x02, 0x20, 0xF0, 0x19, 0x0A, 0xE2, 0xD5, 0xFF,
+ 0x2E, 0xE5, 0x02, 0x20, 0xF2, 0x0D, 0xF0, 0x19, 0x0A, 0xE2,
+ 0xD4, 0xD8, 0xC4, 0x01, 0x04, 0x45, 0xF2, 0x48, 0xD4, 0xFC,
+ 0xF1, 0x48, 0xF1, 0x01, 0x0A, 0xDA, 0x82, 0x23, 0xD5, 0x80,
+ 0xC5, 0x7F, 0x2E, 0xE5, 0x06, 0x20, 0xE0, 0x06, 0x0A, 0xE9,
+ 0xD4, 0xE3, 0xF4, 0x7C, 0xA2, 0x61, 0xF0, 0x19, 0x0A, 0xE2,
+ 0x82, 0x2E, 0x06, 0x20, 0xE0, 0x06, 0x0A, 0xE9, 0xD4, 0xE3,
+ 0xF4, 0x7C, 0xA2, 0x61, 0xF2, 0x0D, 0xD4, 0xE4, 0xF4, 0x2C,
+ 0xA7, 0x21, 0xD6, 0x13, 0xE0, 0x06, 0x07, 0x68, 0xF0, 0x02,
+ 0xD1, 0xE6, 0xF2, 0x18, 0xA5, 0x21, 0xA4, 0x01, 0xE0, 0x04,
+ 0x0C, 0x08, 0x83, 0x23, 0x4F, 0x5F, 0x22, 0x23, 0x11, 0x52,
+ 0x00, 0x43, 0xF0, 0x02, 0xF0, 0x0A, 0xD1, 0x00, 0xD0, 0xEC,
+ 0xF0, 0x1C, 0xD1, 0x03, 0xA0, 0x03, 0xF0, 0x1C, 0xF0, 0x06,
+ 0xF0, 0x02, 0xD0, 0xFF, 0xF1, 0x08, 0xD2, 0x00, 0xC2, 0x01,
+ 0xF0, 0x28, 0x10, 0x01, 0xF0, 0x01, 0x0B, 0x15, 0xF2, 0x1C,
+ 0xD2, 0xDF, 0xC2, 0x01, 0xD4, 0x03, 0x42, 0x41, 0xA0, 0x23,
+ 0xD4, 0x01, 0xD3, 0x08, 0xE0, 0x02, 0x07, 0xF0, 0xA2, 0x01,
+ 0xD4, 0x02, 0xD3, 0x3A, 0xE0, 0x02, 0x07, 0xF0, 0xF0, 0x02,
+ 0xD0, 0x05, 0xC0, 0x60, 0xE0, 0x00, 0x07, 0x5A, 0xA3, 0x01,
+ 0xE0, 0x03, 0x07, 0x5A, 0xD0, 0xF8, 0xC0, 0x3F, 0x2C, 0xEC,
+ 0xF0, 0x05, 0x0B, 0x28, 0x82, 0x2A, 0x82, 0x2A, 0x81, 0x1D,
+ 0x1D, 0xDE, 0xF0, 0x19, 0x0B, 0x2A, 0xD1, 0xFF, 0xC1, 0x1F,
+ 0x82, 0x44, 0x82, 0x25, 0xE0, 0x02, 0x0C, 0x22, 0xD0, 0x00,
+ 0xC0, 0x06, 0x00, 0x02, 0xE0, 0x01, 0x0C, 0x22, 0x81, 0x13,
+ 0x11, 0x01, 0x90, 0x11, 0x21, 0x10, 0xD3, 0x97, 0xC3, 0x01,
+ 0xF3, 0x1C, 0xD3, 0xFA, 0xF2, 0x38, 0x84, 0x29, 0xD0, 0x0F,
+ 0x24, 0x40, 0x85, 0x19, 0x04, 0x45, 0x2D, 0xDC, 0x2E, 0xEC,
+ 0x22, 0x20, 0x02, 0x21, 0x82, 0x29, 0x01, 0x24, 0xF3, 0x1C,
+ 0xE0, 0x03, 0x08, 0x10, 0xF3, 0x01, 0x0B, 0x5C, 0xD2, 0x00,
+ 0xD3, 0xDB, 0xC3, 0x01, 0xF0, 0x38, 0x4C, 0xDC, 0xF0, 0x05,
+ 0x0B, 0x58, 0xA2, 0x23, 0xA3, 0x33, 0xA0, 0x26, 0xF0, 0x01,
+ 0x0B, 0x4F, 0xD3, 0xFF, 0xF3, 0x2C, 0xE0, 0x03, 0x0A, 0xFE,
+ 0xF0, 0x02, 0xD0, 0xEB, 0xF0, 0x08, 0xF0, 0x02, 0xD0, 0x11,
+ 0xE0, 0x00, 0x08, 0x0B, 0xF0, 0x02, 0xD0, 0x0E, 0xE0, 0x00,
+ 0x07, 0x5A, 0xD3, 0xF0, 0x2D, 0xDF, 0x81, 0x19, 0xB0, 0x1C,
+ 0xF0, 0x02, 0xD1, 0xE2, 0xF1, 0x18, 0xD5, 0xFD, 0xF3, 0x58,
+ 0xA7, 0x31, 0xB2, 0x02, 0xF2, 0x01, 0x0B, 0x96, 0xBA, 0x14,
+ 0xD8, 0x0C, 0xD9, 0xB0, 0xE0, 0x08, 0x07, 0xA6, 0xD2, 0x0C,
+ 0xC2, 0x08, 0x3A, 0x12, 0xD8, 0x0D, 0xD9, 0xB4, 0xE0, 0x08,
+ 0x07, 0xA6, 0xD2, 0x68, 0x33, 0x12, 0x83, 0x32, 0xC7, 0x01,
+ 0x15, 0x73, 0xA7, 0x31, 0xD5, 0x01, 0x2E, 0x35, 0xD8, 0x0D,
+ 0xD9, 0x22, 0xE0, 0x08, 0x07, 0xA6, 0x8A, 0x33, 0xD8, 0x0D,
+ 0xD9, 0xFC, 0xE0, 0x08, 0x07, 0xDF, 0xD5, 0xFD, 0xF5, 0x3C,
+ 0xC5, 0x27, 0xF5, 0x09, 0xB0, 0x02, 0xD5, 0x06, 0xC5, 0x70,
+ 0xE0, 0x05, 0x07, 0x5A, 0x85, 0x73, 0x86, 0x75, 0xD4, 0x01,
+ 0x2D, 0xD8, 0x2E, 0xE8, 0x22, 0xED, 0x3C, 0xE9, 0xF4, 0x01,
+ 0x0B, 0xAE, 0xD4, 0x1F, 0x4C, 0xC3, 0x26, 0x64, 0x94, 0x31,
+ 0x25, 0x54, 0x13, 0x35, 0x03, 0x36, 0xF0, 0x01, 0x0B, 0xAE,
+ 0xF0, 0x19, 0x0B, 0x84, 0xA0, 0x21, 0xF0, 0x02, 0xD2, 0x42,
+ 0xC2, 0x01, 0xF3, 0x28, 0x15, 0x30, 0x5F, 0xFC, 0x40, 0x53,
+ 0xD5, 0x0B, 0x05, 0x25, 0xF4, 0x58, 0x15, 0x40, 0x5C, 0x0C,
+ 0x40, 0x54, 0xB2, 0x22, 0xD1, 0x00, 0xA2, 0x25, 0xA1, 0x13,
+ 0xF4, 0x28, 0x4D, 0x0C, 0xF5, 0x05, 0x0B, 0xBE, 0xB2, 0x22,
+ 0xF3, 0x28, 0xD5, 0x01, 0x86, 0x4F, 0x7D, 0xE9, 0xD6, 0x10,
+ 0x15, 0x65, 0x74, 0x45, 0x73, 0x35, 0x70, 0x05, 0x20, 0x00,
+ 0x23, 0x33, 0x24, 0x44, 0x80, 0x0F, 0x83, 0x3F, 0x84, 0x4F,
+ 0x15, 0x40, 0x16, 0x43, 0x23, 0x53, 0x24, 0x60, 0xD5, 0x09,
+ 0xD0, 0x00, 0xC0, 0x40, 0x82, 0x03, 0x36, 0x04, 0x5E, 0xE3,
+ 0x86, 0x62, 0xB6, 0x62, 0x26, 0x62, 0x10, 0x06, 0x82, 0x23,
+ 0xB5, 0x52, 0xF5, 0x05, 0x0B, 0xDC, 0xC5, 0x72, 0x36, 0x05,
+ 0xC5, 0x01, 0x06, 0x65, 0x86, 0x6F, 0x80, 0x65, 0xA9, 0x11,
+ 0xD7, 0x02, 0xD8, 0x20, 0xE0, 0x07, 0x07, 0xDF, 0xD2, 0xFE,
+ 0xF2, 0x1C, 0xD4, 0x01, 0x69, 0x41, 0xA9, 0x95, 0x89, 0x95,
+ 0xD7, 0x06, 0xD8, 0x26, 0xE0, 0x07, 0x07, 0xDF, 0xD7, 0xF9,
+ 0xF7, 0x0C, 0xA9, 0x01, 0xD7, 0x02, 0xD8, 0xFC, 0xE0, 0x07,
+ 0x07, 0xDF, 0x89, 0x09, 0xD7, 0x03, 0xD8, 0x10, 0xE0, 0x07,
+ 0x07, 0xDF, 0xF0, 0x02, 0x44, 0xDC, 0xF4, 0x05, 0x0C, 0x1F,
+ 0xD4, 0x01, 0x7F, 0xC4, 0x7C, 0x1C, 0x13, 0x43, 0x61, 0x13,
+ 0xA2, 0x31, 0x6C, 0xCD, 0xB2, 0x22, 0xA4, 0x20, 0xF4, 0x05,
+ 0x0C, 0x11, 0xA1, 0x01, 0xD4, 0x0F, 0x14, 0x43, 0x60, 0x04,
+ 0x70, 0x04, 0xA4, 0x33, 0x71, 0x14, 0xF0, 0x19, 0x0C, 0x21,
+ 0xA1, 0x01, 0xD0, 0x00, 0xF0, 0x02, 0x94, 0x01, 0xF4, 0x05,
+ 0x0C, 0x28, 0xD0, 0x00, 0xF0, 0x19, 0x0C, 0x5E, 0xD7, 0x30,
+ 0xC7, 0x06, 0x4C, 0x0F, 0xF4, 0x01, 0x0C, 0x2E, 0xA0, 0x71,
+ 0xD4, 0x01, 0x7D, 0x0C, 0xD8, 0x10, 0x18, 0x85, 0xD7, 0x9E,
+ 0xC7, 0x01, 0xF4, 0x78, 0x28, 0x84, 0xB5, 0x56, 0x60, 0x05,
+ 0xD2, 0x00, 0xC2, 0x10, 0xD5, 0x00, 0xC5, 0x20, 0xD6, 0x0C,
+ 0xD4, 0x00, 0xC4, 0x20, 0x04, 0x45, 0xD1, 0x00, 0xC1, 0x20,
+ 0x2D, 0xDC, 0xF1, 0x05, 0x0C, 0x51, 0x81, 0x04, 0x31, 0x14,
+ 0xD4, 0x00, 0xC4, 0x20, 0x4C, 0x1C, 0xF4, 0x05, 0x0C, 0x51,
+ 0xA0, 0x11, 0xF4, 0x78, 0x18, 0x84, 0xF0, 0x19, 0x0C, 0x3D,
+ 0xA7, 0x73, 0x85, 0x53, 0xB6, 0x62, 0xF6, 0x05, 0x0C, 0x3D,
+ 0xD4, 0x00, 0xC4, 0x20, 0x14, 0x40, 0x84, 0x47, 0x18, 0x84,
+ 0xA8, 0x85, 0x88, 0x85, 0xA0, 0x81, 0xF0, 0x02, 0xD2, 0x00,
+ 0xD3, 0x00, 0xC3, 0xC0, 0xD4, 0xC7, 0xC4, 0x10, 0xE0, 0x02,
+ 0x07, 0xE6, 0xD2, 0x01, 0xD3, 0xF0, 0xA4, 0x01, 0xE0, 0x02,
+ 0x07, 0xDF, 0xD4, 0x10, 0xC4, 0x27, 0xF4, 0x09, 0xD2, 0x01,
+ 0xD3, 0xFF, 0xD4, 0x01, 0xE0, 0x02, 0x07, 0xDF, 0xD4, 0x10,
+ 0xC4, 0x27, 0xF4, 0x09, 0xD2, 0x00, 0xC2, 0x70, 0xE0, 0x02,
+ 0x07, 0x5A, 0xD0, 0xFF, 0xC0, 0x03, 0x2C, 0xFC, 0xD2, 0x01,
+ 0xD3, 0xFF, 0xD4, 0x00, 0xE0, 0x02, 0x07, 0xDF, 0xF0, 0x02,
+ 0xD2, 0x01, 0xE0, 0x02, 0x0C, 0xED, 0xD2, 0xC7, 0xC2, 0x18,
+ 0xE0, 0x02, 0x0C, 0x5F, 0xD3, 0xC7, 0xC3, 0x14, 0xE0, 0x03,
+ 0x0C, 0x5F, 0xD4, 0xC7, 0xC4, 0x38, 0xE0, 0x04, 0x0C, 0x5F,
+ 0x82, 0x25, 0x84, 0x45, 0x83, 0x35, 0x20, 0x23, 0x21, 0x43,
+ 0xD6, 0xAF, 0xC6, 0x01, 0xF6, 0x0C, 0xD5, 0xD3, 0xC5, 0x01,
+ 0x35, 0x50, 0xA5, 0x53, 0x82, 0x53, 0xD5, 0x80, 0x12, 0x25,
+ 0x25, 0x22, 0x85, 0x5F, 0x12, 0x25, 0xD6, 0xF8, 0xF6, 0x2C,
+ 0xD5, 0xE0, 0xC5, 0x01, 0x32, 0x51, 0xA2, 0x23, 0x82, 0x23,
+ 0xD2, 0x22, 0xC2, 0x01, 0xF3, 0x28, 0xA2, 0x23, 0xF4, 0x28,
+ 0xD2, 0x00, 0xE0, 0x02, 0x07, 0xE6, 0xD2, 0x00, 0xE0, 0x02,
+ 0x0C, 0xED, 0xF0, 0x02, 0xD0, 0x06, 0xD2, 0xF8, 0xF1, 0x28,
+ 0x23, 0x31, 0x93, 0x3C, 0xA3, 0x33, 0x93, 0x32, 0x10, 0x03,
+ 0xD1, 0x0F, 0x4F, 0xCD, 0xF3, 0x01, 0x0C, 0xC4, 0xD0, 0x0F,
+ 0xA3, 0x00, 0x23, 0x03, 0xD1, 0x0B, 0xD2, 0xB8, 0xE0, 0x01,
+ 0x07, 0xDF, 0xF0, 0x02, 0xD0, 0x0C, 0xD1, 0x12, 0x03, 0x10,
+ 0xD2, 0xF8, 0xF1, 0x28, 0x23, 0x31, 0x93, 0x3C, 0xA3, 0x33,
+ 0x93, 0x32, 0x10, 0x03, 0xD1, 0x0F, 0x4F, 0xCD, 0xF3, 0x01,
+ 0x0C, 0xDA, 0xD0, 0x0F, 0xA3, 0x00, 0x23, 0x03, 0xF0, 0x02,
+ 0xD1, 0x0F, 0x13, 0x10, 0xD2, 0xF8, 0xF1, 0x28, 0x23, 0x31,
+ 0x93, 0x3C, 0xA3, 0x33, 0x93, 0x32, 0xD0, 0x08, 0xA3, 0x00,
+ 0x23, 0x03, 0xD1, 0x12, 0xD2, 0x30, 0xE0, 0x01, 0x07, 0xA6,
+ 0xF0, 0x02, 0xD1, 0x07, 0xA3, 0x01, 0xD2, 0x99, 0xE0, 0x01,
+ 0x07, 0xA6, 0xF0, 0x02, 0xD5, 0x01, 0xE0, 0x05, 0x0C, 0xED,
+ 0xD0, 0x4E, 0xC0, 0x01, 0xD2, 0xFF, 0xC2, 0x03, 0xD1, 0x42,
+ 0xC1, 0x01, 0xD3, 0x0C, 0xD5, 0x01, 0xF7, 0x08, 0xA0, 0x03,
+ 0xF6, 0x08, 0xA0, 0x03, 0xE0, 0x05, 0x07, 0xE6, 0xD4, 0x14,
+ 0xF4, 0x09, 0xD4, 0x00, 0xC4, 0x80, 0x1F, 0xF8, 0xE0, 0x05,
+ 0x07, 0xE6, 0xD4, 0x14, 0xF4, 0x09, 0xD5, 0x01, 0xC5, 0x70,
+ 0xE0, 0x05, 0x07, 0x5A, 0x2E, 0xE2, 0x86, 0x66, 0xD4, 0x00,
+ 0xC4, 0x42, 0x36, 0x64, 0xF4, 0x18, 0xD5, 0x00, 0xC5, 0x13,
+ 0x35, 0x45, 0x07, 0x45, 0x15, 0x45, 0x5F, 0xFA, 0x5D, 0xE9,
+ 0x2F, 0xF9, 0xF7, 0x05, 0x0D, 0x22, 0xA6, 0x41, 0xF1, 0x6C,
+ 0xA1, 0x13, 0xB3, 0x32, 0xF3, 0x05, 0x0C, 0xFD, 0xD5, 0x00,
+ 0xE0, 0x05, 0x0C, 0xED, 0xD5, 0x24, 0xC5, 0x01, 0xF6, 0x58,
+ 0xA5, 0x53, 0xF7, 0x58, 0xD5, 0x01, 0xE0, 0x05, 0x07, 0xE6,
+ 0xF0, 0x02, 0xD1, 0xF3, 0xF2, 0x18, 0xD1, 0xF4, 0xF0, 0x18,
+ 0x02, 0x20, 0xD1, 0xF5, 0xF0, 0x18, 0x12, 0x20, 0xD0, 0x7F,
+ 0xC0, 0x01, 0x02, 0x20, 0xD1, 0xC4, 0xC1, 0x01, 0xF1, 0x2C,
+ 0xF0, 0x02, 0x82, 0x02, 0xD1, 0x7C, 0xC1, 0x01, 0x01, 0x12,
+ 0xF2, 0x18, 0xD3, 0x04, 0xC3, 0x01, 0xF7, 0x38, 0xD0, 0x0F,
+ 0xC0, 0xFF, 0x2F, 0xF0, 0x1F, 0xF2, 0xD5, 0x02, 0xD6, 0xF0,
+ 0xE0, 0x05, 0x07, 0xA6, 0xA1, 0x13, 0xF2, 0x18, 0xA3, 0x33,
+ 0xF7, 0x38, 0xD0, 0xFF, 0xC0, 0x9B, 0x2F, 0xF0, 0x1F, 0xF2,
+ 0xD5, 0x03, 0xE0, 0x05, 0x07, 0xA6, 0xF0, 0x02, 0xD1, 0x00,
+ 0xD2, 0x01, 0xD4, 0xF3, 0xF5, 0x48, 0x4F, 0x5C, 0xF3, 0x05,
+ 0x0D, 0x6E, 0xD1, 0x01, 0x10, 0x05, 0xD4, 0xF4, 0xF5, 0x48,
+ 0x4F, 0x5C, 0xF3, 0x05, 0x0D, 0x6E, 0xD2, 0x00, 0x10, 0x05,
+ 0xD4, 0xF1, 0xF3, 0x48, 0xF3, 0x01, 0x0D, 0x88, 0xD4, 0xFE,
+ 0xF3, 0x48, 0x93, 0x33, 0xF3, 0x01, 0x0D, 0x88, 0xD4, 0xF9,
+ 0xF3, 0x48, 0xD5, 0xB3, 0x23, 0x35, 0xD5, 0x00, 0xC5, 0x10,
+ 0x05, 0x53, 0x65, 0x51, 0x85, 0x5B, 0x85, 0x5B, 0xD3, 0x0F,
+ 0x4F, 0x5F, 0xF3, 0x01, 0x0D, 0x93, 0xD5, 0x0F, 0xF0, 0x19,
+ 0x0D, 0x93, 0xD4, 0xFE, 0xF3, 0x48, 0x93, 0x33, 0x83, 0x32,
+ 0x01, 0x13, 0x81, 0x14, 0xD3, 0x84, 0xC3, 0xF8, 0x75, 0x31,
+ 0xD4, 0x0F, 0x2D, 0xD8, 0xD3, 0x03, 0xD4, 0x52, 0xE0, 0x03,
+ 0x07, 0xA6, 0xA5, 0x21, 0xD3, 0x03, 0xD4, 0x77, 0xE0, 0x03,
+ 0x07, 0xA6, 0xD5, 0x80, 0x4F, 0x5C, 0xF3, 0x05, 0x0D, 0xA4,
+ 0x10, 0x05, 0xD4, 0xF5, 0xF5, 0x48, 0x00, 0x05, 0xA5, 0x01,
+ 0xD3, 0x06, 0xD4, 0xF8, 0xE0, 0x03, 0x07, 0xA6, 0xF0, 0x02,
+ 0xA2, 0x01, 0xD0, 0x0E, 0xD1, 0xBA, 0xE0, 0x00, 0x07, 0xA6,
+ 0xF0, 0x02, 0x83, 0x09, 0xF3, 0x05, 0x0D, 0xB8, 0x81, 0x05,
+ 0xD3, 0x03, 0x2E, 0xCF, 0xF0, 0x19, 0x0D, 0xC2, 0xD1, 0x0C,
+ 0x12, 0x01, 0x83, 0x29, 0xF3, 0x01, 0x0D, 0xC1, 0xB2, 0x28,
+ 0xA1, 0x19, 0xF0, 0x19, 0x0D, 0xBA, 0x81, 0x15, 0xD4, 0x0E,
+ 0xA6, 0x21, 0xD5, 0xFC, 0xE0, 0x04, 0x07, 0xA6, 0xD4, 0x0E,
+ 0xA6, 0x11, 0xD5, 0x75, 0xE0, 0x04, 0x07, 0xA6, 0xF0, 0x02,
+ 0xE0, 0x00, 0x0E, 0x2E, 0xD5, 0x9D, 0xC5, 0x01, 0xF4, 0x58,
+ 0xF5, 0x0C, 0x4E, 0x0C, 0xF6, 0x05, 0x0D, 0xE7, 0x4E, 0xC0,
+ 0xF6, 0x01, 0x0E, 0x10, 0x14, 0x40, 0x84, 0x43, 0xD3, 0x01,
+ 0xE0, 0x03, 0x0E, 0x11, 0xA1, 0x31, 0xD3, 0x08, 0xC3, 0x20,
+ 0xE0, 0x03, 0x07, 0x5A, 0x31, 0x14, 0x81, 0x14, 0xF0, 0x19,
+ 0x0D, 0xF3, 0xD3, 0x00, 0x14, 0x04, 0x84, 0x43, 0xE0, 0x03,
+ 0x0E, 0x11, 0xA1, 0x31, 0xD3, 0x08, 0xC3, 0x20, 0xE0, 0x03,
+ 0x07, 0x5A, 0x31, 0x14, 0x81, 0x14, 0xD2, 0x40, 0xD3, 0x00,
+ 0xE0, 0x03, 0x07, 0x5A, 0xB2, 0x22, 0xF2, 0x01, 0x0E, 0x01,
+ 0xD3, 0x00, 0xE0, 0x03, 0x07, 0x5A, 0xD6, 0x04, 0x2C, 0xCA,
+ 0xF4, 0x01, 0x0D, 0xF7, 0xD6, 0xFD, 0xC6, 0x01, 0xF6, 0x1C,
+ 0xF1, 0x05, 0x0E, 0x07, 0xD1, 0x04, 0xA4, 0x11, 0xD3, 0x0F,
+ 0xC3, 0xA0, 0xE0, 0x03, 0x07, 0x6C, 0xE0, 0x03, 0x07, 0x7B,
+ 0xE0, 0x03, 0x0F, 0xBD, 0xF0, 0x02, 0xD3, 0x00, 0xC3, 0x20,
+ 0xF0, 0x05, 0x0E, 0x1C, 0xD3, 0x5B, 0xC3, 0x0B, 0xD4, 0x00,
+ 0xC4, 0x09, 0x11, 0x41, 0xA4, 0x10, 0x21, 0x14, 0xA5, 0x11,
+ 0xD6, 0xC0, 0xE0, 0x05, 0x0C, 0x08, 0xD4, 0x60, 0x4C, 0xE8,
+ 0x05, 0x54, 0xD2, 0xE3, 0xC2, 0x22, 0xF5, 0x01, 0x0E, 0x2C,
+ 0x33, 0x32, 0x83, 0x34, 0xB5, 0x52, 0xF0, 0x19, 0x0E, 0x25,
+ 0xA0, 0x31, 0xF0, 0x02, 0xD1, 0x04, 0xD0, 0x00, 0xD4, 0xC0,
+ 0xC4, 0x01, 0xF2, 0x48, 0xA4, 0x45, 0xF3, 0x48, 0xA4, 0x43,
+ 0x40, 0x23, 0xB1, 0x12, 0xF1, 0x05, 0x0E, 0x32, 0xF0, 0x02,
+ 0xA2, 0x01, 0xE0, 0x02, 0x0F, 0x8A, 0xE0, 0x01, 0x0C, 0x08,
+ 0xF0, 0x02, 0xD6, 0x0F, 0xC6, 0x70, 0xE0, 0x06, 0x07, 0x5A,
+ 0xD4, 0xFF, 0x20, 0xC4, 0x81, 0x79, 0x81, 0x19, 0x22, 0xFC,
+ 0xD3, 0xBD, 0xC3, 0x01, 0xF5, 0x38, 0x10, 0x05, 0x94, 0x01,
+ 0x20, 0x04, 0xA3, 0x33, 0xF5, 0x38, 0x11, 0x15, 0x94, 0x11,
+ 0x21, 0x14, 0xA3, 0x33, 0xF5, 0x38, 0x12, 0x25, 0x94, 0x21,
+ 0x22, 0x24, 0xD3, 0xB1, 0xC3, 0x01, 0xF3, 0x0C, 0xA3, 0x37,
+ 0xF3, 0x1C, 0xA3, 0x37, 0xF3, 0x2C, 0xA3, 0x37, 0xE0, 0x06,
+ 0x07, 0x02, 0xF3, 0x6C, 0xF0, 0x02, 0xD4, 0xB1, 0xC4, 0x01,
+ 0xD5, 0x03, 0x44, 0x05, 0xF2, 0x48, 0xA4, 0x43, 0xF1, 0x48,
+ 0xA4, 0x43, 0xF3, 0x48, 0x4D, 0xED, 0x45, 0xFE, 0x11, 0x51,
+ 0xF0, 0x02, 0xD3, 0xB1, 0xC3, 0x01, 0xD4, 0x03, 0x43, 0x04,
+ 0xF1, 0x38, 0xA3, 0x33, 0xF2, 0x38, 0x44, 0xDE, 0xF4, 0x05,
+ 0x0E, 0x97, 0xA5, 0x11, 0xE0, 0x05, 0x0C, 0x22, 0xA1, 0x51,
+ 0xA5, 0x21, 0xE0, 0x05, 0x0C, 0x22, 0x16, 0x51, 0xD3, 0xF6,
+ 0xF3, 0x6C, 0xD4, 0x00, 0xC4, 0x03, 0x4C, 0xE8, 0xF4, 0x01,
+ 0x0E, 0x8E, 0xD6, 0x00, 0xC6, 0x03, 0xA5, 0x01, 0xE0, 0x05,
+ 0x0E, 0x3B, 0xA1, 0x61, 0xF1, 0x05, 0x0E, 0xBB, 0xA1, 0x13,
+ 0xF0, 0x19, 0x0E, 0xBB, 0xA3, 0x33, 0xF2, 0x38, 0x44, 0xED,
+ 0xF4, 0x05, 0x0E, 0xB7, 0xA5, 0x11, 0xE0, 0x05, 0x0C, 0x22,
+ 0xA1, 0x51, 0xA5, 0x21, 0xE0, 0x05, 0x0C, 0x22, 0x16, 0x15,
+ 0xD3, 0xF6, 0xF3, 0x6C, 0xD4, 0x00, 0xC4, 0x03, 0x4C, 0xE8,
+ 0xF4, 0x01, 0x0E, 0xAD, 0xD6, 0x00, 0xC6, 0x03, 0xA5, 0x01,
+ 0xE0, 0x05, 0x0E, 0x3B, 0xA1, 0x61, 0xF1, 0x0D, 0xF1, 0x05,
+ 0x0E, 0xBB, 0xB1, 0x12, 0xF0, 0x19, 0x0E, 0xBB, 0xD1, 0x00,
+ 0xD6, 0x00, 0xD3, 0xF6, 0xF3, 0x6C, 0xF0, 0x02, 0xD4, 0xC0,
+ 0xC4, 0x01, 0xD5, 0x03, 0x44, 0x05, 0xF3, 0x48, 0x02, 0x31,
+ 0xA5, 0x20, 0xF5, 0x05, 0x0E, 0xCB, 0xF3, 0x01, 0x0E, 0xDB,
+ 0xD2, 0x00, 0xA4, 0x43, 0xF0, 0x19, 0x0E, 0xD4, 0xA4, 0x43,
+ 0xF5, 0x48, 0x13, 0x35, 0x4D, 0x2D, 0xF5, 0x01, 0x0E, 0xD4,
+ 0xF3, 0x01, 0x0E, 0xDB, 0xF2, 0x48, 0xB4, 0x42, 0xF4, 0x2C,
+ 0xE0, 0x00, 0x0F, 0x91, 0xD0, 0x01, 0xF0, 0x19, 0x0E, 0xDC,
+ 0xD0, 0x00, 0xF0, 0x02, 0xD0, 0xC0, 0xC0, 0x01, 0xF1, 0x08,
+ 0xE0, 0x01, 0x0D, 0x42, 0xA0, 0x07, 0xF1, 0x08, 0xE0, 0x01,
+ 0x0D, 0x5E, 0xA0, 0x07, 0xF1, 0x08, 0xE0, 0x01, 0x0D, 0xAA,
+ 0xA0, 0x07, 0xF1, 0x08, 0xE0, 0x01, 0x0D, 0xB0, 0xE0, 0x01,
+ 0x07, 0xC6, 0xF0, 0x02, 0xE0, 0x00, 0x0E, 0xDD, 0xE0, 0x00,
+ 0x07, 0x7B, 0xF0, 0x02, 0xD0, 0x00, 0xE0, 0x03, 0x0E, 0x41,
+ 0xD3, 0x00, 0xE0, 0x03, 0x0E, 0x66, 0xF4, 0x01, 0x0F, 0x02,
+ 0xE0, 0x03, 0x0E, 0xBC, 0xF3, 0x05, 0x0F, 0x1E, 0xD3, 0x01,
+ 0xE0, 0x03, 0x0E, 0x73, 0xF4, 0x01, 0x0F, 0x0B, 0xE0, 0x03,
+ 0x0E, 0xBC, 0xF3, 0x05, 0x0F, 0x1E, 0xD3, 0x02, 0xE0, 0x03,
+ 0x0E, 0x66, 0xF4, 0x01, 0x0F, 0x14, 0xE0, 0x03, 0x0E, 0xBC,
+ 0xF3, 0x05, 0x0F, 0x1E, 0xD3, 0x03, 0xE0, 0x03, 0x0E, 0x66,
+ 0xF4, 0x01, 0x0F, 0x1D, 0xE0, 0x03, 0x0E, 0xBC, 0xF3, 0x05,
+ 0x0F, 0x1E, 0xD3, 0x00, 0xA0, 0x31, 0xE0, 0x03, 0x0E, 0xF1,
+ 0xF0, 0x02, 0xD0, 0x00, 0xE0, 0x03, 0x0E, 0x41, 0xD3, 0x00,
+ 0xE0, 0x03, 0x0E, 0x66, 0xF4, 0x01, 0x0F, 0x3D, 0xD1, 0xB0,
+ 0xC1, 0x01, 0xF2, 0x18, 0xA6, 0x24, 0xF6, 0x05, 0x0F, 0x34,
+ 0xA2, 0x23, 0xF1, 0x2C, 0xF0, 0x19, 0x0F, 0x6A, 0xD2, 0x00,
+ 0xF1, 0x2C, 0xE0, 0x03, 0x0E, 0xBC, 0xF3, 0x01, 0x0F, 0x41,
+ 0xD3, 0x01, 0xF0, 0x19, 0x0F, 0x67, 0xD1, 0xB0, 0xC1, 0x01,
+ 0xD2, 0x00, 0xF1, 0x2C, 0xD3, 0x01, 0xE0, 0x03, 0x0E, 0x73,
+ 0xF4, 0x01, 0x0F, 0x4F, 0xE0, 0x03, 0x0E, 0xBC, 0xF3, 0x01,
+ 0x0F, 0x4F, 0xD1, 0xF6, 0xF5, 0x18, 0xD3, 0x01, 0xF0, 0x19,
+ 0x0F, 0x67, 0xD3, 0x02, 0xE0, 0x03, 0x0E, 0x66, 0xF4, 0x01,
+ 0x0F, 0x5B, 0xE0, 0x03, 0x0E, 0xBC, 0xF3, 0x01, 0x0F, 0x5B,
+ 0xD3, 0x01, 0xF0, 0x19, 0x0F, 0x67, 0xD3, 0x03, 0xE0, 0x03,
+ 0x0E, 0x73, 0xF4, 0x01, 0x0F, 0x64, 0xE0, 0x03, 0x0E, 0xBC,
+ 0xF3, 0x05, 0x0F, 0x67, 0xD0, 0x00, 0xF0, 0x19, 0x0F, 0x6A,
+ 0xA0, 0x31, 0xE0, 0x03, 0x0E, 0xDD, 0xF0, 0x02, 0xD6, 0xC0,
+ 0xC6, 0x01, 0xD5, 0x03, 0x46, 0x25, 0xF2, 0x68, 0xA6, 0x63,
+ 0xF3, 0x68, 0xA6, 0x63, 0xF4, 0x68, 0x4D, 0xC0, 0xF5, 0x05,
+ 0x0F, 0x87, 0xB5, 0x12, 0xF5, 0x01, 0x0F, 0x81, 0x55, 0xEF,
+ 0xF5, 0x05, 0x0F, 0x87, 0x10, 0x04, 0xA2, 0x23, 0xF0, 0x19,
+ 0x0F, 0x74, 0xF2, 0x01, 0x0F, 0x87, 0x10, 0x04, 0xB2, 0x22,
+ 0xF0, 0x19, 0x0F, 0x74, 0xB6, 0x64, 0xF6, 0x2C, 0xF0, 0x02,
+ 0xD2, 0xC0, 0xC2, 0x01, 0xD1, 0x03, 0x42, 0x01, 0xA2, 0x25,
+ 0xF0, 0x28, 0xF0, 0x02, 0xF0, 0x01, 0x0F, 0x9B, 0xB0, 0x02,
+ 0xF0, 0x01, 0x0F, 0xA7, 0xB0, 0x02, 0xF0, 0x01, 0x0F, 0xB5,
+ 0xF0, 0x19, 0x0F, 0xBC, 0xD5, 0x00, 0xE0, 0x05, 0x0F, 0x8A,
+ 0xD3, 0x00, 0xC3, 0x03, 0x15, 0x53, 0xA6, 0x11, 0xD7, 0x01,
+ 0xE0, 0x05, 0x0F, 0x6B, 0xF0, 0x19, 0x0F, 0xBC, 0xF0, 0x19,
+ 0x0F, 0xBC, 0xD5, 0x01, 0xE0, 0x05, 0x0F, 0x8A, 0xA6, 0x11,
+ 0xD7, 0x03, 0xE0, 0x05, 0x0F, 0x6B, 0xD7, 0x02, 0xE0, 0x05,
+ 0x0F, 0x6B, 0xF0, 0x19, 0x0F, 0xBC, 0xD5, 0x02, 0xE0, 0x05,
+ 0x0F, 0x8A, 0xA6, 0x11, 0xD7, 0x03, 0xE0, 0x05, 0x0F, 0x6B,
+ 0xF0, 0x02, 0xD0, 0x2B, 0xE0, 0x00, 0x07, 0x68, 0xD0, 0x1F,
+ 0xD2, 0x00, 0xD1, 0xFF, 0xE0, 0x00, 0x07, 0xDF, 0xC2, 0x10,
+ 0xF2, 0x09, 0xD2, 0x01, 0xD1, 0xFF, 0xE0, 0x00, 0x07, 0xDF,
+ 0xF0, 0x02, 0xD7, 0x0F, 0xD8, 0x02, 0xC8, 0x02, 0xD9, 0x70,
+ 0xC9, 0xC0, 0xE0, 0x07, 0x07, 0xE6, 0xE0, 0x07, 0x0F, 0xBD,
+ 0xC5, 0xFF, 0xF5, 0x09, 0xD3, 0x10, 0xD0, 0x00, 0xD1, 0x00,
+ 0xD2, 0x00, 0xD7, 0x0F, 0xC7, 0x70, 0xE0, 0x07, 0x07, 0x5A,
+ 0xD5, 0xFF, 0x24, 0xD5, 0x00, 0x04, 0x84, 0x89, 0x84, 0x49,
+ 0x01, 0x14, 0x24, 0xC5, 0x02, 0x24, 0xD5, 0xFF, 0xF5, 0x09,
+ 0xB3, 0x32, 0xF3, 0x05, 0x0F, 0xDB, 0xD6, 0xBD, 0xC6, 0x01,
+ 0x80, 0x09, 0xF6, 0x0C, 0xA6, 0x63, 0x81, 0x19, 0xF6, 0x1C,
+ 0xA6, 0x63, 0x82, 0x29, 0xF6, 0x2C, 0xD7, 0x0F, 0xD8, 0xFE,
+ 0xC8, 0xFE, 0xD9, 0x7F, 0xC9, 0xC0, 0xE0, 0x07, 0x07, 0xE6,
+ 0xF0, 0x02, 0xF0, 0x19, 0x06, 0x68, 0x90, 0x00, 0x88, 0x00,
+ 0x30, 0x00, 0x34, 0x00, 0x24, 0x00, 0x6C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x6A, 0x80, 0x33, 0x00, 0x26, 0x00, 0x00, 0x00, 0x2A,
+ 0x00, 0x00, 0x00, 0x1E, 0x00, 0x22, 0x00, 0x00, 0x5C, 0x16,
+ 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x4F, 0xB2, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xD9, 0x00, 0x34,
+ 0x00, 0x41, 0x00, 0x00, 0xC3, 0xBF, 0x00, 0x44, 0x00, 0x71,
+ 0x00, 0x00, 0xA2, 0xE0, 0x00, 0x74, 0x00, 0xAF, 0x00, 0x00,
+ 0x82, 0x49, 0x00, 0xB2, 0x00, 0xDE, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x11, 0x22, 0x22, 0x33, 0x33, 0x44, 0x44, 0x55, 0x55,
+ 0x66, 0x66, 0x77, 0x77, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x22, 0x22, 0x33, 0x33,
+ 0x44, 0x44, 0x55, 0x55, 0x66, 0x66, 0x77, 0x77, 0x88, 0x88,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1F, 0x00, 0x4D, 0x00, 0xBC, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF,
+ 0x00, 0x00, 0x46, 0xFF, 0x10, 0x86, 0x15, 0xA3, 0x06, 0x7D,
+ 0x00, 0x00, 0x00, 0x00, 0x84, 0x43, 0x80, 0x00, 0x76, 0x17,
+ 0x00, 0x00, 0x67, 0xC0, 0x07, 0x00, 0x03, 0x3D, 0x00, 0xD0,
+ 0xF6, 0x4B, 0x80, 0x01, 0xF1, 0xA5, 0x00, 0x07, 0x01, 0x80,
+ 0x03, 0x12, 0x65, 0x05, 0x86, 0x45, 0x2C, 0xFC, 0x02, 0xF8,
+ 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x7F, 0x78, 0xFE, 0xFE, 0xC0, 0x7F, 0xFA, 0xFF, 0x10, 0xAF,
+ 0x25, 0xAE, 0x02, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x07,
+ 0x9A, 0x00, 0x27, 0x47, 0x00, 0x00, 0x40, 0x00, 0x05, 0x00,
+ 0x3C, 0x75, 0xC0, 0x10, 0x38, 0x67, 0xC6, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x84, 0x03, 0x52, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xC0, 0x0E, 0x7F, 0x7C, 0xFE, 0xFE, 0xC0, 0x7F,
+ 0x00, 0xA0, 0x01, 0x76, 0x01, 0x38, 0x02, 0xC0, 0x02, 0x30,
+ 0x04, 0x20, 0x03, 0x60, 0x06, 0x5C, 0x04, 0xBC, 0x09, 0x60,
+ 0x07, 0x9C, 0x0D, 0x70, 0x19, 0x03, 0xF0, 0x01, 0x19, 0x20,
+ 0x00, 0x01, 0x19, 0x23, 0xF0, 0x02, 0x19, 0x20, 0x00, 0x02,
+ 0x19, 0x23, 0xF0, 0x03, 0x19, 0x20, 0x00, 0x03, 0x19, 0x23,
+ 0xF0, 0x04, 0x19, 0x20, 0x00, 0x04, 0x19, 0x23, 0xF0, 0x05,
+ 0x19, 0x20, 0x00, 0x05, 0x19, 0x23, 0xF0, 0x06, 0x19, 0x20,
+ 0x00, 0x06, 0x50, 0x0C, 0x4C, 0x14, 0x5C, 0x0C, 0x5C, 0x14,
+ 0x70, 0x0C, 0x6C, 0x14, 0x50, 0x0C, 0x4C, 0x14, 0x00, 0x0E,
+ 0x00, 0x0E, 0x00, 0x10, 0x00, 0x12, 0x00, 0x2E, 0x00, 0xE0,
+ 0x01, 0x20, 0x01, 0x60, 0x01, 0x60, 0xF7, 0x00, 0xFF, 0x90,
+ 0xFF, 0x70, 0xFF, 0x50, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00,
+ 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0xA0,
+ 0x00, 0x00, 0x0D, 0xC8, 0x03, 0x52, 0x1D, 0xA8, 0x89, 0x03,
+ 0x00, 0xCC, 0x00, 0x4D, 0x00, 0x1A, 0x00, 0x0D, 0x00, 0x00,
+ 0x00, 0x40, 0x00, 0x01, 0x00, 0x06, 0x00, 0x44, 0xC0, 0xC7,
+ 0xA0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0F,
+ 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0D,
+ 0x02, 0x71, 0x00, 0x00, 0x18, 0x15, 0x0E, 0x16, 0x07, 0xC1,
+ 0x04, 0x18, 0x02, 0x1B, 0x01, 0x12, 0x00, 0x8A, 0x00, 0x45,
+ 0x00, 0x23, 0x00, 0x11, 0x00, 0x09, 0x00, 0x04, 0x00, 0x02,
+ 0x0D, 0x33, 0x0B, 0x85, 0x0A, 0x8F, 0x0D, 0x33, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x3A, 0x00, 0x00,
+ 0x00, 0x32, 0x00, 0x50, 0x00, 0x00, 0x00, 0x46, 0x00, 0xAA,
+ 0x00, 0x00, 0x03, 0x20, 0x03, 0xAC, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x38,
+ 0x00, 0xFF, 0x00, 0x26, 0x00, 0x02, 0x00, 0x03, 0x03, 0x00,
+ 0x00, 0x20, 0x00, 0x2B, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x30,
+ 0xFF, 0xD0, 0x00, 0x60, 0xFF, 0xA0, 0x00, 0x90, 0xFF, 0x70,
+ 0x00, 0xA0, 0x00, 0x02, 0x18, 0x20, 0x24, 0x20, 0x30, 0x20,
+ 0x2A, 0x0E, 0x32, 0x12, 0x3A, 0x16, 0x28, 0x00, 0x1E, 0x00,
+ 0x14, 0x00, 0x80, 0x00, 0xCC, 0x35, 0x2B, 0x8F, 0x8F, 0x10,
+ 0xCC, 0x35, 0x2B, 0x8F, 0x8F, 0x10, 0xCC, 0x30, 0x2B, 0x8F,
+ 0x8F, 0x10, 0xCC, 0x30, 0x2B, 0x8F, 0x8F, 0x10, 0x00, 0x07,
+ 0x00, 0x04, 0x00, 0x0A, 0x00, 0x09, 0x00, 0x0D, 0x00, 0x0B,
+ 0x00, 0x01, 0x11, 0x70, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 8236 BYTES */
+};
+
+// ************************************************************
+// *** INI FILE
+// *** This initial file was used for all TV Standards
+// ************************************************************
+
+unsigned char XC4000_INIT_SEQUENCE[130] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x10, 0x41,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x00, 0x0B, 0x80, 0xF9, 0xD7, 0x3E, 0x75, 0xC1, 0x8A, 0xE4,
+ 0x02, 0x00,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x05, 0x0A, 0xAC, 0xAA, 0x53, 0x4A, 0x4A,
+ 0x00, 0x0C, /* Length = 12 bytes */
+ 0x00, 0x06, 0x00, 0x0A, 0x6D, 0x8C, 0xF2, 0xD8, 0xCF, 0x2A,
+ 0x39, 0x04,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0A, 0x00, 0x0E, 0x56, 0x8A,
+ 0x00, 0x11, /* Length = 17 bytes */
+ 0x00, 0x09, 0x01, 0x6D, 0x18, 0xFA, 0x07, 0x81, 0xF2, 0x18,
+ 0x64, 0x3C, 0xFA, 0xF7, 0xE1, 0x0C, 0x2C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x0E, 0x15,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x14, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x01, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x06,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x2D, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x01, /* WAIT 001[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x64, /* WAIT 100[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 130 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_MN_NTSC_PAL_BTSC_SEQUENCE[196] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x0D, 0x86, 0x51, 0xD2, 0x35, 0xA4, 0x92, 0xA5,
+ 0xB5, 0x25, 0x65,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x08, 0xCC, 0x35,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x00,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x05,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x25, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x35, 0x09,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0x8F, 0x8F, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x00,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x80, 0xA0,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 196 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_MN_NTSC_PAL_BTSC_NOGD_SEQUENCE[196] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x08, 0xCC, 0x35,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x00,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x05,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x25, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x35, 0x09,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0x8F, 0x8F, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x00,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x80, 0x20,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 196 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_MN_NTSC_PAL_A2_IF_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x0D, 0x86, 0x51, 0xD2, 0x35, 0xA4, 0x92, 0xA5,
+ 0xB5, 0x25, 0x65,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x00,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0xAF, 0xAF, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x80, 0xA0,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_MN_NTSC_PAL_A2_IF_NOGD_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x00,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0xAF, 0xAF, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x80, 0x20,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_MN_NTSC_PAL_MTS_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x0D, 0x86, 0x51, 0xD2, 0x35, 0xA4, 0x92, 0xA5,
+ 0xB5, 0x25, 0x65,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x40, 0xF2, 0xAA, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x00,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x02,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0xAF, 0xAF, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x80, 0xA0,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_MN_NTSC_PAL_A2_MONO_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x0D, 0x86, 0x51, 0xD2, 0x35, 0xA4, 0x92, 0xA5,
+ 0xB5, 0x25, 0x65,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x00,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x02,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0xAF, 0xAF, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x80, 0xA0,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_MN_NTSC_PAL_A2_MONO_NOGD_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x00,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x02,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0xAF, 0xAF, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x80, 0x20,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_L_SECAM_NICAM_SEQUENCE[203] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x10, 0x59,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x1B, 0x06, 0x30, 0x10, 0x0C, 0x08, 0x0D, 0x8D,
+ 0x09, 0x15, 0x2F,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x67, 0x65, 0xF4, 0xAA, 0x40, 0x40,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x21, 0x12, 0x9B, 0x3C,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x08, 0xCC, 0x30,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x28, 0xBF, 0xBF, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x80, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x00, 0x09,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 203 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_L_SECAM_AM_SEQUENCE[194] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x10, 0x49,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x1B, 0x06, 0x30, 0x10, 0x0C, 0x08, 0x0D, 0x8D,
+ 0x09, 0x15, 0x2F,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x67, 0x65, 0xF4, 0xAA, 0x40, 0x40,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x02,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x03,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x41,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x82, 0x66,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x44,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x35, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x08, 0xCC, 0x30,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x28, 0xBF, 0xBF, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0xA1, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x00, 0x09,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 194 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_IL_SECAM_NICAM_SEQUENCE[195] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x10, 0x49,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x1B, 0x06, 0x30, 0x10, 0x0C, 0x08, 0x0D, 0x8D,
+ 0x09, 0x15, 0x2F,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x67, 0x65, 0xF4, 0xAA, 0x40, 0x40,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x09,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x08, 0xCC, 0x30,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x28, 0xBF, 0xBF, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x80, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x40, 0x09,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 195 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_IL_SECAM_AM_SEQUENCE[194] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x10, 0x49,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x1B, 0x06, 0x30, 0x10, 0x0C, 0x08, 0x0D, 0x8D,
+ 0x09, 0x15, 0x2F,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x67, 0x65, 0xF4, 0xAA, 0x40, 0x40,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x02,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x03,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x41,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x82, 0x66,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x44,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x35, 0x31,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x08, 0xCC, 0x30,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x28, 0xBF, 0xBF, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0xA1, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x40, 0x09,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 194 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_FM_INPUT1_SEQUENCE[189] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x1B, 0x06, 0x30, 0x10, 0x0C, 0x08, 0x0D, 0x8D,
+ 0x09, 0x15, 0x2F,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x40, 0xF2, 0xAA, 0xE9, 0xE9,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x00,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x21, 0x12, 0x9B, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x02,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0xAF, 0xAF, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x05, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x24, 0x30,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x90, 0x00,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 189 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_FM_INPUT2_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x1B, 0x06, 0x30, 0x10, 0x0C, 0x08, 0x0D, 0x8D,
+ 0x09, 0x15, 0x2F,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x40, 0xF2, 0xAA, 0xE9, 0xE9,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x00,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x21, 0x12, 0x9B, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x02,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x09, 0x08, 0x04, 0x42, 0x42, 0x01, 0x10,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0xAF, 0xAF, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x05, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x98, 0x00,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_ATSC_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x1B, 0x06, 0x30, 0x10, 0x0C, 0x08, 0x0D, 0x8D,
+ 0x09, 0x15, 0x2F,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x40, 0xF2, 0xAA, 0xE9, 0xE9,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x02,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x21, 0x12, 0x9B, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0xAF, 0xAF, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x05, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0xC0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x80, 0x02,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_DVBT_8_SEQUENCE[174] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x1B, 0x06, 0x30, 0x10, 0x0C, 0x08, 0x0D, 0x8D,
+ 0x09, 0x15, 0x2F,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x03,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x21, 0x12, 0x9B, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0xAF, 0xAF, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x05, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0xC0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x80, 0x0B,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 174 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_DVBT_78_SEQUENCE[153] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x03,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x21, 0x12, 0x9B, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x05, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0xC0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x80, 0x1B,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 153 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_DVBT_7_SEQUENCE[174] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x1B, 0x06, 0x30, 0x10, 0x0C, 0x08, 0x0D, 0x8D,
+ 0x09, 0x15, 0x2F,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x03,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x21, 0x12, 0x9B, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x06,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0xAF, 0xAF, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x05, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0xC0,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x80, 0x07,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 174 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_B_G_PAL_NICAM_A_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x01, 0xB6, 0x15, 0x16, 0xB1, 0xA6, 0xD2, 0xA9,
+ 0x12, 0x41, 0x66,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x01,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0x8F, 0x8F, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x81, 0x59,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_B_G_PAL_NICAM_A_MONO_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x01, 0xB6, 0x15, 0x16, 0xB1, 0xA6, 0xD2, 0xA9,
+ 0x12, 0x41, 0x66,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x02,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0x8F, 0x8F, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x81, 0x59,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_B_G_PAL_NICAM_B_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x2D, 0x09, 0x6D, 0xB5, 0xA6, 0xD2, 0x59,
+ 0x16, 0x41, 0x65,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x01,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0x8F, 0x8F, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x04,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x81, 0xD9,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_B_G_PAL_NICAM_B_MONO_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x2D, 0x09, 0x6D, 0xB5, 0xA6, 0xD2, 0x59,
+ 0x16, 0x41, 0x65,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x01,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x41,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0x8F, 0x8F, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x01, 0x34,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x81, 0xD9,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_B_G_PAL_A2_B_SEQUENCE[189] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x17, 0x02,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x2D, 0x09, 0x6D, 0xB5, 0xA6, 0xD2, 0x59,
+ 0x16, 0x41, 0x65,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0x8F, 0x8F, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x81, 0xD9,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 189 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_B_G_PAL_A2_B_MONO_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x2D, 0x09, 0x6D, 0xB5, 0xA6, 0xD2, 0x59,
+ 0x16, 0x41, 0x65,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x02,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0x8F, 0x8F, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x81, 0xD9,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_B_G_PAL_A2_A_SEQUENCE[199] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x01, 0xB6, 0x15, 0x16, 0xB1, 0xA6, 0xD2, 0xA9,
+ 0x12, 0x41, 0x66,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0x8F, 0x8F, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x81, 0x59,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 199 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_B_G_PAL_A2_A_MONO_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x01, 0xB6, 0x15, 0x16, 0xB1, 0xA6, 0xD2, 0xA9,
+ 0x12, 0x41, 0x66,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x02,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0x8F, 0x8F, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x81, 0x59,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_I_PAL_NICAM_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x01,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0x8F, 0x8F, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x80, 0x49,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_I_PAL_NICAM_MONO_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x29,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x40, 0xF2, 0xAA, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x02,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x09, 0x08, 0x04, 0x42, 0x42, 0x01, 0x10,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0xAF, 0xAF, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x80, 0x49,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_D_K_PAL_NICAM_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x01,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0x8F, 0x8F, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x80,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x80, 0x49,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_D_K_PAL_NICAM_MONO_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x29,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x40, 0xF2, 0xAA, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x02,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x09, 0x08, 0x04, 0x42, 0x42, 0x01, 0x10,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0xAF, 0xAF, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x80, 0x49,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_D_K_SECAM_A2_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0x8F, 0x8F, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x80, 0x49,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_D_K_SECAM_A2_MONO_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x14, 0x08, 0x00, 0x00, 0x0C, 0x08, 0xDA, 0xB4,
+ 0xDA, 0x0B, 0x2D,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x02,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x40,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0x8F, 0x8F, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x78,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x80, 0x49,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+unsigned char XC4000_D_K_PAL_FM_ONLY_SEQUENCE[184] = {
+
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x29, 0x07,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x29,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x0B, /* Length = 11 bytes */
+ 0x00, 0x18, 0x00, 0x00, 0x16, 0x8A, 0x40, 0x00, 0x00, 0x00,
+ 0x20,
+ 0x00, 0x0D, /* Length = 13 bytes */
+ 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x08, /* Length = 8 bytes */
+ 0x00, 0x0C, 0x57, 0x66, 0xF4, 0x66, 0xD4, 0xD4,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x16, 0x01,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x0D, 0x28, 0xD6, 0x88, 0x3C,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1E, 0x02,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x1F, 0x04,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x20, 0x29,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x21, 0x06,
+ 0x00, 0x0A, /* Length = 10 bytes */
+ 0x00, 0x23, 0x00, 0x08, 0x09, 0x68, 0x9A, 0x02, 0x5A, 0x26,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x27, 0x00,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x35, 0x00, 0x08,
+ 0x00, 0x06, /* Length = 6 bytes */
+ 0x00, 0x3A, 0x2B, 0x8F, 0x8F, 0x10,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x3B, 0x07, 0xFF,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x2E,
+ 0x00, 0x03, /* Length = 3 bytes */
+ 0x00, 0x02, 0x1F,
+ 0x00, 0x05, /* Length = 5 bytes */
+ 0x00, 0x00, 0x00, 0x00, 0x88,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x02, 0x00, 0x08,
+ 0x00, 0x04, /* Length = 4 bytes */
+ 0x00, 0x01, 0x80, 0x49,
+ 0x80, 0x0A, /* WAIT 010[ms] */
+ 0xFF, 0xFF /* END OF SEQUENCE. TOTAL MEMORY REQ'D = 184 BYTES */
+};
+
+// ************************************************************
+// *** Standard FILES
+// *** One file was used for one TV Standards
+// ************************************************************
+
+
+#endif
+
diff --git a/api/xc4000_scodes.h b/api/xc4000_scodes.h
new file mode 100644
index 0000000..f2638de
--- /dev/null
+++ b/api/xc4000_scodes.h
@@ -0,0 +1,906 @@
+//
+// Automatically generated C header file for
+// control of the XC4000 via the i2c interface.
+//
+// Filename : xc4000_scodes.h
+// Generated : 05/17/2006 4:41:24 PM
+//
+// (c) 2007, Xceive Corporation
+//
+
+#include "xc4000_control.h"
+
+#ifndef __XC4000_SCODES_H
+#define __XC4000_SCODES_H
+
+XC4000_SCODE_TABLE XC4000_scode_table_5400000 = {
+ { 0x00, 0x1C, 0x1A, 0x83, 0x25, 0xB4, 0x03, 0x6E, 0x01, 0x96, 0x86, 0xA8, 0x1C },
+ { 0x00, 0x1C, 0x1E, 0x43, 0xBF, 0xE0, 0x02, 0xDB, 0xC1, 0xAA, 0x06, 0x9A, 0x24 },
+ { 0x00, 0x1C, 0x1F, 0x13, 0x87, 0x18, 0x02, 0x93, 0x91, 0x44, 0x86, 0x96, 0x8C },
+ { 0x00, 0x1C, 0x0B, 0x23, 0x76, 0x18, 0x02, 0x9B, 0x6D, 0x54, 0x46, 0x9A, 0x44 },
+ { 0x00, 0x1C, 0x19, 0xD3, 0x00, 0xD8, 0x02, 0x9B, 0x91, 0x42, 0x86, 0xAA, 0x96 },
+ { 0x00, 0x1C, 0x15, 0x32, 0xDB, 0x94, 0x02, 0x49, 0x25, 0x69, 0x86, 0x96, 0x5B },
+ { 0x00, 0x1C, 0x1C, 0xF2, 0xE4, 0xB8, 0x02, 0x49, 0x25, 0x65, 0x86, 0x9A, 0x95 },
+ { 0x00, 0x1C, 0x1D, 0xC2, 0xE4, 0xB4, 0x02, 0x5C, 0xA1, 0x5A, 0x46, 0x9A, 0x14 },
+ { 0x00, 0x1C, 0x1A, 0x83, 0x25, 0xB4, 0x03, 0x6E, 0x01, 0x96, 0x86, 0xA8, 0x1C },
+ { 0x00, 0x1C, 0x0D, 0x02, 0xB7, 0x18, 0x02, 0x4A, 0x49, 0xA8, 0x46, 0x65, 0x5A },
+ { 0x00, 0x1C, 0x0B, 0xA2, 0x9C, 0xE0, 0x02, 0x49, 0x25, 0x9A, 0x06, 0x6A, 0x9D },
+ { 0x00, 0x1C, 0x14, 0xD2, 0x94, 0xE0, 0x02, 0x9B, 0x6D, 0x99, 0x06, 0x5A, 0x94 },
+ { 0x00, 0x1C, 0x01, 0x72, 0xDC, 0xB8, 0x02, 0x92, 0x49, 0xA9, 0x86, 0x65, 0xA3 },
+ { 0x00, 0x1C, 0x0A, 0xA2, 0xED, 0x18, 0x02, 0xE4, 0x91, 0xA4, 0x86, 0x55, 0x59 },
+ { 0x00, 0x1C, 0x14, 0x92, 0xDB, 0x6D, 0x83, 0x25, 0x01, 0x99, 0xA6, 0x54, 0x21 },
+ { 0x00, 0x1C, 0x09, 0x93, 0x24, 0x90, 0x03, 0x6D, 0xA1, 0xA5, 0x46, 0x6A, 0x14 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_4760000 = {
+ { 0x00, 0x1C, 0x1C, 0xF2, 0x4D, 0xE0, 0x00, 0x0B, 0x61, 0x66, 0x06, 0x69, 0x13 },
+ { 0x00, 0x1C, 0x09, 0x62, 0x49, 0x29, 0x00, 0x00, 0x41, 0x66, 0xA6, 0x66, 0x23 },
+ { 0x00, 0x1C, 0x09, 0xD2, 0x52, 0x92, 0x00, 0x02, 0x49, 0x6A, 0x96, 0x69, 0xA4 },
+ { 0x00, 0x1C, 0x03, 0x72, 0x54, 0x92, 0x00, 0x00, 0x09, 0x65, 0x66, 0x6A, 0x95 },
+
+ { 0x00, 0x1C, 0x0C, 0x72, 0x5C, 0x92, 0x00, 0x49, 0x25, 0x6A, 0x56, 0x59, 0x5A },
+ { 0x00, 0x1C, 0x1B, 0xD2, 0x65, 0x00, 0x00, 0x52, 0x81, 0x68, 0x06, 0x5A, 0x13 },
+ { 0x00, 0x1C, 0x0C, 0x82, 0x70, 0xD8, 0x00, 0x5B, 0x71, 0x52, 0x46, 0x65, 0x8B },
+ { 0x00, 0x1C, 0x06, 0x32, 0x5B, 0x90, 0x00, 0x52, 0x4D, 0x5A, 0x86, 0x6A, 0x5C },
+
+ { 0x00, 0x1C, 0x1C, 0xF2, 0x4D, 0xE0, 0x00, 0x0B, 0x61, 0x66, 0x06, 0x69, 0x13 },
+ { 0x00, 0x1C, 0x07, 0x92, 0x92, 0x48, 0x02, 0x49, 0x49, 0x65, 0x86, 0xA9, 0x95 },
+ { 0x00, 0x1C, 0x1C, 0x52, 0xA4, 0x92, 0x00, 0x01, 0x49, 0x69, 0x56, 0x56, 0x52 },
+ { 0x00, 0x1C, 0x13, 0x72, 0xA8, 0x18, 0x00, 0x00, 0x01, 0x50, 0x86, 0x59, 0x4A },
+ { 0x00, 0x1C, 0x19, 0xF2, 0x9C, 0x18, 0x00, 0x0B, 0xA1, 0x54, 0x86, 0x56, 0x0A },
+ { 0x00, 0x1C, 0x11, 0x72, 0x93, 0x78, 0x00, 0x13, 0x91, 0x59, 0x46, 0x55, 0x49 },
+ { 0x00, 0x1C, 0x03, 0x52, 0x92, 0x54, 0x00, 0x00, 0xC1, 0x55, 0x86, 0x42, 0x0A },
+ { 0x00, 0x1C, 0x18, 0x52, 0x49, 0x2E, 0x00, 0x13, 0x81, 0x69, 0x96, 0x66, 0x1B }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_6580000 = {
+ { 0x00, 0x1C, 0x1B, 0xE4, 0xDB, 0x92, 0x06, 0xE8, 0xC1, 0x66, 0x96, 0x92, 0x1B },
+ { 0x00, 0x1C, 0x03, 0x14, 0xE5, 0xB8, 0x06, 0xDC, 0x91, 0x5A, 0x86, 0xAA, 0x9E },
+ { 0x00, 0x1C, 0x0E, 0x44, 0x92, 0x4D, 0x84, 0x92, 0x51, 0x69, 0x66, 0x5A, 0x9C },
+ { 0x00, 0x1C, 0x0A, 0xE4, 0x9B, 0x94, 0x04, 0x80, 0xC1, 0x6A, 0x46, 0x41, 0x19 },
+ { 0x00, 0x1C, 0x1E, 0xD4, 0xB6, 0x18, 0x04, 0x92, 0xA1, 0x64, 0x86, 0x66, 0x13 },
+ { 0x00, 0x1C, 0x13, 0x54, 0x98, 0xD8, 0x04, 0xDE, 0x01, 0x52, 0x46, 0x54, 0x09 },
+ { 0x00, 0x1C, 0x03, 0xD4, 0x95, 0xD8, 0x04, 0xE5, 0xA1, 0x56, 0x86, 0x65, 0x12 },
+ { 0x00, 0x1C, 0x0A, 0x02, 0x49, 0x54, 0x05, 0x38, 0xC1, 0xA9, 0x86, 0x51, 0x21 },
+ { 0x00, 0x1C, 0x1B, 0xE4, 0xDB, 0x92, 0x06, 0xE8, 0xC1, 0x66, 0x96, 0x92, 0x1B },
+ { 0x00, 0x1C, 0x0B, 0xD4, 0x93, 0x74, 0x06, 0xDB, 0x6D, 0x96, 0x86, 0x56, 0x9B },
+ { 0x00, 0x1C, 0x09, 0xD4, 0xE7, 0x00, 0x06, 0xC6, 0x01, 0xA4, 0x06, 0x44, 0x11 },
+ { 0x00, 0x1C, 0x1C, 0x54, 0xDC, 0xB8, 0x06, 0xDB, 0x91, 0x99, 0x86, 0x69, 0x5B },
+ { 0x00, 0x1C, 0x1C, 0xF5, 0x28, 0x18, 0x07, 0x20, 0xC1, 0x90, 0x46, 0x62, 0x0B },
+ { 0x00, 0x1C, 0x01, 0x35, 0xBF, 0x00, 0x07, 0xB6, 0xC1, 0xA8, 0x06, 0x6A, 0x1C },
+ { 0x00, 0x1C, 0x0E, 0x15, 0x6D, 0xB8, 0x07, 0x76, 0x01, 0x66, 0x86, 0xA4, 0x1B },
+ { 0x00, 0x1C, 0x0A, 0x35, 0x38, 0xD8, 0x07, 0x25, 0xA1, 0x52, 0x86, 0xA6, 0x14 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_4500000 = {
+ { 0x00, 0x1C, 0x09, 0x02, 0x5B, 0x6C, 0x00, 0x4B, 0x81, 0x56, 0x46, 0x69, 0x0B },
+ { 0x00, 0x1C, 0x02, 0xB2, 0x54, 0xE0, 0x00, 0x92, 0x6D, 0x59, 0x06, 0x59, 0x8B },
+ { 0x00, 0x1C, 0x1D, 0xC2, 0x52, 0x92, 0x00, 0xA4, 0x91, 0x56, 0x96, 0x66, 0x94 },
+ { 0x00, 0x1C, 0x19, 0x42, 0x49, 0x54, 0x00, 0xDB, 0x6D, 0x59, 0x46, 0x55, 0x49 },
+ { 0x00, 0x1C, 0x0F, 0x72, 0x4B, 0x6E, 0x00, 0xE4, 0x81, 0x5A, 0x56, 0x6A, 0x14 },
+ { 0x00, 0x1C, 0x1D, 0xE2, 0x4B, 0xB4, 0x01, 0x24, 0x91, 0x55, 0x86, 0x69, 0x4B },
+ { 0x00, 0x1C, 0x18, 0xD2, 0x49, 0x54, 0x01, 0x6F, 0x01, 0x56, 0x46, 0x98, 0x0B },
+ { 0x00, 0x1C, 0x1B, 0xA0, 0x00, 0x09, 0x00, 0xDC, 0xA1, 0xAA, 0x96, 0x96, 0x2B },
+ { 0x00, 0x1C, 0x09, 0x02, 0x5B, 0x6C, 0x00, 0x4B, 0x81, 0x56, 0x46, 0x69, 0x0B },
+ { 0x00, 0x1C, 0x1A, 0x02, 0x4B, 0x00, 0x00, 0x09, 0x31, 0x64, 0x06, 0x69, 0x8C },
+ { 0x00, 0x1C, 0x1E, 0xB2, 0x49, 0x6E, 0x00, 0x01, 0x49, 0x65, 0x96, 0x66, 0x94 },
+ { 0x00, 0x1C, 0x0C, 0xD2, 0x53, 0x18, 0x00, 0x01, 0x29, 0x68, 0x86, 0x6A, 0x9D },
+ { 0x00, 0x1C, 0x0B, 0x22, 0x52, 0x6E, 0x00, 0x4A, 0x61, 0x66, 0x66, 0x55, 0x19 },
+ { 0x00, 0x1C, 0x1A, 0x12, 0x5C, 0x00, 0x00, 0x52, 0x91, 0x64, 0x06, 0x56, 0x8B },
+ { 0x00, 0x1C, 0x00, 0x72, 0x6D, 0xD8, 0x00, 0x6D, 0xA1, 0x66, 0x46, 0x56, 0x12 },
+ { 0x00, 0x1C, 0x09, 0xE2, 0x65, 0xD8, 0x00, 0x54, 0x91, 0x56, 0x86, 0x69, 0x94 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_4600000 = {
+ { 0x00, 0x1C, 0x1A, 0x82, 0x5B, 0xD8, 0x00, 0x54, 0x91, 0x66, 0x46, 0x56, 0x93 },
+ { 0x00, 0x1C, 0x0E, 0x42, 0x46, 0x00, 0x00, 0x65, 0xA1, 0x44, 0x06, 0x65, 0x02 },
+ { 0x00, 0x1C, 0x1D, 0x32, 0x64, 0xD8, 0x00, 0x53, 0x71, 0x56, 0x86, 0x6A, 0x54 },
+ { 0x00, 0x1C, 0x09, 0x02, 0x5B, 0x6C, 0x00, 0x4B, 0x81, 0x56, 0x46, 0x69, 0x0B },
+ { 0x00, 0x1C, 0x02, 0xB2, 0x54, 0xE0, 0x00, 0x92, 0x6D, 0x59, 0x06, 0x59, 0x8B },
+ { 0x00, 0x1C, 0x1D, 0xC2, 0x52, 0x92, 0x00, 0xA4, 0x91, 0x56, 0x96, 0x66, 0x94 },
+ { 0x00, 0x1C, 0x19, 0x42, 0x49, 0x54, 0x00, 0xDB, 0x6D, 0x59, 0x46, 0x55, 0x49 },
+ { 0x00, 0x1C, 0x0F, 0x72, 0x4B, 0x6E, 0x00, 0xE4, 0x81, 0x5A, 0x56, 0x6A, 0x14 },
+ { 0x00, 0x1C, 0x1A, 0x82, 0x5B, 0xD8, 0x00, 0x54, 0x91, 0x66, 0x46, 0x56, 0x93 },
+ { 0x00, 0x1C, 0x1F, 0x52, 0x94, 0xD8, 0x00, 0x12, 0x6D, 0x56, 0x46, 0x5A, 0x8C },
+ { 0x00, 0x1C, 0x0E, 0xC2, 0x49, 0x78, 0x00, 0x1C, 0x81, 0x6A, 0x86, 0x66, 0x23 },
+ { 0x00, 0x1C, 0x0D, 0x22, 0x4A, 0x50, 0x00, 0x09, 0x61, 0x69, 0x46, 0x65, 0x12 },
+ { 0x00, 0x1C, 0x01, 0xB2, 0x4A, 0x78, 0x00, 0x09, 0x25, 0x66, 0x86, 0x6A, 0x9D },
+ { 0x00, 0x1C, 0x11, 0x12, 0x49, 0x4D, 0x80, 0x02, 0x6D, 0x65, 0x66, 0x65, 0x52 },
+ { 0x00, 0x1C, 0x18, 0xC2, 0x55, 0xA0, 0x00, 0x00, 0x25, 0x6A, 0x06, 0x69, 0x9C },
+ { 0x00, 0x1C, 0x0F, 0xE2, 0x52, 0x72, 0x00, 0x4B, 0x01, 0x65, 0xA6, 0x54, 0x19 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_4320000 = {
+ { 0x00, 0x1C, 0x1B, 0x22, 0x4A, 0x49, 0x00, 0x38, 0xC1, 0x55, 0x66, 0x12, 0x0A },
+ { 0x00, 0x1C, 0x0C, 0x52, 0x49, 0x29, 0x81, 0x3F, 0x01, 0x55, 0xA6, 0x98, 0x13 },
+ { 0x00, 0x1C, 0x0A, 0xF0, 0x00, 0x4E, 0x00, 0xEE, 0xC1, 0xAA, 0x96, 0xA9, 0x2C },
+ { 0x00, 0x1C, 0x1D, 0x90, 0x00, 0x05, 0x00, 0x92, 0x49, 0xA9, 0xA6, 0x99, 0x6B },
+ { 0x00, 0x1C, 0x1D, 0x20, 0x01, 0x90, 0x00, 0xA4, 0xA1, 0xAA, 0x46, 0xA5, 0x23 },
+ { 0x00, 0x1C, 0x1F, 0x90, 0x02, 0x92, 0x00, 0x92, 0x49, 0xA9, 0x96, 0xA9, 0xA5 },
+ { 0x00, 0x1C, 0x15, 0x90, 0x05, 0xB4, 0x00, 0x4A, 0xC1, 0xA5, 0x46, 0x9A, 0x14 },
+ { 0x00, 0x1C, 0x1C, 0xC0, 0x02, 0x52, 0x00, 0x52, 0x71, 0xA5, 0x96, 0x9A, 0x5C },
+ { 0x00, 0x1C, 0x1B, 0x22, 0x4A, 0x49, 0x00, 0x38, 0xC1, 0x55, 0x66, 0x12, 0x0A },
+ { 0x00, 0x1C, 0x0E, 0x42, 0x46, 0x00, 0x00, 0x65, 0xA1, 0x44, 0x06, 0x65, 0x02 },
+ { 0x00, 0x1C, 0x09, 0x72, 0x5B, 0x98, 0x00, 0x49, 0x49, 0x59, 0x86, 0x65, 0x52 },
+ { 0x00, 0x1C, 0x0C, 0x22, 0x52, 0xE0, 0x00, 0x49, 0x25, 0x5A, 0x06, 0x6A, 0x54 },
+ { 0x00, 0x1C, 0x0D, 0x82, 0x55, 0xB4, 0x00, 0x9C, 0xC1, 0x55, 0x46, 0x5A, 0x03 },
+ { 0x00, 0x1C, 0x0A, 0x62, 0x49, 0x29, 0x00, 0x9B, 0x71, 0x5A, 0x96, 0x6A, 0x5C },
+ { 0x00, 0x1C, 0x0E, 0x82, 0x4A, 0x6E, 0x00, 0xED, 0xC1, 0x5A, 0x96, 0x55, 0x19 },
+ { 0x1, 0x1B, 0x92, 0x4D, 0x18, 0x01, 0x36, 0xC1, 0x54, 0x46, 0x59, 0x02 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_6240000 = {
+ { 0x00, 0x1C, 0x1B, 0x22, 0x4A, 0x4C, 0x05, 0x2F, 0x01, 0xAA, 0x86, 0x68, 0x2B },
+ { 0x00, 0x1C, 0x01, 0xF2, 0x4A, 0x6E, 0x04, 0x30, 0xC1, 0xA6, 0x56, 0x11, 0x19 },
+ { 0x00, 0x1C, 0x0C, 0x52, 0x52, 0x49, 0x85, 0x24, 0x81, 0xA9, 0x96, 0x99, 0x23 },
+ { 0x00, 0x1C, 0x0D, 0x02, 0x52, 0x49, 0x84, 0xDB, 0x81, 0xA5, 0x66, 0x99, 0x1B },
+ { 0x00, 0x1C, 0x02, 0x52, 0x6E, 0xC0, 0x04, 0xDD, 0xA1, 0xA9, 0x06, 0xA5, 0x1B },
+ { 0x00, 0x1C, 0x06, 0x52, 0x66, 0xC0, 0x04, 0x93, 0x81, 0x96, 0x06, 0x99, 0x13 },
+ { 0x00, 0x1C, 0x14, 0x32, 0x53, 0x6D, 0x84, 0xB0, 0xC1, 0x9A, 0x96, 0xA2, 0x24 },
+ { 0x00, 0x1C, 0x01, 0xB2, 0x49, 0x25, 0x04, 0x94, 0x01, 0x9A, 0x96, 0xA4, 0x23 },
+ { 0x00, 0x1C, 0x1B, 0x22, 0x4A, 0x4C, 0x05, 0x2F, 0x01, 0xAA, 0x86, 0x68, 0x2B },
+ { 0x00, 0x1C, 0x11, 0x14, 0xDE, 0x18, 0x06, 0xE5, 0xA1, 0x64, 0x86, 0x99, 0x13 },
+ { 0x00, 0x1C, 0x14, 0x74, 0xED, 0xE0, 0x06, 0xDE, 0x01, 0x56, 0x06, 0xA8, 0x0C },
+ { 0x00, 0x1C, 0x12, 0x54, 0x92, 0xB4, 0x04, 0x92, 0x71, 0x6A, 0x86, 0x59, 0xA3 },
+ { 0x00, 0x1C, 0x0A, 0xE4, 0x9B, 0x94, 0x04, 0x80, 0xC1, 0x6A, 0x46, 0x41, 0x19 },
+ { 0x00, 0x1C, 0x1E, 0xD4, 0xB6, 0x18, 0x04, 0x92, 0xA1, 0x64, 0x86, 0x66, 0x13 },
+ { 0x00, 0x1C, 0x19, 0x84, 0x9C, 0xB4, 0x04, 0xDB, 0x6D, 0x55, 0x46, 0x59, 0x42 },
+ { 0x00, 0x1C, 0x18, 0xE4, 0x93, 0x92, 0x04, 0xDB, 0xA1, 0x55, 0x96, 0x65, 0x0A }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_5640000 = {
+ { 0x00, 0x1C, 0x1B, 0xD2, 0x9B, 0x92, 0x02, 0x96, 0xC1, 0x96, 0x56, 0x59, 0x12 },
+ { 0x00, 0x1C, 0x15, 0x32, 0x93, 0x6E, 0x02, 0xA8, 0xC1, 0x95, 0x66, 0x61, 0x12 },
+ { 0x00, 0x1C, 0x0A, 0x42, 0xDC, 0x92, 0x02, 0x94, 0x91, 0xA6, 0x56, 0x65, 0x9B },
+ { 0x00, 0x1C, 0x1E, 0x72, 0xC7, 0x00, 0x02, 0xEF, 0x01, 0x84, 0x06, 0x58, 0x0A },
+ { 0x00, 0x1C, 0x09, 0x32, 0xDD, 0xA0, 0x03, 0x2E, 0xC1, 0x9A, 0x06, 0x55, 0x19 },
+ { 0x00, 0x1C, 0x03, 0x53, 0x2D, 0xA0, 0x03, 0xB0, 0x01, 0xA6, 0x06, 0x60, 0x1A },
+ { 0x00, 0x1C, 0x0A, 0xB3, 0x24, 0xB4, 0x03, 0x20, 0xC1, 0x95, 0x46, 0x92, 0x0B },
+ { 0x00, 0x1C, 0x1F, 0xC3, 0x86, 0x00, 0x02, 0xE7, 0x01, 0x84, 0x06, 0x98, 0x0B },
+ { 0x00, 0x1C, 0x1B, 0xD2, 0x9B, 0x92, 0x02, 0x96, 0xC1, 0x96, 0x56, 0x59, 0x12 },
+ { 0x00, 0x1C, 0x1D, 0xA2, 0x57, 0x18, 0x04, 0x9B, 0x6D, 0x94, 0x86, 0xA5, 0x94 },
+ { 0x00, 0x1C, 0x1A, 0xA2, 0x49, 0x26, 0x02, 0x49, 0x29, 0x99, 0xA6, 0x55, 0x61 },
+ { 0x00, 0x1C, 0x1D, 0x62, 0x4B, 0x6E, 0x02, 0x4A, 0xA1, 0x96, 0x56, 0x5A, 0x13 },
+ { 0x00, 0x1C, 0x00, 0xB2, 0x49, 0x24, 0x82, 0x53, 0xA1, 0x95, 0xA6, 0x5A, 0x1B },
+ { 0x00, 0x1C, 0x03, 0xD2, 0x93, 0xB4, 0x02, 0x6E, 0x01, 0xA5, 0x86, 0x68, 0x1B },
+ { 0x00, 0x1C, 0x16, 0xD2, 0x9B, 0x6E, 0x02, 0x53, 0x01, 0xA5, 0x96, 0x68, 0x1B },
+ { 0x00, 0x1C, 0x1E, 0x42, 0xAD, 0x00, 0x02, 0x4B, 0x91, 0x94, 0x06, 0x69, 0x4B }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_5740000 = {
+ { 0x00, 0x1C, 0x0A, 0xE2, 0x9E, 0xD8, 0x02, 0x52, 0x41, 0xA9, 0x86, 0x66, 0x23 },
+ { 0x00, 0x1C, 0x13, 0xB2, 0x86, 0xD8, 0x02, 0x4A, 0x71, 0x89, 0x86, 0x66, 0x5B },
+ { 0x00, 0x1C, 0x0B, 0xA2, 0x9C, 0xE0, 0x02, 0x49, 0x25, 0x9A, 0x06, 0x6A, 0x9D },
+ { 0x00, 0x1C, 0x0E, 0x82, 0x93, 0xA0, 0x02, 0x9C, 0x91, 0x99, 0x06, 0x59, 0x93 },
+ { 0x00, 0x1C, 0x1C, 0xF2, 0xDB, 0x92, 0x02, 0x9B, 0x6D, 0xA9, 0x56, 0x69, 0x9C },
+ { 0x00, 0x1C, 0x1C, 0x42, 0xED, 0x18, 0x02, 0xDD, 0xC1, 0xA8, 0x86, 0x5A, 0x23 },
+ { 0x00, 0x1C, 0x1B, 0x32, 0xE5, 0xD8, 0x02, 0xDD, 0xA1, 0x96, 0x46, 0x65, 0x12 },
+ { 0x00, 0x1C, 0x1C, 0x53, 0x26, 0xC0, 0x03, 0x70, 0xC1, 0xAA, 0x06, 0x52, 0x22 },
+ { 0x00, 0x1C, 0x0A, 0xE2, 0x9E, 0xD8, 0x02, 0x52, 0x41, 0xA9, 0x86, 0x66, 0x23 },
+ { 0x00, 0x1C, 0x0A, 0x12, 0x65, 0xD8, 0x04, 0xDB, 0x6D, 0xA5, 0x46, 0xA5, 0x53 },
+ { 0x00, 0x1C, 0x06, 0x52, 0x66, 0xC0, 0x04, 0x93, 0x81, 0x96, 0x06, 0x99, 0x13 },
+ { 0x00, 0x1C, 0x0F, 0x22, 0x53, 0x6C, 0x04, 0xA4, 0x91, 0x99, 0x86, 0xA5, 0x5B },
+ { 0x00, 0x1C, 0x0B, 0x22, 0x49, 0x49, 0x04, 0x94, 0xA1, 0x9A, 0xA6, 0xA9, 0x2C },
+ { 0x00, 0x1C, 0x18, 0xF2, 0x4D, 0x00, 0x02, 0x4B, 0xA1, 0x94, 0x06, 0x5A, 0x0B },
+ { 0x00, 0x1C, 0x1E, 0x72, 0x49, 0xB4, 0x02, 0x56, 0xC1, 0x95, 0x86, 0x56, 0x12 },
+ { 0x00, 0x1C, 0x1C, 0x12, 0x95, 0x18, 0x02, 0x6D, 0xC1, 0xA8, 0x46, 0x55, 0x19 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_6000000 = {
+ { 0x00, 0x1C, 0x18, 0x42, 0x5F, 0x00, 0x04, 0x9E, 0xC1, 0x98, 0x06, 0x96, 0x13 },
+ { 0x00, 0x1C, 0x1D, 0xA2, 0x57, 0x18, 0x04, 0x9B, 0x6D, 0x94, 0x86, 0xA5, 0x94 },
+ { 0x00, 0x1C, 0x16, 0xF2, 0x49, 0x72, 0x04, 0x92, 0xA1, 0x99, 0x66, 0xAA, 0x1D },
+ { 0x00, 0x1C, 0x18, 0xF2, 0x4D, 0x00, 0x02, 0x4B, 0xA1, 0x94, 0x06, 0x5A, 0x0B },
+ { 0x00, 0x1C, 0x1e, 0x72, 0x49, 0xB4, 0x02, 0x56, 0xC1, 0x95, 0x86, 0x56, 0x12 },
+ { 0x00, 0x1C, 0x09, 0x22, 0x94, 0x98, 0x02, 0x46, 0x01, 0xA6, 0x46, 0x44, 0x19 },
+ { 0x00, 0x1C, 0x0A, 0xE2, 0x9E, 0xD8, 0x02, 0x52, 0x41, 0xA9, 0x86, 0x66, 0x23 },
+ { 0x00, 0x1C, 0x0D, 0x02, 0xB7, 0x18, 0x02, 0x4A, 0x49, 0xA8, 0x46, 0x65, 0x5A },
+ { 0x00, 0x1C, 0x18, 0x42, 0x5F, 0x00, 0x04, 0x9E, 0xC1, 0x98, 0x06, 0x96, 0x13 },
+ { 0x00, 0x1C, 0x19, 0x84, 0x9C, 0xB4, 0x04, 0xDB, 0x6D, 0x55, 0x46, 0x59, 0x42 },
+ { 0x00, 0x1C, 0x18, 0xE4, 0x93, 0x92, 0x04, 0xDB, 0xA1, 0x55, 0x96, 0x65, 0x0A },
+ { 0x00, 0x1C, 0x0C, 0x42, 0x4A, 0x80, 0x05, 0x25, 0xC1, 0xAA, 0x06, 0x65, 0x22 },
+ { 0x00, 0x1C, 0x07, 0x72, 0x4A, 0x49, 0x85, 0xFF, 0x01, 0xA5, 0x56, 0x94, 0x12 },
+ { 0x00, 0x1C, 0x0A, 0xB2, 0x53, 0x92, 0x05, 0x2E, 0x01, 0xAA, 0x66, 0x98, 0x2B },
+ { 0x00, 0x1C, 0x1C, 0x32, 0x5C, 0x92, 0x04, 0xE4, 0x91, 0xA9, 0xA6, 0x99, 0xAC },
+ { 0x00, 0x1C, 0x12, 0xD2, 0x7F, 0xE0, 0x04, 0xDB, 0x81, 0xA6, 0x06, 0xAA, 0x1D }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_6600000 = {
+ { 0x00, 0x1C, 0x0A, 0x84, 0xDB, 0xD8, 0x06, 0xDB, 0x91, 0x6A, 0x46, 0x99, 0x9C },
+ { 0x00, 0x1C, 0x08, 0xB4, 0xF8, 0x00, 0x06, 0xDB, 0xC1, 0x50, 0x06, 0xA5, 0x03 },
+ { 0x00, 0x1C, 0x09, 0x04, 0xDC, 0x80, 0x04, 0x95, 0xA1, 0x55, 0x06, 0x59, 0x02 },
+ { 0x00, 0x1C, 0x1D, 0x84, 0x93, 0x18, 0x04, 0xA4, 0xA1, 0x64, 0x86, 0x56, 0x12 },
+ { 0x00, 0x1C, 0x00, 0x54, 0xA5, 0xC0, 0x04, 0x9D, 0x01, 0x66, 0x06, 0x68, 0x13 },
+ { 0x00, 0x1C, 0x1A, 0x74, 0xA6, 0x18, 0x04, 0x92, 0x49, 0x54, 0x46, 0x69, 0x43 },
+ { 0x00, 0x1C, 0x19, 0x34, 0x92, 0x60, 0x04, 0xE8, 0xC1, 0x59, 0x06, 0x51, 0x09 },
+ { 0x00, 0x1C, 0x0A, 0x54, 0x92, 0x4E, 0x04, 0xDB, 0x01, 0x55, 0x56, 0x68, 0x03 },
+ { 0x00, 0x1C, 0x0A, 0x84, 0xDB, 0xD8, 0x06, 0xDB, 0x91, 0x6A, 0x46, 0x99, 0x9C },
+ { 0x00, 0x1C, 0x06, 0x54, 0x93, 0x6C, 0x09, 0x25, 0xC1, 0x9A, 0x46, 0xA5, 0x1B },
+ { 0x00, 0x1C, 0x1B, 0xB4, 0xDD, 0xD8, 0x06, 0xE5, 0xC1, 0xA6, 0x46, 0x5A, 0x1B },
+ { 0x00, 0x1C, 0x10, 0x74, 0xE7, 0x18, 0x06, 0xDC, 0x91, 0x98, 0x86, 0x65, 0x5A },
+ { 0x00, 0x1C, 0x15, 0x75, 0x2F, 0xE0, 0x07, 0x06, 0xC1, 0xA5, 0x06, 0x4A, 0x13 },
+ { 0x00, 0x1C, 0x12, 0xD5, 0x46, 0x18, 0x07, 0x6E, 0xC1, 0x88, 0x86, 0x65, 0x1A },
+ { 0x00, 0x1C, 0x1D, 0x05, 0xF8, 0xD8, 0x07, 0xB6, 0xC1, 0x51, 0x86, 0xA5, 0x0B },
+ { 0x00, 0x1C, 0x04, 0xD5, 0x25, 0xB8, 0x07, 0x36, 0xC1, 0x66, 0x46, 0x99, 0x13 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_6340000 = {
+ { 0x00, 0x1C, 0x13, 0x54, 0x98, 0xD8, 0x04, 0xDE, 0x01, 0x52, 0x46, 0x54, 0x09 },
+ { 0x00, 0x1C, 0x18, 0xE4, 0x93, 0x92, 0x04, 0xDB, 0xA1, 0x55, 0x96, 0x65, 0x0A },
+ { 0x00, 0x1C, 0x02, 0x92, 0x49, 0x2C, 0x05, 0x30, 0xC1, 0xA9, 0x46, 0x62, 0x1B },
+ { 0x00, 0x1C, 0x1A, 0x82, 0x4B, 0x72, 0x05, 0xB6, 0xC1, 0xA5, 0xA6, 0x69, 0x23 },
+ { 0x00, 0x1C, 0x10, 0xD2, 0x52, 0x4E, 0x05, 0x6E, 0xC1, 0xAA, 0x66, 0xA9, 0x2C },
+ { 0x00, 0x1C, 0x0F, 0xF2, 0x52, 0x49, 0x04, 0xDC, 0x81, 0xA6, 0x56, 0x95, 0x1A },
+ { 0x00, 0x1C, 0x1B, 0xE2, 0x67, 0x18, 0x04, 0xE6, 0x01, 0xA8, 0x86, 0xA8, 0x24 },
+ { 0x00, 0x1C, 0x06, 0x52, 0x66, 0xC0, 0x04, 0x93, 0x81, 0x96, 0x06, 0x99, 0x13 },
+ { 0x00, 0x1C, 0x13, 0x54, 0x98, 0xD8, 0x04, 0xDE, 0x01, 0x52, 0x46, 0x54, 0x09 },
+ { 0x00, 0x1C, 0x0B, 0x15, 0x86, 0x00, 0x07, 0x68, 0xC1, 0x48, 0x06, 0x91, 0x0A },
+ { 0x00, 0x1C, 0x1E, 0x45, 0x2E, 0xD8, 0x07, 0x36, 0xC1, 0x66, 0x46, 0xA9, 0x14 },
+ { 0x00, 0x1C, 0x11, 0x14, 0xDE, 0x18, 0x06, 0xE5, 0xA1, 0x64, 0x86, 0x99, 0x13 },
+ { 0x00, 0x1C, 0x1F, 0xE4, 0xED, 0xB8, 0x06, 0xDC, 0x81, 0x59, 0x86, 0xA6, 0x14 },
+ { 0x00, 0x1C, 0x12, 0x54, 0x92, 0xB4, 0x04, 0x92, 0x71, 0x6A, 0x86, 0x59, 0xA3 },
+ { 0x00, 0x1C, 0x0A, 0xE4, 0x9B, 0x94, 0x04, 0x80, 0xC1, 0x6A, 0x46, 0x41, 0x19 },
+ { 0x00, 0x1C, 0x1E, 0xD4, 0xB6, 0x18, 0x04, 0x92, 0xA1, 0x64, 0x86, 0x66, 0x13 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_6200000 = {
+ { 0x00, 0x1C, 0x1A, 0x82, 0x4B, 0x72, 0x05, 0xB6, 0xC1, 0xA5, 0xA6, 0x69, 0x23 },
+ { 0x00, 0x1C, 0x10, 0xD2, 0x52, 0x4E, 0x05, 0x6E, 0xC1, 0xAA, 0x66, 0xA9, 0x2C },
+ { 0x00, 0x1C, 0x0A, 0x62, 0x52, 0x98, 0x04, 0xDE, 0xC1, 0xA5, 0x86, 0x99, 0x1B },
+ { 0x00, 0x1C, 0x0A, 0x12, 0x65, 0xD8, 0x04, 0xDB, 0x6D, 0xA5, 0x46, 0xA5, 0x53 },
+ { 0x00, 0x1C, 0x06, 0x52, 0x66, 0xC0, 0x04, 0x93, 0x81, 0x96, 0x06, 0x99, 0x13 },
+ { 0x00, 0x1C, 0x1C, 0xF2, 0x52, 0x70, 0x04, 0xBF, 0x01, 0x99, 0x46, 0x98, 0x13 },
+ { 0x00, 0x1C, 0x1D, 0x52, 0x52, 0x50, 0x04, 0x93, 0xA1, 0x95, 0x86, 0xA5, 0x13 },
+ { 0x00, 0x1C, 0x1D, 0xB2, 0x4A, 0x90, 0x02, 0x49, 0x25, 0x99, 0x86, 0x56, 0x9B },
+ { 0x00, 0x1C, 0x1A, 0x82, 0x4B, 0x72, 0x05, 0xB6, 0xC1, 0xA5, 0xA6, 0x69, 0x23 },
+ { 0x00, 0x1C, 0x08, 0xB4, 0xF8, 0x00, 0x06, 0xDB, 0xC1, 0x50, 0x06, 0xA5, 0x03 },
+ { 0x00, 0x1C, 0x16, 0x54, 0xDB, 0x92, 0x04, 0x93, 0x61, 0x55, 0x96, 0x59, 0x0A },
+ { 0x00, 0x1C, 0x0A, 0x44, 0x92, 0xD8, 0x04, 0xAD, 0xC1, 0x66, 0x86, 0x56, 0x1A },
+ { 0x00, 0x1C, 0x00, 0x54, 0xA5, 0xC0, 0x04, 0x9D, 0x01, 0x66, 0x06, 0x68, 0x13 },
+ { 0x00, 0x1C, 0x19, 0xD4, 0x9C, 0xE0, 0x04, 0xDB, 0x71, 0x5A, 0x06, 0x56, 0x52 },
+ { 0x00, 0x1C, 0x03, 0xD4, 0x95, 0xD8, 0x04, 0xE5, 0xA1, 0x56, 0x86, 0x65, 0x12 },
+ { 0x00, 0x1C, 0x02, 0x92, 0x49, 0x2C, 0x05, 0x30, 0xC1, 0xA9, 0x46, 0x62, 0x1B }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_5580000 = {
+ { 0x00, 0x1C, 0x1F, 0x72, 0x92, 0x60, 0x02, 0x9B, 0x91, 0x95, 0x06, 0x65, 0x8B },
+ { 0x00, 0x1C, 0x08, 0xD2, 0xE7, 0x00, 0x02, 0x92, 0x4D, 0xA8, 0x06, 0x6A, 0x9D },
+ { 0x00, 0x1C, 0x06, 0x32, 0xE5, 0xB8, 0x02, 0xDB, 0x71, 0x99, 0x86, 0x65, 0x9B },
+ { 0x00, 0x1C, 0x19, 0x63, 0x24, 0x80, 0x03, 0x24, 0x01, 0xAA, 0x06, 0x68, 0x23 },
+ { 0x00, 0x1C, 0x04, 0x13, 0x2D, 0xB8, 0x03, 0x86, 0x01, 0x99, 0x46, 0x88, 0x13 },
+ { 0x00, 0x1C, 0x1C, 0x03, 0x76, 0x18, 0x03, 0x27, 0x01, 0x98, 0x86, 0xA8, 0x1C },
+ { 0x00, 0x1C, 0x10, 0x32, 0x00, 0x00, 0x02, 0xE4, 0x81, 0x00, 0x06, 0xA9, 0x04 },
+ { 0x00, 0x1C, 0x0D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x81, 0x69, 0x86, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x1F, 0x72, 0x92, 0x60, 0x02, 0x9B, 0x91, 0x95, 0x06, 0x65, 0x8B },
+ { 0x00, 0x1C, 0x1D, 0xB2, 0x4A, 0x90, 0x02, 0x49, 0x25, 0x99, 0x86, 0x56, 0x9B },
+ { 0x00, 0x1C, 0x19, 0xA2, 0x4A, 0x98, 0x02, 0x49, 0x4D, 0x95, 0x46, 0x5A, 0x4B },
+ { 0x00, 0x1C, 0x0A, 0x82, 0x92, 0x49, 0x82, 0x5E, 0x01, 0xA9, 0xA6, 0x58, 0x2A },
+ { 0x00, 0x1C, 0x0B, 0x92, 0x92, 0x58, 0x02, 0x5E, 0x01, 0xA5, 0x46, 0x64, 0x12 },
+ { 0x00, 0x1C, 0x08, 0x72, 0xA6, 0xD8, 0x02, 0x49, 0x29, 0xA5, 0x86, 0x65, 0x5A },
+ { 0x00, 0x1C, 0x09, 0x82, 0xA4, 0xB4, 0x02, 0x49, 0x25, 0x96, 0x46, 0x69, 0x94 },
+ { 0x00, 0x1C, 0x0F, 0x92, 0x93, 0x6D, 0x82, 0x9C, 0x81, 0x9A, 0xA6, 0x56, 0x2A }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_3800000 = {
+ { 0x00, 0x1C, 0x1A, 0x80, 0x10, 0xD8, 0x00, 0x0A, 0x6D, 0xA2, 0x46, 0xA9, 0x9D },
+ { 0x00, 0x1C, 0x0D, 0x70, 0x12, 0x18, 0x00, 0x01, 0x25, 0xA4, 0x46, 0xA5, 0x53 },
+ { 0x00, 0x1C, 0x12, 0xF0, 0x1D, 0xD8, 0x00, 0x02, 0x71, 0xAA, 0x46, 0xAA, 0x65 },
+ { 0x00, 0x1C, 0x09, 0xC0, 0x25, 0xE0, 0x12, 0x49, 0x49, 0xA9, 0x05, 0x55, 0x58 },
+ { 0x00, 0x1C, 0x0D, 0x00, 0x2D, 0xD8, 0x12, 0x4C, 0x81, 0xAA, 0x45, 0x56, 0x21 },
+ { 0x00, 0x1C, 0x1D, 0xE0, 0x24, 0x92, 0x12, 0x5D, 0xA1, 0x9A, 0x55, 0x56, 0x19 },
+ { 0x00, 0x1C, 0x08, 0xB0, 0x1B, 0xB8, 0x12, 0x5B, 0x91, 0x9A, 0x45, 0x65, 0x59 },
+ { 0x00, 0x1C, 0x1A, 0xA0, 0x1F, 0xE0, 0x12, 0x56, 0x01, 0x95, 0x05, 0x68, 0x0A },
+ { 0x00, 0x1C, 0x1A, 0x80, 0x10, 0xD8, 0x00, 0x0A, 0x6D, 0xA2, 0x46, 0xA9, 0x9D },
+ { 0x00, 0x1C, 0x08, 0x20, 0x00, 0x12, 0x00, 0x00, 0x91, 0xA5, 0x56, 0x95, 0x52 },
+ { 0x00, 0x1C, 0x0F, 0x30, 0x09, 0x40, 0x00, 0x02, 0x71, 0xA9, 0x06, 0x99, 0x9C },
+ { 0x00, 0x1C, 0x04, 0x90, 0x0A, 0x92, 0x00, 0x00, 0x41, 0xAA, 0x56, 0x99, 0x23 },
+ { 0x00, 0x1C, 0x1A, 0xF0, 0x08, 0xD8, 0x00, 0x0D, 0x01, 0xA1, 0x46, 0x98, 0x13 },
+ { 0x00, 0x1C, 0x0A, 0x30, 0x0A, 0xB8, 0x00, 0x13, 0x71, 0xA5, 0x46, 0x99, 0x53 },
+ { 0x00, 0x1C, 0x05, 0x30, 0x09, 0x6D, 0x80, 0x24, 0xC1, 0xA5, 0xA6, 0xA6, 0x24 },
+ { 0x00, 0x1C, 0x0D, 0xE0, 0x12, 0xA0, 0x00, 0x13, 0xC1, 0xAA, 0x06, 0xAA, 0x25 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_4080000 = {
+ { 0x00, 0x1C, 0x1E, 0x40, 0x01, 0x6E, 0x00, 0x6D, 0xC1, 0xA5, 0x66, 0xAA, 0x1D },
+ { 0x00, 0x1C, 0x04, 0xF0, 0x00, 0x00, 0x80, 0x52, 0x51, 0xA6, 0x66, 0xA9, 0xA5 },
+ { 0x00, 0x1C, 0x17, 0x30, 0x00, 0x4E, 0x00, 0x4A, 0x01, 0xA6, 0x66, 0xA4, 0x23 },
+ { 0x00, 0x1C, 0x08, 0x20, 0x00, 0x12, 0x00, 0x00, 0x91, 0xA5, 0x56, 0x95, 0x52 },
+ { 0x00, 0x1C, 0x0E, 0x30, 0x09, 0x29, 0x00, 0x01, 0x49, 0xA9, 0x96, 0x99, 0x63 },
+ { 0x00, 0x1C, 0x13, 0xD0, 0x0B, 0x6D, 0x80, 0x00, 0x01, 0xAA, 0xA6, 0x9A, 0xB5 },
+ { 0x00, 0x1C, 0x0D, 0x40, 0x0B, 0x78, 0x00, 0x09, 0x29, 0xA6, 0x86, 0x99, 0xA4 },
+ { 0x00, 0x1C, 0x02, 0x10, 0x0A, 0x4E, 0x00, 0x1B, 0x71, 0xA5, 0x66, 0x95, 0x5A },
+ { 0x00, 0x1C, 0x1E, 0x40, 0x01, 0x6E, 0x00, 0x6D, 0xC1, 0xA5, 0x66, 0xAA, 0x1D },
+ { 0x00, 0x1C, 0x18, 0xD2, 0x49, 0x54, 0x01, 0x6F, 0x01, 0x56, 0x46, 0x98, 0x0B },
+ { 0x00, 0x1C, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xE0, 0xC1, 0xAA, 0x56, 0x92, 0x23 },
+ { 0x00, 0x1C, 0x09, 0x10, 0x00, 0x2E, 0x00, 0x92, 0x41, 0xA9, 0xA6, 0x96, 0x2B },
+ { 0x00, 0x1C, 0x0C, 0xE0, 0x01, 0x29, 0x00, 0xAD, 0xC1, 0xAA, 0x56, 0x95, 0x22 },
+ { 0x00, 0x1C, 0x01, 0x70, 0x02, 0x50, 0x00, 0x93, 0x61, 0xAA, 0x86, 0xA6, 0x2C },
+ { 0x00, 0x1C, 0x1F, 0x20, 0x07, 0xE0, 0x00, 0x4C, 0x01, 0xAA, 0x06, 0x98, 0x23 },
+ { 0x00, 0x1C, 0x06, 0xD0, 0x02, 0x80, 0x00, 0x53, 0x81, 0xA5, 0x06, 0x99, 0x13 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_8140000 = {
+ { 0x00, 0x1C, 0x13, 0x9B, 0x86, 0xE0, 0x01, 0xF8, 0xC2, 0x49, 0x04, 0x92, 0x12 },
+ { 0x00, 0x1C, 0x0E, 0x4C, 0x00, 0xD8, 0x00, 0x38, 0x02, 0x02, 0x84, 0x20, 0x19 },
+ { 0x00, 0x1C, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x04, 0x02, 0x01 },
+ { 0x00, 0x1C, 0x17, 0xBD, 0xB0, 0xD8, 0x00, 0x06, 0xC1, 0x91, 0x44, 0x0A, 0x0A },
+ { 0x00, 0x1C, 0x1D, 0x0D, 0x87, 0x18, 0x00, 0x36, 0xC1, 0x44, 0x84, 0x26, 0x0A },
+ { 0x00, 0x1C, 0x0B, 0x2A, 0x06, 0xD8, 0x01, 0xC0, 0x01, 0x06, 0x84, 0x80, 0x11 },
+ { 0x00, 0x1C, 0x02, 0x59, 0x25, 0xD8, 0x01, 0x86, 0xC1, 0xAA, 0x44, 0x85, 0x21 },
+ { 0x00, 0x1C, 0x15, 0x99, 0x6E, 0xC0, 0x0F, 0xC6, 0x01, 0xA6, 0x06, 0x44, 0x19 },
+ { 0x00, 0x1C, 0x13, 0x9B, 0x86, 0xE0, 0x01, 0xF8, 0xC2, 0x49, 0x04, 0x92, 0x12 },
+ { 0x00, 0x1C, 0x1A, 0x87, 0x7F, 0x18, 0x0B, 0xBF, 0x02, 0x64, 0x46, 0x64, 0x12 },
+ { 0x00, 0x1C, 0x00, 0xF7, 0x24, 0xE0, 0x0B, 0x6D, 0xC2, 0x56, 0x06, 0x59, 0x12 },
+ { 0x00, 0x1C, 0x05, 0x76, 0xE6, 0xC0, 0x0C, 0x36, 0xC2, 0x5A, 0x06, 0x25, 0x1A },
+ { 0x00, 0x1C, 0x0D, 0x19, 0x3F, 0x18, 0x0D, 0x86, 0xC2, 0x94, 0x46, 0x4A, 0x13 },
+ { 0x00, 0x1C, 0x0E, 0x19, 0xC6, 0xE0, 0x0E, 0x38, 0xC2, 0x8A, 0x06, 0x22, 0x23 },
+ { 0x00, 0x1C, 0x19, 0xE9, 0x6D, 0xB4, 0x0F, 0xFF, 0x02, 0x56, 0x46, 0x58, 0x12 },
+ { 0x00, 0x1C, 0x0A, 0x8B, 0x46, 0xD8, 0x01, 0xB6, 0xC2, 0x89, 0x84, 0x99, 0x22 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_5900000 = {
+ { 0x00, 0x1C, 0x1D, 0x02, 0x49, 0x24, 0x82, 0x49, 0x49, 0x99, 0x66, 0x55, 0x9A },
+ { 0x00, 0x1C, 0x12, 0x92, 0x4A, 0x4E, 0x02, 0x49, 0x25, 0x96, 0x96, 0x59, 0x9B },
+ { 0x00, 0x1C, 0x0D, 0x42, 0x92, 0x54, 0x02, 0x52, 0x51, 0xAA, 0x86, 0x5A, 0xAC },
+ { 0x00, 0x1C, 0x03, 0xD2, 0x93, 0xB4, 0x02, 0x6E, 0x01, 0xA5, 0x86, 0x68, 0x1B },
+ { 0x00, 0x1C, 0x16, 0xD2, 0x9B, 0x6E, 0x02, 0x53, 0x01, 0xA5, 0x96, 0x68, 0x1B },
+ { 0x00, 0x1C, 0x1A, 0x62, 0xAE, 0x18, 0x02, 0x4E, 0xC1, 0x98, 0x86, 0x69, 0x1B },
+ { 0x00, 0x1C, 0x01, 0x12, 0x9D, 0xC0, 0x02, 0x93, 0x71, 0x96, 0x06, 0x55, 0x51 },
+ { 0x00, 0x1C, 0x18, 0xA2, 0x94, 0xB8, 0x02, 0xAD, 0xC1, 0x96, 0x46, 0x59, 0x12 },
+ { 0x00, 0x1C, 0x1D, 0x02, 0x49, 0x24, 0x82, 0x49, 0x49, 0x99, 0x66, 0x55, 0x9A },
+ { 0x00, 0x1C, 0x07, 0x12, 0x4A, 0x4A, 0x05, 0x24, 0xA1, 0xA9, 0xA6, 0x69, 0x2B },
+ { 0x00, 0x1C, 0x09, 0x62, 0x49, 0x2D, 0x85, 0xC6, 0x01, 0xA6, 0xA6, 0x88, 0x2B },
+ { 0x00, 0x1C, 0x1C, 0xD2, 0x55, 0xA0, 0x05, 0x30, 0xC1, 0xA9, 0x06, 0xA2, 0x1C },
+ { 0x00, 0x1C, 0x14, 0x72, 0x5F, 0x18, 0x04, 0xEE, 0xC1, 0xA4, 0x86, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x1B, 0x92, 0x6D, 0xB4, 0x04, 0x92, 0x51, 0x9A, 0x86, 0x96, 0xA4 },
+ { 0x00, 0x1C, 0x18, 0x42, 0x5F, 0x00, 0x04, 0x9E, 0xC1, 0x98, 0x06, 0x96, 0x13 },
+ { 0x00, 0x1C, 0x0E, 0xD2, 0x53, 0xC0, 0x04, 0x9C, 0xC1, 0x95, 0x06, 0xA9, 0x0C }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_5260000 = {
+ { 0x00, 0x1C, 0x04, 0x93, 0x24, 0x92, 0x02, 0xAD, 0x01, 0x66, 0xA6, 0xA8, 0x24 },
+ { 0x00, 0x1C, 0x0F, 0x63, 0x25, 0xD8, 0x02, 0x92, 0x51, 0x59, 0x86, 0xA9, 0x95 },
+ { 0x00, 0x1C, 0x1F, 0xA2, 0xDB, 0x6D, 0x82, 0x4A, 0xA1, 0x65, 0x96, 0x99, 0x13 },
+ { 0x00, 0x1C, 0x08, 0xE2, 0xF6, 0xD8, 0x02, 0x52, 0x91, 0x59, 0x86, 0x99, 0x94 },
+ { 0x00, 0x1C, 0x1E, 0x92, 0xDC, 0x98, 0x02, 0x66, 0xC1, 0x59, 0x46, 0xA9, 0x0C },
+ { 0x00, 0x1C, 0x0C, 0x72, 0x92, 0x52, 0x02, 0x52, 0x4D, 0x69, 0x56, 0xA9, 0x95 },
+ { 0x00, 0x1C, 0x09, 0xB2, 0x92, 0x49, 0x02, 0x4B, 0x91, 0x66, 0xA6, 0xA9, 0xA5 },
+ { 0x00, 0x1C, 0x1E, 0x52, 0x9B, 0x70, 0x00, 0x01, 0x49, 0x65, 0x46, 0x55, 0x49 },
+ { 0x00, 0x1C, 0x04, 0x93, 0x24, 0x92, 0x02, 0xAD, 0x01, 0x66, 0xA6, 0xA8, 0x24 },
+ { 0x00, 0x1C, 0x13, 0x12, 0xDB, 0x6E, 0x02, 0x95, 0x01, 0xA6, 0x56, 0x68, 0x1B },
+ { 0x00, 0x1C, 0x1A, 0xD2, 0xF6, 0x18, 0x02, 0xF8, 0xC1, 0x98, 0x86, 0x51, 0x19 },
+ { 0x00, 0x1C, 0x0E, 0x52, 0xDC, 0xB4, 0x03, 0x37, 0x01, 0x96, 0x86, 0x64, 0x1A },
+ { 0x00, 0x1C, 0x1D, 0x73, 0x07, 0xE0, 0x02, 0x3F, 0x01, 0x89, 0x06, 0x24, 0x12 },
+ { 0x00, 0x1C, 0x1B, 0xA3, 0x40, 0xE0, 0x03, 0x2D, 0xC1, 0x82, 0x06, 0xA9, 0x14 },
+ { 0x00, 0x1C, 0x10, 0x32, 0x00, 0x00, 0x02, 0xE4, 0x81, 0x00, 0x06, 0xA9, 0x04 },
+ { 0x00, 0x1C, 0x0D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x81, 0x69, 0x86, 0x9A, 0x1C }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_5320000 = {
+ { 0x00, 0x1C, 0x1F, 0x13, 0x87, 0x18, 0x02, 0x93, 0x91, 0x44, 0x86, 0x96, 0x8C },
+ { 0x00, 0x1C, 0x0B, 0x23, 0x76, 0x18, 0x02, 0x9B, 0x6D, 0x54, 0x46, 0x9A, 0x44 },
+ { 0x00, 0x1C, 0x19, 0xD3, 0x00, 0xD8, 0x02, 0x9B, 0x91, 0x42, 0x86, 0xAA, 0x96 },
+ { 0x00, 0x1C, 0x09, 0x42, 0xDC, 0xE0, 0x02, 0x4A, 0x71, 0x69, 0x06, 0x95, 0x93 },
+ { 0x00, 0x1C, 0x1C, 0xF2, 0xE4, 0xB8, 0x02, 0x49, 0x25, 0x65, 0x86, 0x9A, 0x95 },
+ { 0x00, 0x1C, 0x0C, 0x02, 0xE7, 0xE0, 0x02, 0x65, 0x01, 0x5A, 0x06, 0x94, 0x12 },
+ { 0x00, 0x1C, 0x18, 0xB2, 0xDB, 0x6E, 0x02, 0x5B, 0x81, 0x56, 0x66, 0xAA, 0x15 },
+ { 0x00, 0x1C, 0x01, 0x32, 0x90, 0xD8, 0x02, 0x4A, 0x51, 0x61, 0x46, 0xA5, 0x4B },
+ { 0x00, 0x1C, 0x1F, 0x13, 0x87, 0x18, 0x02, 0x93, 0x91, 0x44, 0x86, 0x96, 0x8C },
+ { 0x00, 0x1C, 0x0E, 0x82, 0x93, 0xA0, 0x02, 0x9C, 0x91, 0x99, 0x06, 0x59, 0x93 },
+ { 0x00, 0x1C, 0x1C, 0xF2, 0xDB, 0x92, 0x02, 0x9B, 0x6D, 0xA9, 0x56, 0x69, 0x9C },
+ { 0x00, 0x1C, 0x1C, 0x42, 0xED, 0x18, 0x02, 0xDD, 0xC1, 0xA8, 0x86, 0x5A, 0x23 },
+ { 0x00, 0x1C, 0x02, 0x32, 0xE4, 0x98, 0x02, 0xDC, 0xC1, 0x95, 0x86, 0x6A, 0x14 },
+ { 0x00, 0x1C, 0x09, 0x93, 0x24, 0x90, 0x03, 0x6D, 0xA1, 0xA5, 0x46, 0x6A, 0x14 },
+ { 0x00, 0x1C, 0x1A, 0x83, 0x25, 0xB4, 0x03, 0x6E, 0x01, 0x96, 0x86, 0xA8, 0x1C },
+ { 0x00, 0x1C, 0x1E, 0x43, 0xBF, 0xE0, 0x02, 0xDB, 0xC1, 0xAA, 0x06, 0x9A, 0x24 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_6680000 = {
+ { 0x00, 0x1C, 0x0E, 0x15, 0x6D, 0xB8, 0x07, 0x76, 0x01, 0x66, 0x86, 0xA4, 0x1B },
+ { 0x00, 0x1C, 0x0A, 0x35, 0x38, 0xD8, 0x07, 0x25, 0xA1, 0x52, 0x86, 0xA6, 0x14 },
+ { 0x00, 0x1C, 0x1B, 0xE4, 0xDB, 0x92, 0x06, 0xE8, 0xC1, 0x66, 0x96, 0x92, 0x1B },
+ { 0x00, 0x1C, 0x03, 0x14, 0xE5, 0xB8, 0x06, 0xDC, 0x91, 0x5A, 0x86, 0xAA, 0x9E },
+ { 0x00, 0x1C, 0x12, 0x54, 0x92, 0xB4, 0x04, 0x92, 0x71, 0x6A, 0x86, 0x59, 0xA3 },
+ { 0x00, 0x1C, 0x0A, 0xE4, 0x9B, 0x94, 0x04, 0x80, 0xC1, 0x6A, 0x46, 0x41, 0x19 },
+ { 0x00, 0x1C, 0x1E, 0xD4, 0xB6, 0x18, 0x04, 0x92, 0xA1, 0x64, 0x86, 0x66, 0x13 },
+ { 0x00, 0x1C, 0x19, 0xD4, 0x9C, 0xE0, 0x04, 0xDB, 0x71, 0x5A, 0x06, 0x56, 0x52 },
+ { 0x00, 0x1C, 0x0E, 0x15, 0x6D, 0xB8, 0x07, 0x76, 0x01, 0x66, 0x86, 0xA4, 0x1B },
+ { 0x00, 0x1C, 0x07, 0xF4, 0xA4, 0xB8, 0x09, 0x6E, 0xC1, 0xA6, 0x46, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x18, 0x84, 0x9E, 0x18, 0x09, 0x36, 0xC1, 0x98, 0x46, 0x95, 0x12 },
+ { 0x00, 0x1C, 0x1D, 0xB4, 0x93, 0x6D, 0x86, 0xDD, 0xC1, 0x95, 0x66, 0x56, 0x12 },
+ { 0x00, 0x1C, 0x1A, 0x44, 0xED, 0xB8, 0x06, 0xF0, 0xC1, 0xA9, 0x46, 0x62, 0x1B },
+ { 0x00, 0x1C, 0x06, 0x74, 0xDE, 0xD8, 0x07, 0x24, 0x91, 0x96, 0x46, 0x55, 0x51 },
+ { 0x00, 0x1C, 0x13, 0xB5, 0x24, 0x18, 0x07, 0x24, 0x01, 0x98, 0x46, 0x68, 0x13 },
+ { 0x00, 0x1C, 0x0B, 0xF5, 0xB6, 0xD8, 0x06, 0x36, 0xC1, 0x9A, 0x86, 0x15, 0x21 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_6500000 = {
+ { 0x00, 0x1C, 0x09, 0x04, 0xDC, 0x80, 0x04, 0x95, 0xA1, 0x55, 0x06, 0x59, 0x02 },
+ { 0x00, 0x1C, 0x09, 0xF4, 0x93, 0x72, 0x04, 0xA7, 0x01, 0x65, 0x66, 0x54, 0x11 },
+ { 0x00, 0x1C, 0x00, 0x54, 0xA5, 0xC0, 0x04, 0x9D, 0x01, 0x66, 0x06, 0x68, 0x13 },
+ { 0x00, 0x1C, 0x0E, 0xB4, 0xA4, 0x00, 0x04, 0x92, 0x81, 0x54, 0x06, 0x69, 0x03 },
+ { 0x00, 0x1C, 0x04, 0x74, 0x93, 0x6C, 0x04, 0xF8, 0x01, 0x5A, 0x46, 0x50, 0x11 },
+ { 0x00, 0x1C, 0x0D, 0x32, 0x49, 0x2C, 0x05, 0x25, 0xA1, 0xAA, 0x46, 0x55, 0x21 },
+ { 0x00, 0x1C, 0x17, 0x92, 0x4D, 0xB8, 0x05, 0x70, 0xC1, 0xA9, 0x86, 0x62, 0x23 },
+ { 0x00, 0x1C, 0x03, 0x92, 0x49, 0x52, 0x05, 0x80, 0xC1, 0xA6, 0x66, 0x82, 0x23 },
+ { 0x00, 0x1C, 0x09, 0x04, 0xDC, 0x80, 0x04, 0x95, 0xA1, 0x55, 0x06, 0x59, 0x02 },
+ { 0x00, 0x1C, 0x1D, 0xC4, 0xED, 0xD8, 0x06, 0xE5, 0x01, 0x9A, 0x86, 0x68, 0x23 },
+ { 0x00, 0x1C, 0x1F, 0x95, 0x24, 0xB8, 0x07, 0x36, 0xC1, 0xA5, 0x86, 0x5A, 0x1B },
+ { 0x00, 0x1C, 0x12, 0xD5, 0x46, 0x18, 0x07, 0x6E, 0xC1, 0x88, 0x86, 0x65, 0x1A },
+ { 0x00, 0x1C, 0x06, 0x95, 0xFF, 0x00, 0x07, 0x86, 0x01, 0x64, 0x06, 0x84, 0x0A },
+ { 0x00, 0x1C, 0x04, 0xD5, 0x25, 0xB8, 0x07, 0x36, 0xC1, 0x66, 0x46, 0x99, 0x13 },
+ { 0x00, 0x1C, 0x0A, 0x84, 0xDB, 0xD8, 0x06, 0xDB, 0x91, 0x6A, 0x46, 0x99, 0x9C },
+ { 0x00, 0x1C, 0x08, 0xB4, 0xF8, 0x00, 0x06, 0xDB, 0xC1, 0x50, 0x06, 0xA5, 0x03 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_6320000 = {
+ { 0x00, 0x1C, 0x1E, 0x44, 0x92, 0x90, 0x04, 0xE4, 0x91, 0x5A, 0x86, 0x59, 0x9B },
+ { 0x00, 0x1C, 0x0A, 0x54, 0x92, 0x4E, 0x04, 0xDB, 0x01, 0x55, 0x56, 0x68, 0x03 },
+ { 0x00, 0x1C, 0x18, 0x92, 0x4B, 0x98, 0x05, 0x70, 0x01, 0xA9, 0x86, 0x50, 0x21 },
+ { 0x00, 0x1C, 0x09, 0x62, 0x49, 0x2D, 0x85, 0xC6, 0x01, 0xA6, 0xA6, 0x88, 0x2B },
+ { 0x00, 0x1C, 0x19, 0xE2, 0x54, 0xE0, 0x05, 0x00, 0xC1, 0xAA, 0x06, 0x82, 0x23 },
+ { 0x00, 0x1C, 0x1C, 0x32, 0x5C, 0x92, 0x04, 0xE4, 0x91, 0xA9, 0xA6, 0x99, 0xAC },
+ { 0x00, 0x1C, 0x12, 0xD2, 0x7F, 0xE0, 0x04, 0xDB, 0x81, 0xA6, 0x06, 0xAA, 0x1D },
+ { 0x00, 0x1C, 0x18, 0x42, 0x5F, 0x00, 0x04, 0x9E, 0xC1, 0x98, 0x06, 0x96, 0x13 },
+ { 0x00, 0x1C, 0x1E, 0x44, 0x92, 0x90, 0x04, 0xE4, 0x91, 0x5A, 0x86, 0x59, 0x9B },
+ { 0x00, 0x1C, 0x0E, 0x15, 0x6D, 0xB8, 0x07, 0x76, 0x01, 0x66, 0x86, 0xA4, 0x1B },
+ { 0x00, 0x1C, 0x01, 0xD5, 0x28, 0xD8, 0x07, 0x24, 0x91, 0x52, 0x46, 0xAA, 0x8E },
+ { 0x00, 0x1C, 0x19, 0xC4, 0xE5, 0x18, 0x06, 0xC0, 0xC1, 0x68, 0x86, 0x82, 0x1B },
+ { 0x00, 0x1C, 0x1E, 0x14, 0xDB, 0x94, 0x04, 0x92, 0x49, 0x59, 0x46, 0x56, 0x4A },
+ { 0x00, 0x1C, 0x06, 0x34, 0x90, 0xD8, 0x04, 0x9C, 0x81, 0x61, 0x86, 0x59, 0x12 },
+ { 0x00, 0x1C, 0x0E, 0xA4, 0x9B, 0x72, 0x04, 0xA4, 0x81, 0x66, 0x66, 0x69, 0x1B },
+ { 0x00, 0x1C, 0x1B, 0x64, 0xAF, 0xE0, 0x04, 0x97, 0x01, 0x56, 0x06, 0x64, 0x0A }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_4940000 = {
+ { 0x00, 0x1C, 0x0A, 0x22, 0xA4, 0x92, 0x00, 0x00, 0x01, 0x5A, 0x96, 0x59, 0x9B },
+ { 0x00, 0x1C, 0x19, 0xF2, 0x9C, 0x18, 0x00, 0x0B, 0xA1, 0x54, 0x86, 0x56, 0x0A },
+ { 0x00, 0x1C, 0x0C, 0xA2, 0x94, 0x92, 0x00, 0x17, 0x01, 0x59, 0x66, 0x54, 0x11 },
+ { 0x00, 0x1C, 0x03, 0x52, 0x92, 0x54, 0x00, 0x00, 0xC1, 0x55, 0x86, 0x42, 0x0A },
+ { 0x00, 0x1C, 0x18, 0x52, 0x49, 0x2E, 0x00, 0x13, 0x81, 0x69, 0x96, 0x66, 0x1B },
+ { 0x00, 0x1C, 0x1C, 0xF2, 0x4D, 0xE0, 0x00, 0x0B, 0x61, 0x66, 0x06, 0x69, 0x13 },
+ { 0x00, 0x1C, 0x09, 0x62, 0x49, 0x29, 0x00, 0x00, 0x41, 0x66, 0xA6, 0x66, 0x23 },
+ { 0x00, 0x1C, 0x1A, 0xE2, 0x52, 0x4A, 0x00, 0x06, 0xC1, 0x6A, 0xA6, 0x6A, 0x2C },
+ { 0x00, 0x1C, 0x0A, 0x22, 0xA4, 0x92, 0x00, 0x00, 0x01, 0x5A, 0x96, 0x59, 0x9B },
+ { 0x00, 0x1C, 0x19, 0x73, 0x20, 0xD8, 0x02, 0x92, 0x91, 0x51, 0x86, 0xAA, 0x8E },
+ { 0x00, 0x1C, 0x19, 0x12, 0xE4, 0xC0, 0x02, 0x49, 0x25, 0x69, 0x06, 0x99, 0x53 },
+ { 0x00, 0x1C, 0x1D, 0xC2, 0xE4, 0xB4, 0x02, 0x5C, 0xA1, 0x5A, 0x46, 0x9A, 0x14 },
+ { 0x00, 0x1C, 0x18, 0xB2, 0xDB, 0x6E, 0x02, 0x5B, 0x81, 0x56, 0x66, 0xAA, 0x15 },
+ { 0x00, 0x1C, 0x01, 0x32, 0x90, 0xD8, 0x02, 0x4A, 0x51, 0x61, 0x46, 0xA5, 0x4B },
+ { 0x00, 0x1C, 0x14, 0x32, 0x9B, 0x6D, 0x80, 0x00, 0x09, 0x69, 0x96, 0x55, 0x59 },
+ { 0x00, 0x1C, 0x17, 0x72, 0xA4, 0xB8, 0x00, 0x03, 0x6D, 0x65, 0x86, 0x55, 0x92 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_4200000 = {
+ { 0x00, 0x1C, 0x0A, 0x80, 0x01, 0x4D, 0x80, 0x86, 0xC1, 0xAA, 0x66, 0x89, 0x2B },
+ { 0x00, 0x1C, 0x0D, 0xE0, 0x02, 0x78, 0x00, 0x95, 0x01, 0xAA, 0x86, 0xA8, 0x2C },
+ { 0x00, 0x1C, 0x1F, 0x20, 0x07, 0xE0, 0x00, 0x4C, 0x01, 0xAA, 0x06, 0x98, 0x23 },
+ { 0x00, 0x1C, 0x06, 0xD0, 0x02, 0x80, 0x00, 0x53, 0x81, 0xA5, 0x06, 0x99, 0x13 },
+ { 0x00, 0x1C, 0x1E, 0x40, 0x01, 0x6E, 0x00, 0x6D, 0xC1, 0xA5, 0x66, 0xAA, 0x1D },
+ { 0x00, 0x1C, 0x04, 0xF0, 0x00, 0x00, 0x80, 0x52, 0x51, 0xA6, 0x66, 0xA9, 0xA5 },
+ { 0x00, 0x1C, 0x17, 0x30, 0x00, 0x4E, 0x00, 0x4A, 0x01, 0xA6, 0x66, 0xA4, 0x23 },
+ { 0x00, 0x1C, 0x08, 0x20, 0x00, 0x12, 0x00, 0x00, 0x91, 0xA5, 0x56, 0x95, 0x52 },
+ { 0x00, 0x1C, 0x0A, 0x80, 0x01, 0x4D, 0x80, 0x86, 0xC1, 0xAA, 0x66, 0x89, 0x2B },
+ { 0x00, 0x1C, 0x1F, 0x92, 0x52, 0x74, 0x00, 0x9B, 0xA1, 0x55, 0x86, 0x65, 0x0A },
+ { 0x00, 0x1C, 0x1C, 0x72, 0x49, 0x2E, 0x00, 0xDE, 0xC1, 0x59, 0x96, 0x5A, 0x13 },
+ { 0x00, 0x1C, 0x10, 0xB2, 0x4B, 0x72, 0x00, 0xDD, 0xC1, 0x59, 0x56, 0x69, 0x0B },
+ { 0x00, 0x1C, 0x1E, 0xD2, 0x4A, 0x6C, 0x01, 0x68, 0xC1, 0x56, 0x46, 0x62, 0x0B },
+ { 0x00, 0x1C, 0x1D, 0xF2, 0x49, 0x58, 0x01, 0x24, 0x01, 0x55, 0x86, 0x98, 0x0B },
+ { 0x00, 0x1C, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xE0, 0xC1, 0xAA, 0x56, 0x92, 0x23 },
+ { 0x00, 0x1C, 0x15, 0x70, 0x00, 0x24, 0x80, 0x90, 0xC1, 0xA9, 0x56, 0x91, 0x1A }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_3280000 = {
+ { 0x00, 0x1C, 0x0E, 0x40, 0x00, 0x00, 0x92, 0x4A, 0x6D, 0x99, 0xA5, 0x9A, 0xA4 },
+ { 0x00, 0x1C, 0x19, 0xB0, 0x01, 0x24, 0x92, 0x53, 0xC1, 0x9A, 0xA5, 0x9A, 0x2B },
+ { 0x00, 0x1C, 0x04, 0xF0, 0x01, 0x6C, 0x12, 0x6F, 0x01, 0x9A, 0x45, 0x98, 0x1A },
+ { 0x00, 0x1C, 0x10, 0x50, 0x02, 0x70, 0x12, 0x49, 0x71, 0x99, 0x85, 0xA6, 0x5B },
+ { 0x00, 0x1C, 0x1C, 0xE0, 0x04, 0xB4, 0x12, 0x49, 0x29, 0x9A, 0x85, 0xA9, 0x63 },
+ { 0x00, 0x1C, 0x05, 0x10, 0x04, 0xD8, 0x14, 0x93, 0x91, 0x95, 0x45, 0x5A, 0x4A },
+ { 0x00, 0x1C, 0x16, 0xB0, 0x02, 0x70, 0x14, 0xB8, 0x01, 0x96, 0x85, 0x50, 0x18 },
+ { 0x00, 0x1C, 0x1E, 0x40, 0x01, 0x29, 0x94, 0x92, 0x49, 0x96, 0x95, 0x66, 0x5A },
+ { 0x00, 0x1C, 0x0E, 0x40, 0x00, 0x00, 0x92, 0x4A, 0x6D, 0x99, 0xA5, 0x9A, 0xA4 },
+ { 0x00, 0x1C, 0x02, 0x50, 0x0A, 0x49, 0x93, 0x24, 0x91, 0x99, 0xA5, 0x65, 0xA2 },
+ { 0x00, 0x1C, 0x1E, 0x40, 0x0C, 0xB4, 0x12, 0x30, 0x01, 0x99, 0x45, 0x10, 0x10 },
+ { 0x00, 0x1C, 0x0A, 0x80, 0x0A, 0x92, 0x12, 0xDE, 0xC1, 0x95, 0xA5, 0x99, 0x1A },
+ { 0x00, 0x1C, 0x14, 0x70, 0x09, 0x24, 0x92, 0xE4, 0x91, 0x96, 0x55, 0xA9, 0x53 },
+ { 0x00, 0x1C, 0x0B, 0x20, 0x09, 0x4C, 0x12, 0x93, 0x71, 0x95, 0x45, 0x99, 0x8B },
+ { 0x00, 0x1C, 0x13, 0x50, 0x00, 0x30, 0x12, 0x9B, 0x71, 0x9A, 0x85, 0xAA, 0xA5 },
+ { 0x00, 0x1C, 0x0D, 0x00, 0x00, 0x72, 0x12, 0x49, 0x91, 0x99, 0x95, 0x95, 0x9A }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_4000000 = {
+ { 0x00, 0x1C, 0x08, 0x20, 0x00, 0x12, 0x00, 0x00, 0x91, 0xA5, 0x56, 0x95, 0x52 },
+ { 0x00, 0x1C, 0x0F, 0x30, 0x09, 0x40, 0x00, 0x02, 0x71, 0xA9, 0x06, 0x99, 0x9C },
+ { 0x00, 0x1C, 0x0C, 0x30, 0x0A, 0x78, 0x00, 0x00, 0x2D, 0xA9, 0x46, 0x9A, 0x5C },
+ { 0x00, 0x1C, 0x12, 0xD0, 0x0D, 0xB8, 0x00, 0x0B, 0x6D, 0xA5, 0x86, 0x9A, 0x9D },
+ { 0x00, 0x1C, 0x0A, 0x30, 0x0A, 0xB8, 0x00, 0x13, 0x71, 0xA5, 0x46, 0x99, 0x53 },
+ { 0x00, 0x1C, 0x05, 0x30, 0x09, 0x6D, 0x80, 0x24, 0xC1, 0xA5, 0xA6, 0xA6, 0x24 },
+ { 0x00, 0x1C, 0x0D, 0xE0, 0x12, 0xA0, 0x00, 0x13, 0xC1, 0xAA, 0x06, 0xAA, 0x25 },
+ { 0x00, 0x1C, 0x1A, 0x80, 0x10, 0xD8, 0x00, 0x0A, 0x6D, 0xA2, 0x46, 0xA9, 0x9D },
+ { 0x00, 0x1C, 0x08, 0x20, 0x00, 0x12, 0x00, 0x00, 0x91, 0xA5, 0x56, 0x95, 0x52 },
+ { 0x00, 0x1C, 0x05, 0xB0, 0x00, 0x0D, 0x80, 0x9B, 0x71, 0xA9, 0x56, 0x95, 0x5A },
+ { 0x00, 0x1C, 0x14, 0x10, 0x01, 0x24, 0x80, 0x9D, 0xA1, 0xA9, 0xA6, 0xAA, 0x2D },
+ { 0x00, 0x1C, 0x1B, 0x40, 0x03, 0xA0, 0x00, 0x49, 0x25, 0xAA, 0x06, 0x96, 0x63 },
+ { 0x00, 0x1C, 0x0A, 0x10, 0x03, 0x6E, 0x00, 0x52, 0x71, 0xA5, 0x56, 0x95, 0x93 },
+ { 0x00, 0x1C, 0x1A, 0xD0, 0x01, 0x6D, 0x80, 0x6D, 0xC1, 0xA6, 0xA6, 0x96, 0x2B },
+ { 0x00, 0x1C, 0x14, 0x30, 0x00, 0x05, 0x80, 0x53, 0xC1, 0xA6, 0x96, 0xA5, 0x23 },
+ { 0x00, 0x1C, 0x17, 0x30, 0x00, 0x4E, 0x00, 0x4A, 0x01, 0xA6, 0x66, 0xA4, 0x23 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_3440000 = {
+ { 0x00, 0x1C, 0x1E, 0x40, 0x0C, 0xB4, 0x12, 0x30, 0x01, 0x99, 0x45, 0x10, 0x10 },
+ { 0x00, 0x1C, 0x1D, 0x20, 0x0B, 0x6D, 0x93, 0x30, 0xC1, 0x95, 0xA5, 0x91, 0x19 },
+ { 0x00, 0x1C, 0x0A, 0x80, 0x0A, 0x92, 0x12, 0xDE, 0xC1, 0x95, 0xA5, 0x99, 0x1A },
+ { 0x00, 0x1C, 0x0B, 0x20, 0x09, 0x4C, 0x12, 0x93, 0x71, 0x95, 0x45, 0x99, 0x8B },
+ { 0x00, 0x1C, 0x1E, 0x70, 0x00, 0x04, 0x92, 0xAD, 0xA1, 0x9A, 0x95, 0x99, 0x22 },
+ { 0x00, 0x1C, 0x13, 0x50, 0x00, 0x30, 0x12, 0x9B, 0x71, 0x9A, 0x85, 0xAA, 0xA5 },
+ { 0x00, 0x1C, 0x0D, 0x00, 0x00, 0x72, 0x12, 0x49, 0x91, 0x99, 0x95, 0x95, 0x9A },
+ { 0x00, 0x1C, 0x0E, 0x40, 0x00, 0x00, 0x92, 0x4A, 0x6D, 0x99, 0xA5, 0x9A, 0xA4 },
+ { 0x00, 0x1C, 0x1E, 0x40, 0x0C, 0xB4, 0x12, 0x30, 0x01, 0x99, 0x45, 0x10, 0x10 },
+ { 0x00, 0x1C, 0x1A, 0xA0, 0x1F, 0xE0, 0x12, 0x56, 0x01, 0x95, 0x05, 0x68, 0x0A },
+ { 0x00, 0x1C, 0x09, 0x40, 0x1B, 0x6D, 0x92, 0x4A, 0xA1, 0x95, 0x55, 0x65, 0x09 },
+ { 0x00, 0x1C, 0x0A, 0x60, 0x13, 0x6E, 0x12, 0x49, 0x49, 0x9A, 0x95, 0x6A, 0x63 },
+ { 0x00, 0x1C, 0x17, 0x10, 0x13, 0x72, 0x12, 0xB7, 0x01, 0x95, 0x95, 0x64, 0x11 },
+ { 0x00, 0x1C, 0x19, 0x90, 0x12, 0x40, 0x12, 0x92, 0x4D, 0x95, 0x05, 0x66, 0x8B },
+ { 0x00, 0x1C, 0x19, 0x00, 0x09, 0x70, 0x12, 0xDB, 0x61, 0x9A, 0x45, 0x59, 0x19 },
+ { 0x00, 0x1C, 0x02, 0x50, 0x0A, 0x49, 0x93, 0x24, 0x91, 0x99, 0xA5, 0x65, 0xA2 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_3460000 = {
+ { 0x00, 0x1C, 0x02, 0x50, 0x0A, 0x49, 0x93, 0x24, 0x91, 0x99, 0xA5, 0x65, 0xA2 },
+ { 0x00, 0x1C, 0x1E, 0x40, 0x0C, 0xB4, 0x12, 0x30, 0x01, 0x99, 0x45, 0x10, 0x10 },
+ { 0x00, 0x1C, 0x0A, 0x80, 0x0A, 0x92, 0x12, 0xDE, 0xC1, 0x95, 0xA5, 0x99, 0x1A },
+ { 0x00, 0x1C, 0x14, 0x70, 0x09, 0x24, 0x92, 0xE4, 0x91, 0x96, 0x55, 0xA9, 0x53 },
+ { 0x00, 0x1C, 0x0B, 0x20, 0x09, 0x4C, 0x12, 0x93, 0x71, 0x95, 0x45, 0x99, 0x8B },
+ { 0x00, 0x1C, 0x1E, 0x70, 0x00, 0x04, 0x92, 0xAD, 0xA1, 0x9A, 0x95, 0x99, 0x22 },
+ { 0x00, 0x1C, 0x13, 0x50, 0x00, 0x30, 0x12, 0x9B, 0x71, 0x9A, 0x85, 0xAA, 0xA5 },
+ { 0x00, 0x1C, 0x0D, 0x00, 0x00, 0x72, 0x12, 0x49, 0x91, 0x99, 0x95, 0x95, 0x9A },
+ { 0x00, 0x1C, 0x02, 0x50, 0x0A, 0x49, 0x93, 0x24, 0x91, 0x99, 0xA5, 0x65, 0xA2 },
+ { 0x00, 0x1C, 0x08, 0xB0, 0x1B, 0xB8, 0x12, 0x5B, 0x91, 0x9A, 0x45, 0x65, 0x59 },
+ { 0x00, 0x1C, 0x1A, 0xA0, 0x1F, 0xE0, 0x12, 0x56, 0x01, 0x95, 0x05, 0x68, 0x0A },
+ { 0x00, 0x1C, 0x09, 0x40, 0x1B, 0x6D, 0x92, 0x4A, 0xA1, 0x95, 0x55, 0x65, 0x09 },
+ { 0x00, 0x1C, 0x00, 0x90, 0x15, 0xD8, 0x12, 0x9C, 0xA1, 0x96, 0x85, 0x56, 0x19 },
+ { 0x00, 0x1C, 0x17, 0x10, 0x13, 0x72, 0x12, 0xB7, 0x01, 0x95, 0x95, 0x64, 0x11 },
+ { 0x00, 0x1C, 0x19, 0x90, 0x12, 0x40, 0x12, 0x92, 0x4D, 0x95, 0x05, 0x66, 0x8B },
+ { 0x00, 0x1C, 0x11, 0x70, 0x09, 0x29, 0x12, 0xDC, 0xC1, 0x99, 0x55, 0x66, 0x12 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_4450000 = {
+ { 0x00, 0x1C, 0x0D, 0x82, 0x55, 0xB4, 0x00, 0x9C, 0xC1, 0x55, 0x46, 0x5A, 0x03 },
+ { 0x00, 0x1C, 0x01, 0xD2, 0x49, 0x52, 0x00, 0x93, 0x91, 0x5A, 0xA6, 0x66, 0x63 },
+ { 0x00, 0x1C, 0x0E, 0x82, 0x4A, 0x6E, 0x00, 0xED, 0xC1, 0x5A, 0x96, 0x55, 0x19 },
+ { 0x00, 0x1C, 0x1B, 0x92, 0x4D, 0x18, 0x01, 0x36, 0xC1, 0x54, 0x46, 0x59, 0x02 },
+ { 0x00, 0x1C, 0x1B, 0x22, 0x4A, 0x49, 0x00, 0x38, 0xC1, 0x55, 0x66, 0x12, 0x0A },
+ { 0x00, 0x1C, 0x0C, 0x52, 0x49, 0x29, 0x81, 0x3F, 0x01, 0x55, 0xA6, 0x98, 0x13 },
+ { 0x00, 0x1C, 0x0C, 0xD0, 0x00, 0x29, 0x80, 0xC6, 0xC1, 0xAA, 0x66, 0x86, 0x2B },
+ { 0x00, 0x1C, 0x15, 0x70, 0x00, 0x24, 0x80, 0x90, 0xC1, 0xA9, 0x56, 0x91, 0x1A },
+ { 0x00, 0x1C, 0x0D, 0x82, 0x55, 0xB4, 0x00, 0x9C, 0xC1, 0x55, 0x46, 0x5A, 0x03 },
+ { 0x00, 0x1C, 0x1A, 0xE2, 0x52, 0x4A, 0x00, 0x06, 0xC1, 0x6A, 0xA6, 0x6A, 0x2C },
+ { 0x00, 0x1C, 0x06, 0x72, 0x55, 0xB4, 0x00, 0x00, 0x25, 0x66, 0x46, 0x6A, 0x54 },
+ { 0x00, 0x1C, 0x0C, 0x72, 0x5C, 0x92, 0x00, 0x49, 0x25, 0x6A, 0x56, 0x59, 0x5A },
+ { 0x00, 0x1C, 0x1D, 0x22, 0x66, 0x18, 0x00, 0x5B, 0x6D, 0x64, 0x46, 0x56, 0x8B },
+ { 0x00, 0x1C, 0x16, 0xD2, 0x6E, 0x00, 0x00, 0x5E, 0xC1, 0x58, 0x06, 0x69, 0x0B },
+ { 0x00, 0x1C, 0x0E, 0x52, 0x5C, 0x90, 0x00, 0x49, 0x2D, 0x59, 0x46, 0x66, 0x8C },
+ { 0x00, 0x1C, 0x0C, 0x22, 0x52, 0xE0, 0x00, 0x49, 0x25, 0x5A, 0x06, 0x6A, 0x54 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_8200000 = {
+ { 0x00, 0x1C, 0x0A, 0x8B, 0x46, 0xD8, 0x01, 0xB6, 0xC2, 0x89, 0x84, 0x99, 0x22 },
+ { 0x00, 0x1C, 0x03, 0xBB, 0xB6, 0x18, 0x01, 0xF8, 0xC2, 0x58, 0x84, 0x91, 0x19 },
+ { 0x00, 0x1C, 0x06, 0xBC, 0x30, 0xE0, 0x00, 0x38, 0xC2, 0x12, 0x04, 0x21, 0x11 },
+ { 0x00, 0x1C, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x04, 0x02, 0x01 },
+ { 0x00, 0x1C, 0x17, 0xBD, 0xB0, 0xD8, 0x00, 0x06, 0xC1, 0x91, 0x44, 0x0A, 0x0A },
+ { 0x00, 0x1C, 0x1D, 0x0D, 0x87, 0x18, 0x00, 0x36, 0xC1, 0x44, 0x84, 0x26, 0x0A },
+ { 0x00, 0x1C, 0x0B, 0x2A, 0x06, 0xD8, 0x01, 0xC0, 0x01, 0x06, 0x84, 0x80, 0x11 },
+ { 0x00, 0x1C, 0x02, 0x59, 0x25, 0xD8, 0x01, 0x86, 0xC1, 0xAA, 0x44, 0x85, 0x21 },
+ { 0x00, 0x1C, 0x0A, 0x8B, 0x46, 0xD8, 0x01, 0xB6, 0xC2, 0x89, 0x84, 0x99, 0x22 },
+ { 0x00, 0x1C, 0x0E, 0x17, 0x86, 0xE0, 0x0B, 0xC6, 0xC2, 0x8A, 0x06, 0x8A, 0x24 },
+ { 0x00, 0x1C, 0x17, 0x97, 0x7F, 0x00, 0x0B, 0x80, 0xC2, 0x54, 0x06, 0x41, 0x09 },
+ { 0x00, 0x1C, 0x0B, 0xD6, 0xDC, 0x94, 0x0B, 0x6E, 0xC2, 0x6A, 0x86, 0x55, 0x29 },
+ { 0x00, 0x1C, 0x05, 0x76, 0xE6, 0xC0, 0x0C, 0x36, 0xC2, 0x5A, 0x06, 0x25, 0x1A },
+ { 0x00, 0x1C, 0x1A, 0x99, 0x2D, 0xB8, 0x0D, 0x80, 0x02, 0x99, 0x86, 0x40, 0x21 },
+ { 0x00, 0x1C, 0x07, 0xB9, 0xFF, 0xE0, 0x0E, 0x3F, 0x02, 0x95, 0x06, 0x24, 0x12 },
+ { 0x00, 0x1C, 0x1F, 0xB9, 0x26, 0xE0, 0x01, 0xB6, 0xC2, 0x6A, 0x04, 0xAA, 0x24 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_3300000 = {
+ { 0x00, 0x1C, 0x0D, 0x00, 0x00, 0x72, 0x12, 0x49, 0x91, 0x99, 0x95, 0x95, 0x9A },
+ { 0x00, 0x1C, 0x0E, 0x40, 0x00, 0x00, 0x92, 0x4A, 0x6D, 0x99, 0xA5, 0x9A, 0xA4 },
+ { 0x00, 0x1C, 0x19, 0xB0, 0x01, 0x24, 0x92, 0x53, 0xC1, 0x9A, 0xA5, 0x9A, 0x2B },
+ { 0x00, 0x1C, 0x0D, 0x20, 0x01, 0x2C, 0x12, 0x52, 0x81, 0x99, 0x45, 0xA5, 0x12 },
+ { 0x00, 0x1C, 0x10, 0x50, 0x02, 0x70, 0x12, 0x49, 0x71, 0x99, 0x85, 0xA6, 0x5B },
+ { 0x00, 0x1C, 0x1C, 0xE0, 0x04, 0xB4, 0x12, 0x49, 0x29, 0x9A, 0x85, 0xA9, 0x63 },
+ { 0x00, 0x1C, 0x05, 0x10, 0x04, 0xD8, 0x14, 0x93, 0x91, 0x95, 0x45, 0x5A, 0x4A },
+ { 0x00, 0x1C, 0x16, 0xB0, 0x02, 0x70, 0x14, 0xB8, 0x01, 0x96, 0x85, 0x50, 0x18 },
+ { 0x00, 0x1C, 0x0D, 0x00, 0x00, 0x72, 0x12, 0x49, 0x91, 0x99, 0x95, 0x95, 0x9A },
+ { 0x00, 0x1C, 0x11, 0x70, 0x09, 0x29, 0x12, 0xDC, 0xC1, 0x99, 0x55, 0x66, 0x12 },
+ { 0x00, 0x1C, 0x02, 0x50, 0x0A, 0x49, 0x93, 0x24, 0x91, 0x99, 0xA5, 0x65, 0xA2 },
+ { 0x00, 0x1C, 0x1D, 0x20, 0x0B, 0x6D, 0x93, 0x30, 0xC1, 0x95, 0xA5, 0x91, 0x19 },
+ { 0x00, 0x1C, 0x0A, 0x80, 0x0A, 0x92, 0x12, 0xDE, 0xC1, 0x95, 0xA5, 0x99, 0x1A },
+ { 0x00, 0x1C, 0x14, 0x70, 0x09, 0x24, 0x92, 0xE4, 0x91, 0x96, 0x55, 0xA9, 0x53 },
+ { 0x00, 0x1C, 0x1E, 0x70, 0x00, 0x04, 0x92, 0xAD, 0xA1, 0x9A, 0x95, 0x99, 0x22 },
+ { 0x00, 0x1C, 0x13, 0x50, 0x00, 0x30, 0x12, 0x9B, 0x71, 0x9A, 0x85, 0xAA, 0xA5 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_5420000 = {
+ { 0x00, 0x1C, 0x09, 0xF3, 0x30, 0xD8, 0x03, 0xB6, 0xC1, 0x92, 0x46, 0x95, 0x12 },
+ { 0x00, 0x1C, 0x1B, 0xA3, 0x40, 0xE0, 0x03, 0x2D, 0xC1, 0x82, 0x06, 0xA9, 0x14 },
+ { 0x00, 0x1C, 0x10, 0x32, 0x00, 0x00, 0x02, 0xE4, 0x81, 0x00, 0x06, 0xA9, 0x04 },
+ { 0x00, 0x1C, 0x0D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x81, 0x69, 0x86, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x04, 0x93, 0x24, 0x92, 0x02, 0xAD, 0x01, 0x66, 0xA6, 0xA8, 0x24 },
+ { 0x00, 0x1C, 0x03, 0x13, 0x24, 0x92, 0x02, 0x94, 0x91, 0x5A, 0x56, 0xAA, 0x96 },
+ { 0x00, 0x1C, 0x1B, 0x62, 0xDB, 0x72, 0x02, 0x4B, 0x91, 0x66, 0x56, 0x99, 0x94 },
+ { 0x00, 0x1C, 0x1C, 0x92, 0xF8, 0xE0, 0x02, 0x55, 0x01, 0x62, 0x06, 0x98, 0x13 },
+ { 0x00, 0x1C, 0x09, 0xF3, 0x30, 0xD8, 0x03, 0xB6, 0xC1, 0x92, 0x46, 0x95, 0x12 },
+ { 0x00, 0x1C, 0x16, 0xD2, 0x9B, 0x6E, 0x02, 0x53, 0x01, 0xA5, 0x96, 0x68, 0x1B },
+ { 0x00, 0x1C, 0x1F, 0x52, 0xA5, 0xB8, 0x02, 0x4A, 0x6D, 0x9A, 0x86, 0x69, 0x63 },
+ { 0x00, 0x1C, 0x19, 0xB2, 0x92, 0x72, 0x02, 0x92, 0x91, 0x9A, 0x56, 0x59, 0x5A },
+ { 0x00, 0x1C, 0x15, 0x32, 0x93, 0x6E, 0x02, 0xA8, 0xC1, 0x95, 0x66, 0x61, 0x12 },
+ { 0x00, 0x1C, 0x0D, 0x82, 0xDB, 0x6C, 0x02, 0x93, 0x71, 0xA5, 0x46, 0x6A, 0x95 },
+ { 0x00, 0x1C, 0x19, 0x02, 0xE4, 0x92, 0x02, 0xE5, 0xA1, 0x9A, 0x96, 0x66, 0x23 },
+ { 0x00, 0x1C, 0x1B, 0xF2, 0xDB, 0x98, 0x03, 0x24, 0x91, 0x96, 0x86, 0x65, 0x9B }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_5500000 = {
+ { 0x00, 0x1C, 0x19, 0x02, 0xE4, 0x92, 0x02, 0xE5, 0xA1, 0x9A, 0x96, 0x66, 0x23 },
+ { 0x00, 0x1C, 0x1B, 0xF2, 0xDB, 0x98, 0x03, 0x24, 0x91, 0x96, 0x86, 0x65, 0x9B },
+ { 0x00, 0x1C, 0x09, 0xF3, 0x30, 0xD8, 0x03, 0xB6, 0xC1, 0x92, 0x46, 0x95, 0x12 },
+ { 0x00, 0x1C, 0x1B, 0xA3, 0x40, 0xE0, 0x03, 0x2D, 0xC1, 0x82, 0x06, 0xA9, 0x14 },
+ { 0x00, 0x1C, 0x10, 0x32, 0x00, 0x00, 0x02, 0xE4, 0x81, 0x00, 0x06, 0xA9, 0x04 },
+ { 0x00, 0x1C, 0x0D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x81, 0x69, 0x86, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x04, 0x93, 0x24, 0x92, 0x02, 0xAD, 0x01, 0x66, 0xA6, 0xA8, 0x24 },
+ { 0x00, 0x1C, 0x03, 0x13, 0x24, 0x92, 0x02, 0x94, 0x91, 0x5A, 0x56, 0xAA, 0x96 },
+ { 0x00, 0x1C, 0x19, 0x02, 0xE4, 0x92, 0x02, 0xE5, 0xA1, 0x9A, 0x96, 0x66, 0x23 },
+ { 0x00, 0x1C, 0x17, 0x12, 0x92, 0x98, 0x02, 0x5B, 0x71, 0xAA, 0x86, 0x56, 0x6A },
+ { 0x00, 0x1C, 0x11, 0x92, 0x92, 0x00, 0x02, 0x5B, 0x91, 0xA4, 0x06, 0x65, 0x93 },
+ { 0x00, 0x1C, 0x08, 0x72, 0xA6, 0xD8, 0x02, 0x49, 0x29, 0xA5, 0x86, 0x65, 0x5A },
+ { 0x00, 0x1C, 0x0E, 0x72, 0xA6, 0xC0, 0x02, 0x4A, 0x49, 0x95, 0x06, 0x6A, 0x8D },
+ { 0x00, 0x1C, 0x0C, 0x02, 0x92, 0x6D, 0x82, 0x9B, 0x6D, 0x99, 0x96, 0x55, 0x59 },
+ { 0x00, 0x1C, 0x0B, 0x52, 0x92, 0x6D, 0x82, 0xA0, 0xC1, 0x96, 0x66, 0x61, 0x1A },
+ { 0x00, 0x1C, 0x08, 0xD2, 0xE7, 0x00, 0x02, 0x92, 0x4D, 0xA8, 0x06, 0x6A, 0x9D }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_5200000 = {
+ { 0x00, 0x1C, 0x09, 0x42, 0xDC, 0xE0, 0x02, 0x4A, 0x71, 0x69, 0x06, 0x95, 0x93 },
+ { 0x00, 0x1C, 0x01, 0xF2, 0xED, 0xB4, 0x02, 0x52, 0xC1, 0x69, 0x46, 0x95, 0x12 },
+ { 0x00, 0x1C, 0x0C, 0x02, 0xE7, 0xE0, 0x02, 0x65, 0x01, 0x5A, 0x06, 0x94, 0x12 },
+ { 0x00, 0x1C, 0x1F, 0x62, 0xDB, 0x6D, 0x82, 0x52, 0x51, 0x55, 0x56, 0xA6, 0x44 },
+ { 0x00, 0x1C, 0x01, 0x32, 0x90, 0xD8, 0x02, 0x4A, 0x51, 0x61, 0x46, 0xA5, 0x4B },
+ { 0x00, 0x1C, 0x16, 0x32, 0x9C, 0x94, 0x00, 0x00, 0x29, 0x69, 0x86, 0x55, 0x59 },
+ { 0x00, 0x1C, 0x17, 0x72, 0xA4, 0xB8, 0x00, 0x03, 0x6D, 0x65, 0x86, 0x55, 0x92 },
+ { 0x00, 0x1C, 0x0A, 0x22, 0xA4, 0x92, 0x00, 0x00, 0x01, 0x5A, 0x96, 0x59, 0x9B },
+ { 0x00, 0x1C, 0x09, 0x42, 0xDC, 0xE0, 0x02, 0x4A, 0x71, 0x69, 0x06, 0x95, 0x93 },
+ { 0x00, 0x1C, 0x1B, 0x32, 0xE5, 0xD8, 0x02, 0xDD, 0xA1, 0x96, 0x46, 0x65, 0x12 },
+ { 0x00, 0x1C, 0x0C, 0x83, 0x25, 0xE0, 0x03, 0x70, 0xC1, 0xA5, 0x06, 0x61, 0x12 },
+ { 0x00, 0x1C, 0x0A, 0x53, 0x25, 0xB4, 0x03, 0x47, 0x01, 0x9A, 0x46, 0x88, 0x1B },
+ { 0x00, 0x1C, 0x1E, 0x43, 0xBF, 0xE0, 0x02, 0xDB, 0xC1, 0xAA, 0x06, 0x9A, 0x24 },
+ { 0x00, 0x1C, 0x1F, 0x13, 0x87, 0x18, 0x02, 0x93, 0x91, 0x44, 0x86, 0x96, 0x8C },
+ { 0x00, 0x1C, 0x0B, 0x23, 0x76, 0x18, 0x02, 0x9B, 0x6D, 0x54, 0x46, 0x9A, 0x44 },
+ { 0x00, 0x1C, 0x19, 0xD3, 0x00, 0xD8, 0x02, 0x9B, 0x91, 0x42, 0x86, 0xAA, 0x96 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_6300000 = {
+ { 0x00, 0x1C, 0x1D, 0x04, 0x95, 0x00, 0x04, 0xE8, 0xC1, 0x58, 0x06, 0x62, 0x0B },
+ { 0x00, 0x1C, 0x0A, 0x02, 0x49, 0x54, 0x05, 0x38, 0xC1, 0xA9, 0x86, 0x51, 0x21 },
+ { 0x00, 0x1C, 0x13, 0x12, 0x4B, 0x6D, 0x85, 0x80, 0xC1, 0xA6, 0x56, 0x42, 0x1A },
+ { 0x00, 0x1C, 0x0E, 0x42, 0x49, 0x32, 0x05, 0x78, 0xC1, 0xA5, 0x96, 0xA1, 0x1B },
+ { 0x00, 0x1C, 0x09, 0x12, 0x53, 0xB4, 0x05, 0x25, 0xC1, 0xA6, 0x46, 0xAA, 0x1D },
+ { 0x00, 0x1C, 0x11, 0xD2, 0x64, 0x18, 0x04, 0xE4, 0xC1, 0xA8, 0x46, 0xA5, 0x1B },
+ { 0x00, 0x1C, 0x0D, 0x12, 0x64, 0x94, 0x04, 0x96, 0x01, 0x99, 0x46, 0x98, 0x13 },
+ { 0x00, 0x1C, 0x16, 0x32, 0x52, 0x6C, 0x04, 0xA8, 0xC1, 0x9A, 0x46, 0x92, 0x1B },
+ { 0x00, 0x1C, 0x1D, 0x04, 0x95, 0x00, 0x04, 0xE8, 0xC1, 0x58, 0x06, 0x62, 0x0B },
+ { 0x00, 0x1C, 0x04, 0xD5, 0x25, 0xB8, 0x07, 0x36, 0xC1, 0x66, 0x46, 0x99, 0x13 },
+ { 0x00, 0x1C, 0x0A, 0x84, 0xDB, 0xD8, 0x06, 0xDB, 0x91, 0x6A, 0x46, 0x99, 0x9C },
+ { 0x00, 0x1C, 0x08, 0xB4, 0xF8, 0x00, 0x06, 0xDB, 0xC1, 0x50, 0x06, 0xA5, 0x03 },
+ { 0x00, 0x1C, 0x16, 0x54, 0xDB, 0x92, 0x04, 0x93, 0x61, 0x55, 0x96, 0x59, 0x0A },
+ { 0x00, 0x1C, 0x0A, 0x44, 0x92, 0xD8, 0x04, 0xAD, 0xC1, 0x66, 0x86, 0x56, 0x1A },
+ { 0x00, 0x1C, 0x00, 0x54, 0xA5, 0xC0, 0x04, 0x9D, 0x01, 0x66, 0x06, 0x68, 0x13 },
+ { 0x00, 0x1C, 0x13, 0xF4, 0x9B, 0xA0, 0x04, 0x92, 0x49, 0x59, 0x06, 0x6A, 0x8D }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_4400000 = {
+ { 0x00, 0x1C, 0x19, 0x42, 0x49, 0x54, 0x00, 0xDB, 0x6D, 0x59, 0x46, 0x55, 0x49 },
+ { 0x00, 0x1C, 0x10, 0xB2, 0x4B, 0x72, 0x00, 0xDD, 0xC1, 0x59, 0x56, 0x69, 0x0B },
+ { 0x00, 0x1C, 0x09, 0x82, 0x4A, 0x4D, 0x81, 0x78, 0xC1, 0x56, 0x56, 0x61, 0x0A },
+ { 0x00, 0x1C, 0x18, 0xD2, 0x49, 0x54, 0x01, 0x6F, 0x01, 0x56, 0x46, 0x98, 0x0B },
+ { 0x00, 0x1C, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xE0, 0xC1, 0xAA, 0x56, 0x92, 0x23 },
+ { 0x00, 0x1C, 0x0E, 0x40, 0x00, 0x4D, 0x80, 0xDB, 0x61, 0xA9, 0x56, 0xAA, 0x1D },
+ { 0x00, 0x1C, 0x11, 0x30, 0x01, 0x25, 0x80, 0x9B, 0x61, 0xAA, 0x96, 0x9A, 0x2C },
+ { 0x00, 0x1C, 0x16, 0xF0, 0x01, 0x38, 0x00, 0x92, 0x51, 0xA9, 0x46, 0xA5, 0x9C },
+ { 0x00, 0x1C, 0x19, 0x42, 0x49, 0x54, 0x00, 0xDB, 0x6D, 0x59, 0x46, 0x55, 0x49 },
+ { 0x00, 0x1C, 0x0B, 0x22, 0x52, 0x6E, 0x00, 0x4A, 0x61, 0x66, 0x66, 0x55, 0x19 },
+ { 0x00, 0x1C, 0x1A, 0x12, 0x5C, 0x00, 0x00, 0x52, 0x91, 0x64, 0x06, 0x56, 0x8B },
+ { 0x00, 0x1C, 0x00, 0x72, 0x6D, 0xD8, 0x00, 0x6D, 0xA1, 0x66, 0x46, 0x56, 0x12 },
+ { 0x00, 0x1C, 0x09, 0xE2, 0x65, 0xD8, 0x00, 0x54, 0x91, 0x56, 0x86, 0x69, 0x94 },
+ { 0x00, 0x1C, 0x09, 0x02, 0x5B, 0x6C, 0x00, 0x4B, 0x81, 0x56, 0x46, 0x69, 0x0B },
+ { 0x00, 0x1C, 0x02, 0xB2, 0x54, 0xE0, 0x00, 0x92, 0x6D, 0x59, 0x06, 0x59, 0x8B },
+ { 0x00, 0x1C, 0x1D, 0xC2, 0x52, 0x92, 0x00, 0xA4, 0x91, 0x56, 0x96, 0x66, 0x94 }
+};
+
+XC4000_SCODE_TABLE XC4000_scode_table_5000000 = {
+ { 0x00, 0x1C, 0x08, 0x82, 0x9C, 0xB4, 0x00, 0x00, 0x29, 0x66, 0x46, 0x56, 0x93 },
+ { 0x00, 0x1C, 0x1B, 0x22, 0xB8, 0xD8, 0x00, 0x02, 0x81, 0x61, 0x46, 0x5A, 0x0B },
+ { 0x00, 0x1C, 0x00, 0xD2, 0x9B, 0x92, 0x00, 0x00, 0x01, 0x5A, 0x96, 0x5A, 0x9C },
+ { 0x00, 0x1C, 0x19, 0x22, 0x92, 0x6D, 0x80, 0x0A, 0x49, 0x5A, 0xA6, 0x5A, 0x63 },
+ { 0x00, 0x1C, 0x1F, 0x52, 0x94, 0xD8, 0x00, 0x12, 0x6D, 0x56, 0x46, 0x5A, 0x8C },
+ { 0x00, 0x1C, 0x1C, 0xE2, 0x49, 0x25, 0x00, 0x25, 0xA1, 0x6A, 0x56, 0x6A, 0x1C },
+ { 0x00, 0x1C, 0x06, 0xB2, 0x4A, 0x92, 0x00, 0x12, 0x49, 0x69, 0x56, 0x6A, 0x95 },
+ { 0x00, 0x1C, 0x1A, 0x02, 0x4B, 0x00, 0x00, 0x09, 0x31, 0x64, 0x06, 0x69, 0x8C },
+ { 0x00, 0x1C, 0x08, 0x82, 0x9C, 0xB4, 0x00, 0x00, 0x29, 0x66, 0x46, 0x56, 0x93 },
+ { 0x00, 0x1C, 0x05, 0xB3, 0x6E, 0xD8, 0x02, 0xA5, 0xC1, 0x56, 0x86, 0x9A, 0x14 },
+ { 0x00, 0x1C, 0x0D, 0x13, 0x37, 0xE0, 0x02, 0x92, 0x4D, 0x56, 0x06, 0xA6, 0x8D },
+ { 0x00, 0x1C, 0x14, 0xD2, 0xD8, 0xD8, 0x02, 0x4B, 0x81, 0x62, 0x86, 0x95, 0x1A },
+ { 0x00, 0x1C, 0x0A, 0xD2, 0xED, 0xB8, 0x02, 0x53, 0x6D, 0x65, 0x46, 0x96, 0x4B },
+ { 0x00, 0x1C, 0x1B, 0xD2, 0xDB, 0x72, 0x02, 0x47, 0x01, 0x5A, 0x56, 0x84, 0x12 },
+ { 0x00, 0x1C, 0x1D, 0xD2, 0x92, 0x98, 0x02, 0x54, 0xC1, 0x69, 0x46, 0xAA, 0x15 },
+ { 0x00, 0x1C, 0x09, 0xB2, 0x92, 0x49, 0x02, 0x4B, 0x91, 0x66, 0xA6, 0xA9, 0xA5 }
+};
+
+// For FM, only used Dcode = 0
+XC4000_SCODE_TABLE XC4000_scode_table_10700000 = {
+ { 0x00, 0x1C, 0x1D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x82, 0x96, 0x46, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x1D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x82, 0x96, 0x46, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x1D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x82, 0x96, 0x46, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x1D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x82, 0x96, 0x46, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x1D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x82, 0x96, 0x46, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x1D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x82, 0x96, 0x46, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x1D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x82, 0x96, 0x46, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x1D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x82, 0x96, 0x46, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x1D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x82, 0x96, 0x46, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x1D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x82, 0x96, 0x46, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x1D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x82, 0x96, 0x46, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x1D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x82, 0x96, 0x46, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x1D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x82, 0x96, 0x46, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x1D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x82, 0x96, 0x46, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x1D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x82, 0x96, 0x46, 0x9A, 0x1C },
+ { 0x00, 0x1C, 0x1D, 0x03, 0x6E, 0xD8, 0x02, 0x93, 0x82, 0x96, 0x46, 0x9A, 0x1C },
+};
+
+// For digital only!!! Edward Yun 05/17/2007
+XC4000_SCODE_TABLE XC4000_scode_table_3600000 = {
+ { 0x00, 0x1C, 0x09, 0x40, 0x1b, 0x6d, 0x92, 0x4a, 0xa1, 0x95, 0x55, 0x65, 0x09 },
+ { 0x00, 0x1C, 0x1A, 0xA0, 0x1F, 0xE0, 0x12, 0x56, 0x01, 0x95, 0x05, 0x68, 0x0A },
+ { 0x00, 0x1C, 0x1D, 0xE0, 0x24, 0x92, 0x12, 0x5D, 0xA1, 0x9A, 0x55, 0x56, 0x19 },
+ { 0x00, 0x1C, 0x1b, 0x20, 0x07, 0x18, 0x12, 0x52, 0x49, 0x84, 0x85, 0x55, 0x91 },
+ { 0x00, 0x1C, 0x02, 0xb0, 0x1b, 0x6e, 0x00, 0x00, 0x25, 0xA5, 0x56, 0xaa, 0x96 },
+ { 0x00, 0x1C, 0x04, 0xd0, 0x18, 0xd8, 0x00, 0x01, 0x4d, 0xA1, 0x86, 0xa9, 0x9d },
+ { 0x00, 0x1C, 0x1d, 0xb0, 0x13, 0x6e, 0x00, 0x00, 0x6d, 0xA5, 0x56, 0xa5, 0x53 },
+ { 0x00, 0x1C, 0x1a, 0x80, 0x10, 0xd8, 0x00, 0x0a, 0x6d, 0xA2, 0x46, 0xa9, 0x9d },
+ { 0x00, 0x1C, 0x09, 0x40, 0x1b, 0x6d, 0x92, 0x4a, 0xa1, 0x95, 0x55, 0x65, 0x09 },
+ { 0x00, 0x1C, 0x18, 0x70, 0x0d, 0xb4, 0x13, 0x6e, 0xc1, 0x95, 0x85, 0x99, 0x12 },
+ { 0x00, 0x1C, 0x1e, 0x40, 0x0c, 0xb4, 0x12, 0x30, 0x01, 0x99, 0x45, 0x10, 0x10 },
+ { 0x00, 0x1C, 0x02, 0x50, 0x0a, 0x49, 0x93, 0x24, 0x91, 0x99, 0xa5, 0x65, 0xa2 },
+ { 0x00, 0x1C, 0x19, 0x00, 0x09, 0x70, 0x12, 0xdb, 0x61, 0x9a, 0x45, 0x59, 0x19 },
+ { 0x00, 0x1C, 0x19, 0x90, 0x12, 0x40, 0x12, 0x92, 0x4d, 0x95, 0x05, 0x66, 0x8b },
+ { 0x00, 0x1C, 0x17, 0x10, 0x13, 0x72, 0x12, 0xb7, 0x01, 0x95, 0x95, 0x64, 0x11 },
+ { 0x00, 0x1C, 0x0a, 0x60, 0x13, 0x6e, 0x12, 0x49, 0x49, 0x9a, 0x95, 0x6a, 0x63 },
+};
+
+
+// For digital only!!! Edward Yun 05/17/2007
+XC4000_SCODE_TABLE XC4000_scode_table_3880000 = {
+ { 0x00, 0x1C, 0x02, 0x10, 0x0a, 0x4e, 0x00, 0x1b, 0x71, 0xA5, 0x66, 0x95, 0x5a },
+ { 0x00, 0x1C, 0x0E, 0x40, 0x0D, 0xB8, 0x00, 0x0B, 0x71, 0xAA, 0x86, 0x95, 0xAB },
+ { 0x00, 0x1C, 0x0C, 0x30, 0x0A, 0x78, 0x00, 0x00, 0x2D, 0xA9, 0x46, 0x9A, 0x5C },
+ { 0x00, 0x1C, 0x08, 0x20, 0x00, 0x12, 0x00, 0x00, 0x91, 0xA5, 0x56, 0x95, 0x52 },
+ { 0x00, 0x1C, 0x08, 0x20, 0x00, 0x12, 0x00, 0x00, 0x91, 0xA5, 0x56, 0x95, 0x52 },
+ { 0x00, 0x1C, 0x16, 0x30, 0x00, 0x29, 0x00, 0x49, 0x49, 0xA6, 0x56, 0xA6, 0x5C },
+ { 0x00, 0x1C, 0x1E, 0x40, 0x01, 0x6E, 0x00, 0x6D, 0xC1, 0xA5, 0x66, 0xAA, 0x1D },
+ { 0x00, 0x1C, 0x0D, 0x00, 0x01, 0x29, 0x80, 0x5D, 0xA1, 0xA6, 0xA6, 0x95, 0x2A },
+ { 0x00, 0x1C, 0x02, 0x10, 0x0a, 0x4e, 0x00, 0x1b, 0x71, 0xA5, 0x66, 0x95, 0x5a },
+ { 0x00, 0x1C, 0x1B, 0x20, 0x07, 0x18, 0x12, 0x52, 0x49, 0x84, 0x85, 0x55, 0x91 },
+ { 0x00, 0x1C, 0x0D, 0x00, 0x2D, 0xD8, 0x12, 0x4C, 0x81, 0xAA, 0x45, 0x56, 0x21 },
+ { 0x00, 0x1C, 0x04, 0xD0, 0x18, 0xD8, 0x00, 0x01, 0x4D, 0xA1, 0x86, 0xA9, 0x9D },
+ { 0x00, 0x1C, 0x1E, 0x40, 0x1B, 0x6C, 0x00, 0x02, 0x6D, 0xAA, 0x86, 0xA5, 0x6B },
+ { 0x00, 0x1C, 0x1A, 0x80, 0x10, 0xD8, 0x00, 0x0A, 0x6D, 0xA2, 0x46, 0xA9, 0x9D },
+ { 0x00, 0x1C, 0x0E, 0xF0, 0x12, 0x4A, 0x00, 0x09, 0xC1, 0xA9, 0x66, 0xA5, 0x23 },
+ { 0x00, 0x1C, 0x01, 0x90, 0x09, 0x25, 0x80, 0x12, 0xA1, 0xA5, 0x66, 0xA6, 0x1C },
+};
+
+
+// For digital only!!! Edward Yun 05/17/2007
+XC4000_SCODE_TABLE XC4000_scode_table_4060000 = {
+ { 0x00, 0x1C, 0x14, 0x30, 0x00, 0x05, 0x80, 0x53, 0xc1, 0xa6, 0x96, 0xa5, 0x23 },
+ { 0x00, 0x1C, 0x0D, 0x00, 0x01, 0x29, 0x80, 0x5D, 0xA1, 0xA6, 0xA6, 0x95, 0x2A },
+ { 0x00, 0x1C, 0x0A, 0x10, 0x03, 0x6E, 0x00, 0x52, 0x71, 0xA5, 0x56, 0x95, 0x93 },
+ { 0x00, 0x1C, 0x09, 0x90, 0x02, 0x54, 0x00, 0x49, 0x2D, 0xA9, 0x86, 0x95, 0xA3 },
+ { 0x00, 0x1C, 0x0A, 0x80, 0x01, 0x4D, 0x80, 0x86, 0xC1, 0xAA, 0x66, 0x89, 0x2B },
+ { 0x00, 0x1C, 0x05, 0xB0, 0x00, 0x0D, 0x80, 0x9B, 0x71, 0xA9, 0x56, 0x95, 0x5A },
+ { 0x00, 0x1C, 0x0C, 0xD0, 0x00, 0x29, 0x80, 0xC6, 0xC1, 0xAA, 0x66, 0x86, 0x2B },
+ { 0x00, 0x1C, 0x1D, 0x02, 0x49, 0x90, 0x01, 0x6E, 0xC1, 0x55, 0x86, 0xA9, 0x0C },
+ { 0x00, 0x1C, 0x14, 0x30, 0x00, 0x05, 0x80, 0x53, 0xc1, 0xa6, 0x96, 0xa5, 0x23 },
+ { 0x00, 0x1C, 0x01, 0x90, 0x09, 0x25, 0x80, 0x12, 0xA1, 0xA5, 0x66, 0xA6, 0x1C },
+ { 0x00, 0x1C, 0x02, 0x10, 0x0A, 0x4E, 0x00, 0x1B, 0x71, 0xA5, 0x66, 0x95, 0x5A },
+ { 0x00, 0x1C, 0x1D, 0x00, 0x0B, 0xB4, 0x00, 0x09, 0x4D, 0xA5, 0x46, 0x9A, 0x95 },
+ { 0x00, 0x1C, 0x0C, 0x30, 0x0A, 0x78, 0x00, 0x00, 0x2D, 0xA9, 0x46, 0x9A, 0x5C },
+ { 0x00, 0x1C, 0x0E, 0x30, 0x09, 0x29, 0x00, 0x01, 0x49, 0xA9, 0x96, 0x99, 0x63 },
+ { 0x00, 0x1C, 0x08, 0x20, 0x00, 0x12, 0x00, 0x00, 0x91, 0xA5, 0x56, 0x95, 0x52 },
+ { 0x00, 0x1C, 0x08, 0x20, 0x00, 0x12, 0x00, 0x00, 0x91, 0xA5, 0x56, 0x95, 0x52 },
+};
+
+
+// For digital only!!! Edward Yun 05/17/2007
+XC4000_SCODE_TABLE XC4000_scode_table_4560000 = {
+ { 0x00, 0x1C, 0x0e, 0x42, 0x46, 0x00, 0x00, 0x65, 0xa1, 0x44, 0x06, 0x65, 0x02 },
+ { 0x00, 0x1C, 0x1A, 0x82, 0x5B, 0xD8, 0x00, 0x54, 0x91, 0x66, 0x46, 0x56, 0x93 },
+ { 0x00, 0x1C, 0x0B, 0x22, 0x52, 0x6E, 0x00, 0x4A, 0x61, 0x66, 0x66, 0x55, 0x19 },
+ { 0x00, 0x1C, 0x06, 0x72, 0x55, 0xB4, 0x00, 0x00, 0x25, 0x66, 0x46, 0x6A, 0x54 },
+ { 0x00, 0x1C, 0x1D, 0x02, 0x49, 0x32, 0x00, 0x03, 0x91, 0x65, 0x66, 0x66, 0x53 },
+ { 0x00, 0x1C, 0x01, 0xB2, 0x4A, 0x78, 0x00, 0x09, 0x25, 0x66, 0x86, 0x6A, 0x9D },
+ { 0x00, 0x1C, 0x0D, 0x22, 0x4A, 0x50, 0x00, 0x09, 0x61, 0x69, 0x46, 0x65, 0x12 },
+ { 0x00, 0x1C, 0x1C, 0xE2, 0x49, 0x25, 0x00, 0x25, 0xA1, 0x6A, 0x56, 0x6A, 0x1C },
+ { 0x00, 0x1C, 0x0e, 0x42, 0x46, 0x00, 0x00, 0x65, 0xa1, 0x44, 0x06, 0x65, 0x02 },
+ { 0x00, 0x1C, 0x1B, 0x22, 0x4A, 0x49, 0x00, 0x38, 0xC1, 0x55, 0x66, 0x12, 0x0A },
+ { 0x00, 0x1C, 0x10, 0xB2, 0x4B, 0x72, 0x00, 0xDD, 0xC1, 0x59, 0x56, 0x69, 0x0B },
+ { 0x00, 0x1C, 0x1A, 0xA2, 0x4A, 0xC0, 0x00, 0xFF, 0x01, 0x5A, 0x06, 0x54, 0x11 },
+ { 0x00, 0x1C, 0x0A, 0x62, 0x49, 0x29, 0x00, 0x9B, 0x71, 0x5A, 0x96, 0x6A, 0x5C },
+ { 0x00, 0x1C, 0x1F, 0x12, 0x56, 0xE0, 0x00, 0x9B, 0x91, 0x59, 0x06, 0x56, 0x4A },
+ { 0x00, 0x1C, 0x11, 0x92, 0x52, 0x49, 0x80, 0x92, 0x01, 0x59, 0xA6, 0x54, 0x19 },
+ { 0x00, 0x1C, 0x09, 0x72, 0x5B, 0x98, 0x00, 0x49, 0x49, 0x59, 0x86, 0x65, 0x52 },
+};
+
+
+// For digital only!!! Edward Yun 05/17/2007
+XC4000_SCODE_TABLE XC4000_scode_table_4700000 = {
+ { 0x00, 0x1C, 0x1D, 0x02, 0x49, 0x32, 0x00, 0x03, 0x91, 0x65, 0x66, 0x66, 0x53 },
+ { 0x00, 0x1C, 0x01, 0xB2, 0x4A, 0x78, 0x00, 0x09, 0x25, 0x66, 0x86, 0x6A, 0x9D },
+ { 0x00, 0x1C, 0x0D, 0x22, 0x4A, 0x50, 0x00, 0x09, 0x61, 0x69, 0x46, 0x65, 0x12 },
+ { 0x00, 0x1C, 0x1C, 0xE2, 0x49, 0x25, 0x00, 0x25, 0xA1, 0x6A, 0x56, 0x6A, 0x1C },
+ { 0x00, 0x1C, 0x0E, 0xB2, 0x97, 0x00, 0x00, 0x13, 0x81, 0x54, 0x06, 0x5A, 0x03 },
+ { 0x00, 0x1C, 0x0D, 0x02, 0x9B, 0x78, 0x00, 0x0D, 0xA1, 0x56, 0x46, 0x56, 0x0A },
+ { 0x00, 0x1C, 0x0A, 0x22, 0xA4, 0x92, 0x00, 0x00, 0x01, 0x5A, 0x96, 0x59, 0x9B },
+ { 0x00, 0x1C, 0x0E, 0x22, 0xA6, 0xC0, 0x00, 0x02, 0x71, 0x65, 0x06, 0x55, 0x49 },
+ { 0x00, 0x1C, 0x1D, 0x02, 0x49, 0x32, 0x00, 0x03, 0x91, 0x65, 0x66, 0x66, 0x53 },
+ { 0x00, 0x1C, 0x1F, 0x12, 0x56, 0xE0, 0x00, 0x9B, 0x91, 0x59, 0x06, 0x56, 0x4A },
+ { 0x00, 0x1C, 0x11, 0x92, 0x52, 0x49, 0x80, 0x92, 0x01, 0x59, 0xA6, 0x54, 0x19 },
+ { 0x00, 0x1C, 0x09, 0x72, 0x5B, 0x98, 0x00, 0x49, 0x49, 0x59, 0x86, 0x65, 0x52 },
+ { 0x00, 0x1C, 0x0E, 0x42, 0x46, 0x00, 0x00, 0x65, 0xA1, 0x44, 0x06, 0x65, 0x02 },
+ { 0x00, 0x1C, 0x1A, 0x82, 0x5B, 0xD8, 0x00, 0x54, 0x91, 0x66, 0x46, 0x56, 0x93 },
+ { 0x00, 0x1C, 0x0B, 0x22, 0x52, 0x6E, 0x00, 0x4A, 0x61, 0x66, 0x66, 0x55, 0x19 },
+ { 0x00, 0x1C, 0x06, 0x72, 0x55, 0xB4, 0x00, 0x00, 0x25, 0x66, 0x46, 0x6A, 0x54 },
+};
+
+
+// For digital only!!! Edward Yun 05/17/2007
+XC4000_SCODE_TABLE XC4000_scode_table_6380000 = {
+ { 0x00, 0x1C, 0x1C, 0xF4, 0x86, 0xD8, 0x04, 0x93, 0x71, 0x45, 0x86, 0x65, 0x8B },
+ { 0x00, 0x1C, 0x0A, 0x94, 0x92, 0x54, 0x04, 0xB7, 0x01, 0x65, 0x86, 0x54, 0x11 },
+ { 0x00, 0x1C, 0x0E, 0x44, 0x92, 0x4D, 0x84, 0x92, 0x51, 0x69, 0x66, 0x5A, 0x9C },
+ { 0x00, 0x1C, 0x1F, 0xE4, 0xED, 0xB8, 0x06, 0xDC, 0x81, 0x59, 0x86, 0xA6, 0x14 },
+ { 0x00, 0x1C, 0x1B, 0xE4, 0xDB, 0x92, 0x06, 0xE8, 0xC1, 0x66, 0x96, 0x92, 0x1B },
+ { 0x00, 0x1C, 0x1E, 0x45, 0x2E, 0xD8, 0x07, 0x36, 0xC1, 0x66, 0x46, 0xA9, 0x14 },
+ { 0x00, 0x1C, 0x1D, 0x05, 0xF8, 0xD8, 0x07, 0xB6, 0xC1, 0x51, 0x86, 0xA5, 0x0B },
+ { 0x00, 0x1C, 0x1F, 0xF5, 0xB6, 0x18, 0x07, 0xB6, 0xC1, 0xA8, 0x86, 0x65, 0x22 },
+ { 0x00, 0x1C, 0x1C, 0xF4, 0x86, 0xD8, 0x04, 0x93, 0x71, 0x45, 0x86, 0x65, 0x8B },
+ { 0x00, 0x1C, 0x0B, 0x12, 0x46, 0x18, 0x04, 0x92, 0x6D, 0x84, 0x46, 0x95, 0x4A },
+ { 0x00, 0x1C, 0x0D, 0x02, 0x52, 0x49, 0x84, 0xDB, 0x81, 0xA5, 0x66, 0x99, 0x1B },
+ { 0x00, 0x1C, 0x0A, 0xB2, 0x53, 0x92, 0x05, 0x2E, 0x01, 0xAA, 0x66, 0x98, 0x2B },
+ { 0x00, 0x1C, 0x09, 0x62, 0x49, 0x2D, 0x85, 0xC6, 0x01, 0xA6, 0xA6, 0x88, 0x2B },
+ { 0x00, 0x1C, 0x1B, 0x22, 0x4A, 0x4C, 0x05, 0x2F, 0x01, 0xAA, 0x86, 0x68, 0x2B },
+ { 0x00, 0x1C, 0x0D, 0xD4, 0x92, 0x6C, 0x04, 0xDD, 0x01, 0x56, 0x86, 0x64, 0x12 },
+ { 0x00, 0x1C, 0x13, 0x54, 0x98, 0xD8, 0x04, 0xDE, 0x01, 0x52, 0x46, 0x54, 0x09 },
+};
+
+// For digital only!!! Edward Yun 4/24/2007
+XC4000_SCODE_TABLE XC4000_scode_table_7940000 = {
+ { 0x00, 0x1C, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x04, 0x02, 0x01 },
+ { 0x00, 0x1C, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x04, 0x02, 0x01 },
+ { 0x00, 0x1C, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x04, 0x02, 0x01 },
+ { 0x00, 0x1C, 0x13, 0x9B, 0x86, 0xE0, 0x01, 0xF8, 0xC2, 0x49, 0x04, 0x92, 0x12 },
+ { 0x00, 0x1C, 0x0A, 0x8B, 0x46, 0xD8, 0x01, 0xB6, 0xC2, 0x89, 0x84, 0x99, 0x22 },
+ { 0x00, 0x1C, 0x1F, 0xB9, 0x26, 0xE0, 0x01, 0xB6, 0xC2, 0x6A, 0x04, 0xAA, 0x24 },
+ { 0x00, 0x1C, 0x0A, 0xF9, 0xBF, 0x18, 0x0E, 0x37, 0x02, 0xA4, 0x86, 0x28, 0x23 },
+ { 0x00, 0x1C, 0x09, 0x49, 0x3F, 0xE0, 0x0D, 0xBF, 0x02, 0xA5, 0x06, 0x68, 0x1B },
+ { 0x00, 0x1C, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x04, 0x02, 0x01 },
+ { 0x00, 0x1C, 0x1B, 0x26, 0xFF, 0x18, 0x0D, 0xC6, 0xC1, 0x98, 0x86, 0x89, 0x1B },
+ { 0x00, 0x1C, 0x11, 0x39, 0x25, 0xC0, 0x0D, 0xC0, 0x01, 0x55, 0x06, 0x40, 0x01 },
+ { 0x00, 0x1C, 0x0D, 0x99, 0x46, 0x18, 0x0F, 0xC6, 0xC1, 0x44, 0x86, 0x89, 0x0B },
+ { 0x00, 0x1C, 0x0D, 0x09, 0x86, 0xE0, 0x0E, 0x37, 0x01, 0x85, 0x06, 0x18, 0x0A },
+ { 0x00, 0x1C, 0x0E, 0x49, 0x06, 0x18, 0x01, 0xB8, 0xC1, 0x84, 0x84, 0xA2, 0x13 },
+ { 0x00, 0x1C, 0x1D, 0x9B, 0x87, 0x18, 0x01, 0xF8, 0xC1, 0x44, 0x44, 0xA2, 0x03 },
+ { 0x00, 0x1C, 0x14, 0x3B, 0x40, 0x00, 0x00, 0x37, 0x01, 0x80, 0x04, 0x28, 0x0A },
+};
+
+#endif
+
diff --git a/api/xc4000_standards.h b/api/xc4000_standards.h
new file mode 100644
index 0000000..885989f
--- /dev/null
+++ b/api/xc4000_standards.h
@@ -0,0 +1,127 @@
+//
+// Automatically generated C header file for
+// control of the XC4000 via the i2c interface.
+//
+// Filename : xc4000_standards.h
+// Generated : 9/25/2007 4:58:46 PM
+// Firmware version : 1.2
+//
+// (c) 2007, Xceive Corporation
+//
+
+#ifndef __XC4000_STANDARDS_H
+#define __XC4000_STANDARDS_H
+
+
+// ************************************************************
+// *** Standard with Video/Audio Setting
+// ************************************************************
+
+#define MAX_TV_STANDARD 47
+
+XC_TV_STANDARD XC4000_Standard[MAX_TV_STANDARD] = {
+ {"M/N-NTSC/PAL-BTSC-IF", NULL, 0x80A0, 0x0000, 4.5 },
+ {"M/N-NTSC/PAL-BTSC-IF-NOGD", NULL, 0x8020, 0x0000, 4.5 },
+ {"M/N-NTSC/PAL-A2-IF", NULL, 0x80A0, 0x0000, 4.6 },
+ {"M/N-NTSC/PAL-A2-IF-NOGD", NULL, 0x8020, 0x0000, 4.6 },
+ {"M/N-NTSC/PAL-MTS", NULL, 0x80A0, 0x0078, 4.5 },
+ {"M/N-NTSC/PAL-A2-MONO", NULL, 0x80A0, 0x0078, 4.5 },
+ {"M/N-NTSC/PAL-A2-MONO-NOGD", NULL, 0x8020, 0x0078, 4.5 },
+ {"L-SECAM-NICAM", NULL, 0x0009, 0x8080, 6.20 },
+ {"L-SECAM-AM", NULL, 0x0009, 0xA138, 6.50 },
+ {"L'-SECAM-NICAM", NULL, 0x4009, 0x8080, 6.20 },
+ {"L'-SECAM-AM", NULL, 0x4009, 0xA138, 6.50 },
+ {"FM Radio-INPUT1", NULL, 0x9000, 0x0008, 10.70 },
+ {"FM Radio-INPUT2", NULL, 0x9800, 0x0008, 10.70 },
+ {"DTV6-ATSC-LG-6_0Mhz", NULL, 0x8002, 0x00C0, 6.0 },
+ {"DTV6-ATSC-ATI-6_38Mhz", NULL, 0x8002, 0x00C0, 6.38 },
+ {"DTV6-ATSC-OREN-5_38Mhz", NULL, 0x8002, 0x00C0, 5.58 },
+ {"DTV6-ATSC-OREN-3_6Mhz", NULL, 0x8002, 0x00C0, 3.6 },
+ {"DTV6-ATSC-TOYOTA-3_88Mhz", NULL, 0x8002, 0x00C0, 3.88 },
+ {"DTV6-ATSC-TOYOTA-7_94Mhz", NULL, 0x8002, 0x00C0, 7.94 },
+ {"DTV6-QAM-6_0Mhz", NULL, 0x8002, 0x00C0, 6.0 },
+ {"DTV8-DIBCOM-5_2Mhz", NULL, 0x800B, 0x00C0, 5.2 },
+ {"DTV78-DIBCOM-5_2Mhz", NULL, 0x801B, 0x00C0, 5.2 },
+ {"DTV7-DIBCOM-5_2Mhz", NULL, 0x8007, 0x00C0, 5.2 },
+ {"DTV6-ZARLINK-QAM-4_56Mhz", NULL, 0x8002, 0x00C0, 4.56 },
+ {"DTV8-ZARLINK-4_56Mhz", NULL, 0x800B, 0x00C0, 4.56 },
+ {"DTV78-ZARLINK-4_56Mhz", NULL, 0x801B, 0x00C0, 4.56 },
+ {"DTV7-ZARLINK-4_56Mhz", NULL, 0x8007, 0x00C0, 4.56 },
+ {"DTV8-China-TEMPORARY", NULL, 0x800B, 0x00C0, 5.4 },
+ {"B/G-PAL-NICAM#A", NULL, 0x8159, 0x0004, 5.74 },
+ {"B/G-PAL-NICAM#A-MONO", NULL, 0x8159, 0x0078, 5.5 },
+ {"B/G-PAL-NICAM#B", NULL, 0x8159, 0x0004, 5.74 },
+ {"B/G-PAL-NICAM#B-MONO", NULL, 0x8159, 0x0078, 5.5 },
+ {"B/G-PAL-A2#B", NULL, 0x81D9, 0x0000, 5.64 },
+ {"B/G-PAL-A2#B-MONO", NULL, 0x81D9, 0x0078, 5.5 },
+ {"B/G-PAL-A2#A", NULL, 0x8159, 0x0000, 5.64 },
+ {"B/G-PAL-A2#A-MONO", NULL, 0x8159, 0x0078, 5.5 },
+ {"I-PAL-NICAM", NULL, 0x8049, 0x0080, 6.24 },
+ {"I-PAL-NICAM-MONO", NULL, 0x8049, 0x0078, 6.00 },
+ {"D/K-PAL-NICAM", NULL, 0x8049, 0x0080, 6.20 },
+ {"D/K-PAL-NICAM-MONO", NULL, 0x8049, 0x0078, 6.5 },
+ {"D/K-SECAM-A2 DK1", NULL, 0x8049, 0x0000, 6.34 },
+ {"D/K-SECAM-A2 L/DK3", NULL, 0x8049, 0x0000, 6.00 },
+ {"D/K-PAL-A2", NULL, 0x8049, 0x0000, 6.38 },
+ {"D/K-SECAM-A2 DK1-MONO", NULL, 0x8049, 0x0078, 6.5 },
+ {"D/K-SECAM-A2 L/DK3-MONO", NULL, 0x8049, 0x0078, 6.5 },
+ {"D/K-PAL-FM-ONLY", NULL, 0x8049, 0x0008, 6.5 },
+ {"D/K-PAL-MONO", NULL, 0x8049, 0x0078, 6.5 },
+};
+
+/************************************************/
+/* The TV_standard initial routine */
+/************************************************/
+
+void XC4000_Loading_TVStandards(void)
+{
+ XC4000_Standard[ 0 ].ConfFile = XC4000_MN_NTSC_PAL_BTSC_SEQUENCE;
+ XC4000_Standard[ 1 ].ConfFile = XC4000_MN_NTSC_PAL_BTSC_NOGD_SEQUENCE;
+ XC4000_Standard[ 2 ].ConfFile = XC4000_MN_NTSC_PAL_A2_IF_SEQUENCE;
+ XC4000_Standard[ 3 ].ConfFile = XC4000_MN_NTSC_PAL_A2_IF_NOGD_SEQUENCE;
+ XC4000_Standard[ 4 ].ConfFile = XC4000_MN_NTSC_PAL_MTS_SEQUENCE;
+ XC4000_Standard[ 5 ].ConfFile = XC4000_MN_NTSC_PAL_A2_MONO_SEQUENCE;
+ XC4000_Standard[ 6 ].ConfFile = XC4000_MN_NTSC_PAL_A2_MONO_NOGD_SEQUENCE;
+ XC4000_Standard[ 7 ].ConfFile = XC4000_L_SECAM_NICAM_SEQUENCE;
+ XC4000_Standard[ 8 ].ConfFile = XC4000_L_SECAM_AM_SEQUENCE;
+ XC4000_Standard[ 9 ].ConfFile = XC4000_IL_SECAM_NICAM_SEQUENCE;
+ XC4000_Standard[ 10 ].ConfFile = XC4000_IL_SECAM_AM_SEQUENCE;
+ XC4000_Standard[ 11 ].ConfFile = XC4000_FM_INPUT1_SEQUENCE;
+ XC4000_Standard[ 12 ].ConfFile = XC4000_FM_INPUT2_SEQUENCE;
+ XC4000_Standard[ 13 ].ConfFile = XC4000_ATSC_SEQUENCE;
+ XC4000_Standard[ 14 ].ConfFile = XC4000_ATSC_SEQUENCE;
+ XC4000_Standard[ 15 ].ConfFile = XC4000_ATSC_SEQUENCE;
+ XC4000_Standard[ 16 ].ConfFile = XC4000_ATSC_SEQUENCE;
+ XC4000_Standard[ 17 ].ConfFile = XC4000_ATSC_SEQUENCE;
+ XC4000_Standard[ 18 ].ConfFile = XC4000_ATSC_SEQUENCE;
+ XC4000_Standard[ 19 ].ConfFile = XC4000_ATSC_SEQUENCE;
+ XC4000_Standard[ 20 ].ConfFile = XC4000_DVBT_8_SEQUENCE;
+ XC4000_Standard[ 21 ].ConfFile = XC4000_DVBT_78_SEQUENCE;
+ XC4000_Standard[ 22 ].ConfFile = XC4000_DVBT_7_SEQUENCE;
+ XC4000_Standard[ 23 ].ConfFile = XC4000_ATSC_SEQUENCE;
+ XC4000_Standard[ 24 ].ConfFile = XC4000_DVBT_8_SEQUENCE;
+ XC4000_Standard[ 25 ].ConfFile = XC4000_DVBT_78_SEQUENCE;
+ XC4000_Standard[ 26 ].ConfFile = XC4000_DVBT_7_SEQUENCE;
+ XC4000_Standard[ 27 ].ConfFile = XC4000_DVBT_8_SEQUENCE;
+ XC4000_Standard[ 28 ].ConfFile = XC4000_B_G_PAL_NICAM_A_SEQUENCE;
+ XC4000_Standard[ 29 ].ConfFile = XC4000_B_G_PAL_NICAM_A_MONO_SEQUENCE;
+ XC4000_Standard[ 30 ].ConfFile = XC4000_B_G_PAL_NICAM_B_SEQUENCE;
+ XC4000_Standard[ 31 ].ConfFile = XC4000_B_G_PAL_NICAM_B_MONO_SEQUENCE;
+ XC4000_Standard[ 32 ].ConfFile = XC4000_B_G_PAL_A2_B_SEQUENCE;
+ XC4000_Standard[ 33 ].ConfFile = XC4000_B_G_PAL_A2_B_MONO_SEQUENCE;
+ XC4000_Standard[ 34 ].ConfFile = XC4000_B_G_PAL_A2_A_SEQUENCE;
+ XC4000_Standard[ 35 ].ConfFile = XC4000_B_G_PAL_A2_A_MONO_SEQUENCE;
+ XC4000_Standard[ 36 ].ConfFile = XC4000_I_PAL_NICAM_SEQUENCE;
+ XC4000_Standard[ 37 ].ConfFile = XC4000_I_PAL_NICAM_MONO_SEQUENCE;
+ XC4000_Standard[ 38 ].ConfFile = XC4000_D_K_PAL_NICAM_SEQUENCE;
+ XC4000_Standard[ 39 ].ConfFile = XC4000_D_K_PAL_NICAM_MONO_SEQUENCE;
+ XC4000_Standard[ 40 ].ConfFile = XC4000_D_K_SECAM_A2_SEQUENCE;
+ XC4000_Standard[ 41 ].ConfFile = XC4000_D_K_SECAM_A2_SEQUENCE;
+ XC4000_Standard[ 42 ].ConfFile = XC4000_D_K_SECAM_A2_SEQUENCE;
+ XC4000_Standard[ 43 ].ConfFile = XC4000_D_K_SECAM_A2_MONO_SEQUENCE;
+ XC4000_Standard[ 44 ].ConfFile = XC4000_D_K_SECAM_A2_MONO_SEQUENCE;
+ XC4000_Standard[ 45 ].ConfFile = XC4000_D_K_PAL_FM_ONLY_SEQUENCE;
+ XC4000_Standard[ 46 ].ConfFile = XC4000_D_K_SECAM_A2_MONO_SEQUENCE;
+} ;
+#endif
+
diff --git a/src/af903x-core.c b/src/af903x-core.c
new file mode 100644
index 0000000..cf69d6a
--- /dev/null
+++ b/src/af903x-core.c
@@ -0,0 +1,126 @@
+#include "af903x.h"
+
+DEVICE_CONTEXT DC;
+bool TunerInited0, TunerInited1, DeviceReboot;
+DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
+
+static int af903x_probe(struct usb_interface *intf,
+ const struct usb_device_id *id)
+{
+ int retval = -ENOMEM;
+ int i;
+
+ deb_data("===af903x usb device pluged in!! ===\n");
+ retval = Device_init(interface_to_usbdev(intf),&DC, true);
+ if (retval){
+ if(retval) deb_data("Device_init Fail: 0x%08x\n", retval);
+ return retval;
+ }
+
+ if ( af903x_device_count > 2)
+ af903x_device_count = 2;
+
+ for (i = 0; i < af903x_device_count; i++)
+ {
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)
+ if (DC.architecture == Architecture_PIP)
+ af903x_properties[i].num_adapters = 2;
+#endif
+
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,25)
+ if (dvb_usb_device_init(intf, &af903x_properties[i], THIS_MODULE, NULL) == 0)
+ {deb_data("dvb_usb_device_init success!!\n");return 0;}
+#else
+ if (dvb_usb_device_init(intf, &af903x_properties[i], THIS_MODULE, NULL,adapter_nr) == 0)
+ {deb_data("dvb_usb_device_init success!!\n");return 0;}
+#endif
+ }
+
+ return -ENOMEM;
+}
+static int af903x_suspend(struct usb_interface *intf, u32 state)
+{
+ int error;
+ deb_data("Enter %s Function\n",__FUNCTION__);
+
+#ifdef EEEPC
+ error = DL_Reboot();
+#else
+ if (DevicePower)
+ {
+ error = DL_CheckTunerInited(0, &TunerInited0);
+ error = DL_CheckTunerInited(1, &TunerInited1);
+
+ error = DL_ApCtrl(0, 0);
+ error = DL_ApCtrl(1, 0);
+ if (error) {deb_data("DL_ApCtrl error : 0x%x\n", error);}
+
+ DeviceReboot = true;
+ }
+#endif
+ return 0;
+}
+
+static int af903x_resume(struct usb_interface *intf)
+{
+ int retval = -ENOMEM;
+ int error;
+ deb_data("Enter %s Function\n",__FUNCTION__);
+
+#ifdef EEEPC
+#else
+ if(DeviceReboot == true)
+ {
+ retval = Device_init(interface_to_usbdev(intf),&DC, false);
+ if (retval)
+ if(retval) deb_data("Device_init Fail: 0x%08x\n", retval);
+
+ if (TunerInited0)
+ error = DL_ApCtrl(0, 1);
+ if (TunerInited1)
+ error = DL_ApCtrl(1, 1);
+ }
+#endif
+ return 0;
+}
+
+
+static struct usb_driver af903x_driver = {
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,15)
+ .owner = THIS_MODULE,
+#endif
+ .name = "dvb_usb_af903x",
+ .probe = af903x_probe,
+ .disconnect = dvb_usb_device_exit,
+ .id_table = af903x_usb_id_table,
+// .suspend = af903x_suspend,
+// .resume = af903x_resume,
+};
+
+static int __init af903x_module_init(void)
+{
+ int result;
+
+ info("%s",__FUNCTION__);
+ deb_data("dvb_usb_af903x Module is loaded \n");
+
+ if ((result = usb_register(&af903x_driver))) {
+ err("usb_register failed. Error number %d",result);
+ return result;
+ }
+ return 0;
+}
+
+static void __exit af903x_module_exit(void)
+{
+ deb_data("dvb_usb_af903x Module is unloaded!\n");
+ usb_deregister(&af903x_driver);
+}
+
+module_init (af903x_module_init);
+module_exit (af903x_module_exit);
+
+MODULE_AUTHOR("Jimmy Chen <JyunYu.Chen@ite.com.tw>");
+MODULE_DESCRIPTION("Driver for devices based on ITEtech AF903X");
+MODULE_VERSION(DRIVER_RELEASE_VERSION);
+MODULE_LICENSE("GPL");
diff --git a/src/af903x-devices.c b/src/af903x-devices.c
new file mode 100644
index 0000000..99f5c9e
--- /dev/null
+++ b/src/af903x-devices.c
@@ -0,0 +1,214 @@
+#include "af903x.h"
+
+bool DevicePower;
+static int af903x_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)
+{
+ int ret =0;
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)
+ deb_data("%s: onoff:%d\n", __func__, onoff);
+
+ if ( PDC->fc[adap->id].bEnPID != onoff )
+ DL_ResetPID((BYTE)adap->id);
+
+ PDC->fc[adap->id].bEnPID = onoff;
+
+ DL_PIDOnOff((BYTE)adap->id,onoff);
+#endif
+
+ return ret;
+}
+
+static int af903x_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pidnum,
+ int onoff)
+{
+ int ret = 0;
+ #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)
+ Pid pid;
+ deb_data("- %s: set pid filter, index %d, pid %x, onoff %d, now_onoff %d.\n",
+ __func__, index, pidnum, onoff, PDC->fc[adap->id].bEnPID);
+
+ if (onoff && !PDC->fc[adap->id].bEnPID)
+ {
+ DL_ResetPID((BYTE)adap->id);
+ PDC->fc[adap->id].bEnPID = onoff;
+ DL_PIDOnOff((BYTE)adap->id,onoff);
+ pid.sectionType = SectionType_TABLE;
+ pid.table = 0x00;
+ pid.duration = 0xFF;
+ }
+
+ pid.value = (Word)pidnum;
+ if (onoff){
+ ret = DL_AddPID((BYTE)adap->id, index, pid);
+ }else{
+ ret = DL_RemovePID((BYTE)adap->id, index, pid);
+ }
+#endif
+
+ return ret;
+}
+
+static int af903x_download_firmware(struct usb_device *udev, const struct firmware *fw)
+{
+ int ret=0;
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+
+ return ret;
+}
+
+static int af903x_powerctrl(struct dvb_usb_device *d, int onoff)
+{
+
+ int ret;
+ DevicePower = onoff;
+
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)
+ deb_data("- Enter %s Function - chip=%d:%s\n",__FUNCTION__, d->adapter->id, onoff?"ON":"OFF");
+ ret = DL_ApCtrl(d->adapter->id, onoff);
+#else
+ deb_data("- Enter %s Function - %s\n",__FUNCTION__, onoff?"ON":"OFF");
+ ret = DL_ApCtrl(0, onoff);
+#endif
+ if(ret) deb_data(" af903x_powerctrl Fail: 0x%04X\n", ret);
+
+ return ret;
+}
+
+static int af903x_identify_state(struct usb_device *udev, struct dvb_usb_device_properties *props,
+ struct dvb_usb_device_description **desc, int *cold)
+{
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+ *cold = 0;
+
+ return 0;
+}
+
+static int af903x_frontend_attach(struct dvb_usb_adapter *adap)
+{
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)
+ deb_data("- Enter %s Function - chip=%d\n", __FUNCTION__, adap->id);
+#else
+ deb_data("- Enter %s Function - \n", __FUNCTION__);
+#endif
+ adap->fe = af903x_attach(1);
+
+ return adap->fe == NULL ? -ENODEV : 0;
+}
+
+static int af903x_tuner_attach(struct dvb_usb_adapter *adap)
+{
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)
+ deb_data("- Enter %s Function - chip=%d\n",__FUNCTION__, adap->id);
+#else
+ deb_data("- Enter %s Function - \n", __FUNCTION__);
+#endif
+ tuner_attach(adap->fe);
+ return 0;
+}
+
+static int af903x_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff)
+{
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)
+ deb_data("- Enter %s Function - (%s) streaming state for chip=%d\n",__FUNCTION__, onoff?"ON":"OFF", adap->id);
+ //PID off
+ DL_ResetPID((BYTE)adap->id);
+ PDC->fc[adap->id].bEnPID = 0;
+ DL_PIDOnOff((BYTE)adap->id,0);
+#else
+ deb_data("- Enter %s Function - (%s) streaming state \n",__FUNCTION__, onoff?"ON":"OFF");
+#endif
+
+ return 0;
+}
+
+struct usb_device_id af903x_usb_id_table[] = {
+ { USB_DEVICE(0x15A4,0x1000) },
+ { USB_DEVICE(0x15A4,0x1001) },
+ { USB_DEVICE(0x15A4,0x1002) },
+ { USB_DEVICE(0x15A4,0x1003) },
+ { USB_DEVICE(0x15A4,0x9035) },
+ { 0}, /* Terminating entry */
+};
+MODULE_DEVICE_TABLE(usb, af903x_usb_id_table);
+
+struct dvb_usb_device_properties af903x_properties[] = {
+ {
+ .usb_ctrl = DEVICE_SPECIFIC,
+ .download_firmware = af903x_download_firmware,
+ .no_reconnect = 1,
+ .power_ctrl = af903x_powerctrl,
+ .identify_state = af903x_identify_state,
+
+#if LINUX_VERSION_CODE == KERNEL_VERSION(2,6,18)
+ .caps = DVB_USB_HAS_PID_FILTER | DVB_USB_NEED_PID_FILTERING,
+ .pid_filter_count = 32,
+ .frontend_attach = af903x_frontend_attach,
+ .tuner_attach = af903x_tuner_attach,
+ .streaming_ctrl = af903x_streaming_ctrl,
+ .urb = {
+ .type = DVB_USB_BULK,
+ .count = 10,
+ .endpoint = 0x84,
+ .u = {
+ .bulk = {
+ .buffersize = 65424,
+ }
+ }
+ },
+#else
+ .num_adapters = 1,
+ .adapter = {
+ {
+ .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
+ .pid_filter_count = 32,
+ .pid_filter = af903x_pid_filter,
+ .pid_filter_ctrl = af903x_pid_filter_ctrl,
+ .frontend_attach = af903x_frontend_attach,
+ .tuner_attach = af903x_tuner_attach,
+ .streaming_ctrl = af903x_streaming_ctrl,
+ .stream = {
+ .type = USB_BULK,
+ .count = 4,
+ .endpoint = 0x84,
+ .u = {
+ .bulk = {
+ .buffersize = 65424,
+ }
+ }
+ }
+ },
+ {
+ .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
+ .pid_filter_count = 32,
+ .pid_filter = af903x_pid_filter,
+ .pid_filter_ctrl = af903x_pid_filter_ctrl,
+ .frontend_attach = af903x_frontend_attach,
+ .tuner_attach = af903x_tuner_attach,
+ .streaming_ctrl = af903x_streaming_ctrl,
+ .stream = {
+ .type = USB_BULK,
+ .count = 4,
+ .endpoint = 0x85,
+ .u = {
+ .bulk = {
+ .buffersize = 65424,
+ }
+ }
+ }
+ },
+ },
+#endif
+ .num_device_descs =1,
+ .devices = {
+ { "ITEtech USB2.0 DVB-T Recevier",
+ { &af903x_usb_id_table[0], &af903x_usb_id_table[1],&af903x_usb_id_table[2],
+ &af903x_usb_id_table[3], &af903x_usb_id_table[4], NULL},
+ { NULL },
+ },
+ {NULL},
+
+ }
+ }
+};
+
+int af903x_device_count = ARRAY_SIZE(af903x_properties);
diff --git a/src/af903x-drv.c b/src/af903x-drv.c
new file mode 100644
index 0000000..6ba44bf
--- /dev/null
+++ b/src/af903x-drv.c
@@ -0,0 +1,1579 @@
+#include "af903x.h"
+
+#define FW_VER 0x08060000
+int dvb_usb_af903x_debug;
+module_param_named(debug,dvb_usb_af903x_debug, int, 0644);
+MODULE_PARM_DESC(debug, "set debugging level.(info=1,deb_fw=2,deb_fwdata=4,deb_data=8)" DVB_USB_DEBUG_STATUS);
+
+struct usb_device *udevs;
+PDEVICE_CONTEXT PDC;
+
+static DEFINE_MUTEX(mymutex);
+
+//************** DRV_ *************//
+
+static DWORD DRV_IrTblDownload(IN void * handle)
+{
+ DWORD dwError = Error_NO_ERROR;
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+ struct file *filp;
+ unsigned char b_buf[512] ;
+ int i, fileSize;
+ mm_segment_t oldfs;
+
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+
+ oldfs=get_fs();
+ set_fs(KERNEL_DS);
+
+ filp=filp_open("/lib/firmware/af35irtbl.bin", O_RDWR,0644);
+ if ( IS_ERR(filp) ) {
+ deb_data(" LoadIrTable : Can't open file\n");goto exit;}
+
+ if ( (filp->f_op) == NULL ) {
+ deb_data(" LoadIrTable : File Operation Method Error!!\n");goto exit;}
+
+ filp->f_pos=0x00;
+ fileSize = filp->f_op->read(filp,b_buf,sizeof(b_buf),&filp->f_pos);
+
+ for(i=0; i<fileSize; i++)
+ {
+ //deb_data("\n Data %d",i); //
+ //deb_data("0x%x",b_buf[i]);//
+ // dwError = Af901xWriteReg(ucDemod2WireAddr, 0, MERC_IR_TABLE_BASE_ADDR + i, b_buf[i]);
+ //if (dwError) goto exit;
+ }
+
+ dwError = Demodulator_loadIrTable((Demodulator*) &pdc->Demodulator, (Word)fileSize, b_buf);
+ if (dwError) {deb_data("Demodulator_loadIrTable fail"); goto exit;}
+
+ filp_close(filp, NULL);
+ set_fs(oldfs);
+
+ return (dwError);
+exit:
+ deb_data("LoadIrTable fail!\n");
+
+}
+
+static DWORD DRV_GetEEPROMConfig2(
+ void * handle,
+ BYTE ucSlaveDemod)
+{
+
+ DWORD dwError = Error_NO_ERROR;
+ tWORD shift = 0;
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+ BYTE btmp = 0;
+
+ deb_data("- Enter %s Function -",__FUNCTION__);
+
+ if(ucSlaveDemod) shift = EEPROM_SHIFT;
+
+ dwError = Demodulator_readRegisters((Demodulator*) &pdc->Demodulator, 0, Processor_LINK, EEPROM_TUNERID+shift, 1, &btmp);
+ if (dwError) goto exit;
+ deb_data("EEPROM_TUNERID%d = 0x%02X\n", ucSlaveDemod, btmp);
+ PTI.TunerId = btmp;
+
+exit:
+
+ return(dwError);
+}
+
+static DWORD DRV_SetFreqBw(
+ void* handle,
+ BYTE ucSlaveDemod,
+ DWORD dwFreq,
+ WORD ucBw
+)
+{
+ DWORD dwError = Error_NO_ERROR;
+
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+
+ Bool bLock = true;
+
+ deb_data("- Enter %s Function -\n ",__FUNCTION__);
+ deb_data(" ucSlaveDemod = %d, Freq= %d, BW=%d\n", ucSlaveDemod, dwFreq, ucBw);
+
+ if (pdc->fc[ucSlaveDemod].bEnPID)
+ {
+ Demodulator_resetPid((Demodulator*) &pdc->Demodulator, ucSlaveDemod);
+ //Disable PID filter
+ Demodulator_writeRegisterBits ((Demodulator*) &pdc->Demodulator, ucSlaveDemod, Processor_OFDM, p_mp2if_pid_en, mp2if_pid_en_pos, mp2if_pid_en_len, 0);
+ pdc->fc[ucSlaveDemod].bEnPID = 0;
+ }
+
+ PTI.bSettingFreq = true; //before acquireChannel, it is ture; otherwise, it is false
+
+ if(dwFreq) {
+ pdc->fc[ucSlaveDemod].ulDesiredFrequency = dwFreq;
+ }
+ else {
+ dwFreq = pdc->fc[ucSlaveDemod].ulDesiredFrequency;
+ }
+
+ if(ucBw) {
+ pdc->fc[ucSlaveDemod].ucDesiredBandWidth = ucBw*1000;
+ }
+ else {
+ ucBw = pdc->fc[ucSlaveDemod].ucDesiredBandWidth;
+ }
+
+ deb_data(" Real Freq= %d, BW=%d\n", pdc->fc[ucSlaveDemod].ulDesiredFrequency, pdc->fc[ucSlaveDemod].ucDesiredBandWidth);
+
+
+ if(!PTI.bTunerInited){
+ deb_data(" Skip SetFreq - Tuner is still off!\n");
+ goto exit;
+ }
+
+ PTI.bTunerOK = false;
+
+ if (pdc->fc[ucSlaveDemod].ulDesiredFrequency!=0 && pdc->fc[ucSlaveDemod].ucDesiredBandWidth!=0)
+ {
+ deb_data(" AcquireChannel : Real Freq= %d, BW=%d\n", pdc->fc[ucSlaveDemod].ulDesiredFrequency, pdc->fc[ucSlaveDemod].ucDesiredBandWidth);
+ dwError = Demodulator_acquireChannel ((Demodulator*) &pdc->Demodulator, ucSlaveDemod, pdc->fc[ucSlaveDemod].ucDesiredBandWidth, pdc->fc[ucSlaveDemod].ulDesiredFrequency);
+ //PTI.bSettingFreq = false;
+ if (dwError)
+ {
+ deb_data(" Demod_acquireChannel fail! 0x%08x\n", dwError);
+ goto exit;
+ }
+ else //when success acquireChannel, record currentFreq/currentBW.
+ {
+ pdc->fc[ucSlaveDemod].ulCurrentFrequency = pdc->fc[ucSlaveDemod].ulDesiredFrequency;
+ pdc->fc[ucSlaveDemod].ucCurrentBandWidth = pdc->fc[ucSlaveDemod].ucDesiredBandWidth;
+ }
+ }
+
+ if(pdc->StreamType == StreamType_DVBT_DATAGRAM) {
+ PDC->fc[ucSlaveDemod].OvrFlwChk = 5;
+ }
+
+ /*if (pdc->fc[ucSlaveDemod].ulDesiredFrequency!=0 && pdc->fc[ucSlaveDemod].ucDesiredBandWidth!=0)
+ {
+ // patch for Demodulator_isLocked
+ //mdelay(700);
+
+ dwError= Demodulator_isLocked((Demodulator*) &pdc->Demodulator, ucSlaveDemod, &bLock);
+ if(dwError)
+ deb_data(" Demodulator_isLocked is failed!\n");
+ else
+ {
+ deb_data(" The signal is %s Lock\n", bLock?"":"not");
+
+ //patch for mce channel change lag
+ if(bLock) {
+ mdelay(500);
+ }
+ }
+ }*/
+
+ PTI.bTunerOK = true;
+
+exit:
+
+ PTI.bSettingFreq = false;
+
+ return(dwError);
+}
+
+DWORD DRV_ResetPID(
+ IN void* handle,
+ IN BYTE chip
+)
+{
+ deb_data("- Enter %s Function -\n ",__FUNCTION__);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+
+ //Clear pidTable
+ dwError = Demodulator_resetPid ((Demodulator*) &pdc->Demodulator, chip);
+
+ return(dwError);
+
+}
+
+DWORD DRV_AddPID(
+ IN void* handle,
+ IN BYTE ucSlaveDemod,
+ IN Byte index,
+ IN Pid pid
+)
+{
+ deb_data("- Enter %s Function - , index:%d, pid:%x \n",__FUNCTION__, index, pid.value);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+
+ dwError = Demodulator_addPidToFilter ((Demodulator*) &pdc->Demodulator, ucSlaveDemod,index, pid);
+
+ return(dwError);
+
+}
+
+DWORD DRV_RemovePID(
+ IN void* handle,
+ IN BYTE ucSlaveDemod,
+ IN Byte index,
+ IN Pid pid
+)
+{
+ deb_data("- Enter %s Function - , index:%d, pid:%x \n",__FUNCTION__, index, pid.value);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+
+ dwError = Demodulator_removePidAt ((Demodulator*) &pdc->Demodulator, ucSlaveDemod,index, pid);
+
+ return(dwError);
+
+}
+
+DWORD DRV_PIDOnOff(
+ IN void * handle,
+ IN BYTE ucSlaveDemod,
+ IN bool bOn
+)
+{
+ deb_data("- Enter %s Function -onoff:%d\n ",__FUNCTION__, bOn);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+
+ if (bOn)
+ dwError = Demodulator_controlPidFilter ((Demodulator*) &pdc->Demodulator, ucSlaveDemod, 1);
+ else
+ dwError = Demodulator_controlPidFilter ((Demodulator*) &pdc->Demodulator, ucSlaveDemod, 0);
+
+ return(dwError);
+}
+
+static DWORD DRV_isLocked(
+ void* handle,
+ BYTE ucSlaveDemod,
+ Bool* bLock
+)
+{
+ DWORD dwError = Error_NO_ERROR;
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+ *bLock = true;
+
+ deb_data("- Enter %s Function -\n ",__FUNCTION__);
+
+ dwError= Demodulator_isLocked((Demodulator*) &pdc->Demodulator, ucSlaveDemod, bLock);
+ if(dwError)
+ deb_data(" Demodulator_isLocked is failed!\n");
+ else
+ deb_data(" The chip=%d signal is %s Lock\n", ucSlaveDemod, *bLock?"":"not");
+
+ return(dwError);
+}
+static DWORD DRV_getSignalStrength(
+ void* handle,
+ BYTE ucSlaveDemod,
+ BYTE* strength
+)
+{
+ DWORD dwError = Error_NO_ERROR;
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+
+ deb_data("- Enter %s Function -\n ",__FUNCTION__);
+
+ dwError= Demodulator_getSignalStrength((Demodulator*) &pdc->Demodulator, ucSlaveDemod, strength);
+ if(dwError)
+ deb_data(" Demodulator_getSignalStrength is failed!\n");
+ else
+ deb_data(" The signal strength is %d \n", *strength);
+
+ return(dwError);
+}
+
+static DWORD DRV_getSignalStrengthDbm(
+ void* handle,
+ BYTE ucSlaveDemod,
+ Long* strengthDbm
+)
+{
+ DWORD dwError = Error_NO_ERROR;
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+
+ deb_data("- Enter %s Function -\n ",__FUNCTION__);
+
+ dwError= Demodulator_getSignalStrengthDbm((Demodulator*) &pdc->Demodulator, ucSlaveDemod, 1, 1, strengthDbm);
+ if(dwError)
+ deb_data(" Demodulator_getSignalStrengthDbm is failed!\n");
+ else
+ deb_data(" The signal strengthDbm is %d \n", *strengthDbm);
+
+ return(dwError);
+}
+
+static DWORD DRV_getChannelStatistic(
+ void* handle,
+ BYTE ucSlaveDemod,
+ ChannelStatistic* channelStatistic
+)
+{
+ DWORD dwError = Error_NO_ERROR;
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+
+ deb_data("- Enter %s Function -\n ",__FUNCTION__);
+
+ dwError= Demodulator_getChannelStatistic((Demodulator*) &pdc->Demodulator, ucSlaveDemod, channelStatistic);
+ if(dwError)
+ deb_data(" Demodulator_getChannelStatistic is failed!\n");
+
+ return(dwError);
+}
+
+static DWORD DRV_getChannelModulation(
+ void* handle,
+ BYTE ucSlaveDemod,
+ ChannelModulation* channelModulation
+)
+{
+ DWORD dwError = Error_NO_ERROR;
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+
+ deb_data("- Enter %s Function -\n ",__FUNCTION__);
+
+ dwError= Standard_getChannelModulation((Demodulator*) &pdc->Demodulator, ucSlaveDemod, channelModulation);
+ if(dwError)
+ deb_data(" Demodulator_getChannelStatistic is failed!\n");
+
+ return(dwError);
+}
+
+static DWORD DRV_getSNRValue(
+ void* handle,
+ DWORD* snr_value
+)
+{
+ DWORD dwError = Error_NO_ERROR;
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+ BYTE snr_reg_23_16, snr_reg_15_8, snr_reg_7_0;
+
+ deb_data("- Enter %s Function -\n ",__FUNCTION__);
+
+
+ dwError = Demodulator_readRegister((Demodulator*) &pdc->Demodulator, 0,Processor_OFDM, 0x2e,(unsigned char *) &snr_reg_23_16);
+ if(dwError)
+ deb_data(" Demodulator_getSNR snr_reg_23_16 is failed!\n");
+
+ dwError = Demodulator_readRegister((Demodulator*) &pdc->Demodulator, 0,Processor_OFDM, 0x2d,(unsigned char *) &snr_reg_15_8);
+ if(dwError)
+ deb_data(" Demodulator_getSNR snr_reg_15_8 is failed!\n");
+
+ dwError = Demodulator_readRegister((Demodulator*) &pdc->Demodulator, 0,Processor_OFDM, 0x2c,(unsigned char *) &snr_reg_7_0);
+ if(dwError)
+ deb_data(" Demodulator_getSNR snr_reg_7_0 is failed!\n");
+
+ *snr_value = (snr_reg_23_16&0xff)*256*256+(snr_reg_15_8&0xff)*256+(snr_reg_7_0&0xff);
+
+ return(dwError);
+}
+
+static DWORD DRV_getFirmwareVersionFromFile(
+ Processor processor,
+ DWORD* version
+)
+{
+ DWORD OFDM_VER1 = DVB_OFDM_VERSION1;
+ DWORD OFDM_VER2 = DVB_OFDM_VERSION2;
+ DWORD OFDM_VER3 = DVB_OFDM_VERSION3;
+ DWORD OFDM_VER4 = DVB_OFDM_VERSION4;
+
+ DWORD LINK_VER1 = DVB_LL_VERSION1;
+ DWORD LINK_VER2 = DVB_LL_VERSION2;
+ DWORD LINK_VER3 = DVB_LL_VERSION3;
+ DWORD LINK_VER4 = DVB_LL_VERSION4;
+
+ if(processor == Processor_OFDM) {
+ *version = (DWORD)( (OFDM_VER1 << 24) + (OFDM_VER2 << 16) + (OFDM_VER3 << 8) + OFDM_VER4);
+ }
+ else { //LINK
+ *version = (DWORD)( (LINK_VER1 << 24) + (LINK_VER2 << 16) + (LINK_VER3 << 8) + LINK_VER4);
+ }
+
+ return *version;
+}
+
+static DWORD DRV_Initialize(
+ void * handle
+)
+{
+ DWORD error = Error_NO_ERROR;
+
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+
+ DWORD fileVersion, cmdVersion = 0;
+
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+
+ if(pdc->Demodulator.booted) //from Standard_setBusTuner() > Standard_getFirmwareVersion()
+ {
+ //use "#define version" to get fw version (from firmware.h title)
+ error = DRV_getFirmwareVersionFromFile(Processor_OFDM, &fileVersion);
+
+ //use "Command_QUERYINFO" to get fw version
+ error = Demodulator_getFirmwareVersion((Demodulator*) &pdc->Demodulator, Processor_OFDM, &cmdVersion);
+ if(error) deb_data("DRV_Initialize : Demodulator_getFirmwareVersion : error = 0x%08x\n", error);
+
+ if(cmdVersion != fileVersion)
+ {
+ deb_data("Reboot: Outside Fw = 0x%X, Inside Fw = 0x%X", fileVersion, cmdVersion);
+ error = Demodulator_reboot((Demodulator*) &pdc->Demodulator);
+ pdc->bBootCode = true;
+ if(error)
+ {
+ deb_data("Demodulator_reboot : error = 0x%08x\n", error);
+ return error;
+ }
+ else {
+ return Error_NOT_READY;
+ }
+ }
+ else
+ {
+ deb_data(" Fw version is the same!\n");
+ error = Error_NO_ERROR;
+ }
+ }//pdc->Demodulator.booted
+
+ReInit: //Patch for NIM fail or disappear, Maggie
+ error = Demodulator_initialize ((Demodulator*) &pdc->Demodulator, pdc->Demodulator.chipNumber , 8000, pdc->StreamType, pdc->architecture);
+ if (error)
+ {
+ deb_data("Device initialize fail : 0x%08x\n", error);
+ if( ((error&Error_FIRMWARE_STATUS) && (error&0x10)) && (pdc->Demodulator.chipNumber>1) )
+ {
+ pdc->Demodulator.cmdDescription->sendCommand ((Demodulator*) &pdc->Demodulator, Command_FW_DOWNLOAD_END, 0, Processor_LINK, 0, NULL, 0, NULL);
+
+ deb_data(" Retry to download FW with Single TS\n");
+ pdc->Demodulator.chipNumber = 1;
+ pdc->bDualTs = false;
+ error = Demodulator_writeRegister ((Demodulator*) &pdc->Demodulator, 0, Processor_LINK, 0x417F, 0);
+ goto ReInit;
+ }
+ }
+ else {
+ deb_data(" Device initialize Ok!!\n");
+ }
+
+ Demodulator_getFirmwareVersion ((Demodulator*) &pdc->Demodulator, Processor_OFDM, &cmdVersion);
+ deb_data(" FwVer OFDM = 0x%X, ", cmdVersion);
+ Demodulator_getFirmwareVersion ((Demodulator*) &pdc->Demodulator, Processor_LINK, &cmdVersion);
+ deb_data("FwVer LINK = 0x%X\n", cmdVersion);
+
+ return error;
+
+}
+
+static DWORD DRV_InitDevInfo(
+ void * handle,
+ BYTE ucSlaveDemod
+)
+{
+ DWORD dwError = Error_NO_ERROR;
+
+ PDC->fc[ucSlaveDemod].ulCurrentFrequency = 0;
+ PDC->fc[ucSlaveDemod].ucCurrentBandWidth = 0;
+
+ PDC->fc[ucSlaveDemod].ulDesiredFrequency = 0;
+ PDC->fc[ucSlaveDemod].ucDesiredBandWidth = 6000;
+
+ //For PID Filter Setting
+ //PDC->fc[ucSlaveDemod].ulcPIDs = 0;
+ PDC->fc[ucSlaveDemod].bEnPID = false;
+
+ PDC->fc[ucSlaveDemod].bApOn = false;
+
+ PDC->fc[ucSlaveDemod].bResetTs = false;
+
+
+
+ PTI.bTunerOK = false;
+ PTI.bSettingFreq = false;
+
+ return dwError;
+}
+
+static DWORD DRV_GetEEPROMConfig(
+ void * handle)
+{
+ DWORD dwError = Error_NO_ERROR;
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+ BYTE ucSlaveDemod = 0;
+ BYTE btmp = 0;
+ int cnt;
+
+ deb_data("- Enter %s Function -",__FUNCTION__);
+
+ //bIrTblDownload option
+ dwError = Demodulator_readRegisters((Demodulator*) &pdc->Demodulator, 0, Processor_LINK, EEPROM_IRMODE, 1, &btmp);
+ if (dwError) return(dwError);
+ PDC->bIrTblDownload = btmp ? true:false;
+ deb_data( "EEPROM_IRMODE = 0x%02X, ", btmp);
+ deb_data("bIrTblDownload %s\n", PDC->bIrTblDownload?"ON":"OFF");
+
+ PDC->bDualTs = false;
+ PDC->architecture = Architecture_DCA;
+ PDC->Demodulator.chipNumber = 1;
+ PDC->bDCAPIP = false;
+
+ //bDualTs option
+ dwError = Demodulator_readRegisters((Demodulator*) &pdc->Demodulator, 0, Processor_LINK,EEPROM_TSMODE, 1, &btmp);
+ if (dwError) return(dwError);
+ deb_data("EEPROM_TSMODE = 0x%02X", btmp);
+
+ if (btmp == 0)
+ deb_data("TSMode = TS1 mode\n");
+ else if (btmp == 1)
+ {
+ deb_data("TSMode = DCA+PIP mode\n");
+ PDC->architecture = Architecture_DCA;
+ PDC->Demodulator.chipNumber = 2;
+ PDC->bDualTs = true;
+ //PDC->bDCAPIP = true;
+ }
+ else if (btmp == 3)
+ {
+ deb_data("TSMode = PIP mode\n");
+ PDC->architecture = Architecture_PIP;
+ PDC->Demodulator.chipNumber = 2;
+ PDC->bDualTs = true;
+ }
+ else
+ {
+ deb_data("TSMode = DCA mode\n");
+ PDC->architecture = Architecture_DCA;
+ PDC->Demodulator.chipNumber = 2;
+ }
+
+ if(PDC->bDualTs) {
+ cnt = 2;
+ }
+ else {
+ cnt = 1;
+ }
+
+ for(ucSlaveDemod; ucSlaveDemod < cnt; ucSlaveDemod++)
+ {
+ dwError = DRV_GetEEPROMConfig2(pdc, ucSlaveDemod);
+ if (dwError) return(dwError);
+ dwError = DRV_InitDevInfo(pdc, ucSlaveDemod);
+ if (dwError) return(dwError);
+ }
+
+ return(dwError);
+}
+
+static DWORD DRV_SetBusTuner(
+ void * handle,
+ Word busId,
+ Word tunerId
+)
+{
+ DWORD dwError = Error_NO_ERROR;
+ DWORD version = 0;
+
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+
+ deb_data("- Enter %s Function -",__FUNCTION__);
+ deb_data("busId = 0x%x, tunerId =0x%x\n", busId, tunerId);
+
+ if ((pdc->UsbMode==0x0110) && (busId==Bus_USB)) {
+ busId=Bus_USB11;
+ }
+
+ dwError = Demodulator_setBusTuner ((Demodulator*) &pdc->Demodulator, busId, tunerId);
+ if (dwError) {deb_data("Demodulator_setBusTuner error\n");return dwError;}
+
+ dwError = Demodulator_getFirmwareVersion ((Demodulator*) &pdc->Demodulator, Processor_LINK, &version);
+ if (version != 0) {
+ pdc->Demodulator.booted = True;
+ }
+ else {
+ pdc->Demodulator.booted = False;
+ }
+ if (dwError) {deb_data("Demodulator_getFirmwareVersion error\n");}
+
+ return(dwError);
+}
+
+
+
+static DWORD DRV_TunerPowerCtrl(
+ void * handle,
+ BYTE ucSlaveDemod,
+ Bool bPowerOn
+)
+{
+ DWORD dwError = Error_NO_ERROR;
+
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+
+ deb_data("- Enter %s Function -",__FUNCTION__);
+ deb_data("chip = %d\n", ucSlaveDemod);
+
+ /* init gpioH7 */
+ dwError = Demodulator_writeRegisterBits((Demodulator*) &pdc->Demodulator, 0, Processor_LINK, p_reg_top_gpioh7_en, reg_top_gpioh7_en_pos, reg_top_gpioh7_en_len, 1);
+ dwError = Demodulator_writeRegisterBits((Demodulator*) &pdc->Demodulator, 0, Processor_LINK, p_reg_top_gpioh7_on, reg_top_gpioh7_on_pos, reg_top_gpioh7_on_len, 1);
+
+ if(bPowerOn)
+ PTI.bTunerInited = true;
+ else
+ PTI.bTunerInited = false;
+
+
+ if(bPowerOn) //tuner on
+ {
+ dwError = Demodulator_writeRegisterBits((Demodulator*) &pdc->Demodulator, 0, Processor_LINK, p_reg_top_gpioh7_o, reg_top_gpioh7_o_pos, reg_top_gpioh7_o_len, 1);
+
+ if(pdc->bTunerPowerOff == true)
+ {
+ dwError = Demodulator_initialize ((Demodulator*) &pdc->Demodulator, pdc->Demodulator.chipNumber , pdc->Demodulator.bandwidth[0], pdc->StreamType, pdc->architecture);
+ pdc->bTunerPowerOff = false;
+ }
+ }
+ else //tuner off
+ {
+ if(pdc->architecture == Architecture_PIP)
+ {
+ if(pdc->fc[0].tunerinfo.bTunerInited == false && pdc->fc[1].tunerinfo.bTunerInited == false)
+ {
+ if(pdc->bTunerPowerOff == false)
+ {
+ dwError = Demodulator_finalize((Demodulator*) &pdc->Demodulator);
+ pdc->bTunerPowerOff = true;
+ }
+
+ dwError = Demodulator_writeRegisterBits((Demodulator*) &pdc->Demodulator, 0, Processor_LINK, p_reg_top_gpioh7_o, reg_top_gpioh7_o_pos, reg_top_gpioh7_o_len, 0);
+ }
+ }
+ else
+ {
+ if(pdc->bTunerPowerOff == false)
+ {
+ dwError = Demodulator_finalize((Demodulator*) &pdc->Demodulator);
+ pdc->bTunerPowerOff = true;
+ }
+
+ dwError = Demodulator_writeRegisterBits((Demodulator*) &pdc->Demodulator, 0, Processor_LINK, p_reg_top_gpioh7_o, reg_top_gpioh7_o_pos, reg_top_gpioh7_o_len, 0);
+ }
+
+ }
+ return(dwError);
+}
+
+static DWORD DRV_ApCtrl (
+ void * handle,
+ Byte ucSlaveDemod,
+ Bool bOn
+)
+{
+ DWORD dwError = Error_NO_ERROR;
+
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+ deb_data(" ucSlaveDemod = %d, bOn = %s \n", ucSlaveDemod, bOn?"ON":"OFF");
+
+ //deb_data("enter DRV_ApCtrl: Demod[%d].GraphBuilt = %d", ucSlaveDemod, pdc->fc[ucSlaveDemod].GraphBuilt);
+
+ dwError = DRV_TunerPowerCtrl(pdc, ucSlaveDemod, bOn);
+ if(dwError) { deb_data(" DRV_TunerPowerCtrl Fail: 0x%08x\n", dwError); return(dwError);}
+
+
+ dwError = Demodulator_controlPowerSaving((Demodulator*) &pdc->Demodulator, ucSlaveDemod, bOn);
+ if(dwError) { deb_data(" DRV_ApCtrl: Demodulator_controlPowerSaving error = 0x%08x\n", dwError); return(dwError);}
+
+ return(dwError);
+}
+
+
+static DWORD DRV_TunerWakeup(
+ void * handle
+)
+{
+ DWORD dwError = Error_NO_ERROR;
+
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT) handle;
+
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+
+ //tuner power on
+ dwError = Demodulator_writeRegisterBits((Demodulator*) &pdc->Demodulator, 0, Processor_LINK, p_reg_top_gpioh7_o, reg_top_gpioh7_o_pos, reg_top_gpioh7_o_len, 1);
+
+ return(dwError);
+
+}
+
+static DWORD DRV_Reboot(
+ void * handle
+)
+{
+ DWORD dwError = Error_NO_ERROR;
+
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT) handle;
+
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+
+ dwError = Demodulator_reboot((Demodulator*) &pdc->Demodulator);
+
+ return(dwError);
+}
+
+
+
+static DWORD DRV_USBSetup(
+ void* handle
+)
+{
+ DWORD dwError = Error_NO_ERROR;
+
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT) handle;
+
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+
+ int i;
+
+ if (pdc->Demodulator.chipNumber == 2)
+ {
+ //timing
+ for (i=0; i<2; i++)
+ {
+ dwError = Demodulator_writeRegisterBits ((Demodulator*) &pdc->Demodulator,i, Processor_OFDM, p_reg_dca_fpga_latch, reg_dca_fpga_latch_pos, reg_dca_fpga_latch_len, 0x66);
+ if(dwError) return (dwError);
+ dwError = Demodulator_writeRegisterBits ((Demodulator*) &pdc->Demodulator, i, Processor_OFDM, p_reg_dca_platch, reg_dca_platch_pos, reg_dca_platch_len, 1);
+ if(dwError) return (dwError);
+ }
+ }
+ return(dwError);
+}
+
+static DWORD DRV_NIMSuspend(
+ void * handle,
+ bool bSuspend
+
+)
+{
+ deb_data("- Enter DRV_NIMSuspend : bSuspend = %s\n", bSuspend ? "ON":"OFF");
+
+ DWORD dwError = Error_NO_ERROR;
+
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT) handle;
+
+ if(bSuspend) //sleep
+ {
+ dwError = Demodulator_writeRegisterBits((Demodulator*) &pdc->Demodulator, 0, Processor_LINK, p_reg_top_gpioh5_o, reg_top_gpioh5_o_pos, reg_top_gpioh5_o_len, 1);
+ if(dwError) return (dwError);
+ }
+ else //resume
+ {
+ dwError = Demodulator_writeRegisterBits((Demodulator*) &pdc->Demodulator, 0, Processor_LINK, p_reg_top_gpioh5_o, reg_top_gpioh5_o_pos, reg_top_gpioh5_o_len, 0);
+ if(dwError) return (dwError);
+ }
+
+ return(dwError);
+}
+
+static DWORD DRV_InitNIMSuspendRegs(
+ void * handle
+)
+{
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT) handle;
+
+ dwError = Demodulator_writeRegisterBits((Demodulator*) &pdc->Demodulator, 0, Processor_LINK, p_reg_top_gpioh5_en, reg_top_gpioh5_en_pos, reg_top_gpioh5_en_len, 1);
+ dwError = Demodulator_writeRegisterBits((Demodulator*) &pdc->Demodulator, 0, Processor_LINK, p_reg_top_gpioh5_on, reg_top_gpioh5_on_pos, reg_top_gpioh5_on_len, 1);
+ dwError = Demodulator_writeRegisterBits((Demodulator*) &pdc->Demodulator, 0, Processor_LINK, p_reg_top_gpioh5_o, reg_top_gpioh5_o_pos, reg_top_gpioh5_o_len, 0);
+
+ dwError = Demodulator_writeRegisterBits((Demodulator*) &pdc->Demodulator, 1, Processor_LINK, p_reg_top_pwrdw, reg_top_pwrdw_pos, reg_top_pwrdw_len, 1);
+
+ dwError = Demodulator_writeRegisterBits((Demodulator*) &pdc->Demodulator, 1, Processor_LINK, p_reg_top_pwrdw_hwen, reg_top_pwrdw_hwen_pos, reg_top_pwrdw_hwen_len, 1);
+
+ return(dwError);
+}
+
+static DWORD DRV_NIMReset(
+ void * handle
+)
+{
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ PDEVICE_CONTEXT pdc = (PDEVICE_CONTEXT)handle;
+
+ //Set AF0350 GPIOH1 to 0 to reset AF0351
+
+ dwError = Demodulator_writeRegisterBits((Demodulator*) &pdc->Demodulator, 0, Processor_LINK, p_reg_top_gpioh1_en, reg_top_gpioh1_en_pos, reg_top_gpioh1_en_len, 1);
+ dwError = Demodulator_writeRegisterBits((Demodulator*) &pdc->Demodulator, 0, Processor_LINK, p_reg_top_gpioh1_on, reg_top_gpioh1_on_pos, reg_top_gpioh1_on_len, 1);
+ dwError = Demodulator_writeRegisterBits((Demodulator*) &pdc->Demodulator, 0, Processor_LINK, p_reg_top_gpioh1_o, reg_top_gpioh1_o_pos, reg_top_gpioh1_o_len, 0);
+
+ mdelay(50);
+
+ dwError = Demodulator_writeRegisterBits((Demodulator*) &pdc->Demodulator, 0, Processor_LINK, p_reg_top_gpioh1_o, reg_top_gpioh1_o_pos, reg_top_gpioh1_o_len, 1);
+
+ return(dwError);
+}
+
+//************** DL_ *************//
+
+static DWORD DL_NIMReset(
+ void * handle
+)
+{
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ dwError = DRV_NIMReset(handle);
+
+ mutex_unlock(&mymutex);
+
+ return (dwError);
+}
+
+static DWORD DL_USBSetup(
+ void * handle
+)
+{
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ dwError = DRV_USBSetup(handle);
+
+ mutex_unlock(&mymutex);
+
+ return (dwError);
+}
+
+static DWORD DL_NIMSuspend(
+ void * handle,
+ bool bSuspend
+)
+{
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ dwError = DRV_NIMSuspend(handle, bSuspend);
+
+ mutex_unlock(&mymutex);
+
+ return (dwError);
+}
+
+static DWORD DL_InitNIMSuspendRegs(
+ void * handle
+)
+{
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ dwError = DRV_InitNIMSuspendRegs(handle);
+
+ mutex_unlock(&mymutex);
+
+ return (dwError);
+}
+static DWORD DL_Initialize(
+ void * handle
+)
+{
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ dwError = DRV_Initialize(handle);
+
+ mutex_unlock(&mymutex);
+
+ return (dwError);
+
+}
+
+static DWORD DL_SetBusTuner(
+ void * handle,
+ Word busId,
+ Word tunerId
+)
+{
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ dwError = DRV_SetBusTuner(handle, busId, tunerId);
+
+ mutex_unlock(&mymutex);
+
+ return (dwError);
+
+}
+
+static DWORD DL_GetEEPROMConfig(
+ void * handle
+)
+{
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ dwError = DRV_GetEEPROMConfig(handle);
+
+ mutex_unlock(&mymutex);
+
+ return(dwError);
+}
+
+static DWORD DL_TunerWakeup(
+ void * handle
+)
+{
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ dwError = DRV_TunerWakeup(handle);
+
+ mutex_unlock(&mymutex);
+
+ return(dwError);
+}
+static DWORD DL_IrTblDownload(
+ void * handle
+)
+{
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ dwError = DRV_IrTblDownload(handle);
+
+ mutex_unlock(&mymutex);
+
+ return(dwError);
+}
+
+
+DWORD DL_TunerPowerCtrl(u8 bPowerOn)
+{
+
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+ BYTE ucSlaveDemod=0;
+
+ deb_data("enter DL_TunerPowerCtrl: bOn = %s\n", bPowerOn?"ON":"OFF");
+
+ for (ucSlaveDemod=0; ucSlaveDemod<PDC->Demodulator.chipNumber; ucSlaveDemod++)
+ {
+ dwError = DRV_TunerPowerCtrl(PDC, ucSlaveDemod, bPowerOn);
+ if(dwError) deb_data(" DRV_TunerPowerCtrl Fail: 0x%08x\n", dwError);
+ }
+
+ mutex_unlock(&mymutex);
+
+ return (dwError);
+}
+//EXPORT_SYMBOL(DL_TunerPowerCtrl);
+
+DWORD DL_ResetPID(
+ IN BYTE chip
+)
+{
+ mutex_lock(&mymutex);
+
+ DWORD dwError = DRV_ResetPID(PDC, chip);
+
+ mutex_unlock(&mymutex);
+
+ return(dwError);
+}
+
+DWORD DL_AddPID(
+ IN BYTE ucSlaveDemod,
+ IN Byte index,
+ IN Pid pid
+)
+{
+ mutex_lock(&mymutex);
+
+ DWORD dwError = DRV_AddPID(PDC, ucSlaveDemod,index, pid);
+
+ mutex_unlock(&mymutex);
+
+ return(dwError);
+}
+
+DWORD DL_RemovePID(
+ IN BYTE ucSlaveDemod,
+ IN Byte index,
+ IN Pid pid
+)
+{
+ mutex_lock(&mymutex);
+
+ DWORD dwError = DRV_RemovePID(PDC, ucSlaveDemod,index, pid);
+
+ mutex_unlock(&mymutex);
+
+ return(dwError);
+}
+
+DWORD DL_PIDOnOff(
+ IN BYTE ucSlaveDemod,
+ IN bool bOn
+)
+{
+ mutex_lock(&mymutex);
+
+ DWORD dwError = DRV_PIDOnOff(PDC, ucSlaveDemod, bOn);
+
+ mutex_unlock(&mymutex);
+
+ return(dwError);
+}
+
+DWORD DL_ApCtrl (
+ BYTE ucSlaveDemod,
+ Bool bOn
+)
+{
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+ BYTE i=0;
+
+ deb_data("- Enter %s Function -",__FUNCTION__);
+ deb_data(" chip = %d bOn = %s\n", ucSlaveDemod, bOn?"ON":"OFF");
+
+ if(PDC->architecture != Architecture_PIP)
+ {
+ if ( PDC->Demodulator.chipNumber == 2 && bOn) dwError = DL_NIMSuspend(PDC, false);
+
+ for (i=0; i<PDC->Demodulator.chipNumber; i++)
+ {
+ if (bOn)
+ dwError = DRV_ApCtrl (PDC, i, bOn);
+ else
+ if (PDC->bTunerPowerOff != true) dwError = DRV_ApCtrl (PDC, i, bOn);
+
+ if(!bOn)
+ {
+ PDC->fc[i].ulDesiredFrequency = 0;
+ PDC->fc[i].ucDesiredBandWidth = 0;
+ }
+ }
+
+ if(PDC->Demodulator.chipNumber == 2 && !bOn) dwError = DL_NIMSuspend(PDC, true);
+ }
+ else
+ {
+ if (bOn)
+ {
+ PDC->fc[ucSlaveDemod].GraphBuilt = 1;
+
+ if (PDC->fc[0].GraphBuilt == 0 || PDC->fc[1].GraphBuilt == 0)
+ dwError = DL_NIMSuspend(PDC, false);
+
+ dwError = DRV_ApCtrl (PDC, ucSlaveDemod, bOn);
+ }
+ else
+ {
+
+ PDC->fc[ucSlaveDemod].GraphBuilt = 0;
+
+ if (PDC->bTunerPowerOff != true) dwError = DRV_ApCtrl (PDC, ucSlaveDemod, bOn);
+
+ if (PDC->fc[0].GraphBuilt == 0 && PDC->fc[1].GraphBuilt == 0 && PDC->bTunerPowerOff == true)
+ dwError = DL_NIMSuspend(PDC, true);
+ }
+ }
+
+ mutex_unlock(&mymutex);
+
+ return(dwError);
+}
+//EXPORT_SYMBOL(DL_ApCtrl);
+
+DWORD DL_Tuner_SetFreqBw(BYTE ucSlaveDemod, u32 dwFreq,u8 ucBw)
+{
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+ if (PDC->fc[ucSlaveDemod].ulDesiredFrequency!=dwFreq || PDC->fc[ucSlaveDemod].ucDesiredBandWidth!=ucBw*1000)
+ dwError = DRV_SetFreqBw(PDC, ucSlaveDemod, dwFreq, ucBw);
+
+ mutex_unlock(&mymutex);
+ return(dwError);
+}
+//EXPORT_SYMBOL(DL_Tuner_SetFreq);
+
+DWORD DL_isLocked(BYTE ucSlaveDemod, Bool *bLock )
+{
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+
+ dwError = DRV_isLocked(PDC, ucSlaveDemod, bLock);
+
+ mutex_unlock(&mymutex);
+ return(dwError);
+}
+
+DWORD DL_getSignalStrength(BYTE ucSlaveDemod, BYTE* strength)
+{
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+
+ dwError = DRV_getSignalStrength(PDC, ucSlaveDemod, strength);
+
+// deb_data(" The signal strength is %d \n", *strength);
+ mutex_unlock(&mymutex);
+
+ return(dwError);
+}
+
+DWORD DL_getSignalStrengthDbm(BYTE ucSlaveDemod, Long* strengthDbm)
+{
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+
+ dwError = DRV_getSignalStrengthDbm(PDC, ucSlaveDemod, strengthDbm);
+
+mutex_unlock(&mymutex);
+ return(dwError);
+}
+
+DWORD DL_getChannelStatistic(BYTE ucSlaveDemod, ChannelStatistic* channelStatistic)
+{
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+
+ dwError = DRV_getChannelStatistic(PDC, ucSlaveDemod, channelStatistic);
+
+ mutex_unlock(&mymutex);
+
+ return(dwError);
+}
+
+DWORD DL_getChannelModulation(BYTE ucSlaveDemod, ChannelModulation* channelModulation)
+{
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+
+ dwError = DRV_getChannelModulation(PDC, ucSlaveDemod, channelModulation);
+
+ mutex_unlock(&mymutex);
+
+ return(dwError);
+}
+
+DWORD DL_getSNR(BYTE ucSlaveDemod, Constellation* constellation, BYTE* snr)
+{
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+ ChannelModulation channelModulation;
+ DWORD snr_value;
+
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+
+ dwError = DRV_getChannelModulation(PDC, ucSlaveDemod, &channelModulation);
+ if (dwError) return(dwError);
+
+ dwError = DRV_getSNRValue(PDC, &snr_value);
+ if (dwError) return(dwError);
+
+ *constellation = channelModulation.constellation;
+
+ if(channelModulation.constellation == 0) //Constellation_QPSK
+ {
+ if(snr_value < 0xB4771) *snr = 0;
+ else if(snr_value < 0xC1AED) *snr = 1;
+ else if(snr_value < 0xD0D27) *snr = 2;
+ else if(snr_value < 0xE4D19) *snr = 3;
+ else if(snr_value < 0xE5DA8) *snr = 4;
+ else if(snr_value < 0x107097) *snr = 5;
+ else if(snr_value < 0x116975) *snr = 6;
+ else if(snr_value < 0x1252D9) *snr = 7;
+ else if(snr_value < 0x131FA4) *snr = 8;
+ else if(snr_value < 0x13D5E1) *snr = 9;
+ else if(snr_value < 0x148E53) *snr = 10;
+ else if(snr_value < 0x15358B) *snr = 11;
+ else if(snr_value < 0x15DD29) *snr = 12;
+ else if(snr_value < 0x168112) *snr = 13;
+ else if(snr_value < 0x170B61) *snr = 14;
+ else if(snr_value < 0x17A532) *snr = 15;
+ else if(snr_value < 0x180F94) *snr = 16;
+ else if(snr_value < 0x186ED2) *snr = 17;
+ else if(snr_value < 0x18B271) *snr = 18;
+ else if(snr_value < 0x18E118) *snr = 19;
+ else if(snr_value < 0x18FF4B) *snr = 20;
+ else if(snr_value < 0x190AF1) *snr = 21;
+ else if(snr_value < 0x191451) *snr = 22;
+ else *snr = 23;
+ }
+
+ else if ( channelModulation.constellation == 1) //Constellation_16QAM
+ {
+ if(snr_value < 0x4F0D5) *snr = 0;
+ else if(snr_value < 0x5387A) *snr = 1;
+ else if(snr_value < 0x573A4) *snr = 2;
+ else if(snr_value < 0x5A99E) *snr = 3;
+ else if(snr_value < 0x5CC80) *snr = 4;
+ else if(snr_value < 0x5EB62) *snr = 5;
+ else if(snr_value < 0x5FECF) *snr = 6;
+ else if(snr_value < 0x60B80) *snr = 7;
+ else if(snr_value < 0x62501) *snr = 8;
+ else if(snr_value < 0x64865) *snr = 9;
+ else if(snr_value < 0x69604) *snr = 10;
+ else if(snr_value < 0x6F356) *snr = 11;
+ else if(snr_value < 0x7706A) *snr = 12;
+ else if(snr_value < 0x804D3) *snr = 13;
+ else if(snr_value < 0x89D1A) *snr = 14;
+ else if(snr_value < 0x93E3D) *snr = 15;
+ else if(snr_value < 0x9E35D) *snr = 16;
+ else if(snr_value < 0xA7C3C) *snr = 17;
+ else if(snr_value < 0xAFAF8) *snr = 18;
+ else if(snr_value < 0xB719D) *snr = 19;
+ else if(snr_value < 0xBDA6A) *snr = 20;
+ else if(snr_value < 0xC0C75) *snr = 21;
+ else if(snr_value < 0xC3F7D) *snr = 22;
+ else if(snr_value < 0xC5E62) *snr = 23;
+ else if(snr_value < 0xC6C31) *snr = 24;
+ else if(snr_value < 0xC7925) *snr = 25;
+ else *snr = 26;
+ }
+
+ else if ( channelModulation.constellation == 2) //Constellation_64QAM
+ {
+ if(snr_value < 0x256D0) *snr = 0;
+ else if(snr_value < 0x27A65) *snr = 1;
+ else if(snr_value < 0x29873) *snr = 2;
+ else if(snr_value < 0x2B7FE) *snr = 3;
+ else if(snr_value < 0x2CF1E) *snr = 4;
+ else if(snr_value < 0x2E234) *snr = 5;
+ else if(snr_value < 0x2F409) *snr = 6;
+ else if(snr_value < 0x30046) *snr = 7;
+ else if(snr_value < 0x30844) *snr = 8;
+ else if(snr_value < 0x30A02) *snr = 9;
+ else if(snr_value < 0x30CDE) *snr = 10;
+ else if(snr_value < 0x31031) *snr = 11;
+ else if(snr_value < 0x3144C) *snr = 12;
+ else if(snr_value < 0x315DD) *snr = 13;
+ else if(snr_value < 0x31920) *snr = 14;
+ else if(snr_value < 0x322D0) *snr = 15;
+ else if(snr_value < 0x339FC) *snr = 16;
+ else if(snr_value < 0x364A1) *snr = 17;
+ else if(snr_value < 0x38BCC) *snr = 18;
+ else if(snr_value < 0x3C7D3) *snr = 19;
+ else if(snr_value < 0x408CC) *snr = 20;
+ else if(snr_value < 0x43BED) *snr = 21;
+ else if(snr_value < 0x48061) *snr = 22;
+ else if(snr_value < 0x4BE95) *snr = 23;
+ else if(snr_value < 0x4FA7D) *snr = 24;
+ else if(snr_value < 0x52405) *snr = 25;
+ else if(snr_value < 0x5570D) *snr = 26;
+ else if(snr_value < 0x59FEB) *snr = 27;
+ else if(snr_value < 0x5BF38) *snr = 28;
+ else *snr = 29;
+ }
+
+ else
+ deb_data(" Get constellation is failed!\n");
+
+ mutex_unlock(&mymutex);
+
+ return(dwError);
+}
+
+DWORD DL_ReSetInterval(void)
+{
+
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ mutex_unlock(&mymutex);
+
+ return(dwError);
+}
+//EXPORT_SYMBOL(DL_ReSetInterval);
+
+DWORD DL_Reboot(void)
+{
+
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+
+ dwError = DRV_Reboot(PDC);
+
+ mutex_unlock(&mymutex);
+
+ return(dwError);
+}
+
+DWORD DL_CheckTunerInited(BYTE ucSlaveDemod, Bool *bOn )
+{
+
+ mutex_lock(&mymutex);
+
+ DWORD dwError = Error_NO_ERROR;
+
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+
+ *bOn = PTI.bTunerInited;
+
+ mutex_unlock(&mymutex);
+
+ return(dwError);
+}
+
+DWORD Device_init(struct usb_device *udev,PDEVICE_CONTEXT PDCs, Bool bBoot)
+{
+ DWORD error = Error_NO_ERROR;
+ BYTE filterIdx=0;
+ udevs=udev;
+ PDC=PDCs;
+ int errcount=0;
+
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+
+// define in Af903x.h
+#ifdef QuantaMID
+ printk(" === AfaDTV on Quanta ===\n");
+#endif
+#ifdef EEEPC
+ printk(" === AfaDTV on EEEPC ===\n");
+#endif
+
+#ifdef DRIVER_RELEASE_VERSION
+ printk(" DRIVER_RELEASE_VERSION : %s\n", DRIVER_RELEASE_VERSION);
+#else
+ printk(" DRIVER_RELEASE_VERSION : v0.0-0\n");
+#endif
+
+#ifdef FW_RELEASE_VERSION
+ printk(" FW_RELEASE_VERSION : %s\n", FW_RELEASE_VERSION);
+#else
+ printk(" FW_RELEASE_VERSION : v0_0_0_0\n");
+#endif
+
+#ifdef Version_NUMBER
+ printk(" API_RELEASE_VERSION : %X.%X.%X\n", Version_NUMBER, Version_DATE, Version_BUILD);
+#else
+ printk(" API_RELEASE_VERSION :000.00000000.0\n");
+#endif
+
+
+// printk(" FW_RELEASE_VERSION : %s\n", FW_RELEASE_VERSION);
+// printk(" API_RELEASE_VERSION : %X.%X.%X\n", Version_NUMBER, Version_DATE, Version_BUILD);
+
+
+ //************* Set Device init Info *************//
+ PDC->bEnterSuspend = false;
+ PDC->bSurpriseRemoval = false;
+ PDC->bDevNotResp = false;
+ PDC->bSelectiveSuspend = false;
+ PDC->bTunerPowerOff = false;
+
+ if (bBoot)
+ {
+ PDC->bSupportSelSuspend = false;
+ PDC->Demodulator.userData = (Handle)PDC;
+ PDC->Demodulator.chipNumber = 1;
+ PDC->architecture=Architecture_DCA;
+ PDC->Demodulator.frequency[0] = 666000;
+ PDC->Demodulator.bandwidth[0] = 8000;
+ PDC->bIrTblDownload = false;
+ PDC->fc[0].tunerinfo.TunerId = 0;
+ PDC->fc[1].tunerinfo.TunerId = 0;
+ PDC->bDualTs=false;
+ PDC->FilterCnt = 0;
+ PDC->StreamType = StreamType_DVBT_DATAGRAM;
+ PDC->UsbCtrlTimeOut = 1;
+ }
+ else {
+ PDC->UsbCtrlTimeOut = 5;
+ }//bBoot
+
+#ifdef AFA_USB_DEVICE
+ if (bBoot) {
+ //************* Set USB Info *************//
+ PDC->MaxPacketSize = 0x0200; //default USB2.0
+ PDC->UsbMode = (PDC->MaxPacketSize == 0x200)?0x0200:0x0110;
+ deb_data("USB mode= 0x%x\n", PDC->UsbMode);
+
+ PDC->TsPacketCount = (PDC->UsbMode == 0x200)?TS_PACKET_COUNT_HI:TS_PACKET_COUNT_FU;
+ PDC->TsFrames = (PDC->UsbMode == 0x200)?TS_FRAMES_HI:TS_FRAMES_FU;
+ PDC->TsFrameSize = TS_PACKET_SIZE*PDC->TsPacketCount;
+ PDC->TsFrameSizeDw = PDC->TsFrameSize/4;
+ }
+ PDC->bEP12Error = false;
+ PDC->bEP45Error = false;
+ PDC->ForceWrite = false;
+ PDC->ulActiveFilter = 0;
+#else
+ PDC->bSupportSuspend = false;
+#endif//AFA_USB_DEVICE
+
+#ifdef AFA_USB_DEVICE
+ if(bBoot)
+ {
+ //patch for eeepc
+ error = DL_SetBusTuner (PDC, Bus_USB, Tuner_Afatech_AF9007);
+ PDC->UsbCtrlTimeOut = 5;
+
+ error = DL_SetBusTuner (PDC, Bus_USB, Tuner_Afatech_AF9007);
+ if (error)
+ {
+ deb_data("First DL_SetBusTuner fail : 0x%08x\n",error );
+ errcount++;
+ goto Exit;
+ }
+
+ error =DL_GetEEPROMConfig(PDC);
+ if (error)
+ {
+ deb_data("DL_GetEEPROMConfig fail : 0x%08x\n", error);
+ errcount++;
+ goto Exit;
+ }
+ }//bBoot
+
+ error = DL_SetBusTuner(PDC, Bus_USB, PDC->fc[0].tunerinfo.TunerId);
+ if (error)
+ {
+ deb_data("DL_SetBusTuner fail!\n");
+ errcount++;
+ goto Exit;
+ }
+
+
+ if (PDC->Demodulator.chipNumber == 2 && !PDC->Demodulator.booted) //plug/cold-boot/S4
+ {
+ error = DL_NIMReset(PDC);
+ }
+ else if(PDC->Demodulator.chipNumber == 2 && PDC->Demodulator.booted) //warm-boot/(S1)
+ {
+ error = DL_NIMSuspend(PDC, false);
+ error = DL_TunerWakeup(PDC); //actually for mt2266
+ }
+
+
+ if(PDC->Demodulator.chipNumber == 1 && PDC->Demodulator.booted) //warm-boot/(S1)
+ {
+ error = DL_TunerWakeup(PDC);
+ }
+ if(error) deb_data("DL_NIMReset or DL_NIMSuspend or DL_TunerWakeup fail!\n");
+
+ error = DL_Initialize(PDC);
+ if (error)
+ {
+ deb_data("DL_Initialize fail! 0x%08x\n", error);
+ errcount++;
+ goto Exit;
+ }
+
+ if (PDC->bIrTblDownload)
+ {
+ error = DL_IrTblDownload(PDC);
+ if (error) {deb_data("DL_IrTblDownload fail");errcount++;}
+ }
+
+ if (PDC->Demodulator.chipNumber == 2)
+ {
+ error = DL_USBSetup(PDC);
+ if (error) deb_data("DRV_SDIOSetup fail!");
+ }
+
+ if (PDC->Demodulator.chipNumber == 2)
+ {
+ error = DL_InitNIMSuspendRegs(PDC);
+ if (error) deb_data("DL_InitNIMSuspendRegs fail!");
+ }
+
+ for (filterIdx=0; filterIdx< PDC->Demodulator.chipNumber; filterIdx++)
+ {
+ if (bBoot || !PDC->fc[filterIdx].GraphBuilt)
+ {
+ error = DRV_ApCtrl(PDC, filterIdx, false);
+ if (error) {deb_data("%d: DRV_ApCtrl Fail!\n", filterIdx);errcount++;}
+ }
+ }
+
+/* if(PDC->Demodulator.chipNumber == 2)
+ {
+ if(PDC->fc[0].GraphBuilt==0 && PDC->fc[1].GraphBuilt==0)
+ {
+ error = DL_NIMSuspend(PDC, true);
+ if(error) deb_data("DL_NIMSuspend fail!");
+ }
+ }
+*/
+ deb_data(" %s success!! \n",__FUNCTION__);
+
+Exit:
+#endif //AFA_USB_DEVICE
+
+ if(errcount)
+ printk( "[Device_init] Error %d\n", errcount);
+ return (error);
+}
+//EXPORT_SYMBOL(Device_init);
+
diff --git a/src/af903x-fe.c b/src/af903x-fe.c
new file mode 100644
index 0000000..1939671
--- /dev/null
+++ b/src/af903x-fe.c
@@ -0,0 +1,249 @@
+#include "af903x.h"
+#include "dvb_frontend.h"
+
+struct af903xm_state {
+ struct dvb_frontend demod;
+ fe_bandwidth_t current_bandwidth;
+};
+
+static int af903x_init(struct dvb_frontend *demod)
+{
+ DWORD error = Error_NO_ERROR;
+ deb_data("- Enter %s Function - chip=%d\n",__FUNCTION__, demod->dvb->num);
+
+/* error = DL_ApCtrl(demod->dvb->num,1 );
+ if(error){
+ printk("af903x_init return error\n");
+ return error;
+ }
+*/
+ return 0;
+}
+
+static int af903x_sleep(struct dvb_frontend *demod)
+{
+ DWORD error = Error_NO_ERROR;;
+ deb_data("- Enter %s Function - chip=%d\n",__FUNCTION__, demod->dvb->num);
+
+ DeviceReboot = false;
+
+ /* error = DL_ApCtrl(demod->dvb->num, 0);
+ if (error){
+ printk("af903x_sleep return error\n");
+ return error;
+ }
+*/
+ return 0;
+
+}
+
+static int af903x_identify(struct af903xm_state *state)
+{
+ return 0;
+}
+
+static int af903x_get_frontend(struct dvb_frontend* fe,
+ struct dvb_frontend_parameters *fep)
+{
+ struct af903xm_state *state = fe->demodulator_priv;
+ deb_data("- Enter %s Function - chip=%d\n",__FUNCTION__, fe->dvb->num);
+ fep->inversion = INVERSION_AUTO;
+ fep->u.ofdm.bandwidth = state->current_bandwidth;
+ return 0;
+}
+
+static int af903x_set_frontend(struct dvb_frontend* fe,
+ struct dvb_frontend_parameters *fep)
+{
+ struct af903xm_state *state = fe->demodulator_priv;
+ struct af903x_ofdm_channel ch;
+ DWORD error = Error_NO_ERROR;
+
+ deb_data("- Enter %s Function - chip=%d\n",__FUNCTION__, fe->dvb->num);
+ if (fep->u.ofdm.bandwidth == 0) fep->u.ofdm.bandwidth=8;
+ if (fep->u.ofdm.bandwidth == 1) fep->u.ofdm.bandwidth=7;
+ if (fep->u.ofdm.bandwidth == 2) fep->u.ofdm.bandwidth=6;
+
+ ch.RF_kHz = fep->frequency / 1000;
+ ch.Bw = fep->u.ofdm.bandwidth;
+
+ state->current_bandwidth = fep->u.ofdm.bandwidth;
+
+ deb_data("- Enter %s Function - chip=%d RF=%d, BW=%d\n",__FUNCTION__, fe->dvb->num,ch.RF_kHz,ch.Bw);
+
+ if (ch.RF_kHz<177000 || ch.RF_kHz > 8585000)
+ ch.RF_kHz = 950000;
+
+ error = DL_Tuner_SetFreqBw(fe->dvb->num,ch.RF_kHz,ch.Bw);
+ if (error) printk("af903x_set_frontend return error\n");
+
+ return 0;
+}
+
+static int af903x_read_status(struct dvb_frontend *fe, fe_status_t *stat)
+{
+ //deb_data("- Enter %s Function -chip=%d\n",__FUNCTION__, fe->dvb->num);
+ struct af903xm_state *state = fe->demodulator_priv;
+
+ DWORD error = Error_NO_ERROR;
+ Bool bLock;
+
+ *stat = 0;
+
+ error = DL_isLocked(fe->dvb->num, &bLock);
+ if(error) return 0;//return error;
+
+ if (bLock)
+ {
+ // It's seems ok that always return lock to AP
+ *stat |= FE_HAS_SIGNAL;
+ *stat |= FE_HAS_CARRIER;
+ *stat |= FE_HAS_LOCK;
+ *stat |= FE_HAS_VITERBI;
+ *stat |= FE_HAS_SYNC;
+ }
+
+ return 0;
+}
+
+static int af903x_read_ber(struct dvb_frontend *fe, u32 *ber)
+{
+ struct af903xm_state *state = fe->demodulator_priv;
+
+ DWORD error = Error_NO_ERROR;
+
+ ChannelStatistic channelStatistic;
+
+ error = DL_getChannelStatistic(fe->dvb->num, &channelStatistic);
+ if(error) return error;
+
+ deb_data("- af903x_read_ber postVitErrorCount : %d, postVitBitCount :%d -\n",channelStatistic.postVitErrorCount, channelStatistic.postVitBitCount);
+
+ *ber = channelStatistic.postVitErrorCount * (0xFFFFFFFF / channelStatistic.postVitBitCount);
+ return 0;
+}
+
+static int af903x_read_snr(struct dvb_frontend* fe, u16 *snr)
+{
+// (void) fe;
+// *snr = 0x0000;
+ struct af903xm_state *state = fe->demodulator_priv;
+
+ DWORD error = Error_NO_ERROR;
+ Constellation constellation;
+ BYTE SignalSnr = 0;
+
+ error = DL_getSNR(fe->dvb->num, &constellation, &SignalSnr);
+ if(error) return error;
+
+ deb_data("- af903x_read_snr constellation : %d, SignalSnr :%d -\n",constellation,SignalSnr );
+
+#ifdef QuantaMID
+ *snr = (u16)SignalSnr;
+#else
+ if(constellation == 0)
+ *snr = (u16)SignalSnr * (0xFFFF / 23) ;
+ else if(constellation == 1)
+ *snr = (u16)SignalSnr * (0xFFFF / 26) ;
+ else if(constellation == 2)
+ *snr = (u16)SignalSnr * (0xFFFF / 29) ;
+ else
+ deb_data(" Get constellation is failed!\n");
+#endif
+ return 0;
+}
+
+static int af903x_read_unc_blocks(struct dvb_frontend *fe, u32 *unc)
+{
+ (void) fe;
+ *unc = 0;
+ return 0;
+
+}
+static int af903x_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
+{
+ struct af903xm_state *state = fe->demodulator_priv;
+
+ DWORD error = Error_NO_ERROR;
+ BYTE SignalStrength = 0;
+ Long SignalStrengthdbm;
+
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+#ifdef QuantaMID
+ error = DL_getSignalStrengthDbm(fe->dvb->num, &SignalStrengthdbm);
+ if(error) return error;
+
+ deb_data("- af903x_read_signal_strengthDbm is -%d -\n",-SignalStrengthdbm);
+ *strength = (u16)(-SignalStrengthdbm);
+#else
+ error = DL_getSignalStrength(fe->dvb->num, &SignalStrength);
+ if(error) return error;
+
+ deb_data("- af903x_read_signal_strength is %d -\n",SignalStrength);
+ *strength = (u16)SignalStrength* (0xFFFF/100);
+#endif
+ return 0;
+}
+
+static void af903x_release(struct dvb_frontend *demod)
+{
+ struct af903xm_state *st = demod->demodulator_priv;
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+ kfree(st);
+}
+
+static struct dvb_frontend_ops af903x_ops;
+struct dvb_frontend * af903x_attach(u8 tmp)
+{
+ struct dvb_frontend *demod;
+ struct af903xm_state *st;
+
+ deb_data("- Enter %s Function -\n",__FUNCTION__);
+ st = kzalloc(sizeof(struct af903xm_state), GFP_KERNEL);
+ if (st == NULL)
+ return NULL;
+
+ demod = &st->demod;
+ demod->demodulator_priv = st;
+ memcpy(&st->demod.ops, &af903x_ops, sizeof(struct dvb_frontend_ops));
+
+ af903x_identify(st);
+
+ return demod;
+}
+EXPORT_SYMBOL(af903x_attach);
+
+static struct dvb_frontend_ops af903x_ops = {
+ .info = {
+ .name = "AF903X USB DVB-T",
+ .type = FE_OFDM,
+ .frequency_min = 44250000,
+ .frequency_max = 867250000,
+ .frequency_stepsize = 62500,
+ .caps = FE_CAN_INVERSION_AUTO |
+ FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
+ FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
+ FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO |
+ FE_CAN_TRANSMISSION_MODE_AUTO |
+ FE_CAN_GUARD_INTERVAL_AUTO |
+ FE_CAN_RECOVER |
+ FE_CAN_HIERARCHY_AUTO,
+ },
+
+ .release = af903x_release,
+
+ .init = af903x_init,
+ .sleep = af903x_sleep,
+
+ .set_frontend = af903x_set_frontend,
+ .get_frontend = af903x_get_frontend,
+
+ .read_status = af903x_read_status,
+ .read_ber = af903x_read_ber,
+ .read_signal_strength = af903x_read_signal_strength,
+ .read_snr = af903x_read_snr,
+ .read_ucblocks = af903x_read_unc_blocks,
+};
+MODULE_AUTHOR("Jimmy Chen <JyunYu.Chen@ite.com.tw>");
+MODULE_DESCRIPTION("Driver for the AF903X demodulator");
+MODULE_LICENSE("GPL");
diff --git a/src/af903x-ioctl.h b/src/af903x-ioctl.h
new file mode 100644
index 0000000..14b6df9
--- /dev/null
+++ b/src/af903x-ioctl.h
@@ -0,0 +1,29 @@
+#ifndef _AF903X_IOCTL_H_
+#define _AF903X_IOCTL_H_
+
+#include <linux/ioctl.h> /* needed for the _IOW etc stuff used later */
+
+/*
+ * Ioctl definitions
+ */
+
+/* Use 'k' as magic number */
+#define AFA_IOC_MAGIC 'k'
+/* Please use a different 8-bit number in your code */
+
+//#define AFA_IOCRESETINTERVAL _IO(AFA_IOC_MAGIC, 0)
+
+/*
+ * S means "Set" through a ptr,
+ * T means "Tell" directly with the argument value
+ * G means "Get": reply by setting through a pointer
+ * Q means "Query": response is on the return value
+ * X means "eXchange": switch G and S atomically
+ * H means "sHift": switch T and Q atomically
+ */
+
+
+/* ... more to come */
+
+#define AFA_IOC_MAXNR 14
+#endif /* _AF903X-IOCTL_H_ */
diff --git a/src/af903x-tuner.c b/src/af903x-tuner.c
new file mode 100644
index 0000000..20b3a2a
--- /dev/null
+++ b/src/af903x-tuner.c
@@ -0,0 +1,92 @@
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/delay.h>
+#include <linux/dvb/frontend.h>
+
+#include "dvb_frontend.h"
+#include "af903x.h"
+
+#define IF2 36150 // IF2 frequency = 36.150 MHz
+#define FREF 16000 // Quartz oscillator 16 MHz
+
+static int tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
+{
+ struct tuner_priv *priv=NULL;
+ DWORD dwError = Error_NO_ERROR;
+ DWORD freq = params->frequency ;// 1000; // Hz -> kHz
+
+ priv->bandwidth = (fe->ops.info.type == FE_OFDM) ? params->u.ofdm.bandwidth : 0;
+
+ deb_data("%s - freq : %d , bandwidth : %dn",__FUNCTION__, freq,priv->bandwidth);
+
+ dwError =DL_Tuner_SetFreqBw(fe->dvb->num, freq,priv->bandwidth);
+ if (dwError) deb_data("tuner_set_params Fail !\n");
+
+ return 0;
+}
+static int tuner_get_frequency(struct dvb_frontend *fe, u32 *frequency)
+{
+ struct tuner_priv *priv = fe->tuner_priv;
+ *frequency = priv->frequency;
+ return 0;
+}
+
+static int tuner_get_bandwidth(struct dvb_frontend *fe, u32 *bandwidth)
+{
+ struct tuner_priv *priv = fe->tuner_priv;
+ *bandwidth = priv->bandwidth;
+ return 0;
+}
+
+static int tuner_init(struct dvb_frontend *fe)
+{
+
+ return 0;
+}
+
+static int tuner_sleep(struct dvb_frontend *fe)
+{
+ return 0;
+}
+
+static int tuner_release(struct dvb_frontend *fe)
+{
+ kfree(fe->tuner_priv);
+ fe->tuner_priv = NULL;
+ return 0;
+}
+
+static const struct dvb_tuner_ops tuner_tuner_ops = {
+ .info = {
+ .name = "dvb_usb_tuner",
+ .frequency_min = 48000000,
+ .frequency_max = 860000000,
+ .frequency_step = 50000,
+ },
+
+ .release = tuner_release,
+
+ .init = tuner_init,
+ .sleep = tuner_sleep,
+
+ .set_params = tuner_set_params,
+ .get_frequency = tuner_get_frequency,
+ .get_bandwidth = tuner_get_bandwidth
+};
+
+/* This functions tries to identify a MT2060 tuner by reading the PART/REV register. This is hasty. */
+struct dvb_frontend * tuner_attach(struct dvb_frontend *fe)
+{
+ struct tuner_priv *priv = NULL;
+
+ priv = kzalloc(sizeof(struct tuner_priv), GFP_KERNEL);
+ if (priv == NULL)
+ return NULL;
+
+ memcpy(&fe->ops.tuner_ops, &tuner_tuner_ops, sizeof(struct dvb_tuner_ops));
+
+ fe->tuner_priv = priv;
+
+ return fe;
+}
+EXPORT_SYMBOL(tuner_attach);
diff --git a/src/af903x.h b/src/af903x.h
new file mode 100644
index 0000000..4158343
--- /dev/null
+++ b/src/af903x.h
@@ -0,0 +1,225 @@
+
+#ifndef _AF903X_H_
+#define _AF903X_H_
+
+#define DVB_USB_LOG_PREFIX "AF903X"
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <linux/module.h>
+#include <linux/kref.h>
+#include <linux/smp_lock.h>
+#include <linux/usb.h>
+#include <asm/uaccess.h>
+#include "dvb-usb.h"
+#include "af903x-ioctl.h"
+#include "demodulator.h"
+#include "userdef.h"
+#include "firmware.h"
+#include "type.h"
+#include "Common.h"
+#include <linux/version.h>
+#include <linux/mutex.h>
+
+
+#define DRIVER_RELEASE_VERSION "v9.08.14.1"
+//***************** customization *****************
+//#define QuantaMID 1
+//#define EEEPC 1
+//***************** from compat.h *****************
+#if LINUX_VERSION_CODE == KERNEL_VERSION(2,6,18)
+typedef int bool;
+#define true 1
+#define false 0
+//***************** from dvb-usb.h *****************
+#define dvb_usb_device_properties dvb_usb_properties
+#define dvb_usb_adapter dvb_usb_device
+#endif
+//***************** from device.h *****************//
+#define AFA_USB_DEVICE
+
+#define SLAVE_DEMOD_2WIREADDR 0x3A
+
+#define TS_PACKET_SIZE 188
+#define TS_PACKET_COUNT_HI 348
+#define TS_PACKET_COUNT_FU 21
+
+//***************** from driver.h *****************//
+#define TS_FRAMES_HI 16
+#define TS_FRAMES_FU 128
+#define MAX_USB20_IRP_NUM 5
+#define MAX_USB11_IRP_NUM 2
+
+//***************** from afdrv.h *****************//
+#define GANY_ONLY 0x42F5
+#define EEPROM_FLB_OFS 8
+
+#define EEPROM_IRMODE (GANY_ONLY+EEPROM_FLB_OFS+0x10) //00:disabled, 01:HID
+#define EEPROM_SELSUSPEND (GANY_ONLY+EEPROM_FLB_OFS+0x28) //Selective Suspend Mode
+#define EEPROM_TSMODE (GANY_ONLY+EEPROM_FLB_OFS+0x28+1) //0:one ts, 1:dual ts
+#define EEPROM_2WIREADDR (GANY_ONLY+EEPROM_FLB_OFS+0x28+2) //MPEG2 2WireAddr
+#define EEPROM_SUSPEND (GANY_ONLY+EEPROM_FLB_OFS+0x28+3) //Suspend Mode
+#define EEPROM_IRTYPE (GANY_ONLY+EEPROM_FLB_OFS+0x28+4) //0:NEC, 1:RC6
+#define EEPROM_SAWBW1 (GANY_ONLY+EEPROM_FLB_OFS+0x28+5)
+#define EEPROM_XTAL1 (GANY_ONLY+EEPROM_FLB_OFS+0x28+6) //0:28800, 1:20480
+#define EEPROM_SPECINV1 (GANY_ONLY+EEPROM_FLB_OFS+0x28+7)
+#define EEPROM_TUNERID (GANY_ONLY+EEPROM_FLB_OFS+0x30+4) //
+#define EEPROM_IFFREQL (GANY_ONLY+EEPROM_FLB_OFS+0x30)
+#define EEPROM_IFFREQH (GANY_ONLY+EEPROM_FLB_OFS+0x30+1)
+#define EEPROM_IF1L (GANY_ONLY+EEPROM_FLB_OFS+0x30+2)
+#define EEPROM_IF1H (GANY_ONLY+EEPROM_FLB_OFS+0x30+3)
+#define EEPROM_SHIFT (0x10) //EEPROM Addr Shift for slave front end
+
+
+extern int dvb_usb_af903x_debug;
+//#define deb_info(args...) dprintk(dvb_usb_af903x_debug,0x01,args)
+//#define deb_fw(args...) dprintk(dvb_usb_af903x_debug,0x02,args)
+//#define deb_fwdata(args...) dprintk(dvb_usb_af903x_debug,0x04,args)
+//#define deb_data(args...) dprintk(dvb_usb_af903x_debug,0x08,args)
+
+
+//#define DEBUG 1
+#ifdef DEBUG
+#define deb_data(args...) printk(KERN_NOTICE args)
+#else
+#define deb_data(args...)
+#endif
+
+//***************** from device.h *****************//
+typedef struct _TUNER_INFO {
+
+ Bool bTunerInited;
+ Bool bSettingFreq;
+ BYTE TunerId;
+ Bool bTunerOK;
+ Tuner_struct MXL5005_Info;
+
+} TUNER_INFO, *PTUNER_INFO;
+typedef struct _FILTER_CONTEXT_HW {
+ DWORD ulCurrentFrequency;
+ WORD ucCurrentBandWidth;
+ DWORD ulDesiredFrequency;
+ WORD ucDesiredBandWidth;
+ //ULONG ulBandWidth;
+ Bool bTimerOn;
+ // PKSFILTER filter;
+ Byte GraphBuilt;
+ TUNER_INFO tunerinfo;
+ //SIGNAL_STATISTICS ss;
+ //SIGNAL_RETRAIN sr;
+ //DWORD gdwOrigFCW; //move from AF901x.cpp [global variable]
+ //BYTE gucOrigUnplugTh; //move from AF901x.cpp [global variable]
+ //BYTE gucPreShiftIdx; //move from AF901x.cpp [global variable]
+ // PKSFILTERFACTORY pFilterFactory;
+ int bEnPID;
+ //ULONG ulcPIDs;
+ // ULONG aulPIDs[32];
+ Bool bApOn;
+ int bResetTs;
+ Byte OvrFlwChk;
+} FILTER_CONTEXT_HW, *PFILTER_CONTEXT_HW;
+
+typedef struct _DEVICE_CONTEXT {
+ FILTER_CONTEXT_HW fc[2];
+ Byte DeviceNo;
+ Bool bBootCode;
+ Bool bEP12Error;
+ Bool bEP45Error;
+ //bool bDebugMsg;
+ //bool bDevExist;
+ Bool bDualTs;
+ Bool bIrTblDownload;
+ Byte BulkOutData[256];
+ u32 WriteLength;
+ Bool bSurpriseRemoval;
+ Bool bDevNotResp;
+ Bool bEnterSuspend;
+ Bool bSupportSuspend;
+ Bool bSupportSelSuspend;
+ u16 regIdx;
+ Byte eepromIdx;
+ u16 UsbMode;
+ u16 MaxPacketSize;
+ u32 MaxIrpSize;
+ u32 TsFrames;
+ u32 TsFrameSize;
+ u32 TsFrameSizeDw;
+ u32 TsPacketCount;
+ //BYTE ucDemod2WireAddr;
+ //USB_IDLE_CALLBACK_INFO cbinfo; // callback info for selective suspend // our selective suspend IRP
+
+ Bool bSelectiveSuspend;
+ u32 ulActiveFilter;
+ //BYTE ucSerialNo;
+ Architecture architecture;
+ //BYTE Tuner_Id;
+ StreamType StreamType;
+ Bool bDCAPIP;
+ Bool bSwapFilter;
+ Byte FilterCnt;
+ Bool bTunerPowerOff;
+ //PKSPIN PinSave;
+ Byte UsbCtrlTimeOut;
+
+ Ganymede Demodulator;
+
+ Bool ForceWrite;
+
+} DEVICE_CONTEXT, *PDEVICE_CONTEXT;
+
+#define PTI (PDC->fc[ucSlaveDemod].tunerinfo) //TunerInfo pointer
+
+
+
+struct af903x_ofdm_channel {
+ u32 RF_kHz;
+ u8 Bw;
+ s16 nfft;
+ s16 guard;
+ s16 nqam;
+ s16 vit_hrch;
+ s16 vit_select_hp;
+ s16 vit_alpha;
+ s16 vit_code_rate_hp;
+ s16 vit_code_rate_lp;
+ u8 intlv_native;
+};
+
+struct tuner_priv {
+ struct tuner_config *cfg;
+ struct i2c_adapter *i2c;
+
+ u32 frequency;
+ u32 bandwidth;
+ u16 if1_freq;
+ u8 fmfreq;
+};
+
+extern struct dvb_frontend * tuner_attach(struct dvb_frontend *fe);
+extern struct dvb_frontend * af903x_attach(u8 TMP);
+extern struct dvb_usb_device_properties af903x_properties[];
+extern struct usb_device_id af903x_usb_id_table[];
+extern struct usb_device *udevs;
+extern PDEVICE_CONTEXT PDC;
+extern int af903x_device_count;
+
+extern DWORD Device_init(struct usb_device *udev,PDEVICE_CONTEXT PDCs, Bool bBoot);
+extern DWORD DL_ApCtrl (BYTE ucSlaveDemod, Bool bOn);
+extern DWORD DL_Tuner_SetFreqBw(BYTE ucSlaveDemod,u32 ucFreq,u8 ucBw);
+extern DWORD DL_isLocked(BYTE ucSlaveDemod, Bool *bLock);
+extern DWORD DL_getSignalStrength(BYTE ucSlaveDemod, BYTE* strength);
+extern DWORD DL_getSignalStrengthDbm(BYTE ucSlaveDemod, Long* strengthDbm);
+extern DWORD DL_getChannelStatistic(BYTE ucSlaveDemod, ChannelStatistic* channelStatistic);
+extern DWORD DL_getChannelModulation(BYTE ucSlaveDemod, ChannelModulation* channelModulation);
+extern DWORD DL_getSNR(BYTE ucSlaveDemod, Constellation* constellation, BYTE* snr);
+extern DWORD DL_ReSetInterval(void);
+extern DWORD DL_Reboot(void);
+extern DWORD DL_CheckTunerInited(BYTE ucSlaveDemod, Bool *bOn);
+extern DWORD DL_PIDOnOff(BYTE ucSlaveDemod, bool bOn);
+extern DWORD DL_ResetPID(BYTE chip);
+extern DWORD DL_AddPID(BYTE ucSlaveDemod, Byte index,Pid pid);
+extern DWORD DL_RemovePID(BYTE ucSlaveDemod, Byte index,Pid pid);
+extern bool TunerInited0, TunerInited1, DevicePower, DeviceReboot;
+#endif
+
diff --git a/src/userdef.h b/src/userdef.h
new file mode 100644
index 0000000..612ff9d
--- /dev/null
+++ b/src/userdef.h
@@ -0,0 +1,24 @@
+#ifndef _USERDEF_H_
+#define _USERDEF_H_
+
+
+//typedef unsigned char BYTE; // 1 byte
+//typedef unsigned short WORD; // 2 bytes
+//typedef unsigned long DWORD; // 4 bytes
+typedef int INT; // 4 bytes
+//typedef void * HANDLE;
+
+#define NULL 0
+
+#ifdef IN
+#undef IN
+#endif
+
+#ifdef OUT
+#undef OUT
+#endif
+
+#define IN __in
+#define OUT __out
+
+#endif // _USERDEF_H_
diff --git a/v4l/kernel-2.6.18/demux.h b/v4l/kernel-2.6.18/demux.h
new file mode 100644
index 0000000..0c1d87c
--- /dev/null
+++ b/v4l/kernel-2.6.18/demux.h
@@ -0,0 +1,278 @@
+/*
+ * demux.h
+ *
+ * Copyright (c) 2002 Convergence GmbH
+ *
+ * based on code:
+ * Copyright (c) 2000 Nokia Research Center
+ * Tampere, FINLAND
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __DEMUX_H
+#define __DEMUX_H
+
+#include <linux/types.h>
+#include <linux/errno.h>
+#include <linux/list.h>
+#include <linux/time.h>
+#include <linux/dvb/dmx.h>
+
+/*--------------------------------------------------------------------------*/
+/* Common definitions */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * DMX_MAX_FILTER_SIZE: Maximum length (in bytes) of a section/PES filter.
+ */
+
+#ifndef DMX_MAX_FILTER_SIZE
+#define DMX_MAX_FILTER_SIZE 18
+#endif
+
+/*
+ * DMX_MAX_SECFEED_SIZE: Maximum length (in bytes) of a private section feed filter.
+ */
+
+#ifndef DMX_MAX_SECTION_SIZE
+#define DMX_MAX_SECTION_SIZE 4096
+#endif
+#ifndef DMX_MAX_SECFEED_SIZE
+#define DMX_MAX_SECFEED_SIZE (DMX_MAX_SECTION_SIZE + 188)
+#endif
+
+
+/*
+ * enum dmx_success: Success codes for the Demux Callback API.
+ */
+
+enum dmx_success {
+ DMX_OK = 0, /* Received Ok */
+ DMX_LENGTH_ERROR, /* Incorrect length */
+ DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */
+ DMX_CRC_ERROR, /* Incorrect CRC */
+ DMX_FRAME_ERROR, /* Frame alignment error */
+ DMX_FIFO_ERROR, /* Receiver FIFO overrun */
+ DMX_MISSED_ERROR /* Receiver missed packet */
+} ;
+
+/*--------------------------------------------------------------------------*/
+/* TS packet reception */
+/*--------------------------------------------------------------------------*/
+
+/* TS filter type for set() */
+
+#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */
+#define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS
+ payload (<=184 bytes per packet) to callback */
+#define TS_DECODER 4 /* send stream to built-in decoder (if present) */
+
+/* PES type for filters which write to built-in decoder */
+/* these should be kept identical to the types in dmx.h */
+
+enum dmx_ts_pes
+{ /* also send packets to decoder (if it exists) */
+ DMX_TS_PES_AUDIO0,
+ DMX_TS_PES_VIDEO0,
+ DMX_TS_PES_TELETEXT0,
+ DMX_TS_PES_SUBTITLE0,
+ DMX_TS_PES_PCR0,
+
+ DMX_TS_PES_AUDIO1,
+ DMX_TS_PES_VIDEO1,
+ DMX_TS_PES_TELETEXT1,
+ DMX_TS_PES_SUBTITLE1,
+ DMX_TS_PES_PCR1,
+
+ DMX_TS_PES_AUDIO2,
+ DMX_TS_PES_VIDEO2,
+ DMX_TS_PES_TELETEXT2,
+ DMX_TS_PES_SUBTITLE2,
+ DMX_TS_PES_PCR2,
+
+ DMX_TS_PES_AUDIO3,
+ DMX_TS_PES_VIDEO3,
+ DMX_TS_PES_TELETEXT3,
+ DMX_TS_PES_SUBTITLE3,
+ DMX_TS_PES_PCR3,
+
+ DMX_TS_PES_OTHER
+};
+
+#define DMX_TS_PES_AUDIO DMX_TS_PES_AUDIO0
+#define DMX_TS_PES_VIDEO DMX_TS_PES_VIDEO0
+#define DMX_TS_PES_TELETEXT DMX_TS_PES_TELETEXT0
+#define DMX_TS_PES_SUBTITLE DMX_TS_PES_SUBTITLE0
+#define DMX_TS_PES_PCR DMX_TS_PES_PCR0
+
+
+struct dmx_ts_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux *parent; /* Back-pointer */
+ void *priv; /* Pointer to private data of the API client */
+ int (*set) (struct dmx_ts_feed *feed,
+ u16 pid,
+ int type,
+ enum dmx_ts_pes pes_type,
+ size_t circular_buffer_size,
+ struct timespec timeout);
+ int (*start_filtering) (struct dmx_ts_feed* feed);
+ int (*stop_filtering) (struct dmx_ts_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Section reception */
+/*--------------------------------------------------------------------------*/
+
+struct dmx_section_filter {
+ u8 filter_value [DMX_MAX_FILTER_SIZE];
+ u8 filter_mask [DMX_MAX_FILTER_SIZE];
+ u8 filter_mode [DMX_MAX_FILTER_SIZE];
+ struct dmx_section_feed* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+};
+
+struct dmx_section_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+
+ int check_crc;
+ u32 crc_val;
+
+ u8 *secbuf;
+ u8 secbuf_base[DMX_MAX_SECFEED_SIZE];
+ u16 secbufp, seclen, tsfeedp;
+
+ int (*set) (struct dmx_section_feed* feed,
+ u16 pid,
+ size_t circular_buffer_size,
+ int check_crc);
+ int (*allocate_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter** filter);
+ int (*release_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter* filter);
+ int (*start_filtering) (struct dmx_section_feed* feed);
+ int (*stop_filtering) (struct dmx_section_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Callback functions */
+/*--------------------------------------------------------------------------*/
+
+typedef int (*dmx_ts_cb) ( const u8 * buffer1,
+ size_t buffer1_length,
+ const u8 * buffer2,
+ size_t buffer2_length,
+ struct dmx_ts_feed* source,
+ enum dmx_success success);
+
+typedef int (*dmx_section_cb) ( const u8 * buffer1,
+ size_t buffer1_len,
+ const u8 * buffer2,
+ size_t buffer2_len,
+ struct dmx_section_filter * source,
+ enum dmx_success success);
+
+/*--------------------------------------------------------------------------*/
+/* DVB Front-End */
+/*--------------------------------------------------------------------------*/
+
+enum dmx_frontend_source {
+ DMX_MEMORY_FE,
+ DMX_FRONTEND_0,
+ DMX_FRONTEND_1,
+ DMX_FRONTEND_2,
+ DMX_FRONTEND_3,
+ DMX_STREAM_0, /* external stream input, e.g. LVDS */
+ DMX_STREAM_1,
+ DMX_STREAM_2,
+ DMX_STREAM_3
+};
+
+struct dmx_frontend {
+ struct list_head connectivity_list; /* List of front-ends that can
+ be connected to a particular
+ demux */
+ enum dmx_frontend_source source;
+};
+
+/*--------------------------------------------------------------------------*/
+/* MPEG-2 TS Demux */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * Flags OR'ed in the capabilities field of struct dmx_demux.
+ */
+
+#define DMX_TS_FILTERING 1
+#define DMX_PES_FILTERING 2
+#define DMX_SECTION_FILTERING 4
+#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */
+#define DMX_CRC_CHECKING 16
+#define DMX_TS_DESCRAMBLING 32
+
+/*
+ * Demux resource type identifier.
+*/
+
+/*
+ * DMX_FE_ENTRY(): Casts elements in the list of registered
+ * front-ends from the generic type struct list_head
+ * to the type * struct dmx_frontend
+ *.
+*/
+
+#define DMX_FE_ENTRY(list) list_entry(list, struct dmx_frontend, connectivity_list)
+
+struct dmx_demux {
+ u32 capabilities; /* Bitfield of capability flags */
+ struct dmx_frontend* frontend; /* Front-end connected to the demux */
+ void* priv; /* Pointer to private data of the API client */
+ int (*open) (struct dmx_demux* demux);
+ int (*close) (struct dmx_demux* demux);
+ int (*write) (struct dmx_demux* demux, const char* buf, size_t count);
+ int (*allocate_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed** feed,
+ dmx_ts_cb callback);
+ int (*release_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed* feed);
+ int (*allocate_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed** feed,
+ dmx_section_cb callback);
+ int (*release_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed* feed);
+ int (*add_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*remove_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ struct list_head* (*get_frontends) (struct dmx_demux* demux);
+ int (*connect_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*disconnect_frontend) (struct dmx_demux* demux);
+
+ int (*get_pes_pids) (struct dmx_demux* demux, u16 *pids);
+
+ int (*get_caps) (struct dmx_demux* demux, struct dmx_caps *caps);
+
+ int (*set_source) (struct dmx_demux* demux, const dmx_source_t *src);
+
+ int (*get_stc) (struct dmx_demux* demux, unsigned int num,
+ u64 *stc, unsigned int *base);
+};
+
+#endif /* #ifndef __DEMUX_H */
diff --git a/v4l/kernel-2.6.18/dmxdev.h b/v4l/kernel-2.6.18/dmxdev.h
new file mode 100644
index 0000000..d2bee9f
--- /dev/null
+++ b/v4l/kernel-2.6.18/dmxdev.h
@@ -0,0 +1,108 @@
+/*
+ * dmxdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DMXDEV_H_
+#define _DMXDEV_H_
+
+#include <linux/types.h>
+#include <linux/spinlock.h>
+#include <linux/kernel.h>
+#include <linux/timer.h>
+#include <linux/wait.h>
+#include <linux/fs.h>
+#include <linux/string.h>
+#include <linux/mutex.h>
+
+#include <linux/dvb/dmx.h>
+
+#include "dvbdev.h"
+#include "demux.h"
+#include "dvb_ringbuffer.h"
+
+enum dmxdev_type {
+ DMXDEV_TYPE_NONE,
+ DMXDEV_TYPE_SEC,
+ DMXDEV_TYPE_PES,
+};
+
+enum dmxdev_state {
+ DMXDEV_STATE_FREE,
+ DMXDEV_STATE_ALLOCATED,
+ DMXDEV_STATE_SET,
+ DMXDEV_STATE_GO,
+ DMXDEV_STATE_DONE,
+ DMXDEV_STATE_TIMEDOUT
+};
+
+struct dmxdev_filter {
+ union {
+ struct dmx_section_filter *sec;
+ } filter;
+
+ union {
+ struct dmx_ts_feed *ts;
+ struct dmx_section_feed *sec;
+ } feed;
+
+ union {
+ struct dmx_sct_filter_params sec;
+ struct dmx_pes_filter_params pes;
+ } params;
+
+ enum dmxdev_type type;
+ enum dmxdev_state state;
+ struct dmxdev *dev;
+ struct dvb_ringbuffer buffer;
+
+ struct mutex mutex;
+
+ /* only for sections */
+ struct timer_list timer;
+ int todo;
+ u8 secheader[3];
+};
+
+
+struct dmxdev {
+ struct dvb_device *dvbdev;
+ struct dvb_device *dvr_dvbdev;
+
+ struct dmxdev_filter *filter;
+ struct dmx_demux *demux;
+
+ int filternum;
+ int capabilities;
+#define DMXDEV_CAP_DUPLEX 1
+ struct dmx_frontend *dvr_orig_fe;
+
+ struct dvb_ringbuffer dvr_buffer;
+#define DVR_BUFFER_SIZE (10*188*1024)
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+
+int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *);
+void dvb_dmxdev_release(struct dmxdev *dmxdev);
+
+#endif /* _DMXDEV_H_ */
diff --git a/v4l/kernel-2.6.18/dvb-pll.h b/v4l/kernel-2.6.18/dvb-pll.h
new file mode 100644
index 0000000..66361cd
--- /dev/null
+++ b/v4l/kernel-2.6.18/dvb-pll.h
@@ -0,0 +1,64 @@
+/*
+ * descriptions + helper functions for simple dvb plls.
+ */
+
+#ifndef __DVB_PLL_H__
+#define __DVB_PLL_H__
+
+#include <linux/i2c.h>
+#include "dvb_frontend.h"
+
+struct dvb_pll_desc {
+ char *name;
+ u32 min;
+ u32 max;
+ void (*setbw)(u8 *buf, u32 freq, int bandwidth);
+ int count;
+ struct {
+ u32 limit;
+ u32 offset;
+ u32 stepsize;
+ u8 config;
+ u8 cb;
+ } entries[12];
+};
+
+extern struct dvb_pll_desc dvb_pll_thomson_dtt7579;
+extern struct dvb_pll_desc dvb_pll_thomson_dtt759x;
+extern struct dvb_pll_desc dvb_pll_thomson_dtt7610;
+extern struct dvb_pll_desc dvb_pll_lg_z201;
+extern struct dvb_pll_desc dvb_pll_microtune_4042;
+extern struct dvb_pll_desc dvb_pll_thomson_dtt761x;
+extern struct dvb_pll_desc dvb_pll_unknown_1;
+
+extern struct dvb_pll_desc dvb_pll_tua6010xs;
+extern struct dvb_pll_desc dvb_pll_env57h1xd5;
+extern struct dvb_pll_desc dvb_pll_tua6034;
+extern struct dvb_pll_desc dvb_pll_lg_tdvs_h06xf;
+extern struct dvb_pll_desc dvb_pll_tda665x;
+extern struct dvb_pll_desc dvb_pll_fmd1216me;
+extern struct dvb_pll_desc dvb_pll_tded4;
+
+extern struct dvb_pll_desc dvb_pll_tuv1236d;
+extern struct dvb_pll_desc dvb_pll_tdhu2;
+extern struct dvb_pll_desc dvb_pll_samsung_tbmv;
+extern struct dvb_pll_desc dvb_pll_philips_sd1878_tda8261;
+extern struct dvb_pll_desc dvb_pll_philips_td1316;
+
+extern struct dvb_pll_desc dvb_pll_thomson_fe6600;
+
+extern int dvb_pll_configure(struct dvb_pll_desc *desc, u8 *buf,
+ u32 freq, int bandwidth);
+
+/**
+ * Attach a dvb-pll to the supplied frontend structure.
+ *
+ * @param fe Frontend to attach to.
+ * @param pll_addr i2c address of the PLL (if used).
+ * @param i2c i2c adapter to use (set to NULL if not used).
+ * @param desc dvb_pll_desc to use.
+ * @return 0 on success, nonzero on failure.
+ */
+extern int dvb_pll_attach(struct dvb_frontend *fe, int pll_addr, struct i2c_adapter *i2c, struct dvb_pll_desc *desc);
+
+#endif
diff --git a/v4l/kernel-2.6.18/dvb-usb-ids.h b/v4l/kernel-2.6.18/dvb-usb-ids.h
new file mode 100644
index 0000000..9569891
--- /dev/null
+++ b/v4l/kernel-2.6.18/dvb-usb-ids.h
@@ -0,0 +1,110 @@
+/* dvb-usb-ids.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de) see
+ * dvb-usb-init.c for copyright information.
+ *
+ * a header file containing define's for the USB device supported by the
+ * various drivers.
+ */
+#ifndef _DVB_USB_IDS_H_
+#define _DVB_USB_IDS_H_
+
+/* Vendor IDs */
+#define USB_VID_ADSTECH 0x06e1
+#define USB_VID_ANCHOR 0x0547
+#define USB_VID_WIDEVIEW 0x14aa
+#define USB_VID_AVERMEDIA 0x07ca
+#define USB_VID_COMPRO 0x185b
+#define USB_VID_COMPRO_UNK 0x145f
+#define USB_VID_CYPRESS 0x04b4
+#define USB_VID_DIBCOM 0x10b8
+#define USB_VID_DVICO 0x0fe9
+#define USB_VID_EMPIA 0xeb1a
+#define USB_VID_GRANDTEC 0x5032
+#define USB_VID_HANFTEK 0x15f4
+#define USB_VID_HAUPPAUGE 0x2040
+#define USB_VID_HYPER_PALTEK 0x1025
+#define USB_VID_KWORLD 0xeb2a
+#define USB_VID_KYE 0x0458
+#define USB_VID_MEDION 0x1660
+#define USB_VID_PINNACLE 0x2304
+#define USB_VID_VISIONPLUS 0x13d3
+#define USB_VID_TWINHAN 0x1822
+#define USB_VID_ULTIMA_ELECTRONIC 0x05d8
+#define USB_VID_GENPIX 0x09c0
+
+/* Product IDs */
+#define USB_PID_ADSTECH_USB2_COLD 0xa333
+#define USB_PID_ADSTECH_USB2_WARM 0xa334
+#define USB_PID_AVERMEDIA_DVBT_USB_COLD 0x0001
+#define USB_PID_AVERMEDIA_DVBT_USB_WARM 0x0002
+#define USB_PID_AVERMEDIA_DVBT_USB2_COLD 0xa800
+#define USB_PID_AVERMEDIA_DVBT_USB2_WARM 0xa801
+#define USB_PID_COMPRO_DVBU2000_COLD 0xd000
+#define USB_PID_COMPRO_DVBU2000_WARM 0xd001
+#define USB_PID_COMPRO_DVBU2000_UNK_COLD 0x010c
+#define USB_PID_COMPRO_DVBU2000_UNK_WARM 0x010d
+#define USB_PID_DIBCOM_HOOK_DEFAULT 0x0064
+#define USB_PID_DIBCOM_HOOK_DEFAULT_REENUM 0x0065
+#define USB_PID_DIBCOM_MOD3000_COLD 0x0bb8
+#define USB_PID_DIBCOM_MOD3000_WARM 0x0bb9
+#define USB_PID_DIBCOM_MOD3001_COLD 0x0bc6
+#define USB_PID_DIBCOM_MOD3001_WARM 0x0bc7
+#define USB_PID_DIBCOM_STK7700 0x1e14
+#define USB_PID_DIBCOM_STK7700_REENUM 0x1e15
+#define USB_PID_DIBCOM_ANCHOR_2135_COLD 0x2131
+#define USB_PID_GRANDTEC_DVBT_USB_COLD 0x0fa0
+#define USB_PID_GRANDTEC_DVBT_USB_WARM 0x0fa1
+#define USB_PID_KWORLD_VSTREAM_COLD 0x17de
+#define USB_PID_KWORLD_VSTREAM_WARM 0x17df
+#define USB_PID_TWINHAN_VP7041_COLD 0x3201
+#define USB_PID_TWINHAN_VP7041_WARM 0x3202
+#define USB_PID_TWINHAN_VP7020_COLD 0x3203
+#define USB_PID_TWINHAN_VP7020_WARM 0x3204
+#define USB_PID_TWINHAN_VP7045_COLD 0x3205
+#define USB_PID_TWINHAN_VP7045_WARM 0x3206
+#define USB_PID_TWINHAN_VP7021_COLD 0x3207
+#define USB_PID_TWINHAN_VP7021_WARM 0x3208
+#define USB_PID_DNTV_TINYUSB2_COLD 0x3223
+#define USB_PID_DNTV_TINYUSB2_WARM 0x3224
+#define USB_PID_ULTIMA_TVBOX_COLD 0x8105
+#define USB_PID_ULTIMA_TVBOX_WARM 0x8106
+#define USB_PID_ULTIMA_TVBOX_AN2235_COLD 0x8107
+#define USB_PID_ULTIMA_TVBOX_AN2235_WARM 0x8108
+#define USB_PID_ULTIMA_TVBOX_ANCHOR_COLD 0x2235
+#define USB_PID_ULTIMA_TVBOX_USB2_COLD 0x8109
+#define USB_PID_ULTIMA_TVBOX_USB2_WARM 0x810a
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_COLD 0x8613
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_WARM 0x1002
+#define USB_PID_UNK_HYPER_PALTEK_COLD 0x005e
+#define USB_PID_UNK_HYPER_PALTEK_WARM 0x005f
+#define USB_PID_HANFTEK_UMT_010_COLD 0x0001
+#define USB_PID_HANFTEK_UMT_010_WARM 0x0015
+#define USB_PID_DTT200U_COLD 0x0201
+#define USB_PID_DTT200U_WARM 0x0301
+#define USB_PID_WT220U_COLD 0x0222
+#define USB_PID_WT220U_WARM 0x0221
+#define USB_PID_WT220U_ZL0353_COLD 0x022a
+#define USB_PID_WT220U_ZL0353_WARM 0x022b
+#define USB_PID_WINTV_NOVA_T_USB2_COLD 0x9300
+#define USB_PID_WINTV_NOVA_T_USB2_WARM 0x9301
+#define USB_PID_NEBULA_DIGITV 0x0201
+#define USB_PID_DVICO_BLUEBIRD_LGDT 0xd820
+#define USB_PID_DVICO_BLUEBIRD_LG064F_COLD 0xd500
+#define USB_PID_DVICO_BLUEBIRD_LG064F_WARM 0xd501
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_COLD 0xdb00
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_WARM 0xdb01
+#define USB_PID_DVICO_BLUEBIRD_TH7579_COLD 0xdb10
+#define USB_PID_DVICO_BLUEBIRD_TH7579_WARM 0xdb11
+#define USB_PID_DVICO_BLUEBIRD_DEE1601_COLD 0xdb50
+#define USB_PID_DVICO_BLUEBIRD_DEE1601_WARM 0xdb51
+#define USB_PID_DIGITALNOW_BLUEBIRD_DEE1601_COLD 0xdb54
+#define USB_PID_DIGITALNOW_BLUEBIRD_DEE1601_WARM 0xdb55
+#define USB_PID_MEDION_MD95700 0x0932
+#define USB_PID_KYE_DVB_T_COLD 0x701e
+#define USB_PID_KYE_DVB_T_WARM 0x701f
+#define USB_PID_PCTV_200E 0x020e
+#define USB_PID_PCTV_400E 0x020f
+#define USB_PID_GENPIX_8PSK_COLD 0x0200
+#define USB_PID_GENPIX_8PSK_WARM 0x0201
+#endif
diff --git a/v4l/kernel-2.6.18/dvb-usb.h b/v4l/kernel-2.6.18/dvb-usb.h
new file mode 100644
index 0000000..97f8ea9
--- /dev/null
+++ b/v4l/kernel-2.6.18/dvb-usb.h
@@ -0,0 +1,346 @@
+/* dvb-usb.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * the headerfile, all dvb-usb-drivers have to include.
+ */
+#ifndef __DVB_USB_H__
+#define __DVB_USB_H__
+
+#include <linux/input.h>
+#include <linux/usb.h>
+#include <linux/firmware.h>
+#include <linux/mutex.h>
+
+#include "dvb_frontend.h"
+#include "dvb_demux.h"
+#include "dvb_net.h"
+#include "dmxdev.h"
+
+#include "dvb-pll.h"
+
+#include "dvb-usb-ids.h"
+
+/* debug */
+#ifdef CONFIG_DVB_USB_DEBUG
+#define dprintk(var,level,args...) \
+ do { if ((var & level)) { printk(args); } } while (0)
+
+#define debug_dump(b,l,func) {\
+ int loop_; \
+ for (loop_ = 0; loop_ < l; loop_++) func("%02x ", b[loop_]); \
+ func("\n");\
+}
+#define DVB_USB_DEBUG_STATUS
+#else
+#define dprintk(args...)
+#define debug_dump(b,l,func)
+
+#define DVB_USB_DEBUG_STATUS " (debugging is not enabled)"
+
+#endif
+
+/* generic log methods - taken from usb.h */
+#ifndef DVB_USB_LOG_PREFIX
+ #define DVB_USB_LOG_PREFIX "dvb-usb (please define a log prefix)"
+#endif
+
+#undef err
+#define err(format, arg...) printk(KERN_ERR DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef info
+#define info(format, arg...) printk(KERN_INFO DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef warn
+#define warn(format, arg...) printk(KERN_WARNING DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+
+/**
+ * struct dvb_usb_device_description - name and its according USB IDs
+ * @name: real name of the box, regardless which DVB USB device class is in use
+ * @cold_ids: array of struct usb_device_id which describe the device in
+ * pre-firmware state
+ * @warm_ids: array of struct usb_device_id which describe the device in
+ * post-firmware state
+ *
+ * Each DVB USB device class can have one or more actual devices, this struct
+ * assigns a name to it.
+ */
+struct dvb_usb_device_description {
+ const char *name;
+
+#define DVB_USB_ID_MAX_NUM 15
+ struct usb_device_id *cold_ids[DVB_USB_ID_MAX_NUM];
+ struct usb_device_id *warm_ids[DVB_USB_ID_MAX_NUM];
+};
+
+/**
+ * struct dvb_usb_rc_key - a remote control key and its input-event
+ * @custom: the vendor/custom part of the key
+ * @data: the actual key part
+ * @event: the input event assigned to key identified by custom and data
+ */
+struct dvb_usb_rc_key {
+ u8 custom,data;
+ u32 event;
+};
+
+struct dvb_usb_device;
+
+/**
+ * struct dvb_usb_properties - properties of a dvb-usb-device
+ * @caps: capabilities of the DVB USB device.
+ * @pid_filter_count: number of PID filter position in the optional hardware
+ * PID-filter.
+ *
+ * @usb_ctrl: which USB device-side controller is in use. Needed for firmware
+ * download.
+ * @firmware: name of the firmware file.
+ * @download_firmware: called to download the firmware when the usb_ctrl is
+ * DEVICE_SPECIFIC.
+ * @no_reconnect: device doesn't do a reconnect after downloading the firmware,
+ so do the warm initialization right after it
+
+ * @size_of_priv: how many bytes shall be allocated for the private field
+ * of struct dvb_usb_device.
+ *
+ * @power_ctrl: called to enable/disable power of the device.
+ * @streaming_crtl: called to start and stop the MPEG2-TS streaming of the
+ * device (not URB submitting/killing).
+ * @pid_filter_ctrl: called to en/disable the PID filter, if any.
+ * @pid_filter: called to set/unset a PID for filtering.
+ *
+ * @read_mac_address: called to read the MAC address of the device.
+ *
+ * @frontend_attach: called to attach the possible frontends (fill fe-field
+ * of struct dvb_usb_device).
+ * @tuner_attach: called to attach the correct tuner and to fill pll_addr,
+ * pll_desc and pll_init_buf of struct dvb_usb_device).
+ * @identify_state: called to determine the state (cold or warm), when it
+ * is not distinguishable by the USB IDs.
+ *
+ * @rc_key_map: a hard-wired array of struct dvb_usb_rc_key (NULL to disable
+ * remote control handling).
+ * @rc_key_map_size: number of items in @rc_key_map.
+ * @rc_query: called to query an event event.
+ * @rc_interval: time in ms between two queries.
+ *
+ * @i2c_algo: i2c_algorithm if the device has I2CoverUSB.
+ *
+ * @generic_bulk_ctrl_endpoint: most of the DVB USB devices have a generic
+ * endpoint which received control messages with bulk transfers. When this
+ * is non-zero, one can use dvb_usb_generic_rw and dvb_usb_generic_write-
+ * helper functions.
+ *
+ * @urb: describes the kind of USB transfer used for MPEG2-TS-streaming.
+ * (BULK or ISOC)
+ *
+ * @num_device_descs: number of struct dvb_usb_device_description in @devices
+ * @devices: array of struct dvb_usb_device_description compatibles with these
+ * properties.
+ */
+struct dvb_usb_properties {
+
+#define DVB_USB_HAS_PID_FILTER 0x01
+#define DVB_USB_PID_FILTER_CAN_BE_TURNED_OFF 0x02
+#define DVB_USB_NEED_PID_FILTERING 0x04
+#define DVB_USB_IS_AN_I2C_ADAPTER 0x08
+ int caps;
+ int pid_filter_count;
+
+#define DEVICE_SPECIFIC 0
+#define CYPRESS_AN2135 1
+#define CYPRESS_AN2235 2
+#define CYPRESS_FX2 3
+ int usb_ctrl;
+ const char firmware[FIRMWARE_NAME_MAX];
+ int (*download_firmware) (struct usb_device *, const struct firmware *);
+ int no_reconnect;
+
+ int size_of_priv;
+
+ int (*power_ctrl) (struct dvb_usb_device *, int);
+ int (*streaming_ctrl) (struct dvb_usb_device *, int);
+ int (*pid_filter_ctrl) (struct dvb_usb_device *, int);
+ int (*pid_filter) (struct dvb_usb_device *, int, u16, int);
+
+ int (*read_mac_address) (struct dvb_usb_device *, u8 []);
+ int (*frontend_attach) (struct dvb_usb_device *);
+ int (*tuner_attach) (struct dvb_usb_device *);
+
+ int (*identify_state) (struct usb_device *, struct dvb_usb_properties *,
+ struct dvb_usb_device_description **, int *);
+
+/* remote control properties */
+#define REMOTE_NO_KEY_PRESSED 0x00
+#define REMOTE_KEY_PRESSED 0x01
+#define REMOTE_KEY_REPEAT 0x02
+ struct dvb_usb_rc_key *rc_key_map;
+ int rc_key_map_size;
+ int (*rc_query) (struct dvb_usb_device *, u32 *, int *);
+ int rc_interval;
+
+ struct i2c_algorithm *i2c_algo;
+
+ int generic_bulk_ctrl_endpoint;
+
+ struct {
+#define DVB_USB_BULK 1
+#define DVB_USB_ISOC 2
+ int type;
+ int count;
+ int endpoint;
+
+ union {
+ struct {
+ int buffersize; /* per URB */
+ } bulk;
+ struct {
+ int framesperurb;
+ int framesize;
+ int interval;
+ } isoc;
+ } u;
+ } urb;
+
+ int num_device_descs;
+ struct dvb_usb_device_description devices[9];
+};
+
+
+/**
+ * struct dvb_usb_device - object of a DVB USB device
+ * @props: copy of the struct dvb_usb_properties this device belongs to.
+ * @desc: pointer to the device's struct dvb_usb_device_description.
+ * @state: initialization and runtime state of the device.
+ *
+ * @udev: pointer to the device's struct usb_device.
+ * @urb_list: array of dynamically allocated struct urb for the MPEG2-TS-
+ * streaming.
+ *
+ * @buf_num: number of buffer allocated.
+ * @buf_size: size of each buffer in buf_list.
+ * @buf_list: array containing all allocate buffers for streaming.
+ * @dma_addr: list of dma_addr_t for each buffer in buf_list.
+ *
+ * @urbs_initialized: number of URBs initialized.
+ * @urbs_submitted: number of URBs submitted.
+ *
+ * @feedcount: number of reqested feeds (used for streaming-activation)
+ * @pid_filtering: is hardware pid_filtering used or not.
+ *
+ * @usb_mutex: semaphore of USB control messages (reading needs two messages)
+ * @i2c_mutex: semaphore for i2c-transfers
+ *
+ * @i2c_adap: device's i2c_adapter if it uses I2CoverUSB
+ * @pll_addr: I2C address of the tuner for programming
+ * @pll_init: array containing the initialization buffer
+ * @pll_desc: pointer to the appropriate struct dvb_pll_desc
+ *
+ * @tuner_pass_ctrl: called to (de)activate tuner passthru of the demod or the board
+ *
+ * @dvb_adap: device's dvb_adapter.
+ * @dmxdev: device's dmxdev.
+ * @demux: device's software demuxer.
+ * @dvb_net: device's dvb_net interfaces.
+ * @dvb_frontend: device's frontend.
+ * @max_feed_count: how many feeds can be handled simultaneously by this
+ * device
+ * @fe_sleep: rerouted frontend-sleep function.
+ * @fe_init: rerouted frontend-init (wakeup) function.
+ * @rc_input_dev: input device for the remote control.
+ * @rc_query_work: struct work_struct frequent rc queries
+ * @last_event: last triggered event
+ * @last_state: last state (no, pressed, repeat)
+ * @owner: owner of the dvb_adapter
+ * @priv: private data of the actual driver (allocate by dvb-usb, size defined
+ * in size_of_priv of dvb_usb_properties).
+ */
+struct dvb_usb_device {
+ struct dvb_usb_properties props;
+ struct dvb_usb_device_description *desc;
+
+#define DVB_USB_STATE_INIT 0x000
+#define DVB_USB_STATE_URB_LIST 0x001
+#define DVB_USB_STATE_URB_BUF 0x002
+#define DVB_USB_STATE_DVB 0x004
+#define DVB_USB_STATE_I2C 0x008
+#define DVB_USB_STATE_REMOTE 0x010
+#define DVB_USB_STATE_URB_SUBMIT 0x020
+ int state;
+
+ /* usb */
+ struct usb_device *udev;
+ struct urb **urb_list;
+
+ int buf_num;
+ unsigned long buf_size;
+ u8 **buf_list;
+ dma_addr_t *dma_addr;
+
+ int urbs_initialized;
+ int urbs_submitted;
+
+ int feedcount;
+ int pid_filtering;
+
+ /* locking */
+ struct mutex usb_mutex;
+
+ /* i2c */
+ struct mutex i2c_mutex;
+ struct i2c_adapter i2c_adap;
+
+ /* tuner programming information */
+ u8 pll_addr;
+ u8 pll_init[4];
+ struct dvb_pll_desc *pll_desc;
+ int (*tuner_pass_ctrl)(struct dvb_frontend *, int, u8);
+
+ /* dvb */
+ struct dvb_adapter dvb_adap;
+ struct dmxdev dmxdev;
+ struct dvb_demux demux;
+ struct dvb_net dvb_net;
+ struct dvb_frontend* fe;
+ int max_feed_count;
+
+ int (*fe_sleep) (struct dvb_frontend *);
+ int (*fe_init) (struct dvb_frontend *);
+
+ /* remote control */
+ struct input_dev *rc_input_dev;
+ char rc_phys[64];
+ struct work_struct rc_query_work;
+ u32 last_event;
+ int last_state;
+
+ struct module *owner;
+
+ void *priv;
+};
+
+extern int dvb_usb_device_init(struct usb_interface *, struct dvb_usb_properties *, struct module *, struct dvb_usb_device **);
+extern void dvb_usb_device_exit(struct usb_interface *);
+
+/* the generic read/write method for device control */
+extern int dvb_usb_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16,int);
+extern int dvb_usb_generic_write(struct dvb_usb_device *, u8 *, u16);
+
+/* commonly used remote control parsing */
+extern int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *, u8[], u32 *, int *);
+
+/* commonly used pll init and set functions */
+extern int dvb_usb_tuner_init_i2c(struct dvb_frontend *);
+extern int dvb_usb_tuner_calc_regs(struct dvb_frontend *, struct dvb_frontend_parameters *, u8 *buf, int buf_len);
+extern int dvb_usb_tuner_set_params_i2c(struct dvb_frontend *, struct dvb_frontend_parameters *);
+
+/* commonly used firmware download types and function */
+struct hexline {
+ u8 len;
+ u32 addr;
+ u8 type;
+ u8 data[255];
+ u8 chk;
+};
+extern int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type);
+
+#endif
diff --git a/v4l/kernel-2.6.18/dvb_demux.h b/v4l/kernel-2.6.18/dvb_demux.h
new file mode 100644
index 0000000..2c5f915
--- /dev/null
+++ b/v4l/kernel-2.6.18/dvb_demux.h
@@ -0,0 +1,140 @@
+/*
+ * dvb_demux.h: DVB kernel demux API
+ *
+ * Copyright (C) 2000-2001 Marcus Metzler & Ralph Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_DEMUX_H_
+#define _DVB_DEMUX_H_
+
+#include <linux/time.h>
+#include <linux/timer.h>
+#include <linux/spinlock.h>
+#include <linux/mutex.h>
+
+#include "demux.h"
+
+#define DMX_TYPE_TS 0
+#define DMX_TYPE_SEC 1
+#define DMX_TYPE_PES 2
+
+#define DMX_STATE_FREE 0
+#define DMX_STATE_ALLOCATED 1
+#define DMX_STATE_SET 2
+#define DMX_STATE_READY 3
+#define DMX_STATE_GO 4
+
+#define DVB_DEMUX_MASK_MAX 18
+
+struct dvb_demux_filter {
+ struct dmx_section_filter filter;
+ u8 maskandmode[DMX_MAX_FILTER_SIZE];
+ u8 maskandnotmode[DMX_MAX_FILTER_SIZE];
+ int doneq;
+
+ struct dvb_demux_filter *next;
+ struct dvb_demux_feed *feed;
+ int index;
+ int state;
+ int type;
+
+ u16 hw_handle;
+ struct timer_list timer;
+};
+
+#define DMX_FEED_ENTRY(pos) list_entry(pos, struct dvb_demux_feed, list_head)
+
+struct dvb_demux_feed {
+ union {
+ struct dmx_ts_feed ts;
+ struct dmx_section_feed sec;
+ } feed;
+
+ union {
+ dmx_ts_cb ts;
+ dmx_section_cb sec;
+ } cb;
+
+ struct dvb_demux *demux;
+ void *priv;
+ int type;
+ int state;
+ u16 pid;
+ u8 *buffer;
+ int buffer_size;
+
+ struct timespec timeout;
+ struct dvb_demux_filter *filter;
+
+ int ts_type;
+ enum dmx_ts_pes pes_type;
+
+ int cc;
+ int pusi_seen; /* prevents feeding of garbage from previous section */
+
+ u16 peslen;
+
+ struct list_head list_head;
+ unsigned int index; /* a unique index for each feed (can be used as hardware pid filter index) */
+};
+
+struct dvb_demux {
+ struct dmx_demux dmx;
+ void *priv;
+ int filternum;
+ int feednum;
+ int (*start_feed)(struct dvb_demux_feed *feed);
+ int (*stop_feed)(struct dvb_demux_feed *feed);
+ int (*write_to_decoder)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ u32 (*check_crc32)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ void (*memcopy)(struct dvb_demux_feed *feed, u8 *dst,
+ const u8 *src, size_t len);
+
+ int users;
+#define MAX_DVB_DEMUX_USERS 10
+ struct dvb_demux_filter *filter;
+ struct dvb_demux_feed *feed;
+
+ struct list_head frontend_list;
+
+ struct dvb_demux_feed *pesfilter[DMX_TS_PES_OTHER];
+ u16 pids[DMX_TS_PES_OTHER];
+ int playing;
+ int recording;
+
+#define DMX_MAX_PID 0x2000
+ struct list_head feed_list;
+ u8 tsbuf[204];
+ int tsbufp;
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+int dvb_dmx_init(struct dvb_demux *dvbdemux);
+void dvb_dmx_release(struct dvb_demux *dvbdemux);
+void dvb_dmx_swfilter_packets(struct dvb_demux *dvbdmx, const u8 *buf,
+ size_t count);
+void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count);
+void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf,
+ size_t count);
+
+#endif /* _DVB_DEMUX_H_ */
diff --git a/v4l/kernel-2.6.18/dvb_frontend.h b/v4l/kernel-2.6.18/dvb_frontend.h
new file mode 100644
index 0000000..2887e2b
--- /dev/null
+++ b/v4l/kernel-2.6.18/dvb_frontend.h
@@ -0,0 +1,163 @@
+/*
+ * dvb_frontend.h
+ *
+ * Copyright (C) 2001 convergence integrated media GmbH
+ * Copyright (C) 2004 convergence GmbH
+ *
+ * Written by Ralph Metzler
+ * Overhauled by Holger Waechtler
+ * Kernel I2C stuff by Michael Hunold <hunold@convergence.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_FRONTEND_H_
+#define _DVB_FRONTEND_H_
+
+#include <linux/types.h>
+#include <linux/sched.h>
+#include <linux/ioctl.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/delay.h>
+
+#include <linux/dvb/frontend.h>
+
+#include "dvbdev.h"
+
+struct dvb_frontend_tune_settings {
+ int min_delay_ms;
+ int step_size;
+ int max_drift;
+ struct dvb_frontend_parameters parameters;
+};
+
+struct dvb_frontend;
+
+struct dvb_tuner_info {
+ char name[128];
+
+ u32 frequency_min;
+ u32 frequency_max;
+ u32 frequency_step;
+
+ u32 bandwidth_min;
+ u32 bandwidth_max;
+ u32 bandwidth_step;
+};
+
+struct dvb_tuner_ops {
+
+ struct dvb_tuner_info info;
+
+ int (*release)(struct dvb_frontend *fe);
+ int (*init)(struct dvb_frontend *fe);
+ int (*sleep)(struct dvb_frontend *fe);
+
+ /** This is for simple PLLs - set all parameters in one go. */
+ int (*set_params)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
+
+ /** This is support for demods like the mt352 - fills out the supplied buffer with what to write. */
+ int (*calc_regs)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p, u8 *buf, int buf_len);
+
+ int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency);
+ int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth);
+
+#define TUNER_STATUS_LOCKED 1
+ int (*get_status)(struct dvb_frontend *fe, u32 *status);
+
+ /** These are provided seperately from set_params in order to facilitate silicon
+ * tuners which require sophisticated tuning loops, controlling each parameter seperately. */
+ int (*set_frequency)(struct dvb_frontend *fe, u32 frequency);
+ int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
+};
+
+struct dvb_frontend_ops {
+
+ struct dvb_frontend_info info;
+
+ void (*release)(struct dvb_frontend* fe);
+
+ int (*init)(struct dvb_frontend* fe);
+ int (*sleep)(struct dvb_frontend* fe);
+
+ /* if this is set, it overrides the default swzigzag */
+ int (*tune)(struct dvb_frontend* fe,
+ struct dvb_frontend_parameters* params,
+ unsigned int mode_flags,
+ int *delay,
+ fe_status_t *status);
+ /* get frontend tuning algorithm from the module */
+ int (*get_frontend_algo)(struct dvb_frontend *fe);
+
+ /* these two are only used for the swzigzag code */
+ int (*set_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+ int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings);
+
+ int (*get_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+
+ int (*read_status)(struct dvb_frontend* fe, fe_status_t* status);
+ int (*read_ber)(struct dvb_frontend* fe, u32* ber);
+ int (*read_signal_strength)(struct dvb_frontend* fe, u16* strength);
+ int (*read_snr)(struct dvb_frontend* fe, u16* snr);
+ int (*read_ucblocks)(struct dvb_frontend* fe, u32* ucblocks);
+
+ int (*diseqc_reset_overload)(struct dvb_frontend* fe);
+ int (*diseqc_send_master_cmd)(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd);
+ int (*diseqc_recv_slave_reply)(struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply);
+ int (*diseqc_send_burst)(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd);
+ int (*set_tone)(struct dvb_frontend* fe, fe_sec_tone_mode_t tone);
+ int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
+ int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg);
+ int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
+ int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
+
+ struct dvb_tuner_ops tuner_ops;
+};
+
+#define MAX_EVENT 8
+
+struct dvb_fe_events {
+ struct dvb_frontend_event events[MAX_EVENT];
+ int eventw;
+ int eventr;
+ int overflow;
+ wait_queue_head_t wait_queue;
+ struct semaphore sem;
+};
+
+struct dvb_frontend {
+ struct dvb_frontend_ops ops;
+ struct dvb_adapter *dvb;
+ void* demodulator_priv;
+ void* tuner_priv;
+ void* frontend_priv;
+ void* misc_priv;
+};
+
+extern int dvb_register_frontend(struct dvb_adapter* dvb,
+ struct dvb_frontend* fe);
+
+extern int dvb_unregister_frontend(struct dvb_frontend* fe);
+
+extern void dvb_frontend_reinitialise(struct dvb_frontend *fe);
+
+extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec);
+extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime);
+
+#endif
diff --git a/v4l/kernel-2.6.18/dvb_net.h b/v4l/kernel-2.6.18/dvb_net.h
new file mode 100644
index 0000000..f14e4ca
--- /dev/null
+++ b/v4l/kernel-2.6.18/dvb_net.h
@@ -0,0 +1,46 @@
+/*
+ * dvb_net.h
+ *
+ * Copyright (C) 2001 Ralph Metzler for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_NET_H_
+#define _DVB_NET_H_
+
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/inetdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/skbuff.h>
+
+#include "dvbdev.h"
+
+#define DVB_NET_DEVICES_MAX 10
+
+struct dvb_net {
+ struct dvb_device *dvbdev;
+ struct net_device *device[DVB_NET_DEVICES_MAX];
+ int state[DVB_NET_DEVICES_MAX];
+ struct dmx_demux *demux;
+};
+
+
+void dvb_net_release(struct dvb_net *);
+int dvb_net_init(struct dvb_adapter *, struct dvb_net *, struct dmx_demux *);
+
+#endif
diff --git a/v4l/kernel-2.6.18/dvb_ringbuffer.h b/v4l/kernel-2.6.18/dvb_ringbuffer.h
new file mode 100644
index 0000000..d97714e
--- /dev/null
+++ b/v4l/kernel-2.6.18/dvb_ringbuffer.h
@@ -0,0 +1,174 @@
+/*
+ *
+ * dvb_ringbuffer.h: ring buffer implementation for the dvb driver
+ *
+ * Copyright (C) 2003 Oliver Endriss
+ * Copyright (C) 2004 Andrew de Quincey
+ *
+ * based on code originally found in av7110.c & dvb_ci.c:
+ * Copyright (C) 1999-2003 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _DVB_RINGBUFFER_H_
+#define _DVB_RINGBUFFER_H_
+
+#include <linux/spinlock.h>
+#include <linux/wait.h>
+
+struct dvb_ringbuffer {
+ u8 *data;
+ ssize_t size;
+ ssize_t pread;
+ ssize_t pwrite;
+ int error;
+
+ wait_queue_head_t queue;
+ spinlock_t lock;
+};
+
+#define DVB_RINGBUFFER_PKTHDRSIZE 3
+
+
+/*
+** Notes:
+** ------
+** (1) For performance reasons read and write routines don't check buffer sizes
+** and/or number of bytes free/available. This has to be done before these
+** routines are called. For example:
+**
+** *** write <buflen> bytes ***
+** free = dvb_ringbuffer_free(rbuf);
+** if (free >= buflen)
+** count = dvb_ringbuffer_write(rbuf, buffer, buflen);
+** else
+** ...
+**
+** *** read min. 1000, max. <bufsize> bytes ***
+** avail = dvb_ringbuffer_avail(rbuf);
+** if (avail >= 1000)
+** count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize), 0);
+** else
+** ...
+**
+** (2) If there is exactly one reader and one writer, there is no need
+** to lock read or write operations.
+** Two or more readers must be locked against each other.
+** Flushing the buffer counts as a read operation.
+** Two or more writers must be locked against each other.
+*/
+
+/* initialize ring buffer, lock and queue */
+extern void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data, size_t len);
+
+/* test whether buffer is empty */
+extern int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf);
+
+/* return the number of free bytes in the buffer */
+extern ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf);
+
+/* return the number of bytes waiting in the buffer */
+extern ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf);
+
+
+/* read routines & macros */
+/* ---------------------- */
+/* flush buffer */
+extern void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf);
+
+/* flush buffer protected by spinlock and wake-up waiting task(s) */
+extern void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf);
+
+/* peek at byte <offs> in the buffer */
+#define DVB_RINGBUFFER_PEEK(rbuf,offs) \
+ (rbuf)->data[((rbuf)->pread+(offs))%(rbuf)->size]
+
+/* advance read ptr by <num> bytes */
+#define DVB_RINGBUFFER_SKIP(rbuf,num) \
+ (rbuf)->pread=((rbuf)->pread+(num))%(rbuf)->size
+
+/*
+** read <len> bytes from ring buffer into <buf>
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf, u8 *buf,
+ size_t len, int usermem);
+
+
+/* write routines & macros */
+/* ----------------------- */
+/* write single byte to ring buffer */
+#define DVB_RINGBUFFER_WRITE_BYTE(rbuf,byte) \
+ { (rbuf)->data[(rbuf)->pwrite]=(byte); \
+ (rbuf)->pwrite=((rbuf)->pwrite+1)%(rbuf)->size; }
+/*
+** write <len> bytes to ring buffer
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf,
+ size_t len);
+
+
+/**
+ * Write a packet into the ringbuffer.
+ *
+ * <rbuf> Ringbuffer to write to.
+ * <buf> Buffer to write.
+ * <len> Length of buffer (currently limited to 65535 bytes max).
+ * returns Number of bytes written, or -EFAULT, -ENOMEM, -EVINAL.
+ */
+extern ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8* buf,
+ size_t len);
+
+/**
+ * Read from a packet in the ringbuffer. Note: unlike dvb_ringbuffer_read(), this
+ * does NOT update the read pointer in the ringbuffer. You must use
+ * dvb_ringbuffer_pkt_dispose() to mark a packet as no longer required.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ * <offset> Offset into packet to read from.
+ * <buf> Destination buffer for data.
+ * <len> Size of destination buffer.
+ * <usermem> Set to 1 if <buf> is in userspace.
+ * returns Number of bytes read, or -EFAULT.
+ */
+extern ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx,
+ int offset, u8* buf, size_t len, int usermem);
+
+/**
+ * Dispose of a packet in the ring buffer.
+ *
+ * <rbuf> Ring buffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ */
+extern void dvb_ringbuffer_pkt_dispose(struct dvb_ringbuffer *rbuf, size_t idx);
+
+/**
+ * Get the index of the next packet in a ringbuffer.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Previous packet index, or -1 to return the first packet index.
+ * <pktlen> On success, will be updated to contain the length of the packet in bytes.
+ * returns Packet index (if >=0), or -1 if no packets available.
+ */
+extern ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf, size_t idx, size_t* pktlen);
+
+
+#endif /* _DVB_RINGBUFFER_H_ */
diff --git a/v4l/kernel-2.6.18/dvbdev.h b/v4l/kernel-2.6.18/dvbdev.h
new file mode 100644
index 0000000..7a7f75f
--- /dev/null
+++ b/v4l/kernel-2.6.18/dvbdev.h
@@ -0,0 +1,105 @@
+/*
+ * dvbdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBDEV_H_
+#define _DVBDEV_H_
+
+#include <linux/types.h>
+#include <linux/poll.h>
+#include <linux/fs.h>
+#include <linux/list.h>
+#include <linux/smp_lock.h>
+
+#define DVB_MAJOR 212
+
+#define DVB_DEVICE_VIDEO 0
+#define DVB_DEVICE_AUDIO 1
+#define DVB_DEVICE_SEC 2
+#define DVB_DEVICE_FRONTEND 3
+#define DVB_DEVICE_DEMUX 4
+#define DVB_DEVICE_DVR 5
+#define DVB_DEVICE_CA 6
+#define DVB_DEVICE_NET 7
+#define DVB_DEVICE_OSD 8
+
+
+struct dvb_adapter {
+ int num;
+ struct list_head list_head;
+ struct list_head device_list;
+ const char *name;
+ u8 proposed_mac [6];
+ void* priv;
+
+ struct device *device;
+
+ struct module *module;
+};
+
+
+struct dvb_device {
+ struct list_head list_head;
+ struct file_operations *fops;
+ struct dvb_adapter *adapter;
+ int type;
+ u32 id;
+
+ /* in theory, 'users' can vanish now,
+ but I don't want to change too much now... */
+ int readers;
+ int writers;
+ int users;
+
+ /* don't really need those !? -- FIXME: use video_usercopy */
+ int (*kernel_ioctl)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg);
+
+ void *priv;
+};
+
+
+extern int dvb_register_adapter (struct dvb_adapter *adap, const char *name, struct module *module, struct device *device);
+extern int dvb_unregister_adapter (struct dvb_adapter *adap);
+
+extern int dvb_register_device (struct dvb_adapter *adap,
+ struct dvb_device **pdvbdev,
+ const struct dvb_device *template,
+ void *priv,
+ int type);
+
+extern void dvb_unregister_device (struct dvb_device *dvbdev);
+
+extern int dvb_generic_open (struct inode *inode, struct file *file);
+extern int dvb_generic_release (struct inode *inode, struct file *file);
+extern int dvb_generic_ioctl (struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg);
+
+/* we don't mess with video_usercopy() any more,
+we simply define out own dvb_usercopy(), which will hopefully become
+generic_usercopy() someday... */
+
+extern int dvb_usercopy(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg,
+ int (*func)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg));
+
+#endif /* #ifndef _DVBDEV_H_ */
diff --git a/v4l/kernel-2.6.19/demux.h b/v4l/kernel-2.6.19/demux.h
new file mode 100644
index 0000000..0c1d87c
--- /dev/null
+++ b/v4l/kernel-2.6.19/demux.h
@@ -0,0 +1,278 @@
+/*
+ * demux.h
+ *
+ * Copyright (c) 2002 Convergence GmbH
+ *
+ * based on code:
+ * Copyright (c) 2000 Nokia Research Center
+ * Tampere, FINLAND
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __DEMUX_H
+#define __DEMUX_H
+
+#include <linux/types.h>
+#include <linux/errno.h>
+#include <linux/list.h>
+#include <linux/time.h>
+#include <linux/dvb/dmx.h>
+
+/*--------------------------------------------------------------------------*/
+/* Common definitions */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * DMX_MAX_FILTER_SIZE: Maximum length (in bytes) of a section/PES filter.
+ */
+
+#ifndef DMX_MAX_FILTER_SIZE
+#define DMX_MAX_FILTER_SIZE 18
+#endif
+
+/*
+ * DMX_MAX_SECFEED_SIZE: Maximum length (in bytes) of a private section feed filter.
+ */
+
+#ifndef DMX_MAX_SECTION_SIZE
+#define DMX_MAX_SECTION_SIZE 4096
+#endif
+#ifndef DMX_MAX_SECFEED_SIZE
+#define DMX_MAX_SECFEED_SIZE (DMX_MAX_SECTION_SIZE + 188)
+#endif
+
+
+/*
+ * enum dmx_success: Success codes for the Demux Callback API.
+ */
+
+enum dmx_success {
+ DMX_OK = 0, /* Received Ok */
+ DMX_LENGTH_ERROR, /* Incorrect length */
+ DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */
+ DMX_CRC_ERROR, /* Incorrect CRC */
+ DMX_FRAME_ERROR, /* Frame alignment error */
+ DMX_FIFO_ERROR, /* Receiver FIFO overrun */
+ DMX_MISSED_ERROR /* Receiver missed packet */
+} ;
+
+/*--------------------------------------------------------------------------*/
+/* TS packet reception */
+/*--------------------------------------------------------------------------*/
+
+/* TS filter type for set() */
+
+#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */
+#define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS
+ payload (<=184 bytes per packet) to callback */
+#define TS_DECODER 4 /* send stream to built-in decoder (if present) */
+
+/* PES type for filters which write to built-in decoder */
+/* these should be kept identical to the types in dmx.h */
+
+enum dmx_ts_pes
+{ /* also send packets to decoder (if it exists) */
+ DMX_TS_PES_AUDIO0,
+ DMX_TS_PES_VIDEO0,
+ DMX_TS_PES_TELETEXT0,
+ DMX_TS_PES_SUBTITLE0,
+ DMX_TS_PES_PCR0,
+
+ DMX_TS_PES_AUDIO1,
+ DMX_TS_PES_VIDEO1,
+ DMX_TS_PES_TELETEXT1,
+ DMX_TS_PES_SUBTITLE1,
+ DMX_TS_PES_PCR1,
+
+ DMX_TS_PES_AUDIO2,
+ DMX_TS_PES_VIDEO2,
+ DMX_TS_PES_TELETEXT2,
+ DMX_TS_PES_SUBTITLE2,
+ DMX_TS_PES_PCR2,
+
+ DMX_TS_PES_AUDIO3,
+ DMX_TS_PES_VIDEO3,
+ DMX_TS_PES_TELETEXT3,
+ DMX_TS_PES_SUBTITLE3,
+ DMX_TS_PES_PCR3,
+
+ DMX_TS_PES_OTHER
+};
+
+#define DMX_TS_PES_AUDIO DMX_TS_PES_AUDIO0
+#define DMX_TS_PES_VIDEO DMX_TS_PES_VIDEO0
+#define DMX_TS_PES_TELETEXT DMX_TS_PES_TELETEXT0
+#define DMX_TS_PES_SUBTITLE DMX_TS_PES_SUBTITLE0
+#define DMX_TS_PES_PCR DMX_TS_PES_PCR0
+
+
+struct dmx_ts_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux *parent; /* Back-pointer */
+ void *priv; /* Pointer to private data of the API client */
+ int (*set) (struct dmx_ts_feed *feed,
+ u16 pid,
+ int type,
+ enum dmx_ts_pes pes_type,
+ size_t circular_buffer_size,
+ struct timespec timeout);
+ int (*start_filtering) (struct dmx_ts_feed* feed);
+ int (*stop_filtering) (struct dmx_ts_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Section reception */
+/*--------------------------------------------------------------------------*/
+
+struct dmx_section_filter {
+ u8 filter_value [DMX_MAX_FILTER_SIZE];
+ u8 filter_mask [DMX_MAX_FILTER_SIZE];
+ u8 filter_mode [DMX_MAX_FILTER_SIZE];
+ struct dmx_section_feed* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+};
+
+struct dmx_section_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+
+ int check_crc;
+ u32 crc_val;
+
+ u8 *secbuf;
+ u8 secbuf_base[DMX_MAX_SECFEED_SIZE];
+ u16 secbufp, seclen, tsfeedp;
+
+ int (*set) (struct dmx_section_feed* feed,
+ u16 pid,
+ size_t circular_buffer_size,
+ int check_crc);
+ int (*allocate_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter** filter);
+ int (*release_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter* filter);
+ int (*start_filtering) (struct dmx_section_feed* feed);
+ int (*stop_filtering) (struct dmx_section_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Callback functions */
+/*--------------------------------------------------------------------------*/
+
+typedef int (*dmx_ts_cb) ( const u8 * buffer1,
+ size_t buffer1_length,
+ const u8 * buffer2,
+ size_t buffer2_length,
+ struct dmx_ts_feed* source,
+ enum dmx_success success);
+
+typedef int (*dmx_section_cb) ( const u8 * buffer1,
+ size_t buffer1_len,
+ const u8 * buffer2,
+ size_t buffer2_len,
+ struct dmx_section_filter * source,
+ enum dmx_success success);
+
+/*--------------------------------------------------------------------------*/
+/* DVB Front-End */
+/*--------------------------------------------------------------------------*/
+
+enum dmx_frontend_source {
+ DMX_MEMORY_FE,
+ DMX_FRONTEND_0,
+ DMX_FRONTEND_1,
+ DMX_FRONTEND_2,
+ DMX_FRONTEND_3,
+ DMX_STREAM_0, /* external stream input, e.g. LVDS */
+ DMX_STREAM_1,
+ DMX_STREAM_2,
+ DMX_STREAM_3
+};
+
+struct dmx_frontend {
+ struct list_head connectivity_list; /* List of front-ends that can
+ be connected to a particular
+ demux */
+ enum dmx_frontend_source source;
+};
+
+/*--------------------------------------------------------------------------*/
+/* MPEG-2 TS Demux */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * Flags OR'ed in the capabilities field of struct dmx_demux.
+ */
+
+#define DMX_TS_FILTERING 1
+#define DMX_PES_FILTERING 2
+#define DMX_SECTION_FILTERING 4
+#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */
+#define DMX_CRC_CHECKING 16
+#define DMX_TS_DESCRAMBLING 32
+
+/*
+ * Demux resource type identifier.
+*/
+
+/*
+ * DMX_FE_ENTRY(): Casts elements in the list of registered
+ * front-ends from the generic type struct list_head
+ * to the type * struct dmx_frontend
+ *.
+*/
+
+#define DMX_FE_ENTRY(list) list_entry(list, struct dmx_frontend, connectivity_list)
+
+struct dmx_demux {
+ u32 capabilities; /* Bitfield of capability flags */
+ struct dmx_frontend* frontend; /* Front-end connected to the demux */
+ void* priv; /* Pointer to private data of the API client */
+ int (*open) (struct dmx_demux* demux);
+ int (*close) (struct dmx_demux* demux);
+ int (*write) (struct dmx_demux* demux, const char* buf, size_t count);
+ int (*allocate_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed** feed,
+ dmx_ts_cb callback);
+ int (*release_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed* feed);
+ int (*allocate_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed** feed,
+ dmx_section_cb callback);
+ int (*release_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed* feed);
+ int (*add_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*remove_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ struct list_head* (*get_frontends) (struct dmx_demux* demux);
+ int (*connect_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*disconnect_frontend) (struct dmx_demux* demux);
+
+ int (*get_pes_pids) (struct dmx_demux* demux, u16 *pids);
+
+ int (*get_caps) (struct dmx_demux* demux, struct dmx_caps *caps);
+
+ int (*set_source) (struct dmx_demux* demux, const dmx_source_t *src);
+
+ int (*get_stc) (struct dmx_demux* demux, unsigned int num,
+ u64 *stc, unsigned int *base);
+};
+
+#endif /* #ifndef __DEMUX_H */
diff --git a/v4l/kernel-2.6.19/dmxdev.h b/v4l/kernel-2.6.19/dmxdev.h
new file mode 100644
index 0000000..d2bee9f
--- /dev/null
+++ b/v4l/kernel-2.6.19/dmxdev.h
@@ -0,0 +1,108 @@
+/*
+ * dmxdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DMXDEV_H_
+#define _DMXDEV_H_
+
+#include <linux/types.h>
+#include <linux/spinlock.h>
+#include <linux/kernel.h>
+#include <linux/timer.h>
+#include <linux/wait.h>
+#include <linux/fs.h>
+#include <linux/string.h>
+#include <linux/mutex.h>
+
+#include <linux/dvb/dmx.h>
+
+#include "dvbdev.h"
+#include "demux.h"
+#include "dvb_ringbuffer.h"
+
+enum dmxdev_type {
+ DMXDEV_TYPE_NONE,
+ DMXDEV_TYPE_SEC,
+ DMXDEV_TYPE_PES,
+};
+
+enum dmxdev_state {
+ DMXDEV_STATE_FREE,
+ DMXDEV_STATE_ALLOCATED,
+ DMXDEV_STATE_SET,
+ DMXDEV_STATE_GO,
+ DMXDEV_STATE_DONE,
+ DMXDEV_STATE_TIMEDOUT
+};
+
+struct dmxdev_filter {
+ union {
+ struct dmx_section_filter *sec;
+ } filter;
+
+ union {
+ struct dmx_ts_feed *ts;
+ struct dmx_section_feed *sec;
+ } feed;
+
+ union {
+ struct dmx_sct_filter_params sec;
+ struct dmx_pes_filter_params pes;
+ } params;
+
+ enum dmxdev_type type;
+ enum dmxdev_state state;
+ struct dmxdev *dev;
+ struct dvb_ringbuffer buffer;
+
+ struct mutex mutex;
+
+ /* only for sections */
+ struct timer_list timer;
+ int todo;
+ u8 secheader[3];
+};
+
+
+struct dmxdev {
+ struct dvb_device *dvbdev;
+ struct dvb_device *dvr_dvbdev;
+
+ struct dmxdev_filter *filter;
+ struct dmx_demux *demux;
+
+ int filternum;
+ int capabilities;
+#define DMXDEV_CAP_DUPLEX 1
+ struct dmx_frontend *dvr_orig_fe;
+
+ struct dvb_ringbuffer dvr_buffer;
+#define DVR_BUFFER_SIZE (10*188*1024)
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+
+int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *);
+void dvb_dmxdev_release(struct dmxdev *dmxdev);
+
+#endif /* _DMXDEV_H_ */
diff --git a/v4l/kernel-2.6.19/dvb-pll.h b/v4l/kernel-2.6.19/dvb-pll.h
new file mode 100644
index 0000000..ed5ac5a
--- /dev/null
+++ b/v4l/kernel-2.6.19/dvb-pll.h
@@ -0,0 +1,64 @@
+/*
+ * descriptions + helper functions for simple dvb plls.
+ */
+
+#ifndef __DVB_PLL_H__
+#define __DVB_PLL_H__
+
+#include <linux/i2c.h>
+#include "dvb_frontend.h"
+
+struct dvb_pll_desc {
+ char *name;
+ u32 min;
+ u32 max;
+ void (*setbw)(u8 *buf, u32 freq, int bandwidth);
+ int count;
+ struct {
+ u32 limit;
+ u32 offset;
+ u32 stepsize;
+ u8 config;
+ u8 cb;
+ } entries[12];
+};
+
+extern struct dvb_pll_desc dvb_pll_thomson_dtt7579;
+extern struct dvb_pll_desc dvb_pll_thomson_dtt759x;
+extern struct dvb_pll_desc dvb_pll_thomson_dtt7610;
+extern struct dvb_pll_desc dvb_pll_lg_z201;
+extern struct dvb_pll_desc dvb_pll_microtune_4042;
+extern struct dvb_pll_desc dvb_pll_thomson_dtt761x;
+extern struct dvb_pll_desc dvb_pll_unknown_1;
+
+extern struct dvb_pll_desc dvb_pll_tua6010xs;
+extern struct dvb_pll_desc dvb_pll_env57h1xd5;
+extern struct dvb_pll_desc dvb_pll_tua6034;
+extern struct dvb_pll_desc dvb_pll_lg_tdvs_h06xf;
+extern struct dvb_pll_desc dvb_pll_tda665x;
+extern struct dvb_pll_desc dvb_pll_fmd1216me;
+extern struct dvb_pll_desc dvb_pll_tded4;
+
+extern struct dvb_pll_desc dvb_pll_tuv1236d;
+extern struct dvb_pll_desc dvb_pll_tdhu2;
+extern struct dvb_pll_desc dvb_pll_samsung_tbmv;
+extern struct dvb_pll_desc dvb_pll_philips_sd1878_tda8261;
+extern struct dvb_pll_desc dvb_pll_philips_td1316;
+
+extern struct dvb_pll_desc dvb_pll_thomson_fe6600;
+
+extern int dvb_pll_configure(struct dvb_pll_desc *desc, u8 *buf,
+ u32 freq, int bandwidth);
+
+/**
+ * Attach a dvb-pll to the supplied frontend structure.
+ *
+ * @param fe Frontend to attach to.
+ * @param pll_addr i2c address of the PLL (if used).
+ * @param i2c i2c adapter to use (set to NULL if not used).
+ * @param desc dvb_pll_desc to use.
+ * @return Frontend pointer on success, NULL on failure
+ */
+extern struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe, int pll_addr, struct i2c_adapter *i2c, struct dvb_pll_desc *desc);
+
+#endif
diff --git a/v4l/kernel-2.6.19/dvb-usb-ids.h b/v4l/kernel-2.6.19/dvb-usb-ids.h
new file mode 100644
index 0000000..4d6b069
--- /dev/null
+++ b/v4l/kernel-2.6.19/dvb-usb-ids.h
@@ -0,0 +1,131 @@
+/* dvb-usb-ids.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de) see
+ * dvb-usb-init.c for copyright information.
+ *
+ * a header file containing define's for the USB device supported by the
+ * various drivers.
+ */
+#ifndef _DVB_USB_IDS_H_
+#define _DVB_USB_IDS_H_
+
+/* Vendor IDs */
+#define USB_VID_ADSTECH 0x06e1
+#define USB_VID_ANCHOR 0x0547
+#define USB_VID_AVERMEDIA 0x07ca
+#define USB_VID_COMPRO 0x185b
+#define USB_VID_COMPRO_UNK 0x145f
+#define USB_VID_CYPRESS 0x04b4
+#define USB_VID_DIBCOM 0x10b8
+#define USB_VID_DVICO 0x0fe9
+#define USB_VID_EMPIA 0xeb1a
+#define USB_VID_GENPIX 0x09c0
+#define USB_VID_GRANDTEC 0x5032
+#define USB_VID_HANFTEK 0x15f4
+#define USB_VID_HAUPPAUGE 0x2040
+#define USB_VID_HYPER_PALTEK 0x1025
+#define USB_VID_KWORLD 0xeb2a
+#define USB_VID_KYE 0x0458
+#define USB_VID_LEADTEK 0x0413
+#define USB_VID_LITEON 0x04ca
+#define USB_VID_MEDION 0x1660
+#define USB_VID_PINNACLE 0x2304
+#define USB_VID_VISIONPLUS 0x13d3
+#define USB_VID_TWINHAN 0x1822
+#define USB_VID_ULTIMA_ELECTRONIC 0x05d8
+#define USB_VID_WIDEVIEW 0x14aa
+
+/* Product IDs */
+#define USB_PID_ADSTECH_USB2_COLD 0xa333
+#define USB_PID_ADSTECH_USB2_WARM 0xa334
+#define USB_PID_AVERMEDIA_DVBT_USB_COLD 0x0001
+#define USB_PID_AVERMEDIA_DVBT_USB_WARM 0x0002
+#define USB_PID_AVERMEDIA_DVBT_USB2_COLD 0xa800
+#define USB_PID_AVERMEDIA_DVBT_USB2_WARM 0xa801
+#define USB_PID_COMPRO_DVBU2000_COLD 0xd000
+#define USB_PID_COMPRO_DVBU2000_WARM 0xd001
+#define USB_PID_COMPRO_DVBU2000_UNK_COLD 0x010c
+#define USB_PID_COMPRO_DVBU2000_UNK_WARM 0x010d
+#define USB_PID_DIBCOM_HOOK_DEFAULT 0x0064
+#define USB_PID_DIBCOM_HOOK_DEFAULT_REENUM 0x0065
+#define USB_PID_DIBCOM_MOD3000_COLD 0x0bb8
+#define USB_PID_DIBCOM_MOD3000_WARM 0x0bb9
+#define USB_PID_DIBCOM_MOD3001_COLD 0x0bc6
+#define USB_PID_DIBCOM_MOD3001_WARM 0x0bc7
+#define USB_PID_DIBCOM_STK7700P 0x1e14
+#define USB_PID_DIBCOM_ANCHOR_2135_COLD 0x2131
+#define USB_PID_GRANDTEC_DVBT_USB_COLD 0x0fa0
+#define USB_PID_GRANDTEC_DVBT_USB_WARM 0x0fa1
+#define USB_PID_KWORLD_VSTREAM_COLD 0x17de
+#define USB_PID_KWORLD_VSTREAM_WARM 0x17df
+#define USB_PID_TWINHAN_VP7041_COLD 0x3201
+#define USB_PID_TWINHAN_VP7041_WARM 0x3202
+#define USB_PID_TWINHAN_VP7020_COLD 0x3203
+#define USB_PID_TWINHAN_VP7020_WARM 0x3204
+#define USB_PID_TWINHAN_VP7045_COLD 0x3205
+#define USB_PID_TWINHAN_VP7045_WARM 0x3206
+#define USB_PID_TWINHAN_VP7021_COLD 0x3207
+#define USB_PID_TWINHAN_VP7021_WARM 0x3208
+#define USB_PID_DNTV_TINYUSB2_COLD 0x3223
+#define USB_PID_DNTV_TINYUSB2_WARM 0x3224
+#define USB_PID_ULTIMA_TVBOX_COLD 0x8105
+#define USB_PID_ULTIMA_TVBOX_WARM 0x8106
+#define USB_PID_ULTIMA_TVBOX_AN2235_COLD 0x8107
+#define USB_PID_ULTIMA_TVBOX_AN2235_WARM 0x8108
+#define USB_PID_ULTIMA_TVBOX_ANCHOR_COLD 0x2235
+#define USB_PID_ULTIMA_TVBOX_USB2_COLD 0x8109
+#define USB_PID_ULTIMA_TVBOX_USB2_WARM 0x810a
+#define USB_PID_ARTEC_T14_COLD 0x810b
+#define USB_PID_ARTEC_T14_WARM 0x810c
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_COLD 0x8613
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_WARM 0x1002
+#define USB_PID_UNK_HYPER_PALTEK_COLD 0x005e
+#define USB_PID_UNK_HYPER_PALTEK_WARM 0x005f
+#define USB_PID_HANFTEK_UMT_010_COLD 0x0001
+#define USB_PID_HANFTEK_UMT_010_WARM 0x0015
+#define USB_PID_DTT200U_COLD 0x0201
+#define USB_PID_DTT200U_WARM 0x0301
+#define USB_PID_WT220U_ZAP250_COLD 0x0220
+#define USB_PID_WT220U_COLD 0x0222
+#define USB_PID_WT220U_WARM 0x0221
+#define USB_PID_WT220U_FC_COLD 0x0225
+#define USB_PID_WT220U_FC_WARM 0x0226
+#define USB_PID_WT220U_ZL0353_COLD 0x022a
+#define USB_PID_WT220U_ZL0353_WARM 0x022b
+#define USB_PID_WINTV_NOVA_T_USB2_COLD 0x9300
+#define USB_PID_WINTV_NOVA_T_USB2_WARM 0x9301
+#define USB_PID_HAUPPAUGE_NOVA_T_500 0x9941
+#define USB_PID_HAUPPAUGE_NOVA_T_500_2 0x9950
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK 0x7050
+#define USB_PID_AVERMEDIA_VOLAR 0x1234
+#define USB_PID_NEBULA_DIGITV 0x0201
+#define USB_PID_DVICO_BLUEBIRD_LGDT 0xd820
+#define USB_PID_DVICO_BLUEBIRD_LG064F_COLD 0xd500
+#define USB_PID_DVICO_BLUEBIRD_LG064F_WARM 0xd501
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_COLD 0xdb00
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_WARM 0xdb01
+#define USB_PID_DVICO_BLUEBIRD_TH7579_COLD 0xdb10
+#define USB_PID_DVICO_BLUEBIRD_TH7579_WARM 0xdb11
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_COLD 0xdb50
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_WARM 0xdb51
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_COLD 0xdb58
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_WARM 0xdb59
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_COLD 0xdb54
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_WARM 0xdb55
+#define USB_PID_MEDION_MD95700 0x0932
+#define USB_PID_KYE_DVB_T_COLD 0x701e
+#define USB_PID_KYE_DVB_T_WARM 0x701f
+#define USB_PID_PCTV_200E 0x020e
+#define USB_PID_PCTV_400E 0x020f
+#define USB_PID_LITEON_DVB_T_COLD 0xf000
+#define USB_PID_LITEON_DVB_T_WARM 0xf001
+#define USB_PID_DIGIVOX_MINI_SL_COLD 0xe360
+#define USB_PID_DIGIVOX_MINI_SL_WARM 0xe361
+#define USB_PID_GRANDTEC_DVBT_USB2_COLD 0x0bc6
+#define USB_PID_GRANDTEC_DVBT_USB2_WARM 0x0bc7
+#define USB_PID_WINFAST_DTV_DONGLE_COLD 0x6025
+#define USB_PID_WINFAST_DTV_DONGLE_WARM 0x6026
+#define USB_PID_GENPIX_8PSK_COLD 0x0200
+#define USB_PID_GENPIX_8PSK_WARM 0x0201
+
+#endif
diff --git a/v4l/kernel-2.6.19/dvb-usb.h b/v4l/kernel-2.6.19/dvb-usb.h
new file mode 100644
index 0000000..376c45a
--- /dev/null
+++ b/v4l/kernel-2.6.19/dvb-usb.h
@@ -0,0 +1,408 @@
+/* dvb-usb.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * the headerfile, all dvb-usb-drivers have to include.
+ *
+ * TODO: clean-up the structures for unused fields and update the comments
+ */
+#ifndef __DVB_USB_H__
+#define __DVB_USB_H__
+
+#include <linux/input.h>
+#include <linux/usb.h>
+#include <linux/firmware.h>
+#include <linux/mutex.h>
+
+#include "dvb_frontend.h"
+#include "dvb_demux.h"
+#include "dvb_net.h"
+#include "dmxdev.h"
+
+#include "dvb-pll.h"
+
+#include "dvb-usb-ids.h"
+
+/* debug */
+#ifdef CONFIG_DVB_USB_DEBUG
+#define dprintk(var,level,args...) \
+ do { if ((var & level)) { printk(args); } } while (0)
+
+#define debug_dump(b,l,func) {\
+ int loop_; \
+ for (loop_ = 0; loop_ < l; loop_++) func("%02x ", b[loop_]); \
+ func("\n");\
+}
+#define DVB_USB_DEBUG_STATUS
+#else
+#define dprintk(args...)
+#define debug_dump(b,l,func)
+
+#define DVB_USB_DEBUG_STATUS " (debugging is not enabled)"
+
+#endif
+
+/* generic log methods - taken from usb.h */
+#ifndef DVB_USB_LOG_PREFIX
+ #define DVB_USB_LOG_PREFIX "dvb-usb (please define a log prefix)"
+#endif
+
+#undef err
+#define err(format, arg...) printk(KERN_ERR DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef info
+#define info(format, arg...) printk(KERN_INFO DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef warn
+#define warn(format, arg...) printk(KERN_WARNING DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+
+/**
+ * struct dvb_usb_device_description - name and its according USB IDs
+ * @name: real name of the box, regardless which DVB USB device class is in use
+ * @cold_ids: array of struct usb_device_id which describe the device in
+ * pre-firmware state
+ * @warm_ids: array of struct usb_device_id which describe the device in
+ * post-firmware state
+ *
+ * Each DVB USB device class can have one or more actual devices, this struct
+ * assigns a name to it.
+ */
+struct dvb_usb_device_description {
+ const char *name;
+
+#define DVB_USB_ID_MAX_NUM 15
+ struct usb_device_id *cold_ids[DVB_USB_ID_MAX_NUM];
+ struct usb_device_id *warm_ids[DVB_USB_ID_MAX_NUM];
+};
+
+/**
+ * struct dvb_usb_rc_key - a remote control key and its input-event
+ * @custom: the vendor/custom part of the key
+ * @data: the actual key part
+ * @event: the input event assigned to key identified by custom and data
+ */
+struct dvb_usb_rc_key {
+ u8 custom,data;
+ u32 event;
+};
+
+struct dvb_usb_device;
+struct dvb_usb_adapter;
+struct usb_data_stream;
+
+/**
+ * Properties of USB streaming - TODO this structure should be somewhere else
+ * describes the kind of USB transfer used for data-streaming.
+ * (BULK or ISOC)
+ */
+struct usb_data_stream_properties {
+#define USB_BULK 1
+#define USB_ISOC 2
+ int type;
+ int count;
+ int endpoint;
+
+ union {
+ struct {
+ int buffersize; /* per URB */
+ } bulk;
+ struct {
+ int framesperurb;
+ int framesize;
+ int interval;
+ } isoc;
+ } u;
+};
+
+/**
+ * struct dvb_usb_adapter_properties - properties of a dvb-usb-adapter.
+ * A DVB-USB-Adapter is basically a dvb_adapter which is present on a USB-device.
+ * @caps: capabilities of the DVB USB device.
+ * @pid_filter_count: number of PID filter position in the optional hardware
+ * PID-filter.
+ * @streaming_crtl: called to start and stop the MPEG2-TS streaming of the
+ * device (not URB submitting/killing).
+ * @pid_filter_ctrl: called to en/disable the PID filter, if any.
+ * @pid_filter: called to set/unset a PID for filtering.
+ * @frontend_attach: called to attach the possible frontends (fill fe-field
+ * of struct dvb_usb_device).
+ * @tuner_attach: called to attach the correct tuner and to fill pll_addr,
+ * pll_desc and pll_init_buf of struct dvb_usb_device).
+ * @stream: configuration of the USB streaming
+ */
+struct dvb_usb_adapter_properties {
+#define DVB_USB_ADAP_HAS_PID_FILTER 0x01
+#define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
+#define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
+#define DVB_USB_ADAP_RECEIVES_204_BYTE_TS 0x08
+ int caps;
+ int pid_filter_count;
+
+ int (*streaming_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
+
+ int (*frontend_attach) (struct dvb_usb_adapter *);
+ int (*tuner_attach) (struct dvb_usb_adapter *);
+
+ struct usb_data_stream_properties stream;
+
+ int size_of_priv;
+};
+
+/**
+ * struct dvb_usb_device_properties - properties of a dvb-usb-device
+ * @usb_ctrl: which USB device-side controller is in use. Needed for firmware
+ * download.
+ * @firmware: name of the firmware file.
+ * @download_firmware: called to download the firmware when the usb_ctrl is
+ * DEVICE_SPECIFIC.
+ * @no_reconnect: device doesn't do a reconnect after downloading the firmware,
+ * so do the warm initialization right after it
+ *
+ * @size_of_priv: how many bytes shall be allocated for the private field
+ * of struct dvb_usb_device.
+ *
+ * @power_ctrl: called to enable/disable power of the device.
+ * @read_mac_address: called to read the MAC address of the device.
+ * @identify_state: called to determine the state (cold or warm), when it
+ * is not distinguishable by the USB IDs.
+ *
+ * @rc_key_map: a hard-wired array of struct dvb_usb_rc_key (NULL to disable
+ * remote control handling).
+ * @rc_key_map_size: number of items in @rc_key_map.
+ * @rc_query: called to query an event event.
+ * @rc_interval: time in ms between two queries.
+ *
+ * @i2c_algo: i2c_algorithm if the device has I2CoverUSB.
+ *
+ * @generic_bulk_ctrl_endpoint: most of the DVB USB devices have a generic
+ * endpoint which received control messages with bulk transfers. When this
+ * is non-zero, one can use dvb_usb_generic_rw and dvb_usb_generic_write-
+ * helper functions.
+ *
+ * @num_device_descs: number of struct dvb_usb_device_description in @devices
+ * @devices: array of struct dvb_usb_device_description compatibles with these
+ * properties.
+ */
+#define MAX_NO_OF_ADAPTER_PER_DEVICE 2
+struct dvb_usb_device_properties {
+
+#define DVB_USB_IS_AN_I2C_ADAPTER 0x01
+ int caps;
+
+#define DEVICE_SPECIFIC 0
+#define CYPRESS_AN2135 1
+#define CYPRESS_AN2235 2
+#define CYPRESS_FX2 3
+ int usb_ctrl;
+ int (*download_firmware) (struct usb_device *, const struct firmware *);
+ const char firmware[FIRMWARE_NAME_MAX];
+ int no_reconnect;
+
+ int size_of_priv;
+
+ int num_adapters;
+ struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ int (*power_ctrl) (struct dvb_usb_device *, int);
+ int (*read_mac_address) (struct dvb_usb_device *, u8 []);
+ int (*identify_state) (struct usb_device *, struct dvb_usb_device_properties *,
+ struct dvb_usb_device_description **, int *);
+
+/* remote control properties */
+#define REMOTE_NO_KEY_PRESSED 0x00
+#define REMOTE_KEY_PRESSED 0x01
+#define REMOTE_KEY_REPEAT 0x02
+ struct dvb_usb_rc_key *rc_key_map;
+ int rc_key_map_size;
+ int (*rc_query) (struct dvb_usb_device *, u32 *, int *);
+ int rc_interval;
+
+ struct i2c_algorithm *i2c_algo;
+
+ int generic_bulk_ctrl_endpoint;
+
+ int num_device_descs;
+ struct dvb_usb_device_description devices[9];
+};
+
+/**
+ * struct usb_data_stream - generic object of an USB stream
+ * @buf_num: number of buffer allocated.
+ * @buf_size: size of each buffer in buf_list.
+ * @buf_list: array containing all allocate buffers for streaming.
+ * @dma_addr: list of dma_addr_t for each buffer in buf_list.
+ *
+ * @urbs_initialized: number of URBs initialized.
+ * @urbs_submitted: number of URBs submitted.
+ */
+#define MAX_NO_URBS_FOR_DATA_STREAM 10
+struct usb_data_stream {
+ struct usb_device *udev;
+ struct usb_data_stream_properties props;
+
+#define USB_STATE_INIT 0x00
+#define USB_STATE_URB_BUF 0x01
+ int state;
+
+ void (*complete) (struct usb_data_stream *, u8 *, size_t);
+
+ struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ int buf_num;
+ unsigned long buf_size;
+ u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
+
+ int urbs_initialized;
+ int urbs_submitted;
+
+ void *user_priv;
+};
+
+/**
+ * struct dvb_usb_adapter - a DVB adapter on a USB device
+ * @id: index of this adapter (starting with 0).
+ *
+ * @feedcount: number of reqested feeds (used for streaming-activation)
+ * @pid_filtering: is hardware pid_filtering used or not.
+ *
+ * @pll_addr: I2C address of the tuner for programming
+ * @pll_init: array containing the initialization buffer
+ * @pll_desc: pointer to the appropriate struct dvb_pll_desc
+ * @tuner_pass_ctrl: called to (de)activate tuner passthru of the demod or the board
+ *
+ * @dvb_adap: device's dvb_adapter.
+ * @dmxdev: device's dmxdev.
+ * @demux: device's software demuxer.
+ * @dvb_net: device's dvb_net interfaces.
+ * @dvb_frontend: device's frontend.
+ * @max_feed_count: how many feeds can be handled simultaneously by this
+ * device
+ *
+ * @fe_init: rerouted frontend-init (wakeup) function.
+ * @fe_sleep: rerouted frontend-sleep function.
+ *
+ * @stream: the usb data stream.
+ */
+struct dvb_usb_adapter {
+ struct dvb_usb_device *dev;
+ struct dvb_usb_adapter_properties props;
+
+#define DVB_USB_ADAP_STATE_INIT 0x000
+#define DVB_USB_ADAP_STATE_DVB 0x001
+ int state;
+
+ u8 id;
+
+ int feedcount;
+ int pid_filtering;
+
+ /* tuner programming information */
+ u8 pll_addr;
+ u8 pll_init[4];
+ struct dvb_pll_desc *pll_desc;
+ int (*tuner_pass_ctrl) (struct dvb_frontend *, int, u8);
+
+ /* dvb */
+ struct dvb_adapter dvb_adap;
+ struct dmxdev dmxdev;
+ struct dvb_demux demux;
+ struct dvb_net dvb_net;
+ struct dvb_frontend *fe;
+ int max_feed_count;
+
+ int (*fe_init) (struct dvb_frontend *);
+ int (*fe_sleep) (struct dvb_frontend *);
+
+ struct usb_data_stream stream;
+
+ void *priv;
+};
+
+/**
+ * struct dvb_usb_device - object of a DVB USB device
+ * @props: copy of the struct dvb_usb_properties this device belongs to.
+ * @desc: pointer to the device's struct dvb_usb_device_description.
+ * @state: initialization and runtime state of the device.
+ *
+ * @powered: indicated whether the device is power or not.
+ * Powered is in/decremented for each call to modify the state.
+ * @udev: pointer to the device's struct usb_device.
+ *
+ * @usb_mutex: semaphore of USB control messages (reading needs two messages)
+ * @i2c_mutex: semaphore for i2c-transfers
+ *
+ * @i2c_adap: device's i2c_adapter if it uses I2CoverUSB
+ *
+ * @rc_input_dev: input device for the remote control.
+ * @rc_query_work: struct work_struct frequent rc queries
+ * @last_event: last triggered event
+ * @last_state: last state (no, pressed, repeat)
+ * @owner: owner of the dvb_adapter
+ * @priv: private data of the actual driver (allocate by dvb-usb, size defined
+ * in size_of_priv of dvb_usb_properties).
+ */
+struct dvb_usb_device {
+ struct dvb_usb_device_properties props;
+ struct dvb_usb_device_description *desc;
+
+ struct usb_device *udev;
+
+#define DVB_USB_STATE_INIT 0x000
+#define DVB_USB_STATE_I2C 0x001
+#define DVB_USB_STATE_DVB 0x002
+#define DVB_USB_STATE_REMOTE 0x004
+ int state;
+
+ int powered;
+
+ /* locking */
+ struct mutex usb_mutex;
+
+ /* i2c */
+ struct mutex i2c_mutex;
+ struct i2c_adapter i2c_adap;
+
+ int num_adapters_initialized;
+ struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ /* remote control */
+ struct input_dev *rc_input_dev;
+ char rc_phys[64];
+ struct work_struct rc_query_work;
+ u32 last_event;
+ int last_state;
+
+ struct module *owner;
+
+ void *priv;
+};
+
+extern int dvb_usb_device_init(struct usb_interface *, struct dvb_usb_device_properties *, struct module *, struct dvb_usb_device **);
+extern void dvb_usb_device_exit(struct usb_interface *);
+
+/* the generic read/write method for device control */
+extern int dvb_usb_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16,int);
+extern int dvb_usb_generic_write(struct dvb_usb_device *, u8 *, u16);
+
+/* commonly used remote control parsing */
+extern int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *, u8[], u32 *, int *);
+
+/* commonly used pll init and set functions */
+extern int dvb_usb_tuner_init_i2c(struct dvb_frontend *);
+extern int dvb_usb_tuner_calc_regs(struct dvb_frontend *, struct dvb_frontend_parameters *, u8 *buf, int buf_len);
+extern int dvb_usb_tuner_set_params_i2c(struct dvb_frontend *, struct dvb_frontend_parameters *);
+
+/* commonly used firmware download types and function */
+struct hexline {
+ u8 len;
+ u32 addr;
+ u8 type;
+ u8 data[255];
+ u8 chk;
+};
+extern int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type);
+extern int dvb_usb_get_hexline(const struct firmware *fw, struct hexline *hx, int *pos);
+
+
+#endif
diff --git a/v4l/kernel-2.6.19/dvb_demux.h b/v4l/kernel-2.6.19/dvb_demux.h
new file mode 100644
index 0000000..2c5f915
--- /dev/null
+++ b/v4l/kernel-2.6.19/dvb_demux.h
@@ -0,0 +1,140 @@
+/*
+ * dvb_demux.h: DVB kernel demux API
+ *
+ * Copyright (C) 2000-2001 Marcus Metzler & Ralph Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_DEMUX_H_
+#define _DVB_DEMUX_H_
+
+#include <linux/time.h>
+#include <linux/timer.h>
+#include <linux/spinlock.h>
+#include <linux/mutex.h>
+
+#include "demux.h"
+
+#define DMX_TYPE_TS 0
+#define DMX_TYPE_SEC 1
+#define DMX_TYPE_PES 2
+
+#define DMX_STATE_FREE 0
+#define DMX_STATE_ALLOCATED 1
+#define DMX_STATE_SET 2
+#define DMX_STATE_READY 3
+#define DMX_STATE_GO 4
+
+#define DVB_DEMUX_MASK_MAX 18
+
+struct dvb_demux_filter {
+ struct dmx_section_filter filter;
+ u8 maskandmode[DMX_MAX_FILTER_SIZE];
+ u8 maskandnotmode[DMX_MAX_FILTER_SIZE];
+ int doneq;
+
+ struct dvb_demux_filter *next;
+ struct dvb_demux_feed *feed;
+ int index;
+ int state;
+ int type;
+
+ u16 hw_handle;
+ struct timer_list timer;
+};
+
+#define DMX_FEED_ENTRY(pos) list_entry(pos, struct dvb_demux_feed, list_head)
+
+struct dvb_demux_feed {
+ union {
+ struct dmx_ts_feed ts;
+ struct dmx_section_feed sec;
+ } feed;
+
+ union {
+ dmx_ts_cb ts;
+ dmx_section_cb sec;
+ } cb;
+
+ struct dvb_demux *demux;
+ void *priv;
+ int type;
+ int state;
+ u16 pid;
+ u8 *buffer;
+ int buffer_size;
+
+ struct timespec timeout;
+ struct dvb_demux_filter *filter;
+
+ int ts_type;
+ enum dmx_ts_pes pes_type;
+
+ int cc;
+ int pusi_seen; /* prevents feeding of garbage from previous section */
+
+ u16 peslen;
+
+ struct list_head list_head;
+ unsigned int index; /* a unique index for each feed (can be used as hardware pid filter index) */
+};
+
+struct dvb_demux {
+ struct dmx_demux dmx;
+ void *priv;
+ int filternum;
+ int feednum;
+ int (*start_feed)(struct dvb_demux_feed *feed);
+ int (*stop_feed)(struct dvb_demux_feed *feed);
+ int (*write_to_decoder)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ u32 (*check_crc32)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ void (*memcopy)(struct dvb_demux_feed *feed, u8 *dst,
+ const u8 *src, size_t len);
+
+ int users;
+#define MAX_DVB_DEMUX_USERS 10
+ struct dvb_demux_filter *filter;
+ struct dvb_demux_feed *feed;
+
+ struct list_head frontend_list;
+
+ struct dvb_demux_feed *pesfilter[DMX_TS_PES_OTHER];
+ u16 pids[DMX_TS_PES_OTHER];
+ int playing;
+ int recording;
+
+#define DMX_MAX_PID 0x2000
+ struct list_head feed_list;
+ u8 tsbuf[204];
+ int tsbufp;
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+int dvb_dmx_init(struct dvb_demux *dvbdemux);
+void dvb_dmx_release(struct dvb_demux *dvbdemux);
+void dvb_dmx_swfilter_packets(struct dvb_demux *dvbdmx, const u8 *buf,
+ size_t count);
+void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count);
+void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf,
+ size_t count);
+
+#endif /* _DVB_DEMUX_H_ */
diff --git a/v4l/kernel-2.6.19/dvb_frontend.h b/v4l/kernel-2.6.19/dvb_frontend.h
new file mode 100644
index 0000000..f233d78
--- /dev/null
+++ b/v4l/kernel-2.6.19/dvb_frontend.h
@@ -0,0 +1,169 @@
+/*
+ * dvb_frontend.h
+ *
+ * Copyright (C) 2001 convergence integrated media GmbH
+ * Copyright (C) 2004 convergence GmbH
+ *
+ * Written by Ralph Metzler
+ * Overhauled by Holger Waechtler
+ * Kernel I2C stuff by Michael Hunold <hunold@convergence.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_FRONTEND_H_
+#define _DVB_FRONTEND_H_
+
+#include <linux/types.h>
+#include <linux/sched.h>
+#include <linux/ioctl.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/delay.h>
+
+#include <linux/dvb/frontend.h>
+
+#include "dvbdev.h"
+
+struct dvb_frontend_tune_settings {
+ int min_delay_ms;
+ int step_size;
+ int max_drift;
+ struct dvb_frontend_parameters parameters;
+};
+
+struct dvb_frontend;
+
+struct dvb_tuner_info {
+ char name[128];
+
+ u32 frequency_min;
+ u32 frequency_max;
+ u32 frequency_step;
+
+ u32 bandwidth_min;
+ u32 bandwidth_max;
+ u32 bandwidth_step;
+};
+
+struct dvb_tuner_ops {
+
+ struct dvb_tuner_info info;
+
+ int (*release)(struct dvb_frontend *fe);
+ int (*init)(struct dvb_frontend *fe);
+ int (*sleep)(struct dvb_frontend *fe);
+
+ /** This is for simple PLLs - set all parameters in one go. */
+ int (*set_params)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
+
+ /** This is support for demods like the mt352 - fills out the supplied buffer with what to write. */
+ int (*calc_regs)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p, u8 *buf, int buf_len);
+
+ int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency);
+ int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth);
+
+#define TUNER_STATUS_LOCKED 1
+ int (*get_status)(struct dvb_frontend *fe, u32 *status);
+
+ /** These are provided seperately from set_params in order to facilitate silicon
+ * tuners which require sophisticated tuning loops, controlling each parameter seperately. */
+ int (*set_frequency)(struct dvb_frontend *fe, u32 frequency);
+ int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
+};
+
+struct dvb_frontend_ops {
+
+ struct dvb_frontend_info info;
+
+ void (*release)(struct dvb_frontend* fe);
+ void (*release_sec)(struct dvb_frontend* fe);
+
+ int (*init)(struct dvb_frontend* fe);
+ int (*sleep)(struct dvb_frontend* fe);
+
+ int (*write)(struct dvb_frontend* fe, u8* buf, int len);
+
+ /* if this is set, it overrides the default swzigzag */
+ int (*tune)(struct dvb_frontend* fe,
+ struct dvb_frontend_parameters* params,
+ unsigned int mode_flags,
+ int *delay,
+ fe_status_t *status);
+ /* get frontend tuning algorithm from the module */
+ int (*get_frontend_algo)(struct dvb_frontend *fe);
+
+ /* these two are only used for the swzigzag code */
+ int (*set_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+ int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings);
+
+ int (*get_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+
+ int (*read_status)(struct dvb_frontend* fe, fe_status_t* status);
+ int (*read_ber)(struct dvb_frontend* fe, u32* ber);
+ int (*read_signal_strength)(struct dvb_frontend* fe, u16* strength);
+ int (*read_snr)(struct dvb_frontend* fe, u16* snr);
+ int (*read_ucblocks)(struct dvb_frontend* fe, u32* ucblocks);
+
+ int (*diseqc_reset_overload)(struct dvb_frontend* fe);
+ int (*diseqc_send_master_cmd)(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd);
+ int (*diseqc_recv_slave_reply)(struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply);
+ int (*diseqc_send_burst)(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd);
+ int (*set_tone)(struct dvb_frontend* fe, fe_sec_tone_mode_t tone);
+ int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
+ int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg);
+ int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
+ int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
+ int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);
+
+ struct dvb_tuner_ops tuner_ops;
+};
+
+#define MAX_EVENT 8
+
+struct dvb_fe_events {
+ struct dvb_frontend_event events[MAX_EVENT];
+ int eventw;
+ int eventr;
+ int overflow;
+ wait_queue_head_t wait_queue;
+ struct semaphore sem;
+};
+
+struct dvb_frontend {
+ struct dvb_frontend_ops ops;
+ struct dvb_adapter *dvb;
+ void* demodulator_priv;
+ void* tuner_priv;
+ void* frontend_priv;
+ void* sec_priv;
+};
+
+extern int dvb_register_frontend(struct dvb_adapter* dvb,
+ struct dvb_frontend* fe);
+
+extern int dvb_unregister_frontend(struct dvb_frontend* fe);
+
+extern void dvb_frontend_detach(struct dvb_frontend* fe);
+
+extern void dvb_frontend_reinitialise(struct dvb_frontend *fe);
+
+extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec);
+extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime);
+
+#endif
diff --git a/v4l/kernel-2.6.19/dvb_net.h b/v4l/kernel-2.6.19/dvb_net.h
new file mode 100644
index 0000000..f14e4ca
--- /dev/null
+++ b/v4l/kernel-2.6.19/dvb_net.h
@@ -0,0 +1,46 @@
+/*
+ * dvb_net.h
+ *
+ * Copyright (C) 2001 Ralph Metzler for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_NET_H_
+#define _DVB_NET_H_
+
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/inetdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/skbuff.h>
+
+#include "dvbdev.h"
+
+#define DVB_NET_DEVICES_MAX 10
+
+struct dvb_net {
+ struct dvb_device *dvbdev;
+ struct net_device *device[DVB_NET_DEVICES_MAX];
+ int state[DVB_NET_DEVICES_MAX];
+ struct dmx_demux *demux;
+};
+
+
+void dvb_net_release(struct dvb_net *);
+int dvb_net_init(struct dvb_adapter *, struct dvb_net *, struct dmx_demux *);
+
+#endif
diff --git a/v4l/kernel-2.6.19/dvb_ringbuffer.h b/v4l/kernel-2.6.19/dvb_ringbuffer.h
new file mode 100644
index 0000000..d97714e
--- /dev/null
+++ b/v4l/kernel-2.6.19/dvb_ringbuffer.h
@@ -0,0 +1,174 @@
+/*
+ *
+ * dvb_ringbuffer.h: ring buffer implementation for the dvb driver
+ *
+ * Copyright (C) 2003 Oliver Endriss
+ * Copyright (C) 2004 Andrew de Quincey
+ *
+ * based on code originally found in av7110.c & dvb_ci.c:
+ * Copyright (C) 1999-2003 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _DVB_RINGBUFFER_H_
+#define _DVB_RINGBUFFER_H_
+
+#include <linux/spinlock.h>
+#include <linux/wait.h>
+
+struct dvb_ringbuffer {
+ u8 *data;
+ ssize_t size;
+ ssize_t pread;
+ ssize_t pwrite;
+ int error;
+
+ wait_queue_head_t queue;
+ spinlock_t lock;
+};
+
+#define DVB_RINGBUFFER_PKTHDRSIZE 3
+
+
+/*
+** Notes:
+** ------
+** (1) For performance reasons read and write routines don't check buffer sizes
+** and/or number of bytes free/available. This has to be done before these
+** routines are called. For example:
+**
+** *** write <buflen> bytes ***
+** free = dvb_ringbuffer_free(rbuf);
+** if (free >= buflen)
+** count = dvb_ringbuffer_write(rbuf, buffer, buflen);
+** else
+** ...
+**
+** *** read min. 1000, max. <bufsize> bytes ***
+** avail = dvb_ringbuffer_avail(rbuf);
+** if (avail >= 1000)
+** count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize), 0);
+** else
+** ...
+**
+** (2) If there is exactly one reader and one writer, there is no need
+** to lock read or write operations.
+** Two or more readers must be locked against each other.
+** Flushing the buffer counts as a read operation.
+** Two or more writers must be locked against each other.
+*/
+
+/* initialize ring buffer, lock and queue */
+extern void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data, size_t len);
+
+/* test whether buffer is empty */
+extern int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf);
+
+/* return the number of free bytes in the buffer */
+extern ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf);
+
+/* return the number of bytes waiting in the buffer */
+extern ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf);
+
+
+/* read routines & macros */
+/* ---------------------- */
+/* flush buffer */
+extern void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf);
+
+/* flush buffer protected by spinlock and wake-up waiting task(s) */
+extern void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf);
+
+/* peek at byte <offs> in the buffer */
+#define DVB_RINGBUFFER_PEEK(rbuf,offs) \
+ (rbuf)->data[((rbuf)->pread+(offs))%(rbuf)->size]
+
+/* advance read ptr by <num> bytes */
+#define DVB_RINGBUFFER_SKIP(rbuf,num) \
+ (rbuf)->pread=((rbuf)->pread+(num))%(rbuf)->size
+
+/*
+** read <len> bytes from ring buffer into <buf>
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf, u8 *buf,
+ size_t len, int usermem);
+
+
+/* write routines & macros */
+/* ----------------------- */
+/* write single byte to ring buffer */
+#define DVB_RINGBUFFER_WRITE_BYTE(rbuf,byte) \
+ { (rbuf)->data[(rbuf)->pwrite]=(byte); \
+ (rbuf)->pwrite=((rbuf)->pwrite+1)%(rbuf)->size; }
+/*
+** write <len> bytes to ring buffer
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf,
+ size_t len);
+
+
+/**
+ * Write a packet into the ringbuffer.
+ *
+ * <rbuf> Ringbuffer to write to.
+ * <buf> Buffer to write.
+ * <len> Length of buffer (currently limited to 65535 bytes max).
+ * returns Number of bytes written, or -EFAULT, -ENOMEM, -EVINAL.
+ */
+extern ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8* buf,
+ size_t len);
+
+/**
+ * Read from a packet in the ringbuffer. Note: unlike dvb_ringbuffer_read(), this
+ * does NOT update the read pointer in the ringbuffer. You must use
+ * dvb_ringbuffer_pkt_dispose() to mark a packet as no longer required.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ * <offset> Offset into packet to read from.
+ * <buf> Destination buffer for data.
+ * <len> Size of destination buffer.
+ * <usermem> Set to 1 if <buf> is in userspace.
+ * returns Number of bytes read, or -EFAULT.
+ */
+extern ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx,
+ int offset, u8* buf, size_t len, int usermem);
+
+/**
+ * Dispose of a packet in the ring buffer.
+ *
+ * <rbuf> Ring buffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ */
+extern void dvb_ringbuffer_pkt_dispose(struct dvb_ringbuffer *rbuf, size_t idx);
+
+/**
+ * Get the index of the next packet in a ringbuffer.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Previous packet index, or -1 to return the first packet index.
+ * <pktlen> On success, will be updated to contain the length of the packet in bytes.
+ * returns Packet index (if >=0), or -1 if no packets available.
+ */
+extern ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf, size_t idx, size_t* pktlen);
+
+
+#endif /* _DVB_RINGBUFFER_H_ */
diff --git a/v4l/kernel-2.6.19/dvbdev.h b/v4l/kernel-2.6.19/dvbdev.h
new file mode 100644
index 0000000..620e788
--- /dev/null
+++ b/v4l/kernel-2.6.19/dvbdev.h
@@ -0,0 +1,127 @@
+/*
+ * dvbdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBDEV_H_
+#define _DVBDEV_H_
+
+#include <linux/types.h>
+#include <linux/poll.h>
+#include <linux/fs.h>
+#include <linux/list.h>
+#include <linux/smp_lock.h>
+
+#define DVB_MAJOR 212
+
+#define DVB_DEVICE_VIDEO 0
+#define DVB_DEVICE_AUDIO 1
+#define DVB_DEVICE_SEC 2
+#define DVB_DEVICE_FRONTEND 3
+#define DVB_DEVICE_DEMUX 4
+#define DVB_DEVICE_DVR 5
+#define DVB_DEVICE_CA 6
+#define DVB_DEVICE_NET 7
+#define DVB_DEVICE_OSD 8
+
+
+struct dvb_adapter {
+ int num;
+ struct list_head list_head;
+ struct list_head device_list;
+ const char *name;
+ u8 proposed_mac [6];
+ void* priv;
+
+ struct device *device;
+
+ struct module *module;
+};
+
+
+struct dvb_device {
+ struct list_head list_head;
+ struct file_operations *fops;
+ struct dvb_adapter *adapter;
+ int type;
+ u32 id;
+
+ /* in theory, 'users' can vanish now,
+ but I don't want to change too much now... */
+ int readers;
+ int writers;
+ int users;
+
+ /* don't really need those !? -- FIXME: use video_usercopy */
+ int (*kernel_ioctl)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg);
+
+ void *priv;
+};
+
+
+extern int dvb_register_adapter (struct dvb_adapter *adap, const char *name, struct module *module, struct device *device);
+extern int dvb_unregister_adapter (struct dvb_adapter *adap);
+
+extern int dvb_register_device (struct dvb_adapter *adap,
+ struct dvb_device **pdvbdev,
+ const struct dvb_device *template,
+ void *priv,
+ int type);
+
+extern void dvb_unregister_device (struct dvb_device *dvbdev);
+
+extern int dvb_generic_open (struct inode *inode, struct file *file);
+extern int dvb_generic_release (struct inode *inode, struct file *file);
+extern int dvb_generic_ioctl (struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg);
+
+/* we don't mess with video_usercopy() any more,
+we simply define out own dvb_usercopy(), which will hopefully become
+generic_usercopy() someday... */
+
+extern int dvb_usercopy(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg,
+ int (*func)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg));
+
+/** generic DVB attach function. */
+#ifdef CONFIG_DVB_CORE_ATTACH
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ void *__r = NULL; \
+ typeof(&FUNCTION) __a = symbol_request(FUNCTION); \
+ if (__a) { \
+ __r = (void *) __a(ARGS); \
+ if (__r == NULL) \
+ symbol_put(FUNCTION); \
+ } else { \
+ printk(KERN_ERR "DVB: Unable to find symbol "#FUNCTION"()\n"); \
+ } \
+ __r; \
+})
+
+#else
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ FUNCTION(ARGS); \
+})
+
+#endif
+
+#endif /* #ifndef _DVBDEV_H_ */
diff --git a/v4l/kernel-2.6.20/demux.h b/v4l/kernel-2.6.20/demux.h
new file mode 100644
index 0000000..0c1d87c
--- /dev/null
+++ b/v4l/kernel-2.6.20/demux.h
@@ -0,0 +1,278 @@
+/*
+ * demux.h
+ *
+ * Copyright (c) 2002 Convergence GmbH
+ *
+ * based on code:
+ * Copyright (c) 2000 Nokia Research Center
+ * Tampere, FINLAND
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __DEMUX_H
+#define __DEMUX_H
+
+#include <linux/types.h>
+#include <linux/errno.h>
+#include <linux/list.h>
+#include <linux/time.h>
+#include <linux/dvb/dmx.h>
+
+/*--------------------------------------------------------------------------*/
+/* Common definitions */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * DMX_MAX_FILTER_SIZE: Maximum length (in bytes) of a section/PES filter.
+ */
+
+#ifndef DMX_MAX_FILTER_SIZE
+#define DMX_MAX_FILTER_SIZE 18
+#endif
+
+/*
+ * DMX_MAX_SECFEED_SIZE: Maximum length (in bytes) of a private section feed filter.
+ */
+
+#ifndef DMX_MAX_SECTION_SIZE
+#define DMX_MAX_SECTION_SIZE 4096
+#endif
+#ifndef DMX_MAX_SECFEED_SIZE
+#define DMX_MAX_SECFEED_SIZE (DMX_MAX_SECTION_SIZE + 188)
+#endif
+
+
+/*
+ * enum dmx_success: Success codes for the Demux Callback API.
+ */
+
+enum dmx_success {
+ DMX_OK = 0, /* Received Ok */
+ DMX_LENGTH_ERROR, /* Incorrect length */
+ DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */
+ DMX_CRC_ERROR, /* Incorrect CRC */
+ DMX_FRAME_ERROR, /* Frame alignment error */
+ DMX_FIFO_ERROR, /* Receiver FIFO overrun */
+ DMX_MISSED_ERROR /* Receiver missed packet */
+} ;
+
+/*--------------------------------------------------------------------------*/
+/* TS packet reception */
+/*--------------------------------------------------------------------------*/
+
+/* TS filter type for set() */
+
+#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */
+#define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS
+ payload (<=184 bytes per packet) to callback */
+#define TS_DECODER 4 /* send stream to built-in decoder (if present) */
+
+/* PES type for filters which write to built-in decoder */
+/* these should be kept identical to the types in dmx.h */
+
+enum dmx_ts_pes
+{ /* also send packets to decoder (if it exists) */
+ DMX_TS_PES_AUDIO0,
+ DMX_TS_PES_VIDEO0,
+ DMX_TS_PES_TELETEXT0,
+ DMX_TS_PES_SUBTITLE0,
+ DMX_TS_PES_PCR0,
+
+ DMX_TS_PES_AUDIO1,
+ DMX_TS_PES_VIDEO1,
+ DMX_TS_PES_TELETEXT1,
+ DMX_TS_PES_SUBTITLE1,
+ DMX_TS_PES_PCR1,
+
+ DMX_TS_PES_AUDIO2,
+ DMX_TS_PES_VIDEO2,
+ DMX_TS_PES_TELETEXT2,
+ DMX_TS_PES_SUBTITLE2,
+ DMX_TS_PES_PCR2,
+
+ DMX_TS_PES_AUDIO3,
+ DMX_TS_PES_VIDEO3,
+ DMX_TS_PES_TELETEXT3,
+ DMX_TS_PES_SUBTITLE3,
+ DMX_TS_PES_PCR3,
+
+ DMX_TS_PES_OTHER
+};
+
+#define DMX_TS_PES_AUDIO DMX_TS_PES_AUDIO0
+#define DMX_TS_PES_VIDEO DMX_TS_PES_VIDEO0
+#define DMX_TS_PES_TELETEXT DMX_TS_PES_TELETEXT0
+#define DMX_TS_PES_SUBTITLE DMX_TS_PES_SUBTITLE0
+#define DMX_TS_PES_PCR DMX_TS_PES_PCR0
+
+
+struct dmx_ts_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux *parent; /* Back-pointer */
+ void *priv; /* Pointer to private data of the API client */
+ int (*set) (struct dmx_ts_feed *feed,
+ u16 pid,
+ int type,
+ enum dmx_ts_pes pes_type,
+ size_t circular_buffer_size,
+ struct timespec timeout);
+ int (*start_filtering) (struct dmx_ts_feed* feed);
+ int (*stop_filtering) (struct dmx_ts_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Section reception */
+/*--------------------------------------------------------------------------*/
+
+struct dmx_section_filter {
+ u8 filter_value [DMX_MAX_FILTER_SIZE];
+ u8 filter_mask [DMX_MAX_FILTER_SIZE];
+ u8 filter_mode [DMX_MAX_FILTER_SIZE];
+ struct dmx_section_feed* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+};
+
+struct dmx_section_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+
+ int check_crc;
+ u32 crc_val;
+
+ u8 *secbuf;
+ u8 secbuf_base[DMX_MAX_SECFEED_SIZE];
+ u16 secbufp, seclen, tsfeedp;
+
+ int (*set) (struct dmx_section_feed* feed,
+ u16 pid,
+ size_t circular_buffer_size,
+ int check_crc);
+ int (*allocate_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter** filter);
+ int (*release_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter* filter);
+ int (*start_filtering) (struct dmx_section_feed* feed);
+ int (*stop_filtering) (struct dmx_section_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Callback functions */
+/*--------------------------------------------------------------------------*/
+
+typedef int (*dmx_ts_cb) ( const u8 * buffer1,
+ size_t buffer1_length,
+ const u8 * buffer2,
+ size_t buffer2_length,
+ struct dmx_ts_feed* source,
+ enum dmx_success success);
+
+typedef int (*dmx_section_cb) ( const u8 * buffer1,
+ size_t buffer1_len,
+ const u8 * buffer2,
+ size_t buffer2_len,
+ struct dmx_section_filter * source,
+ enum dmx_success success);
+
+/*--------------------------------------------------------------------------*/
+/* DVB Front-End */
+/*--------------------------------------------------------------------------*/
+
+enum dmx_frontend_source {
+ DMX_MEMORY_FE,
+ DMX_FRONTEND_0,
+ DMX_FRONTEND_1,
+ DMX_FRONTEND_2,
+ DMX_FRONTEND_3,
+ DMX_STREAM_0, /* external stream input, e.g. LVDS */
+ DMX_STREAM_1,
+ DMX_STREAM_2,
+ DMX_STREAM_3
+};
+
+struct dmx_frontend {
+ struct list_head connectivity_list; /* List of front-ends that can
+ be connected to a particular
+ demux */
+ enum dmx_frontend_source source;
+};
+
+/*--------------------------------------------------------------------------*/
+/* MPEG-2 TS Demux */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * Flags OR'ed in the capabilities field of struct dmx_demux.
+ */
+
+#define DMX_TS_FILTERING 1
+#define DMX_PES_FILTERING 2
+#define DMX_SECTION_FILTERING 4
+#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */
+#define DMX_CRC_CHECKING 16
+#define DMX_TS_DESCRAMBLING 32
+
+/*
+ * Demux resource type identifier.
+*/
+
+/*
+ * DMX_FE_ENTRY(): Casts elements in the list of registered
+ * front-ends from the generic type struct list_head
+ * to the type * struct dmx_frontend
+ *.
+*/
+
+#define DMX_FE_ENTRY(list) list_entry(list, struct dmx_frontend, connectivity_list)
+
+struct dmx_demux {
+ u32 capabilities; /* Bitfield of capability flags */
+ struct dmx_frontend* frontend; /* Front-end connected to the demux */
+ void* priv; /* Pointer to private data of the API client */
+ int (*open) (struct dmx_demux* demux);
+ int (*close) (struct dmx_demux* demux);
+ int (*write) (struct dmx_demux* demux, const char* buf, size_t count);
+ int (*allocate_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed** feed,
+ dmx_ts_cb callback);
+ int (*release_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed* feed);
+ int (*allocate_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed** feed,
+ dmx_section_cb callback);
+ int (*release_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed* feed);
+ int (*add_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*remove_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ struct list_head* (*get_frontends) (struct dmx_demux* demux);
+ int (*connect_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*disconnect_frontend) (struct dmx_demux* demux);
+
+ int (*get_pes_pids) (struct dmx_demux* demux, u16 *pids);
+
+ int (*get_caps) (struct dmx_demux* demux, struct dmx_caps *caps);
+
+ int (*set_source) (struct dmx_demux* demux, const dmx_source_t *src);
+
+ int (*get_stc) (struct dmx_demux* demux, unsigned int num,
+ u64 *stc, unsigned int *base);
+};
+
+#endif /* #ifndef __DEMUX_H */
diff --git a/v4l/kernel-2.6.20/dmxdev.h b/v4l/kernel-2.6.20/dmxdev.h
new file mode 100644
index 0000000..d2bee9f
--- /dev/null
+++ b/v4l/kernel-2.6.20/dmxdev.h
@@ -0,0 +1,108 @@
+/*
+ * dmxdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DMXDEV_H_
+#define _DMXDEV_H_
+
+#include <linux/types.h>
+#include <linux/spinlock.h>
+#include <linux/kernel.h>
+#include <linux/timer.h>
+#include <linux/wait.h>
+#include <linux/fs.h>
+#include <linux/string.h>
+#include <linux/mutex.h>
+
+#include <linux/dvb/dmx.h>
+
+#include "dvbdev.h"
+#include "demux.h"
+#include "dvb_ringbuffer.h"
+
+enum dmxdev_type {
+ DMXDEV_TYPE_NONE,
+ DMXDEV_TYPE_SEC,
+ DMXDEV_TYPE_PES,
+};
+
+enum dmxdev_state {
+ DMXDEV_STATE_FREE,
+ DMXDEV_STATE_ALLOCATED,
+ DMXDEV_STATE_SET,
+ DMXDEV_STATE_GO,
+ DMXDEV_STATE_DONE,
+ DMXDEV_STATE_TIMEDOUT
+};
+
+struct dmxdev_filter {
+ union {
+ struct dmx_section_filter *sec;
+ } filter;
+
+ union {
+ struct dmx_ts_feed *ts;
+ struct dmx_section_feed *sec;
+ } feed;
+
+ union {
+ struct dmx_sct_filter_params sec;
+ struct dmx_pes_filter_params pes;
+ } params;
+
+ enum dmxdev_type type;
+ enum dmxdev_state state;
+ struct dmxdev *dev;
+ struct dvb_ringbuffer buffer;
+
+ struct mutex mutex;
+
+ /* only for sections */
+ struct timer_list timer;
+ int todo;
+ u8 secheader[3];
+};
+
+
+struct dmxdev {
+ struct dvb_device *dvbdev;
+ struct dvb_device *dvr_dvbdev;
+
+ struct dmxdev_filter *filter;
+ struct dmx_demux *demux;
+
+ int filternum;
+ int capabilities;
+#define DMXDEV_CAP_DUPLEX 1
+ struct dmx_frontend *dvr_orig_fe;
+
+ struct dvb_ringbuffer dvr_buffer;
+#define DVR_BUFFER_SIZE (10*188*1024)
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+
+int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *);
+void dvb_dmxdev_release(struct dmxdev *dmxdev);
+
+#endif /* _DMXDEV_H_ */
diff --git a/v4l/kernel-2.6.20/dvb-pll.h b/v4l/kernel-2.6.20/dvb-pll.h
new file mode 100644
index 0000000..681186a
--- /dev/null
+++ b/v4l/kernel-2.6.20/dvb-pll.h
@@ -0,0 +1,67 @@
+/*
+ * descriptions + helper functions for simple dvb plls.
+ */
+
+#ifndef __DVB_PLL_H__
+#define __DVB_PLL_H__
+
+#include <linux/i2c.h>
+#include "dvb_frontend.h"
+
+struct dvb_pll_desc {
+ char *name;
+ u32 min;
+ u32 max;
+ void (*setbw)(u8 *buf, u32 freq, int bandwidth);
+ int count;
+ struct {
+ u32 limit;
+ u32 offset;
+ u32 stepsize;
+ u8 config;
+ u8 cb;
+ } entries[12];
+};
+
+extern struct dvb_pll_desc dvb_pll_thomson_dtt7579;
+extern struct dvb_pll_desc dvb_pll_thomson_dtt759x;
+extern struct dvb_pll_desc dvb_pll_thomson_dtt7610;
+extern struct dvb_pll_desc dvb_pll_lg_z201;
+extern struct dvb_pll_desc dvb_pll_microtune_4042;
+extern struct dvb_pll_desc dvb_pll_thomson_dtt761x;
+extern struct dvb_pll_desc dvb_pll_unknown_1;
+
+extern struct dvb_pll_desc dvb_pll_tua6010xs;
+extern struct dvb_pll_desc dvb_pll_env57h1xd5;
+extern struct dvb_pll_desc dvb_pll_tua6034;
+extern struct dvb_pll_desc dvb_pll_lg_tdvs_h06xf;
+extern struct dvb_pll_desc dvb_pll_tda665x;
+extern struct dvb_pll_desc dvb_pll_fmd1216me;
+extern struct dvb_pll_desc dvb_pll_tded4;
+
+extern struct dvb_pll_desc dvb_pll_tuv1236d;
+extern struct dvb_pll_desc dvb_pll_tdhu2;
+extern struct dvb_pll_desc dvb_pll_samsung_tbmv;
+extern struct dvb_pll_desc dvb_pll_philips_sd1878_tda8261;
+extern struct dvb_pll_desc dvb_pll_philips_td1316;
+
+extern struct dvb_pll_desc dvb_pll_thomson_fe6600;
+
+extern int dvb_pll_configure(struct dvb_pll_desc *desc, u8 *buf,
+ u32 freq, int bandwidth);
+
+/**
+ * Attach a dvb-pll to the supplied frontend structure.
+ *
+ * @param fe Frontend to attach to.
+ * @param pll_addr i2c address of the PLL (if used).
+ * @param i2c i2c adapter to use (set to NULL if not used).
+ * @param desc dvb_pll_desc to use.
+ * @return Frontend pointer on success, NULL on failure
+ */
+extern struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ struct dvb_pll_desc *desc);
+
+#endif
diff --git a/v4l/kernel-2.6.20/dvb-usb-ids.h b/v4l/kernel-2.6.20/dvb-usb-ids.h
new file mode 100644
index 0000000..299382d
--- /dev/null
+++ b/v4l/kernel-2.6.20/dvb-usb-ids.h
@@ -0,0 +1,139 @@
+/* dvb-usb-ids.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de) see
+ * dvb-usb-init.c for copyright information.
+ *
+ * a header file containing define's for the USB device supported by the
+ * various drivers.
+ */
+#ifndef _DVB_USB_IDS_H_
+#define _DVB_USB_IDS_H_
+
+/* Vendor IDs */
+#define USB_VID_ADSTECH 0x06e1
+#define USB_VID_ANCHOR 0x0547
+#define USB_VID_AVERMEDIA 0x07ca
+#define USB_VID_COMPRO 0x185b
+#define USB_VID_COMPRO_UNK 0x145f
+#define USB_VID_CYPRESS 0x04b4
+#define USB_VID_DIBCOM 0x10b8
+#define USB_VID_DVICO 0x0fe9
+#define USB_VID_EMPIA 0xeb1a
+#define USB_VID_GENPIX 0x09c0
+#define USB_VID_GRANDTEC 0x5032
+#define USB_VID_HANFTEK 0x15f4
+#define USB_VID_HAUPPAUGE 0x2040
+#define USB_VID_HYPER_PALTEK 0x1025
+#define USB_VID_KWORLD 0xeb2a
+#define USB_VID_KYE 0x0458
+#define USB_VID_LEADTEK 0x0413
+#define USB_VID_LITEON 0x04ca
+#define USB_VID_MEDION 0x1660
+#define USB_VID_PINNACLE 0x2304
+#define USB_VID_VISIONPLUS 0x13d3
+#define USB_VID_TWINHAN 0x1822
+#define USB_VID_ULTIMA_ELECTRONIC 0x05d8
+#define USB_VID_UNIWILL 0x1584
+#define USB_VID_WIDEVIEW 0x14aa
+
+/* Product IDs */
+#define USB_PID_ADSTECH_USB2_COLD 0xa333
+#define USB_PID_ADSTECH_USB2_WARM 0xa334
+#define USB_PID_AVERMEDIA_DVBT_USB_COLD 0x0001
+#define USB_PID_AVERMEDIA_DVBT_USB_WARM 0x0002
+#define USB_PID_AVERMEDIA_DVBT_USB2_COLD 0xa800
+#define USB_PID_AVERMEDIA_DVBT_USB2_WARM 0xa801
+#define USB_PID_COMPRO_DVBU2000_COLD 0xd000
+#define USB_PID_COMPRO_DVBU2000_WARM 0xd001
+#define USB_PID_COMPRO_DVBU2000_UNK_COLD 0x010c
+#define USB_PID_COMPRO_DVBU2000_UNK_WARM 0x010d
+#define USB_PID_COMPRO_VIDEOMATE_U500 0x1e78
+#define USB_PID_DIBCOM_HOOK_DEFAULT 0x0064
+#define USB_PID_DIBCOM_HOOK_DEFAULT_REENUM 0x0065
+#define USB_PID_DIBCOM_MOD3000_COLD 0x0bb8
+#define USB_PID_DIBCOM_MOD3000_WARM 0x0bb9
+#define USB_PID_DIBCOM_MOD3001_COLD 0x0bc6
+#define USB_PID_DIBCOM_MOD3001_WARM 0x0bc7
+#define USB_PID_DIBCOM_STK7700P 0x1e14
+#define USB_PID_DIBCOM_STK7700P_PC 0x1e78
+#define USB_PID_DIBCOM_ANCHOR_2135_COLD 0x2131
+#define USB_PID_UNIWILL_STK7700P 0x6003
+#define USB_PID_GRANDTEC_DVBT_USB_COLD 0x0fa0
+#define USB_PID_GRANDTEC_DVBT_USB_WARM 0x0fa1
+#define USB_PID_KWORLD_VSTREAM_COLD 0x17de
+#define USB_PID_KWORLD_VSTREAM_WARM 0x17df
+#define USB_PID_TWINHAN_VP7041_COLD 0x3201
+#define USB_PID_TWINHAN_VP7041_WARM 0x3202
+#define USB_PID_TWINHAN_VP7020_COLD 0x3203
+#define USB_PID_TWINHAN_VP7020_WARM 0x3204
+#define USB_PID_TWINHAN_VP7045_COLD 0x3205
+#define USB_PID_TWINHAN_VP7045_WARM 0x3206
+#define USB_PID_TWINHAN_VP7021_COLD 0x3207
+#define USB_PID_TWINHAN_VP7021_WARM 0x3208
+#define USB_PID_DNTV_TINYUSB2_COLD 0x3223
+#define USB_PID_DNTV_TINYUSB2_WARM 0x3224
+#define USB_PID_ULTIMA_TVBOX_COLD 0x8105
+#define USB_PID_ULTIMA_TVBOX_WARM 0x8106
+#define USB_PID_ULTIMA_TVBOX_AN2235_COLD 0x8107
+#define USB_PID_ULTIMA_TVBOX_AN2235_WARM 0x8108
+#define USB_PID_ULTIMA_TVBOX_ANCHOR_COLD 0x2235
+#define USB_PID_ULTIMA_TVBOX_USB2_COLD 0x8109
+#define USB_PID_ULTIMA_TVBOX_USB2_WARM 0x810a
+#define USB_PID_ARTEC_T14_COLD 0x810b
+#define USB_PID_ARTEC_T14_WARM 0x810c
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_COLD 0x8613
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_WARM 0x1002
+#define USB_PID_UNK_HYPER_PALTEK_COLD 0x005e
+#define USB_PID_UNK_HYPER_PALTEK_WARM 0x005f
+#define USB_PID_HANFTEK_UMT_010_COLD 0x0001
+#define USB_PID_HANFTEK_UMT_010_WARM 0x0015
+#define USB_PID_DTT200U_COLD 0x0201
+#define USB_PID_DTT200U_WARM 0x0301
+#define USB_PID_WT220U_ZAP250_COLD 0x0220
+#define USB_PID_WT220U_COLD 0x0222
+#define USB_PID_WT220U_WARM 0x0221
+#define USB_PID_WT220U_FC_COLD 0x0225
+#define USB_PID_WT220U_FC_WARM 0x0226
+#define USB_PID_WT220U_ZL0353_COLD 0x022a
+#define USB_PID_WT220U_ZL0353_WARM 0x022b
+#define USB_PID_WINTV_NOVA_T_USB2_COLD 0x9300
+#define USB_PID_WINTV_NOVA_T_USB2_WARM 0x9301
+#define USB_PID_HAUPPAUGE_NOVA_T_500 0x9941
+#define USB_PID_HAUPPAUGE_NOVA_T_500_2 0x9950
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK 0x7050
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK_2 0x7060
+#define USB_PID_AVERMEDIA_VOLAR 0xa807
+#define USB_PID_AVERMEDIA_VOLAR_2 0xb808
+#define USB_PID_NEBULA_DIGITV 0x0201
+#define USB_PID_DVICO_BLUEBIRD_LGDT 0xd820
+#define USB_PID_DVICO_BLUEBIRD_LG064F_COLD 0xd500
+#define USB_PID_DVICO_BLUEBIRD_LG064F_WARM 0xd501
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_COLD 0xdb00
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_WARM 0xdb01
+#define USB_PID_DVICO_BLUEBIRD_TH7579_COLD 0xdb10
+#define USB_PID_DVICO_BLUEBIRD_TH7579_WARM 0xdb11
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_COLD 0xdb50
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_WARM 0xdb51
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_COLD 0xdb58
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_WARM 0xdb59
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_COLD 0xdb54
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_WARM 0xdb55
+#define USB_PID_MEDION_MD95700 0x0932
+#define USB_PID_KYE_DVB_T_COLD 0x701e
+#define USB_PID_KYE_DVB_T_WARM 0x701f
+#define USB_PID_PCTV_200E 0x020e
+#define USB_PID_PCTV_400E 0x020f
+#define USB_PID_LITEON_DVB_T_COLD 0xf000
+#define USB_PID_LITEON_DVB_T_WARM 0xf001
+#define USB_PID_DIGIVOX_MINI_SL_COLD 0xe360
+#define USB_PID_DIGIVOX_MINI_SL_WARM 0xe361
+#define USB_PID_GRANDTEC_DVBT_USB2_COLD 0x0bc6
+#define USB_PID_GRANDTEC_DVBT_USB2_WARM 0x0bc7
+#define USB_PID_WINFAST_DTV_DONGLE_COLD 0x6025
+#define USB_PID_WINFAST_DTV_DONGLE_WARM 0x6026
+#define USB_PID_WINFAST_DTV_DONGLE_STK7700P 0x6f00
+#define USB_PID_GENPIX_8PSK_COLD 0x0200
+#define USB_PID_GENPIX_8PSK_WARM 0x0201
+
+
+#endif
diff --git a/v4l/kernel-2.6.20/dvb-usb.h b/v4l/kernel-2.6.20/dvb-usb.h
new file mode 100644
index 0000000..0d72173
--- /dev/null
+++ b/v4l/kernel-2.6.20/dvb-usb.h
@@ -0,0 +1,408 @@
+/* dvb-usb.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * the headerfile, all dvb-usb-drivers have to include.
+ *
+ * TODO: clean-up the structures for unused fields and update the comments
+ */
+#ifndef __DVB_USB_H__
+#define __DVB_USB_H__
+
+#include <linux/input.h>
+#include <linux/usb.h>
+#include <linux/firmware.h>
+#include <linux/mutex.h>
+
+#include "dvb_frontend.h"
+#include "dvb_demux.h"
+#include "dvb_net.h"
+#include "dmxdev.h"
+
+#include "dvb-pll.h"
+
+#include "dvb-usb-ids.h"
+
+/* debug */
+#ifdef CONFIG_DVB_USB_DEBUG
+#define dprintk(var,level,args...) \
+ do { if ((var & level)) { printk(args); } } while (0)
+
+#define debug_dump(b,l,func) {\
+ int loop_; \
+ for (loop_ = 0; loop_ < l; loop_++) func("%02x ", b[loop_]); \
+ func("\n");\
+}
+#define DVB_USB_DEBUG_STATUS
+#else
+#define dprintk(args...)
+#define debug_dump(b,l,func)
+
+#define DVB_USB_DEBUG_STATUS " (debugging is not enabled)"
+
+#endif
+
+/* generic log methods - taken from usb.h */
+#ifndef DVB_USB_LOG_PREFIX
+ #define DVB_USB_LOG_PREFIX "dvb-usb (please define a log prefix)"
+#endif
+
+#undef err
+#define err(format, arg...) printk(KERN_ERR DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef info
+#define info(format, arg...) printk(KERN_INFO DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef warn
+#define warn(format, arg...) printk(KERN_WARNING DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+
+/**
+ * struct dvb_usb_device_description - name and its according USB IDs
+ * @name: real name of the box, regardless which DVB USB device class is in use
+ * @cold_ids: array of struct usb_device_id which describe the device in
+ * pre-firmware state
+ * @warm_ids: array of struct usb_device_id which describe the device in
+ * post-firmware state
+ *
+ * Each DVB USB device class can have one or more actual devices, this struct
+ * assigns a name to it.
+ */
+struct dvb_usb_device_description {
+ const char *name;
+
+#define DVB_USB_ID_MAX_NUM 15
+ struct usb_device_id *cold_ids[DVB_USB_ID_MAX_NUM];
+ struct usb_device_id *warm_ids[DVB_USB_ID_MAX_NUM];
+};
+
+/**
+ * struct dvb_usb_rc_key - a remote control key and its input-event
+ * @custom: the vendor/custom part of the key
+ * @data: the actual key part
+ * @event: the input event assigned to key identified by custom and data
+ */
+struct dvb_usb_rc_key {
+ u8 custom,data;
+ u32 event;
+};
+
+struct dvb_usb_device;
+struct dvb_usb_adapter;
+struct usb_data_stream;
+
+/**
+ * Properties of USB streaming - TODO this structure should be somewhere else
+ * describes the kind of USB transfer used for data-streaming.
+ * (BULK or ISOC)
+ */
+struct usb_data_stream_properties {
+#define USB_BULK 1
+#define USB_ISOC 2
+ int type;
+ int count;
+ int endpoint;
+
+ union {
+ struct {
+ int buffersize; /* per URB */
+ } bulk;
+ struct {
+ int framesperurb;
+ int framesize;
+ int interval;
+ } isoc;
+ } u;
+};
+
+/**
+ * struct dvb_usb_adapter_properties - properties of a dvb-usb-adapter.
+ * A DVB-USB-Adapter is basically a dvb_adapter which is present on a USB-device.
+ * @caps: capabilities of the DVB USB device.
+ * @pid_filter_count: number of PID filter position in the optional hardware
+ * PID-filter.
+ * @streaming_crtl: called to start and stop the MPEG2-TS streaming of the
+ * device (not URB submitting/killing).
+ * @pid_filter_ctrl: called to en/disable the PID filter, if any.
+ * @pid_filter: called to set/unset a PID for filtering.
+ * @frontend_attach: called to attach the possible frontends (fill fe-field
+ * of struct dvb_usb_device).
+ * @tuner_attach: called to attach the correct tuner and to fill pll_addr,
+ * pll_desc and pll_init_buf of struct dvb_usb_device).
+ * @stream: configuration of the USB streaming
+ */
+struct dvb_usb_adapter_properties {
+#define DVB_USB_ADAP_HAS_PID_FILTER 0x01
+#define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
+#define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
+#define DVB_USB_ADAP_RECEIVES_204_BYTE_TS 0x08
+ int caps;
+ int pid_filter_count;
+
+ int (*streaming_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
+
+ int (*frontend_attach) (struct dvb_usb_adapter *);
+ int (*tuner_attach) (struct dvb_usb_adapter *);
+
+ struct usb_data_stream_properties stream;
+
+ int size_of_priv;
+};
+
+/**
+ * struct dvb_usb_device_properties - properties of a dvb-usb-device
+ * @usb_ctrl: which USB device-side controller is in use. Needed for firmware
+ * download.
+ * @firmware: name of the firmware file.
+ * @download_firmware: called to download the firmware when the usb_ctrl is
+ * DEVICE_SPECIFIC.
+ * @no_reconnect: device doesn't do a reconnect after downloading the firmware,
+ * so do the warm initialization right after it
+ *
+ * @size_of_priv: how many bytes shall be allocated for the private field
+ * of struct dvb_usb_device.
+ *
+ * @power_ctrl: called to enable/disable power of the device.
+ * @read_mac_address: called to read the MAC address of the device.
+ * @identify_state: called to determine the state (cold or warm), when it
+ * is not distinguishable by the USB IDs.
+ *
+ * @rc_key_map: a hard-wired array of struct dvb_usb_rc_key (NULL to disable
+ * remote control handling).
+ * @rc_key_map_size: number of items in @rc_key_map.
+ * @rc_query: called to query an event event.
+ * @rc_interval: time in ms between two queries.
+ *
+ * @i2c_algo: i2c_algorithm if the device has I2CoverUSB.
+ *
+ * @generic_bulk_ctrl_endpoint: most of the DVB USB devices have a generic
+ * endpoint which received control messages with bulk transfers. When this
+ * is non-zero, one can use dvb_usb_generic_rw and dvb_usb_generic_write-
+ * helper functions.
+ *
+ * @num_device_descs: number of struct dvb_usb_device_description in @devices
+ * @devices: array of struct dvb_usb_device_description compatibles with these
+ * properties.
+ */
+#define MAX_NO_OF_ADAPTER_PER_DEVICE 2
+struct dvb_usb_device_properties {
+
+#define DVB_USB_IS_AN_I2C_ADAPTER 0x01
+ int caps;
+
+#define DEVICE_SPECIFIC 0
+#define CYPRESS_AN2135 1
+#define CYPRESS_AN2235 2
+#define CYPRESS_FX2 3
+ int usb_ctrl;
+ int (*download_firmware) (struct usb_device *, const struct firmware *);
+ const char firmware[FIRMWARE_NAME_MAX];
+ int no_reconnect;
+
+ int size_of_priv;
+
+ int num_adapters;
+ struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ int (*power_ctrl) (struct dvb_usb_device *, int);
+ int (*read_mac_address) (struct dvb_usb_device *, u8 []);
+ int (*identify_state) (struct usb_device *, struct dvb_usb_device_properties *,
+ struct dvb_usb_device_description **, int *);
+
+/* remote control properties */
+#define REMOTE_NO_KEY_PRESSED 0x00
+#define REMOTE_KEY_PRESSED 0x01
+#define REMOTE_KEY_REPEAT 0x02
+ struct dvb_usb_rc_key *rc_key_map;
+ int rc_key_map_size;
+ int (*rc_query) (struct dvb_usb_device *, u32 *, int *);
+ int rc_interval;
+
+ struct i2c_algorithm *i2c_algo;
+
+ int generic_bulk_ctrl_endpoint;
+
+ int num_device_descs;
+ struct dvb_usb_device_description devices[9];
+};
+
+/**
+ * struct usb_data_stream - generic object of an USB stream
+ * @buf_num: number of buffer allocated.
+ * @buf_size: size of each buffer in buf_list.
+ * @buf_list: array containing all allocate buffers for streaming.
+ * @dma_addr: list of dma_addr_t for each buffer in buf_list.
+ *
+ * @urbs_initialized: number of URBs initialized.
+ * @urbs_submitted: number of URBs submitted.
+ */
+#define MAX_NO_URBS_FOR_DATA_STREAM 10
+struct usb_data_stream {
+ struct usb_device *udev;
+ struct usb_data_stream_properties props;
+
+#define USB_STATE_INIT 0x00
+#define USB_STATE_URB_BUF 0x01
+ int state;
+
+ void (*complete) (struct usb_data_stream *, u8 *, size_t);
+
+ struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ int buf_num;
+ unsigned long buf_size;
+ u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
+
+ int urbs_initialized;
+ int urbs_submitted;
+
+ void *user_priv;
+};
+
+/**
+ * struct dvb_usb_adapter - a DVB adapter on a USB device
+ * @id: index of this adapter (starting with 0).
+ *
+ * @feedcount: number of reqested feeds (used for streaming-activation)
+ * @pid_filtering: is hardware pid_filtering used or not.
+ *
+ * @pll_addr: I2C address of the tuner for programming
+ * @pll_init: array containing the initialization buffer
+ * @pll_desc: pointer to the appropriate struct dvb_pll_desc
+ * @tuner_pass_ctrl: called to (de)activate tuner passthru of the demod or the board
+ *
+ * @dvb_adap: device's dvb_adapter.
+ * @dmxdev: device's dmxdev.
+ * @demux: device's software demuxer.
+ * @dvb_net: device's dvb_net interfaces.
+ * @dvb_frontend: device's frontend.
+ * @max_feed_count: how many feeds can be handled simultaneously by this
+ * device
+ *
+ * @fe_init: rerouted frontend-init (wakeup) function.
+ * @fe_sleep: rerouted frontend-sleep function.
+ *
+ * @stream: the usb data stream.
+ */
+struct dvb_usb_adapter {
+ struct dvb_usb_device *dev;
+ struct dvb_usb_adapter_properties props;
+
+#define DVB_USB_ADAP_STATE_INIT 0x000
+#define DVB_USB_ADAP_STATE_DVB 0x001
+ int state;
+
+ u8 id;
+
+ int feedcount;
+ int pid_filtering;
+
+ /* tuner programming information */
+ u8 pll_addr;
+ u8 pll_init[4];
+ struct dvb_pll_desc *pll_desc;
+ int (*tuner_pass_ctrl) (struct dvb_frontend *, int, u8);
+
+ /* dvb */
+ struct dvb_adapter dvb_adap;
+ struct dmxdev dmxdev;
+ struct dvb_demux demux;
+ struct dvb_net dvb_net;
+ struct dvb_frontend *fe;
+ int max_feed_count;
+
+ int (*fe_init) (struct dvb_frontend *);
+ int (*fe_sleep) (struct dvb_frontend *);
+
+ struct usb_data_stream stream;
+
+ void *priv;
+};
+
+/**
+ * struct dvb_usb_device - object of a DVB USB device
+ * @props: copy of the struct dvb_usb_properties this device belongs to.
+ * @desc: pointer to the device's struct dvb_usb_device_description.
+ * @state: initialization and runtime state of the device.
+ *
+ * @powered: indicated whether the device is power or not.
+ * Powered is in/decremented for each call to modify the state.
+ * @udev: pointer to the device's struct usb_device.
+ *
+ * @usb_mutex: semaphore of USB control messages (reading needs two messages)
+ * @i2c_mutex: semaphore for i2c-transfers
+ *
+ * @i2c_adap: device's i2c_adapter if it uses I2CoverUSB
+ *
+ * @rc_input_dev: input device for the remote control.
+ * @rc_query_work: struct work_struct frequent rc queries
+ * @last_event: last triggered event
+ * @last_state: last state (no, pressed, repeat)
+ * @owner: owner of the dvb_adapter
+ * @priv: private data of the actual driver (allocate by dvb-usb, size defined
+ * in size_of_priv of dvb_usb_properties).
+ */
+struct dvb_usb_device {
+ struct dvb_usb_device_properties props;
+ struct dvb_usb_device_description *desc;
+
+ struct usb_device *udev;
+
+#define DVB_USB_STATE_INIT 0x000
+#define DVB_USB_STATE_I2C 0x001
+#define DVB_USB_STATE_DVB 0x002
+#define DVB_USB_STATE_REMOTE 0x004
+ int state;
+
+ int powered;
+
+ /* locking */
+ struct mutex usb_mutex;
+
+ /* i2c */
+ struct mutex i2c_mutex;
+ struct i2c_adapter i2c_adap;
+
+ int num_adapters_initialized;
+ struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ /* remote control */
+ struct input_dev *rc_input_dev;
+ char rc_phys[64];
+ struct delayed_work rc_query_work;
+ u32 last_event;
+ int last_state;
+
+ struct module *owner;
+
+ void *priv;
+};
+
+extern int dvb_usb_device_init(struct usb_interface *, struct dvb_usb_device_properties *, struct module *, struct dvb_usb_device **);
+extern void dvb_usb_device_exit(struct usb_interface *);
+
+/* the generic read/write method for device control */
+extern int dvb_usb_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16,int);
+extern int dvb_usb_generic_write(struct dvb_usb_device *, u8 *, u16);
+
+/* commonly used remote control parsing */
+extern int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *, u8[], u32 *, int *);
+
+/* commonly used pll init and set functions */
+extern int dvb_usb_tuner_init_i2c(struct dvb_frontend *);
+extern int dvb_usb_tuner_calc_regs(struct dvb_frontend *, struct dvb_frontend_parameters *, u8 *buf, int buf_len);
+extern int dvb_usb_tuner_set_params_i2c(struct dvb_frontend *, struct dvb_frontend_parameters *);
+
+/* commonly used firmware download types and function */
+struct hexline {
+ u8 len;
+ u32 addr;
+ u8 type;
+ u8 data[255];
+ u8 chk;
+};
+extern int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type);
+extern int dvb_usb_get_hexline(const struct firmware *fw, struct hexline *hx, int *pos);
+
+
+#endif
diff --git a/v4l/kernel-2.6.20/dvb_demux.h b/v4l/kernel-2.6.20/dvb_demux.h
new file mode 100644
index 0000000..2c5f915
--- /dev/null
+++ b/v4l/kernel-2.6.20/dvb_demux.h
@@ -0,0 +1,140 @@
+/*
+ * dvb_demux.h: DVB kernel demux API
+ *
+ * Copyright (C) 2000-2001 Marcus Metzler & Ralph Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_DEMUX_H_
+#define _DVB_DEMUX_H_
+
+#include <linux/time.h>
+#include <linux/timer.h>
+#include <linux/spinlock.h>
+#include <linux/mutex.h>
+
+#include "demux.h"
+
+#define DMX_TYPE_TS 0
+#define DMX_TYPE_SEC 1
+#define DMX_TYPE_PES 2
+
+#define DMX_STATE_FREE 0
+#define DMX_STATE_ALLOCATED 1
+#define DMX_STATE_SET 2
+#define DMX_STATE_READY 3
+#define DMX_STATE_GO 4
+
+#define DVB_DEMUX_MASK_MAX 18
+
+struct dvb_demux_filter {
+ struct dmx_section_filter filter;
+ u8 maskandmode[DMX_MAX_FILTER_SIZE];
+ u8 maskandnotmode[DMX_MAX_FILTER_SIZE];
+ int doneq;
+
+ struct dvb_demux_filter *next;
+ struct dvb_demux_feed *feed;
+ int index;
+ int state;
+ int type;
+
+ u16 hw_handle;
+ struct timer_list timer;
+};
+
+#define DMX_FEED_ENTRY(pos) list_entry(pos, struct dvb_demux_feed, list_head)
+
+struct dvb_demux_feed {
+ union {
+ struct dmx_ts_feed ts;
+ struct dmx_section_feed sec;
+ } feed;
+
+ union {
+ dmx_ts_cb ts;
+ dmx_section_cb sec;
+ } cb;
+
+ struct dvb_demux *demux;
+ void *priv;
+ int type;
+ int state;
+ u16 pid;
+ u8 *buffer;
+ int buffer_size;
+
+ struct timespec timeout;
+ struct dvb_demux_filter *filter;
+
+ int ts_type;
+ enum dmx_ts_pes pes_type;
+
+ int cc;
+ int pusi_seen; /* prevents feeding of garbage from previous section */
+
+ u16 peslen;
+
+ struct list_head list_head;
+ unsigned int index; /* a unique index for each feed (can be used as hardware pid filter index) */
+};
+
+struct dvb_demux {
+ struct dmx_demux dmx;
+ void *priv;
+ int filternum;
+ int feednum;
+ int (*start_feed)(struct dvb_demux_feed *feed);
+ int (*stop_feed)(struct dvb_demux_feed *feed);
+ int (*write_to_decoder)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ u32 (*check_crc32)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ void (*memcopy)(struct dvb_demux_feed *feed, u8 *dst,
+ const u8 *src, size_t len);
+
+ int users;
+#define MAX_DVB_DEMUX_USERS 10
+ struct dvb_demux_filter *filter;
+ struct dvb_demux_feed *feed;
+
+ struct list_head frontend_list;
+
+ struct dvb_demux_feed *pesfilter[DMX_TS_PES_OTHER];
+ u16 pids[DMX_TS_PES_OTHER];
+ int playing;
+ int recording;
+
+#define DMX_MAX_PID 0x2000
+ struct list_head feed_list;
+ u8 tsbuf[204];
+ int tsbufp;
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+int dvb_dmx_init(struct dvb_demux *dvbdemux);
+void dvb_dmx_release(struct dvb_demux *dvbdemux);
+void dvb_dmx_swfilter_packets(struct dvb_demux *dvbdmx, const u8 *buf,
+ size_t count);
+void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count);
+void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf,
+ size_t count);
+
+#endif /* _DVB_DEMUX_H_ */
diff --git a/v4l/kernel-2.6.20/dvb_frontend.h b/v4l/kernel-2.6.20/dvb_frontend.h
new file mode 100644
index 0000000..f233d78
--- /dev/null
+++ b/v4l/kernel-2.6.20/dvb_frontend.h
@@ -0,0 +1,169 @@
+/*
+ * dvb_frontend.h
+ *
+ * Copyright (C) 2001 convergence integrated media GmbH
+ * Copyright (C) 2004 convergence GmbH
+ *
+ * Written by Ralph Metzler
+ * Overhauled by Holger Waechtler
+ * Kernel I2C stuff by Michael Hunold <hunold@convergence.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_FRONTEND_H_
+#define _DVB_FRONTEND_H_
+
+#include <linux/types.h>
+#include <linux/sched.h>
+#include <linux/ioctl.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/delay.h>
+
+#include <linux/dvb/frontend.h>
+
+#include "dvbdev.h"
+
+struct dvb_frontend_tune_settings {
+ int min_delay_ms;
+ int step_size;
+ int max_drift;
+ struct dvb_frontend_parameters parameters;
+};
+
+struct dvb_frontend;
+
+struct dvb_tuner_info {
+ char name[128];
+
+ u32 frequency_min;
+ u32 frequency_max;
+ u32 frequency_step;
+
+ u32 bandwidth_min;
+ u32 bandwidth_max;
+ u32 bandwidth_step;
+};
+
+struct dvb_tuner_ops {
+
+ struct dvb_tuner_info info;
+
+ int (*release)(struct dvb_frontend *fe);
+ int (*init)(struct dvb_frontend *fe);
+ int (*sleep)(struct dvb_frontend *fe);
+
+ /** This is for simple PLLs - set all parameters in one go. */
+ int (*set_params)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
+
+ /** This is support for demods like the mt352 - fills out the supplied buffer with what to write. */
+ int (*calc_regs)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p, u8 *buf, int buf_len);
+
+ int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency);
+ int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth);
+
+#define TUNER_STATUS_LOCKED 1
+ int (*get_status)(struct dvb_frontend *fe, u32 *status);
+
+ /** These are provided seperately from set_params in order to facilitate silicon
+ * tuners which require sophisticated tuning loops, controlling each parameter seperately. */
+ int (*set_frequency)(struct dvb_frontend *fe, u32 frequency);
+ int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
+};
+
+struct dvb_frontend_ops {
+
+ struct dvb_frontend_info info;
+
+ void (*release)(struct dvb_frontend* fe);
+ void (*release_sec)(struct dvb_frontend* fe);
+
+ int (*init)(struct dvb_frontend* fe);
+ int (*sleep)(struct dvb_frontend* fe);
+
+ int (*write)(struct dvb_frontend* fe, u8* buf, int len);
+
+ /* if this is set, it overrides the default swzigzag */
+ int (*tune)(struct dvb_frontend* fe,
+ struct dvb_frontend_parameters* params,
+ unsigned int mode_flags,
+ int *delay,
+ fe_status_t *status);
+ /* get frontend tuning algorithm from the module */
+ int (*get_frontend_algo)(struct dvb_frontend *fe);
+
+ /* these two are only used for the swzigzag code */
+ int (*set_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+ int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings);
+
+ int (*get_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+
+ int (*read_status)(struct dvb_frontend* fe, fe_status_t* status);
+ int (*read_ber)(struct dvb_frontend* fe, u32* ber);
+ int (*read_signal_strength)(struct dvb_frontend* fe, u16* strength);
+ int (*read_snr)(struct dvb_frontend* fe, u16* snr);
+ int (*read_ucblocks)(struct dvb_frontend* fe, u32* ucblocks);
+
+ int (*diseqc_reset_overload)(struct dvb_frontend* fe);
+ int (*diseqc_send_master_cmd)(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd);
+ int (*diseqc_recv_slave_reply)(struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply);
+ int (*diseqc_send_burst)(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd);
+ int (*set_tone)(struct dvb_frontend* fe, fe_sec_tone_mode_t tone);
+ int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
+ int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg);
+ int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
+ int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
+ int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);
+
+ struct dvb_tuner_ops tuner_ops;
+};
+
+#define MAX_EVENT 8
+
+struct dvb_fe_events {
+ struct dvb_frontend_event events[MAX_EVENT];
+ int eventw;
+ int eventr;
+ int overflow;
+ wait_queue_head_t wait_queue;
+ struct semaphore sem;
+};
+
+struct dvb_frontend {
+ struct dvb_frontend_ops ops;
+ struct dvb_adapter *dvb;
+ void* demodulator_priv;
+ void* tuner_priv;
+ void* frontend_priv;
+ void* sec_priv;
+};
+
+extern int dvb_register_frontend(struct dvb_adapter* dvb,
+ struct dvb_frontend* fe);
+
+extern int dvb_unregister_frontend(struct dvb_frontend* fe);
+
+extern void dvb_frontend_detach(struct dvb_frontend* fe);
+
+extern void dvb_frontend_reinitialise(struct dvb_frontend *fe);
+
+extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec);
+extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime);
+
+#endif
diff --git a/v4l/kernel-2.6.20/dvb_net.h b/v4l/kernel-2.6.20/dvb_net.h
new file mode 100644
index 0000000..f14e4ca
--- /dev/null
+++ b/v4l/kernel-2.6.20/dvb_net.h
@@ -0,0 +1,46 @@
+/*
+ * dvb_net.h
+ *
+ * Copyright (C) 2001 Ralph Metzler for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_NET_H_
+#define _DVB_NET_H_
+
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/inetdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/skbuff.h>
+
+#include "dvbdev.h"
+
+#define DVB_NET_DEVICES_MAX 10
+
+struct dvb_net {
+ struct dvb_device *dvbdev;
+ struct net_device *device[DVB_NET_DEVICES_MAX];
+ int state[DVB_NET_DEVICES_MAX];
+ struct dmx_demux *demux;
+};
+
+
+void dvb_net_release(struct dvb_net *);
+int dvb_net_init(struct dvb_adapter *, struct dvb_net *, struct dmx_demux *);
+
+#endif
diff --git a/v4l/kernel-2.6.20/dvb_ringbuffer.h b/v4l/kernel-2.6.20/dvb_ringbuffer.h
new file mode 100644
index 0000000..d97714e
--- /dev/null
+++ b/v4l/kernel-2.6.20/dvb_ringbuffer.h
@@ -0,0 +1,174 @@
+/*
+ *
+ * dvb_ringbuffer.h: ring buffer implementation for the dvb driver
+ *
+ * Copyright (C) 2003 Oliver Endriss
+ * Copyright (C) 2004 Andrew de Quincey
+ *
+ * based on code originally found in av7110.c & dvb_ci.c:
+ * Copyright (C) 1999-2003 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _DVB_RINGBUFFER_H_
+#define _DVB_RINGBUFFER_H_
+
+#include <linux/spinlock.h>
+#include <linux/wait.h>
+
+struct dvb_ringbuffer {
+ u8 *data;
+ ssize_t size;
+ ssize_t pread;
+ ssize_t pwrite;
+ int error;
+
+ wait_queue_head_t queue;
+ spinlock_t lock;
+};
+
+#define DVB_RINGBUFFER_PKTHDRSIZE 3
+
+
+/*
+** Notes:
+** ------
+** (1) For performance reasons read and write routines don't check buffer sizes
+** and/or number of bytes free/available. This has to be done before these
+** routines are called. For example:
+**
+** *** write <buflen> bytes ***
+** free = dvb_ringbuffer_free(rbuf);
+** if (free >= buflen)
+** count = dvb_ringbuffer_write(rbuf, buffer, buflen);
+** else
+** ...
+**
+** *** read min. 1000, max. <bufsize> bytes ***
+** avail = dvb_ringbuffer_avail(rbuf);
+** if (avail >= 1000)
+** count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize), 0);
+** else
+** ...
+**
+** (2) If there is exactly one reader and one writer, there is no need
+** to lock read or write operations.
+** Two or more readers must be locked against each other.
+** Flushing the buffer counts as a read operation.
+** Two or more writers must be locked against each other.
+*/
+
+/* initialize ring buffer, lock and queue */
+extern void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data, size_t len);
+
+/* test whether buffer is empty */
+extern int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf);
+
+/* return the number of free bytes in the buffer */
+extern ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf);
+
+/* return the number of bytes waiting in the buffer */
+extern ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf);
+
+
+/* read routines & macros */
+/* ---------------------- */
+/* flush buffer */
+extern void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf);
+
+/* flush buffer protected by spinlock and wake-up waiting task(s) */
+extern void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf);
+
+/* peek at byte <offs> in the buffer */
+#define DVB_RINGBUFFER_PEEK(rbuf,offs) \
+ (rbuf)->data[((rbuf)->pread+(offs))%(rbuf)->size]
+
+/* advance read ptr by <num> bytes */
+#define DVB_RINGBUFFER_SKIP(rbuf,num) \
+ (rbuf)->pread=((rbuf)->pread+(num))%(rbuf)->size
+
+/*
+** read <len> bytes from ring buffer into <buf>
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf, u8 *buf,
+ size_t len, int usermem);
+
+
+/* write routines & macros */
+/* ----------------------- */
+/* write single byte to ring buffer */
+#define DVB_RINGBUFFER_WRITE_BYTE(rbuf,byte) \
+ { (rbuf)->data[(rbuf)->pwrite]=(byte); \
+ (rbuf)->pwrite=((rbuf)->pwrite+1)%(rbuf)->size; }
+/*
+** write <len> bytes to ring buffer
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf,
+ size_t len);
+
+
+/**
+ * Write a packet into the ringbuffer.
+ *
+ * <rbuf> Ringbuffer to write to.
+ * <buf> Buffer to write.
+ * <len> Length of buffer (currently limited to 65535 bytes max).
+ * returns Number of bytes written, or -EFAULT, -ENOMEM, -EVINAL.
+ */
+extern ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8* buf,
+ size_t len);
+
+/**
+ * Read from a packet in the ringbuffer. Note: unlike dvb_ringbuffer_read(), this
+ * does NOT update the read pointer in the ringbuffer. You must use
+ * dvb_ringbuffer_pkt_dispose() to mark a packet as no longer required.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ * <offset> Offset into packet to read from.
+ * <buf> Destination buffer for data.
+ * <len> Size of destination buffer.
+ * <usermem> Set to 1 if <buf> is in userspace.
+ * returns Number of bytes read, or -EFAULT.
+ */
+extern ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx,
+ int offset, u8* buf, size_t len, int usermem);
+
+/**
+ * Dispose of a packet in the ring buffer.
+ *
+ * <rbuf> Ring buffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ */
+extern void dvb_ringbuffer_pkt_dispose(struct dvb_ringbuffer *rbuf, size_t idx);
+
+/**
+ * Get the index of the next packet in a ringbuffer.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Previous packet index, or -1 to return the first packet index.
+ * <pktlen> On success, will be updated to contain the length of the packet in bytes.
+ * returns Packet index (if >=0), or -1 if no packets available.
+ */
+extern ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf, size_t idx, size_t* pktlen);
+
+
+#endif /* _DVB_RINGBUFFER_H_ */
diff --git a/v4l/kernel-2.6.20/dvbdev.h b/v4l/kernel-2.6.20/dvbdev.h
new file mode 100644
index 0000000..620e788
--- /dev/null
+++ b/v4l/kernel-2.6.20/dvbdev.h
@@ -0,0 +1,127 @@
+/*
+ * dvbdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBDEV_H_
+#define _DVBDEV_H_
+
+#include <linux/types.h>
+#include <linux/poll.h>
+#include <linux/fs.h>
+#include <linux/list.h>
+#include <linux/smp_lock.h>
+
+#define DVB_MAJOR 212
+
+#define DVB_DEVICE_VIDEO 0
+#define DVB_DEVICE_AUDIO 1
+#define DVB_DEVICE_SEC 2
+#define DVB_DEVICE_FRONTEND 3
+#define DVB_DEVICE_DEMUX 4
+#define DVB_DEVICE_DVR 5
+#define DVB_DEVICE_CA 6
+#define DVB_DEVICE_NET 7
+#define DVB_DEVICE_OSD 8
+
+
+struct dvb_adapter {
+ int num;
+ struct list_head list_head;
+ struct list_head device_list;
+ const char *name;
+ u8 proposed_mac [6];
+ void* priv;
+
+ struct device *device;
+
+ struct module *module;
+};
+
+
+struct dvb_device {
+ struct list_head list_head;
+ struct file_operations *fops;
+ struct dvb_adapter *adapter;
+ int type;
+ u32 id;
+
+ /* in theory, 'users' can vanish now,
+ but I don't want to change too much now... */
+ int readers;
+ int writers;
+ int users;
+
+ /* don't really need those !? -- FIXME: use video_usercopy */
+ int (*kernel_ioctl)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg);
+
+ void *priv;
+};
+
+
+extern int dvb_register_adapter (struct dvb_adapter *adap, const char *name, struct module *module, struct device *device);
+extern int dvb_unregister_adapter (struct dvb_adapter *adap);
+
+extern int dvb_register_device (struct dvb_adapter *adap,
+ struct dvb_device **pdvbdev,
+ const struct dvb_device *template,
+ void *priv,
+ int type);
+
+extern void dvb_unregister_device (struct dvb_device *dvbdev);
+
+extern int dvb_generic_open (struct inode *inode, struct file *file);
+extern int dvb_generic_release (struct inode *inode, struct file *file);
+extern int dvb_generic_ioctl (struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg);
+
+/* we don't mess with video_usercopy() any more,
+we simply define out own dvb_usercopy(), which will hopefully become
+generic_usercopy() someday... */
+
+extern int dvb_usercopy(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg,
+ int (*func)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg));
+
+/** generic DVB attach function. */
+#ifdef CONFIG_DVB_CORE_ATTACH
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ void *__r = NULL; \
+ typeof(&FUNCTION) __a = symbol_request(FUNCTION); \
+ if (__a) { \
+ __r = (void *) __a(ARGS); \
+ if (__r == NULL) \
+ symbol_put(FUNCTION); \
+ } else { \
+ printk(KERN_ERR "DVB: Unable to find symbol "#FUNCTION"()\n"); \
+ } \
+ __r; \
+})
+
+#else
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ FUNCTION(ARGS); \
+})
+
+#endif
+
+#endif /* #ifndef _DVBDEV_H_ */
diff --git a/v4l/kernel-2.6.21/demux.h b/v4l/kernel-2.6.21/demux.h
new file mode 100644
index 0000000..0c1d87c
--- /dev/null
+++ b/v4l/kernel-2.6.21/demux.h
@@ -0,0 +1,278 @@
+/*
+ * demux.h
+ *
+ * Copyright (c) 2002 Convergence GmbH
+ *
+ * based on code:
+ * Copyright (c) 2000 Nokia Research Center
+ * Tampere, FINLAND
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __DEMUX_H
+#define __DEMUX_H
+
+#include <linux/types.h>
+#include <linux/errno.h>
+#include <linux/list.h>
+#include <linux/time.h>
+#include <linux/dvb/dmx.h>
+
+/*--------------------------------------------------------------------------*/
+/* Common definitions */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * DMX_MAX_FILTER_SIZE: Maximum length (in bytes) of a section/PES filter.
+ */
+
+#ifndef DMX_MAX_FILTER_SIZE
+#define DMX_MAX_FILTER_SIZE 18
+#endif
+
+/*
+ * DMX_MAX_SECFEED_SIZE: Maximum length (in bytes) of a private section feed filter.
+ */
+
+#ifndef DMX_MAX_SECTION_SIZE
+#define DMX_MAX_SECTION_SIZE 4096
+#endif
+#ifndef DMX_MAX_SECFEED_SIZE
+#define DMX_MAX_SECFEED_SIZE (DMX_MAX_SECTION_SIZE + 188)
+#endif
+
+
+/*
+ * enum dmx_success: Success codes for the Demux Callback API.
+ */
+
+enum dmx_success {
+ DMX_OK = 0, /* Received Ok */
+ DMX_LENGTH_ERROR, /* Incorrect length */
+ DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */
+ DMX_CRC_ERROR, /* Incorrect CRC */
+ DMX_FRAME_ERROR, /* Frame alignment error */
+ DMX_FIFO_ERROR, /* Receiver FIFO overrun */
+ DMX_MISSED_ERROR /* Receiver missed packet */
+} ;
+
+/*--------------------------------------------------------------------------*/
+/* TS packet reception */
+/*--------------------------------------------------------------------------*/
+
+/* TS filter type for set() */
+
+#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */
+#define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS
+ payload (<=184 bytes per packet) to callback */
+#define TS_DECODER 4 /* send stream to built-in decoder (if present) */
+
+/* PES type for filters which write to built-in decoder */
+/* these should be kept identical to the types in dmx.h */
+
+enum dmx_ts_pes
+{ /* also send packets to decoder (if it exists) */
+ DMX_TS_PES_AUDIO0,
+ DMX_TS_PES_VIDEO0,
+ DMX_TS_PES_TELETEXT0,
+ DMX_TS_PES_SUBTITLE0,
+ DMX_TS_PES_PCR0,
+
+ DMX_TS_PES_AUDIO1,
+ DMX_TS_PES_VIDEO1,
+ DMX_TS_PES_TELETEXT1,
+ DMX_TS_PES_SUBTITLE1,
+ DMX_TS_PES_PCR1,
+
+ DMX_TS_PES_AUDIO2,
+ DMX_TS_PES_VIDEO2,
+ DMX_TS_PES_TELETEXT2,
+ DMX_TS_PES_SUBTITLE2,
+ DMX_TS_PES_PCR2,
+
+ DMX_TS_PES_AUDIO3,
+ DMX_TS_PES_VIDEO3,
+ DMX_TS_PES_TELETEXT3,
+ DMX_TS_PES_SUBTITLE3,
+ DMX_TS_PES_PCR3,
+
+ DMX_TS_PES_OTHER
+};
+
+#define DMX_TS_PES_AUDIO DMX_TS_PES_AUDIO0
+#define DMX_TS_PES_VIDEO DMX_TS_PES_VIDEO0
+#define DMX_TS_PES_TELETEXT DMX_TS_PES_TELETEXT0
+#define DMX_TS_PES_SUBTITLE DMX_TS_PES_SUBTITLE0
+#define DMX_TS_PES_PCR DMX_TS_PES_PCR0
+
+
+struct dmx_ts_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux *parent; /* Back-pointer */
+ void *priv; /* Pointer to private data of the API client */
+ int (*set) (struct dmx_ts_feed *feed,
+ u16 pid,
+ int type,
+ enum dmx_ts_pes pes_type,
+ size_t circular_buffer_size,
+ struct timespec timeout);
+ int (*start_filtering) (struct dmx_ts_feed* feed);
+ int (*stop_filtering) (struct dmx_ts_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Section reception */
+/*--------------------------------------------------------------------------*/
+
+struct dmx_section_filter {
+ u8 filter_value [DMX_MAX_FILTER_SIZE];
+ u8 filter_mask [DMX_MAX_FILTER_SIZE];
+ u8 filter_mode [DMX_MAX_FILTER_SIZE];
+ struct dmx_section_feed* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+};
+
+struct dmx_section_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+
+ int check_crc;
+ u32 crc_val;
+
+ u8 *secbuf;
+ u8 secbuf_base[DMX_MAX_SECFEED_SIZE];
+ u16 secbufp, seclen, tsfeedp;
+
+ int (*set) (struct dmx_section_feed* feed,
+ u16 pid,
+ size_t circular_buffer_size,
+ int check_crc);
+ int (*allocate_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter** filter);
+ int (*release_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter* filter);
+ int (*start_filtering) (struct dmx_section_feed* feed);
+ int (*stop_filtering) (struct dmx_section_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Callback functions */
+/*--------------------------------------------------------------------------*/
+
+typedef int (*dmx_ts_cb) ( const u8 * buffer1,
+ size_t buffer1_length,
+ const u8 * buffer2,
+ size_t buffer2_length,
+ struct dmx_ts_feed* source,
+ enum dmx_success success);
+
+typedef int (*dmx_section_cb) ( const u8 * buffer1,
+ size_t buffer1_len,
+ const u8 * buffer2,
+ size_t buffer2_len,
+ struct dmx_section_filter * source,
+ enum dmx_success success);
+
+/*--------------------------------------------------------------------------*/
+/* DVB Front-End */
+/*--------------------------------------------------------------------------*/
+
+enum dmx_frontend_source {
+ DMX_MEMORY_FE,
+ DMX_FRONTEND_0,
+ DMX_FRONTEND_1,
+ DMX_FRONTEND_2,
+ DMX_FRONTEND_3,
+ DMX_STREAM_0, /* external stream input, e.g. LVDS */
+ DMX_STREAM_1,
+ DMX_STREAM_2,
+ DMX_STREAM_3
+};
+
+struct dmx_frontend {
+ struct list_head connectivity_list; /* List of front-ends that can
+ be connected to a particular
+ demux */
+ enum dmx_frontend_source source;
+};
+
+/*--------------------------------------------------------------------------*/
+/* MPEG-2 TS Demux */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * Flags OR'ed in the capabilities field of struct dmx_demux.
+ */
+
+#define DMX_TS_FILTERING 1
+#define DMX_PES_FILTERING 2
+#define DMX_SECTION_FILTERING 4
+#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */
+#define DMX_CRC_CHECKING 16
+#define DMX_TS_DESCRAMBLING 32
+
+/*
+ * Demux resource type identifier.
+*/
+
+/*
+ * DMX_FE_ENTRY(): Casts elements in the list of registered
+ * front-ends from the generic type struct list_head
+ * to the type * struct dmx_frontend
+ *.
+*/
+
+#define DMX_FE_ENTRY(list) list_entry(list, struct dmx_frontend, connectivity_list)
+
+struct dmx_demux {
+ u32 capabilities; /* Bitfield of capability flags */
+ struct dmx_frontend* frontend; /* Front-end connected to the demux */
+ void* priv; /* Pointer to private data of the API client */
+ int (*open) (struct dmx_demux* demux);
+ int (*close) (struct dmx_demux* demux);
+ int (*write) (struct dmx_demux* demux, const char* buf, size_t count);
+ int (*allocate_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed** feed,
+ dmx_ts_cb callback);
+ int (*release_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed* feed);
+ int (*allocate_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed** feed,
+ dmx_section_cb callback);
+ int (*release_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed* feed);
+ int (*add_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*remove_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ struct list_head* (*get_frontends) (struct dmx_demux* demux);
+ int (*connect_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*disconnect_frontend) (struct dmx_demux* demux);
+
+ int (*get_pes_pids) (struct dmx_demux* demux, u16 *pids);
+
+ int (*get_caps) (struct dmx_demux* demux, struct dmx_caps *caps);
+
+ int (*set_source) (struct dmx_demux* demux, const dmx_source_t *src);
+
+ int (*get_stc) (struct dmx_demux* demux, unsigned int num,
+ u64 *stc, unsigned int *base);
+};
+
+#endif /* #ifndef __DEMUX_H */
diff --git a/v4l/kernel-2.6.21/dmxdev.h b/v4l/kernel-2.6.21/dmxdev.h
new file mode 100644
index 0000000..d2bee9f
--- /dev/null
+++ b/v4l/kernel-2.6.21/dmxdev.h
@@ -0,0 +1,108 @@
+/*
+ * dmxdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DMXDEV_H_
+#define _DMXDEV_H_
+
+#include <linux/types.h>
+#include <linux/spinlock.h>
+#include <linux/kernel.h>
+#include <linux/timer.h>
+#include <linux/wait.h>
+#include <linux/fs.h>
+#include <linux/string.h>
+#include <linux/mutex.h>
+
+#include <linux/dvb/dmx.h>
+
+#include "dvbdev.h"
+#include "demux.h"
+#include "dvb_ringbuffer.h"
+
+enum dmxdev_type {
+ DMXDEV_TYPE_NONE,
+ DMXDEV_TYPE_SEC,
+ DMXDEV_TYPE_PES,
+};
+
+enum dmxdev_state {
+ DMXDEV_STATE_FREE,
+ DMXDEV_STATE_ALLOCATED,
+ DMXDEV_STATE_SET,
+ DMXDEV_STATE_GO,
+ DMXDEV_STATE_DONE,
+ DMXDEV_STATE_TIMEDOUT
+};
+
+struct dmxdev_filter {
+ union {
+ struct dmx_section_filter *sec;
+ } filter;
+
+ union {
+ struct dmx_ts_feed *ts;
+ struct dmx_section_feed *sec;
+ } feed;
+
+ union {
+ struct dmx_sct_filter_params sec;
+ struct dmx_pes_filter_params pes;
+ } params;
+
+ enum dmxdev_type type;
+ enum dmxdev_state state;
+ struct dmxdev *dev;
+ struct dvb_ringbuffer buffer;
+
+ struct mutex mutex;
+
+ /* only for sections */
+ struct timer_list timer;
+ int todo;
+ u8 secheader[3];
+};
+
+
+struct dmxdev {
+ struct dvb_device *dvbdev;
+ struct dvb_device *dvr_dvbdev;
+
+ struct dmxdev_filter *filter;
+ struct dmx_demux *demux;
+
+ int filternum;
+ int capabilities;
+#define DMXDEV_CAP_DUPLEX 1
+ struct dmx_frontend *dvr_orig_fe;
+
+ struct dvb_ringbuffer dvr_buffer;
+#define DVR_BUFFER_SIZE (10*188*1024)
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+
+int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *);
+void dvb_dmxdev_release(struct dmxdev *dmxdev);
+
+#endif /* _DMXDEV_H_ */
diff --git a/v4l/kernel-2.6.21/dvb-pll.h b/v4l/kernel-2.6.21/dvb-pll.h
new file mode 100644
index 0000000..681186a
--- /dev/null
+++ b/v4l/kernel-2.6.21/dvb-pll.h
@@ -0,0 +1,67 @@
+/*
+ * descriptions + helper functions for simple dvb plls.
+ */
+
+#ifndef __DVB_PLL_H__
+#define __DVB_PLL_H__
+
+#include <linux/i2c.h>
+#include "dvb_frontend.h"
+
+struct dvb_pll_desc {
+ char *name;
+ u32 min;
+ u32 max;
+ void (*setbw)(u8 *buf, u32 freq, int bandwidth);
+ int count;
+ struct {
+ u32 limit;
+ u32 offset;
+ u32 stepsize;
+ u8 config;
+ u8 cb;
+ } entries[12];
+};
+
+extern struct dvb_pll_desc dvb_pll_thomson_dtt7579;
+extern struct dvb_pll_desc dvb_pll_thomson_dtt759x;
+extern struct dvb_pll_desc dvb_pll_thomson_dtt7610;
+extern struct dvb_pll_desc dvb_pll_lg_z201;
+extern struct dvb_pll_desc dvb_pll_microtune_4042;
+extern struct dvb_pll_desc dvb_pll_thomson_dtt761x;
+extern struct dvb_pll_desc dvb_pll_unknown_1;
+
+extern struct dvb_pll_desc dvb_pll_tua6010xs;
+extern struct dvb_pll_desc dvb_pll_env57h1xd5;
+extern struct dvb_pll_desc dvb_pll_tua6034;
+extern struct dvb_pll_desc dvb_pll_lg_tdvs_h06xf;
+extern struct dvb_pll_desc dvb_pll_tda665x;
+extern struct dvb_pll_desc dvb_pll_fmd1216me;
+extern struct dvb_pll_desc dvb_pll_tded4;
+
+extern struct dvb_pll_desc dvb_pll_tuv1236d;
+extern struct dvb_pll_desc dvb_pll_tdhu2;
+extern struct dvb_pll_desc dvb_pll_samsung_tbmv;
+extern struct dvb_pll_desc dvb_pll_philips_sd1878_tda8261;
+extern struct dvb_pll_desc dvb_pll_philips_td1316;
+
+extern struct dvb_pll_desc dvb_pll_thomson_fe6600;
+
+extern int dvb_pll_configure(struct dvb_pll_desc *desc, u8 *buf,
+ u32 freq, int bandwidth);
+
+/**
+ * Attach a dvb-pll to the supplied frontend structure.
+ *
+ * @param fe Frontend to attach to.
+ * @param pll_addr i2c address of the PLL (if used).
+ * @param i2c i2c adapter to use (set to NULL if not used).
+ * @param desc dvb_pll_desc to use.
+ * @return Frontend pointer on success, NULL on failure
+ */
+extern struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ struct dvb_pll_desc *desc);
+
+#endif
diff --git a/v4l/kernel-2.6.21/dvb-usb-ids.h b/v4l/kernel-2.6.21/dvb-usb-ids.h
new file mode 100644
index 0000000..148386a
--- /dev/null
+++ b/v4l/kernel-2.6.21/dvb-usb-ids.h
@@ -0,0 +1,144 @@
+/* dvb-usb-ids.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de) see
+ * dvb-usb-init.c for copyright information.
+ *
+ * a header file containing define's for the USB device supported by the
+ * various drivers.
+ */
+#ifndef _DVB_USB_IDS_H_
+#define _DVB_USB_IDS_H_
+
+/* Vendor IDs */
+#define USB_VID_ADSTECH 0x06e1
+#define USB_VID_ALCOR_MICRO 0x058f
+#define USB_VID_ANCHOR 0x0547
+#define USB_VID_AVERMEDIA 0x07ca
+#define USB_VID_COMPRO 0x185b
+#define USB_VID_COMPRO_UNK 0x145f
+#define USB_VID_CYPRESS 0x04b4
+#define USB_VID_DIBCOM 0x10b8
+#define USB_VID_DVICO 0x0fe9
+#define USB_VID_EMPIA 0xeb1a
+#define USB_VID_GENPIX 0x09c0
+#define USB_VID_GRANDTEC 0x5032
+#define USB_VID_HANFTEK 0x15f4
+#define USB_VID_HAUPPAUGE 0x2040
+#define USB_VID_HYPER_PALTEK 0x1025
+#define USB_VID_KWORLD 0xeb2a
+#define USB_VID_KYE 0x0458
+#define USB_VID_LEADTEK 0x0413
+#define USB_VID_LITEON 0x04ca
+#define USB_VID_MEDION 0x1660
+#define USB_VID_MSI 0x0db0
+#define USB_VID_PINNACLE 0x2304
+#define USB_VID_VISIONPLUS 0x13d3
+#define USB_VID_TWINHAN 0x1822
+#define USB_VID_ULTIMA_ELECTRONIC 0x05d8
+#define USB_VID_UNIWILL 0x1584
+#define USB_VID_WIDEVIEW 0x14aa
+
+/* Product IDs */
+#define USB_PID_ADSTECH_USB2_COLD 0xa333
+#define USB_PID_ADSTECH_USB2_WARM 0xa334
+#define USB_PID_AVERMEDIA_DVBT_USB_COLD 0x0001
+#define USB_PID_AVERMEDIA_DVBT_USB_WARM 0x0002
+#define USB_PID_AVERMEDIA_DVBT_USB2_COLD 0xa800
+#define USB_PID_AVERMEDIA_DVBT_USB2_WARM 0xa801
+#define USB_PID_COMPRO_DVBU2000_COLD 0xd000
+#define USB_PID_COMPRO_DVBU2000_WARM 0xd001
+#define USB_PID_COMPRO_DVBU2000_UNK_COLD 0x010c
+#define USB_PID_COMPRO_DVBU2000_UNK_WARM 0x010d
+#define USB_PID_COMPRO_VIDEOMATE_U500 0x1e78
+#define USB_PID_DIBCOM_HOOK_DEFAULT 0x0064
+#define USB_PID_DIBCOM_HOOK_DEFAULT_REENUM 0x0065
+#define USB_PID_DIBCOM_MOD3000_COLD 0x0bb8
+#define USB_PID_DIBCOM_MOD3000_WARM 0x0bb9
+#define USB_PID_DIBCOM_MOD3001_COLD 0x0bc6
+#define USB_PID_DIBCOM_MOD3001_WARM 0x0bc7
+#define USB_PID_DIBCOM_STK7700P 0x1e14
+#define USB_PID_DIBCOM_STK7700P_PC 0x1e78
+#define USB_PID_DIBCOM_ANCHOR_2135_COLD 0x2131
+#define USB_PID_UNIWILL_STK7700P 0x6003
+#define USB_PID_GRANDTEC_DVBT_USB_COLD 0x0fa0
+#define USB_PID_GRANDTEC_DVBT_USB_WARM 0x0fa1
+#define USB_PID_KWORLD_VSTREAM_COLD 0x17de
+#define USB_PID_KWORLD_VSTREAM_WARM 0x17df
+#define USB_PID_TWINHAN_VP7041_COLD 0x3201
+#define USB_PID_TWINHAN_VP7041_WARM 0x3202
+#define USB_PID_TWINHAN_VP7020_COLD 0x3203
+#define USB_PID_TWINHAN_VP7020_WARM 0x3204
+#define USB_PID_TWINHAN_VP7045_COLD 0x3205
+#define USB_PID_TWINHAN_VP7045_WARM 0x3206
+#define USB_PID_TWINHAN_VP7021_COLD 0x3207
+#define USB_PID_TWINHAN_VP7021_WARM 0x3208
+#define USB_PID_DNTV_TINYUSB2_COLD 0x3223
+#define USB_PID_DNTV_TINYUSB2_WARM 0x3224
+#define USB_PID_ULTIMA_TVBOX_COLD 0x8105
+#define USB_PID_ULTIMA_TVBOX_WARM 0x8106
+#define USB_PID_ULTIMA_TVBOX_AN2235_COLD 0x8107
+#define USB_PID_ULTIMA_TVBOX_AN2235_WARM 0x8108
+#define USB_PID_ULTIMA_TVBOX_ANCHOR_COLD 0x2235
+#define USB_PID_ULTIMA_TVBOX_USB2_COLD 0x8109
+#define USB_PID_ULTIMA_TVBOX_USB2_WARM 0x810a
+#define USB_PID_ARTEC_T14_COLD 0x810b
+#define USB_PID_ARTEC_T14_WARM 0x810c
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_COLD 0x8613
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_WARM 0x1002
+#define USB_PID_UNK_HYPER_PALTEK_COLD 0x005e
+#define USB_PID_UNK_HYPER_PALTEK_WARM 0x005f
+#define USB_PID_HANFTEK_UMT_010_COLD 0x0001
+#define USB_PID_HANFTEK_UMT_010_WARM 0x0015
+#define USB_PID_DTT200U_COLD 0x0201
+#define USB_PID_DTT200U_WARM 0x0301
+#define USB_PID_WT220U_ZAP250_COLD 0x0220
+#define USB_PID_WT220U_COLD 0x0222
+#define USB_PID_WT220U_WARM 0x0221
+#define USB_PID_WT220U_FC_COLD 0x0225
+#define USB_PID_WT220U_FC_WARM 0x0226
+#define USB_PID_WT220U_ZL0353_COLD 0x022a
+#define USB_PID_WT220U_ZL0353_WARM 0x022b
+#define USB_PID_WINTV_NOVA_T_USB2_COLD 0x9300
+#define USB_PID_WINTV_NOVA_T_USB2_WARM 0x9301
+#define USB_PID_HAUPPAUGE_NOVA_T_500 0x9941
+#define USB_PID_HAUPPAUGE_NOVA_T_500_2 0x9950
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK 0x7050
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK_2 0x7060
+#define USB_PID_AVERMEDIA_VOLAR 0xa807
+#define USB_PID_AVERMEDIA_VOLAR_2 0xb808
+#define USB_PID_NEBULA_DIGITV 0x0201
+#define USB_PID_DVICO_BLUEBIRD_LGDT 0xd820
+#define USB_PID_DVICO_BLUEBIRD_LG064F_COLD 0xd500
+#define USB_PID_DVICO_BLUEBIRD_LG064F_WARM 0xd501
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_COLD 0xdb00
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_WARM 0xdb01
+#define USB_PID_DVICO_BLUEBIRD_TH7579_COLD 0xdb10
+#define USB_PID_DVICO_BLUEBIRD_TH7579_WARM 0xdb11
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_COLD 0xdb50
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_WARM 0xdb51
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_COLD 0xdb58
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_WARM 0xdb59
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_COLD 0xdb54
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_WARM 0xdb55
+#define USB_PID_MEDION_MD95700 0x0932
+#define USB_PID_MSI_MEGASKY580 0x5580
+#define USB_PID_MSI_MEGASKY580_55801 0x5581
+#define USB_PID_KYE_DVB_T_COLD 0x701e
+#define USB_PID_KYE_DVB_T_WARM 0x701f
+#define USB_PID_PCTV_200E 0x020e
+#define USB_PID_PCTV_400E 0x020f
+#define USB_PID_LITEON_DVB_T_COLD 0xf000
+#define USB_PID_LITEON_DVB_T_WARM 0xf001
+#define USB_PID_DIGIVOX_MINI_SL_COLD 0xe360
+#define USB_PID_DIGIVOX_MINI_SL_WARM 0xe361
+#define USB_PID_GRANDTEC_DVBT_USB2_COLD 0x0bc6
+#define USB_PID_GRANDTEC_DVBT_USB2_WARM 0x0bc7
+#define USB_PID_WINFAST_DTV_DONGLE_COLD 0x6025
+#define USB_PID_WINFAST_DTV_DONGLE_WARM 0x6026
+#define USB_PID_WINFAST_DTV_DONGLE_STK7700P 0x6f00
+#define USB_PID_GENPIX_8PSK_COLD 0x0200
+#define USB_PID_GENPIX_8PSK_WARM 0x0201
+#define USB_PID_SIGMATEK_DVB_110 0x6610
+
+
+#endif
diff --git a/v4l/kernel-2.6.21/dvb-usb.h b/v4l/kernel-2.6.21/dvb-usb.h
new file mode 100644
index 0000000..0d72173
--- /dev/null
+++ b/v4l/kernel-2.6.21/dvb-usb.h
@@ -0,0 +1,408 @@
+/* dvb-usb.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * the headerfile, all dvb-usb-drivers have to include.
+ *
+ * TODO: clean-up the structures for unused fields and update the comments
+ */
+#ifndef __DVB_USB_H__
+#define __DVB_USB_H__
+
+#include <linux/input.h>
+#include <linux/usb.h>
+#include <linux/firmware.h>
+#include <linux/mutex.h>
+
+#include "dvb_frontend.h"
+#include "dvb_demux.h"
+#include "dvb_net.h"
+#include "dmxdev.h"
+
+#include "dvb-pll.h"
+
+#include "dvb-usb-ids.h"
+
+/* debug */
+#ifdef CONFIG_DVB_USB_DEBUG
+#define dprintk(var,level,args...) \
+ do { if ((var & level)) { printk(args); } } while (0)
+
+#define debug_dump(b,l,func) {\
+ int loop_; \
+ for (loop_ = 0; loop_ < l; loop_++) func("%02x ", b[loop_]); \
+ func("\n");\
+}
+#define DVB_USB_DEBUG_STATUS
+#else
+#define dprintk(args...)
+#define debug_dump(b,l,func)
+
+#define DVB_USB_DEBUG_STATUS " (debugging is not enabled)"
+
+#endif
+
+/* generic log methods - taken from usb.h */
+#ifndef DVB_USB_LOG_PREFIX
+ #define DVB_USB_LOG_PREFIX "dvb-usb (please define a log prefix)"
+#endif
+
+#undef err
+#define err(format, arg...) printk(KERN_ERR DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef info
+#define info(format, arg...) printk(KERN_INFO DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef warn
+#define warn(format, arg...) printk(KERN_WARNING DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+
+/**
+ * struct dvb_usb_device_description - name and its according USB IDs
+ * @name: real name of the box, regardless which DVB USB device class is in use
+ * @cold_ids: array of struct usb_device_id which describe the device in
+ * pre-firmware state
+ * @warm_ids: array of struct usb_device_id which describe the device in
+ * post-firmware state
+ *
+ * Each DVB USB device class can have one or more actual devices, this struct
+ * assigns a name to it.
+ */
+struct dvb_usb_device_description {
+ const char *name;
+
+#define DVB_USB_ID_MAX_NUM 15
+ struct usb_device_id *cold_ids[DVB_USB_ID_MAX_NUM];
+ struct usb_device_id *warm_ids[DVB_USB_ID_MAX_NUM];
+};
+
+/**
+ * struct dvb_usb_rc_key - a remote control key and its input-event
+ * @custom: the vendor/custom part of the key
+ * @data: the actual key part
+ * @event: the input event assigned to key identified by custom and data
+ */
+struct dvb_usb_rc_key {
+ u8 custom,data;
+ u32 event;
+};
+
+struct dvb_usb_device;
+struct dvb_usb_adapter;
+struct usb_data_stream;
+
+/**
+ * Properties of USB streaming - TODO this structure should be somewhere else
+ * describes the kind of USB transfer used for data-streaming.
+ * (BULK or ISOC)
+ */
+struct usb_data_stream_properties {
+#define USB_BULK 1
+#define USB_ISOC 2
+ int type;
+ int count;
+ int endpoint;
+
+ union {
+ struct {
+ int buffersize; /* per URB */
+ } bulk;
+ struct {
+ int framesperurb;
+ int framesize;
+ int interval;
+ } isoc;
+ } u;
+};
+
+/**
+ * struct dvb_usb_adapter_properties - properties of a dvb-usb-adapter.
+ * A DVB-USB-Adapter is basically a dvb_adapter which is present on a USB-device.
+ * @caps: capabilities of the DVB USB device.
+ * @pid_filter_count: number of PID filter position in the optional hardware
+ * PID-filter.
+ * @streaming_crtl: called to start and stop the MPEG2-TS streaming of the
+ * device (not URB submitting/killing).
+ * @pid_filter_ctrl: called to en/disable the PID filter, if any.
+ * @pid_filter: called to set/unset a PID for filtering.
+ * @frontend_attach: called to attach the possible frontends (fill fe-field
+ * of struct dvb_usb_device).
+ * @tuner_attach: called to attach the correct tuner and to fill pll_addr,
+ * pll_desc and pll_init_buf of struct dvb_usb_device).
+ * @stream: configuration of the USB streaming
+ */
+struct dvb_usb_adapter_properties {
+#define DVB_USB_ADAP_HAS_PID_FILTER 0x01
+#define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
+#define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
+#define DVB_USB_ADAP_RECEIVES_204_BYTE_TS 0x08
+ int caps;
+ int pid_filter_count;
+
+ int (*streaming_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
+
+ int (*frontend_attach) (struct dvb_usb_adapter *);
+ int (*tuner_attach) (struct dvb_usb_adapter *);
+
+ struct usb_data_stream_properties stream;
+
+ int size_of_priv;
+};
+
+/**
+ * struct dvb_usb_device_properties - properties of a dvb-usb-device
+ * @usb_ctrl: which USB device-side controller is in use. Needed for firmware
+ * download.
+ * @firmware: name of the firmware file.
+ * @download_firmware: called to download the firmware when the usb_ctrl is
+ * DEVICE_SPECIFIC.
+ * @no_reconnect: device doesn't do a reconnect after downloading the firmware,
+ * so do the warm initialization right after it
+ *
+ * @size_of_priv: how many bytes shall be allocated for the private field
+ * of struct dvb_usb_device.
+ *
+ * @power_ctrl: called to enable/disable power of the device.
+ * @read_mac_address: called to read the MAC address of the device.
+ * @identify_state: called to determine the state (cold or warm), when it
+ * is not distinguishable by the USB IDs.
+ *
+ * @rc_key_map: a hard-wired array of struct dvb_usb_rc_key (NULL to disable
+ * remote control handling).
+ * @rc_key_map_size: number of items in @rc_key_map.
+ * @rc_query: called to query an event event.
+ * @rc_interval: time in ms between two queries.
+ *
+ * @i2c_algo: i2c_algorithm if the device has I2CoverUSB.
+ *
+ * @generic_bulk_ctrl_endpoint: most of the DVB USB devices have a generic
+ * endpoint which received control messages with bulk transfers. When this
+ * is non-zero, one can use dvb_usb_generic_rw and dvb_usb_generic_write-
+ * helper functions.
+ *
+ * @num_device_descs: number of struct dvb_usb_device_description in @devices
+ * @devices: array of struct dvb_usb_device_description compatibles with these
+ * properties.
+ */
+#define MAX_NO_OF_ADAPTER_PER_DEVICE 2
+struct dvb_usb_device_properties {
+
+#define DVB_USB_IS_AN_I2C_ADAPTER 0x01
+ int caps;
+
+#define DEVICE_SPECIFIC 0
+#define CYPRESS_AN2135 1
+#define CYPRESS_AN2235 2
+#define CYPRESS_FX2 3
+ int usb_ctrl;
+ int (*download_firmware) (struct usb_device *, const struct firmware *);
+ const char firmware[FIRMWARE_NAME_MAX];
+ int no_reconnect;
+
+ int size_of_priv;
+
+ int num_adapters;
+ struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ int (*power_ctrl) (struct dvb_usb_device *, int);
+ int (*read_mac_address) (struct dvb_usb_device *, u8 []);
+ int (*identify_state) (struct usb_device *, struct dvb_usb_device_properties *,
+ struct dvb_usb_device_description **, int *);
+
+/* remote control properties */
+#define REMOTE_NO_KEY_PRESSED 0x00
+#define REMOTE_KEY_PRESSED 0x01
+#define REMOTE_KEY_REPEAT 0x02
+ struct dvb_usb_rc_key *rc_key_map;
+ int rc_key_map_size;
+ int (*rc_query) (struct dvb_usb_device *, u32 *, int *);
+ int rc_interval;
+
+ struct i2c_algorithm *i2c_algo;
+
+ int generic_bulk_ctrl_endpoint;
+
+ int num_device_descs;
+ struct dvb_usb_device_description devices[9];
+};
+
+/**
+ * struct usb_data_stream - generic object of an USB stream
+ * @buf_num: number of buffer allocated.
+ * @buf_size: size of each buffer in buf_list.
+ * @buf_list: array containing all allocate buffers for streaming.
+ * @dma_addr: list of dma_addr_t for each buffer in buf_list.
+ *
+ * @urbs_initialized: number of URBs initialized.
+ * @urbs_submitted: number of URBs submitted.
+ */
+#define MAX_NO_URBS_FOR_DATA_STREAM 10
+struct usb_data_stream {
+ struct usb_device *udev;
+ struct usb_data_stream_properties props;
+
+#define USB_STATE_INIT 0x00
+#define USB_STATE_URB_BUF 0x01
+ int state;
+
+ void (*complete) (struct usb_data_stream *, u8 *, size_t);
+
+ struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ int buf_num;
+ unsigned long buf_size;
+ u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
+
+ int urbs_initialized;
+ int urbs_submitted;
+
+ void *user_priv;
+};
+
+/**
+ * struct dvb_usb_adapter - a DVB adapter on a USB device
+ * @id: index of this adapter (starting with 0).
+ *
+ * @feedcount: number of reqested feeds (used for streaming-activation)
+ * @pid_filtering: is hardware pid_filtering used or not.
+ *
+ * @pll_addr: I2C address of the tuner for programming
+ * @pll_init: array containing the initialization buffer
+ * @pll_desc: pointer to the appropriate struct dvb_pll_desc
+ * @tuner_pass_ctrl: called to (de)activate tuner passthru of the demod or the board
+ *
+ * @dvb_adap: device's dvb_adapter.
+ * @dmxdev: device's dmxdev.
+ * @demux: device's software demuxer.
+ * @dvb_net: device's dvb_net interfaces.
+ * @dvb_frontend: device's frontend.
+ * @max_feed_count: how many feeds can be handled simultaneously by this
+ * device
+ *
+ * @fe_init: rerouted frontend-init (wakeup) function.
+ * @fe_sleep: rerouted frontend-sleep function.
+ *
+ * @stream: the usb data stream.
+ */
+struct dvb_usb_adapter {
+ struct dvb_usb_device *dev;
+ struct dvb_usb_adapter_properties props;
+
+#define DVB_USB_ADAP_STATE_INIT 0x000
+#define DVB_USB_ADAP_STATE_DVB 0x001
+ int state;
+
+ u8 id;
+
+ int feedcount;
+ int pid_filtering;
+
+ /* tuner programming information */
+ u8 pll_addr;
+ u8 pll_init[4];
+ struct dvb_pll_desc *pll_desc;
+ int (*tuner_pass_ctrl) (struct dvb_frontend *, int, u8);
+
+ /* dvb */
+ struct dvb_adapter dvb_adap;
+ struct dmxdev dmxdev;
+ struct dvb_demux demux;
+ struct dvb_net dvb_net;
+ struct dvb_frontend *fe;
+ int max_feed_count;
+
+ int (*fe_init) (struct dvb_frontend *);
+ int (*fe_sleep) (struct dvb_frontend *);
+
+ struct usb_data_stream stream;
+
+ void *priv;
+};
+
+/**
+ * struct dvb_usb_device - object of a DVB USB device
+ * @props: copy of the struct dvb_usb_properties this device belongs to.
+ * @desc: pointer to the device's struct dvb_usb_device_description.
+ * @state: initialization and runtime state of the device.
+ *
+ * @powered: indicated whether the device is power or not.
+ * Powered is in/decremented for each call to modify the state.
+ * @udev: pointer to the device's struct usb_device.
+ *
+ * @usb_mutex: semaphore of USB control messages (reading needs two messages)
+ * @i2c_mutex: semaphore for i2c-transfers
+ *
+ * @i2c_adap: device's i2c_adapter if it uses I2CoverUSB
+ *
+ * @rc_input_dev: input device for the remote control.
+ * @rc_query_work: struct work_struct frequent rc queries
+ * @last_event: last triggered event
+ * @last_state: last state (no, pressed, repeat)
+ * @owner: owner of the dvb_adapter
+ * @priv: private data of the actual driver (allocate by dvb-usb, size defined
+ * in size_of_priv of dvb_usb_properties).
+ */
+struct dvb_usb_device {
+ struct dvb_usb_device_properties props;
+ struct dvb_usb_device_description *desc;
+
+ struct usb_device *udev;
+
+#define DVB_USB_STATE_INIT 0x000
+#define DVB_USB_STATE_I2C 0x001
+#define DVB_USB_STATE_DVB 0x002
+#define DVB_USB_STATE_REMOTE 0x004
+ int state;
+
+ int powered;
+
+ /* locking */
+ struct mutex usb_mutex;
+
+ /* i2c */
+ struct mutex i2c_mutex;
+ struct i2c_adapter i2c_adap;
+
+ int num_adapters_initialized;
+ struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ /* remote control */
+ struct input_dev *rc_input_dev;
+ char rc_phys[64];
+ struct delayed_work rc_query_work;
+ u32 last_event;
+ int last_state;
+
+ struct module *owner;
+
+ void *priv;
+};
+
+extern int dvb_usb_device_init(struct usb_interface *, struct dvb_usb_device_properties *, struct module *, struct dvb_usb_device **);
+extern void dvb_usb_device_exit(struct usb_interface *);
+
+/* the generic read/write method for device control */
+extern int dvb_usb_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16,int);
+extern int dvb_usb_generic_write(struct dvb_usb_device *, u8 *, u16);
+
+/* commonly used remote control parsing */
+extern int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *, u8[], u32 *, int *);
+
+/* commonly used pll init and set functions */
+extern int dvb_usb_tuner_init_i2c(struct dvb_frontend *);
+extern int dvb_usb_tuner_calc_regs(struct dvb_frontend *, struct dvb_frontend_parameters *, u8 *buf, int buf_len);
+extern int dvb_usb_tuner_set_params_i2c(struct dvb_frontend *, struct dvb_frontend_parameters *);
+
+/* commonly used firmware download types and function */
+struct hexline {
+ u8 len;
+ u32 addr;
+ u8 type;
+ u8 data[255];
+ u8 chk;
+};
+extern int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type);
+extern int dvb_usb_get_hexline(const struct firmware *fw, struct hexline *hx, int *pos);
+
+
+#endif
diff --git a/v4l/kernel-2.6.21/dvb_demux.h b/v4l/kernel-2.6.21/dvb_demux.h
new file mode 100644
index 0000000..2c5f915
--- /dev/null
+++ b/v4l/kernel-2.6.21/dvb_demux.h
@@ -0,0 +1,140 @@
+/*
+ * dvb_demux.h: DVB kernel demux API
+ *
+ * Copyright (C) 2000-2001 Marcus Metzler & Ralph Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_DEMUX_H_
+#define _DVB_DEMUX_H_
+
+#include <linux/time.h>
+#include <linux/timer.h>
+#include <linux/spinlock.h>
+#include <linux/mutex.h>
+
+#include "demux.h"
+
+#define DMX_TYPE_TS 0
+#define DMX_TYPE_SEC 1
+#define DMX_TYPE_PES 2
+
+#define DMX_STATE_FREE 0
+#define DMX_STATE_ALLOCATED 1
+#define DMX_STATE_SET 2
+#define DMX_STATE_READY 3
+#define DMX_STATE_GO 4
+
+#define DVB_DEMUX_MASK_MAX 18
+
+struct dvb_demux_filter {
+ struct dmx_section_filter filter;
+ u8 maskandmode[DMX_MAX_FILTER_SIZE];
+ u8 maskandnotmode[DMX_MAX_FILTER_SIZE];
+ int doneq;
+
+ struct dvb_demux_filter *next;
+ struct dvb_demux_feed *feed;
+ int index;
+ int state;
+ int type;
+
+ u16 hw_handle;
+ struct timer_list timer;
+};
+
+#define DMX_FEED_ENTRY(pos) list_entry(pos, struct dvb_demux_feed, list_head)
+
+struct dvb_demux_feed {
+ union {
+ struct dmx_ts_feed ts;
+ struct dmx_section_feed sec;
+ } feed;
+
+ union {
+ dmx_ts_cb ts;
+ dmx_section_cb sec;
+ } cb;
+
+ struct dvb_demux *demux;
+ void *priv;
+ int type;
+ int state;
+ u16 pid;
+ u8 *buffer;
+ int buffer_size;
+
+ struct timespec timeout;
+ struct dvb_demux_filter *filter;
+
+ int ts_type;
+ enum dmx_ts_pes pes_type;
+
+ int cc;
+ int pusi_seen; /* prevents feeding of garbage from previous section */
+
+ u16 peslen;
+
+ struct list_head list_head;
+ unsigned int index; /* a unique index for each feed (can be used as hardware pid filter index) */
+};
+
+struct dvb_demux {
+ struct dmx_demux dmx;
+ void *priv;
+ int filternum;
+ int feednum;
+ int (*start_feed)(struct dvb_demux_feed *feed);
+ int (*stop_feed)(struct dvb_demux_feed *feed);
+ int (*write_to_decoder)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ u32 (*check_crc32)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ void (*memcopy)(struct dvb_demux_feed *feed, u8 *dst,
+ const u8 *src, size_t len);
+
+ int users;
+#define MAX_DVB_DEMUX_USERS 10
+ struct dvb_demux_filter *filter;
+ struct dvb_demux_feed *feed;
+
+ struct list_head frontend_list;
+
+ struct dvb_demux_feed *pesfilter[DMX_TS_PES_OTHER];
+ u16 pids[DMX_TS_PES_OTHER];
+ int playing;
+ int recording;
+
+#define DMX_MAX_PID 0x2000
+ struct list_head feed_list;
+ u8 tsbuf[204];
+ int tsbufp;
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+int dvb_dmx_init(struct dvb_demux *dvbdemux);
+void dvb_dmx_release(struct dvb_demux *dvbdemux);
+void dvb_dmx_swfilter_packets(struct dvb_demux *dvbdmx, const u8 *buf,
+ size_t count);
+void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count);
+void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf,
+ size_t count);
+
+#endif /* _DVB_DEMUX_H_ */
diff --git a/v4l/kernel-2.6.21/dvb_frontend.h b/v4l/kernel-2.6.21/dvb_frontend.h
new file mode 100644
index 0000000..f233d78
--- /dev/null
+++ b/v4l/kernel-2.6.21/dvb_frontend.h
@@ -0,0 +1,169 @@
+/*
+ * dvb_frontend.h
+ *
+ * Copyright (C) 2001 convergence integrated media GmbH
+ * Copyright (C) 2004 convergence GmbH
+ *
+ * Written by Ralph Metzler
+ * Overhauled by Holger Waechtler
+ * Kernel I2C stuff by Michael Hunold <hunold@convergence.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_FRONTEND_H_
+#define _DVB_FRONTEND_H_
+
+#include <linux/types.h>
+#include <linux/sched.h>
+#include <linux/ioctl.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/delay.h>
+
+#include <linux/dvb/frontend.h>
+
+#include "dvbdev.h"
+
+struct dvb_frontend_tune_settings {
+ int min_delay_ms;
+ int step_size;
+ int max_drift;
+ struct dvb_frontend_parameters parameters;
+};
+
+struct dvb_frontend;
+
+struct dvb_tuner_info {
+ char name[128];
+
+ u32 frequency_min;
+ u32 frequency_max;
+ u32 frequency_step;
+
+ u32 bandwidth_min;
+ u32 bandwidth_max;
+ u32 bandwidth_step;
+};
+
+struct dvb_tuner_ops {
+
+ struct dvb_tuner_info info;
+
+ int (*release)(struct dvb_frontend *fe);
+ int (*init)(struct dvb_frontend *fe);
+ int (*sleep)(struct dvb_frontend *fe);
+
+ /** This is for simple PLLs - set all parameters in one go. */
+ int (*set_params)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
+
+ /** This is support for demods like the mt352 - fills out the supplied buffer with what to write. */
+ int (*calc_regs)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p, u8 *buf, int buf_len);
+
+ int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency);
+ int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth);
+
+#define TUNER_STATUS_LOCKED 1
+ int (*get_status)(struct dvb_frontend *fe, u32 *status);
+
+ /** These are provided seperately from set_params in order to facilitate silicon
+ * tuners which require sophisticated tuning loops, controlling each parameter seperately. */
+ int (*set_frequency)(struct dvb_frontend *fe, u32 frequency);
+ int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
+};
+
+struct dvb_frontend_ops {
+
+ struct dvb_frontend_info info;
+
+ void (*release)(struct dvb_frontend* fe);
+ void (*release_sec)(struct dvb_frontend* fe);
+
+ int (*init)(struct dvb_frontend* fe);
+ int (*sleep)(struct dvb_frontend* fe);
+
+ int (*write)(struct dvb_frontend* fe, u8* buf, int len);
+
+ /* if this is set, it overrides the default swzigzag */
+ int (*tune)(struct dvb_frontend* fe,
+ struct dvb_frontend_parameters* params,
+ unsigned int mode_flags,
+ int *delay,
+ fe_status_t *status);
+ /* get frontend tuning algorithm from the module */
+ int (*get_frontend_algo)(struct dvb_frontend *fe);
+
+ /* these two are only used for the swzigzag code */
+ int (*set_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+ int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings);
+
+ int (*get_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+
+ int (*read_status)(struct dvb_frontend* fe, fe_status_t* status);
+ int (*read_ber)(struct dvb_frontend* fe, u32* ber);
+ int (*read_signal_strength)(struct dvb_frontend* fe, u16* strength);
+ int (*read_snr)(struct dvb_frontend* fe, u16* snr);
+ int (*read_ucblocks)(struct dvb_frontend* fe, u32* ucblocks);
+
+ int (*diseqc_reset_overload)(struct dvb_frontend* fe);
+ int (*diseqc_send_master_cmd)(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd);
+ int (*diseqc_recv_slave_reply)(struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply);
+ int (*diseqc_send_burst)(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd);
+ int (*set_tone)(struct dvb_frontend* fe, fe_sec_tone_mode_t tone);
+ int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
+ int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg);
+ int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
+ int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
+ int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);
+
+ struct dvb_tuner_ops tuner_ops;
+};
+
+#define MAX_EVENT 8
+
+struct dvb_fe_events {
+ struct dvb_frontend_event events[MAX_EVENT];
+ int eventw;
+ int eventr;
+ int overflow;
+ wait_queue_head_t wait_queue;
+ struct semaphore sem;
+};
+
+struct dvb_frontend {
+ struct dvb_frontend_ops ops;
+ struct dvb_adapter *dvb;
+ void* demodulator_priv;
+ void* tuner_priv;
+ void* frontend_priv;
+ void* sec_priv;
+};
+
+extern int dvb_register_frontend(struct dvb_adapter* dvb,
+ struct dvb_frontend* fe);
+
+extern int dvb_unregister_frontend(struct dvb_frontend* fe);
+
+extern void dvb_frontend_detach(struct dvb_frontend* fe);
+
+extern void dvb_frontend_reinitialise(struct dvb_frontend *fe);
+
+extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec);
+extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime);
+
+#endif
diff --git a/v4l/kernel-2.6.21/dvb_net.h b/v4l/kernel-2.6.21/dvb_net.h
new file mode 100644
index 0000000..f14e4ca
--- /dev/null
+++ b/v4l/kernel-2.6.21/dvb_net.h
@@ -0,0 +1,46 @@
+/*
+ * dvb_net.h
+ *
+ * Copyright (C) 2001 Ralph Metzler for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_NET_H_
+#define _DVB_NET_H_
+
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/inetdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/skbuff.h>
+
+#include "dvbdev.h"
+
+#define DVB_NET_DEVICES_MAX 10
+
+struct dvb_net {
+ struct dvb_device *dvbdev;
+ struct net_device *device[DVB_NET_DEVICES_MAX];
+ int state[DVB_NET_DEVICES_MAX];
+ struct dmx_demux *demux;
+};
+
+
+void dvb_net_release(struct dvb_net *);
+int dvb_net_init(struct dvb_adapter *, struct dvb_net *, struct dmx_demux *);
+
+#endif
diff --git a/v4l/kernel-2.6.21/dvb_ringbuffer.h b/v4l/kernel-2.6.21/dvb_ringbuffer.h
new file mode 100644
index 0000000..d97714e
--- /dev/null
+++ b/v4l/kernel-2.6.21/dvb_ringbuffer.h
@@ -0,0 +1,174 @@
+/*
+ *
+ * dvb_ringbuffer.h: ring buffer implementation for the dvb driver
+ *
+ * Copyright (C) 2003 Oliver Endriss
+ * Copyright (C) 2004 Andrew de Quincey
+ *
+ * based on code originally found in av7110.c & dvb_ci.c:
+ * Copyright (C) 1999-2003 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _DVB_RINGBUFFER_H_
+#define _DVB_RINGBUFFER_H_
+
+#include <linux/spinlock.h>
+#include <linux/wait.h>
+
+struct dvb_ringbuffer {
+ u8 *data;
+ ssize_t size;
+ ssize_t pread;
+ ssize_t pwrite;
+ int error;
+
+ wait_queue_head_t queue;
+ spinlock_t lock;
+};
+
+#define DVB_RINGBUFFER_PKTHDRSIZE 3
+
+
+/*
+** Notes:
+** ------
+** (1) For performance reasons read and write routines don't check buffer sizes
+** and/or number of bytes free/available. This has to be done before these
+** routines are called. For example:
+**
+** *** write <buflen> bytes ***
+** free = dvb_ringbuffer_free(rbuf);
+** if (free >= buflen)
+** count = dvb_ringbuffer_write(rbuf, buffer, buflen);
+** else
+** ...
+**
+** *** read min. 1000, max. <bufsize> bytes ***
+** avail = dvb_ringbuffer_avail(rbuf);
+** if (avail >= 1000)
+** count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize), 0);
+** else
+** ...
+**
+** (2) If there is exactly one reader and one writer, there is no need
+** to lock read or write operations.
+** Two or more readers must be locked against each other.
+** Flushing the buffer counts as a read operation.
+** Two or more writers must be locked against each other.
+*/
+
+/* initialize ring buffer, lock and queue */
+extern void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data, size_t len);
+
+/* test whether buffer is empty */
+extern int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf);
+
+/* return the number of free bytes in the buffer */
+extern ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf);
+
+/* return the number of bytes waiting in the buffer */
+extern ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf);
+
+
+/* read routines & macros */
+/* ---------------------- */
+/* flush buffer */
+extern void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf);
+
+/* flush buffer protected by spinlock and wake-up waiting task(s) */
+extern void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf);
+
+/* peek at byte <offs> in the buffer */
+#define DVB_RINGBUFFER_PEEK(rbuf,offs) \
+ (rbuf)->data[((rbuf)->pread+(offs))%(rbuf)->size]
+
+/* advance read ptr by <num> bytes */
+#define DVB_RINGBUFFER_SKIP(rbuf,num) \
+ (rbuf)->pread=((rbuf)->pread+(num))%(rbuf)->size
+
+/*
+** read <len> bytes from ring buffer into <buf>
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf, u8 *buf,
+ size_t len, int usermem);
+
+
+/* write routines & macros */
+/* ----------------------- */
+/* write single byte to ring buffer */
+#define DVB_RINGBUFFER_WRITE_BYTE(rbuf,byte) \
+ { (rbuf)->data[(rbuf)->pwrite]=(byte); \
+ (rbuf)->pwrite=((rbuf)->pwrite+1)%(rbuf)->size; }
+/*
+** write <len> bytes to ring buffer
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf,
+ size_t len);
+
+
+/**
+ * Write a packet into the ringbuffer.
+ *
+ * <rbuf> Ringbuffer to write to.
+ * <buf> Buffer to write.
+ * <len> Length of buffer (currently limited to 65535 bytes max).
+ * returns Number of bytes written, or -EFAULT, -ENOMEM, -EVINAL.
+ */
+extern ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8* buf,
+ size_t len);
+
+/**
+ * Read from a packet in the ringbuffer. Note: unlike dvb_ringbuffer_read(), this
+ * does NOT update the read pointer in the ringbuffer. You must use
+ * dvb_ringbuffer_pkt_dispose() to mark a packet as no longer required.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ * <offset> Offset into packet to read from.
+ * <buf> Destination buffer for data.
+ * <len> Size of destination buffer.
+ * <usermem> Set to 1 if <buf> is in userspace.
+ * returns Number of bytes read, or -EFAULT.
+ */
+extern ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx,
+ int offset, u8* buf, size_t len, int usermem);
+
+/**
+ * Dispose of a packet in the ring buffer.
+ *
+ * <rbuf> Ring buffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ */
+extern void dvb_ringbuffer_pkt_dispose(struct dvb_ringbuffer *rbuf, size_t idx);
+
+/**
+ * Get the index of the next packet in a ringbuffer.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Previous packet index, or -1 to return the first packet index.
+ * <pktlen> On success, will be updated to contain the length of the packet in bytes.
+ * returns Packet index (if >=0), or -1 if no packets available.
+ */
+extern ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf, size_t idx, size_t* pktlen);
+
+
+#endif /* _DVB_RINGBUFFER_H_ */
diff --git a/v4l/kernel-2.6.21/dvbdev.h b/v4l/kernel-2.6.21/dvbdev.h
new file mode 100644
index 0000000..620e788
--- /dev/null
+++ b/v4l/kernel-2.6.21/dvbdev.h
@@ -0,0 +1,127 @@
+/*
+ * dvbdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBDEV_H_
+#define _DVBDEV_H_
+
+#include <linux/types.h>
+#include <linux/poll.h>
+#include <linux/fs.h>
+#include <linux/list.h>
+#include <linux/smp_lock.h>
+
+#define DVB_MAJOR 212
+
+#define DVB_DEVICE_VIDEO 0
+#define DVB_DEVICE_AUDIO 1
+#define DVB_DEVICE_SEC 2
+#define DVB_DEVICE_FRONTEND 3
+#define DVB_DEVICE_DEMUX 4
+#define DVB_DEVICE_DVR 5
+#define DVB_DEVICE_CA 6
+#define DVB_DEVICE_NET 7
+#define DVB_DEVICE_OSD 8
+
+
+struct dvb_adapter {
+ int num;
+ struct list_head list_head;
+ struct list_head device_list;
+ const char *name;
+ u8 proposed_mac [6];
+ void* priv;
+
+ struct device *device;
+
+ struct module *module;
+};
+
+
+struct dvb_device {
+ struct list_head list_head;
+ struct file_operations *fops;
+ struct dvb_adapter *adapter;
+ int type;
+ u32 id;
+
+ /* in theory, 'users' can vanish now,
+ but I don't want to change too much now... */
+ int readers;
+ int writers;
+ int users;
+
+ /* don't really need those !? -- FIXME: use video_usercopy */
+ int (*kernel_ioctl)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg);
+
+ void *priv;
+};
+
+
+extern int dvb_register_adapter (struct dvb_adapter *adap, const char *name, struct module *module, struct device *device);
+extern int dvb_unregister_adapter (struct dvb_adapter *adap);
+
+extern int dvb_register_device (struct dvb_adapter *adap,
+ struct dvb_device **pdvbdev,
+ const struct dvb_device *template,
+ void *priv,
+ int type);
+
+extern void dvb_unregister_device (struct dvb_device *dvbdev);
+
+extern int dvb_generic_open (struct inode *inode, struct file *file);
+extern int dvb_generic_release (struct inode *inode, struct file *file);
+extern int dvb_generic_ioctl (struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg);
+
+/* we don't mess with video_usercopy() any more,
+we simply define out own dvb_usercopy(), which will hopefully become
+generic_usercopy() someday... */
+
+extern int dvb_usercopy(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg,
+ int (*func)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg));
+
+/** generic DVB attach function. */
+#ifdef CONFIG_DVB_CORE_ATTACH
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ void *__r = NULL; \
+ typeof(&FUNCTION) __a = symbol_request(FUNCTION); \
+ if (__a) { \
+ __r = (void *) __a(ARGS); \
+ if (__r == NULL) \
+ symbol_put(FUNCTION); \
+ } else { \
+ printk(KERN_ERR "DVB: Unable to find symbol "#FUNCTION"()\n"); \
+ } \
+ __r; \
+})
+
+#else
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ FUNCTION(ARGS); \
+})
+
+#endif
+
+#endif /* #ifndef _DVBDEV_H_ */
diff --git a/v4l/kernel-2.6.22/demux.h b/v4l/kernel-2.6.22/demux.h
new file mode 100644
index 0000000..0c1d87c
--- /dev/null
+++ b/v4l/kernel-2.6.22/demux.h
@@ -0,0 +1,278 @@
+/*
+ * demux.h
+ *
+ * Copyright (c) 2002 Convergence GmbH
+ *
+ * based on code:
+ * Copyright (c) 2000 Nokia Research Center
+ * Tampere, FINLAND
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __DEMUX_H
+#define __DEMUX_H
+
+#include <linux/types.h>
+#include <linux/errno.h>
+#include <linux/list.h>
+#include <linux/time.h>
+#include <linux/dvb/dmx.h>
+
+/*--------------------------------------------------------------------------*/
+/* Common definitions */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * DMX_MAX_FILTER_SIZE: Maximum length (in bytes) of a section/PES filter.
+ */
+
+#ifndef DMX_MAX_FILTER_SIZE
+#define DMX_MAX_FILTER_SIZE 18
+#endif
+
+/*
+ * DMX_MAX_SECFEED_SIZE: Maximum length (in bytes) of a private section feed filter.
+ */
+
+#ifndef DMX_MAX_SECTION_SIZE
+#define DMX_MAX_SECTION_SIZE 4096
+#endif
+#ifndef DMX_MAX_SECFEED_SIZE
+#define DMX_MAX_SECFEED_SIZE (DMX_MAX_SECTION_SIZE + 188)
+#endif
+
+
+/*
+ * enum dmx_success: Success codes for the Demux Callback API.
+ */
+
+enum dmx_success {
+ DMX_OK = 0, /* Received Ok */
+ DMX_LENGTH_ERROR, /* Incorrect length */
+ DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */
+ DMX_CRC_ERROR, /* Incorrect CRC */
+ DMX_FRAME_ERROR, /* Frame alignment error */
+ DMX_FIFO_ERROR, /* Receiver FIFO overrun */
+ DMX_MISSED_ERROR /* Receiver missed packet */
+} ;
+
+/*--------------------------------------------------------------------------*/
+/* TS packet reception */
+/*--------------------------------------------------------------------------*/
+
+/* TS filter type for set() */
+
+#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */
+#define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS
+ payload (<=184 bytes per packet) to callback */
+#define TS_DECODER 4 /* send stream to built-in decoder (if present) */
+
+/* PES type for filters which write to built-in decoder */
+/* these should be kept identical to the types in dmx.h */
+
+enum dmx_ts_pes
+{ /* also send packets to decoder (if it exists) */
+ DMX_TS_PES_AUDIO0,
+ DMX_TS_PES_VIDEO0,
+ DMX_TS_PES_TELETEXT0,
+ DMX_TS_PES_SUBTITLE0,
+ DMX_TS_PES_PCR0,
+
+ DMX_TS_PES_AUDIO1,
+ DMX_TS_PES_VIDEO1,
+ DMX_TS_PES_TELETEXT1,
+ DMX_TS_PES_SUBTITLE1,
+ DMX_TS_PES_PCR1,
+
+ DMX_TS_PES_AUDIO2,
+ DMX_TS_PES_VIDEO2,
+ DMX_TS_PES_TELETEXT2,
+ DMX_TS_PES_SUBTITLE2,
+ DMX_TS_PES_PCR2,
+
+ DMX_TS_PES_AUDIO3,
+ DMX_TS_PES_VIDEO3,
+ DMX_TS_PES_TELETEXT3,
+ DMX_TS_PES_SUBTITLE3,
+ DMX_TS_PES_PCR3,
+
+ DMX_TS_PES_OTHER
+};
+
+#define DMX_TS_PES_AUDIO DMX_TS_PES_AUDIO0
+#define DMX_TS_PES_VIDEO DMX_TS_PES_VIDEO0
+#define DMX_TS_PES_TELETEXT DMX_TS_PES_TELETEXT0
+#define DMX_TS_PES_SUBTITLE DMX_TS_PES_SUBTITLE0
+#define DMX_TS_PES_PCR DMX_TS_PES_PCR0
+
+
+struct dmx_ts_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux *parent; /* Back-pointer */
+ void *priv; /* Pointer to private data of the API client */
+ int (*set) (struct dmx_ts_feed *feed,
+ u16 pid,
+ int type,
+ enum dmx_ts_pes pes_type,
+ size_t circular_buffer_size,
+ struct timespec timeout);
+ int (*start_filtering) (struct dmx_ts_feed* feed);
+ int (*stop_filtering) (struct dmx_ts_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Section reception */
+/*--------------------------------------------------------------------------*/
+
+struct dmx_section_filter {
+ u8 filter_value [DMX_MAX_FILTER_SIZE];
+ u8 filter_mask [DMX_MAX_FILTER_SIZE];
+ u8 filter_mode [DMX_MAX_FILTER_SIZE];
+ struct dmx_section_feed* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+};
+
+struct dmx_section_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+
+ int check_crc;
+ u32 crc_val;
+
+ u8 *secbuf;
+ u8 secbuf_base[DMX_MAX_SECFEED_SIZE];
+ u16 secbufp, seclen, tsfeedp;
+
+ int (*set) (struct dmx_section_feed* feed,
+ u16 pid,
+ size_t circular_buffer_size,
+ int check_crc);
+ int (*allocate_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter** filter);
+ int (*release_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter* filter);
+ int (*start_filtering) (struct dmx_section_feed* feed);
+ int (*stop_filtering) (struct dmx_section_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Callback functions */
+/*--------------------------------------------------------------------------*/
+
+typedef int (*dmx_ts_cb) ( const u8 * buffer1,
+ size_t buffer1_length,
+ const u8 * buffer2,
+ size_t buffer2_length,
+ struct dmx_ts_feed* source,
+ enum dmx_success success);
+
+typedef int (*dmx_section_cb) ( const u8 * buffer1,
+ size_t buffer1_len,
+ const u8 * buffer2,
+ size_t buffer2_len,
+ struct dmx_section_filter * source,
+ enum dmx_success success);
+
+/*--------------------------------------------------------------------------*/
+/* DVB Front-End */
+/*--------------------------------------------------------------------------*/
+
+enum dmx_frontend_source {
+ DMX_MEMORY_FE,
+ DMX_FRONTEND_0,
+ DMX_FRONTEND_1,
+ DMX_FRONTEND_2,
+ DMX_FRONTEND_3,
+ DMX_STREAM_0, /* external stream input, e.g. LVDS */
+ DMX_STREAM_1,
+ DMX_STREAM_2,
+ DMX_STREAM_3
+};
+
+struct dmx_frontend {
+ struct list_head connectivity_list; /* List of front-ends that can
+ be connected to a particular
+ demux */
+ enum dmx_frontend_source source;
+};
+
+/*--------------------------------------------------------------------------*/
+/* MPEG-2 TS Demux */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * Flags OR'ed in the capabilities field of struct dmx_demux.
+ */
+
+#define DMX_TS_FILTERING 1
+#define DMX_PES_FILTERING 2
+#define DMX_SECTION_FILTERING 4
+#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */
+#define DMX_CRC_CHECKING 16
+#define DMX_TS_DESCRAMBLING 32
+
+/*
+ * Demux resource type identifier.
+*/
+
+/*
+ * DMX_FE_ENTRY(): Casts elements in the list of registered
+ * front-ends from the generic type struct list_head
+ * to the type * struct dmx_frontend
+ *.
+*/
+
+#define DMX_FE_ENTRY(list) list_entry(list, struct dmx_frontend, connectivity_list)
+
+struct dmx_demux {
+ u32 capabilities; /* Bitfield of capability flags */
+ struct dmx_frontend* frontend; /* Front-end connected to the demux */
+ void* priv; /* Pointer to private data of the API client */
+ int (*open) (struct dmx_demux* demux);
+ int (*close) (struct dmx_demux* demux);
+ int (*write) (struct dmx_demux* demux, const char* buf, size_t count);
+ int (*allocate_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed** feed,
+ dmx_ts_cb callback);
+ int (*release_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed* feed);
+ int (*allocate_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed** feed,
+ dmx_section_cb callback);
+ int (*release_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed* feed);
+ int (*add_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*remove_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ struct list_head* (*get_frontends) (struct dmx_demux* demux);
+ int (*connect_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*disconnect_frontend) (struct dmx_demux* demux);
+
+ int (*get_pes_pids) (struct dmx_demux* demux, u16 *pids);
+
+ int (*get_caps) (struct dmx_demux* demux, struct dmx_caps *caps);
+
+ int (*set_source) (struct dmx_demux* demux, const dmx_source_t *src);
+
+ int (*get_stc) (struct dmx_demux* demux, unsigned int num,
+ u64 *stc, unsigned int *base);
+};
+
+#endif /* #ifndef __DEMUX_H */
diff --git a/v4l/kernel-2.6.22/dmxdev.h b/v4l/kernel-2.6.22/dmxdev.h
new file mode 100644
index 0000000..29746e7
--- /dev/null
+++ b/v4l/kernel-2.6.22/dmxdev.h
@@ -0,0 +1,110 @@
+/*
+ * dmxdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DMXDEV_H_
+#define _DMXDEV_H_
+
+#include <linux/types.h>
+#include <linux/spinlock.h>
+#include <linux/kernel.h>
+#include <linux/timer.h>
+#include <linux/wait.h>
+#include <linux/fs.h>
+#include <linux/string.h>
+#include <linux/mutex.h>
+
+#include <linux/dvb/dmx.h>
+
+#include "dvbdev.h"
+#include "demux.h"
+#include "dvb_ringbuffer.h"
+
+enum dmxdev_type {
+ DMXDEV_TYPE_NONE,
+ DMXDEV_TYPE_SEC,
+ DMXDEV_TYPE_PES,
+};
+
+enum dmxdev_state {
+ DMXDEV_STATE_FREE,
+ DMXDEV_STATE_ALLOCATED,
+ DMXDEV_STATE_SET,
+ DMXDEV_STATE_GO,
+ DMXDEV_STATE_DONE,
+ DMXDEV_STATE_TIMEDOUT
+};
+
+struct dmxdev_filter {
+ union {
+ struct dmx_section_filter *sec;
+ } filter;
+
+ union {
+ struct dmx_ts_feed *ts;
+ struct dmx_section_feed *sec;
+ } feed;
+
+ union {
+ struct dmx_sct_filter_params sec;
+ struct dmx_pes_filter_params pes;
+ } params;
+
+ enum dmxdev_type type;
+ enum dmxdev_state state;
+ struct dmxdev *dev;
+ struct dvb_ringbuffer buffer;
+
+ struct mutex mutex;
+
+ /* only for sections */
+ struct timer_list timer;
+ int todo;
+ u8 secheader[3];
+};
+
+
+struct dmxdev {
+ struct dvb_device *dvbdev;
+ struct dvb_device *dvr_dvbdev;
+
+ struct dmxdev_filter *filter;
+ struct dmx_demux *demux;
+
+ int filternum;
+ int capabilities;
+
+ unsigned int exit:1;
+#define DMXDEV_CAP_DUPLEX 1
+ struct dmx_frontend *dvr_orig_fe;
+
+ struct dvb_ringbuffer dvr_buffer;
+#define DVR_BUFFER_SIZE (10*188*1024)
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+
+int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *);
+void dvb_dmxdev_release(struct dmxdev *dmxdev);
+
+#endif /* _DMXDEV_H_ */
diff --git a/v4l/kernel-2.6.22/dvb-pll.h b/v4l/kernel-2.6.22/dvb-pll.h
new file mode 100644
index 0000000..5209f46
--- /dev/null
+++ b/v4l/kernel-2.6.22/dvb-pll.h
@@ -0,0 +1,81 @@
+/*
+ * descriptions + helper functions for simple dvb plls.
+ */
+
+#ifndef __DVB_PLL_H__
+#define __DVB_PLL_H__
+
+#include <linux/i2c.h>
+#include "dvb_frontend.h"
+
+struct dvb_pll_desc {
+ char *name;
+ u32 min;
+ u32 max;
+ u32 iffreq;
+ void (*setbw)(u8 *buf, u32 freq, int bandwidth);
+ u8 *initdata;
+ u8 *sleepdata;
+ int count;
+ struct {
+ u32 limit;
+ u32 stepsize;
+ u8 config;
+ u8 cb;
+ } entries[12];
+};
+
+extern struct dvb_pll_desc dvb_pll_thomson_dtt7579;
+extern struct dvb_pll_desc dvb_pll_thomson_dtt759x;
+extern struct dvb_pll_desc dvb_pll_thomson_dtt7610;
+extern struct dvb_pll_desc dvb_pll_lg_z201;
+extern struct dvb_pll_desc dvb_pll_microtune_4042;
+extern struct dvb_pll_desc dvb_pll_thomson_dtt761x;
+extern struct dvb_pll_desc dvb_pll_unknown_1;
+
+extern struct dvb_pll_desc dvb_pll_tua6010xs;
+extern struct dvb_pll_desc dvb_pll_env57h1xd5;
+extern struct dvb_pll_desc dvb_pll_tua6034;
+extern struct dvb_pll_desc dvb_pll_lg_tdvs_h06xf;
+extern struct dvb_pll_desc dvb_pll_tda665x;
+extern struct dvb_pll_desc dvb_pll_fmd1216me;
+extern struct dvb_pll_desc dvb_pll_tded4;
+
+extern struct dvb_pll_desc dvb_pll_tuv1236d;
+extern struct dvb_pll_desc dvb_pll_tdhu2;
+extern struct dvb_pll_desc dvb_pll_samsung_tbmv;
+extern struct dvb_pll_desc dvb_pll_philips_sd1878_tda8261;
+extern struct dvb_pll_desc dvb_pll_philips_td1316;
+
+extern struct dvb_pll_desc dvb_pll_thomson_fe6600;
+extern struct dvb_pll_desc dvb_pll_opera1;
+
+extern int dvb_pll_configure(struct dvb_pll_desc *desc, u8 *buf,
+ u32 freq, int bandwidth);
+
+/**
+ * Attach a dvb-pll to the supplied frontend structure.
+ *
+ * @param fe Frontend to attach to.
+ * @param pll_addr i2c address of the PLL (if used).
+ * @param i2c i2c adapter to use (set to NULL if not used).
+ * @param desc dvb_pll_desc to use.
+ * @return Frontend pointer on success, NULL on failure
+ */
+#if defined(CONFIG_DVB_PLL) || (defined(CONFIG_DVB_PLL_MODULE) && defined(MODULE))
+extern struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ struct dvb_pll_desc *desc);
+#else
+static inline struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ struct dvb_pll_desc *desc)
+{
+ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __FUNCTION__);
+ return NULL;
+}
+#endif
+
+#endif
diff --git a/v4l/kernel-2.6.22/dvb-usb-ids.h b/v4l/kernel-2.6.22/dvb-usb-ids.h
new file mode 100644
index 0000000..4030816
--- /dev/null
+++ b/v4l/kernel-2.6.22/dvb-usb-ids.h
@@ -0,0 +1,155 @@
+/* dvb-usb-ids.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de) see
+ * dvb-usb-init.c for copyright information.
+ *
+ * a header file containing define's for the USB device supported by the
+ * various drivers.
+ */
+#ifndef _DVB_USB_IDS_H_
+#define _DVB_USB_IDS_H_
+
+/* Vendor IDs */
+#define USB_VID_ADSTECH 0x06e1
+#define USB_VID_ALCOR_MICRO 0x058f
+#define USB_VID_ANCHOR 0x0547
+#define USB_VID_ANUBIS_ELECTRONIC 0x10fd
+#define USB_VID_AVERMEDIA 0x07ca
+#define USB_VID_COMPRO 0x185b
+#define USB_VID_COMPRO_UNK 0x145f
+#define USB_VID_CYPRESS 0x04b4
+#define USB_VID_DIBCOM 0x10b8
+#define USB_VID_DPOSH 0x1498
+#define USB_VID_DVICO 0x0fe9
+#define USB_VID_EMPIA 0xeb1a
+#define USB_VID_GENPIX 0x09c0
+#define USB_VID_GRANDTEC 0x5032
+#define USB_VID_HANFTEK 0x15f4
+#define USB_VID_HAUPPAUGE 0x2040
+#define USB_VID_HYPER_PALTEK 0x1025
+#define USB_VID_KWORLD 0xeb2a
+#define USB_VID_KYE 0x0458
+#define USB_VID_LEADTEK 0x0413
+#define USB_VID_LITEON 0x04ca
+#define USB_VID_MEDION 0x1660
+#define USB_VID_MSI 0x0db0
+#define USB_VID_OPERA1 0x695c
+#define USB_VID_PINNACLE 0x2304
+#define USB_VID_VISIONPLUS 0x13d3
+#define USB_VID_TWINHAN 0x1822
+#define USB_VID_ULTIMA_ELECTRONIC 0x05d8
+#define USB_VID_UNIWILL 0x1584
+#define USB_VID_WIDEVIEW 0x14aa
+
+/* Product IDs */
+#define USB_PID_ADSTECH_USB2_COLD 0xa333
+#define USB_PID_ADSTECH_USB2_WARM 0xa334
+#define USB_PID_AVERMEDIA_DVBT_USB_COLD 0x0001
+#define USB_PID_AVERMEDIA_DVBT_USB_WARM 0x0002
+#define USB_PID_AVERMEDIA_DVBT_USB2_COLD 0xa800
+#define USB_PID_AVERMEDIA_DVBT_USB2_WARM 0xa801
+#define USB_PID_COMPRO_DVBU2000_COLD 0xd000
+#define USB_PID_COMPRO_DVBU2000_WARM 0xd001
+#define USB_PID_COMPRO_DVBU2000_UNK_COLD 0x010c
+#define USB_PID_COMPRO_DVBU2000_UNK_WARM 0x010d
+#define USB_PID_COMPRO_VIDEOMATE_U500 0x1e78
+#define USB_PID_DIBCOM_HOOK_DEFAULT 0x0064
+#define USB_PID_DIBCOM_HOOK_DEFAULT_REENUM 0x0065
+#define USB_PID_DIBCOM_MOD3000_COLD 0x0bb8
+#define USB_PID_DIBCOM_MOD3000_WARM 0x0bb9
+#define USB_PID_DIBCOM_MOD3001_COLD 0x0bc6
+#define USB_PID_DIBCOM_MOD3001_WARM 0x0bc7
+#define USB_PID_DIBCOM_STK7700P 0x1e14
+#define USB_PID_DIBCOM_STK7700P_PC 0x1e78
+#define USB_PID_DIBCOM_ANCHOR_2135_COLD 0x2131
+#define USB_PID_DPOSH_M9206_COLD 0x9206
+#define USB_PID_DPOSH_M9206_WARM 0xa090
+#define USB_PID_UNIWILL_STK7700P 0x6003
+#define USB_PID_GRANDTEC_DVBT_USB_COLD 0x0fa0
+#define USB_PID_GRANDTEC_DVBT_USB_WARM 0x0fa1
+#define USB_PID_KWORLD_VSTREAM_COLD 0x17de
+#define USB_PID_KWORLD_VSTREAM_WARM 0x17df
+#define USB_PID_TWINHAN_VP7041_COLD 0x3201
+#define USB_PID_TWINHAN_VP7041_WARM 0x3202
+#define USB_PID_TWINHAN_VP7020_COLD 0x3203
+#define USB_PID_TWINHAN_VP7020_WARM 0x3204
+#define USB_PID_TWINHAN_VP7045_COLD 0x3205
+#define USB_PID_TWINHAN_VP7045_WARM 0x3206
+#define USB_PID_TWINHAN_VP7021_COLD 0x3207
+#define USB_PID_TWINHAN_VP7021_WARM 0x3208
+#define USB_PID_DNTV_TINYUSB2_COLD 0x3223
+#define USB_PID_DNTV_TINYUSB2_WARM 0x3224
+#define USB_PID_ULTIMA_TVBOX_COLD 0x8105
+#define USB_PID_ULTIMA_TVBOX_WARM 0x8106
+#define USB_PID_ULTIMA_TVBOX_AN2235_COLD 0x8107
+#define USB_PID_ULTIMA_TVBOX_AN2235_WARM 0x8108
+#define USB_PID_ULTIMA_TVBOX_ANCHOR_COLD 0x2235
+#define USB_PID_ULTIMA_TVBOX_USB2_COLD 0x8109
+#define USB_PID_ULTIMA_TVBOX_USB2_WARM 0x810a
+#define USB_PID_ARTEC_T14_COLD 0x810b
+#define USB_PID_ARTEC_T14_WARM 0x810c
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_COLD 0x8613
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_WARM 0x1002
+#define USB_PID_UNK_HYPER_PALTEK_COLD 0x005e
+#define USB_PID_UNK_HYPER_PALTEK_WARM 0x005f
+#define USB_PID_HANFTEK_UMT_010_COLD 0x0001
+#define USB_PID_HANFTEK_UMT_010_WARM 0x0015
+#define USB_PID_DTT200U_COLD 0x0201
+#define USB_PID_DTT200U_WARM 0x0301
+#define USB_PID_WT220U_ZAP250_COLD 0x0220
+#define USB_PID_WT220U_COLD 0x0222
+#define USB_PID_WT220U_WARM 0x0221
+#define USB_PID_WT220U_FC_COLD 0x0225
+#define USB_PID_WT220U_FC_WARM 0x0226
+#define USB_PID_WT220U_ZL0353_COLD 0x022a
+#define USB_PID_WT220U_ZL0353_WARM 0x022b
+#define USB_PID_WINTV_NOVA_T_USB2_COLD 0x9300
+#define USB_PID_WINTV_NOVA_T_USB2_WARM 0x9301
+#define USB_PID_HAUPPAUGE_NOVA_T_500 0x9941
+#define USB_PID_HAUPPAUGE_NOVA_T_500_2 0x9950
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK 0x7050
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK_2 0x7060
+#define USB_PID_AVERMEDIA_VOLAR 0xa807
+#define USB_PID_AVERMEDIA_VOLAR_2 0xb808
+#define USB_PID_NEBULA_DIGITV 0x0201
+#define USB_PID_DVICO_BLUEBIRD_LGDT 0xd820
+#define USB_PID_DVICO_BLUEBIRD_LG064F_COLD 0xd500
+#define USB_PID_DVICO_BLUEBIRD_LG064F_WARM 0xd501
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_COLD 0xdb00
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_WARM 0xdb01
+#define USB_PID_DVICO_BLUEBIRD_TH7579_COLD 0xdb10
+#define USB_PID_DVICO_BLUEBIRD_TH7579_WARM 0xdb11
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_COLD 0xdb50
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_WARM 0xdb51
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_COLD 0xdb58
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_WARM 0xdb59
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_COLD 0xdb54
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_WARM 0xdb55
+#define USB_PID_MEDION_MD95700 0x0932
+#define USB_PID_MSI_MEGASKY580 0x5580
+#define USB_PID_MSI_MEGASKY580_55801 0x5581
+#define USB_PID_KYE_DVB_T_COLD 0x701e
+#define USB_PID_KYE_DVB_T_WARM 0x701f
+#define USB_PID_PCTV_200E 0x020e
+#define USB_PID_PCTV_400E 0x020f
+#define USB_PID_PCTV_450E 0x0222
+#define USB_PID_LITEON_DVB_T_COLD 0xf000
+#define USB_PID_LITEON_DVB_T_WARM 0xf001
+#define USB_PID_DIGIVOX_MINI_SL_COLD 0xe360
+#define USB_PID_DIGIVOX_MINI_SL_WARM 0xe361
+#define USB_PID_GRANDTEC_DVBT_USB2_COLD 0x0bc6
+#define USB_PID_GRANDTEC_DVBT_USB2_WARM 0x0bc7
+#define USB_PID_WINFAST_DTV_DONGLE_COLD 0x6025
+#define USB_PID_WINFAST_DTV_DONGLE_WARM 0x6026
+#define USB_PID_WINFAST_DTV_DONGLE_STK7700P 0x6f00
+#define USB_PID_GENPIX_8PSK_COLD 0x0200
+#define USB_PID_GENPIX_8PSK_WARM 0x0201
+#define USB_PID_SIGMATEK_DVB_110 0x6610
+#define USB_PID_MSI_DIGI_VOX_MINI_II 0x1513
+#define USB_PID_OPERA1_COLD 0x2830
+#define USB_PID_OPERA1_WARM 0x3829
+#define USB_PID_LIFEVIEW_TV_WALKER_TWIN_COLD 0x0514
+#define USB_PID_LIFEVIEW_TV_WALKER_TWIN_WARM 0x0513
+
+
+#endif
diff --git a/v4l/kernel-2.6.22/dvb-usb.h b/v4l/kernel-2.6.22/dvb-usb.h
new file mode 100644
index 0000000..6f824a5
--- /dev/null
+++ b/v4l/kernel-2.6.22/dvb-usb.h
@@ -0,0 +1,408 @@
+/* dvb-usb.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * the headerfile, all dvb-usb-drivers have to include.
+ *
+ * TODO: clean-up the structures for unused fields and update the comments
+ */
+#ifndef __DVB_USB_H__
+#define __DVB_USB_H__
+
+#include <linux/input.h>
+#include <linux/usb.h>
+#include <linux/firmware.h>
+#include <linux/mutex.h>
+
+#include "dvb_frontend.h"
+#include "dvb_demux.h"
+#include "dvb_net.h"
+#include "dmxdev.h"
+
+#include "dvb-pll.h"
+
+#include "dvb-usb-ids.h"
+
+/* debug */
+#ifdef CONFIG_DVB_USB_DEBUG
+#define dprintk(var,level,args...) \
+ do { if ((var & level)) { printk(args); } } while (0)
+
+#define debug_dump(b,l,func) {\
+ int loop_; \
+ for (loop_ = 0; loop_ < l; loop_++) func("%02x ", b[loop_]); \
+ func("\n");\
+}
+#define DVB_USB_DEBUG_STATUS
+#else
+#define dprintk(args...)
+#define debug_dump(b,l,func)
+
+#define DVB_USB_DEBUG_STATUS " (debugging is not enabled)"
+
+#endif
+
+/* generic log methods - taken from usb.h */
+#ifndef DVB_USB_LOG_PREFIX
+ #define DVB_USB_LOG_PREFIX "dvb-usb (please define a log prefix)"
+#endif
+
+#undef err
+#define err(format, arg...) printk(KERN_ERR DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef info
+#define info(format, arg...) printk(KERN_INFO DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef warn
+#define warn(format, arg...) printk(KERN_WARNING DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+
+/**
+ * struct dvb_usb_device_description - name and its according USB IDs
+ * @name: real name of the box, regardless which DVB USB device class is in use
+ * @cold_ids: array of struct usb_device_id which describe the device in
+ * pre-firmware state
+ * @warm_ids: array of struct usb_device_id which describe the device in
+ * post-firmware state
+ *
+ * Each DVB USB device class can have one or more actual devices, this struct
+ * assigns a name to it.
+ */
+struct dvb_usb_device_description {
+ const char *name;
+
+#define DVB_USB_ID_MAX_NUM 15
+ struct usb_device_id *cold_ids[DVB_USB_ID_MAX_NUM];
+ struct usb_device_id *warm_ids[DVB_USB_ID_MAX_NUM];
+};
+
+/**
+ * struct dvb_usb_rc_key - a remote control key and its input-event
+ * @custom: the vendor/custom part of the key
+ * @data: the actual key part
+ * @event: the input event assigned to key identified by custom and data
+ */
+struct dvb_usb_rc_key {
+ u8 custom,data;
+ u32 event;
+};
+
+struct dvb_usb_device;
+struct dvb_usb_adapter;
+struct usb_data_stream;
+
+/**
+ * Properties of USB streaming - TODO this structure should be somewhere else
+ * describes the kind of USB transfer used for data-streaming.
+ * (BULK or ISOC)
+ */
+struct usb_data_stream_properties {
+#define USB_BULK 1
+#define USB_ISOC 2
+ int type;
+ int count;
+ int endpoint;
+
+ union {
+ struct {
+ int buffersize; /* per URB */
+ } bulk;
+ struct {
+ int framesperurb;
+ int framesize;
+ int interval;
+ } isoc;
+ } u;
+};
+
+/**
+ * struct dvb_usb_adapter_properties - properties of a dvb-usb-adapter.
+ * A DVB-USB-Adapter is basically a dvb_adapter which is present on a USB-device.
+ * @caps: capabilities of the DVB USB device.
+ * @pid_filter_count: number of PID filter position in the optional hardware
+ * PID-filter.
+ * @streaming_ctrl: called to start and stop the MPEG2-TS streaming of the
+ * device (not URB submitting/killing).
+ * @pid_filter_ctrl: called to en/disable the PID filter, if any.
+ * @pid_filter: called to set/unset a PID for filtering.
+ * @frontend_attach: called to attach the possible frontends (fill fe-field
+ * of struct dvb_usb_device).
+ * @tuner_attach: called to attach the correct tuner and to fill pll_addr,
+ * pll_desc and pll_init_buf of struct dvb_usb_device).
+ * @stream: configuration of the USB streaming
+ */
+struct dvb_usb_adapter_properties {
+#define DVB_USB_ADAP_HAS_PID_FILTER 0x01
+#define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
+#define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
+#define DVB_USB_ADAP_RECEIVES_204_BYTE_TS 0x08
+ int caps;
+ int pid_filter_count;
+
+ int (*streaming_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
+
+ int (*frontend_attach) (struct dvb_usb_adapter *);
+ int (*tuner_attach) (struct dvb_usb_adapter *);
+
+ struct usb_data_stream_properties stream;
+
+ int size_of_priv;
+};
+
+/**
+ * struct dvb_usb_device_properties - properties of a dvb-usb-device
+ * @usb_ctrl: which USB device-side controller is in use. Needed for firmware
+ * download.
+ * @firmware: name of the firmware file.
+ * @download_firmware: called to download the firmware when the usb_ctrl is
+ * DEVICE_SPECIFIC.
+ * @no_reconnect: device doesn't do a reconnect after downloading the firmware,
+ * so do the warm initialization right after it
+ *
+ * @size_of_priv: how many bytes shall be allocated for the private field
+ * of struct dvb_usb_device.
+ *
+ * @power_ctrl: called to enable/disable power of the device.
+ * @read_mac_address: called to read the MAC address of the device.
+ * @identify_state: called to determine the state (cold or warm), when it
+ * is not distinguishable by the USB IDs.
+ *
+ * @rc_key_map: a hard-wired array of struct dvb_usb_rc_key (NULL to disable
+ * remote control handling).
+ * @rc_key_map_size: number of items in @rc_key_map.
+ * @rc_query: called to query an event event.
+ * @rc_interval: time in ms between two queries.
+ *
+ * @i2c_algo: i2c_algorithm if the device has I2CoverUSB.
+ *
+ * @generic_bulk_ctrl_endpoint: most of the DVB USB devices have a generic
+ * endpoint which received control messages with bulk transfers. When this
+ * is non-zero, one can use dvb_usb_generic_rw and dvb_usb_generic_write-
+ * helper functions.
+ *
+ * @num_device_descs: number of struct dvb_usb_device_description in @devices
+ * @devices: array of struct dvb_usb_device_description compatibles with these
+ * properties.
+ */
+#define MAX_NO_OF_ADAPTER_PER_DEVICE 2
+struct dvb_usb_device_properties {
+
+#define DVB_USB_IS_AN_I2C_ADAPTER 0x01
+ int caps;
+
+#define DEVICE_SPECIFIC 0
+#define CYPRESS_AN2135 1
+#define CYPRESS_AN2235 2
+#define CYPRESS_FX2 3
+ int usb_ctrl;
+ int (*download_firmware) (struct usb_device *, const struct firmware *);
+ const char firmware[FIRMWARE_NAME_MAX];
+ int no_reconnect;
+
+ int size_of_priv;
+
+ int num_adapters;
+ struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ int (*power_ctrl) (struct dvb_usb_device *, int);
+ int (*read_mac_address) (struct dvb_usb_device *, u8 []);
+ int (*identify_state) (struct usb_device *, struct dvb_usb_device_properties *,
+ struct dvb_usb_device_description **, int *);
+
+/* remote control properties */
+#define REMOTE_NO_KEY_PRESSED 0x00
+#define REMOTE_KEY_PRESSED 0x01
+#define REMOTE_KEY_REPEAT 0x02
+ struct dvb_usb_rc_key *rc_key_map;
+ int rc_key_map_size;
+ int (*rc_query) (struct dvb_usb_device *, u32 *, int *);
+ int rc_interval;
+
+ struct i2c_algorithm *i2c_algo;
+
+ int generic_bulk_ctrl_endpoint;
+
+ int num_device_descs;
+ struct dvb_usb_device_description devices[9];
+};
+
+/**
+ * struct usb_data_stream - generic object of an USB stream
+ * @buf_num: number of buffer allocated.
+ * @buf_size: size of each buffer in buf_list.
+ * @buf_list: array containing all allocate buffers for streaming.
+ * @dma_addr: list of dma_addr_t for each buffer in buf_list.
+ *
+ * @urbs_initialized: number of URBs initialized.
+ * @urbs_submitted: number of URBs submitted.
+ */
+#define MAX_NO_URBS_FOR_DATA_STREAM 10
+struct usb_data_stream {
+ struct usb_device *udev;
+ struct usb_data_stream_properties props;
+
+#define USB_STATE_INIT 0x00
+#define USB_STATE_URB_BUF 0x01
+ int state;
+
+ void (*complete) (struct usb_data_stream *, u8 *, size_t);
+
+ struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ int buf_num;
+ unsigned long buf_size;
+ u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
+
+ int urbs_initialized;
+ int urbs_submitted;
+
+ void *user_priv;
+};
+
+/**
+ * struct dvb_usb_adapter - a DVB adapter on a USB device
+ * @id: index of this adapter (starting with 0).
+ *
+ * @feedcount: number of reqested feeds (used for streaming-activation)
+ * @pid_filtering: is hardware pid_filtering used or not.
+ *
+ * @pll_addr: I2C address of the tuner for programming
+ * @pll_init: array containing the initialization buffer
+ * @pll_desc: pointer to the appropriate struct dvb_pll_desc
+ * @tuner_pass_ctrl: called to (de)activate tuner passthru of the demod or the board
+ *
+ * @dvb_adap: device's dvb_adapter.
+ * @dmxdev: device's dmxdev.
+ * @demux: device's software demuxer.
+ * @dvb_net: device's dvb_net interfaces.
+ * @dvb_frontend: device's frontend.
+ * @max_feed_count: how many feeds can be handled simultaneously by this
+ * device
+ *
+ * @fe_init: rerouted frontend-init (wakeup) function.
+ * @fe_sleep: rerouted frontend-sleep function.
+ *
+ * @stream: the usb data stream.
+ */
+struct dvb_usb_adapter {
+ struct dvb_usb_device *dev;
+ struct dvb_usb_adapter_properties props;
+
+#define DVB_USB_ADAP_STATE_INIT 0x000
+#define DVB_USB_ADAP_STATE_DVB 0x001
+ int state;
+
+ u8 id;
+
+ int feedcount;
+ int pid_filtering;
+
+ /* tuner programming information */
+ u8 pll_addr;
+ u8 pll_init[4];
+ struct dvb_pll_desc *pll_desc;
+ int (*tuner_pass_ctrl) (struct dvb_frontend *, int, u8);
+
+ /* dvb */
+ struct dvb_adapter dvb_adap;
+ struct dmxdev dmxdev;
+ struct dvb_demux demux;
+ struct dvb_net dvb_net;
+ struct dvb_frontend *fe;
+ int max_feed_count;
+
+ int (*fe_init) (struct dvb_frontend *);
+ int (*fe_sleep) (struct dvb_frontend *);
+
+ struct usb_data_stream stream;
+
+ void *priv;
+};
+
+/**
+ * struct dvb_usb_device - object of a DVB USB device
+ * @props: copy of the struct dvb_usb_properties this device belongs to.
+ * @desc: pointer to the device's struct dvb_usb_device_description.
+ * @state: initialization and runtime state of the device.
+ *
+ * @powered: indicated whether the device is power or not.
+ * Powered is in/decremented for each call to modify the state.
+ * @udev: pointer to the device's struct usb_device.
+ *
+ * @usb_mutex: semaphore of USB control messages (reading needs two messages)
+ * @i2c_mutex: semaphore for i2c-transfers
+ *
+ * @i2c_adap: device's i2c_adapter if it uses I2CoverUSB
+ *
+ * @rc_input_dev: input device for the remote control.
+ * @rc_query_work: struct work_struct frequent rc queries
+ * @last_event: last triggered event
+ * @last_state: last state (no, pressed, repeat)
+ * @owner: owner of the dvb_adapter
+ * @priv: private data of the actual driver (allocate by dvb-usb, size defined
+ * in size_of_priv of dvb_usb_properties).
+ */
+struct dvb_usb_device {
+ struct dvb_usb_device_properties props;
+ struct dvb_usb_device_description *desc;
+
+ struct usb_device *udev;
+
+#define DVB_USB_STATE_INIT 0x000
+#define DVB_USB_STATE_I2C 0x001
+#define DVB_USB_STATE_DVB 0x002
+#define DVB_USB_STATE_REMOTE 0x004
+ int state;
+
+ int powered;
+
+ /* locking */
+ struct mutex usb_mutex;
+
+ /* i2c */
+ struct mutex i2c_mutex;
+ struct i2c_adapter i2c_adap;
+
+ int num_adapters_initialized;
+ struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ /* remote control */
+ struct input_dev *rc_input_dev;
+ char rc_phys[64];
+ struct delayed_work rc_query_work;
+ u32 last_event;
+ int last_state;
+
+ struct module *owner;
+
+ void *priv;
+};
+
+extern int dvb_usb_device_init(struct usb_interface *, struct dvb_usb_device_properties *, struct module *, struct dvb_usb_device **);
+extern void dvb_usb_device_exit(struct usb_interface *);
+
+/* the generic read/write method for device control */
+extern int dvb_usb_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16,int);
+extern int dvb_usb_generic_write(struct dvb_usb_device *, u8 *, u16);
+
+/* commonly used remote control parsing */
+extern int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *, u8[], u32 *, int *);
+
+/* commonly used pll init and set functions */
+extern int dvb_usb_tuner_init_i2c(struct dvb_frontend *);
+extern int dvb_usb_tuner_calc_regs(struct dvb_frontend *, struct dvb_frontend_parameters *, u8 *buf, int buf_len);
+extern int dvb_usb_tuner_set_params_i2c(struct dvb_frontend *, struct dvb_frontend_parameters *);
+
+/* commonly used firmware download types and function */
+struct hexline {
+ u8 len;
+ u32 addr;
+ u8 type;
+ u8 data[255];
+ u8 chk;
+};
+extern int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type);
+extern int dvb_usb_get_hexline(const struct firmware *fw, struct hexline *hx, int *pos);
+
+
+#endif
diff --git a/v4l/kernel-2.6.22/dvb_demux.h b/v4l/kernel-2.6.22/dvb_demux.h
new file mode 100644
index 0000000..2c5f915
--- /dev/null
+++ b/v4l/kernel-2.6.22/dvb_demux.h
@@ -0,0 +1,140 @@
+/*
+ * dvb_demux.h: DVB kernel demux API
+ *
+ * Copyright (C) 2000-2001 Marcus Metzler & Ralph Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_DEMUX_H_
+#define _DVB_DEMUX_H_
+
+#include <linux/time.h>
+#include <linux/timer.h>
+#include <linux/spinlock.h>
+#include <linux/mutex.h>
+
+#include "demux.h"
+
+#define DMX_TYPE_TS 0
+#define DMX_TYPE_SEC 1
+#define DMX_TYPE_PES 2
+
+#define DMX_STATE_FREE 0
+#define DMX_STATE_ALLOCATED 1
+#define DMX_STATE_SET 2
+#define DMX_STATE_READY 3
+#define DMX_STATE_GO 4
+
+#define DVB_DEMUX_MASK_MAX 18
+
+struct dvb_demux_filter {
+ struct dmx_section_filter filter;
+ u8 maskandmode[DMX_MAX_FILTER_SIZE];
+ u8 maskandnotmode[DMX_MAX_FILTER_SIZE];
+ int doneq;
+
+ struct dvb_demux_filter *next;
+ struct dvb_demux_feed *feed;
+ int index;
+ int state;
+ int type;
+
+ u16 hw_handle;
+ struct timer_list timer;
+};
+
+#define DMX_FEED_ENTRY(pos) list_entry(pos, struct dvb_demux_feed, list_head)
+
+struct dvb_demux_feed {
+ union {
+ struct dmx_ts_feed ts;
+ struct dmx_section_feed sec;
+ } feed;
+
+ union {
+ dmx_ts_cb ts;
+ dmx_section_cb sec;
+ } cb;
+
+ struct dvb_demux *demux;
+ void *priv;
+ int type;
+ int state;
+ u16 pid;
+ u8 *buffer;
+ int buffer_size;
+
+ struct timespec timeout;
+ struct dvb_demux_filter *filter;
+
+ int ts_type;
+ enum dmx_ts_pes pes_type;
+
+ int cc;
+ int pusi_seen; /* prevents feeding of garbage from previous section */
+
+ u16 peslen;
+
+ struct list_head list_head;
+ unsigned int index; /* a unique index for each feed (can be used as hardware pid filter index) */
+};
+
+struct dvb_demux {
+ struct dmx_demux dmx;
+ void *priv;
+ int filternum;
+ int feednum;
+ int (*start_feed)(struct dvb_demux_feed *feed);
+ int (*stop_feed)(struct dvb_demux_feed *feed);
+ int (*write_to_decoder)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ u32 (*check_crc32)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ void (*memcopy)(struct dvb_demux_feed *feed, u8 *dst,
+ const u8 *src, size_t len);
+
+ int users;
+#define MAX_DVB_DEMUX_USERS 10
+ struct dvb_demux_filter *filter;
+ struct dvb_demux_feed *feed;
+
+ struct list_head frontend_list;
+
+ struct dvb_demux_feed *pesfilter[DMX_TS_PES_OTHER];
+ u16 pids[DMX_TS_PES_OTHER];
+ int playing;
+ int recording;
+
+#define DMX_MAX_PID 0x2000
+ struct list_head feed_list;
+ u8 tsbuf[204];
+ int tsbufp;
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+int dvb_dmx_init(struct dvb_demux *dvbdemux);
+void dvb_dmx_release(struct dvb_demux *dvbdemux);
+void dvb_dmx_swfilter_packets(struct dvb_demux *dvbdmx, const u8 *buf,
+ size_t count);
+void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count);
+void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf,
+ size_t count);
+
+#endif /* _DVB_DEMUX_H_ */
diff --git a/v4l/kernel-2.6.22/dvb_frontend.h b/v4l/kernel-2.6.22/dvb_frontend.h
new file mode 100644
index 0000000..f233d78
--- /dev/null
+++ b/v4l/kernel-2.6.22/dvb_frontend.h
@@ -0,0 +1,169 @@
+/*
+ * dvb_frontend.h
+ *
+ * Copyright (C) 2001 convergence integrated media GmbH
+ * Copyright (C) 2004 convergence GmbH
+ *
+ * Written by Ralph Metzler
+ * Overhauled by Holger Waechtler
+ * Kernel I2C stuff by Michael Hunold <hunold@convergence.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_FRONTEND_H_
+#define _DVB_FRONTEND_H_
+
+#include <linux/types.h>
+#include <linux/sched.h>
+#include <linux/ioctl.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/delay.h>
+
+#include <linux/dvb/frontend.h>
+
+#include "dvbdev.h"
+
+struct dvb_frontend_tune_settings {
+ int min_delay_ms;
+ int step_size;
+ int max_drift;
+ struct dvb_frontend_parameters parameters;
+};
+
+struct dvb_frontend;
+
+struct dvb_tuner_info {
+ char name[128];
+
+ u32 frequency_min;
+ u32 frequency_max;
+ u32 frequency_step;
+
+ u32 bandwidth_min;
+ u32 bandwidth_max;
+ u32 bandwidth_step;
+};
+
+struct dvb_tuner_ops {
+
+ struct dvb_tuner_info info;
+
+ int (*release)(struct dvb_frontend *fe);
+ int (*init)(struct dvb_frontend *fe);
+ int (*sleep)(struct dvb_frontend *fe);
+
+ /** This is for simple PLLs - set all parameters in one go. */
+ int (*set_params)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
+
+ /** This is support for demods like the mt352 - fills out the supplied buffer with what to write. */
+ int (*calc_regs)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p, u8 *buf, int buf_len);
+
+ int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency);
+ int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth);
+
+#define TUNER_STATUS_LOCKED 1
+ int (*get_status)(struct dvb_frontend *fe, u32 *status);
+
+ /** These are provided seperately from set_params in order to facilitate silicon
+ * tuners which require sophisticated tuning loops, controlling each parameter seperately. */
+ int (*set_frequency)(struct dvb_frontend *fe, u32 frequency);
+ int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
+};
+
+struct dvb_frontend_ops {
+
+ struct dvb_frontend_info info;
+
+ void (*release)(struct dvb_frontend* fe);
+ void (*release_sec)(struct dvb_frontend* fe);
+
+ int (*init)(struct dvb_frontend* fe);
+ int (*sleep)(struct dvb_frontend* fe);
+
+ int (*write)(struct dvb_frontend* fe, u8* buf, int len);
+
+ /* if this is set, it overrides the default swzigzag */
+ int (*tune)(struct dvb_frontend* fe,
+ struct dvb_frontend_parameters* params,
+ unsigned int mode_flags,
+ int *delay,
+ fe_status_t *status);
+ /* get frontend tuning algorithm from the module */
+ int (*get_frontend_algo)(struct dvb_frontend *fe);
+
+ /* these two are only used for the swzigzag code */
+ int (*set_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+ int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings);
+
+ int (*get_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+
+ int (*read_status)(struct dvb_frontend* fe, fe_status_t* status);
+ int (*read_ber)(struct dvb_frontend* fe, u32* ber);
+ int (*read_signal_strength)(struct dvb_frontend* fe, u16* strength);
+ int (*read_snr)(struct dvb_frontend* fe, u16* snr);
+ int (*read_ucblocks)(struct dvb_frontend* fe, u32* ucblocks);
+
+ int (*diseqc_reset_overload)(struct dvb_frontend* fe);
+ int (*diseqc_send_master_cmd)(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd);
+ int (*diseqc_recv_slave_reply)(struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply);
+ int (*diseqc_send_burst)(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd);
+ int (*set_tone)(struct dvb_frontend* fe, fe_sec_tone_mode_t tone);
+ int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
+ int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg);
+ int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
+ int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
+ int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);
+
+ struct dvb_tuner_ops tuner_ops;
+};
+
+#define MAX_EVENT 8
+
+struct dvb_fe_events {
+ struct dvb_frontend_event events[MAX_EVENT];
+ int eventw;
+ int eventr;
+ int overflow;
+ wait_queue_head_t wait_queue;
+ struct semaphore sem;
+};
+
+struct dvb_frontend {
+ struct dvb_frontend_ops ops;
+ struct dvb_adapter *dvb;
+ void* demodulator_priv;
+ void* tuner_priv;
+ void* frontend_priv;
+ void* sec_priv;
+};
+
+extern int dvb_register_frontend(struct dvb_adapter* dvb,
+ struct dvb_frontend* fe);
+
+extern int dvb_unregister_frontend(struct dvb_frontend* fe);
+
+extern void dvb_frontend_detach(struct dvb_frontend* fe);
+
+extern void dvb_frontend_reinitialise(struct dvb_frontend *fe);
+
+extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec);
+extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime);
+
+#endif
diff --git a/v4l/kernel-2.6.22/dvb_net.h b/v4l/kernel-2.6.22/dvb_net.h
new file mode 100644
index 0000000..3a3126c
--- /dev/null
+++ b/v4l/kernel-2.6.22/dvb_net.h
@@ -0,0 +1,47 @@
+/*
+ * dvb_net.h
+ *
+ * Copyright (C) 2001 Ralph Metzler for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_NET_H_
+#define _DVB_NET_H_
+
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/inetdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/skbuff.h>
+
+#include "dvbdev.h"
+
+#define DVB_NET_DEVICES_MAX 10
+
+struct dvb_net {
+ struct dvb_device *dvbdev;
+ struct net_device *device[DVB_NET_DEVICES_MAX];
+ int state[DVB_NET_DEVICES_MAX];
+ unsigned int exit:1;
+ struct dmx_demux *demux;
+};
+
+
+void dvb_net_release(struct dvb_net *);
+int dvb_net_init(struct dvb_adapter *, struct dvb_net *, struct dmx_demux *);
+
+#endif
diff --git a/v4l/kernel-2.6.22/dvb_ringbuffer.h b/v4l/kernel-2.6.22/dvb_ringbuffer.h
new file mode 100644
index 0000000..d97714e
--- /dev/null
+++ b/v4l/kernel-2.6.22/dvb_ringbuffer.h
@@ -0,0 +1,174 @@
+/*
+ *
+ * dvb_ringbuffer.h: ring buffer implementation for the dvb driver
+ *
+ * Copyright (C) 2003 Oliver Endriss
+ * Copyright (C) 2004 Andrew de Quincey
+ *
+ * based on code originally found in av7110.c & dvb_ci.c:
+ * Copyright (C) 1999-2003 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _DVB_RINGBUFFER_H_
+#define _DVB_RINGBUFFER_H_
+
+#include <linux/spinlock.h>
+#include <linux/wait.h>
+
+struct dvb_ringbuffer {
+ u8 *data;
+ ssize_t size;
+ ssize_t pread;
+ ssize_t pwrite;
+ int error;
+
+ wait_queue_head_t queue;
+ spinlock_t lock;
+};
+
+#define DVB_RINGBUFFER_PKTHDRSIZE 3
+
+
+/*
+** Notes:
+** ------
+** (1) For performance reasons read and write routines don't check buffer sizes
+** and/or number of bytes free/available. This has to be done before these
+** routines are called. For example:
+**
+** *** write <buflen> bytes ***
+** free = dvb_ringbuffer_free(rbuf);
+** if (free >= buflen)
+** count = dvb_ringbuffer_write(rbuf, buffer, buflen);
+** else
+** ...
+**
+** *** read min. 1000, max. <bufsize> bytes ***
+** avail = dvb_ringbuffer_avail(rbuf);
+** if (avail >= 1000)
+** count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize), 0);
+** else
+** ...
+**
+** (2) If there is exactly one reader and one writer, there is no need
+** to lock read or write operations.
+** Two or more readers must be locked against each other.
+** Flushing the buffer counts as a read operation.
+** Two or more writers must be locked against each other.
+*/
+
+/* initialize ring buffer, lock and queue */
+extern void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data, size_t len);
+
+/* test whether buffer is empty */
+extern int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf);
+
+/* return the number of free bytes in the buffer */
+extern ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf);
+
+/* return the number of bytes waiting in the buffer */
+extern ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf);
+
+
+/* read routines & macros */
+/* ---------------------- */
+/* flush buffer */
+extern void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf);
+
+/* flush buffer protected by spinlock and wake-up waiting task(s) */
+extern void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf);
+
+/* peek at byte <offs> in the buffer */
+#define DVB_RINGBUFFER_PEEK(rbuf,offs) \
+ (rbuf)->data[((rbuf)->pread+(offs))%(rbuf)->size]
+
+/* advance read ptr by <num> bytes */
+#define DVB_RINGBUFFER_SKIP(rbuf,num) \
+ (rbuf)->pread=((rbuf)->pread+(num))%(rbuf)->size
+
+/*
+** read <len> bytes from ring buffer into <buf>
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf, u8 *buf,
+ size_t len, int usermem);
+
+
+/* write routines & macros */
+/* ----------------------- */
+/* write single byte to ring buffer */
+#define DVB_RINGBUFFER_WRITE_BYTE(rbuf,byte) \
+ { (rbuf)->data[(rbuf)->pwrite]=(byte); \
+ (rbuf)->pwrite=((rbuf)->pwrite+1)%(rbuf)->size; }
+/*
+** write <len> bytes to ring buffer
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf,
+ size_t len);
+
+
+/**
+ * Write a packet into the ringbuffer.
+ *
+ * <rbuf> Ringbuffer to write to.
+ * <buf> Buffer to write.
+ * <len> Length of buffer (currently limited to 65535 bytes max).
+ * returns Number of bytes written, or -EFAULT, -ENOMEM, -EVINAL.
+ */
+extern ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8* buf,
+ size_t len);
+
+/**
+ * Read from a packet in the ringbuffer. Note: unlike dvb_ringbuffer_read(), this
+ * does NOT update the read pointer in the ringbuffer. You must use
+ * dvb_ringbuffer_pkt_dispose() to mark a packet as no longer required.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ * <offset> Offset into packet to read from.
+ * <buf> Destination buffer for data.
+ * <len> Size of destination buffer.
+ * <usermem> Set to 1 if <buf> is in userspace.
+ * returns Number of bytes read, or -EFAULT.
+ */
+extern ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx,
+ int offset, u8* buf, size_t len, int usermem);
+
+/**
+ * Dispose of a packet in the ring buffer.
+ *
+ * <rbuf> Ring buffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ */
+extern void dvb_ringbuffer_pkt_dispose(struct dvb_ringbuffer *rbuf, size_t idx);
+
+/**
+ * Get the index of the next packet in a ringbuffer.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Previous packet index, or -1 to return the first packet index.
+ * <pktlen> On success, will be updated to contain the length of the packet in bytes.
+ * returns Packet index (if >=0), or -1 if no packets available.
+ */
+extern ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf, size_t idx, size_t* pktlen);
+
+
+#endif /* _DVB_RINGBUFFER_H_ */
diff --git a/v4l/kernel-2.6.22/dvbdev.h b/v4l/kernel-2.6.22/dvbdev.h
new file mode 100644
index 0000000..6dff10e
--- /dev/null
+++ b/v4l/kernel-2.6.22/dvbdev.h
@@ -0,0 +1,128 @@
+/*
+ * dvbdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBDEV_H_
+#define _DVBDEV_H_
+
+#include <linux/types.h>
+#include <linux/poll.h>
+#include <linux/fs.h>
+#include <linux/list.h>
+#include <linux/smp_lock.h>
+
+#define DVB_MAJOR 212
+
+#define DVB_DEVICE_VIDEO 0
+#define DVB_DEVICE_AUDIO 1
+#define DVB_DEVICE_SEC 2
+#define DVB_DEVICE_FRONTEND 3
+#define DVB_DEVICE_DEMUX 4
+#define DVB_DEVICE_DVR 5
+#define DVB_DEVICE_CA 6
+#define DVB_DEVICE_NET 7
+#define DVB_DEVICE_OSD 8
+
+
+struct dvb_adapter {
+ int num;
+ struct list_head list_head;
+ struct list_head device_list;
+ const char *name;
+ u8 proposed_mac [6];
+ void* priv;
+
+ struct device *device;
+
+ struct module *module;
+};
+
+
+struct dvb_device {
+ struct list_head list_head;
+ struct file_operations *fops;
+ struct dvb_adapter *adapter;
+ int type;
+ u32 id;
+
+ /* in theory, 'users' can vanish now,
+ but I don't want to change too much now... */
+ int readers;
+ int writers;
+ int users;
+
+ wait_queue_head_t wait_queue;
+ /* don't really need those !? -- FIXME: use video_usercopy */
+ int (*kernel_ioctl)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg);
+
+ void *priv;
+};
+
+
+extern int dvb_register_adapter (struct dvb_adapter *adap, const char *name, struct module *module, struct device *device);
+extern int dvb_unregister_adapter (struct dvb_adapter *adap);
+
+extern int dvb_register_device (struct dvb_adapter *adap,
+ struct dvb_device **pdvbdev,
+ const struct dvb_device *template,
+ void *priv,
+ int type);
+
+extern void dvb_unregister_device (struct dvb_device *dvbdev);
+
+extern int dvb_generic_open (struct inode *inode, struct file *file);
+extern int dvb_generic_release (struct inode *inode, struct file *file);
+extern int dvb_generic_ioctl (struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg);
+
+/* we don't mess with video_usercopy() any more,
+we simply define out own dvb_usercopy(), which will hopefully become
+generic_usercopy() someday... */
+
+extern int dvb_usercopy(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg,
+ int (*func)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg));
+
+/** generic DVB attach function. */
+#ifdef CONFIG_DVB_CORE_ATTACH
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ void *__r = NULL; \
+ typeof(&FUNCTION) __a = symbol_request(FUNCTION); \
+ if (__a) { \
+ __r = (void *) __a(ARGS); \
+ if (__r == NULL) \
+ symbol_put(FUNCTION); \
+ } else { \
+ printk(KERN_ERR "DVB: Unable to find symbol "#FUNCTION"()\n"); \
+ } \
+ __r; \
+})
+
+#else
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ FUNCTION(ARGS); \
+})
+
+#endif
+
+#endif /* #ifndef _DVBDEV_H_ */
diff --git a/v4l/kernel-2.6.23/demux.h b/v4l/kernel-2.6.23/demux.h
new file mode 100644
index 0000000..0c1d87c
--- /dev/null
+++ b/v4l/kernel-2.6.23/demux.h
@@ -0,0 +1,278 @@
+/*
+ * demux.h
+ *
+ * Copyright (c) 2002 Convergence GmbH
+ *
+ * based on code:
+ * Copyright (c) 2000 Nokia Research Center
+ * Tampere, FINLAND
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __DEMUX_H
+#define __DEMUX_H
+
+#include <linux/types.h>
+#include <linux/errno.h>
+#include <linux/list.h>
+#include <linux/time.h>
+#include <linux/dvb/dmx.h>
+
+/*--------------------------------------------------------------------------*/
+/* Common definitions */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * DMX_MAX_FILTER_SIZE: Maximum length (in bytes) of a section/PES filter.
+ */
+
+#ifndef DMX_MAX_FILTER_SIZE
+#define DMX_MAX_FILTER_SIZE 18
+#endif
+
+/*
+ * DMX_MAX_SECFEED_SIZE: Maximum length (in bytes) of a private section feed filter.
+ */
+
+#ifndef DMX_MAX_SECTION_SIZE
+#define DMX_MAX_SECTION_SIZE 4096
+#endif
+#ifndef DMX_MAX_SECFEED_SIZE
+#define DMX_MAX_SECFEED_SIZE (DMX_MAX_SECTION_SIZE + 188)
+#endif
+
+
+/*
+ * enum dmx_success: Success codes for the Demux Callback API.
+ */
+
+enum dmx_success {
+ DMX_OK = 0, /* Received Ok */
+ DMX_LENGTH_ERROR, /* Incorrect length */
+ DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */
+ DMX_CRC_ERROR, /* Incorrect CRC */
+ DMX_FRAME_ERROR, /* Frame alignment error */
+ DMX_FIFO_ERROR, /* Receiver FIFO overrun */
+ DMX_MISSED_ERROR /* Receiver missed packet */
+} ;
+
+/*--------------------------------------------------------------------------*/
+/* TS packet reception */
+/*--------------------------------------------------------------------------*/
+
+/* TS filter type for set() */
+
+#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */
+#define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS
+ payload (<=184 bytes per packet) to callback */
+#define TS_DECODER 4 /* send stream to built-in decoder (if present) */
+
+/* PES type for filters which write to built-in decoder */
+/* these should be kept identical to the types in dmx.h */
+
+enum dmx_ts_pes
+{ /* also send packets to decoder (if it exists) */
+ DMX_TS_PES_AUDIO0,
+ DMX_TS_PES_VIDEO0,
+ DMX_TS_PES_TELETEXT0,
+ DMX_TS_PES_SUBTITLE0,
+ DMX_TS_PES_PCR0,
+
+ DMX_TS_PES_AUDIO1,
+ DMX_TS_PES_VIDEO1,
+ DMX_TS_PES_TELETEXT1,
+ DMX_TS_PES_SUBTITLE1,
+ DMX_TS_PES_PCR1,
+
+ DMX_TS_PES_AUDIO2,
+ DMX_TS_PES_VIDEO2,
+ DMX_TS_PES_TELETEXT2,
+ DMX_TS_PES_SUBTITLE2,
+ DMX_TS_PES_PCR2,
+
+ DMX_TS_PES_AUDIO3,
+ DMX_TS_PES_VIDEO3,
+ DMX_TS_PES_TELETEXT3,
+ DMX_TS_PES_SUBTITLE3,
+ DMX_TS_PES_PCR3,
+
+ DMX_TS_PES_OTHER
+};
+
+#define DMX_TS_PES_AUDIO DMX_TS_PES_AUDIO0
+#define DMX_TS_PES_VIDEO DMX_TS_PES_VIDEO0
+#define DMX_TS_PES_TELETEXT DMX_TS_PES_TELETEXT0
+#define DMX_TS_PES_SUBTITLE DMX_TS_PES_SUBTITLE0
+#define DMX_TS_PES_PCR DMX_TS_PES_PCR0
+
+
+struct dmx_ts_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux *parent; /* Back-pointer */
+ void *priv; /* Pointer to private data of the API client */
+ int (*set) (struct dmx_ts_feed *feed,
+ u16 pid,
+ int type,
+ enum dmx_ts_pes pes_type,
+ size_t circular_buffer_size,
+ struct timespec timeout);
+ int (*start_filtering) (struct dmx_ts_feed* feed);
+ int (*stop_filtering) (struct dmx_ts_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Section reception */
+/*--------------------------------------------------------------------------*/
+
+struct dmx_section_filter {
+ u8 filter_value [DMX_MAX_FILTER_SIZE];
+ u8 filter_mask [DMX_MAX_FILTER_SIZE];
+ u8 filter_mode [DMX_MAX_FILTER_SIZE];
+ struct dmx_section_feed* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+};
+
+struct dmx_section_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+
+ int check_crc;
+ u32 crc_val;
+
+ u8 *secbuf;
+ u8 secbuf_base[DMX_MAX_SECFEED_SIZE];
+ u16 secbufp, seclen, tsfeedp;
+
+ int (*set) (struct dmx_section_feed* feed,
+ u16 pid,
+ size_t circular_buffer_size,
+ int check_crc);
+ int (*allocate_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter** filter);
+ int (*release_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter* filter);
+ int (*start_filtering) (struct dmx_section_feed* feed);
+ int (*stop_filtering) (struct dmx_section_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Callback functions */
+/*--------------------------------------------------------------------------*/
+
+typedef int (*dmx_ts_cb) ( const u8 * buffer1,
+ size_t buffer1_length,
+ const u8 * buffer2,
+ size_t buffer2_length,
+ struct dmx_ts_feed* source,
+ enum dmx_success success);
+
+typedef int (*dmx_section_cb) ( const u8 * buffer1,
+ size_t buffer1_len,
+ const u8 * buffer2,
+ size_t buffer2_len,
+ struct dmx_section_filter * source,
+ enum dmx_success success);
+
+/*--------------------------------------------------------------------------*/
+/* DVB Front-End */
+/*--------------------------------------------------------------------------*/
+
+enum dmx_frontend_source {
+ DMX_MEMORY_FE,
+ DMX_FRONTEND_0,
+ DMX_FRONTEND_1,
+ DMX_FRONTEND_2,
+ DMX_FRONTEND_3,
+ DMX_STREAM_0, /* external stream input, e.g. LVDS */
+ DMX_STREAM_1,
+ DMX_STREAM_2,
+ DMX_STREAM_3
+};
+
+struct dmx_frontend {
+ struct list_head connectivity_list; /* List of front-ends that can
+ be connected to a particular
+ demux */
+ enum dmx_frontend_source source;
+};
+
+/*--------------------------------------------------------------------------*/
+/* MPEG-2 TS Demux */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * Flags OR'ed in the capabilities field of struct dmx_demux.
+ */
+
+#define DMX_TS_FILTERING 1
+#define DMX_PES_FILTERING 2
+#define DMX_SECTION_FILTERING 4
+#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */
+#define DMX_CRC_CHECKING 16
+#define DMX_TS_DESCRAMBLING 32
+
+/*
+ * Demux resource type identifier.
+*/
+
+/*
+ * DMX_FE_ENTRY(): Casts elements in the list of registered
+ * front-ends from the generic type struct list_head
+ * to the type * struct dmx_frontend
+ *.
+*/
+
+#define DMX_FE_ENTRY(list) list_entry(list, struct dmx_frontend, connectivity_list)
+
+struct dmx_demux {
+ u32 capabilities; /* Bitfield of capability flags */
+ struct dmx_frontend* frontend; /* Front-end connected to the demux */
+ void* priv; /* Pointer to private data of the API client */
+ int (*open) (struct dmx_demux* demux);
+ int (*close) (struct dmx_demux* demux);
+ int (*write) (struct dmx_demux* demux, const char* buf, size_t count);
+ int (*allocate_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed** feed,
+ dmx_ts_cb callback);
+ int (*release_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed* feed);
+ int (*allocate_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed** feed,
+ dmx_section_cb callback);
+ int (*release_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed* feed);
+ int (*add_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*remove_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ struct list_head* (*get_frontends) (struct dmx_demux* demux);
+ int (*connect_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*disconnect_frontend) (struct dmx_demux* demux);
+
+ int (*get_pes_pids) (struct dmx_demux* demux, u16 *pids);
+
+ int (*get_caps) (struct dmx_demux* demux, struct dmx_caps *caps);
+
+ int (*set_source) (struct dmx_demux* demux, const dmx_source_t *src);
+
+ int (*get_stc) (struct dmx_demux* demux, unsigned int num,
+ u64 *stc, unsigned int *base);
+};
+
+#endif /* #ifndef __DEMUX_H */
diff --git a/v4l/kernel-2.6.23/dmxdev.h b/v4l/kernel-2.6.23/dmxdev.h
new file mode 100644
index 0000000..29746e7
--- /dev/null
+++ b/v4l/kernel-2.6.23/dmxdev.h
@@ -0,0 +1,110 @@
+/*
+ * dmxdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DMXDEV_H_
+#define _DMXDEV_H_
+
+#include <linux/types.h>
+#include <linux/spinlock.h>
+#include <linux/kernel.h>
+#include <linux/timer.h>
+#include <linux/wait.h>
+#include <linux/fs.h>
+#include <linux/string.h>
+#include <linux/mutex.h>
+
+#include <linux/dvb/dmx.h>
+
+#include "dvbdev.h"
+#include "demux.h"
+#include "dvb_ringbuffer.h"
+
+enum dmxdev_type {
+ DMXDEV_TYPE_NONE,
+ DMXDEV_TYPE_SEC,
+ DMXDEV_TYPE_PES,
+};
+
+enum dmxdev_state {
+ DMXDEV_STATE_FREE,
+ DMXDEV_STATE_ALLOCATED,
+ DMXDEV_STATE_SET,
+ DMXDEV_STATE_GO,
+ DMXDEV_STATE_DONE,
+ DMXDEV_STATE_TIMEDOUT
+};
+
+struct dmxdev_filter {
+ union {
+ struct dmx_section_filter *sec;
+ } filter;
+
+ union {
+ struct dmx_ts_feed *ts;
+ struct dmx_section_feed *sec;
+ } feed;
+
+ union {
+ struct dmx_sct_filter_params sec;
+ struct dmx_pes_filter_params pes;
+ } params;
+
+ enum dmxdev_type type;
+ enum dmxdev_state state;
+ struct dmxdev *dev;
+ struct dvb_ringbuffer buffer;
+
+ struct mutex mutex;
+
+ /* only for sections */
+ struct timer_list timer;
+ int todo;
+ u8 secheader[3];
+};
+
+
+struct dmxdev {
+ struct dvb_device *dvbdev;
+ struct dvb_device *dvr_dvbdev;
+
+ struct dmxdev_filter *filter;
+ struct dmx_demux *demux;
+
+ int filternum;
+ int capabilities;
+
+ unsigned int exit:1;
+#define DMXDEV_CAP_DUPLEX 1
+ struct dmx_frontend *dvr_orig_fe;
+
+ struct dvb_ringbuffer dvr_buffer;
+#define DVR_BUFFER_SIZE (10*188*1024)
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+
+int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *);
+void dvb_dmxdev_release(struct dmxdev *dmxdev);
+
+#endif /* _DMXDEV_H_ */
diff --git a/v4l/kernel-2.6.23/dvb-pll.h b/v4l/kernel-2.6.23/dvb-pll.h
new file mode 100644
index 0000000..e93a810
--- /dev/null
+++ b/v4l/kernel-2.6.23/dvb-pll.h
@@ -0,0 +1,60 @@
+/*
+ * descriptions + helper functions for simple dvb plls.
+ */
+
+#ifndef __DVB_PLL_H__
+#define __DVB_PLL_H__
+
+#include <linux/i2c.h>
+#include "dvb_frontend.h"
+
+#define DVB_PLL_UNDEFINED 0
+#define DVB_PLL_THOMSON_DTT7579 1
+#define DVB_PLL_THOMSON_DTT759X 2
+#define DVB_PLL_THOMSON_DTT7610 3
+#define DVB_PLL_LG_Z201 4
+#define DVB_PLL_MICROTUNE_4042 5
+#define DVB_PLL_THOMSON_DTT761X 6
+#define DVB_PLL_UNKNOWN_1 7
+#define DVB_PLL_TUA6010XS 8
+#define DVB_PLL_ENV57H1XD5 9
+#define DVB_PLL_TUA6034 10
+#define DVB_PLL_LG_TDVS_H06XF 11
+#define DVB_PLL_TDA665X 12
+#define DVB_PLL_FMD1216ME 13
+#define DVB_PLL_TDED4 14
+#define DVB_PLL_TUV1236D 15
+#define DVB_PLL_TDHU2 16
+#define DVB_PLL_SAMSUNG_TBMV 17
+#define DVB_PLL_PHILIPS_SD1878_TDA8261 18
+#define DVB_PLL_PHILIPS_TD1316 19
+#define DVB_PLL_THOMSON_FE6600 20
+#define DVB_PLL_OPERA1 21
+#define DVB_PLL_FCV1236D 22
+
+/**
+ * Attach a dvb-pll to the supplied frontend structure.
+ *
+ * @param fe Frontend to attach to.
+ * @param pll_addr i2c address of the PLL (if used).
+ * @param i2c i2c adapter to use (set to NULL if not used).
+ * @param pll_desc_id dvb_pll_desc to use.
+ * @return Frontend pointer on success, NULL on failure
+ */
+#if defined(CONFIG_DVB_PLL) || (defined(CONFIG_DVB_PLL_MODULE) && defined(MODULE))
+extern struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ unsigned int pll_desc_id);
+#else
+static inline struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ unsigned int pll_desc_id)
+{
+ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __FUNCTION__);
+ return NULL;
+}
+#endif
+
+#endif
diff --git a/v4l/kernel-2.6.23/dvb-usb-ids.h b/v4l/kernel-2.6.23/dvb-usb-ids.h
new file mode 100644
index 0000000..4dfab02
--- /dev/null
+++ b/v4l/kernel-2.6.23/dvb-usb-ids.h
@@ -0,0 +1,161 @@
+/* dvb-usb-ids.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de) see
+ * dvb-usb-init.c for copyright information.
+ *
+ * a header file containing define's for the USB device supported by the
+ * various drivers.
+ */
+#ifndef _DVB_USB_IDS_H_
+#define _DVB_USB_IDS_H_
+
+/* Vendor IDs */
+#define USB_VID_ADSTECH 0x06e1
+#define USB_VID_AFATECH 0x15a4
+#define USB_VID_ALCOR_MICRO 0x058f
+#define USB_VID_ALINK 0x05e3
+#define USB_VID_ANCHOR 0x0547
+#define USB_VID_ANUBIS_ELECTRONIC 0x10fd
+#define USB_VID_AVERMEDIA 0x07ca
+#define USB_VID_COMPRO 0x185b
+#define USB_VID_COMPRO_UNK 0x145f
+#define USB_VID_CYPRESS 0x04b4
+#define USB_VID_DIBCOM 0x10b8
+#define USB_VID_DPOSH 0x1498
+#define USB_VID_DVICO 0x0fe9
+#define USB_VID_EMPIA 0xeb1a
+#define USB_VID_GENPIX 0x09c0
+#define USB_VID_GRANDTEC 0x5032
+#define USB_VID_HANFTEK 0x15f4
+#define USB_VID_HAUPPAUGE 0x2040
+#define USB_VID_HYPER_PALTEK 0x1025
+#define USB_VID_KWORLD 0xeb2a
+#define USB_VID_KYE 0x0458
+#define USB_VID_LEADTEK 0x0413
+#define USB_VID_LITEON 0x04ca
+#define USB_VID_MEDION 0x1660
+#define USB_VID_MSI 0x0db0
+#define USB_VID_OPERA1 0x695c
+#define USB_VID_PINNACLE 0x2304
+#define USB_VID_TERRATEC 0x0ccd
+#define USB_VID_VISIONPLUS 0x13d3
+#define USB_VID_TWINHAN 0x1822
+#define USB_VID_ULTIMA_ELECTRONIC 0x05d8
+#define USB_VID_UNIWILL 0x1584
+#define USB_VID_WIDEVIEW 0x14aa
+
+/* Product IDs */
+#define USB_PID_ADSTECH_USB2_COLD 0xa333
+#define USB_PID_ADSTECH_USB2_WARM 0xa334
+#define USB_PID_AFATECH_AF9005 0x9020
+#define USB_VID_ALINK_DTU 0xf170
+#define USB_PID_AVERMEDIA_DVBT_USB_COLD 0x0001
+#define USB_PID_AVERMEDIA_DVBT_USB_WARM 0x0002
+#define USB_PID_AVERMEDIA_DVBT_USB2_COLD 0xa800
+#define USB_PID_AVERMEDIA_DVBT_USB2_WARM 0xa801
+#define USB_PID_COMPRO_DVBU2000_COLD 0xd000
+#define USB_PID_COMPRO_DVBU2000_WARM 0xd001
+#define USB_PID_COMPRO_DVBU2000_UNK_COLD 0x010c
+#define USB_PID_COMPRO_DVBU2000_UNK_WARM 0x010d
+#define USB_PID_COMPRO_VIDEOMATE_U500 0x1e78
+#define USB_PID_DIBCOM_HOOK_DEFAULT 0x0064
+#define USB_PID_DIBCOM_HOOK_DEFAULT_REENUM 0x0065
+#define USB_PID_DIBCOM_MOD3000_COLD 0x0bb8
+#define USB_PID_DIBCOM_MOD3000_WARM 0x0bb9
+#define USB_PID_DIBCOM_MOD3001_COLD 0x0bc6
+#define USB_PID_DIBCOM_MOD3001_WARM 0x0bc7
+#define USB_PID_DIBCOM_STK7700P 0x1e14
+#define USB_PID_DIBCOM_STK7700P_PC 0x1e78
+#define USB_PID_DIBCOM_ANCHOR_2135_COLD 0x2131
+#define USB_PID_DPOSH_M9206_COLD 0x9206
+#define USB_PID_DPOSH_M9206_WARM 0xa090
+#define USB_PID_UNIWILL_STK7700P 0x6003
+#define USB_PID_GRANDTEC_DVBT_USB_COLD 0x0fa0
+#define USB_PID_GRANDTEC_DVBT_USB_WARM 0x0fa1
+#define USB_PID_KWORLD_VSTREAM_COLD 0x17de
+#define USB_PID_KWORLD_VSTREAM_WARM 0x17df
+#define USB_PID_TERRATEC_CINERGY_T_USB_XE 0x0055
+#define USB_PID_TWINHAN_VP7041_COLD 0x3201
+#define USB_PID_TWINHAN_VP7041_WARM 0x3202
+#define USB_PID_TWINHAN_VP7020_COLD 0x3203
+#define USB_PID_TWINHAN_VP7020_WARM 0x3204
+#define USB_PID_TWINHAN_VP7045_COLD 0x3205
+#define USB_PID_TWINHAN_VP7045_WARM 0x3206
+#define USB_PID_TWINHAN_VP7021_COLD 0x3207
+#define USB_PID_TWINHAN_VP7021_WARM 0x3208
+#define USB_PID_DNTV_TINYUSB2_COLD 0x3223
+#define USB_PID_DNTV_TINYUSB2_WARM 0x3224
+#define USB_PID_ULTIMA_TVBOX_COLD 0x8105
+#define USB_PID_ULTIMA_TVBOX_WARM 0x8106
+#define USB_PID_ULTIMA_TVBOX_AN2235_COLD 0x8107
+#define USB_PID_ULTIMA_TVBOX_AN2235_WARM 0x8108
+#define USB_PID_ULTIMA_TVBOX_ANCHOR_COLD 0x2235
+#define USB_PID_ULTIMA_TVBOX_USB2_COLD 0x8109
+#define USB_PID_ULTIMA_TVBOX_USB2_WARM 0x810a
+#define USB_PID_ARTEC_T14_COLD 0x810b
+#define USB_PID_ARTEC_T14_WARM 0x810c
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_COLD 0x8613
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_WARM 0x1002
+#define USB_PID_UNK_HYPER_PALTEK_COLD 0x005e
+#define USB_PID_UNK_HYPER_PALTEK_WARM 0x005f
+#define USB_PID_HANFTEK_UMT_010_COLD 0x0001
+#define USB_PID_HANFTEK_UMT_010_WARM 0x0015
+#define USB_PID_DTT200U_COLD 0x0201
+#define USB_PID_DTT200U_WARM 0x0301
+#define USB_PID_WT220U_ZAP250_COLD 0x0220
+#define USB_PID_WT220U_COLD 0x0222
+#define USB_PID_WT220U_WARM 0x0221
+#define USB_PID_WT220U_FC_COLD 0x0225
+#define USB_PID_WT220U_FC_WARM 0x0226
+#define USB_PID_WT220U_ZL0353_COLD 0x022a
+#define USB_PID_WT220U_ZL0353_WARM 0x022b
+#define USB_PID_WINTV_NOVA_T_USB2_COLD 0x9300
+#define USB_PID_WINTV_NOVA_T_USB2_WARM 0x9301
+#define USB_PID_HAUPPAUGE_NOVA_T_500 0x9941
+#define USB_PID_HAUPPAUGE_NOVA_T_500_2 0x9950
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK 0x7050
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK_2 0x7060
+#define USB_PID_AVERMEDIA_VOLAR 0xa807
+#define USB_PID_AVERMEDIA_VOLAR_2 0xb808
+#define USB_PID_NEBULA_DIGITV 0x0201
+#define USB_PID_DVICO_BLUEBIRD_LGDT 0xd820
+#define USB_PID_DVICO_BLUEBIRD_LG064F_COLD 0xd500
+#define USB_PID_DVICO_BLUEBIRD_LG064F_WARM 0xd501
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_COLD 0xdb00
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_WARM 0xdb01
+#define USB_PID_DVICO_BLUEBIRD_TH7579_COLD 0xdb10
+#define USB_PID_DVICO_BLUEBIRD_TH7579_WARM 0xdb11
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_COLD 0xdb50
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_WARM 0xdb51
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_COLD 0xdb58
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_WARM 0xdb59
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_COLD 0xdb54
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_WARM 0xdb55
+#define USB_PID_MEDION_MD95700 0x0932
+#define USB_PID_MSI_MEGASKY580 0x5580
+#define USB_PID_MSI_MEGASKY580_55801 0x5581
+#define USB_PID_KYE_DVB_T_COLD 0x701e
+#define USB_PID_KYE_DVB_T_WARM 0x701f
+#define USB_PID_PCTV_200E 0x020e
+#define USB_PID_PCTV_400E 0x020f
+#define USB_PID_PCTV_450E 0x0222
+#define USB_PID_LITEON_DVB_T_COLD 0xf000
+#define USB_PID_LITEON_DVB_T_WARM 0xf001
+#define USB_PID_DIGIVOX_MINI_SL_COLD 0xe360
+#define USB_PID_DIGIVOX_MINI_SL_WARM 0xe361
+#define USB_PID_GRANDTEC_DVBT_USB2_COLD 0x0bc6
+#define USB_PID_GRANDTEC_DVBT_USB2_WARM 0x0bc7
+#define USB_PID_WINFAST_DTV_DONGLE_COLD 0x6025
+#define USB_PID_WINFAST_DTV_DONGLE_WARM 0x6026
+#define USB_PID_WINFAST_DTV_DONGLE_STK7700P 0x6f00
+#define USB_PID_GENPIX_8PSK_COLD 0x0200
+#define USB_PID_GENPIX_8PSK_WARM 0x0201
+#define USB_PID_SIGMATEK_DVB_110 0x6610
+#define USB_PID_MSI_DIGI_VOX_MINI_II 0x1513
+#define USB_PID_OPERA1_COLD 0x2830
+#define USB_PID_OPERA1_WARM 0x3829
+#define USB_PID_LIFEVIEW_TV_WALKER_TWIN_COLD 0x0514
+#define USB_PID_LIFEVIEW_TV_WALKER_TWIN_WARM 0x0513
+
+
+#endif
diff --git a/v4l/kernel-2.6.23/dvb-usb.h b/v4l/kernel-2.6.23/dvb-usb.h
new file mode 100644
index 0000000..d1b3c7b
--- /dev/null
+++ b/v4l/kernel-2.6.23/dvb-usb.h
@@ -0,0 +1,397 @@
+/* dvb-usb.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * the headerfile, all dvb-usb-drivers have to include.
+ *
+ * TODO: clean-up the structures for unused fields and update the comments
+ */
+#ifndef __DVB_USB_H__
+#define __DVB_USB_H__
+
+#include <linux/input.h>
+#include <linux/usb.h>
+#include <linux/firmware.h>
+#include <linux/mutex.h>
+
+#include "dvb_frontend.h"
+#include "dvb_demux.h"
+#include "dvb_net.h"
+#include "dmxdev.h"
+
+#include "dvb-pll.h"
+
+#include "dvb-usb-ids.h"
+
+/* debug */
+#ifdef CONFIG_DVB_USB_DEBUG
+#define dprintk(var,level,args...) \
+ do { if ((var & level)) { printk(args); } } while (0)
+
+#define debug_dump(b,l,func) {\
+ int loop_; \
+ for (loop_ = 0; loop_ < l; loop_++) func("%02x ", b[loop_]); \
+ func("\n");\
+}
+#define DVB_USB_DEBUG_STATUS
+#else
+#define dprintk(args...)
+#define debug_dump(b,l,func)
+
+#define DVB_USB_DEBUG_STATUS " (debugging is not enabled)"
+
+#endif
+
+/* generic log methods - taken from usb.h */
+#ifndef DVB_USB_LOG_PREFIX
+ #define DVB_USB_LOG_PREFIX "dvb-usb (please define a log prefix)"
+#endif
+
+#undef err
+#define err(format, arg...) printk(KERN_ERR DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef info
+#define info(format, arg...) printk(KERN_INFO DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef warn
+#define warn(format, arg...) printk(KERN_WARNING DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+
+/**
+ * struct dvb_usb_device_description - name and its according USB IDs
+ * @name: real name of the box, regardless which DVB USB device class is in use
+ * @cold_ids: array of struct usb_device_id which describe the device in
+ * pre-firmware state
+ * @warm_ids: array of struct usb_device_id which describe the device in
+ * post-firmware state
+ *
+ * Each DVB USB device class can have one or more actual devices, this struct
+ * assigns a name to it.
+ */
+struct dvb_usb_device_description {
+ const char *name;
+
+#define DVB_USB_ID_MAX_NUM 15
+ struct usb_device_id *cold_ids[DVB_USB_ID_MAX_NUM];
+ struct usb_device_id *warm_ids[DVB_USB_ID_MAX_NUM];
+};
+
+/**
+ * struct dvb_usb_rc_key - a remote control key and its input-event
+ * @custom: the vendor/custom part of the key
+ * @data: the actual key part
+ * @event: the input event assigned to key identified by custom and data
+ */
+struct dvb_usb_rc_key {
+ u8 custom,data;
+ u32 event;
+};
+
+struct dvb_usb_device;
+struct dvb_usb_adapter;
+struct usb_data_stream;
+
+/**
+ * Properties of USB streaming - TODO this structure should be somewhere else
+ * describes the kind of USB transfer used for data-streaming.
+ * (BULK or ISOC)
+ */
+struct usb_data_stream_properties {
+#define USB_BULK 1
+#define USB_ISOC 2
+ int type;
+ int count;
+ int endpoint;
+
+ union {
+ struct {
+ int buffersize; /* per URB */
+ } bulk;
+ struct {
+ int framesperurb;
+ int framesize;
+ int interval;
+ } isoc;
+ } u;
+};
+
+/**
+ * struct dvb_usb_adapter_properties - properties of a dvb-usb-adapter.
+ * A DVB-USB-Adapter is basically a dvb_adapter which is present on a USB-device.
+ * @caps: capabilities of the DVB USB device.
+ * @pid_filter_count: number of PID filter position in the optional hardware
+ * PID-filter.
+ * @streaming_ctrl: called to start and stop the MPEG2-TS streaming of the
+ * device (not URB submitting/killing).
+ * @pid_filter_ctrl: called to en/disable the PID filter, if any.
+ * @pid_filter: called to set/unset a PID for filtering.
+ * @frontend_attach: called to attach the possible frontends (fill fe-field
+ * of struct dvb_usb_device).
+ * @tuner_attach: called to attach the correct tuner and to fill pll_addr,
+ * pll_desc and pll_init_buf of struct dvb_usb_device).
+ * @stream: configuration of the USB streaming
+ */
+struct dvb_usb_adapter_properties {
+#define DVB_USB_ADAP_HAS_PID_FILTER 0x01
+#define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
+#define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
+#define DVB_USB_ADAP_RECEIVES_204_BYTE_TS 0x08
+ int caps;
+ int pid_filter_count;
+
+ int (*streaming_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
+
+ int (*frontend_attach) (struct dvb_usb_adapter *);
+ int (*tuner_attach) (struct dvb_usb_adapter *);
+
+ struct usb_data_stream_properties stream;
+
+ int size_of_priv;
+};
+
+/**
+ * struct dvb_usb_device_properties - properties of a dvb-usb-device
+ * @usb_ctrl: which USB device-side controller is in use. Needed for firmware
+ * download.
+ * @firmware: name of the firmware file.
+ * @download_firmware: called to download the firmware when the usb_ctrl is
+ * DEVICE_SPECIFIC.
+ * @no_reconnect: device doesn't do a reconnect after downloading the firmware,
+ * so do the warm initialization right after it
+ *
+ * @size_of_priv: how many bytes shall be allocated for the private field
+ * of struct dvb_usb_device.
+ *
+ * @power_ctrl: called to enable/disable power of the device.
+ * @read_mac_address: called to read the MAC address of the device.
+ * @identify_state: called to determine the state (cold or warm), when it
+ * is not distinguishable by the USB IDs.
+ *
+ * @rc_key_map: a hard-wired array of struct dvb_usb_rc_key (NULL to disable
+ * remote control handling).
+ * @rc_key_map_size: number of items in @rc_key_map.
+ * @rc_query: called to query an event event.
+ * @rc_interval: time in ms between two queries.
+ *
+ * @i2c_algo: i2c_algorithm if the device has I2CoverUSB.
+ *
+ * @generic_bulk_ctrl_endpoint: most of the DVB USB devices have a generic
+ * endpoint which received control messages with bulk transfers. When this
+ * is non-zero, one can use dvb_usb_generic_rw and dvb_usb_generic_write-
+ * helper functions.
+ *
+ * @num_device_descs: number of struct dvb_usb_device_description in @devices
+ * @devices: array of struct dvb_usb_device_description compatibles with these
+ * properties.
+ */
+#define MAX_NO_OF_ADAPTER_PER_DEVICE 2
+struct dvb_usb_device_properties {
+
+#define DVB_USB_IS_AN_I2C_ADAPTER 0x01
+ int caps;
+
+#define DEVICE_SPECIFIC 0
+#define CYPRESS_AN2135 1
+#define CYPRESS_AN2235 2
+#define CYPRESS_FX2 3
+ int usb_ctrl;
+ int (*download_firmware) (struct usb_device *, const struct firmware *);
+ const char firmware[FIRMWARE_NAME_MAX];
+ int no_reconnect;
+
+ int size_of_priv;
+
+ int num_adapters;
+ struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ int (*power_ctrl) (struct dvb_usb_device *, int);
+ int (*read_mac_address) (struct dvb_usb_device *, u8 []);
+ int (*identify_state) (struct usb_device *, struct dvb_usb_device_properties *,
+ struct dvb_usb_device_description **, int *);
+
+/* remote control properties */
+#define REMOTE_NO_KEY_PRESSED 0x00
+#define REMOTE_KEY_PRESSED 0x01
+#define REMOTE_KEY_REPEAT 0x02
+ struct dvb_usb_rc_key *rc_key_map;
+ int rc_key_map_size;
+ int (*rc_query) (struct dvb_usb_device *, u32 *, int *);
+ int rc_interval;
+
+ struct i2c_algorithm *i2c_algo;
+
+ int generic_bulk_ctrl_endpoint;
+
+ int num_device_descs;
+ struct dvb_usb_device_description devices[9];
+};
+
+/**
+ * struct usb_data_stream - generic object of an USB stream
+ * @buf_num: number of buffer allocated.
+ * @buf_size: size of each buffer in buf_list.
+ * @buf_list: array containing all allocate buffers for streaming.
+ * @dma_addr: list of dma_addr_t for each buffer in buf_list.
+ *
+ * @urbs_initialized: number of URBs initialized.
+ * @urbs_submitted: number of URBs submitted.
+ */
+#define MAX_NO_URBS_FOR_DATA_STREAM 10
+struct usb_data_stream {
+ struct usb_device *udev;
+ struct usb_data_stream_properties props;
+
+#define USB_STATE_INIT 0x00
+#define USB_STATE_URB_BUF 0x01
+ int state;
+
+ void (*complete) (struct usb_data_stream *, u8 *, size_t);
+
+ struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ int buf_num;
+ unsigned long buf_size;
+ u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
+
+ int urbs_initialized;
+ int urbs_submitted;
+
+ void *user_priv;
+};
+
+/**
+ * struct dvb_usb_adapter - a DVB adapter on a USB device
+ * @id: index of this adapter (starting with 0).
+ *
+ * @feedcount: number of reqested feeds (used for streaming-activation)
+ * @pid_filtering: is hardware pid_filtering used or not.
+ *
+ * @pll_addr: I2C address of the tuner for programming
+ * @pll_init: array containing the initialization buffer
+ * @pll_desc: pointer to the appropriate struct dvb_pll_desc
+ * @tuner_pass_ctrl: called to (de)activate tuner passthru of the demod or the board
+ *
+ * @dvb_adap: device's dvb_adapter.
+ * @dmxdev: device's dmxdev.
+ * @demux: device's software demuxer.
+ * @dvb_net: device's dvb_net interfaces.
+ * @dvb_frontend: device's frontend.
+ * @max_feed_count: how many feeds can be handled simultaneously by this
+ * device
+ *
+ * @fe_init: rerouted frontend-init (wakeup) function.
+ * @fe_sleep: rerouted frontend-sleep function.
+ *
+ * @stream: the usb data stream.
+ */
+struct dvb_usb_adapter {
+ struct dvb_usb_device *dev;
+ struct dvb_usb_adapter_properties props;
+
+#define DVB_USB_ADAP_STATE_INIT 0x000
+#define DVB_USB_ADAP_STATE_DVB 0x001
+ int state;
+
+ u8 id;
+
+ int feedcount;
+ int pid_filtering;
+
+ /* dvb */
+ struct dvb_adapter dvb_adap;
+ struct dmxdev dmxdev;
+ struct dvb_demux demux;
+ struct dvb_net dvb_net;
+ struct dvb_frontend *fe;
+ int max_feed_count;
+
+ int (*fe_init) (struct dvb_frontend *);
+ int (*fe_sleep) (struct dvb_frontend *);
+
+ struct usb_data_stream stream;
+
+ void *priv;
+};
+
+/**
+ * struct dvb_usb_device - object of a DVB USB device
+ * @props: copy of the struct dvb_usb_properties this device belongs to.
+ * @desc: pointer to the device's struct dvb_usb_device_description.
+ * @state: initialization and runtime state of the device.
+ *
+ * @powered: indicated whether the device is power or not.
+ * Powered is in/decremented for each call to modify the state.
+ * @udev: pointer to the device's struct usb_device.
+ *
+ * @usb_mutex: semaphore of USB control messages (reading needs two messages)
+ * @i2c_mutex: semaphore for i2c-transfers
+ *
+ * @i2c_adap: device's i2c_adapter if it uses I2CoverUSB
+ *
+ * @rc_input_dev: input device for the remote control.
+ * @rc_query_work: struct work_struct frequent rc queries
+ * @last_event: last triggered event
+ * @last_state: last state (no, pressed, repeat)
+ * @owner: owner of the dvb_adapter
+ * @priv: private data of the actual driver (allocate by dvb-usb, size defined
+ * in size_of_priv of dvb_usb_properties).
+ */
+struct dvb_usb_device {
+ struct dvb_usb_device_properties props;
+ struct dvb_usb_device_description *desc;
+
+ struct usb_device *udev;
+
+#define DVB_USB_STATE_INIT 0x000
+#define DVB_USB_STATE_I2C 0x001
+#define DVB_USB_STATE_DVB 0x002
+#define DVB_USB_STATE_REMOTE 0x004
+ int state;
+
+ int powered;
+
+ /* locking */
+ struct mutex usb_mutex;
+
+ /* i2c */
+ struct mutex i2c_mutex;
+ struct i2c_adapter i2c_adap;
+
+ int num_adapters_initialized;
+ struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ /* remote control */
+ struct input_dev *rc_input_dev;
+ char rc_phys[64];
+ struct delayed_work rc_query_work;
+ u32 last_event;
+ int last_state;
+
+ struct module *owner;
+
+ void *priv;
+};
+
+extern int dvb_usb_device_init(struct usb_interface *, struct dvb_usb_device_properties *, struct module *, struct dvb_usb_device **);
+extern void dvb_usb_device_exit(struct usb_interface *);
+
+/* the generic read/write method for device control */
+extern int dvb_usb_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16,int);
+extern int dvb_usb_generic_write(struct dvb_usb_device *, u8 *, u16);
+
+/* commonly used remote control parsing */
+extern int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *, u8[], u32 *, int *);
+
+/* commonly used firmware download types and function */
+struct hexline {
+ u8 len;
+ u32 addr;
+ u8 type;
+ u8 data[255];
+ u8 chk;
+};
+extern int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type);
+extern int dvb_usb_get_hexline(const struct firmware *fw, struct hexline *hx, int *pos);
+
+
+#endif
diff --git a/v4l/kernel-2.6.23/dvb_demux.h b/v4l/kernel-2.6.23/dvb_demux.h
new file mode 100644
index 0000000..2c5f915
--- /dev/null
+++ b/v4l/kernel-2.6.23/dvb_demux.h
@@ -0,0 +1,140 @@
+/*
+ * dvb_demux.h: DVB kernel demux API
+ *
+ * Copyright (C) 2000-2001 Marcus Metzler & Ralph Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_DEMUX_H_
+#define _DVB_DEMUX_H_
+
+#include <linux/time.h>
+#include <linux/timer.h>
+#include <linux/spinlock.h>
+#include <linux/mutex.h>
+
+#include "demux.h"
+
+#define DMX_TYPE_TS 0
+#define DMX_TYPE_SEC 1
+#define DMX_TYPE_PES 2
+
+#define DMX_STATE_FREE 0
+#define DMX_STATE_ALLOCATED 1
+#define DMX_STATE_SET 2
+#define DMX_STATE_READY 3
+#define DMX_STATE_GO 4
+
+#define DVB_DEMUX_MASK_MAX 18
+
+struct dvb_demux_filter {
+ struct dmx_section_filter filter;
+ u8 maskandmode[DMX_MAX_FILTER_SIZE];
+ u8 maskandnotmode[DMX_MAX_FILTER_SIZE];
+ int doneq;
+
+ struct dvb_demux_filter *next;
+ struct dvb_demux_feed *feed;
+ int index;
+ int state;
+ int type;
+
+ u16 hw_handle;
+ struct timer_list timer;
+};
+
+#define DMX_FEED_ENTRY(pos) list_entry(pos, struct dvb_demux_feed, list_head)
+
+struct dvb_demux_feed {
+ union {
+ struct dmx_ts_feed ts;
+ struct dmx_section_feed sec;
+ } feed;
+
+ union {
+ dmx_ts_cb ts;
+ dmx_section_cb sec;
+ } cb;
+
+ struct dvb_demux *demux;
+ void *priv;
+ int type;
+ int state;
+ u16 pid;
+ u8 *buffer;
+ int buffer_size;
+
+ struct timespec timeout;
+ struct dvb_demux_filter *filter;
+
+ int ts_type;
+ enum dmx_ts_pes pes_type;
+
+ int cc;
+ int pusi_seen; /* prevents feeding of garbage from previous section */
+
+ u16 peslen;
+
+ struct list_head list_head;
+ unsigned int index; /* a unique index for each feed (can be used as hardware pid filter index) */
+};
+
+struct dvb_demux {
+ struct dmx_demux dmx;
+ void *priv;
+ int filternum;
+ int feednum;
+ int (*start_feed)(struct dvb_demux_feed *feed);
+ int (*stop_feed)(struct dvb_demux_feed *feed);
+ int (*write_to_decoder)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ u32 (*check_crc32)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ void (*memcopy)(struct dvb_demux_feed *feed, u8 *dst,
+ const u8 *src, size_t len);
+
+ int users;
+#define MAX_DVB_DEMUX_USERS 10
+ struct dvb_demux_filter *filter;
+ struct dvb_demux_feed *feed;
+
+ struct list_head frontend_list;
+
+ struct dvb_demux_feed *pesfilter[DMX_TS_PES_OTHER];
+ u16 pids[DMX_TS_PES_OTHER];
+ int playing;
+ int recording;
+
+#define DMX_MAX_PID 0x2000
+ struct list_head feed_list;
+ u8 tsbuf[204];
+ int tsbufp;
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+int dvb_dmx_init(struct dvb_demux *dvbdemux);
+void dvb_dmx_release(struct dvb_demux *dvbdemux);
+void dvb_dmx_swfilter_packets(struct dvb_demux *dvbdmx, const u8 *buf,
+ size_t count);
+void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count);
+void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf,
+ size_t count);
+
+#endif /* _DVB_DEMUX_H_ */
diff --git a/v4l/kernel-2.6.23/dvb_frontend.h b/v4l/kernel-2.6.23/dvb_frontend.h
new file mode 100644
index 0000000..a770a87
--- /dev/null
+++ b/v4l/kernel-2.6.23/dvb_frontend.h
@@ -0,0 +1,169 @@
+/*
+ * dvb_frontend.h
+ *
+ * Copyright (C) 2001 convergence integrated media GmbH
+ * Copyright (C) 2004 convergence GmbH
+ *
+ * Written by Ralph Metzler
+ * Overhauled by Holger Waechtler
+ * Kernel I2C stuff by Michael Hunold <hunold@convergence.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_FRONTEND_H_
+#define _DVB_FRONTEND_H_
+
+#include <linux/types.h>
+#include <linux/sched.h>
+#include <linux/ioctl.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/delay.h>
+
+#include <linux/dvb/frontend.h>
+
+#include "dvbdev.h"
+
+struct dvb_frontend_tune_settings {
+ int min_delay_ms;
+ int step_size;
+ int max_drift;
+ struct dvb_frontend_parameters parameters;
+};
+
+struct dvb_frontend;
+
+struct dvb_tuner_info {
+ char name[128];
+
+ u32 frequency_min;
+ u32 frequency_max;
+ u32 frequency_step;
+
+ u32 bandwidth_min;
+ u32 bandwidth_max;
+ u32 bandwidth_step;
+};
+
+struct dvb_tuner_ops {
+
+ struct dvb_tuner_info info;
+
+ int (*release)(struct dvb_frontend *fe);
+ int (*init)(struct dvb_frontend *fe);
+ int (*sleep)(struct dvb_frontend *fe);
+
+ /** This is for simple PLLs - set all parameters in one go. */
+ int (*set_params)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
+
+ /** This is support for demods like the mt352 - fills out the supplied buffer with what to write. */
+ int (*calc_regs)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p, u8 *buf, int buf_len);
+
+ int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency);
+ int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth);
+
+#define TUNER_STATUS_LOCKED 1
+ int (*get_status)(struct dvb_frontend *fe, u32 *status);
+
+ /** These are provided seperately from set_params in order to facilitate silicon
+ * tuners which require sophisticated tuning loops, controlling each parameter seperately. */
+ int (*set_frequency)(struct dvb_frontend *fe, u32 frequency);
+ int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
+};
+
+struct dvb_frontend_ops {
+
+ struct dvb_frontend_info info;
+
+ void (*release)(struct dvb_frontend* fe);
+ void (*release_sec)(struct dvb_frontend* fe);
+
+ int (*init)(struct dvb_frontend* fe);
+ int (*sleep)(struct dvb_frontend* fe);
+
+ int (*write)(struct dvb_frontend* fe, u8* buf, int len);
+
+ /* if this is set, it overrides the default swzigzag */
+ int (*tune)(struct dvb_frontend* fe,
+ struct dvb_frontend_parameters* params,
+ unsigned int mode_flags,
+ unsigned int *delay,
+ fe_status_t *status);
+ /* get frontend tuning algorithm from the module */
+ int (*get_frontend_algo)(struct dvb_frontend *fe);
+
+ /* these two are only used for the swzigzag code */
+ int (*set_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+ int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings);
+
+ int (*get_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+
+ int (*read_status)(struct dvb_frontend* fe, fe_status_t* status);
+ int (*read_ber)(struct dvb_frontend* fe, u32* ber);
+ int (*read_signal_strength)(struct dvb_frontend* fe, u16* strength);
+ int (*read_snr)(struct dvb_frontend* fe, u16* snr);
+ int (*read_ucblocks)(struct dvb_frontend* fe, u32* ucblocks);
+
+ int (*diseqc_reset_overload)(struct dvb_frontend* fe);
+ int (*diseqc_send_master_cmd)(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd);
+ int (*diseqc_recv_slave_reply)(struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply);
+ int (*diseqc_send_burst)(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd);
+ int (*set_tone)(struct dvb_frontend* fe, fe_sec_tone_mode_t tone);
+ int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
+ int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg);
+ int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
+ int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
+ int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);
+
+ struct dvb_tuner_ops tuner_ops;
+};
+
+#define MAX_EVENT 8
+
+struct dvb_fe_events {
+ struct dvb_frontend_event events[MAX_EVENT];
+ int eventw;
+ int eventr;
+ int overflow;
+ wait_queue_head_t wait_queue;
+ struct semaphore sem;
+};
+
+struct dvb_frontend {
+ struct dvb_frontend_ops ops;
+ struct dvb_adapter *dvb;
+ void* demodulator_priv;
+ void* tuner_priv;
+ void* frontend_priv;
+ void* sec_priv;
+};
+
+extern int dvb_register_frontend(struct dvb_adapter* dvb,
+ struct dvb_frontend* fe);
+
+extern int dvb_unregister_frontend(struct dvb_frontend* fe);
+
+extern void dvb_frontend_detach(struct dvb_frontend* fe);
+
+extern void dvb_frontend_reinitialise(struct dvb_frontend *fe);
+
+extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec);
+extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime);
+
+#endif
diff --git a/v4l/kernel-2.6.23/dvb_net.h b/v4l/kernel-2.6.23/dvb_net.h
new file mode 100644
index 0000000..3a3126c
--- /dev/null
+++ b/v4l/kernel-2.6.23/dvb_net.h
@@ -0,0 +1,47 @@
+/*
+ * dvb_net.h
+ *
+ * Copyright (C) 2001 Ralph Metzler for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_NET_H_
+#define _DVB_NET_H_
+
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/inetdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/skbuff.h>
+
+#include "dvbdev.h"
+
+#define DVB_NET_DEVICES_MAX 10
+
+struct dvb_net {
+ struct dvb_device *dvbdev;
+ struct net_device *device[DVB_NET_DEVICES_MAX];
+ int state[DVB_NET_DEVICES_MAX];
+ unsigned int exit:1;
+ struct dmx_demux *demux;
+};
+
+
+void dvb_net_release(struct dvb_net *);
+int dvb_net_init(struct dvb_adapter *, struct dvb_net *, struct dmx_demux *);
+
+#endif
diff --git a/v4l/kernel-2.6.23/dvb_ringbuffer.h b/v4l/kernel-2.6.23/dvb_ringbuffer.h
new file mode 100644
index 0000000..d97714e
--- /dev/null
+++ b/v4l/kernel-2.6.23/dvb_ringbuffer.h
@@ -0,0 +1,174 @@
+/*
+ *
+ * dvb_ringbuffer.h: ring buffer implementation for the dvb driver
+ *
+ * Copyright (C) 2003 Oliver Endriss
+ * Copyright (C) 2004 Andrew de Quincey
+ *
+ * based on code originally found in av7110.c & dvb_ci.c:
+ * Copyright (C) 1999-2003 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _DVB_RINGBUFFER_H_
+#define _DVB_RINGBUFFER_H_
+
+#include <linux/spinlock.h>
+#include <linux/wait.h>
+
+struct dvb_ringbuffer {
+ u8 *data;
+ ssize_t size;
+ ssize_t pread;
+ ssize_t pwrite;
+ int error;
+
+ wait_queue_head_t queue;
+ spinlock_t lock;
+};
+
+#define DVB_RINGBUFFER_PKTHDRSIZE 3
+
+
+/*
+** Notes:
+** ------
+** (1) For performance reasons read and write routines don't check buffer sizes
+** and/or number of bytes free/available. This has to be done before these
+** routines are called. For example:
+**
+** *** write <buflen> bytes ***
+** free = dvb_ringbuffer_free(rbuf);
+** if (free >= buflen)
+** count = dvb_ringbuffer_write(rbuf, buffer, buflen);
+** else
+** ...
+**
+** *** read min. 1000, max. <bufsize> bytes ***
+** avail = dvb_ringbuffer_avail(rbuf);
+** if (avail >= 1000)
+** count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize), 0);
+** else
+** ...
+**
+** (2) If there is exactly one reader and one writer, there is no need
+** to lock read or write operations.
+** Two or more readers must be locked against each other.
+** Flushing the buffer counts as a read operation.
+** Two or more writers must be locked against each other.
+*/
+
+/* initialize ring buffer, lock and queue */
+extern void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data, size_t len);
+
+/* test whether buffer is empty */
+extern int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf);
+
+/* return the number of free bytes in the buffer */
+extern ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf);
+
+/* return the number of bytes waiting in the buffer */
+extern ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf);
+
+
+/* read routines & macros */
+/* ---------------------- */
+/* flush buffer */
+extern void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf);
+
+/* flush buffer protected by spinlock and wake-up waiting task(s) */
+extern void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf);
+
+/* peek at byte <offs> in the buffer */
+#define DVB_RINGBUFFER_PEEK(rbuf,offs) \
+ (rbuf)->data[((rbuf)->pread+(offs))%(rbuf)->size]
+
+/* advance read ptr by <num> bytes */
+#define DVB_RINGBUFFER_SKIP(rbuf,num) \
+ (rbuf)->pread=((rbuf)->pread+(num))%(rbuf)->size
+
+/*
+** read <len> bytes from ring buffer into <buf>
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf, u8 *buf,
+ size_t len, int usermem);
+
+
+/* write routines & macros */
+/* ----------------------- */
+/* write single byte to ring buffer */
+#define DVB_RINGBUFFER_WRITE_BYTE(rbuf,byte) \
+ { (rbuf)->data[(rbuf)->pwrite]=(byte); \
+ (rbuf)->pwrite=((rbuf)->pwrite+1)%(rbuf)->size; }
+/*
+** write <len> bytes to ring buffer
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf,
+ size_t len);
+
+
+/**
+ * Write a packet into the ringbuffer.
+ *
+ * <rbuf> Ringbuffer to write to.
+ * <buf> Buffer to write.
+ * <len> Length of buffer (currently limited to 65535 bytes max).
+ * returns Number of bytes written, or -EFAULT, -ENOMEM, -EVINAL.
+ */
+extern ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8* buf,
+ size_t len);
+
+/**
+ * Read from a packet in the ringbuffer. Note: unlike dvb_ringbuffer_read(), this
+ * does NOT update the read pointer in the ringbuffer. You must use
+ * dvb_ringbuffer_pkt_dispose() to mark a packet as no longer required.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ * <offset> Offset into packet to read from.
+ * <buf> Destination buffer for data.
+ * <len> Size of destination buffer.
+ * <usermem> Set to 1 if <buf> is in userspace.
+ * returns Number of bytes read, or -EFAULT.
+ */
+extern ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx,
+ int offset, u8* buf, size_t len, int usermem);
+
+/**
+ * Dispose of a packet in the ring buffer.
+ *
+ * <rbuf> Ring buffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ */
+extern void dvb_ringbuffer_pkt_dispose(struct dvb_ringbuffer *rbuf, size_t idx);
+
+/**
+ * Get the index of the next packet in a ringbuffer.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Previous packet index, or -1 to return the first packet index.
+ * <pktlen> On success, will be updated to contain the length of the packet in bytes.
+ * returns Packet index (if >=0), or -1 if no packets available.
+ */
+extern ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf, size_t idx, size_t* pktlen);
+
+
+#endif /* _DVB_RINGBUFFER_H_ */
diff --git a/v4l/kernel-2.6.23/dvbdev.h b/v4l/kernel-2.6.23/dvbdev.h
new file mode 100644
index 0000000..6dff10e
--- /dev/null
+++ b/v4l/kernel-2.6.23/dvbdev.h
@@ -0,0 +1,128 @@
+/*
+ * dvbdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBDEV_H_
+#define _DVBDEV_H_
+
+#include <linux/types.h>
+#include <linux/poll.h>
+#include <linux/fs.h>
+#include <linux/list.h>
+#include <linux/smp_lock.h>
+
+#define DVB_MAJOR 212
+
+#define DVB_DEVICE_VIDEO 0
+#define DVB_DEVICE_AUDIO 1
+#define DVB_DEVICE_SEC 2
+#define DVB_DEVICE_FRONTEND 3
+#define DVB_DEVICE_DEMUX 4
+#define DVB_DEVICE_DVR 5
+#define DVB_DEVICE_CA 6
+#define DVB_DEVICE_NET 7
+#define DVB_DEVICE_OSD 8
+
+
+struct dvb_adapter {
+ int num;
+ struct list_head list_head;
+ struct list_head device_list;
+ const char *name;
+ u8 proposed_mac [6];
+ void* priv;
+
+ struct device *device;
+
+ struct module *module;
+};
+
+
+struct dvb_device {
+ struct list_head list_head;
+ struct file_operations *fops;
+ struct dvb_adapter *adapter;
+ int type;
+ u32 id;
+
+ /* in theory, 'users' can vanish now,
+ but I don't want to change too much now... */
+ int readers;
+ int writers;
+ int users;
+
+ wait_queue_head_t wait_queue;
+ /* don't really need those !? -- FIXME: use video_usercopy */
+ int (*kernel_ioctl)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg);
+
+ void *priv;
+};
+
+
+extern int dvb_register_adapter (struct dvb_adapter *adap, const char *name, struct module *module, struct device *device);
+extern int dvb_unregister_adapter (struct dvb_adapter *adap);
+
+extern int dvb_register_device (struct dvb_adapter *adap,
+ struct dvb_device **pdvbdev,
+ const struct dvb_device *template,
+ void *priv,
+ int type);
+
+extern void dvb_unregister_device (struct dvb_device *dvbdev);
+
+extern int dvb_generic_open (struct inode *inode, struct file *file);
+extern int dvb_generic_release (struct inode *inode, struct file *file);
+extern int dvb_generic_ioctl (struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg);
+
+/* we don't mess with video_usercopy() any more,
+we simply define out own dvb_usercopy(), which will hopefully become
+generic_usercopy() someday... */
+
+extern int dvb_usercopy(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg,
+ int (*func)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg));
+
+/** generic DVB attach function. */
+#ifdef CONFIG_DVB_CORE_ATTACH
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ void *__r = NULL; \
+ typeof(&FUNCTION) __a = symbol_request(FUNCTION); \
+ if (__a) { \
+ __r = (void *) __a(ARGS); \
+ if (__r == NULL) \
+ symbol_put(FUNCTION); \
+ } else { \
+ printk(KERN_ERR "DVB: Unable to find symbol "#FUNCTION"()\n"); \
+ } \
+ __r; \
+})
+
+#else
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ FUNCTION(ARGS); \
+})
+
+#endif
+
+#endif /* #ifndef _DVBDEV_H_ */
diff --git a/v4l/kernel-2.6.24/demux.h b/v4l/kernel-2.6.24/demux.h
new file mode 100644
index 0000000..0c1d87c
--- /dev/null
+++ b/v4l/kernel-2.6.24/demux.h
@@ -0,0 +1,278 @@
+/*
+ * demux.h
+ *
+ * Copyright (c) 2002 Convergence GmbH
+ *
+ * based on code:
+ * Copyright (c) 2000 Nokia Research Center
+ * Tampere, FINLAND
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __DEMUX_H
+#define __DEMUX_H
+
+#include <linux/types.h>
+#include <linux/errno.h>
+#include <linux/list.h>
+#include <linux/time.h>
+#include <linux/dvb/dmx.h>
+
+/*--------------------------------------------------------------------------*/
+/* Common definitions */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * DMX_MAX_FILTER_SIZE: Maximum length (in bytes) of a section/PES filter.
+ */
+
+#ifndef DMX_MAX_FILTER_SIZE
+#define DMX_MAX_FILTER_SIZE 18
+#endif
+
+/*
+ * DMX_MAX_SECFEED_SIZE: Maximum length (in bytes) of a private section feed filter.
+ */
+
+#ifndef DMX_MAX_SECTION_SIZE
+#define DMX_MAX_SECTION_SIZE 4096
+#endif
+#ifndef DMX_MAX_SECFEED_SIZE
+#define DMX_MAX_SECFEED_SIZE (DMX_MAX_SECTION_SIZE + 188)
+#endif
+
+
+/*
+ * enum dmx_success: Success codes for the Demux Callback API.
+ */
+
+enum dmx_success {
+ DMX_OK = 0, /* Received Ok */
+ DMX_LENGTH_ERROR, /* Incorrect length */
+ DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */
+ DMX_CRC_ERROR, /* Incorrect CRC */
+ DMX_FRAME_ERROR, /* Frame alignment error */
+ DMX_FIFO_ERROR, /* Receiver FIFO overrun */
+ DMX_MISSED_ERROR /* Receiver missed packet */
+} ;
+
+/*--------------------------------------------------------------------------*/
+/* TS packet reception */
+/*--------------------------------------------------------------------------*/
+
+/* TS filter type for set() */
+
+#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */
+#define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS
+ payload (<=184 bytes per packet) to callback */
+#define TS_DECODER 4 /* send stream to built-in decoder (if present) */
+
+/* PES type for filters which write to built-in decoder */
+/* these should be kept identical to the types in dmx.h */
+
+enum dmx_ts_pes
+{ /* also send packets to decoder (if it exists) */
+ DMX_TS_PES_AUDIO0,
+ DMX_TS_PES_VIDEO0,
+ DMX_TS_PES_TELETEXT0,
+ DMX_TS_PES_SUBTITLE0,
+ DMX_TS_PES_PCR0,
+
+ DMX_TS_PES_AUDIO1,
+ DMX_TS_PES_VIDEO1,
+ DMX_TS_PES_TELETEXT1,
+ DMX_TS_PES_SUBTITLE1,
+ DMX_TS_PES_PCR1,
+
+ DMX_TS_PES_AUDIO2,
+ DMX_TS_PES_VIDEO2,
+ DMX_TS_PES_TELETEXT2,
+ DMX_TS_PES_SUBTITLE2,
+ DMX_TS_PES_PCR2,
+
+ DMX_TS_PES_AUDIO3,
+ DMX_TS_PES_VIDEO3,
+ DMX_TS_PES_TELETEXT3,
+ DMX_TS_PES_SUBTITLE3,
+ DMX_TS_PES_PCR3,
+
+ DMX_TS_PES_OTHER
+};
+
+#define DMX_TS_PES_AUDIO DMX_TS_PES_AUDIO0
+#define DMX_TS_PES_VIDEO DMX_TS_PES_VIDEO0
+#define DMX_TS_PES_TELETEXT DMX_TS_PES_TELETEXT0
+#define DMX_TS_PES_SUBTITLE DMX_TS_PES_SUBTITLE0
+#define DMX_TS_PES_PCR DMX_TS_PES_PCR0
+
+
+struct dmx_ts_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux *parent; /* Back-pointer */
+ void *priv; /* Pointer to private data of the API client */
+ int (*set) (struct dmx_ts_feed *feed,
+ u16 pid,
+ int type,
+ enum dmx_ts_pes pes_type,
+ size_t circular_buffer_size,
+ struct timespec timeout);
+ int (*start_filtering) (struct dmx_ts_feed* feed);
+ int (*stop_filtering) (struct dmx_ts_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Section reception */
+/*--------------------------------------------------------------------------*/
+
+struct dmx_section_filter {
+ u8 filter_value [DMX_MAX_FILTER_SIZE];
+ u8 filter_mask [DMX_MAX_FILTER_SIZE];
+ u8 filter_mode [DMX_MAX_FILTER_SIZE];
+ struct dmx_section_feed* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+};
+
+struct dmx_section_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+
+ int check_crc;
+ u32 crc_val;
+
+ u8 *secbuf;
+ u8 secbuf_base[DMX_MAX_SECFEED_SIZE];
+ u16 secbufp, seclen, tsfeedp;
+
+ int (*set) (struct dmx_section_feed* feed,
+ u16 pid,
+ size_t circular_buffer_size,
+ int check_crc);
+ int (*allocate_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter** filter);
+ int (*release_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter* filter);
+ int (*start_filtering) (struct dmx_section_feed* feed);
+ int (*stop_filtering) (struct dmx_section_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Callback functions */
+/*--------------------------------------------------------------------------*/
+
+typedef int (*dmx_ts_cb) ( const u8 * buffer1,
+ size_t buffer1_length,
+ const u8 * buffer2,
+ size_t buffer2_length,
+ struct dmx_ts_feed* source,
+ enum dmx_success success);
+
+typedef int (*dmx_section_cb) ( const u8 * buffer1,
+ size_t buffer1_len,
+ const u8 * buffer2,
+ size_t buffer2_len,
+ struct dmx_section_filter * source,
+ enum dmx_success success);
+
+/*--------------------------------------------------------------------------*/
+/* DVB Front-End */
+/*--------------------------------------------------------------------------*/
+
+enum dmx_frontend_source {
+ DMX_MEMORY_FE,
+ DMX_FRONTEND_0,
+ DMX_FRONTEND_1,
+ DMX_FRONTEND_2,
+ DMX_FRONTEND_3,
+ DMX_STREAM_0, /* external stream input, e.g. LVDS */
+ DMX_STREAM_1,
+ DMX_STREAM_2,
+ DMX_STREAM_3
+};
+
+struct dmx_frontend {
+ struct list_head connectivity_list; /* List of front-ends that can
+ be connected to a particular
+ demux */
+ enum dmx_frontend_source source;
+};
+
+/*--------------------------------------------------------------------------*/
+/* MPEG-2 TS Demux */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * Flags OR'ed in the capabilities field of struct dmx_demux.
+ */
+
+#define DMX_TS_FILTERING 1
+#define DMX_PES_FILTERING 2
+#define DMX_SECTION_FILTERING 4
+#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */
+#define DMX_CRC_CHECKING 16
+#define DMX_TS_DESCRAMBLING 32
+
+/*
+ * Demux resource type identifier.
+*/
+
+/*
+ * DMX_FE_ENTRY(): Casts elements in the list of registered
+ * front-ends from the generic type struct list_head
+ * to the type * struct dmx_frontend
+ *.
+*/
+
+#define DMX_FE_ENTRY(list) list_entry(list, struct dmx_frontend, connectivity_list)
+
+struct dmx_demux {
+ u32 capabilities; /* Bitfield of capability flags */
+ struct dmx_frontend* frontend; /* Front-end connected to the demux */
+ void* priv; /* Pointer to private data of the API client */
+ int (*open) (struct dmx_demux* demux);
+ int (*close) (struct dmx_demux* demux);
+ int (*write) (struct dmx_demux* demux, const char* buf, size_t count);
+ int (*allocate_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed** feed,
+ dmx_ts_cb callback);
+ int (*release_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed* feed);
+ int (*allocate_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed** feed,
+ dmx_section_cb callback);
+ int (*release_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed* feed);
+ int (*add_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*remove_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ struct list_head* (*get_frontends) (struct dmx_demux* demux);
+ int (*connect_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*disconnect_frontend) (struct dmx_demux* demux);
+
+ int (*get_pes_pids) (struct dmx_demux* demux, u16 *pids);
+
+ int (*get_caps) (struct dmx_demux* demux, struct dmx_caps *caps);
+
+ int (*set_source) (struct dmx_demux* demux, const dmx_source_t *src);
+
+ int (*get_stc) (struct dmx_demux* demux, unsigned int num,
+ u64 *stc, unsigned int *base);
+};
+
+#endif /* #ifndef __DEMUX_H */
diff --git a/v4l/kernel-2.6.24/dmxdev.h b/v4l/kernel-2.6.24/dmxdev.h
new file mode 100644
index 0000000..29746e7
--- /dev/null
+++ b/v4l/kernel-2.6.24/dmxdev.h
@@ -0,0 +1,110 @@
+/*
+ * dmxdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DMXDEV_H_
+#define _DMXDEV_H_
+
+#include <linux/types.h>
+#include <linux/spinlock.h>
+#include <linux/kernel.h>
+#include <linux/timer.h>
+#include <linux/wait.h>
+#include <linux/fs.h>
+#include <linux/string.h>
+#include <linux/mutex.h>
+
+#include <linux/dvb/dmx.h>
+
+#include "dvbdev.h"
+#include "demux.h"
+#include "dvb_ringbuffer.h"
+
+enum dmxdev_type {
+ DMXDEV_TYPE_NONE,
+ DMXDEV_TYPE_SEC,
+ DMXDEV_TYPE_PES,
+};
+
+enum dmxdev_state {
+ DMXDEV_STATE_FREE,
+ DMXDEV_STATE_ALLOCATED,
+ DMXDEV_STATE_SET,
+ DMXDEV_STATE_GO,
+ DMXDEV_STATE_DONE,
+ DMXDEV_STATE_TIMEDOUT
+};
+
+struct dmxdev_filter {
+ union {
+ struct dmx_section_filter *sec;
+ } filter;
+
+ union {
+ struct dmx_ts_feed *ts;
+ struct dmx_section_feed *sec;
+ } feed;
+
+ union {
+ struct dmx_sct_filter_params sec;
+ struct dmx_pes_filter_params pes;
+ } params;
+
+ enum dmxdev_type type;
+ enum dmxdev_state state;
+ struct dmxdev *dev;
+ struct dvb_ringbuffer buffer;
+
+ struct mutex mutex;
+
+ /* only for sections */
+ struct timer_list timer;
+ int todo;
+ u8 secheader[3];
+};
+
+
+struct dmxdev {
+ struct dvb_device *dvbdev;
+ struct dvb_device *dvr_dvbdev;
+
+ struct dmxdev_filter *filter;
+ struct dmx_demux *demux;
+
+ int filternum;
+ int capabilities;
+
+ unsigned int exit:1;
+#define DMXDEV_CAP_DUPLEX 1
+ struct dmx_frontend *dvr_orig_fe;
+
+ struct dvb_ringbuffer dvr_buffer;
+#define DVR_BUFFER_SIZE (10*188*1024)
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+
+int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *);
+void dvb_dmxdev_release(struct dmxdev *dmxdev);
+
+#endif /* _DMXDEV_H_ */
diff --git a/v4l/kernel-2.6.24/dvb-pll.h b/v4l/kernel-2.6.24/dvb-pll.h
new file mode 100644
index 0000000..e93a810
--- /dev/null
+++ b/v4l/kernel-2.6.24/dvb-pll.h
@@ -0,0 +1,60 @@
+/*
+ * descriptions + helper functions for simple dvb plls.
+ */
+
+#ifndef __DVB_PLL_H__
+#define __DVB_PLL_H__
+
+#include <linux/i2c.h>
+#include "dvb_frontend.h"
+
+#define DVB_PLL_UNDEFINED 0
+#define DVB_PLL_THOMSON_DTT7579 1
+#define DVB_PLL_THOMSON_DTT759X 2
+#define DVB_PLL_THOMSON_DTT7610 3
+#define DVB_PLL_LG_Z201 4
+#define DVB_PLL_MICROTUNE_4042 5
+#define DVB_PLL_THOMSON_DTT761X 6
+#define DVB_PLL_UNKNOWN_1 7
+#define DVB_PLL_TUA6010XS 8
+#define DVB_PLL_ENV57H1XD5 9
+#define DVB_PLL_TUA6034 10
+#define DVB_PLL_LG_TDVS_H06XF 11
+#define DVB_PLL_TDA665X 12
+#define DVB_PLL_FMD1216ME 13
+#define DVB_PLL_TDED4 14
+#define DVB_PLL_TUV1236D 15
+#define DVB_PLL_TDHU2 16
+#define DVB_PLL_SAMSUNG_TBMV 17
+#define DVB_PLL_PHILIPS_SD1878_TDA8261 18
+#define DVB_PLL_PHILIPS_TD1316 19
+#define DVB_PLL_THOMSON_FE6600 20
+#define DVB_PLL_OPERA1 21
+#define DVB_PLL_FCV1236D 22
+
+/**
+ * Attach a dvb-pll to the supplied frontend structure.
+ *
+ * @param fe Frontend to attach to.
+ * @param pll_addr i2c address of the PLL (if used).
+ * @param i2c i2c adapter to use (set to NULL if not used).
+ * @param pll_desc_id dvb_pll_desc to use.
+ * @return Frontend pointer on success, NULL on failure
+ */
+#if defined(CONFIG_DVB_PLL) || (defined(CONFIG_DVB_PLL_MODULE) && defined(MODULE))
+extern struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ unsigned int pll_desc_id);
+#else
+static inline struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ unsigned int pll_desc_id)
+{
+ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __FUNCTION__);
+ return NULL;
+}
+#endif
+
+#endif
diff --git a/v4l/kernel-2.6.24/dvb-usb-ids.h b/v4l/kernel-2.6.24/dvb-usb-ids.h
new file mode 100644
index 0000000..4fa3e89
--- /dev/null
+++ b/v4l/kernel-2.6.24/dvb-usb-ids.h
@@ -0,0 +1,175 @@
+/* dvb-usb-ids.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de) see
+ * dvb-usb-init.c for copyright information.
+ *
+ * a header file containing define's for the USB device supported by the
+ * various drivers.
+ */
+#ifndef _DVB_USB_IDS_H_
+#define _DVB_USB_IDS_H_
+
+/* Vendor IDs */
+#define USB_VID_ADSTECH 0x06e1
+#define USB_VID_AFATECH 0x15a4
+#define USB_VID_ALCOR_MICRO 0x058f
+#define USB_VID_ALINK 0x05e3
+#define USB_VID_ANCHOR 0x0547
+#define USB_VID_ANUBIS_ELECTRONIC 0x10fd
+#define USB_VID_AVERMEDIA 0x07ca
+#define USB_VID_COMPRO 0x185b
+#define USB_VID_COMPRO_UNK 0x145f
+#define USB_VID_CYPRESS 0x04b4
+#define USB_VID_DIBCOM 0x10b8
+#define USB_VID_DPOSH 0x1498
+#define USB_VID_DVICO 0x0fe9
+#define USB_VID_EMPIA 0xeb1a
+#define USB_VID_GENPIX 0x09c0
+#define USB_VID_GRANDTEC 0x5032
+#define USB_VID_HANFTEK 0x15f4
+#define USB_VID_HAUPPAUGE 0x2040
+#define USB_VID_HYPER_PALTEK 0x1025
+#define USB_VID_KWORLD 0xeb2a
+#define USB_VID_KYE 0x0458
+#define USB_VID_LEADTEK 0x0413
+#define USB_VID_LITEON 0x04ca
+#define USB_VID_MEDION 0x1660
+#define USB_VID_MIGLIA 0x18f3
+#define USB_VID_MSI 0x0db0
+#define USB_VID_OPERA1 0x695c
+#define USB_VID_PINNACLE 0x2304
+#define USB_VID_TERRATEC 0x0ccd
+#define USB_VID_VISIONPLUS 0x13d3
+#define USB_VID_TWINHAN 0x1822
+#define USB_VID_ULTIMA_ELECTRONIC 0x05d8
+#define USB_VID_UNIWILL 0x1584
+#define USB_VID_WIDEVIEW 0x14aa
+
+/* Product IDs */
+#define USB_PID_ADSTECH_USB2_COLD 0xa333
+#define USB_PID_ADSTECH_USB2_WARM 0xa334
+#define USB_PID_AFATECH_AF9005 0x9020
+#define USB_VID_ALINK_DTU 0xf170
+#define USB_PID_AVERMEDIA_DVBT_USB_COLD 0x0001
+#define USB_PID_AVERMEDIA_DVBT_USB_WARM 0x0002
+#define USB_PID_AVERMEDIA_DVBT_USB2_COLD 0xa800
+#define USB_PID_AVERMEDIA_DVBT_USB2_WARM 0xa801
+#define USB_PID_COMPRO_DVBU2000_COLD 0xd000
+#define USB_PID_COMPRO_DVBU2000_WARM 0xd001
+#define USB_PID_COMPRO_DVBU2000_UNK_COLD 0x010c
+#define USB_PID_COMPRO_DVBU2000_UNK_WARM 0x010d
+#define USB_PID_COMPRO_VIDEOMATE_U500 0x1e78
+#define USB_PID_COMPRO_VIDEOMATE_U500_PC 0x1e80
+#define USB_PID_DIBCOM_HOOK_DEFAULT 0x0064
+#define USB_PID_DIBCOM_HOOK_DEFAULT_REENUM 0x0065
+#define USB_PID_DIBCOM_MOD3000_COLD 0x0bb8
+#define USB_PID_DIBCOM_MOD3000_WARM 0x0bb9
+#define USB_PID_DIBCOM_MOD3001_COLD 0x0bc6
+#define USB_PID_DIBCOM_MOD3001_WARM 0x0bc7
+#define USB_PID_DIBCOM_STK7700P 0x1e14
+#define USB_PID_DIBCOM_STK7700P_PC 0x1e78
+#define USB_PID_DIBCOM_STK7700D 0x1ef0
+#define USB_PID_DIBCOM_STK7070P 0x1ebc
+#define USB_PID_DIBCOM_STK7070PD 0x1ebe
+#define USB_PID_DIBCOM_ANCHOR_2135_COLD 0x2131
+#define USB_PID_DPOSH_M9206_COLD 0x9206
+#define USB_PID_DPOSH_M9206_WARM 0xa090
+#define USB_PID_UNIWILL_STK7700P 0x6003
+#define USB_PID_GRANDTEC_DVBT_USB_COLD 0x0fa0
+#define USB_PID_GRANDTEC_DVBT_USB_WARM 0x0fa1
+#define USB_PID_KWORLD_VSTREAM_COLD 0x17de
+#define USB_PID_KWORLD_VSTREAM_WARM 0x17df
+#define USB_PID_TERRATEC_CINERGY_T_USB_XE 0x0055
+#define USB_PID_TWINHAN_VP7041_COLD 0x3201
+#define USB_PID_TWINHAN_VP7041_WARM 0x3202
+#define USB_PID_TWINHAN_VP7020_COLD 0x3203
+#define USB_PID_TWINHAN_VP7020_WARM 0x3204
+#define USB_PID_TWINHAN_VP7045_COLD 0x3205
+#define USB_PID_TWINHAN_VP7045_WARM 0x3206
+#define USB_PID_TWINHAN_VP7021_COLD 0x3207
+#define USB_PID_TWINHAN_VP7021_WARM 0x3208
+#define USB_PID_DNTV_TINYUSB2_COLD 0x3223
+#define USB_PID_DNTV_TINYUSB2_WARM 0x3224
+#define USB_PID_ULTIMA_TVBOX_COLD 0x8105
+#define USB_PID_ULTIMA_TVBOX_WARM 0x8106
+#define USB_PID_ULTIMA_TVBOX_AN2235_COLD 0x8107
+#define USB_PID_ULTIMA_TVBOX_AN2235_WARM 0x8108
+#define USB_PID_ULTIMA_TVBOX_ANCHOR_COLD 0x2235
+#define USB_PID_ULTIMA_TVBOX_USB2_COLD 0x8109
+#define USB_PID_ULTIMA_TVBOX_USB2_WARM 0x810a
+#define USB_PID_ARTEC_T14_COLD 0x810b
+#define USB_PID_ARTEC_T14_WARM 0x810c
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_COLD 0x8613
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_WARM 0x1002
+#define USB_PID_UNK_HYPER_PALTEK_COLD 0x005e
+#define USB_PID_UNK_HYPER_PALTEK_WARM 0x005f
+#define USB_PID_HANFTEK_UMT_010_COLD 0x0001
+#define USB_PID_HANFTEK_UMT_010_WARM 0x0015
+#define USB_PID_DTT200U_COLD 0x0201
+#define USB_PID_DTT200U_WARM 0x0301
+#define USB_PID_WT220U_ZAP250_COLD 0x0220
+#define USB_PID_WT220U_COLD 0x0222
+#define USB_PID_WT220U_WARM 0x0221
+#define USB_PID_WT220U_FC_COLD 0x0225
+#define USB_PID_WT220U_FC_WARM 0x0226
+#define USB_PID_WT220U_ZL0353_COLD 0x022a
+#define USB_PID_WT220U_ZL0353_WARM 0x022b
+#define USB_PID_WINTV_NOVA_T_USB2_COLD 0x9300
+#define USB_PID_WINTV_NOVA_T_USB2_WARM 0x9301
+#define USB_PID_HAUPPAUGE_NOVA_T_500 0x9941
+#define USB_PID_HAUPPAUGE_NOVA_T_500_2 0x9950
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK 0x7050
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK_2 0x7060
+#define USB_PID_HAUPPAUGE_NOVA_TD_STICK 0x9580
+#define USB_PID_AVERMEDIA_EXPRESS 0xb568
+#define USB_PID_AVERMEDIA_VOLAR 0xa807
+#define USB_PID_AVERMEDIA_VOLAR_2 0xb808
+#define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY 0x005a
+#define USB_PID_PINNACLE_PCTV2000E 0x022c
+#define USB_PID_PINNACLE_PCTV_DVB_T_FLASH 0x0228
+#define USB_PID_PINNACLE_PCTV_DUAL_DIVERSITY_DVB_T 0x0229
+#define USB_PID_PCTV_200E 0x020e
+#define USB_PID_PCTV_400E 0x020f
+#define USB_PID_PCTV_450E 0x0222
+#define USB_PID_NEBULA_DIGITV 0x0201
+#define USB_PID_DVICO_BLUEBIRD_LGDT 0xd820
+#define USB_PID_DVICO_BLUEBIRD_LG064F_COLD 0xd500
+#define USB_PID_DVICO_BLUEBIRD_LG064F_WARM 0xd501
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_COLD 0xdb00
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_WARM 0xdb01
+#define USB_PID_DVICO_BLUEBIRD_TH7579_COLD 0xdb10
+#define USB_PID_DVICO_BLUEBIRD_TH7579_WARM 0xdb11
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_COLD 0xdb50
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_WARM 0xdb51
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_COLD 0xdb58
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_WARM 0xdb59
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_COLD 0xdb54
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_WARM 0xdb55
+#define USB_PID_MEDION_MD95700 0x0932
+#define USB_PID_MSI_MEGASKY580 0x5580
+#define USB_PID_MSI_MEGASKY580_55801 0x5581
+#define USB_PID_KYE_DVB_T_COLD 0x701e
+#define USB_PID_KYE_DVB_T_WARM 0x701f
+#define USB_PID_LITEON_DVB_T_COLD 0xf000
+#define USB_PID_LITEON_DVB_T_WARM 0xf001
+#define USB_PID_DIGIVOX_MINI_SL_COLD 0xe360
+#define USB_PID_DIGIVOX_MINI_SL_WARM 0xe361
+#define USB_PID_GRANDTEC_DVBT_USB2_COLD 0x0bc6
+#define USB_PID_GRANDTEC_DVBT_USB2_WARM 0x0bc7
+#define USB_PID_WINFAST_DTV_DONGLE_COLD 0x6025
+#define USB_PID_WINFAST_DTV_DONGLE_WARM 0x6026
+#define USB_PID_WINFAST_DTV_DONGLE_STK7700P 0x6f00
+#define USB_PID_GENPIX_8PSK_REV_1_COLD 0x0200
+#define USB_PID_GENPIX_8PSK_REV_1_WARM 0x0201
+#define USB_PID_GENPIX_8PSK_REV_2 0x0202
+#define USB_PID_GENPIX_SKYWALKER_1 0x0203
+#define USB_PID_GENPIX_SKYWALKER_CW3K 0x0204
+#define USB_PID_SIGMATEK_DVB_110 0x6610
+#define USB_PID_MSI_DIGI_VOX_MINI_II 0x1513
+#define USB_PID_OPERA1_COLD 0x2830
+#define USB_PID_OPERA1_WARM 0x3829
+#define USB_PID_LIFEVIEW_TV_WALKER_TWIN_COLD 0x0514
+#define USB_PID_LIFEVIEW_TV_WALKER_TWIN_WARM 0x0513
+
+
+#endif
diff --git a/v4l/kernel-2.6.24/dvb-usb.h b/v4l/kernel-2.6.24/dvb-usb.h
new file mode 100644
index 0000000..d1b3c7b
--- /dev/null
+++ b/v4l/kernel-2.6.24/dvb-usb.h
@@ -0,0 +1,397 @@
+/* dvb-usb.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * the headerfile, all dvb-usb-drivers have to include.
+ *
+ * TODO: clean-up the structures for unused fields and update the comments
+ */
+#ifndef __DVB_USB_H__
+#define __DVB_USB_H__
+
+#include <linux/input.h>
+#include <linux/usb.h>
+#include <linux/firmware.h>
+#include <linux/mutex.h>
+
+#include "dvb_frontend.h"
+#include "dvb_demux.h"
+#include "dvb_net.h"
+#include "dmxdev.h"
+
+#include "dvb-pll.h"
+
+#include "dvb-usb-ids.h"
+
+/* debug */
+#ifdef CONFIG_DVB_USB_DEBUG
+#define dprintk(var,level,args...) \
+ do { if ((var & level)) { printk(args); } } while (0)
+
+#define debug_dump(b,l,func) {\
+ int loop_; \
+ for (loop_ = 0; loop_ < l; loop_++) func("%02x ", b[loop_]); \
+ func("\n");\
+}
+#define DVB_USB_DEBUG_STATUS
+#else
+#define dprintk(args...)
+#define debug_dump(b,l,func)
+
+#define DVB_USB_DEBUG_STATUS " (debugging is not enabled)"
+
+#endif
+
+/* generic log methods - taken from usb.h */
+#ifndef DVB_USB_LOG_PREFIX
+ #define DVB_USB_LOG_PREFIX "dvb-usb (please define a log prefix)"
+#endif
+
+#undef err
+#define err(format, arg...) printk(KERN_ERR DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef info
+#define info(format, arg...) printk(KERN_INFO DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef warn
+#define warn(format, arg...) printk(KERN_WARNING DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+
+/**
+ * struct dvb_usb_device_description - name and its according USB IDs
+ * @name: real name of the box, regardless which DVB USB device class is in use
+ * @cold_ids: array of struct usb_device_id which describe the device in
+ * pre-firmware state
+ * @warm_ids: array of struct usb_device_id which describe the device in
+ * post-firmware state
+ *
+ * Each DVB USB device class can have one or more actual devices, this struct
+ * assigns a name to it.
+ */
+struct dvb_usb_device_description {
+ const char *name;
+
+#define DVB_USB_ID_MAX_NUM 15
+ struct usb_device_id *cold_ids[DVB_USB_ID_MAX_NUM];
+ struct usb_device_id *warm_ids[DVB_USB_ID_MAX_NUM];
+};
+
+/**
+ * struct dvb_usb_rc_key - a remote control key and its input-event
+ * @custom: the vendor/custom part of the key
+ * @data: the actual key part
+ * @event: the input event assigned to key identified by custom and data
+ */
+struct dvb_usb_rc_key {
+ u8 custom,data;
+ u32 event;
+};
+
+struct dvb_usb_device;
+struct dvb_usb_adapter;
+struct usb_data_stream;
+
+/**
+ * Properties of USB streaming - TODO this structure should be somewhere else
+ * describes the kind of USB transfer used for data-streaming.
+ * (BULK or ISOC)
+ */
+struct usb_data_stream_properties {
+#define USB_BULK 1
+#define USB_ISOC 2
+ int type;
+ int count;
+ int endpoint;
+
+ union {
+ struct {
+ int buffersize; /* per URB */
+ } bulk;
+ struct {
+ int framesperurb;
+ int framesize;
+ int interval;
+ } isoc;
+ } u;
+};
+
+/**
+ * struct dvb_usb_adapter_properties - properties of a dvb-usb-adapter.
+ * A DVB-USB-Adapter is basically a dvb_adapter which is present on a USB-device.
+ * @caps: capabilities of the DVB USB device.
+ * @pid_filter_count: number of PID filter position in the optional hardware
+ * PID-filter.
+ * @streaming_ctrl: called to start and stop the MPEG2-TS streaming of the
+ * device (not URB submitting/killing).
+ * @pid_filter_ctrl: called to en/disable the PID filter, if any.
+ * @pid_filter: called to set/unset a PID for filtering.
+ * @frontend_attach: called to attach the possible frontends (fill fe-field
+ * of struct dvb_usb_device).
+ * @tuner_attach: called to attach the correct tuner and to fill pll_addr,
+ * pll_desc and pll_init_buf of struct dvb_usb_device).
+ * @stream: configuration of the USB streaming
+ */
+struct dvb_usb_adapter_properties {
+#define DVB_USB_ADAP_HAS_PID_FILTER 0x01
+#define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
+#define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
+#define DVB_USB_ADAP_RECEIVES_204_BYTE_TS 0x08
+ int caps;
+ int pid_filter_count;
+
+ int (*streaming_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
+
+ int (*frontend_attach) (struct dvb_usb_adapter *);
+ int (*tuner_attach) (struct dvb_usb_adapter *);
+
+ struct usb_data_stream_properties stream;
+
+ int size_of_priv;
+};
+
+/**
+ * struct dvb_usb_device_properties - properties of a dvb-usb-device
+ * @usb_ctrl: which USB device-side controller is in use. Needed for firmware
+ * download.
+ * @firmware: name of the firmware file.
+ * @download_firmware: called to download the firmware when the usb_ctrl is
+ * DEVICE_SPECIFIC.
+ * @no_reconnect: device doesn't do a reconnect after downloading the firmware,
+ * so do the warm initialization right after it
+ *
+ * @size_of_priv: how many bytes shall be allocated for the private field
+ * of struct dvb_usb_device.
+ *
+ * @power_ctrl: called to enable/disable power of the device.
+ * @read_mac_address: called to read the MAC address of the device.
+ * @identify_state: called to determine the state (cold or warm), when it
+ * is not distinguishable by the USB IDs.
+ *
+ * @rc_key_map: a hard-wired array of struct dvb_usb_rc_key (NULL to disable
+ * remote control handling).
+ * @rc_key_map_size: number of items in @rc_key_map.
+ * @rc_query: called to query an event event.
+ * @rc_interval: time in ms between two queries.
+ *
+ * @i2c_algo: i2c_algorithm if the device has I2CoverUSB.
+ *
+ * @generic_bulk_ctrl_endpoint: most of the DVB USB devices have a generic
+ * endpoint which received control messages with bulk transfers. When this
+ * is non-zero, one can use dvb_usb_generic_rw and dvb_usb_generic_write-
+ * helper functions.
+ *
+ * @num_device_descs: number of struct dvb_usb_device_description in @devices
+ * @devices: array of struct dvb_usb_device_description compatibles with these
+ * properties.
+ */
+#define MAX_NO_OF_ADAPTER_PER_DEVICE 2
+struct dvb_usb_device_properties {
+
+#define DVB_USB_IS_AN_I2C_ADAPTER 0x01
+ int caps;
+
+#define DEVICE_SPECIFIC 0
+#define CYPRESS_AN2135 1
+#define CYPRESS_AN2235 2
+#define CYPRESS_FX2 3
+ int usb_ctrl;
+ int (*download_firmware) (struct usb_device *, const struct firmware *);
+ const char firmware[FIRMWARE_NAME_MAX];
+ int no_reconnect;
+
+ int size_of_priv;
+
+ int num_adapters;
+ struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ int (*power_ctrl) (struct dvb_usb_device *, int);
+ int (*read_mac_address) (struct dvb_usb_device *, u8 []);
+ int (*identify_state) (struct usb_device *, struct dvb_usb_device_properties *,
+ struct dvb_usb_device_description **, int *);
+
+/* remote control properties */
+#define REMOTE_NO_KEY_PRESSED 0x00
+#define REMOTE_KEY_PRESSED 0x01
+#define REMOTE_KEY_REPEAT 0x02
+ struct dvb_usb_rc_key *rc_key_map;
+ int rc_key_map_size;
+ int (*rc_query) (struct dvb_usb_device *, u32 *, int *);
+ int rc_interval;
+
+ struct i2c_algorithm *i2c_algo;
+
+ int generic_bulk_ctrl_endpoint;
+
+ int num_device_descs;
+ struct dvb_usb_device_description devices[9];
+};
+
+/**
+ * struct usb_data_stream - generic object of an USB stream
+ * @buf_num: number of buffer allocated.
+ * @buf_size: size of each buffer in buf_list.
+ * @buf_list: array containing all allocate buffers for streaming.
+ * @dma_addr: list of dma_addr_t for each buffer in buf_list.
+ *
+ * @urbs_initialized: number of URBs initialized.
+ * @urbs_submitted: number of URBs submitted.
+ */
+#define MAX_NO_URBS_FOR_DATA_STREAM 10
+struct usb_data_stream {
+ struct usb_device *udev;
+ struct usb_data_stream_properties props;
+
+#define USB_STATE_INIT 0x00
+#define USB_STATE_URB_BUF 0x01
+ int state;
+
+ void (*complete) (struct usb_data_stream *, u8 *, size_t);
+
+ struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ int buf_num;
+ unsigned long buf_size;
+ u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
+
+ int urbs_initialized;
+ int urbs_submitted;
+
+ void *user_priv;
+};
+
+/**
+ * struct dvb_usb_adapter - a DVB adapter on a USB device
+ * @id: index of this adapter (starting with 0).
+ *
+ * @feedcount: number of reqested feeds (used for streaming-activation)
+ * @pid_filtering: is hardware pid_filtering used or not.
+ *
+ * @pll_addr: I2C address of the tuner for programming
+ * @pll_init: array containing the initialization buffer
+ * @pll_desc: pointer to the appropriate struct dvb_pll_desc
+ * @tuner_pass_ctrl: called to (de)activate tuner passthru of the demod or the board
+ *
+ * @dvb_adap: device's dvb_adapter.
+ * @dmxdev: device's dmxdev.
+ * @demux: device's software demuxer.
+ * @dvb_net: device's dvb_net interfaces.
+ * @dvb_frontend: device's frontend.
+ * @max_feed_count: how many feeds can be handled simultaneously by this
+ * device
+ *
+ * @fe_init: rerouted frontend-init (wakeup) function.
+ * @fe_sleep: rerouted frontend-sleep function.
+ *
+ * @stream: the usb data stream.
+ */
+struct dvb_usb_adapter {
+ struct dvb_usb_device *dev;
+ struct dvb_usb_adapter_properties props;
+
+#define DVB_USB_ADAP_STATE_INIT 0x000
+#define DVB_USB_ADAP_STATE_DVB 0x001
+ int state;
+
+ u8 id;
+
+ int feedcount;
+ int pid_filtering;
+
+ /* dvb */
+ struct dvb_adapter dvb_adap;
+ struct dmxdev dmxdev;
+ struct dvb_demux demux;
+ struct dvb_net dvb_net;
+ struct dvb_frontend *fe;
+ int max_feed_count;
+
+ int (*fe_init) (struct dvb_frontend *);
+ int (*fe_sleep) (struct dvb_frontend *);
+
+ struct usb_data_stream stream;
+
+ void *priv;
+};
+
+/**
+ * struct dvb_usb_device - object of a DVB USB device
+ * @props: copy of the struct dvb_usb_properties this device belongs to.
+ * @desc: pointer to the device's struct dvb_usb_device_description.
+ * @state: initialization and runtime state of the device.
+ *
+ * @powered: indicated whether the device is power or not.
+ * Powered is in/decremented for each call to modify the state.
+ * @udev: pointer to the device's struct usb_device.
+ *
+ * @usb_mutex: semaphore of USB control messages (reading needs two messages)
+ * @i2c_mutex: semaphore for i2c-transfers
+ *
+ * @i2c_adap: device's i2c_adapter if it uses I2CoverUSB
+ *
+ * @rc_input_dev: input device for the remote control.
+ * @rc_query_work: struct work_struct frequent rc queries
+ * @last_event: last triggered event
+ * @last_state: last state (no, pressed, repeat)
+ * @owner: owner of the dvb_adapter
+ * @priv: private data of the actual driver (allocate by dvb-usb, size defined
+ * in size_of_priv of dvb_usb_properties).
+ */
+struct dvb_usb_device {
+ struct dvb_usb_device_properties props;
+ struct dvb_usb_device_description *desc;
+
+ struct usb_device *udev;
+
+#define DVB_USB_STATE_INIT 0x000
+#define DVB_USB_STATE_I2C 0x001
+#define DVB_USB_STATE_DVB 0x002
+#define DVB_USB_STATE_REMOTE 0x004
+ int state;
+
+ int powered;
+
+ /* locking */
+ struct mutex usb_mutex;
+
+ /* i2c */
+ struct mutex i2c_mutex;
+ struct i2c_adapter i2c_adap;
+
+ int num_adapters_initialized;
+ struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ /* remote control */
+ struct input_dev *rc_input_dev;
+ char rc_phys[64];
+ struct delayed_work rc_query_work;
+ u32 last_event;
+ int last_state;
+
+ struct module *owner;
+
+ void *priv;
+};
+
+extern int dvb_usb_device_init(struct usb_interface *, struct dvb_usb_device_properties *, struct module *, struct dvb_usb_device **);
+extern void dvb_usb_device_exit(struct usb_interface *);
+
+/* the generic read/write method for device control */
+extern int dvb_usb_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16,int);
+extern int dvb_usb_generic_write(struct dvb_usb_device *, u8 *, u16);
+
+/* commonly used remote control parsing */
+extern int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *, u8[], u32 *, int *);
+
+/* commonly used firmware download types and function */
+struct hexline {
+ u8 len;
+ u32 addr;
+ u8 type;
+ u8 data[255];
+ u8 chk;
+};
+extern int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type);
+extern int dvb_usb_get_hexline(const struct firmware *fw, struct hexline *hx, int *pos);
+
+
+#endif
diff --git a/v4l/kernel-2.6.24/dvb_demux.h b/v4l/kernel-2.6.24/dvb_demux.h
new file mode 100644
index 0000000..2c5f915
--- /dev/null
+++ b/v4l/kernel-2.6.24/dvb_demux.h
@@ -0,0 +1,140 @@
+/*
+ * dvb_demux.h: DVB kernel demux API
+ *
+ * Copyright (C) 2000-2001 Marcus Metzler & Ralph Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_DEMUX_H_
+#define _DVB_DEMUX_H_
+
+#include <linux/time.h>
+#include <linux/timer.h>
+#include <linux/spinlock.h>
+#include <linux/mutex.h>
+
+#include "demux.h"
+
+#define DMX_TYPE_TS 0
+#define DMX_TYPE_SEC 1
+#define DMX_TYPE_PES 2
+
+#define DMX_STATE_FREE 0
+#define DMX_STATE_ALLOCATED 1
+#define DMX_STATE_SET 2
+#define DMX_STATE_READY 3
+#define DMX_STATE_GO 4
+
+#define DVB_DEMUX_MASK_MAX 18
+
+struct dvb_demux_filter {
+ struct dmx_section_filter filter;
+ u8 maskandmode[DMX_MAX_FILTER_SIZE];
+ u8 maskandnotmode[DMX_MAX_FILTER_SIZE];
+ int doneq;
+
+ struct dvb_demux_filter *next;
+ struct dvb_demux_feed *feed;
+ int index;
+ int state;
+ int type;
+
+ u16 hw_handle;
+ struct timer_list timer;
+};
+
+#define DMX_FEED_ENTRY(pos) list_entry(pos, struct dvb_demux_feed, list_head)
+
+struct dvb_demux_feed {
+ union {
+ struct dmx_ts_feed ts;
+ struct dmx_section_feed sec;
+ } feed;
+
+ union {
+ dmx_ts_cb ts;
+ dmx_section_cb sec;
+ } cb;
+
+ struct dvb_demux *demux;
+ void *priv;
+ int type;
+ int state;
+ u16 pid;
+ u8 *buffer;
+ int buffer_size;
+
+ struct timespec timeout;
+ struct dvb_demux_filter *filter;
+
+ int ts_type;
+ enum dmx_ts_pes pes_type;
+
+ int cc;
+ int pusi_seen; /* prevents feeding of garbage from previous section */
+
+ u16 peslen;
+
+ struct list_head list_head;
+ unsigned int index; /* a unique index for each feed (can be used as hardware pid filter index) */
+};
+
+struct dvb_demux {
+ struct dmx_demux dmx;
+ void *priv;
+ int filternum;
+ int feednum;
+ int (*start_feed)(struct dvb_demux_feed *feed);
+ int (*stop_feed)(struct dvb_demux_feed *feed);
+ int (*write_to_decoder)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ u32 (*check_crc32)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ void (*memcopy)(struct dvb_demux_feed *feed, u8 *dst,
+ const u8 *src, size_t len);
+
+ int users;
+#define MAX_DVB_DEMUX_USERS 10
+ struct dvb_demux_filter *filter;
+ struct dvb_demux_feed *feed;
+
+ struct list_head frontend_list;
+
+ struct dvb_demux_feed *pesfilter[DMX_TS_PES_OTHER];
+ u16 pids[DMX_TS_PES_OTHER];
+ int playing;
+ int recording;
+
+#define DMX_MAX_PID 0x2000
+ struct list_head feed_list;
+ u8 tsbuf[204];
+ int tsbufp;
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+int dvb_dmx_init(struct dvb_demux *dvbdemux);
+void dvb_dmx_release(struct dvb_demux *dvbdemux);
+void dvb_dmx_swfilter_packets(struct dvb_demux *dvbdmx, const u8 *buf,
+ size_t count);
+void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count);
+void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf,
+ size_t count);
+
+#endif /* _DVB_DEMUX_H_ */
diff --git a/v4l/kernel-2.6.24/dvb_frontend.h b/v4l/kernel-2.6.24/dvb_frontend.h
new file mode 100644
index 0000000..a5262e8
--- /dev/null
+++ b/v4l/kernel-2.6.24/dvb_frontend.h
@@ -0,0 +1,180 @@
+/*
+ * dvb_frontend.h
+ *
+ * Copyright (C) 2001 convergence integrated media GmbH
+ * Copyright (C) 2004 convergence GmbH
+ *
+ * Written by Ralph Metzler
+ * Overhauled by Holger Waechtler
+ * Kernel I2C stuff by Michael Hunold <hunold@convergence.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_FRONTEND_H_
+#define _DVB_FRONTEND_H_
+
+#include <linux/types.h>
+#include <linux/sched.h>
+#include <linux/ioctl.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/delay.h>
+#include <linux/mutex.h>
+
+#include <linux/dvb/frontend.h>
+
+#include "dvbdev.h"
+
+struct dvb_frontend_tune_settings {
+ int min_delay_ms;
+ int step_size;
+ int max_drift;
+ struct dvb_frontend_parameters parameters;
+};
+
+struct dvb_frontend;
+
+struct dvb_tuner_info {
+ char name[128];
+
+ u32 frequency_min;
+ u32 frequency_max;
+ u32 frequency_step;
+
+ u32 bandwidth_min;
+ u32 bandwidth_max;
+ u32 bandwidth_step;
+};
+
+struct analog_parameters {
+ unsigned int frequency;
+ unsigned int mode;
+ unsigned int audmode;
+ u64 std;
+};
+
+struct dvb_tuner_ops {
+
+ struct dvb_tuner_info info;
+
+ int (*release)(struct dvb_frontend *fe);
+ int (*init)(struct dvb_frontend *fe);
+ int (*sleep)(struct dvb_frontend *fe);
+
+ /** This is for simple PLLs - set all parameters in one go. */
+ int (*set_params)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
+ int (*set_analog_params)(struct dvb_frontend *fe, struct analog_parameters *p);
+
+ /** This is support for demods like the mt352 - fills out the supplied buffer with what to write. */
+ int (*calc_regs)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p, u8 *buf, int buf_len);
+
+ int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency);
+ int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth);
+
+#define TUNER_STATUS_LOCKED 1
+#define TUNER_STATUS_STEREO 2
+ int (*get_status)(struct dvb_frontend *fe, u32 *status);
+ int (*get_rf_strength)(struct dvb_frontend *fe, u16 *strength);
+
+ /** These are provided seperately from set_params in order to facilitate silicon
+ * tuners which require sophisticated tuning loops, controlling each parameter seperately. */
+ int (*set_frequency)(struct dvb_frontend *fe, u32 frequency);
+ int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
+};
+
+struct dvb_frontend_ops {
+
+ struct dvb_frontend_info info;
+
+ void (*release)(struct dvb_frontend* fe);
+ void (*release_sec)(struct dvb_frontend* fe);
+
+ int (*init)(struct dvb_frontend* fe);
+ int (*sleep)(struct dvb_frontend* fe);
+
+ int (*write)(struct dvb_frontend* fe, u8* buf, int len);
+
+ /* if this is set, it overrides the default swzigzag */
+ int (*tune)(struct dvb_frontend* fe,
+ struct dvb_frontend_parameters* params,
+ unsigned int mode_flags,
+ unsigned int *delay,
+ fe_status_t *status);
+ /* get frontend tuning algorithm from the module */
+ int (*get_frontend_algo)(struct dvb_frontend *fe);
+
+ /* these two are only used for the swzigzag code */
+ int (*set_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+ int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings);
+
+ int (*get_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+
+ int (*read_status)(struct dvb_frontend* fe, fe_status_t* status);
+ int (*read_ber)(struct dvb_frontend* fe, u32* ber);
+ int (*read_signal_strength)(struct dvb_frontend* fe, u16* strength);
+ int (*read_snr)(struct dvb_frontend* fe, u16* snr);
+ int (*read_ucblocks)(struct dvb_frontend* fe, u32* ucblocks);
+
+ int (*diseqc_reset_overload)(struct dvb_frontend* fe);
+ int (*diseqc_send_master_cmd)(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd);
+ int (*diseqc_recv_slave_reply)(struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply);
+ int (*diseqc_send_burst)(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd);
+ int (*set_tone)(struct dvb_frontend* fe, fe_sec_tone_mode_t tone);
+ int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
+ int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg);
+ int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
+ int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
+ int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);
+
+ struct dvb_tuner_ops tuner_ops;
+};
+
+#define MAX_EVENT 8
+
+struct dvb_fe_events {
+ struct dvb_frontend_event events[MAX_EVENT];
+ int eventw;
+ int eventr;
+ int overflow;
+ wait_queue_head_t wait_queue;
+ struct mutex mtx;
+};
+
+struct dvb_frontend {
+ struct dvb_frontend_ops ops;
+ struct dvb_adapter *dvb;
+ void* demodulator_priv;
+ void* tuner_priv;
+ void* frontend_priv;
+ void* sec_priv;
+};
+
+extern int dvb_register_frontend(struct dvb_adapter* dvb,
+ struct dvb_frontend* fe);
+
+extern int dvb_unregister_frontend(struct dvb_frontend* fe);
+
+extern void dvb_frontend_detach(struct dvb_frontend* fe);
+
+extern void dvb_frontend_reinitialise(struct dvb_frontend *fe);
+
+extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec);
+extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime);
+
+#endif
diff --git a/v4l/kernel-2.6.24/dvb_net.h b/v4l/kernel-2.6.24/dvb_net.h
new file mode 100644
index 0000000..3a3126c
--- /dev/null
+++ b/v4l/kernel-2.6.24/dvb_net.h
@@ -0,0 +1,47 @@
+/*
+ * dvb_net.h
+ *
+ * Copyright (C) 2001 Ralph Metzler for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_NET_H_
+#define _DVB_NET_H_
+
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/inetdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/skbuff.h>
+
+#include "dvbdev.h"
+
+#define DVB_NET_DEVICES_MAX 10
+
+struct dvb_net {
+ struct dvb_device *dvbdev;
+ struct net_device *device[DVB_NET_DEVICES_MAX];
+ int state[DVB_NET_DEVICES_MAX];
+ unsigned int exit:1;
+ struct dmx_demux *demux;
+};
+
+
+void dvb_net_release(struct dvb_net *);
+int dvb_net_init(struct dvb_adapter *, struct dvb_net *, struct dmx_demux *);
+
+#endif
diff --git a/v4l/kernel-2.6.24/dvb_ringbuffer.h b/v4l/kernel-2.6.24/dvb_ringbuffer.h
new file mode 100644
index 0000000..d97714e
--- /dev/null
+++ b/v4l/kernel-2.6.24/dvb_ringbuffer.h
@@ -0,0 +1,174 @@
+/*
+ *
+ * dvb_ringbuffer.h: ring buffer implementation for the dvb driver
+ *
+ * Copyright (C) 2003 Oliver Endriss
+ * Copyright (C) 2004 Andrew de Quincey
+ *
+ * based on code originally found in av7110.c & dvb_ci.c:
+ * Copyright (C) 1999-2003 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _DVB_RINGBUFFER_H_
+#define _DVB_RINGBUFFER_H_
+
+#include <linux/spinlock.h>
+#include <linux/wait.h>
+
+struct dvb_ringbuffer {
+ u8 *data;
+ ssize_t size;
+ ssize_t pread;
+ ssize_t pwrite;
+ int error;
+
+ wait_queue_head_t queue;
+ spinlock_t lock;
+};
+
+#define DVB_RINGBUFFER_PKTHDRSIZE 3
+
+
+/*
+** Notes:
+** ------
+** (1) For performance reasons read and write routines don't check buffer sizes
+** and/or number of bytes free/available. This has to be done before these
+** routines are called. For example:
+**
+** *** write <buflen> bytes ***
+** free = dvb_ringbuffer_free(rbuf);
+** if (free >= buflen)
+** count = dvb_ringbuffer_write(rbuf, buffer, buflen);
+** else
+** ...
+**
+** *** read min. 1000, max. <bufsize> bytes ***
+** avail = dvb_ringbuffer_avail(rbuf);
+** if (avail >= 1000)
+** count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize), 0);
+** else
+** ...
+**
+** (2) If there is exactly one reader and one writer, there is no need
+** to lock read or write operations.
+** Two or more readers must be locked against each other.
+** Flushing the buffer counts as a read operation.
+** Two or more writers must be locked against each other.
+*/
+
+/* initialize ring buffer, lock and queue */
+extern void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data, size_t len);
+
+/* test whether buffer is empty */
+extern int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf);
+
+/* return the number of free bytes in the buffer */
+extern ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf);
+
+/* return the number of bytes waiting in the buffer */
+extern ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf);
+
+
+/* read routines & macros */
+/* ---------------------- */
+/* flush buffer */
+extern void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf);
+
+/* flush buffer protected by spinlock and wake-up waiting task(s) */
+extern void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf);
+
+/* peek at byte <offs> in the buffer */
+#define DVB_RINGBUFFER_PEEK(rbuf,offs) \
+ (rbuf)->data[((rbuf)->pread+(offs))%(rbuf)->size]
+
+/* advance read ptr by <num> bytes */
+#define DVB_RINGBUFFER_SKIP(rbuf,num) \
+ (rbuf)->pread=((rbuf)->pread+(num))%(rbuf)->size
+
+/*
+** read <len> bytes from ring buffer into <buf>
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf, u8 *buf,
+ size_t len, int usermem);
+
+
+/* write routines & macros */
+/* ----------------------- */
+/* write single byte to ring buffer */
+#define DVB_RINGBUFFER_WRITE_BYTE(rbuf,byte) \
+ { (rbuf)->data[(rbuf)->pwrite]=(byte); \
+ (rbuf)->pwrite=((rbuf)->pwrite+1)%(rbuf)->size; }
+/*
+** write <len> bytes to ring buffer
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf,
+ size_t len);
+
+
+/**
+ * Write a packet into the ringbuffer.
+ *
+ * <rbuf> Ringbuffer to write to.
+ * <buf> Buffer to write.
+ * <len> Length of buffer (currently limited to 65535 bytes max).
+ * returns Number of bytes written, or -EFAULT, -ENOMEM, -EVINAL.
+ */
+extern ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8* buf,
+ size_t len);
+
+/**
+ * Read from a packet in the ringbuffer. Note: unlike dvb_ringbuffer_read(), this
+ * does NOT update the read pointer in the ringbuffer. You must use
+ * dvb_ringbuffer_pkt_dispose() to mark a packet as no longer required.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ * <offset> Offset into packet to read from.
+ * <buf> Destination buffer for data.
+ * <len> Size of destination buffer.
+ * <usermem> Set to 1 if <buf> is in userspace.
+ * returns Number of bytes read, or -EFAULT.
+ */
+extern ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx,
+ int offset, u8* buf, size_t len, int usermem);
+
+/**
+ * Dispose of a packet in the ring buffer.
+ *
+ * <rbuf> Ring buffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ */
+extern void dvb_ringbuffer_pkt_dispose(struct dvb_ringbuffer *rbuf, size_t idx);
+
+/**
+ * Get the index of the next packet in a ringbuffer.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Previous packet index, or -1 to return the first packet index.
+ * <pktlen> On success, will be updated to contain the length of the packet in bytes.
+ * returns Packet index (if >=0), or -1 if no packets available.
+ */
+extern ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf, size_t idx, size_t* pktlen);
+
+
+#endif /* _DVB_RINGBUFFER_H_ */
diff --git a/v4l/kernel-2.6.24/dvbdev.h b/v4l/kernel-2.6.24/dvbdev.h
new file mode 100644
index 0000000..6dff10e
--- /dev/null
+++ b/v4l/kernel-2.6.24/dvbdev.h
@@ -0,0 +1,128 @@
+/*
+ * dvbdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBDEV_H_
+#define _DVBDEV_H_
+
+#include <linux/types.h>
+#include <linux/poll.h>
+#include <linux/fs.h>
+#include <linux/list.h>
+#include <linux/smp_lock.h>
+
+#define DVB_MAJOR 212
+
+#define DVB_DEVICE_VIDEO 0
+#define DVB_DEVICE_AUDIO 1
+#define DVB_DEVICE_SEC 2
+#define DVB_DEVICE_FRONTEND 3
+#define DVB_DEVICE_DEMUX 4
+#define DVB_DEVICE_DVR 5
+#define DVB_DEVICE_CA 6
+#define DVB_DEVICE_NET 7
+#define DVB_DEVICE_OSD 8
+
+
+struct dvb_adapter {
+ int num;
+ struct list_head list_head;
+ struct list_head device_list;
+ const char *name;
+ u8 proposed_mac [6];
+ void* priv;
+
+ struct device *device;
+
+ struct module *module;
+};
+
+
+struct dvb_device {
+ struct list_head list_head;
+ struct file_operations *fops;
+ struct dvb_adapter *adapter;
+ int type;
+ u32 id;
+
+ /* in theory, 'users' can vanish now,
+ but I don't want to change too much now... */
+ int readers;
+ int writers;
+ int users;
+
+ wait_queue_head_t wait_queue;
+ /* don't really need those !? -- FIXME: use video_usercopy */
+ int (*kernel_ioctl)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg);
+
+ void *priv;
+};
+
+
+extern int dvb_register_adapter (struct dvb_adapter *adap, const char *name, struct module *module, struct device *device);
+extern int dvb_unregister_adapter (struct dvb_adapter *adap);
+
+extern int dvb_register_device (struct dvb_adapter *adap,
+ struct dvb_device **pdvbdev,
+ const struct dvb_device *template,
+ void *priv,
+ int type);
+
+extern void dvb_unregister_device (struct dvb_device *dvbdev);
+
+extern int dvb_generic_open (struct inode *inode, struct file *file);
+extern int dvb_generic_release (struct inode *inode, struct file *file);
+extern int dvb_generic_ioctl (struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg);
+
+/* we don't mess with video_usercopy() any more,
+we simply define out own dvb_usercopy(), which will hopefully become
+generic_usercopy() someday... */
+
+extern int dvb_usercopy(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg,
+ int (*func)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg));
+
+/** generic DVB attach function. */
+#ifdef CONFIG_DVB_CORE_ATTACH
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ void *__r = NULL; \
+ typeof(&FUNCTION) __a = symbol_request(FUNCTION); \
+ if (__a) { \
+ __r = (void *) __a(ARGS); \
+ if (__r == NULL) \
+ symbol_put(FUNCTION); \
+ } else { \
+ printk(KERN_ERR "DVB: Unable to find symbol "#FUNCTION"()\n"); \
+ } \
+ __r; \
+})
+
+#else
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ FUNCTION(ARGS); \
+})
+
+#endif
+
+#endif /* #ifndef _DVBDEV_H_ */
diff --git a/v4l/kernel-2.6.25/demux.h b/v4l/kernel-2.6.25/demux.h
new file mode 100644
index 0000000..0c1d87c
--- /dev/null
+++ b/v4l/kernel-2.6.25/demux.h
@@ -0,0 +1,278 @@
+/*
+ * demux.h
+ *
+ * Copyright (c) 2002 Convergence GmbH
+ *
+ * based on code:
+ * Copyright (c) 2000 Nokia Research Center
+ * Tampere, FINLAND
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __DEMUX_H
+#define __DEMUX_H
+
+#include <linux/types.h>
+#include <linux/errno.h>
+#include <linux/list.h>
+#include <linux/time.h>
+#include <linux/dvb/dmx.h>
+
+/*--------------------------------------------------------------------------*/
+/* Common definitions */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * DMX_MAX_FILTER_SIZE: Maximum length (in bytes) of a section/PES filter.
+ */
+
+#ifndef DMX_MAX_FILTER_SIZE
+#define DMX_MAX_FILTER_SIZE 18
+#endif
+
+/*
+ * DMX_MAX_SECFEED_SIZE: Maximum length (in bytes) of a private section feed filter.
+ */
+
+#ifndef DMX_MAX_SECTION_SIZE
+#define DMX_MAX_SECTION_SIZE 4096
+#endif
+#ifndef DMX_MAX_SECFEED_SIZE
+#define DMX_MAX_SECFEED_SIZE (DMX_MAX_SECTION_SIZE + 188)
+#endif
+
+
+/*
+ * enum dmx_success: Success codes for the Demux Callback API.
+ */
+
+enum dmx_success {
+ DMX_OK = 0, /* Received Ok */
+ DMX_LENGTH_ERROR, /* Incorrect length */
+ DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */
+ DMX_CRC_ERROR, /* Incorrect CRC */
+ DMX_FRAME_ERROR, /* Frame alignment error */
+ DMX_FIFO_ERROR, /* Receiver FIFO overrun */
+ DMX_MISSED_ERROR /* Receiver missed packet */
+} ;
+
+/*--------------------------------------------------------------------------*/
+/* TS packet reception */
+/*--------------------------------------------------------------------------*/
+
+/* TS filter type for set() */
+
+#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */
+#define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS
+ payload (<=184 bytes per packet) to callback */
+#define TS_DECODER 4 /* send stream to built-in decoder (if present) */
+
+/* PES type for filters which write to built-in decoder */
+/* these should be kept identical to the types in dmx.h */
+
+enum dmx_ts_pes
+{ /* also send packets to decoder (if it exists) */
+ DMX_TS_PES_AUDIO0,
+ DMX_TS_PES_VIDEO0,
+ DMX_TS_PES_TELETEXT0,
+ DMX_TS_PES_SUBTITLE0,
+ DMX_TS_PES_PCR0,
+
+ DMX_TS_PES_AUDIO1,
+ DMX_TS_PES_VIDEO1,
+ DMX_TS_PES_TELETEXT1,
+ DMX_TS_PES_SUBTITLE1,
+ DMX_TS_PES_PCR1,
+
+ DMX_TS_PES_AUDIO2,
+ DMX_TS_PES_VIDEO2,
+ DMX_TS_PES_TELETEXT2,
+ DMX_TS_PES_SUBTITLE2,
+ DMX_TS_PES_PCR2,
+
+ DMX_TS_PES_AUDIO3,
+ DMX_TS_PES_VIDEO3,
+ DMX_TS_PES_TELETEXT3,
+ DMX_TS_PES_SUBTITLE3,
+ DMX_TS_PES_PCR3,
+
+ DMX_TS_PES_OTHER
+};
+
+#define DMX_TS_PES_AUDIO DMX_TS_PES_AUDIO0
+#define DMX_TS_PES_VIDEO DMX_TS_PES_VIDEO0
+#define DMX_TS_PES_TELETEXT DMX_TS_PES_TELETEXT0
+#define DMX_TS_PES_SUBTITLE DMX_TS_PES_SUBTITLE0
+#define DMX_TS_PES_PCR DMX_TS_PES_PCR0
+
+
+struct dmx_ts_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux *parent; /* Back-pointer */
+ void *priv; /* Pointer to private data of the API client */
+ int (*set) (struct dmx_ts_feed *feed,
+ u16 pid,
+ int type,
+ enum dmx_ts_pes pes_type,
+ size_t circular_buffer_size,
+ struct timespec timeout);
+ int (*start_filtering) (struct dmx_ts_feed* feed);
+ int (*stop_filtering) (struct dmx_ts_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Section reception */
+/*--------------------------------------------------------------------------*/
+
+struct dmx_section_filter {
+ u8 filter_value [DMX_MAX_FILTER_SIZE];
+ u8 filter_mask [DMX_MAX_FILTER_SIZE];
+ u8 filter_mode [DMX_MAX_FILTER_SIZE];
+ struct dmx_section_feed* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+};
+
+struct dmx_section_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+
+ int check_crc;
+ u32 crc_val;
+
+ u8 *secbuf;
+ u8 secbuf_base[DMX_MAX_SECFEED_SIZE];
+ u16 secbufp, seclen, tsfeedp;
+
+ int (*set) (struct dmx_section_feed* feed,
+ u16 pid,
+ size_t circular_buffer_size,
+ int check_crc);
+ int (*allocate_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter** filter);
+ int (*release_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter* filter);
+ int (*start_filtering) (struct dmx_section_feed* feed);
+ int (*stop_filtering) (struct dmx_section_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Callback functions */
+/*--------------------------------------------------------------------------*/
+
+typedef int (*dmx_ts_cb) ( const u8 * buffer1,
+ size_t buffer1_length,
+ const u8 * buffer2,
+ size_t buffer2_length,
+ struct dmx_ts_feed* source,
+ enum dmx_success success);
+
+typedef int (*dmx_section_cb) ( const u8 * buffer1,
+ size_t buffer1_len,
+ const u8 * buffer2,
+ size_t buffer2_len,
+ struct dmx_section_filter * source,
+ enum dmx_success success);
+
+/*--------------------------------------------------------------------------*/
+/* DVB Front-End */
+/*--------------------------------------------------------------------------*/
+
+enum dmx_frontend_source {
+ DMX_MEMORY_FE,
+ DMX_FRONTEND_0,
+ DMX_FRONTEND_1,
+ DMX_FRONTEND_2,
+ DMX_FRONTEND_3,
+ DMX_STREAM_0, /* external stream input, e.g. LVDS */
+ DMX_STREAM_1,
+ DMX_STREAM_2,
+ DMX_STREAM_3
+};
+
+struct dmx_frontend {
+ struct list_head connectivity_list; /* List of front-ends that can
+ be connected to a particular
+ demux */
+ enum dmx_frontend_source source;
+};
+
+/*--------------------------------------------------------------------------*/
+/* MPEG-2 TS Demux */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * Flags OR'ed in the capabilities field of struct dmx_demux.
+ */
+
+#define DMX_TS_FILTERING 1
+#define DMX_PES_FILTERING 2
+#define DMX_SECTION_FILTERING 4
+#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */
+#define DMX_CRC_CHECKING 16
+#define DMX_TS_DESCRAMBLING 32
+
+/*
+ * Demux resource type identifier.
+*/
+
+/*
+ * DMX_FE_ENTRY(): Casts elements in the list of registered
+ * front-ends from the generic type struct list_head
+ * to the type * struct dmx_frontend
+ *.
+*/
+
+#define DMX_FE_ENTRY(list) list_entry(list, struct dmx_frontend, connectivity_list)
+
+struct dmx_demux {
+ u32 capabilities; /* Bitfield of capability flags */
+ struct dmx_frontend* frontend; /* Front-end connected to the demux */
+ void* priv; /* Pointer to private data of the API client */
+ int (*open) (struct dmx_demux* demux);
+ int (*close) (struct dmx_demux* demux);
+ int (*write) (struct dmx_demux* demux, const char* buf, size_t count);
+ int (*allocate_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed** feed,
+ dmx_ts_cb callback);
+ int (*release_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed* feed);
+ int (*allocate_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed** feed,
+ dmx_section_cb callback);
+ int (*release_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed* feed);
+ int (*add_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*remove_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ struct list_head* (*get_frontends) (struct dmx_demux* demux);
+ int (*connect_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*disconnect_frontend) (struct dmx_demux* demux);
+
+ int (*get_pes_pids) (struct dmx_demux* demux, u16 *pids);
+
+ int (*get_caps) (struct dmx_demux* demux, struct dmx_caps *caps);
+
+ int (*set_source) (struct dmx_demux* demux, const dmx_source_t *src);
+
+ int (*get_stc) (struct dmx_demux* demux, unsigned int num,
+ u64 *stc, unsigned int *base);
+};
+
+#endif /* #ifndef __DEMUX_H */
diff --git a/v4l/kernel-2.6.25/dmxdev.h b/v4l/kernel-2.6.25/dmxdev.h
new file mode 100644
index 0000000..29746e7
--- /dev/null
+++ b/v4l/kernel-2.6.25/dmxdev.h
@@ -0,0 +1,110 @@
+/*
+ * dmxdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DMXDEV_H_
+#define _DMXDEV_H_
+
+#include <linux/types.h>
+#include <linux/spinlock.h>
+#include <linux/kernel.h>
+#include <linux/timer.h>
+#include <linux/wait.h>
+#include <linux/fs.h>
+#include <linux/string.h>
+#include <linux/mutex.h>
+
+#include <linux/dvb/dmx.h>
+
+#include "dvbdev.h"
+#include "demux.h"
+#include "dvb_ringbuffer.h"
+
+enum dmxdev_type {
+ DMXDEV_TYPE_NONE,
+ DMXDEV_TYPE_SEC,
+ DMXDEV_TYPE_PES,
+};
+
+enum dmxdev_state {
+ DMXDEV_STATE_FREE,
+ DMXDEV_STATE_ALLOCATED,
+ DMXDEV_STATE_SET,
+ DMXDEV_STATE_GO,
+ DMXDEV_STATE_DONE,
+ DMXDEV_STATE_TIMEDOUT
+};
+
+struct dmxdev_filter {
+ union {
+ struct dmx_section_filter *sec;
+ } filter;
+
+ union {
+ struct dmx_ts_feed *ts;
+ struct dmx_section_feed *sec;
+ } feed;
+
+ union {
+ struct dmx_sct_filter_params sec;
+ struct dmx_pes_filter_params pes;
+ } params;
+
+ enum dmxdev_type type;
+ enum dmxdev_state state;
+ struct dmxdev *dev;
+ struct dvb_ringbuffer buffer;
+
+ struct mutex mutex;
+
+ /* only for sections */
+ struct timer_list timer;
+ int todo;
+ u8 secheader[3];
+};
+
+
+struct dmxdev {
+ struct dvb_device *dvbdev;
+ struct dvb_device *dvr_dvbdev;
+
+ struct dmxdev_filter *filter;
+ struct dmx_demux *demux;
+
+ int filternum;
+ int capabilities;
+
+ unsigned int exit:1;
+#define DMXDEV_CAP_DUPLEX 1
+ struct dmx_frontend *dvr_orig_fe;
+
+ struct dvb_ringbuffer dvr_buffer;
+#define DVR_BUFFER_SIZE (10*188*1024)
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+
+int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *);
+void dvb_dmxdev_release(struct dmxdev *dmxdev);
+
+#endif /* _DMXDEV_H_ */
diff --git a/v4l/kernel-2.6.25/dvb-pll.h b/v4l/kernel-2.6.25/dvb-pll.h
new file mode 100644
index 0000000..e93a810
--- /dev/null
+++ b/v4l/kernel-2.6.25/dvb-pll.h
@@ -0,0 +1,60 @@
+/*
+ * descriptions + helper functions for simple dvb plls.
+ */
+
+#ifndef __DVB_PLL_H__
+#define __DVB_PLL_H__
+
+#include <linux/i2c.h>
+#include "dvb_frontend.h"
+
+#define DVB_PLL_UNDEFINED 0
+#define DVB_PLL_THOMSON_DTT7579 1
+#define DVB_PLL_THOMSON_DTT759X 2
+#define DVB_PLL_THOMSON_DTT7610 3
+#define DVB_PLL_LG_Z201 4
+#define DVB_PLL_MICROTUNE_4042 5
+#define DVB_PLL_THOMSON_DTT761X 6
+#define DVB_PLL_UNKNOWN_1 7
+#define DVB_PLL_TUA6010XS 8
+#define DVB_PLL_ENV57H1XD5 9
+#define DVB_PLL_TUA6034 10
+#define DVB_PLL_LG_TDVS_H06XF 11
+#define DVB_PLL_TDA665X 12
+#define DVB_PLL_FMD1216ME 13
+#define DVB_PLL_TDED4 14
+#define DVB_PLL_TUV1236D 15
+#define DVB_PLL_TDHU2 16
+#define DVB_PLL_SAMSUNG_TBMV 17
+#define DVB_PLL_PHILIPS_SD1878_TDA8261 18
+#define DVB_PLL_PHILIPS_TD1316 19
+#define DVB_PLL_THOMSON_FE6600 20
+#define DVB_PLL_OPERA1 21
+#define DVB_PLL_FCV1236D 22
+
+/**
+ * Attach a dvb-pll to the supplied frontend structure.
+ *
+ * @param fe Frontend to attach to.
+ * @param pll_addr i2c address of the PLL (if used).
+ * @param i2c i2c adapter to use (set to NULL if not used).
+ * @param pll_desc_id dvb_pll_desc to use.
+ * @return Frontend pointer on success, NULL on failure
+ */
+#if defined(CONFIG_DVB_PLL) || (defined(CONFIG_DVB_PLL_MODULE) && defined(MODULE))
+extern struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ unsigned int pll_desc_id);
+#else
+static inline struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ unsigned int pll_desc_id)
+{
+ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __FUNCTION__);
+ return NULL;
+}
+#endif
+
+#endif
diff --git a/v4l/kernel-2.6.25/dvb-usb-ids.h b/v4l/kernel-2.6.25/dvb-usb-ids.h
new file mode 100644
index 0000000..847c008
--- /dev/null
+++ b/v4l/kernel-2.6.25/dvb-usb-ids.h
@@ -0,0 +1,197 @@
+/* dvb-usb-ids.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de) see
+ * dvb-usb-init.c for copyright information.
+ *
+ * a header file containing define's for the USB device supported by the
+ * various drivers.
+ */
+#ifndef _DVB_USB_IDS_H_
+#define _DVB_USB_IDS_H_
+
+/* Vendor IDs */
+#define USB_VID_ADSTECH 0x06e1
+#define USB_VID_AFATECH 0x15a4
+#define USB_VID_ALCOR_MICRO 0x058f
+#define USB_VID_ALINK 0x05e3
+#define USB_VID_ANCHOR 0x0547
+#define USB_VID_ANSONIC 0x10b9
+#define USB_VID_ANUBIS_ELECTRONIC 0x10fd
+#define USB_VID_ASUS 0x0b05
+#define USB_VID_AVERMEDIA 0x07ca
+#define USB_VID_COMPRO 0x185b
+#define USB_VID_COMPRO_UNK 0x145f
+#define USB_VID_CYPRESS 0x04b4
+#define USB_VID_DIBCOM 0x10b8
+#define USB_VID_DPOSH 0x1498
+#define USB_VID_DVICO 0x0fe9
+#define USB_VID_EMPIA 0xeb1a
+#define USB_VID_GENPIX 0x09c0
+#define USB_VID_GRANDTEC 0x5032
+#define USB_VID_HANFTEK 0x15f4
+#define USB_VID_HAUPPAUGE 0x2040
+#define USB_VID_HYPER_PALTEK 0x1025
+#define USB_VID_KWORLD 0xeb2a
+#define USB_VID_KYE 0x0458
+#define USB_VID_LEADTEK 0x0413
+#define USB_VID_LITEON 0x04ca
+#define USB_VID_MEDION 0x1660
+#define USB_VID_MIGLIA 0x18f3
+#define USB_VID_MSI 0x0db0
+#define USB_VID_OPERA1 0x695c
+#define USB_VID_PINNACLE 0x2304
+#define USB_VID_TERRATEC 0x0ccd
+#define USB_VID_VISIONPLUS 0x13d3
+#define USB_VID_TWINHAN 0x1822
+#define USB_VID_ULTIMA_ELECTRONIC 0x05d8
+#define USB_VID_UNIWILL 0x1584
+#define USB_VID_WIDEVIEW 0x14aa
+#define USB_VID_GIGABYTE 0x1044
+#define USB_VID_YUAN 0x1164
+
+
+/* Product IDs */
+#define USB_PID_ADSTECH_USB2_COLD 0xa333
+#define USB_PID_ADSTECH_USB2_WARM 0xa334
+#define USB_PID_AFATECH_AF9005 0x9020
+#define USB_VID_ALINK_DTU 0xf170
+#define USB_PID_ANSONIC_DVBT_USB 0x6000
+#define USB_PID_AVERMEDIA_DVBT_USB_COLD 0x0001
+#define USB_PID_AVERMEDIA_DVBT_USB_WARM 0x0002
+#define USB_PID_AVERMEDIA_DVBT_USB2_COLD 0xa800
+#define USB_PID_AVERMEDIA_DVBT_USB2_WARM 0xa801
+#define USB_PID_COMPRO_DVBU2000_COLD 0xd000
+#define USB_PID_COMPRO_DVBU2000_WARM 0xd001
+#define USB_PID_COMPRO_DVBU2000_UNK_COLD 0x010c
+#define USB_PID_COMPRO_DVBU2000_UNK_WARM 0x010d
+#define USB_PID_COMPRO_VIDEOMATE_U500 0x1e78
+#define USB_PID_COMPRO_VIDEOMATE_U500_PC 0x1e80
+#define USB_PID_DIBCOM_HOOK_DEFAULT 0x0064
+#define USB_PID_DIBCOM_HOOK_DEFAULT_REENUM 0x0065
+#define USB_PID_DIBCOM_MOD3000_COLD 0x0bb8
+#define USB_PID_DIBCOM_MOD3000_WARM 0x0bb9
+#define USB_PID_DIBCOM_MOD3001_COLD 0x0bc6
+#define USB_PID_DIBCOM_MOD3001_WARM 0x0bc7
+#define USB_PID_DIBCOM_STK7700P 0x1e14
+#define USB_PID_DIBCOM_STK7700P_PC 0x1e78
+#define USB_PID_DIBCOM_STK7700D 0x1ef0
+#define USB_PID_DIBCOM_STK7700_U7000 0x7001
+#define USB_PID_DIBCOM_STK7070P 0x1ebc
+#define USB_PID_DIBCOM_STK7070PD 0x1ebe
+#define USB_PID_DIBCOM_ANCHOR_2135_COLD 0x2131
+#define USB_PID_DPOSH_M9206_COLD 0x9206
+#define USB_PID_DPOSH_M9206_WARM 0xa090
+#define USB_PID_UNIWILL_STK7700P 0x6003
+#define USB_PID_GRANDTEC_DVBT_USB_COLD 0x0fa0
+#define USB_PID_GRANDTEC_DVBT_USB_WARM 0x0fa1
+#define USB_PID_KWORLD_VSTREAM_COLD 0x17de
+#define USB_PID_KWORLD_VSTREAM_WARM 0x17df
+#define USB_PID_TERRATEC_CINERGY_T_USB_XE 0x0055
+#define USB_PID_TWINHAN_VP7041_COLD 0x3201
+#define USB_PID_TWINHAN_VP7041_WARM 0x3202
+#define USB_PID_TWINHAN_VP7020_COLD 0x3203
+#define USB_PID_TWINHAN_VP7020_WARM 0x3204
+#define USB_PID_TWINHAN_VP7045_COLD 0x3205
+#define USB_PID_TWINHAN_VP7045_WARM 0x3206
+#define USB_PID_TWINHAN_VP7021_COLD 0x3207
+#define USB_PID_TWINHAN_VP7021_WARM 0x3208
+#define USB_PID_DNTV_TINYUSB2_COLD 0x3223
+#define USB_PID_DNTV_TINYUSB2_WARM 0x3224
+#define USB_PID_ULTIMA_TVBOX_COLD 0x8105
+#define USB_PID_ULTIMA_TVBOX_WARM 0x8106
+#define USB_PID_ULTIMA_TVBOX_AN2235_COLD 0x8107
+#define USB_PID_ULTIMA_TVBOX_AN2235_WARM 0x8108
+#define USB_PID_ULTIMA_TVBOX_ANCHOR_COLD 0x2235
+#define USB_PID_ULTIMA_TVBOX_USB2_COLD 0x8109
+#define USB_PID_ULTIMA_TVBOX_USB2_WARM 0x810a
+#define USB_PID_ARTEC_T14_COLD 0x810b
+#define USB_PID_ARTEC_T14_WARM 0x810c
+#define USB_PID_ARTEC_T14BR 0x810f
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_COLD 0x8613
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_WARM 0x1002
+#define USB_PID_UNK_HYPER_PALTEK_COLD 0x005e
+#define USB_PID_UNK_HYPER_PALTEK_WARM 0x005f
+#define USB_PID_HANFTEK_UMT_010_COLD 0x0001
+#define USB_PID_HANFTEK_UMT_010_WARM 0x0015
+#define USB_PID_DTT200U_COLD 0x0201
+#define USB_PID_DTT200U_WARM 0x0301
+#define USB_PID_WT220U_ZAP250_COLD 0x0220
+#define USB_PID_WT220U_COLD 0x0222
+#define USB_PID_WT220U_WARM 0x0221
+#define USB_PID_WT220U_FC_COLD 0x0225
+#define USB_PID_WT220U_FC_WARM 0x0226
+#define USB_PID_WT220U_ZL0353_COLD 0x022a
+#define USB_PID_WT220U_ZL0353_WARM 0x022b
+#define USB_PID_WINTV_NOVA_T_USB2_COLD 0x9300
+#define USB_PID_WINTV_NOVA_T_USB2_WARM 0x9301
+#define USB_PID_HAUPPAUGE_NOVA_T_500 0x9941
+#define USB_PID_HAUPPAUGE_NOVA_T_500_2 0x9950
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK 0x7050
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK_2 0x7060
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK_3 0x7070
+#define USB_PID_HAUPPAUGE_MYTV_T 0x7080
+#define USB_PID_HAUPPAUGE_NOVA_TD_STICK 0x9580
+#define USB_PID_AVERMEDIA_EXPRESS 0xb568
+#define USB_PID_AVERMEDIA_VOLAR 0xa807
+#define USB_PID_AVERMEDIA_VOLAR_2 0xb808
+#define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY 0x005a
+#define USB_PID_TERRATEC_CINERGY_HT_USB_XE 0x0058
+#define USB_PID_TERRATEC_CINERGY_HT_EXPRESS 0x0060
+#define USB_PID_TERRATEC_CINERGY_T_XXS 0x0078
+#define USB_PID_PINNACLE_EXPRESSCARD_320CX 0x022e
+#define USB_PID_PINNACLE_PCTV2000E 0x022c
+#define USB_PID_PINNACLE_PCTV_DVB_T_FLASH 0x0228
+#define USB_PID_PINNACLE_PCTV_DUAL_DIVERSITY_DVB_T 0x0229
+#define USB_PID_PINNACLE_PCTV72E 0x0236
+#define USB_PID_PINNACLE_PCTV73E 0x0237
+#define USB_PID_PCTV_200E 0x020e
+#define USB_PID_PCTV_400E 0x020f
+#define USB_PID_PCTV_450E 0x0222
+#define USB_PID_NEBULA_DIGITV 0x0201
+#define USB_PID_DVICO_BLUEBIRD_LGDT 0xd820
+#define USB_PID_DVICO_BLUEBIRD_LG064F_COLD 0xd500
+#define USB_PID_DVICO_BLUEBIRD_LG064F_WARM 0xd501
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_COLD 0xdb00
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_WARM 0xdb01
+#define USB_PID_DVICO_BLUEBIRD_TH7579_COLD 0xdb10
+#define USB_PID_DVICO_BLUEBIRD_TH7579_WARM 0xdb11
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_COLD 0xdb50
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_WARM 0xdb51
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_COLD 0xdb58
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_WARM 0xdb59
+#define USB_PID_DVICO_BLUEBIRD_DUAL_4 0xdb78
+#define USB_PID_DVICO_BLUEBIRD_DVB_T_NANO_2 0xdb70
+#define USB_PID_DVICO_BLUEBIRD_DVB_T_NANO_2_NFW_WARM 0xdb71
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_COLD 0xdb54
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_WARM 0xdb55
+#define USB_PID_MEDION_MD95700 0x0932
+#define USB_PID_MSI_MEGASKY580 0x5580
+#define USB_PID_MSI_MEGASKY580_55801 0x5581
+#define USB_PID_KYE_DVB_T_COLD 0x701e
+#define USB_PID_KYE_DVB_T_WARM 0x701f
+#define USB_PID_LITEON_DVB_T_COLD 0xf000
+#define USB_PID_LITEON_DVB_T_WARM 0xf001
+#define USB_PID_DIGIVOX_MINI_SL_COLD 0xe360
+#define USB_PID_DIGIVOX_MINI_SL_WARM 0xe361
+#define USB_PID_GRANDTEC_DVBT_USB2_COLD 0x0bc6
+#define USB_PID_GRANDTEC_DVBT_USB2_WARM 0x0bc7
+#define USB_PID_WINFAST_DTV_DONGLE_COLD 0x6025
+#define USB_PID_WINFAST_DTV_DONGLE_WARM 0x6026
+#define USB_PID_WINFAST_DTV_DONGLE_STK7700P 0x6f00
+#define USB_PID_GENPIX_8PSK_REV_1_COLD 0x0200
+#define USB_PID_GENPIX_8PSK_REV_1_WARM 0x0201
+#define USB_PID_GENPIX_8PSK_REV_2 0x0202
+#define USB_PID_GENPIX_SKYWALKER_1 0x0203
+#define USB_PID_GENPIX_SKYWALKER_CW3K 0x0204
+#define USB_PID_SIGMATEK_DVB_110 0x6610
+#define USB_PID_MSI_DIGI_VOX_MINI_II 0x1513
+#define USB_PID_OPERA1_COLD 0x2830
+#define USB_PID_OPERA1_WARM 0x3829
+#define USB_PID_LIFEVIEW_TV_WALKER_TWIN_COLD 0x0514
+#define USB_PID_LIFEVIEW_TV_WALKER_TWIN_WARM 0x0513
+#define USB_PID_GIGABYTE_U7000 0x7001
+#define USB_PID_ASUS_U3000 0x171f
+#define USB_PID_ASUS_U3100 0x173f
+#define USB_PID_YUAN_EC372S 0x1edc
+
+#endif
diff --git a/v4l/kernel-2.6.25/dvb-usb.h b/v4l/kernel-2.6.25/dvb-usb.h
new file mode 100644
index 0000000..d1b3c7b
--- /dev/null
+++ b/v4l/kernel-2.6.25/dvb-usb.h
@@ -0,0 +1,397 @@
+/* dvb-usb.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * the headerfile, all dvb-usb-drivers have to include.
+ *
+ * TODO: clean-up the structures for unused fields and update the comments
+ */
+#ifndef __DVB_USB_H__
+#define __DVB_USB_H__
+
+#include <linux/input.h>
+#include <linux/usb.h>
+#include <linux/firmware.h>
+#include <linux/mutex.h>
+
+#include "dvb_frontend.h"
+#include "dvb_demux.h"
+#include "dvb_net.h"
+#include "dmxdev.h"
+
+#include "dvb-pll.h"
+
+#include "dvb-usb-ids.h"
+
+/* debug */
+#ifdef CONFIG_DVB_USB_DEBUG
+#define dprintk(var,level,args...) \
+ do { if ((var & level)) { printk(args); } } while (0)
+
+#define debug_dump(b,l,func) {\
+ int loop_; \
+ for (loop_ = 0; loop_ < l; loop_++) func("%02x ", b[loop_]); \
+ func("\n");\
+}
+#define DVB_USB_DEBUG_STATUS
+#else
+#define dprintk(args...)
+#define debug_dump(b,l,func)
+
+#define DVB_USB_DEBUG_STATUS " (debugging is not enabled)"
+
+#endif
+
+/* generic log methods - taken from usb.h */
+#ifndef DVB_USB_LOG_PREFIX
+ #define DVB_USB_LOG_PREFIX "dvb-usb (please define a log prefix)"
+#endif
+
+#undef err
+#define err(format, arg...) printk(KERN_ERR DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef info
+#define info(format, arg...) printk(KERN_INFO DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef warn
+#define warn(format, arg...) printk(KERN_WARNING DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+
+/**
+ * struct dvb_usb_device_description - name and its according USB IDs
+ * @name: real name of the box, regardless which DVB USB device class is in use
+ * @cold_ids: array of struct usb_device_id which describe the device in
+ * pre-firmware state
+ * @warm_ids: array of struct usb_device_id which describe the device in
+ * post-firmware state
+ *
+ * Each DVB USB device class can have one or more actual devices, this struct
+ * assigns a name to it.
+ */
+struct dvb_usb_device_description {
+ const char *name;
+
+#define DVB_USB_ID_MAX_NUM 15
+ struct usb_device_id *cold_ids[DVB_USB_ID_MAX_NUM];
+ struct usb_device_id *warm_ids[DVB_USB_ID_MAX_NUM];
+};
+
+/**
+ * struct dvb_usb_rc_key - a remote control key and its input-event
+ * @custom: the vendor/custom part of the key
+ * @data: the actual key part
+ * @event: the input event assigned to key identified by custom and data
+ */
+struct dvb_usb_rc_key {
+ u8 custom,data;
+ u32 event;
+};
+
+struct dvb_usb_device;
+struct dvb_usb_adapter;
+struct usb_data_stream;
+
+/**
+ * Properties of USB streaming - TODO this structure should be somewhere else
+ * describes the kind of USB transfer used for data-streaming.
+ * (BULK or ISOC)
+ */
+struct usb_data_stream_properties {
+#define USB_BULK 1
+#define USB_ISOC 2
+ int type;
+ int count;
+ int endpoint;
+
+ union {
+ struct {
+ int buffersize; /* per URB */
+ } bulk;
+ struct {
+ int framesperurb;
+ int framesize;
+ int interval;
+ } isoc;
+ } u;
+};
+
+/**
+ * struct dvb_usb_adapter_properties - properties of a dvb-usb-adapter.
+ * A DVB-USB-Adapter is basically a dvb_adapter which is present on a USB-device.
+ * @caps: capabilities of the DVB USB device.
+ * @pid_filter_count: number of PID filter position in the optional hardware
+ * PID-filter.
+ * @streaming_ctrl: called to start and stop the MPEG2-TS streaming of the
+ * device (not URB submitting/killing).
+ * @pid_filter_ctrl: called to en/disable the PID filter, if any.
+ * @pid_filter: called to set/unset a PID for filtering.
+ * @frontend_attach: called to attach the possible frontends (fill fe-field
+ * of struct dvb_usb_device).
+ * @tuner_attach: called to attach the correct tuner and to fill pll_addr,
+ * pll_desc and pll_init_buf of struct dvb_usb_device).
+ * @stream: configuration of the USB streaming
+ */
+struct dvb_usb_adapter_properties {
+#define DVB_USB_ADAP_HAS_PID_FILTER 0x01
+#define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
+#define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
+#define DVB_USB_ADAP_RECEIVES_204_BYTE_TS 0x08
+ int caps;
+ int pid_filter_count;
+
+ int (*streaming_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
+
+ int (*frontend_attach) (struct dvb_usb_adapter *);
+ int (*tuner_attach) (struct dvb_usb_adapter *);
+
+ struct usb_data_stream_properties stream;
+
+ int size_of_priv;
+};
+
+/**
+ * struct dvb_usb_device_properties - properties of a dvb-usb-device
+ * @usb_ctrl: which USB device-side controller is in use. Needed for firmware
+ * download.
+ * @firmware: name of the firmware file.
+ * @download_firmware: called to download the firmware when the usb_ctrl is
+ * DEVICE_SPECIFIC.
+ * @no_reconnect: device doesn't do a reconnect after downloading the firmware,
+ * so do the warm initialization right after it
+ *
+ * @size_of_priv: how many bytes shall be allocated for the private field
+ * of struct dvb_usb_device.
+ *
+ * @power_ctrl: called to enable/disable power of the device.
+ * @read_mac_address: called to read the MAC address of the device.
+ * @identify_state: called to determine the state (cold or warm), when it
+ * is not distinguishable by the USB IDs.
+ *
+ * @rc_key_map: a hard-wired array of struct dvb_usb_rc_key (NULL to disable
+ * remote control handling).
+ * @rc_key_map_size: number of items in @rc_key_map.
+ * @rc_query: called to query an event event.
+ * @rc_interval: time in ms between two queries.
+ *
+ * @i2c_algo: i2c_algorithm if the device has I2CoverUSB.
+ *
+ * @generic_bulk_ctrl_endpoint: most of the DVB USB devices have a generic
+ * endpoint which received control messages with bulk transfers. When this
+ * is non-zero, one can use dvb_usb_generic_rw and dvb_usb_generic_write-
+ * helper functions.
+ *
+ * @num_device_descs: number of struct dvb_usb_device_description in @devices
+ * @devices: array of struct dvb_usb_device_description compatibles with these
+ * properties.
+ */
+#define MAX_NO_OF_ADAPTER_PER_DEVICE 2
+struct dvb_usb_device_properties {
+
+#define DVB_USB_IS_AN_I2C_ADAPTER 0x01
+ int caps;
+
+#define DEVICE_SPECIFIC 0
+#define CYPRESS_AN2135 1
+#define CYPRESS_AN2235 2
+#define CYPRESS_FX2 3
+ int usb_ctrl;
+ int (*download_firmware) (struct usb_device *, const struct firmware *);
+ const char firmware[FIRMWARE_NAME_MAX];
+ int no_reconnect;
+
+ int size_of_priv;
+
+ int num_adapters;
+ struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ int (*power_ctrl) (struct dvb_usb_device *, int);
+ int (*read_mac_address) (struct dvb_usb_device *, u8 []);
+ int (*identify_state) (struct usb_device *, struct dvb_usb_device_properties *,
+ struct dvb_usb_device_description **, int *);
+
+/* remote control properties */
+#define REMOTE_NO_KEY_PRESSED 0x00
+#define REMOTE_KEY_PRESSED 0x01
+#define REMOTE_KEY_REPEAT 0x02
+ struct dvb_usb_rc_key *rc_key_map;
+ int rc_key_map_size;
+ int (*rc_query) (struct dvb_usb_device *, u32 *, int *);
+ int rc_interval;
+
+ struct i2c_algorithm *i2c_algo;
+
+ int generic_bulk_ctrl_endpoint;
+
+ int num_device_descs;
+ struct dvb_usb_device_description devices[9];
+};
+
+/**
+ * struct usb_data_stream - generic object of an USB stream
+ * @buf_num: number of buffer allocated.
+ * @buf_size: size of each buffer in buf_list.
+ * @buf_list: array containing all allocate buffers for streaming.
+ * @dma_addr: list of dma_addr_t for each buffer in buf_list.
+ *
+ * @urbs_initialized: number of URBs initialized.
+ * @urbs_submitted: number of URBs submitted.
+ */
+#define MAX_NO_URBS_FOR_DATA_STREAM 10
+struct usb_data_stream {
+ struct usb_device *udev;
+ struct usb_data_stream_properties props;
+
+#define USB_STATE_INIT 0x00
+#define USB_STATE_URB_BUF 0x01
+ int state;
+
+ void (*complete) (struct usb_data_stream *, u8 *, size_t);
+
+ struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ int buf_num;
+ unsigned long buf_size;
+ u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
+
+ int urbs_initialized;
+ int urbs_submitted;
+
+ void *user_priv;
+};
+
+/**
+ * struct dvb_usb_adapter - a DVB adapter on a USB device
+ * @id: index of this adapter (starting with 0).
+ *
+ * @feedcount: number of reqested feeds (used for streaming-activation)
+ * @pid_filtering: is hardware pid_filtering used or not.
+ *
+ * @pll_addr: I2C address of the tuner for programming
+ * @pll_init: array containing the initialization buffer
+ * @pll_desc: pointer to the appropriate struct dvb_pll_desc
+ * @tuner_pass_ctrl: called to (de)activate tuner passthru of the demod or the board
+ *
+ * @dvb_adap: device's dvb_adapter.
+ * @dmxdev: device's dmxdev.
+ * @demux: device's software demuxer.
+ * @dvb_net: device's dvb_net interfaces.
+ * @dvb_frontend: device's frontend.
+ * @max_feed_count: how many feeds can be handled simultaneously by this
+ * device
+ *
+ * @fe_init: rerouted frontend-init (wakeup) function.
+ * @fe_sleep: rerouted frontend-sleep function.
+ *
+ * @stream: the usb data stream.
+ */
+struct dvb_usb_adapter {
+ struct dvb_usb_device *dev;
+ struct dvb_usb_adapter_properties props;
+
+#define DVB_USB_ADAP_STATE_INIT 0x000
+#define DVB_USB_ADAP_STATE_DVB 0x001
+ int state;
+
+ u8 id;
+
+ int feedcount;
+ int pid_filtering;
+
+ /* dvb */
+ struct dvb_adapter dvb_adap;
+ struct dmxdev dmxdev;
+ struct dvb_demux demux;
+ struct dvb_net dvb_net;
+ struct dvb_frontend *fe;
+ int max_feed_count;
+
+ int (*fe_init) (struct dvb_frontend *);
+ int (*fe_sleep) (struct dvb_frontend *);
+
+ struct usb_data_stream stream;
+
+ void *priv;
+};
+
+/**
+ * struct dvb_usb_device - object of a DVB USB device
+ * @props: copy of the struct dvb_usb_properties this device belongs to.
+ * @desc: pointer to the device's struct dvb_usb_device_description.
+ * @state: initialization and runtime state of the device.
+ *
+ * @powered: indicated whether the device is power or not.
+ * Powered is in/decremented for each call to modify the state.
+ * @udev: pointer to the device's struct usb_device.
+ *
+ * @usb_mutex: semaphore of USB control messages (reading needs two messages)
+ * @i2c_mutex: semaphore for i2c-transfers
+ *
+ * @i2c_adap: device's i2c_adapter if it uses I2CoverUSB
+ *
+ * @rc_input_dev: input device for the remote control.
+ * @rc_query_work: struct work_struct frequent rc queries
+ * @last_event: last triggered event
+ * @last_state: last state (no, pressed, repeat)
+ * @owner: owner of the dvb_adapter
+ * @priv: private data of the actual driver (allocate by dvb-usb, size defined
+ * in size_of_priv of dvb_usb_properties).
+ */
+struct dvb_usb_device {
+ struct dvb_usb_device_properties props;
+ struct dvb_usb_device_description *desc;
+
+ struct usb_device *udev;
+
+#define DVB_USB_STATE_INIT 0x000
+#define DVB_USB_STATE_I2C 0x001
+#define DVB_USB_STATE_DVB 0x002
+#define DVB_USB_STATE_REMOTE 0x004
+ int state;
+
+ int powered;
+
+ /* locking */
+ struct mutex usb_mutex;
+
+ /* i2c */
+ struct mutex i2c_mutex;
+ struct i2c_adapter i2c_adap;
+
+ int num_adapters_initialized;
+ struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ /* remote control */
+ struct input_dev *rc_input_dev;
+ char rc_phys[64];
+ struct delayed_work rc_query_work;
+ u32 last_event;
+ int last_state;
+
+ struct module *owner;
+
+ void *priv;
+};
+
+extern int dvb_usb_device_init(struct usb_interface *, struct dvb_usb_device_properties *, struct module *, struct dvb_usb_device **);
+extern void dvb_usb_device_exit(struct usb_interface *);
+
+/* the generic read/write method for device control */
+extern int dvb_usb_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16,int);
+extern int dvb_usb_generic_write(struct dvb_usb_device *, u8 *, u16);
+
+/* commonly used remote control parsing */
+extern int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *, u8[], u32 *, int *);
+
+/* commonly used firmware download types and function */
+struct hexline {
+ u8 len;
+ u32 addr;
+ u8 type;
+ u8 data[255];
+ u8 chk;
+};
+extern int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type);
+extern int dvb_usb_get_hexline(const struct firmware *fw, struct hexline *hx, int *pos);
+
+
+#endif
diff --git a/v4l/kernel-2.6.25/dvb_demux.h b/v4l/kernel-2.6.25/dvb_demux.h
new file mode 100644
index 0000000..2c5f915
--- /dev/null
+++ b/v4l/kernel-2.6.25/dvb_demux.h
@@ -0,0 +1,140 @@
+/*
+ * dvb_demux.h: DVB kernel demux API
+ *
+ * Copyright (C) 2000-2001 Marcus Metzler & Ralph Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_DEMUX_H_
+#define _DVB_DEMUX_H_
+
+#include <linux/time.h>
+#include <linux/timer.h>
+#include <linux/spinlock.h>
+#include <linux/mutex.h>
+
+#include "demux.h"
+
+#define DMX_TYPE_TS 0
+#define DMX_TYPE_SEC 1
+#define DMX_TYPE_PES 2
+
+#define DMX_STATE_FREE 0
+#define DMX_STATE_ALLOCATED 1
+#define DMX_STATE_SET 2
+#define DMX_STATE_READY 3
+#define DMX_STATE_GO 4
+
+#define DVB_DEMUX_MASK_MAX 18
+
+struct dvb_demux_filter {
+ struct dmx_section_filter filter;
+ u8 maskandmode[DMX_MAX_FILTER_SIZE];
+ u8 maskandnotmode[DMX_MAX_FILTER_SIZE];
+ int doneq;
+
+ struct dvb_demux_filter *next;
+ struct dvb_demux_feed *feed;
+ int index;
+ int state;
+ int type;
+
+ u16 hw_handle;
+ struct timer_list timer;
+};
+
+#define DMX_FEED_ENTRY(pos) list_entry(pos, struct dvb_demux_feed, list_head)
+
+struct dvb_demux_feed {
+ union {
+ struct dmx_ts_feed ts;
+ struct dmx_section_feed sec;
+ } feed;
+
+ union {
+ dmx_ts_cb ts;
+ dmx_section_cb sec;
+ } cb;
+
+ struct dvb_demux *demux;
+ void *priv;
+ int type;
+ int state;
+ u16 pid;
+ u8 *buffer;
+ int buffer_size;
+
+ struct timespec timeout;
+ struct dvb_demux_filter *filter;
+
+ int ts_type;
+ enum dmx_ts_pes pes_type;
+
+ int cc;
+ int pusi_seen; /* prevents feeding of garbage from previous section */
+
+ u16 peslen;
+
+ struct list_head list_head;
+ unsigned int index; /* a unique index for each feed (can be used as hardware pid filter index) */
+};
+
+struct dvb_demux {
+ struct dmx_demux dmx;
+ void *priv;
+ int filternum;
+ int feednum;
+ int (*start_feed)(struct dvb_demux_feed *feed);
+ int (*stop_feed)(struct dvb_demux_feed *feed);
+ int (*write_to_decoder)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ u32 (*check_crc32)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ void (*memcopy)(struct dvb_demux_feed *feed, u8 *dst,
+ const u8 *src, size_t len);
+
+ int users;
+#define MAX_DVB_DEMUX_USERS 10
+ struct dvb_demux_filter *filter;
+ struct dvb_demux_feed *feed;
+
+ struct list_head frontend_list;
+
+ struct dvb_demux_feed *pesfilter[DMX_TS_PES_OTHER];
+ u16 pids[DMX_TS_PES_OTHER];
+ int playing;
+ int recording;
+
+#define DMX_MAX_PID 0x2000
+ struct list_head feed_list;
+ u8 tsbuf[204];
+ int tsbufp;
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+int dvb_dmx_init(struct dvb_demux *dvbdemux);
+void dvb_dmx_release(struct dvb_demux *dvbdemux);
+void dvb_dmx_swfilter_packets(struct dvb_demux *dvbdmx, const u8 *buf,
+ size_t count);
+void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count);
+void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf,
+ size_t count);
+
+#endif /* _DVB_DEMUX_H_ */
diff --git a/v4l/kernel-2.6.25/dvb_frontend.h b/v4l/kernel-2.6.25/dvb_frontend.h
new file mode 100644
index 0000000..aa4133f
--- /dev/null
+++ b/v4l/kernel-2.6.25/dvb_frontend.h
@@ -0,0 +1,207 @@
+/*
+ * dvb_frontend.h
+ *
+ * Copyright (C) 2001 convergence integrated media GmbH
+ * Copyright (C) 2004 convergence GmbH
+ *
+ * Written by Ralph Metzler
+ * Overhauled by Holger Waechtler
+ * Kernel I2C stuff by Michael Hunold <hunold@convergence.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_FRONTEND_H_
+#define _DVB_FRONTEND_H_
+
+#include <linux/types.h>
+#include <linux/sched.h>
+#include <linux/ioctl.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/delay.h>
+#include <linux/mutex.h>
+
+#include <linux/dvb/frontend.h>
+
+#include "dvbdev.h"
+
+struct dvb_frontend_tune_settings {
+ int min_delay_ms;
+ int step_size;
+ int max_drift;
+ struct dvb_frontend_parameters parameters;
+};
+
+struct dvb_frontend;
+
+struct dvb_tuner_info {
+ char name[128];
+
+ u32 frequency_min;
+ u32 frequency_max;
+ u32 frequency_step;
+
+ u32 bandwidth_min;
+ u32 bandwidth_max;
+ u32 bandwidth_step;
+};
+
+struct analog_parameters {
+ unsigned int frequency;
+ unsigned int mode;
+ unsigned int audmode;
+ u64 std;
+};
+
+struct dvb_tuner_ops {
+
+ struct dvb_tuner_info info;
+
+ int (*release)(struct dvb_frontend *fe);
+ int (*init)(struct dvb_frontend *fe);
+ int (*sleep)(struct dvb_frontend *fe);
+
+ /** This is for simple PLLs - set all parameters in one go. */
+ int (*set_params)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
+ int (*set_analog_params)(struct dvb_frontend *fe, struct analog_parameters *p);
+
+ /** This is support for demods like the mt352 - fills out the supplied buffer with what to write. */
+ int (*calc_regs)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p, u8 *buf, int buf_len);
+
+ /** This is to allow setting tuner-specific configs */
+ int (*set_config)(struct dvb_frontend *fe, void *priv_cfg);
+
+ int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency);
+ int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth);
+
+#define TUNER_STATUS_LOCKED 1
+#define TUNER_STATUS_STEREO 2
+ int (*get_status)(struct dvb_frontend *fe, u32 *status);
+ int (*get_rf_strength)(struct dvb_frontend *fe, u16 *strength);
+
+ /** These are provided seperately from set_params in order to facilitate silicon
+ * tuners which require sophisticated tuning loops, controlling each parameter seperately. */
+ int (*set_frequency)(struct dvb_frontend *fe, u32 frequency);
+ int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
+};
+
+struct analog_demod_info {
+ char *name;
+};
+
+struct analog_demod_ops {
+
+ struct analog_demod_info info;
+
+ void (*set_params)(struct dvb_frontend *fe,
+ struct analog_parameters *params);
+ int (*has_signal)(struct dvb_frontend *fe);
+ int (*is_stereo)(struct dvb_frontend *fe);
+ int (*get_afc)(struct dvb_frontend *fe);
+ void (*tuner_status)(struct dvb_frontend *fe);
+ void (*standby)(struct dvb_frontend *fe);
+ void (*release)(struct dvb_frontend *fe);
+ int (*i2c_gate_ctrl)(struct dvb_frontend *fe, int enable);
+
+ /** This is to allow setting tuner-specific configuration */
+ int (*set_config)(struct dvb_frontend *fe, void *priv_cfg);
+};
+
+struct dvb_frontend_ops {
+
+ struct dvb_frontend_info info;
+
+ void (*release)(struct dvb_frontend* fe);
+ void (*release_sec)(struct dvb_frontend* fe);
+
+ int (*init)(struct dvb_frontend* fe);
+ int (*sleep)(struct dvb_frontend* fe);
+
+ int (*write)(struct dvb_frontend* fe, u8* buf, int len);
+
+ /* if this is set, it overrides the default swzigzag */
+ int (*tune)(struct dvb_frontend* fe,
+ struct dvb_frontend_parameters* params,
+ unsigned int mode_flags,
+ unsigned int *delay,
+ fe_status_t *status);
+ /* get frontend tuning algorithm from the module */
+ int (*get_frontend_algo)(struct dvb_frontend *fe);
+
+ /* these two are only used for the swzigzag code */
+ int (*set_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+ int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings);
+
+ int (*get_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+
+ int (*read_status)(struct dvb_frontend* fe, fe_status_t* status);
+ int (*read_ber)(struct dvb_frontend* fe, u32* ber);
+ int (*read_signal_strength)(struct dvb_frontend* fe, u16* strength);
+ int (*read_snr)(struct dvb_frontend* fe, u16* snr);
+ int (*read_ucblocks)(struct dvb_frontend* fe, u32* ucblocks);
+
+ int (*diseqc_reset_overload)(struct dvb_frontend* fe);
+ int (*diseqc_send_master_cmd)(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd);
+ int (*diseqc_recv_slave_reply)(struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply);
+ int (*diseqc_send_burst)(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd);
+ int (*set_tone)(struct dvb_frontend* fe, fe_sec_tone_mode_t tone);
+ int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
+ int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg);
+ int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
+ int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
+ int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);
+
+ struct dvb_tuner_ops tuner_ops;
+ struct analog_demod_ops analog_ops;
+};
+
+#define MAX_EVENT 8
+
+struct dvb_fe_events {
+ struct dvb_frontend_event events[MAX_EVENT];
+ int eventw;
+ int eventr;
+ int overflow;
+ wait_queue_head_t wait_queue;
+ struct mutex mtx;
+};
+
+struct dvb_frontend {
+ struct dvb_frontend_ops ops;
+ struct dvb_adapter *dvb;
+ void *demodulator_priv;
+ void *tuner_priv;
+ void *frontend_priv;
+ void *sec_priv;
+ void *analog_demod_priv;
+};
+
+extern int dvb_register_frontend(struct dvb_adapter *dvb,
+ struct dvb_frontend *fe);
+
+extern int dvb_unregister_frontend(struct dvb_frontend *fe);
+
+extern void dvb_frontend_detach(struct dvb_frontend *fe);
+
+extern void dvb_frontend_reinitialise(struct dvb_frontend *fe);
+
+extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec);
+extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime);
+
+#endif
diff --git a/v4l/kernel-2.6.25/dvb_net.h b/v4l/kernel-2.6.25/dvb_net.h
new file mode 100644
index 0000000..3a3126c
--- /dev/null
+++ b/v4l/kernel-2.6.25/dvb_net.h
@@ -0,0 +1,47 @@
+/*
+ * dvb_net.h
+ *
+ * Copyright (C) 2001 Ralph Metzler for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_NET_H_
+#define _DVB_NET_H_
+
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/inetdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/skbuff.h>
+
+#include "dvbdev.h"
+
+#define DVB_NET_DEVICES_MAX 10
+
+struct dvb_net {
+ struct dvb_device *dvbdev;
+ struct net_device *device[DVB_NET_DEVICES_MAX];
+ int state[DVB_NET_DEVICES_MAX];
+ unsigned int exit:1;
+ struct dmx_demux *demux;
+};
+
+
+void dvb_net_release(struct dvb_net *);
+int dvb_net_init(struct dvb_adapter *, struct dvb_net *, struct dmx_demux *);
+
+#endif
diff --git a/v4l/kernel-2.6.25/dvb_ringbuffer.h b/v4l/kernel-2.6.25/dvb_ringbuffer.h
new file mode 100644
index 0000000..d97714e
--- /dev/null
+++ b/v4l/kernel-2.6.25/dvb_ringbuffer.h
@@ -0,0 +1,174 @@
+/*
+ *
+ * dvb_ringbuffer.h: ring buffer implementation for the dvb driver
+ *
+ * Copyright (C) 2003 Oliver Endriss
+ * Copyright (C) 2004 Andrew de Quincey
+ *
+ * based on code originally found in av7110.c & dvb_ci.c:
+ * Copyright (C) 1999-2003 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _DVB_RINGBUFFER_H_
+#define _DVB_RINGBUFFER_H_
+
+#include <linux/spinlock.h>
+#include <linux/wait.h>
+
+struct dvb_ringbuffer {
+ u8 *data;
+ ssize_t size;
+ ssize_t pread;
+ ssize_t pwrite;
+ int error;
+
+ wait_queue_head_t queue;
+ spinlock_t lock;
+};
+
+#define DVB_RINGBUFFER_PKTHDRSIZE 3
+
+
+/*
+** Notes:
+** ------
+** (1) For performance reasons read and write routines don't check buffer sizes
+** and/or number of bytes free/available. This has to be done before these
+** routines are called. For example:
+**
+** *** write <buflen> bytes ***
+** free = dvb_ringbuffer_free(rbuf);
+** if (free >= buflen)
+** count = dvb_ringbuffer_write(rbuf, buffer, buflen);
+** else
+** ...
+**
+** *** read min. 1000, max. <bufsize> bytes ***
+** avail = dvb_ringbuffer_avail(rbuf);
+** if (avail >= 1000)
+** count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize), 0);
+** else
+** ...
+**
+** (2) If there is exactly one reader and one writer, there is no need
+** to lock read or write operations.
+** Two or more readers must be locked against each other.
+** Flushing the buffer counts as a read operation.
+** Two or more writers must be locked against each other.
+*/
+
+/* initialize ring buffer, lock and queue */
+extern void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data, size_t len);
+
+/* test whether buffer is empty */
+extern int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf);
+
+/* return the number of free bytes in the buffer */
+extern ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf);
+
+/* return the number of bytes waiting in the buffer */
+extern ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf);
+
+
+/* read routines & macros */
+/* ---------------------- */
+/* flush buffer */
+extern void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf);
+
+/* flush buffer protected by spinlock and wake-up waiting task(s) */
+extern void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf);
+
+/* peek at byte <offs> in the buffer */
+#define DVB_RINGBUFFER_PEEK(rbuf,offs) \
+ (rbuf)->data[((rbuf)->pread+(offs))%(rbuf)->size]
+
+/* advance read ptr by <num> bytes */
+#define DVB_RINGBUFFER_SKIP(rbuf,num) \
+ (rbuf)->pread=((rbuf)->pread+(num))%(rbuf)->size
+
+/*
+** read <len> bytes from ring buffer into <buf>
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf, u8 *buf,
+ size_t len, int usermem);
+
+
+/* write routines & macros */
+/* ----------------------- */
+/* write single byte to ring buffer */
+#define DVB_RINGBUFFER_WRITE_BYTE(rbuf,byte) \
+ { (rbuf)->data[(rbuf)->pwrite]=(byte); \
+ (rbuf)->pwrite=((rbuf)->pwrite+1)%(rbuf)->size; }
+/*
+** write <len> bytes to ring buffer
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf,
+ size_t len);
+
+
+/**
+ * Write a packet into the ringbuffer.
+ *
+ * <rbuf> Ringbuffer to write to.
+ * <buf> Buffer to write.
+ * <len> Length of buffer (currently limited to 65535 bytes max).
+ * returns Number of bytes written, or -EFAULT, -ENOMEM, -EVINAL.
+ */
+extern ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8* buf,
+ size_t len);
+
+/**
+ * Read from a packet in the ringbuffer. Note: unlike dvb_ringbuffer_read(), this
+ * does NOT update the read pointer in the ringbuffer. You must use
+ * dvb_ringbuffer_pkt_dispose() to mark a packet as no longer required.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ * <offset> Offset into packet to read from.
+ * <buf> Destination buffer for data.
+ * <len> Size of destination buffer.
+ * <usermem> Set to 1 if <buf> is in userspace.
+ * returns Number of bytes read, or -EFAULT.
+ */
+extern ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx,
+ int offset, u8* buf, size_t len, int usermem);
+
+/**
+ * Dispose of a packet in the ring buffer.
+ *
+ * <rbuf> Ring buffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ */
+extern void dvb_ringbuffer_pkt_dispose(struct dvb_ringbuffer *rbuf, size_t idx);
+
+/**
+ * Get the index of the next packet in a ringbuffer.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Previous packet index, or -1 to return the first packet index.
+ * <pktlen> On success, will be updated to contain the length of the packet in bytes.
+ * returns Packet index (if >=0), or -1 if no packets available.
+ */
+extern ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf, size_t idx, size_t* pktlen);
+
+
+#endif /* _DVB_RINGBUFFER_H_ */
diff --git a/v4l/kernel-2.6.25/dvbdev.h b/v4l/kernel-2.6.25/dvbdev.h
new file mode 100644
index 0000000..6dff10e
--- /dev/null
+++ b/v4l/kernel-2.6.25/dvbdev.h
@@ -0,0 +1,128 @@
+/*
+ * dvbdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBDEV_H_
+#define _DVBDEV_H_
+
+#include <linux/types.h>
+#include <linux/poll.h>
+#include <linux/fs.h>
+#include <linux/list.h>
+#include <linux/smp_lock.h>
+
+#define DVB_MAJOR 212
+
+#define DVB_DEVICE_VIDEO 0
+#define DVB_DEVICE_AUDIO 1
+#define DVB_DEVICE_SEC 2
+#define DVB_DEVICE_FRONTEND 3
+#define DVB_DEVICE_DEMUX 4
+#define DVB_DEVICE_DVR 5
+#define DVB_DEVICE_CA 6
+#define DVB_DEVICE_NET 7
+#define DVB_DEVICE_OSD 8
+
+
+struct dvb_adapter {
+ int num;
+ struct list_head list_head;
+ struct list_head device_list;
+ const char *name;
+ u8 proposed_mac [6];
+ void* priv;
+
+ struct device *device;
+
+ struct module *module;
+};
+
+
+struct dvb_device {
+ struct list_head list_head;
+ struct file_operations *fops;
+ struct dvb_adapter *adapter;
+ int type;
+ u32 id;
+
+ /* in theory, 'users' can vanish now,
+ but I don't want to change too much now... */
+ int readers;
+ int writers;
+ int users;
+
+ wait_queue_head_t wait_queue;
+ /* don't really need those !? -- FIXME: use video_usercopy */
+ int (*kernel_ioctl)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg);
+
+ void *priv;
+};
+
+
+extern int dvb_register_adapter (struct dvb_adapter *adap, const char *name, struct module *module, struct device *device);
+extern int dvb_unregister_adapter (struct dvb_adapter *adap);
+
+extern int dvb_register_device (struct dvb_adapter *adap,
+ struct dvb_device **pdvbdev,
+ const struct dvb_device *template,
+ void *priv,
+ int type);
+
+extern void dvb_unregister_device (struct dvb_device *dvbdev);
+
+extern int dvb_generic_open (struct inode *inode, struct file *file);
+extern int dvb_generic_release (struct inode *inode, struct file *file);
+extern int dvb_generic_ioctl (struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg);
+
+/* we don't mess with video_usercopy() any more,
+we simply define out own dvb_usercopy(), which will hopefully become
+generic_usercopy() someday... */
+
+extern int dvb_usercopy(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg,
+ int (*func)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg));
+
+/** generic DVB attach function. */
+#ifdef CONFIG_DVB_CORE_ATTACH
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ void *__r = NULL; \
+ typeof(&FUNCTION) __a = symbol_request(FUNCTION); \
+ if (__a) { \
+ __r = (void *) __a(ARGS); \
+ if (__r == NULL) \
+ symbol_put(FUNCTION); \
+ } else { \
+ printk(KERN_ERR "DVB: Unable to find symbol "#FUNCTION"()\n"); \
+ } \
+ __r; \
+})
+
+#else
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ FUNCTION(ARGS); \
+})
+
+#endif
+
+#endif /* #ifndef _DVBDEV_H_ */
diff --git a/v4l/kernel-2.6.26/demux.h b/v4l/kernel-2.6.26/demux.h
new file mode 100644
index 0000000..b0d347d
--- /dev/null
+++ b/v4l/kernel-2.6.26/demux.h
@@ -0,0 +1,280 @@
+/*
+ * demux.h
+ *
+ * Copyright (c) 2002 Convergence GmbH
+ *
+ * based on code:
+ * Copyright (c) 2000 Nokia Research Center
+ * Tampere, FINLAND
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __DEMUX_H
+#define __DEMUX_H
+
+#include <linux/types.h>
+#include <linux/errno.h>
+#include <linux/list.h>
+#include <linux/time.h>
+#include <linux/dvb/dmx.h>
+
+/*--------------------------------------------------------------------------*/
+/* Common definitions */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * DMX_MAX_FILTER_SIZE: Maximum length (in bytes) of a section/PES filter.
+ */
+
+#ifndef DMX_MAX_FILTER_SIZE
+#define DMX_MAX_FILTER_SIZE 18
+#endif
+
+/*
+ * DMX_MAX_SECFEED_SIZE: Maximum length (in bytes) of a private section feed filter.
+ */
+
+#ifndef DMX_MAX_SECTION_SIZE
+#define DMX_MAX_SECTION_SIZE 4096
+#endif
+#ifndef DMX_MAX_SECFEED_SIZE
+#define DMX_MAX_SECFEED_SIZE (DMX_MAX_SECTION_SIZE + 188)
+#endif
+
+
+/*
+ * enum dmx_success: Success codes for the Demux Callback API.
+ */
+
+enum dmx_success {
+ DMX_OK = 0, /* Received Ok */
+ DMX_LENGTH_ERROR, /* Incorrect length */
+ DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */
+ DMX_CRC_ERROR, /* Incorrect CRC */
+ DMX_FRAME_ERROR, /* Frame alignment error */
+ DMX_FIFO_ERROR, /* Receiver FIFO overrun */
+ DMX_MISSED_ERROR /* Receiver missed packet */
+} ;
+
+/*--------------------------------------------------------------------------*/
+/* TS packet reception */
+/*--------------------------------------------------------------------------*/
+
+/* TS filter type for set() */
+
+#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */
+#define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS
+ payload (<=184 bytes per packet) to callback */
+#define TS_DECODER 4 /* send stream to built-in decoder (if present) */
+#define TS_DEMUX 8 /* in case TS_PACKET is set, send the TS to
+ the demux device, not to the dvr device */
+
+/* PES type for filters which write to built-in decoder */
+/* these should be kept identical to the types in dmx.h */
+
+enum dmx_ts_pes
+{ /* also send packets to decoder (if it exists) */
+ DMX_TS_PES_AUDIO0,
+ DMX_TS_PES_VIDEO0,
+ DMX_TS_PES_TELETEXT0,
+ DMX_TS_PES_SUBTITLE0,
+ DMX_TS_PES_PCR0,
+
+ DMX_TS_PES_AUDIO1,
+ DMX_TS_PES_VIDEO1,
+ DMX_TS_PES_TELETEXT1,
+ DMX_TS_PES_SUBTITLE1,
+ DMX_TS_PES_PCR1,
+
+ DMX_TS_PES_AUDIO2,
+ DMX_TS_PES_VIDEO2,
+ DMX_TS_PES_TELETEXT2,
+ DMX_TS_PES_SUBTITLE2,
+ DMX_TS_PES_PCR2,
+
+ DMX_TS_PES_AUDIO3,
+ DMX_TS_PES_VIDEO3,
+ DMX_TS_PES_TELETEXT3,
+ DMX_TS_PES_SUBTITLE3,
+ DMX_TS_PES_PCR3,
+
+ DMX_TS_PES_OTHER
+};
+
+#define DMX_TS_PES_AUDIO DMX_TS_PES_AUDIO0
+#define DMX_TS_PES_VIDEO DMX_TS_PES_VIDEO0
+#define DMX_TS_PES_TELETEXT DMX_TS_PES_TELETEXT0
+#define DMX_TS_PES_SUBTITLE DMX_TS_PES_SUBTITLE0
+#define DMX_TS_PES_PCR DMX_TS_PES_PCR0
+
+
+struct dmx_ts_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux *parent; /* Back-pointer */
+ void *priv; /* Pointer to private data of the API client */
+ int (*set) (struct dmx_ts_feed *feed,
+ u16 pid,
+ int type,
+ enum dmx_ts_pes pes_type,
+ size_t circular_buffer_size,
+ struct timespec timeout);
+ int (*start_filtering) (struct dmx_ts_feed* feed);
+ int (*stop_filtering) (struct dmx_ts_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Section reception */
+/*--------------------------------------------------------------------------*/
+
+struct dmx_section_filter {
+ u8 filter_value [DMX_MAX_FILTER_SIZE];
+ u8 filter_mask [DMX_MAX_FILTER_SIZE];
+ u8 filter_mode [DMX_MAX_FILTER_SIZE];
+ struct dmx_section_feed* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+};
+
+struct dmx_section_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+
+ int check_crc;
+ u32 crc_val;
+
+ u8 *secbuf;
+ u8 secbuf_base[DMX_MAX_SECFEED_SIZE];
+ u16 secbufp, seclen, tsfeedp;
+
+ int (*set) (struct dmx_section_feed* feed,
+ u16 pid,
+ size_t circular_buffer_size,
+ int check_crc);
+ int (*allocate_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter** filter);
+ int (*release_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter* filter);
+ int (*start_filtering) (struct dmx_section_feed* feed);
+ int (*stop_filtering) (struct dmx_section_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Callback functions */
+/*--------------------------------------------------------------------------*/
+
+typedef int (*dmx_ts_cb) ( const u8 * buffer1,
+ size_t buffer1_length,
+ const u8 * buffer2,
+ size_t buffer2_length,
+ struct dmx_ts_feed* source,
+ enum dmx_success success);
+
+typedef int (*dmx_section_cb) ( const u8 * buffer1,
+ size_t buffer1_len,
+ const u8 * buffer2,
+ size_t buffer2_len,
+ struct dmx_section_filter * source,
+ enum dmx_success success);
+
+/*--------------------------------------------------------------------------*/
+/* DVB Front-End */
+/*--------------------------------------------------------------------------*/
+
+enum dmx_frontend_source {
+ DMX_MEMORY_FE,
+ DMX_FRONTEND_0,
+ DMX_FRONTEND_1,
+ DMX_FRONTEND_2,
+ DMX_FRONTEND_3,
+ DMX_STREAM_0, /* external stream input, e.g. LVDS */
+ DMX_STREAM_1,
+ DMX_STREAM_2,
+ DMX_STREAM_3
+};
+
+struct dmx_frontend {
+ struct list_head connectivity_list; /* List of front-ends that can
+ be connected to a particular
+ demux */
+ enum dmx_frontend_source source;
+};
+
+/*--------------------------------------------------------------------------*/
+/* MPEG-2 TS Demux */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * Flags OR'ed in the capabilities field of struct dmx_demux.
+ */
+
+#define DMX_TS_FILTERING 1
+#define DMX_PES_FILTERING 2
+#define DMX_SECTION_FILTERING 4
+#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */
+#define DMX_CRC_CHECKING 16
+#define DMX_TS_DESCRAMBLING 32
+
+/*
+ * Demux resource type identifier.
+*/
+
+/*
+ * DMX_FE_ENTRY(): Casts elements in the list of registered
+ * front-ends from the generic type struct list_head
+ * to the type * struct dmx_frontend
+ *.
+*/
+
+#define DMX_FE_ENTRY(list) list_entry(list, struct dmx_frontend, connectivity_list)
+
+struct dmx_demux {
+ u32 capabilities; /* Bitfield of capability flags */
+ struct dmx_frontend* frontend; /* Front-end connected to the demux */
+ void* priv; /* Pointer to private data of the API client */
+ int (*open) (struct dmx_demux* demux);
+ int (*close) (struct dmx_demux* demux);
+ int (*write) (struct dmx_demux* demux, const char* buf, size_t count);
+ int (*allocate_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed** feed,
+ dmx_ts_cb callback);
+ int (*release_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed* feed);
+ int (*allocate_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed** feed,
+ dmx_section_cb callback);
+ int (*release_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed* feed);
+ int (*add_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*remove_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ struct list_head* (*get_frontends) (struct dmx_demux* demux);
+ int (*connect_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*disconnect_frontend) (struct dmx_demux* demux);
+
+ int (*get_pes_pids) (struct dmx_demux* demux, u16 *pids);
+
+ int (*get_caps) (struct dmx_demux* demux, struct dmx_caps *caps);
+
+ int (*set_source) (struct dmx_demux* demux, const dmx_source_t *src);
+
+ int (*get_stc) (struct dmx_demux* demux, unsigned int num,
+ u64 *stc, unsigned int *base);
+};
+
+#endif /* #ifndef __DEMUX_H */
diff --git a/v4l/kernel-2.6.26/dmxdev.h b/v4l/kernel-2.6.26/dmxdev.h
new file mode 100644
index 0000000..29746e7
--- /dev/null
+++ b/v4l/kernel-2.6.26/dmxdev.h
@@ -0,0 +1,110 @@
+/*
+ * dmxdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DMXDEV_H_
+#define _DMXDEV_H_
+
+#include <linux/types.h>
+#include <linux/spinlock.h>
+#include <linux/kernel.h>
+#include <linux/timer.h>
+#include <linux/wait.h>
+#include <linux/fs.h>
+#include <linux/string.h>
+#include <linux/mutex.h>
+
+#include <linux/dvb/dmx.h>
+
+#include "dvbdev.h"
+#include "demux.h"
+#include "dvb_ringbuffer.h"
+
+enum dmxdev_type {
+ DMXDEV_TYPE_NONE,
+ DMXDEV_TYPE_SEC,
+ DMXDEV_TYPE_PES,
+};
+
+enum dmxdev_state {
+ DMXDEV_STATE_FREE,
+ DMXDEV_STATE_ALLOCATED,
+ DMXDEV_STATE_SET,
+ DMXDEV_STATE_GO,
+ DMXDEV_STATE_DONE,
+ DMXDEV_STATE_TIMEDOUT
+};
+
+struct dmxdev_filter {
+ union {
+ struct dmx_section_filter *sec;
+ } filter;
+
+ union {
+ struct dmx_ts_feed *ts;
+ struct dmx_section_feed *sec;
+ } feed;
+
+ union {
+ struct dmx_sct_filter_params sec;
+ struct dmx_pes_filter_params pes;
+ } params;
+
+ enum dmxdev_type type;
+ enum dmxdev_state state;
+ struct dmxdev *dev;
+ struct dvb_ringbuffer buffer;
+
+ struct mutex mutex;
+
+ /* only for sections */
+ struct timer_list timer;
+ int todo;
+ u8 secheader[3];
+};
+
+
+struct dmxdev {
+ struct dvb_device *dvbdev;
+ struct dvb_device *dvr_dvbdev;
+
+ struct dmxdev_filter *filter;
+ struct dmx_demux *demux;
+
+ int filternum;
+ int capabilities;
+
+ unsigned int exit:1;
+#define DMXDEV_CAP_DUPLEX 1
+ struct dmx_frontend *dvr_orig_fe;
+
+ struct dvb_ringbuffer dvr_buffer;
+#define DVR_BUFFER_SIZE (10*188*1024)
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+
+int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *);
+void dvb_dmxdev_release(struct dmxdev *dmxdev);
+
+#endif /* _DMXDEV_H_ */
diff --git a/v4l/kernel-2.6.26/dvb-pll.h b/v4l/kernel-2.6.26/dvb-pll.h
new file mode 100644
index 0000000..872ca29
--- /dev/null
+++ b/v4l/kernel-2.6.26/dvb-pll.h
@@ -0,0 +1,51 @@
+/*
+ * descriptions + helper functions for simple dvb plls.
+ */
+
+#ifndef __DVB_PLL_H__
+#define __DVB_PLL_H__
+
+#include <linux/i2c.h>
+#include "dvb_frontend.h"
+
+#define DVB_PLL_UNDEFINED 0
+#define DVB_PLL_THOMSON_DTT7579 1
+#define DVB_PLL_THOMSON_DTT759X 2
+#define DVB_PLL_LG_Z201 3
+#define DVB_PLL_UNKNOWN_1 4
+#define DVB_PLL_TUA6010XS 5
+#define DVB_PLL_ENV57H1XD5 6
+#define DVB_PLL_TUA6034 7
+#define DVB_PLL_TDA665X 8
+#define DVB_PLL_TDED4 9
+#define DVB_PLL_TDHU2 10
+#define DVB_PLL_SAMSUNG_TBMV 11
+#define DVB_PLL_PHILIPS_SD1878_TDA8261 12
+#define DVB_PLL_OPERA1 13
+
+/**
+ * Attach a dvb-pll to the supplied frontend structure.
+ *
+ * @param fe Frontend to attach to.
+ * @param pll_addr i2c address of the PLL (if used).
+ * @param i2c i2c adapter to use (set to NULL if not used).
+ * @param pll_desc_id dvb_pll_desc to use.
+ * @return Frontend pointer on success, NULL on failure
+ */
+#if defined(CONFIG_DVB_PLL) || (defined(CONFIG_DVB_PLL_MODULE) && defined(MODULE))
+extern struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ unsigned int pll_desc_id);
+#else
+static inline struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ unsigned int pll_desc_id)
+{
+ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
+ return NULL;
+}
+#endif
+
+#endif
diff --git a/v4l/kernel-2.6.26/dvb-usb-ids.h b/v4l/kernel-2.6.26/dvb-usb-ids.h
new file mode 100644
index 0000000..31ded10
--- /dev/null
+++ b/v4l/kernel-2.6.26/dvb-usb-ids.h
@@ -0,0 +1,201 @@
+/* dvb-usb-ids.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de) see
+ * dvb-usb-init.c for copyright information.
+ *
+ * a header file containing define's for the USB device supported by the
+ * various drivers.
+ */
+#ifndef _DVB_USB_IDS_H_
+#define _DVB_USB_IDS_H_
+
+/* Vendor IDs */
+#define USB_VID_ADSTECH 0x06e1
+#define USB_VID_AFATECH 0x15a4
+#define USB_VID_ALCOR_MICRO 0x058f
+#define USB_VID_ALINK 0x05e3
+#define USB_VID_ANCHOR 0x0547
+#define USB_VID_ANSONIC 0x10b9
+#define USB_VID_ANUBIS_ELECTRONIC 0x10fd
+#define USB_VID_ASUS 0x0b05
+#define USB_VID_AVERMEDIA 0x07ca
+#define USB_VID_COMPRO 0x185b
+#define USB_VID_COMPRO_UNK 0x145f
+#define USB_VID_CYPRESS 0x04b4
+#define USB_VID_DIBCOM 0x10b8
+#define USB_VID_DPOSH 0x1498
+#define USB_VID_DVICO 0x0fe9
+#define USB_VID_EMPIA 0xeb1a
+#define USB_VID_GENPIX 0x09c0
+#define USB_VID_GRANDTEC 0x5032
+#define USB_VID_HANFTEK 0x15f4
+#define USB_VID_HAUPPAUGE 0x2040
+#define USB_VID_HYPER_PALTEK 0x1025
+#define USB_VID_KWORLD 0xeb2a
+#define USB_VID_KYE 0x0458
+#define USB_VID_LEADTEK 0x0413
+#define USB_VID_LITEON 0x04ca
+#define USB_VID_MEDION 0x1660
+#define USB_VID_MIGLIA 0x18f3
+#define USB_VID_MSI 0x0db0
+#define USB_VID_OPERA1 0x695c
+#define USB_VID_PINNACLE 0x2304
+#define USB_VID_TECHNOTREND 0x0b48
+#define USB_VID_TERRATEC 0x0ccd
+#define USB_VID_VISIONPLUS 0x13d3
+#define USB_VID_TWINHAN 0x1822
+#define USB_VID_ULTIMA_ELECTRONIC 0x05d8
+#define USB_VID_UNIWILL 0x1584
+#define USB_VID_WIDEVIEW 0x14aa
+#define USB_VID_GIGABYTE 0x1044
+#define USB_VID_YUAN 0x1164
+
+
+/* Product IDs */
+#define USB_PID_ADSTECH_USB2_COLD 0xa333
+#define USB_PID_ADSTECH_USB2_WARM 0xa334
+#define USB_PID_AFATECH_AF9005 0x9020
+#define USB_VID_ALINK_DTU 0xf170
+#define USB_PID_ANSONIC_DVBT_USB 0x6000
+#define USB_PID_AVERMEDIA_DVBT_USB_COLD 0x0001
+#define USB_PID_AVERMEDIA_DVBT_USB_WARM 0x0002
+#define USB_PID_AVERMEDIA_DVBT_USB2_COLD 0xa800
+#define USB_PID_AVERMEDIA_DVBT_USB2_WARM 0xa801
+#define USB_PID_COMPRO_DVBU2000_COLD 0xd000
+#define USB_PID_COMPRO_DVBU2000_WARM 0xd001
+#define USB_PID_COMPRO_DVBU2000_UNK_COLD 0x010c
+#define USB_PID_COMPRO_DVBU2000_UNK_WARM 0x010d
+#define USB_PID_COMPRO_VIDEOMATE_U500 0x1e78
+#define USB_PID_COMPRO_VIDEOMATE_U500_PC 0x1e80
+#define USB_PID_DIBCOM_HOOK_DEFAULT 0x0064
+#define USB_PID_DIBCOM_HOOK_DEFAULT_REENUM 0x0065
+#define USB_PID_DIBCOM_MOD3000_COLD 0x0bb8
+#define USB_PID_DIBCOM_MOD3000_WARM 0x0bb9
+#define USB_PID_DIBCOM_MOD3001_COLD 0x0bc6
+#define USB_PID_DIBCOM_MOD3001_WARM 0x0bc7
+#define USB_PID_DIBCOM_STK7700P 0x1e14
+#define USB_PID_DIBCOM_STK7700P_PC 0x1e78
+#define USB_PID_DIBCOM_STK7700D 0x1ef0
+#define USB_PID_DIBCOM_STK7700_U7000 0x7001
+#define USB_PID_DIBCOM_STK7070P 0x1ebc
+#define USB_PID_DIBCOM_STK7070PD 0x1ebe
+#define USB_PID_DIBCOM_ANCHOR_2135_COLD 0x2131
+#define USB_PID_DPOSH_M9206_COLD 0x9206
+#define USB_PID_DPOSH_M9206_WARM 0xa090
+#define USB_PID_UNIWILL_STK7700P 0x6003
+#define USB_PID_GRANDTEC_DVBT_USB_COLD 0x0fa0
+#define USB_PID_GRANDTEC_DVBT_USB_WARM 0x0fa1
+#define USB_PID_KWORLD_VSTREAM_COLD 0x17de
+#define USB_PID_KWORLD_VSTREAM_WARM 0x17df
+#define USB_PID_TERRATEC_CINERGY_T_USB_XE 0x0055
+#define USB_PID_TWINHAN_VP7041_COLD 0x3201
+#define USB_PID_TWINHAN_VP7041_WARM 0x3202
+#define USB_PID_TWINHAN_VP7020_COLD 0x3203
+#define USB_PID_TWINHAN_VP7020_WARM 0x3204
+#define USB_PID_TWINHAN_VP7045_COLD 0x3205
+#define USB_PID_TWINHAN_VP7045_WARM 0x3206
+#define USB_PID_TWINHAN_VP7021_COLD 0x3207
+#define USB_PID_TWINHAN_VP7021_WARM 0x3208
+#define USB_PID_DNTV_TINYUSB2_COLD 0x3223
+#define USB_PID_DNTV_TINYUSB2_WARM 0x3224
+#define USB_PID_ULTIMA_TVBOX_COLD 0x8105
+#define USB_PID_ULTIMA_TVBOX_WARM 0x8106
+#define USB_PID_ULTIMA_TVBOX_AN2235_COLD 0x8107
+#define USB_PID_ULTIMA_TVBOX_AN2235_WARM 0x8108
+#define USB_PID_ULTIMA_TVBOX_ANCHOR_COLD 0x2235
+#define USB_PID_ULTIMA_TVBOX_USB2_COLD 0x8109
+#define USB_PID_ULTIMA_TVBOX_USB2_WARM 0x810a
+#define USB_PID_ARTEC_T14_COLD 0x810b
+#define USB_PID_ARTEC_T14_WARM 0x810c
+#define USB_PID_ARTEC_T14BR 0x810f
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_COLD 0x8613
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_WARM 0x1002
+#define USB_PID_UNK_HYPER_PALTEK_COLD 0x005e
+#define USB_PID_UNK_HYPER_PALTEK_WARM 0x005f
+#define USB_PID_HANFTEK_UMT_010_COLD 0x0001
+#define USB_PID_HANFTEK_UMT_010_WARM 0x0015
+#define USB_PID_DTT200U_COLD 0x0201
+#define USB_PID_DTT200U_WARM 0x0301
+#define USB_PID_WT220U_ZAP250_COLD 0x0220
+#define USB_PID_WT220U_COLD 0x0222
+#define USB_PID_WT220U_WARM 0x0221
+#define USB_PID_WT220U_FC_COLD 0x0225
+#define USB_PID_WT220U_FC_WARM 0x0226
+#define USB_PID_WT220U_ZL0353_COLD 0x022a
+#define USB_PID_WT220U_ZL0353_WARM 0x022b
+#define USB_PID_WINTV_NOVA_T_USB2_COLD 0x9300
+#define USB_PID_WINTV_NOVA_T_USB2_WARM 0x9301
+#define USB_PID_HAUPPAUGE_NOVA_T_500 0x9941
+#define USB_PID_HAUPPAUGE_NOVA_T_500_2 0x9950
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK 0x7050
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK_2 0x7060
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK_3 0x7070
+#define USB_PID_HAUPPAUGE_MYTV_T 0x7080
+#define USB_PID_HAUPPAUGE_NOVA_TD_STICK 0x9580
+#define USB_PID_HAUPPAUGE_NOVA_TD_STICK_52009 0x5200
+#define USB_PID_AVERMEDIA_EXPRESS 0xb568
+#define USB_PID_AVERMEDIA_VOLAR 0xa807
+#define USB_PID_AVERMEDIA_VOLAR_2 0xb808
+#define USB_PID_TECHNOTREND_CONNECT_S2400 0x3006
+#define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY 0x005a
+#define USB_PID_TERRATEC_CINERGY_HT_USB_XE 0x0058
+#define USB_PID_TERRATEC_CINERGY_HT_EXPRESS 0x0060
+#define USB_PID_TERRATEC_CINERGY_T_XXS 0x0078
+#define USB_PID_PINNACLE_EXPRESSCARD_320CX 0x022e
+#define USB_PID_PINNACLE_PCTV2000E 0x022c
+#define USB_PID_PINNACLE_PCTV_DVB_T_FLASH 0x0228
+#define USB_PID_PINNACLE_PCTV_DUAL_DIVERSITY_DVB_T 0x0229
+#define USB_PID_PINNACLE_PCTV72E 0x0236
+#define USB_PID_PINNACLE_PCTV73E 0x0237
+#define USB_PID_PCTV_200E 0x020e
+#define USB_PID_PCTV_400E 0x020f
+#define USB_PID_PCTV_450E 0x0222
+#define USB_PID_NEBULA_DIGITV 0x0201
+#define USB_PID_DVICO_BLUEBIRD_LGDT 0xd820
+#define USB_PID_DVICO_BLUEBIRD_LG064F_COLD 0xd500
+#define USB_PID_DVICO_BLUEBIRD_LG064F_WARM 0xd501
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_COLD 0xdb00
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_WARM 0xdb01
+#define USB_PID_DVICO_BLUEBIRD_TH7579_COLD 0xdb10
+#define USB_PID_DVICO_BLUEBIRD_TH7579_WARM 0xdb11
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_COLD 0xdb50
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_WARM 0xdb51
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_COLD 0xdb58
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_WARM 0xdb59
+#define USB_PID_DVICO_BLUEBIRD_DUAL_4 0xdb78
+#define USB_PID_DVICO_BLUEBIRD_DVB_T_NANO_2 0xdb70
+#define USB_PID_DVICO_BLUEBIRD_DVB_T_NANO_2_NFW_WARM 0xdb71
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_COLD 0xdb54
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_WARM 0xdb55
+#define USB_PID_MEDION_MD95700 0x0932
+#define USB_PID_MSI_MEGASKY580 0x5580
+#define USB_PID_MSI_MEGASKY580_55801 0x5581
+#define USB_PID_KYE_DVB_T_COLD 0x701e
+#define USB_PID_KYE_DVB_T_WARM 0x701f
+#define USB_PID_LITEON_DVB_T_COLD 0xf000
+#define USB_PID_LITEON_DVB_T_WARM 0xf001
+#define USB_PID_DIGIVOX_MINI_SL_COLD 0xe360
+#define USB_PID_DIGIVOX_MINI_SL_WARM 0xe361
+#define USB_PID_GRANDTEC_DVBT_USB2_COLD 0x0bc6
+#define USB_PID_GRANDTEC_DVBT_USB2_WARM 0x0bc7
+#define USB_PID_WINFAST_DTV_DONGLE_COLD 0x6025
+#define USB_PID_WINFAST_DTV_DONGLE_WARM 0x6026
+#define USB_PID_WINFAST_DTV_DONGLE_STK7700P 0x6f00
+#define USB_PID_WINFAST_DTV_DONGLE_STK7700P_2 0x6f01
+#define USB_PID_GENPIX_8PSK_REV_1_COLD 0x0200
+#define USB_PID_GENPIX_8PSK_REV_1_WARM 0x0201
+#define USB_PID_GENPIX_8PSK_REV_2 0x0202
+#define USB_PID_GENPIX_SKYWALKER_1 0x0203
+#define USB_PID_GENPIX_SKYWALKER_CW3K 0x0204
+#define USB_PID_SIGMATEK_DVB_110 0x6610
+#define USB_PID_MSI_DIGI_VOX_MINI_II 0x1513
+#define USB_PID_OPERA1_COLD 0x2830
+#define USB_PID_OPERA1_WARM 0x3829
+#define USB_PID_LIFEVIEW_TV_WALKER_TWIN_COLD 0x0514
+#define USB_PID_LIFEVIEW_TV_WALKER_TWIN_WARM 0x0513
+#define USB_PID_GIGABYTE_U7000 0x7001
+#define USB_PID_ASUS_U3000 0x171f
+#define USB_PID_ASUS_U3100 0x173f
+#define USB_PID_YUAN_EC372S 0x1edc
+
+#endif
diff --git a/v4l/kernel-2.6.26/dvb-usb.h b/v4l/kernel-2.6.26/dvb-usb.h
new file mode 100644
index 0000000..b1de0f7
--- /dev/null
+++ b/v4l/kernel-2.6.26/dvb-usb.h
@@ -0,0 +1,400 @@
+/* dvb-usb.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * the headerfile, all dvb-usb-drivers have to include.
+ *
+ * TODO: clean-up the structures for unused fields and update the comments
+ */
+#ifndef __DVB_USB_H__
+#define __DVB_USB_H__
+
+#include <linux/input.h>
+#include <linux/usb.h>
+#include <linux/firmware.h>
+#include <linux/mutex.h>
+
+#include "dvb_frontend.h"
+#include "dvb_demux.h"
+#include "dvb_net.h"
+#include "dmxdev.h"
+
+#include "dvb-pll.h"
+
+#include "dvb-usb-ids.h"
+
+/* debug */
+#ifdef CONFIG_DVB_USB_DEBUG
+#define dprintk(var,level,args...) \
+ do { if ((var & level)) { printk(args); } } while (0)
+
+#define debug_dump(b,l,func) {\
+ int loop_; \
+ for (loop_ = 0; loop_ < l; loop_++) func("%02x ", b[loop_]); \
+ func("\n");\
+}
+#define DVB_USB_DEBUG_STATUS
+#else
+#define dprintk(args...)
+#define debug_dump(b,l,func)
+
+#define DVB_USB_DEBUG_STATUS " (debugging is not enabled)"
+
+#endif
+
+/* generic log methods - taken from usb.h */
+#ifndef DVB_USB_LOG_PREFIX
+ #define DVB_USB_LOG_PREFIX "dvb-usb (please define a log prefix)"
+#endif
+
+#undef err
+#define err(format, arg...) printk(KERN_ERR DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef info
+#define info(format, arg...) printk(KERN_INFO DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef warn
+#define warn(format, arg...) printk(KERN_WARNING DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+
+/**
+ * struct dvb_usb_device_description - name and its according USB IDs
+ * @name: real name of the box, regardless which DVB USB device class is in use
+ * @cold_ids: array of struct usb_device_id which describe the device in
+ * pre-firmware state
+ * @warm_ids: array of struct usb_device_id which describe the device in
+ * post-firmware state
+ *
+ * Each DVB USB device class can have one or more actual devices, this struct
+ * assigns a name to it.
+ */
+struct dvb_usb_device_description {
+ const char *name;
+
+#define DVB_USB_ID_MAX_NUM 15
+ struct usb_device_id *cold_ids[DVB_USB_ID_MAX_NUM];
+ struct usb_device_id *warm_ids[DVB_USB_ID_MAX_NUM];
+};
+
+/**
+ * struct dvb_usb_rc_key - a remote control key and its input-event
+ * @custom: the vendor/custom part of the key
+ * @data: the actual key part
+ * @event: the input event assigned to key identified by custom and data
+ */
+struct dvb_usb_rc_key {
+ u8 custom,data;
+ u32 event;
+};
+
+struct dvb_usb_device;
+struct dvb_usb_adapter;
+struct usb_data_stream;
+
+/**
+ * Properties of USB streaming - TODO this structure should be somewhere else
+ * describes the kind of USB transfer used for data-streaming.
+ * (BULK or ISOC)
+ */
+struct usb_data_stream_properties {
+#define USB_BULK 1
+#define USB_ISOC 2
+ int type;
+ int count;
+ int endpoint;
+
+ union {
+ struct {
+ int buffersize; /* per URB */
+ } bulk;
+ struct {
+ int framesperurb;
+ int framesize;
+ int interval;
+ } isoc;
+ } u;
+};
+
+/**
+ * struct dvb_usb_adapter_properties - properties of a dvb-usb-adapter.
+ * A DVB-USB-Adapter is basically a dvb_adapter which is present on a USB-device.
+ * @caps: capabilities of the DVB USB device.
+ * @pid_filter_count: number of PID filter position in the optional hardware
+ * PID-filter.
+ * @streaming_ctrl: called to start and stop the MPEG2-TS streaming of the
+ * device (not URB submitting/killing).
+ * @pid_filter_ctrl: called to en/disable the PID filter, if any.
+ * @pid_filter: called to set/unset a PID for filtering.
+ * @frontend_attach: called to attach the possible frontends (fill fe-field
+ * of struct dvb_usb_device).
+ * @tuner_attach: called to attach the correct tuner and to fill pll_addr,
+ * pll_desc and pll_init_buf of struct dvb_usb_device).
+ * @stream: configuration of the USB streaming
+ */
+struct dvb_usb_adapter_properties {
+#define DVB_USB_ADAP_HAS_PID_FILTER 0x01
+#define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
+#define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
+#define DVB_USB_ADAP_RECEIVES_204_BYTE_TS 0x08
+ int caps;
+ int pid_filter_count;
+
+ int (*streaming_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
+
+ int (*frontend_attach) (struct dvb_usb_adapter *);
+ int (*tuner_attach) (struct dvb_usb_adapter *);
+
+ struct usb_data_stream_properties stream;
+
+ int size_of_priv;
+};
+
+/**
+ * struct dvb_usb_device_properties - properties of a dvb-usb-device
+ * @usb_ctrl: which USB device-side controller is in use. Needed for firmware
+ * download.
+ * @firmware: name of the firmware file.
+ * @download_firmware: called to download the firmware when the usb_ctrl is
+ * DEVICE_SPECIFIC.
+ * @no_reconnect: device doesn't do a reconnect after downloading the firmware,
+ * so do the warm initialization right after it
+ *
+ * @size_of_priv: how many bytes shall be allocated for the private field
+ * of struct dvb_usb_device.
+ *
+ * @power_ctrl: called to enable/disable power of the device.
+ * @read_mac_address: called to read the MAC address of the device.
+ * @identify_state: called to determine the state (cold or warm), when it
+ * is not distinguishable by the USB IDs.
+ *
+ * @rc_key_map: a hard-wired array of struct dvb_usb_rc_key (NULL to disable
+ * remote control handling).
+ * @rc_key_map_size: number of items in @rc_key_map.
+ * @rc_query: called to query an event event.
+ * @rc_interval: time in ms between two queries.
+ *
+ * @i2c_algo: i2c_algorithm if the device has I2CoverUSB.
+ *
+ * @generic_bulk_ctrl_endpoint: most of the DVB USB devices have a generic
+ * endpoint which received control messages with bulk transfers. When this
+ * is non-zero, one can use dvb_usb_generic_rw and dvb_usb_generic_write-
+ * helper functions.
+ *
+ * @num_device_descs: number of struct dvb_usb_device_description in @devices
+ * @devices: array of struct dvb_usb_device_description compatibles with these
+ * properties.
+ */
+#define MAX_NO_OF_ADAPTER_PER_DEVICE 2
+struct dvb_usb_device_properties {
+
+#define DVB_USB_IS_AN_I2C_ADAPTER 0x01
+ int caps;
+
+#define DEVICE_SPECIFIC 0
+#define CYPRESS_AN2135 1
+#define CYPRESS_AN2235 2
+#define CYPRESS_FX2 3
+ int usb_ctrl;
+ int (*download_firmware) (struct usb_device *, const struct firmware *);
+ const char firmware[FIRMWARE_NAME_MAX];
+ int no_reconnect;
+
+ int size_of_priv;
+
+ int num_adapters;
+ struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ int (*power_ctrl) (struct dvb_usb_device *, int);
+ int (*read_mac_address) (struct dvb_usb_device *, u8 []);
+ int (*identify_state) (struct usb_device *, struct dvb_usb_device_properties *,
+ struct dvb_usb_device_description **, int *);
+
+/* remote control properties */
+#define REMOTE_NO_KEY_PRESSED 0x00
+#define REMOTE_KEY_PRESSED 0x01
+#define REMOTE_KEY_REPEAT 0x02
+ struct dvb_usb_rc_key *rc_key_map;
+ int rc_key_map_size;
+ int (*rc_query) (struct dvb_usb_device *, u32 *, int *);
+ int rc_interval;
+
+ struct i2c_algorithm *i2c_algo;
+
+ int generic_bulk_ctrl_endpoint;
+
+ int num_device_descs;
+ struct dvb_usb_device_description devices[9];
+};
+
+/**
+ * struct usb_data_stream - generic object of an USB stream
+ * @buf_num: number of buffer allocated.
+ * @buf_size: size of each buffer in buf_list.
+ * @buf_list: array containing all allocate buffers for streaming.
+ * @dma_addr: list of dma_addr_t for each buffer in buf_list.
+ *
+ * @urbs_initialized: number of URBs initialized.
+ * @urbs_submitted: number of URBs submitted.
+ */
+#define MAX_NO_URBS_FOR_DATA_STREAM 10
+struct usb_data_stream {
+ struct usb_device *udev;
+ struct usb_data_stream_properties props;
+
+#define USB_STATE_INIT 0x00
+#define USB_STATE_URB_BUF 0x01
+ int state;
+
+ void (*complete) (struct usb_data_stream *, u8 *, size_t);
+
+ struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ int buf_num;
+ unsigned long buf_size;
+ u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
+
+ int urbs_initialized;
+ int urbs_submitted;
+
+ void *user_priv;
+};
+
+/**
+ * struct dvb_usb_adapter - a DVB adapter on a USB device
+ * @id: index of this adapter (starting with 0).
+ *
+ * @feedcount: number of reqested feeds (used for streaming-activation)
+ * @pid_filtering: is hardware pid_filtering used or not.
+ *
+ * @pll_addr: I2C address of the tuner for programming
+ * @pll_init: array containing the initialization buffer
+ * @pll_desc: pointer to the appropriate struct dvb_pll_desc
+ * @tuner_pass_ctrl: called to (de)activate tuner passthru of the demod or the board
+ *
+ * @dvb_adap: device's dvb_adapter.
+ * @dmxdev: device's dmxdev.
+ * @demux: device's software demuxer.
+ * @dvb_net: device's dvb_net interfaces.
+ * @dvb_frontend: device's frontend.
+ * @max_feed_count: how many feeds can be handled simultaneously by this
+ * device
+ *
+ * @fe_init: rerouted frontend-init (wakeup) function.
+ * @fe_sleep: rerouted frontend-sleep function.
+ *
+ * @stream: the usb data stream.
+ */
+struct dvb_usb_adapter {
+ struct dvb_usb_device *dev;
+ struct dvb_usb_adapter_properties props;
+
+#define DVB_USB_ADAP_STATE_INIT 0x000
+#define DVB_USB_ADAP_STATE_DVB 0x001
+ int state;
+
+ u8 id;
+
+ int feedcount;
+ int pid_filtering;
+
+ /* dvb */
+ struct dvb_adapter dvb_adap;
+ struct dmxdev dmxdev;
+ struct dvb_demux demux;
+ struct dvb_net dvb_net;
+ struct dvb_frontend *fe;
+ int max_feed_count;
+
+ int (*fe_init) (struct dvb_frontend *);
+ int (*fe_sleep) (struct dvb_frontend *);
+
+ struct usb_data_stream stream;
+
+ void *priv;
+};
+
+/**
+ * struct dvb_usb_device - object of a DVB USB device
+ * @props: copy of the struct dvb_usb_properties this device belongs to.
+ * @desc: pointer to the device's struct dvb_usb_device_description.
+ * @state: initialization and runtime state of the device.
+ *
+ * @powered: indicated whether the device is power or not.
+ * Powered is in/decremented for each call to modify the state.
+ * @udev: pointer to the device's struct usb_device.
+ *
+ * @usb_mutex: semaphore of USB control messages (reading needs two messages)
+ * @i2c_mutex: semaphore for i2c-transfers
+ *
+ * @i2c_adap: device's i2c_adapter if it uses I2CoverUSB
+ *
+ * @rc_input_dev: input device for the remote control.
+ * @rc_query_work: struct work_struct frequent rc queries
+ * @last_event: last triggered event
+ * @last_state: last state (no, pressed, repeat)
+ * @owner: owner of the dvb_adapter
+ * @priv: private data of the actual driver (allocate by dvb-usb, size defined
+ * in size_of_priv of dvb_usb_properties).
+ */
+struct dvb_usb_device {
+ struct dvb_usb_device_properties props;
+ struct dvb_usb_device_description *desc;
+
+ struct usb_device *udev;
+
+#define DVB_USB_STATE_INIT 0x000
+#define DVB_USB_STATE_I2C 0x001
+#define DVB_USB_STATE_DVB 0x002
+#define DVB_USB_STATE_REMOTE 0x004
+ int state;
+
+ int powered;
+
+ /* locking */
+ struct mutex usb_mutex;
+
+ /* i2c */
+ struct mutex i2c_mutex;
+ struct i2c_adapter i2c_adap;
+
+ int num_adapters_initialized;
+ struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ /* remote control */
+ struct input_dev *rc_input_dev;
+ char rc_phys[64];
+ struct delayed_work rc_query_work;
+ u32 last_event;
+ int last_state;
+
+ struct module *owner;
+
+ void *priv;
+};
+
+extern int dvb_usb_device_init(struct usb_interface *,
+ struct dvb_usb_device_properties *,
+ struct module *, struct dvb_usb_device **,
+ short *adapter_nums);
+extern void dvb_usb_device_exit(struct usb_interface *);
+
+/* the generic read/write method for device control */
+extern int dvb_usb_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16,int);
+extern int dvb_usb_generic_write(struct dvb_usb_device *, u8 *, u16);
+
+/* commonly used remote control parsing */
+extern int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *, u8[], u32 *, int *);
+
+/* commonly used firmware download types and function */
+struct hexline {
+ u8 len;
+ u32 addr;
+ u8 type;
+ u8 data[255];
+ u8 chk;
+};
+extern int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type);
+extern int dvb_usb_get_hexline(const struct firmware *fw, struct hexline *hx, int *pos);
+
+
+#endif
diff --git a/v4l/kernel-2.6.26/dvb_demux.h b/v4l/kernel-2.6.26/dvb_demux.h
new file mode 100644
index 0000000..2c5f915
--- /dev/null
+++ b/v4l/kernel-2.6.26/dvb_demux.h
@@ -0,0 +1,140 @@
+/*
+ * dvb_demux.h: DVB kernel demux API
+ *
+ * Copyright (C) 2000-2001 Marcus Metzler & Ralph Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_DEMUX_H_
+#define _DVB_DEMUX_H_
+
+#include <linux/time.h>
+#include <linux/timer.h>
+#include <linux/spinlock.h>
+#include <linux/mutex.h>
+
+#include "demux.h"
+
+#define DMX_TYPE_TS 0
+#define DMX_TYPE_SEC 1
+#define DMX_TYPE_PES 2
+
+#define DMX_STATE_FREE 0
+#define DMX_STATE_ALLOCATED 1
+#define DMX_STATE_SET 2
+#define DMX_STATE_READY 3
+#define DMX_STATE_GO 4
+
+#define DVB_DEMUX_MASK_MAX 18
+
+struct dvb_demux_filter {
+ struct dmx_section_filter filter;
+ u8 maskandmode[DMX_MAX_FILTER_SIZE];
+ u8 maskandnotmode[DMX_MAX_FILTER_SIZE];
+ int doneq;
+
+ struct dvb_demux_filter *next;
+ struct dvb_demux_feed *feed;
+ int index;
+ int state;
+ int type;
+
+ u16 hw_handle;
+ struct timer_list timer;
+};
+
+#define DMX_FEED_ENTRY(pos) list_entry(pos, struct dvb_demux_feed, list_head)
+
+struct dvb_demux_feed {
+ union {
+ struct dmx_ts_feed ts;
+ struct dmx_section_feed sec;
+ } feed;
+
+ union {
+ dmx_ts_cb ts;
+ dmx_section_cb sec;
+ } cb;
+
+ struct dvb_demux *demux;
+ void *priv;
+ int type;
+ int state;
+ u16 pid;
+ u8 *buffer;
+ int buffer_size;
+
+ struct timespec timeout;
+ struct dvb_demux_filter *filter;
+
+ int ts_type;
+ enum dmx_ts_pes pes_type;
+
+ int cc;
+ int pusi_seen; /* prevents feeding of garbage from previous section */
+
+ u16 peslen;
+
+ struct list_head list_head;
+ unsigned int index; /* a unique index for each feed (can be used as hardware pid filter index) */
+};
+
+struct dvb_demux {
+ struct dmx_demux dmx;
+ void *priv;
+ int filternum;
+ int feednum;
+ int (*start_feed)(struct dvb_demux_feed *feed);
+ int (*stop_feed)(struct dvb_demux_feed *feed);
+ int (*write_to_decoder)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ u32 (*check_crc32)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ void (*memcopy)(struct dvb_demux_feed *feed, u8 *dst,
+ const u8 *src, size_t len);
+
+ int users;
+#define MAX_DVB_DEMUX_USERS 10
+ struct dvb_demux_filter *filter;
+ struct dvb_demux_feed *feed;
+
+ struct list_head frontend_list;
+
+ struct dvb_demux_feed *pesfilter[DMX_TS_PES_OTHER];
+ u16 pids[DMX_TS_PES_OTHER];
+ int playing;
+ int recording;
+
+#define DMX_MAX_PID 0x2000
+ struct list_head feed_list;
+ u8 tsbuf[204];
+ int tsbufp;
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+int dvb_dmx_init(struct dvb_demux *dvbdemux);
+void dvb_dmx_release(struct dvb_demux *dvbdemux);
+void dvb_dmx_swfilter_packets(struct dvb_demux *dvbdmx, const u8 *buf,
+ size_t count);
+void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count);
+void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf,
+ size_t count);
+
+#endif /* _DVB_DEMUX_H_ */
diff --git a/v4l/kernel-2.6.26/dvb_frontend.h b/v4l/kernel-2.6.26/dvb_frontend.h
new file mode 100644
index 0000000..aa4133f
--- /dev/null
+++ b/v4l/kernel-2.6.26/dvb_frontend.h
@@ -0,0 +1,207 @@
+/*
+ * dvb_frontend.h
+ *
+ * Copyright (C) 2001 convergence integrated media GmbH
+ * Copyright (C) 2004 convergence GmbH
+ *
+ * Written by Ralph Metzler
+ * Overhauled by Holger Waechtler
+ * Kernel I2C stuff by Michael Hunold <hunold@convergence.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_FRONTEND_H_
+#define _DVB_FRONTEND_H_
+
+#include <linux/types.h>
+#include <linux/sched.h>
+#include <linux/ioctl.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/delay.h>
+#include <linux/mutex.h>
+
+#include <linux/dvb/frontend.h>
+
+#include "dvbdev.h"
+
+struct dvb_frontend_tune_settings {
+ int min_delay_ms;
+ int step_size;
+ int max_drift;
+ struct dvb_frontend_parameters parameters;
+};
+
+struct dvb_frontend;
+
+struct dvb_tuner_info {
+ char name[128];
+
+ u32 frequency_min;
+ u32 frequency_max;
+ u32 frequency_step;
+
+ u32 bandwidth_min;
+ u32 bandwidth_max;
+ u32 bandwidth_step;
+};
+
+struct analog_parameters {
+ unsigned int frequency;
+ unsigned int mode;
+ unsigned int audmode;
+ u64 std;
+};
+
+struct dvb_tuner_ops {
+
+ struct dvb_tuner_info info;
+
+ int (*release)(struct dvb_frontend *fe);
+ int (*init)(struct dvb_frontend *fe);
+ int (*sleep)(struct dvb_frontend *fe);
+
+ /** This is for simple PLLs - set all parameters in one go. */
+ int (*set_params)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
+ int (*set_analog_params)(struct dvb_frontend *fe, struct analog_parameters *p);
+
+ /** This is support for demods like the mt352 - fills out the supplied buffer with what to write. */
+ int (*calc_regs)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p, u8 *buf, int buf_len);
+
+ /** This is to allow setting tuner-specific configs */
+ int (*set_config)(struct dvb_frontend *fe, void *priv_cfg);
+
+ int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency);
+ int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth);
+
+#define TUNER_STATUS_LOCKED 1
+#define TUNER_STATUS_STEREO 2
+ int (*get_status)(struct dvb_frontend *fe, u32 *status);
+ int (*get_rf_strength)(struct dvb_frontend *fe, u16 *strength);
+
+ /** These are provided seperately from set_params in order to facilitate silicon
+ * tuners which require sophisticated tuning loops, controlling each parameter seperately. */
+ int (*set_frequency)(struct dvb_frontend *fe, u32 frequency);
+ int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
+};
+
+struct analog_demod_info {
+ char *name;
+};
+
+struct analog_demod_ops {
+
+ struct analog_demod_info info;
+
+ void (*set_params)(struct dvb_frontend *fe,
+ struct analog_parameters *params);
+ int (*has_signal)(struct dvb_frontend *fe);
+ int (*is_stereo)(struct dvb_frontend *fe);
+ int (*get_afc)(struct dvb_frontend *fe);
+ void (*tuner_status)(struct dvb_frontend *fe);
+ void (*standby)(struct dvb_frontend *fe);
+ void (*release)(struct dvb_frontend *fe);
+ int (*i2c_gate_ctrl)(struct dvb_frontend *fe, int enable);
+
+ /** This is to allow setting tuner-specific configuration */
+ int (*set_config)(struct dvb_frontend *fe, void *priv_cfg);
+};
+
+struct dvb_frontend_ops {
+
+ struct dvb_frontend_info info;
+
+ void (*release)(struct dvb_frontend* fe);
+ void (*release_sec)(struct dvb_frontend* fe);
+
+ int (*init)(struct dvb_frontend* fe);
+ int (*sleep)(struct dvb_frontend* fe);
+
+ int (*write)(struct dvb_frontend* fe, u8* buf, int len);
+
+ /* if this is set, it overrides the default swzigzag */
+ int (*tune)(struct dvb_frontend* fe,
+ struct dvb_frontend_parameters* params,
+ unsigned int mode_flags,
+ unsigned int *delay,
+ fe_status_t *status);
+ /* get frontend tuning algorithm from the module */
+ int (*get_frontend_algo)(struct dvb_frontend *fe);
+
+ /* these two are only used for the swzigzag code */
+ int (*set_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+ int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings);
+
+ int (*get_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+
+ int (*read_status)(struct dvb_frontend* fe, fe_status_t* status);
+ int (*read_ber)(struct dvb_frontend* fe, u32* ber);
+ int (*read_signal_strength)(struct dvb_frontend* fe, u16* strength);
+ int (*read_snr)(struct dvb_frontend* fe, u16* snr);
+ int (*read_ucblocks)(struct dvb_frontend* fe, u32* ucblocks);
+
+ int (*diseqc_reset_overload)(struct dvb_frontend* fe);
+ int (*diseqc_send_master_cmd)(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd);
+ int (*diseqc_recv_slave_reply)(struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply);
+ int (*diseqc_send_burst)(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd);
+ int (*set_tone)(struct dvb_frontend* fe, fe_sec_tone_mode_t tone);
+ int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
+ int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg);
+ int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
+ int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
+ int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);
+
+ struct dvb_tuner_ops tuner_ops;
+ struct analog_demod_ops analog_ops;
+};
+
+#define MAX_EVENT 8
+
+struct dvb_fe_events {
+ struct dvb_frontend_event events[MAX_EVENT];
+ int eventw;
+ int eventr;
+ int overflow;
+ wait_queue_head_t wait_queue;
+ struct mutex mtx;
+};
+
+struct dvb_frontend {
+ struct dvb_frontend_ops ops;
+ struct dvb_adapter *dvb;
+ void *demodulator_priv;
+ void *tuner_priv;
+ void *frontend_priv;
+ void *sec_priv;
+ void *analog_demod_priv;
+};
+
+extern int dvb_register_frontend(struct dvb_adapter *dvb,
+ struct dvb_frontend *fe);
+
+extern int dvb_unregister_frontend(struct dvb_frontend *fe);
+
+extern void dvb_frontend_detach(struct dvb_frontend *fe);
+
+extern void dvb_frontend_reinitialise(struct dvb_frontend *fe);
+
+extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec);
+extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime);
+
+#endif
diff --git a/v4l/kernel-2.6.26/dvb_net.h b/v4l/kernel-2.6.26/dvb_net.h
new file mode 100644
index 0000000..3a3126c
--- /dev/null
+++ b/v4l/kernel-2.6.26/dvb_net.h
@@ -0,0 +1,47 @@
+/*
+ * dvb_net.h
+ *
+ * Copyright (C) 2001 Ralph Metzler for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_NET_H_
+#define _DVB_NET_H_
+
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/inetdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/skbuff.h>
+
+#include "dvbdev.h"
+
+#define DVB_NET_DEVICES_MAX 10
+
+struct dvb_net {
+ struct dvb_device *dvbdev;
+ struct net_device *device[DVB_NET_DEVICES_MAX];
+ int state[DVB_NET_DEVICES_MAX];
+ unsigned int exit:1;
+ struct dmx_demux *demux;
+};
+
+
+void dvb_net_release(struct dvb_net *);
+int dvb_net_init(struct dvb_adapter *, struct dvb_net *, struct dmx_demux *);
+
+#endif
diff --git a/v4l/kernel-2.6.26/dvb_ringbuffer.h b/v4l/kernel-2.6.26/dvb_ringbuffer.h
new file mode 100644
index 0000000..8908262
--- /dev/null
+++ b/v4l/kernel-2.6.26/dvb_ringbuffer.h
@@ -0,0 +1,182 @@
+/*
+ *
+ * dvb_ringbuffer.h: ring buffer implementation for the dvb driver
+ *
+ * Copyright (C) 2003 Oliver Endriss
+ * Copyright (C) 2004 Andrew de Quincey
+ *
+ * based on code originally found in av7110.c & dvb_ci.c:
+ * Copyright (C) 1999-2003 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _DVB_RINGBUFFER_H_
+#define _DVB_RINGBUFFER_H_
+
+#include <linux/spinlock.h>
+#include <linux/wait.h>
+
+struct dvb_ringbuffer {
+ u8 *data;
+ ssize_t size;
+ ssize_t pread;
+ ssize_t pwrite;
+ int error;
+
+ wait_queue_head_t queue;
+ spinlock_t lock;
+};
+
+#define DVB_RINGBUFFER_PKTHDRSIZE 3
+
+
+/*
+** Notes:
+** ------
+** (1) For performance reasons read and write routines don't check buffer sizes
+** and/or number of bytes free/available. This has to be done before these
+** routines are called. For example:
+**
+** *** write <buflen> bytes ***
+** free = dvb_ringbuffer_free(rbuf);
+** if (free >= buflen)
+** count = dvb_ringbuffer_write(rbuf, buffer, buflen);
+** else
+** ...
+**
+** *** read min. 1000, max. <bufsize> bytes ***
+** avail = dvb_ringbuffer_avail(rbuf);
+** if (avail >= 1000)
+** count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize), 0);
+** else
+** ...
+**
+** (2) If there is exactly one reader and one writer, there is no need
+** to lock read or write operations.
+** Two or more readers must be locked against each other.
+** Flushing the buffer counts as a read operation.
+** Resetting the buffer counts as a read and write operation.
+** Two or more writers must be locked against each other.
+*/
+
+/* initialize ring buffer, lock and queue */
+extern void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data, size_t len);
+
+/* test whether buffer is empty */
+extern int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf);
+
+/* return the number of free bytes in the buffer */
+extern ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf);
+
+/* return the number of bytes waiting in the buffer */
+extern ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf);
+
+
+/*
+** Reset the read and write pointers to zero and flush the buffer
+** This counts as a read and write operation
+*/
+extern void dvb_ringbuffer_reset(struct dvb_ringbuffer *rbuf);
+
+
+/* read routines & macros */
+/* ---------------------- */
+/* flush buffer */
+extern void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf);
+
+/* flush buffer protected by spinlock and wake-up waiting task(s) */
+extern void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf);
+
+/* peek at byte <offs> in the buffer */
+#define DVB_RINGBUFFER_PEEK(rbuf,offs) \
+ (rbuf)->data[((rbuf)->pread+(offs))%(rbuf)->size]
+
+/* advance read ptr by <num> bytes */
+#define DVB_RINGBUFFER_SKIP(rbuf,num) \
+ (rbuf)->pread=((rbuf)->pread+(num))%(rbuf)->size
+
+/*
+** read <len> bytes from ring buffer into <buf>
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf, u8 *buf,
+ size_t len, int usermem);
+
+
+/* write routines & macros */
+/* ----------------------- */
+/* write single byte to ring buffer */
+#define DVB_RINGBUFFER_WRITE_BYTE(rbuf,byte) \
+ { (rbuf)->data[(rbuf)->pwrite]=(byte); \
+ (rbuf)->pwrite=((rbuf)->pwrite+1)%(rbuf)->size; }
+/*
+** write <len> bytes to ring buffer
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf,
+ size_t len);
+
+
+/**
+ * Write a packet into the ringbuffer.
+ *
+ * <rbuf> Ringbuffer to write to.
+ * <buf> Buffer to write.
+ * <len> Length of buffer (currently limited to 65535 bytes max).
+ * returns Number of bytes written, or -EFAULT, -ENOMEM, -EVINAL.
+ */
+extern ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8* buf,
+ size_t len);
+
+/**
+ * Read from a packet in the ringbuffer. Note: unlike dvb_ringbuffer_read(), this
+ * does NOT update the read pointer in the ringbuffer. You must use
+ * dvb_ringbuffer_pkt_dispose() to mark a packet as no longer required.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ * <offset> Offset into packet to read from.
+ * <buf> Destination buffer for data.
+ * <len> Size of destination buffer.
+ * <usermem> Set to 1 if <buf> is in userspace.
+ * returns Number of bytes read, or -EFAULT.
+ */
+extern ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx,
+ int offset, u8* buf, size_t len, int usermem);
+
+/**
+ * Dispose of a packet in the ring buffer.
+ *
+ * <rbuf> Ring buffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ */
+extern void dvb_ringbuffer_pkt_dispose(struct dvb_ringbuffer *rbuf, size_t idx);
+
+/**
+ * Get the index of the next packet in a ringbuffer.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Previous packet index, or -1 to return the first packet index.
+ * <pktlen> On success, will be updated to contain the length of the packet in bytes.
+ * returns Packet index (if >=0), or -1 if no packets available.
+ */
+extern ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf, size_t idx, size_t* pktlen);
+
+
+#endif /* _DVB_RINGBUFFER_H_ */
diff --git a/v4l/kernel-2.6.26/dvbdev.h b/v4l/kernel-2.6.26/dvbdev.h
new file mode 100644
index 0000000..89d12dc
--- /dev/null
+++ b/v4l/kernel-2.6.26/dvbdev.h
@@ -0,0 +1,139 @@
+/*
+ * dvbdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBDEV_H_
+#define _DVBDEV_H_
+
+#include <linux/types.h>
+#include <linux/poll.h>
+#include <linux/fs.h>
+#include <linux/list.h>
+#include <linux/smp_lock.h>
+
+#define DVB_MAJOR 212
+
+#define DVB_MAX_ADAPTERS 8
+
+#define DVB_UNSET (-1)
+
+#define DVB_DEVICE_VIDEO 0
+#define DVB_DEVICE_AUDIO 1
+#define DVB_DEVICE_SEC 2
+#define DVB_DEVICE_FRONTEND 3
+#define DVB_DEVICE_DEMUX 4
+#define DVB_DEVICE_DVR 5
+#define DVB_DEVICE_CA 6
+#define DVB_DEVICE_NET 7
+#define DVB_DEVICE_OSD 8
+
+#define DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr) \
+ static short adapter_nr[] = \
+ {[0 ... (DVB_MAX_ADAPTERS - 1)] = DVB_UNSET }; \
+ module_param_array(adapter_nr, short, NULL, 0444); \
+ MODULE_PARM_DESC(adapter_nr, "DVB adapter numbers")
+
+struct dvb_adapter {
+ int num;
+ struct list_head list_head;
+ struct list_head device_list;
+ const char *name;
+ u8 proposed_mac [6];
+ void* priv;
+
+ struct device *device;
+
+ struct module *module;
+};
+
+
+struct dvb_device {
+ struct list_head list_head;
+ struct file_operations *fops;
+ struct dvb_adapter *adapter;
+ int type;
+ u32 id;
+
+ /* in theory, 'users' can vanish now,
+ but I don't want to change too much now... */
+ int readers;
+ int writers;
+ int users;
+
+ wait_queue_head_t wait_queue;
+ /* don't really need those !? -- FIXME: use video_usercopy */
+ int (*kernel_ioctl)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg);
+
+ void *priv;
+};
+
+
+extern int dvb_register_adapter(struct dvb_adapter *adap, const char *name,
+ struct module *module, struct device *device,
+ short *adapter_nums);
+extern int dvb_unregister_adapter (struct dvb_adapter *adap);
+
+extern int dvb_register_device (struct dvb_adapter *adap,
+ struct dvb_device **pdvbdev,
+ const struct dvb_device *template,
+ void *priv,
+ int type);
+
+extern void dvb_unregister_device (struct dvb_device *dvbdev);
+
+extern int dvb_generic_open (struct inode *inode, struct file *file);
+extern int dvb_generic_release (struct inode *inode, struct file *file);
+extern int dvb_generic_ioctl (struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg);
+
+/* we don't mess with video_usercopy() any more,
+we simply define out own dvb_usercopy(), which will hopefully become
+generic_usercopy() someday... */
+
+extern int dvb_usercopy(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg,
+ int (*func)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg));
+
+/** generic DVB attach function. */
+#ifdef CONFIG_MEDIA_ATTACH
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ void *__r = NULL; \
+ typeof(&FUNCTION) __a = symbol_request(FUNCTION); \
+ if (__a) { \
+ __r = (void *) __a(ARGS); \
+ if (__r == NULL) \
+ symbol_put(FUNCTION); \
+ } else { \
+ printk(KERN_ERR "DVB: Unable to find symbol "#FUNCTION"()\n"); \
+ } \
+ __r; \
+})
+
+#else
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ FUNCTION(ARGS); \
+})
+
+#endif
+
+#endif /* #ifndef _DVBDEV_H_ */
diff --git a/v4l/kernel-2.6.27/demux.h b/v4l/kernel-2.6.27/demux.h
new file mode 100644
index 0000000..eb91fd8
--- /dev/null
+++ b/v4l/kernel-2.6.27/demux.h
@@ -0,0 +1,280 @@
+/*
+ * demux.h
+ *
+ * Copyright (c) 2002 Convergence GmbH
+ *
+ * based on code:
+ * Copyright (c) 2000 Nokia Research Center
+ * Tampere, FINLAND
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __DEMUX_H
+#define __DEMUX_H
+
+#include <linux/types.h>
+#include <linux/errno.h>
+#include <linux/list.h>
+#include <linux/time.h>
+#include <linux/dvb/dmx.h>
+
+/*--------------------------------------------------------------------------*/
+/* Common definitions */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * DMX_MAX_FILTER_SIZE: Maximum length (in bytes) of a section/PES filter.
+ */
+
+#ifndef DMX_MAX_FILTER_SIZE
+#define DMX_MAX_FILTER_SIZE 18
+#endif
+
+/*
+ * DMX_MAX_SECFEED_SIZE: Maximum length (in bytes) of a private section feed filter.
+ */
+
+#ifndef DMX_MAX_SECTION_SIZE
+#define DMX_MAX_SECTION_SIZE 4096
+#endif
+#ifndef DMX_MAX_SECFEED_SIZE
+#define DMX_MAX_SECFEED_SIZE (DMX_MAX_SECTION_SIZE + 188)
+#endif
+
+
+/*
+ * enum dmx_success: Success codes for the Demux Callback API.
+ */
+
+enum dmx_success {
+ DMX_OK = 0, /* Received Ok */
+ DMX_LENGTH_ERROR, /* Incorrect length */
+ DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */
+ DMX_CRC_ERROR, /* Incorrect CRC */
+ DMX_FRAME_ERROR, /* Frame alignment error */
+ DMX_FIFO_ERROR, /* Receiver FIFO overrun */
+ DMX_MISSED_ERROR /* Receiver missed packet */
+} ;
+
+/*--------------------------------------------------------------------------*/
+/* TS packet reception */
+/*--------------------------------------------------------------------------*/
+
+/* TS filter type for set() */
+
+#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */
+#define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS
+ payload (<=184 bytes per packet) to callback */
+#define TS_DECODER 4 /* send stream to built-in decoder (if present) */
+#define TS_DEMUX 8 /* in case TS_PACKET is set, send the TS to
+ the demux device, not to the dvr device */
+
+/* PES type for filters which write to built-in decoder */
+/* these should be kept identical to the types in dmx.h */
+
+enum dmx_ts_pes
+{ /* also send packets to decoder (if it exists) */
+ DMX_TS_PES_AUDIO0,
+ DMX_TS_PES_VIDEO0,
+ DMX_TS_PES_TELETEXT0,
+ DMX_TS_PES_SUBTITLE0,
+ DMX_TS_PES_PCR0,
+
+ DMX_TS_PES_AUDIO1,
+ DMX_TS_PES_VIDEO1,
+ DMX_TS_PES_TELETEXT1,
+ DMX_TS_PES_SUBTITLE1,
+ DMX_TS_PES_PCR1,
+
+ DMX_TS_PES_AUDIO2,
+ DMX_TS_PES_VIDEO2,
+ DMX_TS_PES_TELETEXT2,
+ DMX_TS_PES_SUBTITLE2,
+ DMX_TS_PES_PCR2,
+
+ DMX_TS_PES_AUDIO3,
+ DMX_TS_PES_VIDEO3,
+ DMX_TS_PES_TELETEXT3,
+ DMX_TS_PES_SUBTITLE3,
+ DMX_TS_PES_PCR3,
+
+ DMX_TS_PES_OTHER
+};
+
+#define DMX_TS_PES_AUDIO DMX_TS_PES_AUDIO0
+#define DMX_TS_PES_VIDEO DMX_TS_PES_VIDEO0
+#define DMX_TS_PES_TELETEXT DMX_TS_PES_TELETEXT0
+#define DMX_TS_PES_SUBTITLE DMX_TS_PES_SUBTITLE0
+#define DMX_TS_PES_PCR DMX_TS_PES_PCR0
+
+
+struct dmx_ts_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux *parent; /* Back-pointer */
+ void *priv; /* Pointer to private data of the API client */
+ int (*set) (struct dmx_ts_feed *feed,
+ u16 pid,
+ int type,
+ enum dmx_ts_pes pes_type,
+ size_t circular_buffer_size,
+ struct timespec timeout);
+ int (*start_filtering) (struct dmx_ts_feed* feed);
+ int (*stop_filtering) (struct dmx_ts_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Section reception */
+/*--------------------------------------------------------------------------*/
+
+struct dmx_section_filter {
+ u8 filter_value [DMX_MAX_FILTER_SIZE];
+ u8 filter_mask [DMX_MAX_FILTER_SIZE];
+ u8 filter_mode [DMX_MAX_FILTER_SIZE];
+ struct dmx_section_feed* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+};
+
+struct dmx_section_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+
+ int check_crc;
+ u32 crc_val;
+
+ u8 *secbuf;
+ u8 secbuf_base[DMX_MAX_SECFEED_SIZE];
+ u16 secbufp, seclen, tsfeedp;
+
+ int (*set) (struct dmx_section_feed* feed,
+ u16 pid,
+ size_t circular_buffer_size,
+ int check_crc);
+ int (*allocate_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter** filter);
+ int (*release_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter* filter);
+ int (*start_filtering) (struct dmx_section_feed* feed);
+ int (*stop_filtering) (struct dmx_section_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Callback functions */
+/*--------------------------------------------------------------------------*/
+
+typedef int (*dmx_ts_cb) ( const u8 * buffer1,
+ size_t buffer1_length,
+ const u8 * buffer2,
+ size_t buffer2_length,
+ struct dmx_ts_feed* source,
+ enum dmx_success success);
+
+typedef int (*dmx_section_cb) ( const u8 * buffer1,
+ size_t buffer1_len,
+ const u8 * buffer2,
+ size_t buffer2_len,
+ struct dmx_section_filter * source,
+ enum dmx_success success);
+
+/*--------------------------------------------------------------------------*/
+/* DVB Front-End */
+/*--------------------------------------------------------------------------*/
+
+enum dmx_frontend_source {
+ DMX_MEMORY_FE,
+ DMX_FRONTEND_0,
+ DMX_FRONTEND_1,
+ DMX_FRONTEND_2,
+ DMX_FRONTEND_3,
+ DMX_STREAM_0, /* external stream input, e.g. LVDS */
+ DMX_STREAM_1,
+ DMX_STREAM_2,
+ DMX_STREAM_3
+};
+
+struct dmx_frontend {
+ struct list_head connectivity_list; /* List of front-ends that can
+ be connected to a particular
+ demux */
+ enum dmx_frontend_source source;
+};
+
+/*--------------------------------------------------------------------------*/
+/* MPEG-2 TS Demux */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * Flags OR'ed in the capabilities field of struct dmx_demux.
+ */
+
+#define DMX_TS_FILTERING 1
+#define DMX_PES_FILTERING 2
+#define DMX_SECTION_FILTERING 4
+#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */
+#define DMX_CRC_CHECKING 16
+#define DMX_TS_DESCRAMBLING 32
+
+/*
+ * Demux resource type identifier.
+*/
+
+/*
+ * DMX_FE_ENTRY(): Casts elements in the list of registered
+ * front-ends from the generic type struct list_head
+ * to the type * struct dmx_frontend
+ *.
+*/
+
+#define DMX_FE_ENTRY(list) list_entry(list, struct dmx_frontend, connectivity_list)
+
+struct dmx_demux {
+ u32 capabilities; /* Bitfield of capability flags */
+ struct dmx_frontend* frontend; /* Front-end connected to the demux */
+ void* priv; /* Pointer to private data of the API client */
+ int (*open) (struct dmx_demux* demux);
+ int (*close) (struct dmx_demux* demux);
+ int (*write) (struct dmx_demux* demux, const char __user *buf, size_t count);
+ int (*allocate_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed** feed,
+ dmx_ts_cb callback);
+ int (*release_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed* feed);
+ int (*allocate_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed** feed,
+ dmx_section_cb callback);
+ int (*release_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed* feed);
+ int (*add_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*remove_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ struct list_head* (*get_frontends) (struct dmx_demux* demux);
+ int (*connect_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*disconnect_frontend) (struct dmx_demux* demux);
+
+ int (*get_pes_pids) (struct dmx_demux* demux, u16 *pids);
+
+ int (*get_caps) (struct dmx_demux* demux, struct dmx_caps *caps);
+
+ int (*set_source) (struct dmx_demux* demux, const dmx_source_t *src);
+
+ int (*get_stc) (struct dmx_demux* demux, unsigned int num,
+ u64 *stc, unsigned int *base);
+};
+
+#endif /* #ifndef __DEMUX_H */
diff --git a/v4l/kernel-2.6.27/dmxdev.h b/v4l/kernel-2.6.27/dmxdev.h
new file mode 100644
index 0000000..29746e7
--- /dev/null
+++ b/v4l/kernel-2.6.27/dmxdev.h
@@ -0,0 +1,110 @@
+/*
+ * dmxdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DMXDEV_H_
+#define _DMXDEV_H_
+
+#include <linux/types.h>
+#include <linux/spinlock.h>
+#include <linux/kernel.h>
+#include <linux/timer.h>
+#include <linux/wait.h>
+#include <linux/fs.h>
+#include <linux/string.h>
+#include <linux/mutex.h>
+
+#include <linux/dvb/dmx.h>
+
+#include "dvbdev.h"
+#include "demux.h"
+#include "dvb_ringbuffer.h"
+
+enum dmxdev_type {
+ DMXDEV_TYPE_NONE,
+ DMXDEV_TYPE_SEC,
+ DMXDEV_TYPE_PES,
+};
+
+enum dmxdev_state {
+ DMXDEV_STATE_FREE,
+ DMXDEV_STATE_ALLOCATED,
+ DMXDEV_STATE_SET,
+ DMXDEV_STATE_GO,
+ DMXDEV_STATE_DONE,
+ DMXDEV_STATE_TIMEDOUT
+};
+
+struct dmxdev_filter {
+ union {
+ struct dmx_section_filter *sec;
+ } filter;
+
+ union {
+ struct dmx_ts_feed *ts;
+ struct dmx_section_feed *sec;
+ } feed;
+
+ union {
+ struct dmx_sct_filter_params sec;
+ struct dmx_pes_filter_params pes;
+ } params;
+
+ enum dmxdev_type type;
+ enum dmxdev_state state;
+ struct dmxdev *dev;
+ struct dvb_ringbuffer buffer;
+
+ struct mutex mutex;
+
+ /* only for sections */
+ struct timer_list timer;
+ int todo;
+ u8 secheader[3];
+};
+
+
+struct dmxdev {
+ struct dvb_device *dvbdev;
+ struct dvb_device *dvr_dvbdev;
+
+ struct dmxdev_filter *filter;
+ struct dmx_demux *demux;
+
+ int filternum;
+ int capabilities;
+
+ unsigned int exit:1;
+#define DMXDEV_CAP_DUPLEX 1
+ struct dmx_frontend *dvr_orig_fe;
+
+ struct dvb_ringbuffer dvr_buffer;
+#define DVR_BUFFER_SIZE (10*188*1024)
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+
+int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *);
+void dvb_dmxdev_release(struct dmxdev *dmxdev);
+
+#endif /* _DMXDEV_H_ */
diff --git a/v4l/kernel-2.6.27/dvb-pll.h b/v4l/kernel-2.6.27/dvb-pll.h
new file mode 100644
index 0000000..05239f5
--- /dev/null
+++ b/v4l/kernel-2.6.27/dvb-pll.h
@@ -0,0 +1,52 @@
+/*
+ * descriptions + helper functions for simple dvb plls.
+ */
+
+#ifndef __DVB_PLL_H__
+#define __DVB_PLL_H__
+
+#include <linux/i2c.h>
+#include "dvb_frontend.h"
+
+#define DVB_PLL_UNDEFINED 0
+#define DVB_PLL_THOMSON_DTT7579 1
+#define DVB_PLL_THOMSON_DTT759X 2
+#define DVB_PLL_LG_Z201 3
+#define DVB_PLL_UNKNOWN_1 4
+#define DVB_PLL_TUA6010XS 5
+#define DVB_PLL_ENV57H1XD5 6
+#define DVB_PLL_TUA6034 7
+#define DVB_PLL_TDA665X 8
+#define DVB_PLL_TDED4 9
+#define DVB_PLL_TDHU2 10
+#define DVB_PLL_SAMSUNG_TBMV 11
+#define DVB_PLL_PHILIPS_SD1878_TDA8261 12
+#define DVB_PLL_OPERA1 13
+#define DVB_PLL_SAMSUNG_DTOS403IH102A 14
+
+/**
+ * Attach a dvb-pll to the supplied frontend structure.
+ *
+ * @param fe Frontend to attach to.
+ * @param pll_addr i2c address of the PLL (if used).
+ * @param i2c i2c adapter to use (set to NULL if not used).
+ * @param pll_desc_id dvb_pll_desc to use.
+ * @return Frontend pointer on success, NULL on failure
+ */
+#if defined(CONFIG_DVB_PLL) || (defined(CONFIG_DVB_PLL_MODULE) && defined(MODULE))
+extern struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ unsigned int pll_desc_id);
+#else
+static inline struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ unsigned int pll_desc_id)
+{
+ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
+ return NULL;
+}
+#endif
+
+#endif
diff --git a/v4l/kernel-2.6.27/dvb-usb-ids.h b/v4l/kernel-2.6.27/dvb-usb-ids.h
new file mode 100644
index 0000000..03dfb9f
--- /dev/null
+++ b/v4l/kernel-2.6.27/dvb-usb-ids.h
@@ -0,0 +1,210 @@
+/* dvb-usb-ids.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de) see
+ * dvb-usb-init.c for copyright information.
+ *
+ * a header file containing define's for the USB device supported by the
+ * various drivers.
+ */
+#ifndef _DVB_USB_IDS_H_
+#define _DVB_USB_IDS_H_
+
+/* Vendor IDs */
+#define USB_VID_ADSTECH 0x06e1
+#define USB_VID_AFATECH 0x15a4
+#define USB_VID_ALCOR_MICRO 0x058f
+#define USB_VID_ALINK 0x05e3
+#define USB_VID_AMT 0x1c73
+#define USB_VID_ANCHOR 0x0547
+#define USB_VID_ANSONIC 0x10b9
+#define USB_VID_ANUBIS_ELECTRONIC 0x10fd
+#define USB_VID_ASUS 0x0b05
+#define USB_VID_AVERMEDIA 0x07ca
+#define USB_VID_COMPRO 0x185b
+#define USB_VID_COMPRO_UNK 0x145f
+#define USB_VID_CYPRESS 0x04b4
+#define USB_VID_DIBCOM 0x10b8
+#define USB_VID_DPOSH 0x1498
+#define USB_VID_DVICO 0x0fe9
+#define USB_VID_EMPIA 0xeb1a
+#define USB_VID_GENPIX 0x09c0
+#define USB_VID_GRANDTEC 0x5032
+#define USB_VID_HANFTEK 0x15f4
+#define USB_VID_HAUPPAUGE 0x2040
+#define USB_VID_HYPER_PALTEK 0x1025
+#define USB_VID_KWORLD 0xeb2a
+#define USB_VID_KYE 0x0458
+#define USB_VID_LEADTEK 0x0413
+#define USB_VID_LITEON 0x04ca
+#define USB_VID_MEDION 0x1660
+#define USB_VID_MIGLIA 0x18f3
+#define USB_VID_MSI 0x0db0
+#define USB_VID_OPERA1 0x695c
+#define USB_VID_PINNACLE 0x2304
+#define USB_VID_TECHNOTREND 0x0b48
+#define USB_VID_TERRATEC 0x0ccd
+#define USB_VID_VISIONPLUS 0x13d3
+#define USB_VID_TWINHAN 0x1822
+#define USB_VID_ULTIMA_ELECTRONIC 0x05d8
+#define USB_VID_UNIWILL 0x1584
+#define USB_VID_WIDEVIEW 0x14aa
+#define USB_VID_GIGABYTE 0x1044
+#define USB_VID_YUAN 0x1164
+
+
+/* Product IDs */
+#define USB_PID_ADSTECH_USB2_COLD 0xa333
+#define USB_PID_ADSTECH_USB2_WARM 0xa334
+#define USB_PID_AFATECH_AF9005 0x9020
+#define USB_VID_ALINK_DTU 0xf170
+#define USB_PID_ANSONIC_DVBT_USB 0x6000
+#define USB_PID_ANYSEE 0x861f
+#define USB_PID_AVERMEDIA_DVBT_USB_COLD 0x0001
+#define USB_PID_AVERMEDIA_DVBT_USB_WARM 0x0002
+#define USB_PID_AVERMEDIA_DVBT_USB2_COLD 0xa800
+#define USB_PID_AVERMEDIA_DVBT_USB2_WARM 0xa801
+#define USB_PID_COMPRO_DVBU2000_COLD 0xd000
+#define USB_PID_COMPRO_DVBU2000_WARM 0xd001
+#define USB_PID_COMPRO_DVBU2000_UNK_COLD 0x010c
+#define USB_PID_COMPRO_DVBU2000_UNK_WARM 0x010d
+#define USB_PID_COMPRO_VIDEOMATE_U500 0x1e78
+#define USB_PID_COMPRO_VIDEOMATE_U500_PC 0x1e80
+#define USB_PID_DIBCOM_HOOK_DEFAULT 0x0064
+#define USB_PID_DIBCOM_HOOK_DEFAULT_REENUM 0x0065
+#define USB_PID_DIBCOM_MOD3000_COLD 0x0bb8
+#define USB_PID_DIBCOM_MOD3000_WARM 0x0bb9
+#define USB_PID_DIBCOM_MOD3001_COLD 0x0bc6
+#define USB_PID_DIBCOM_MOD3001_WARM 0x0bc7
+#define USB_PID_DIBCOM_STK7700P 0x1e14
+#define USB_PID_DIBCOM_STK7700P_PC 0x1e78
+#define USB_PID_DIBCOM_STK7700D 0x1ef0
+#define USB_PID_DIBCOM_STK7700_U7000 0x7001
+#define USB_PID_DIBCOM_STK7070P 0x1ebc
+#define USB_PID_DIBCOM_STK7070PD 0x1ebe
+#define USB_PID_DIBCOM_ANCHOR_2135_COLD 0x2131
+#define USB_PID_DPOSH_M9206_COLD 0x9206
+#define USB_PID_DPOSH_M9206_WARM 0xa090
+#define USB_PID_UNIWILL_STK7700P 0x6003
+#define USB_PID_GRANDTEC_DVBT_USB_COLD 0x0fa0
+#define USB_PID_GRANDTEC_DVBT_USB_WARM 0x0fa1
+#define USB_PID_KWORLD_VSTREAM_COLD 0x17de
+#define USB_PID_KWORLD_VSTREAM_WARM 0x17df
+#define USB_PID_TERRATEC_CINERGY_T_USB_XE 0x0055
+#define USB_PID_TWINHAN_VP7041_COLD 0x3201
+#define USB_PID_TWINHAN_VP7041_WARM 0x3202
+#define USB_PID_TWINHAN_VP7020_COLD 0x3203
+#define USB_PID_TWINHAN_VP7020_WARM 0x3204
+#define USB_PID_TWINHAN_VP7045_COLD 0x3205
+#define USB_PID_TWINHAN_VP7045_WARM 0x3206
+#define USB_PID_TWINHAN_VP7021_COLD 0x3207
+#define USB_PID_TWINHAN_VP7021_WARM 0x3208
+#define USB_PID_DNTV_TINYUSB2_COLD 0x3223
+#define USB_PID_DNTV_TINYUSB2_WARM 0x3224
+#define USB_PID_ULTIMA_TVBOX_COLD 0x8105
+#define USB_PID_ULTIMA_TVBOX_WARM 0x8106
+#define USB_PID_ULTIMA_TVBOX_AN2235_COLD 0x8107
+#define USB_PID_ULTIMA_TVBOX_AN2235_WARM 0x8108
+#define USB_PID_ULTIMA_TVBOX_ANCHOR_COLD 0x2235
+#define USB_PID_ULTIMA_TVBOX_USB2_COLD 0x8109
+#define USB_PID_ULTIMA_TVBOX_USB2_WARM 0x810a
+#define USB_PID_ARTEC_T14_COLD 0x810b
+#define USB_PID_ARTEC_T14_WARM 0x810c
+#define USB_PID_ARTEC_T14BR 0x810f
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_COLD 0x8613
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_WARM 0x1002
+#define USB_PID_UNK_HYPER_PALTEK_COLD 0x005e
+#define USB_PID_UNK_HYPER_PALTEK_WARM 0x005f
+#define USB_PID_HANFTEK_UMT_010_COLD 0x0001
+#define USB_PID_HANFTEK_UMT_010_WARM 0x0015
+#define USB_PID_DTT200U_COLD 0x0201
+#define USB_PID_DTT200U_WARM 0x0301
+#define USB_PID_WT220U_ZAP250_COLD 0x0220
+#define USB_PID_WT220U_COLD 0x0222
+#define USB_PID_WT220U_WARM 0x0221
+#define USB_PID_WT220U_FC_COLD 0x0225
+#define USB_PID_WT220U_FC_WARM 0x0226
+#define USB_PID_WT220U_ZL0353_COLD 0x022a
+#define USB_PID_WT220U_ZL0353_WARM 0x022b
+#define USB_PID_WINTV_NOVA_T_USB2_COLD 0x9300
+#define USB_PID_WINTV_NOVA_T_USB2_WARM 0x9301
+#define USB_PID_HAUPPAUGE_NOVA_T_500 0x9941
+#define USB_PID_HAUPPAUGE_NOVA_T_500_2 0x9950
+#define USB_PID_HAUPPAUGE_NOVA_T_500_3 0x8400
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK 0x7050
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK_2 0x7060
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK_3 0x7070
+#define USB_PID_HAUPPAUGE_MYTV_T 0x7080
+#define USB_PID_HAUPPAUGE_NOVA_TD_STICK 0x9580
+#define USB_PID_HAUPPAUGE_NOVA_TD_STICK_52009 0x5200
+#define USB_PID_AVERMEDIA_EXPRESS 0xb568
+#define USB_PID_AVERMEDIA_VOLAR 0xa807
+#define USB_PID_AVERMEDIA_VOLAR_2 0xb808
+#define USB_PID_AVERMEDIA_VOLAR_A868R 0xa868
+#define USB_PID_AVERMEDIA_MCE_USB_M038 0x1228
+#define USB_PID_AVERMEDIA_HYBRID_ULTRA_USB_M039R 0x0039
+#define USB_PID_AVERMEDIA_HYBRID_ULTRA_USB_M039R_ATSC 0x1039
+#define USB_PID_AVERMEDIA_HYBRID_ULTRA_USB_M039R_DVBT 0x2039
+#define USB_PID_TECHNOTREND_CONNECT_S2400 0x3006
+#define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY 0x005a
+#define USB_PID_TERRATEC_CINERGY_HT_USB_XE 0x0058
+#define USB_PID_TERRATEC_CINERGY_HT_EXPRESS 0x0060
+#define USB_PID_TERRATEC_CINERGY_T_XXS 0x0078
+#define USB_PID_PINNACLE_EXPRESSCARD_320CX 0x022e
+#define USB_PID_PINNACLE_PCTV2000E 0x022c
+#define USB_PID_PINNACLE_PCTV_DVB_T_FLASH 0x0228
+#define USB_PID_PINNACLE_PCTV_DUAL_DIVERSITY_DVB_T 0x0229
+#define USB_PID_PINNACLE_PCTV72E 0x0236
+#define USB_PID_PINNACLE_PCTV73E 0x0237
+#define USB_PID_PCTV_200E 0x020e
+#define USB_PID_PCTV_400E 0x020f
+#define USB_PID_PCTV_450E 0x0222
+#define USB_PID_NEBULA_DIGITV 0x0201
+#define USB_PID_DVICO_BLUEBIRD_LGDT 0xd820
+#define USB_PID_DVICO_BLUEBIRD_LG064F_COLD 0xd500
+#define USB_PID_DVICO_BLUEBIRD_LG064F_WARM 0xd501
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_COLD 0xdb00
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_WARM 0xdb01
+#define USB_PID_DVICO_BLUEBIRD_TH7579_COLD 0xdb10
+#define USB_PID_DVICO_BLUEBIRD_TH7579_WARM 0xdb11
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_COLD 0xdb50
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_WARM 0xdb51
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_COLD 0xdb58
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_WARM 0xdb59
+#define USB_PID_DVICO_BLUEBIRD_DUAL_4 0xdb78
+#define USB_PID_DVICO_BLUEBIRD_DVB_T_NANO_2 0xdb70
+#define USB_PID_DVICO_BLUEBIRD_DVB_T_NANO_2_NFW_WARM 0xdb71
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_COLD 0xdb54
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_WARM 0xdb55
+#define USB_PID_MEDION_MD95700 0x0932
+#define USB_PID_MSI_MEGASKY580 0x5580
+#define USB_PID_MSI_MEGASKY580_55801 0x5581
+#define USB_PID_KYE_DVB_T_COLD 0x701e
+#define USB_PID_KYE_DVB_T_WARM 0x701f
+#define USB_PID_LITEON_DVB_T_COLD 0xf000
+#define USB_PID_LITEON_DVB_T_WARM 0xf001
+#define USB_PID_DIGIVOX_MINI_SL_COLD 0xe360
+#define USB_PID_DIGIVOX_MINI_SL_WARM 0xe361
+#define USB_PID_GRANDTEC_DVBT_USB2_COLD 0x0bc6
+#define USB_PID_GRANDTEC_DVBT_USB2_WARM 0x0bc7
+#define USB_PID_WINFAST_DTV_DONGLE_COLD 0x6025
+#define USB_PID_WINFAST_DTV_DONGLE_WARM 0x6026
+#define USB_PID_WINFAST_DTV_DONGLE_STK7700P 0x6f00
+#define USB_PID_WINFAST_DTV_DONGLE_STK7700P_2 0x6f01
+#define USB_PID_GENPIX_8PSK_REV_1_COLD 0x0200
+#define USB_PID_GENPIX_8PSK_REV_1_WARM 0x0201
+#define USB_PID_GENPIX_8PSK_REV_2 0x0202
+#define USB_PID_GENPIX_SKYWALKER_1 0x0203
+#define USB_PID_GENPIX_SKYWALKER_CW3K 0x0204
+#define USB_PID_SIGMATEK_DVB_110 0x6610
+#define USB_PID_MSI_DIGI_VOX_MINI_II 0x1513
+#define USB_PID_OPERA1_COLD 0x2830
+#define USB_PID_OPERA1_WARM 0x3829
+#define USB_PID_LIFEVIEW_TV_WALKER_TWIN_COLD 0x0514
+#define USB_PID_LIFEVIEW_TV_WALKER_TWIN_WARM 0x0513
+#define USB_PID_GIGABYTE_U7000 0x7001
+#define USB_PID_ASUS_U3000 0x171f
+#define USB_PID_ASUS_U3100 0x173f
+#define USB_PID_YUAN_EC372S 0x1edc
+#define USB_PID_DW2102 0x2102
+
+#endif
diff --git a/v4l/kernel-2.6.27/dvb-usb.h b/v4l/kernel-2.6.27/dvb-usb.h
new file mode 100644
index 0000000..b1de0f7
--- /dev/null
+++ b/v4l/kernel-2.6.27/dvb-usb.h
@@ -0,0 +1,400 @@
+/* dvb-usb.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * the headerfile, all dvb-usb-drivers have to include.
+ *
+ * TODO: clean-up the structures for unused fields and update the comments
+ */
+#ifndef __DVB_USB_H__
+#define __DVB_USB_H__
+
+#include <linux/input.h>
+#include <linux/usb.h>
+#include <linux/firmware.h>
+#include <linux/mutex.h>
+
+#include "dvb_frontend.h"
+#include "dvb_demux.h"
+#include "dvb_net.h"
+#include "dmxdev.h"
+
+#include "dvb-pll.h"
+
+#include "dvb-usb-ids.h"
+
+/* debug */
+#ifdef CONFIG_DVB_USB_DEBUG
+#define dprintk(var,level,args...) \
+ do { if ((var & level)) { printk(args); } } while (0)
+
+#define debug_dump(b,l,func) {\
+ int loop_; \
+ for (loop_ = 0; loop_ < l; loop_++) func("%02x ", b[loop_]); \
+ func("\n");\
+}
+#define DVB_USB_DEBUG_STATUS
+#else
+#define dprintk(args...)
+#define debug_dump(b,l,func)
+
+#define DVB_USB_DEBUG_STATUS " (debugging is not enabled)"
+
+#endif
+
+/* generic log methods - taken from usb.h */
+#ifndef DVB_USB_LOG_PREFIX
+ #define DVB_USB_LOG_PREFIX "dvb-usb (please define a log prefix)"
+#endif
+
+#undef err
+#define err(format, arg...) printk(KERN_ERR DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef info
+#define info(format, arg...) printk(KERN_INFO DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef warn
+#define warn(format, arg...) printk(KERN_WARNING DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+
+/**
+ * struct dvb_usb_device_description - name and its according USB IDs
+ * @name: real name of the box, regardless which DVB USB device class is in use
+ * @cold_ids: array of struct usb_device_id which describe the device in
+ * pre-firmware state
+ * @warm_ids: array of struct usb_device_id which describe the device in
+ * post-firmware state
+ *
+ * Each DVB USB device class can have one or more actual devices, this struct
+ * assigns a name to it.
+ */
+struct dvb_usb_device_description {
+ const char *name;
+
+#define DVB_USB_ID_MAX_NUM 15
+ struct usb_device_id *cold_ids[DVB_USB_ID_MAX_NUM];
+ struct usb_device_id *warm_ids[DVB_USB_ID_MAX_NUM];
+};
+
+/**
+ * struct dvb_usb_rc_key - a remote control key and its input-event
+ * @custom: the vendor/custom part of the key
+ * @data: the actual key part
+ * @event: the input event assigned to key identified by custom and data
+ */
+struct dvb_usb_rc_key {
+ u8 custom,data;
+ u32 event;
+};
+
+struct dvb_usb_device;
+struct dvb_usb_adapter;
+struct usb_data_stream;
+
+/**
+ * Properties of USB streaming - TODO this structure should be somewhere else
+ * describes the kind of USB transfer used for data-streaming.
+ * (BULK or ISOC)
+ */
+struct usb_data_stream_properties {
+#define USB_BULK 1
+#define USB_ISOC 2
+ int type;
+ int count;
+ int endpoint;
+
+ union {
+ struct {
+ int buffersize; /* per URB */
+ } bulk;
+ struct {
+ int framesperurb;
+ int framesize;
+ int interval;
+ } isoc;
+ } u;
+};
+
+/**
+ * struct dvb_usb_adapter_properties - properties of a dvb-usb-adapter.
+ * A DVB-USB-Adapter is basically a dvb_adapter which is present on a USB-device.
+ * @caps: capabilities of the DVB USB device.
+ * @pid_filter_count: number of PID filter position in the optional hardware
+ * PID-filter.
+ * @streaming_ctrl: called to start and stop the MPEG2-TS streaming of the
+ * device (not URB submitting/killing).
+ * @pid_filter_ctrl: called to en/disable the PID filter, if any.
+ * @pid_filter: called to set/unset a PID for filtering.
+ * @frontend_attach: called to attach the possible frontends (fill fe-field
+ * of struct dvb_usb_device).
+ * @tuner_attach: called to attach the correct tuner and to fill pll_addr,
+ * pll_desc and pll_init_buf of struct dvb_usb_device).
+ * @stream: configuration of the USB streaming
+ */
+struct dvb_usb_adapter_properties {
+#define DVB_USB_ADAP_HAS_PID_FILTER 0x01
+#define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
+#define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
+#define DVB_USB_ADAP_RECEIVES_204_BYTE_TS 0x08
+ int caps;
+ int pid_filter_count;
+
+ int (*streaming_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
+
+ int (*frontend_attach) (struct dvb_usb_adapter *);
+ int (*tuner_attach) (struct dvb_usb_adapter *);
+
+ struct usb_data_stream_properties stream;
+
+ int size_of_priv;
+};
+
+/**
+ * struct dvb_usb_device_properties - properties of a dvb-usb-device
+ * @usb_ctrl: which USB device-side controller is in use. Needed for firmware
+ * download.
+ * @firmware: name of the firmware file.
+ * @download_firmware: called to download the firmware when the usb_ctrl is
+ * DEVICE_SPECIFIC.
+ * @no_reconnect: device doesn't do a reconnect after downloading the firmware,
+ * so do the warm initialization right after it
+ *
+ * @size_of_priv: how many bytes shall be allocated for the private field
+ * of struct dvb_usb_device.
+ *
+ * @power_ctrl: called to enable/disable power of the device.
+ * @read_mac_address: called to read the MAC address of the device.
+ * @identify_state: called to determine the state (cold or warm), when it
+ * is not distinguishable by the USB IDs.
+ *
+ * @rc_key_map: a hard-wired array of struct dvb_usb_rc_key (NULL to disable
+ * remote control handling).
+ * @rc_key_map_size: number of items in @rc_key_map.
+ * @rc_query: called to query an event event.
+ * @rc_interval: time in ms between two queries.
+ *
+ * @i2c_algo: i2c_algorithm if the device has I2CoverUSB.
+ *
+ * @generic_bulk_ctrl_endpoint: most of the DVB USB devices have a generic
+ * endpoint which received control messages with bulk transfers. When this
+ * is non-zero, one can use dvb_usb_generic_rw and dvb_usb_generic_write-
+ * helper functions.
+ *
+ * @num_device_descs: number of struct dvb_usb_device_description in @devices
+ * @devices: array of struct dvb_usb_device_description compatibles with these
+ * properties.
+ */
+#define MAX_NO_OF_ADAPTER_PER_DEVICE 2
+struct dvb_usb_device_properties {
+
+#define DVB_USB_IS_AN_I2C_ADAPTER 0x01
+ int caps;
+
+#define DEVICE_SPECIFIC 0
+#define CYPRESS_AN2135 1
+#define CYPRESS_AN2235 2
+#define CYPRESS_FX2 3
+ int usb_ctrl;
+ int (*download_firmware) (struct usb_device *, const struct firmware *);
+ const char firmware[FIRMWARE_NAME_MAX];
+ int no_reconnect;
+
+ int size_of_priv;
+
+ int num_adapters;
+ struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ int (*power_ctrl) (struct dvb_usb_device *, int);
+ int (*read_mac_address) (struct dvb_usb_device *, u8 []);
+ int (*identify_state) (struct usb_device *, struct dvb_usb_device_properties *,
+ struct dvb_usb_device_description **, int *);
+
+/* remote control properties */
+#define REMOTE_NO_KEY_PRESSED 0x00
+#define REMOTE_KEY_PRESSED 0x01
+#define REMOTE_KEY_REPEAT 0x02
+ struct dvb_usb_rc_key *rc_key_map;
+ int rc_key_map_size;
+ int (*rc_query) (struct dvb_usb_device *, u32 *, int *);
+ int rc_interval;
+
+ struct i2c_algorithm *i2c_algo;
+
+ int generic_bulk_ctrl_endpoint;
+
+ int num_device_descs;
+ struct dvb_usb_device_description devices[9];
+};
+
+/**
+ * struct usb_data_stream - generic object of an USB stream
+ * @buf_num: number of buffer allocated.
+ * @buf_size: size of each buffer in buf_list.
+ * @buf_list: array containing all allocate buffers for streaming.
+ * @dma_addr: list of dma_addr_t for each buffer in buf_list.
+ *
+ * @urbs_initialized: number of URBs initialized.
+ * @urbs_submitted: number of URBs submitted.
+ */
+#define MAX_NO_URBS_FOR_DATA_STREAM 10
+struct usb_data_stream {
+ struct usb_device *udev;
+ struct usb_data_stream_properties props;
+
+#define USB_STATE_INIT 0x00
+#define USB_STATE_URB_BUF 0x01
+ int state;
+
+ void (*complete) (struct usb_data_stream *, u8 *, size_t);
+
+ struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ int buf_num;
+ unsigned long buf_size;
+ u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
+
+ int urbs_initialized;
+ int urbs_submitted;
+
+ void *user_priv;
+};
+
+/**
+ * struct dvb_usb_adapter - a DVB adapter on a USB device
+ * @id: index of this adapter (starting with 0).
+ *
+ * @feedcount: number of reqested feeds (used for streaming-activation)
+ * @pid_filtering: is hardware pid_filtering used or not.
+ *
+ * @pll_addr: I2C address of the tuner for programming
+ * @pll_init: array containing the initialization buffer
+ * @pll_desc: pointer to the appropriate struct dvb_pll_desc
+ * @tuner_pass_ctrl: called to (de)activate tuner passthru of the demod or the board
+ *
+ * @dvb_adap: device's dvb_adapter.
+ * @dmxdev: device's dmxdev.
+ * @demux: device's software demuxer.
+ * @dvb_net: device's dvb_net interfaces.
+ * @dvb_frontend: device's frontend.
+ * @max_feed_count: how many feeds can be handled simultaneously by this
+ * device
+ *
+ * @fe_init: rerouted frontend-init (wakeup) function.
+ * @fe_sleep: rerouted frontend-sleep function.
+ *
+ * @stream: the usb data stream.
+ */
+struct dvb_usb_adapter {
+ struct dvb_usb_device *dev;
+ struct dvb_usb_adapter_properties props;
+
+#define DVB_USB_ADAP_STATE_INIT 0x000
+#define DVB_USB_ADAP_STATE_DVB 0x001
+ int state;
+
+ u8 id;
+
+ int feedcount;
+ int pid_filtering;
+
+ /* dvb */
+ struct dvb_adapter dvb_adap;
+ struct dmxdev dmxdev;
+ struct dvb_demux demux;
+ struct dvb_net dvb_net;
+ struct dvb_frontend *fe;
+ int max_feed_count;
+
+ int (*fe_init) (struct dvb_frontend *);
+ int (*fe_sleep) (struct dvb_frontend *);
+
+ struct usb_data_stream stream;
+
+ void *priv;
+};
+
+/**
+ * struct dvb_usb_device - object of a DVB USB device
+ * @props: copy of the struct dvb_usb_properties this device belongs to.
+ * @desc: pointer to the device's struct dvb_usb_device_description.
+ * @state: initialization and runtime state of the device.
+ *
+ * @powered: indicated whether the device is power or not.
+ * Powered is in/decremented for each call to modify the state.
+ * @udev: pointer to the device's struct usb_device.
+ *
+ * @usb_mutex: semaphore of USB control messages (reading needs two messages)
+ * @i2c_mutex: semaphore for i2c-transfers
+ *
+ * @i2c_adap: device's i2c_adapter if it uses I2CoverUSB
+ *
+ * @rc_input_dev: input device for the remote control.
+ * @rc_query_work: struct work_struct frequent rc queries
+ * @last_event: last triggered event
+ * @last_state: last state (no, pressed, repeat)
+ * @owner: owner of the dvb_adapter
+ * @priv: private data of the actual driver (allocate by dvb-usb, size defined
+ * in size_of_priv of dvb_usb_properties).
+ */
+struct dvb_usb_device {
+ struct dvb_usb_device_properties props;
+ struct dvb_usb_device_description *desc;
+
+ struct usb_device *udev;
+
+#define DVB_USB_STATE_INIT 0x000
+#define DVB_USB_STATE_I2C 0x001
+#define DVB_USB_STATE_DVB 0x002
+#define DVB_USB_STATE_REMOTE 0x004
+ int state;
+
+ int powered;
+
+ /* locking */
+ struct mutex usb_mutex;
+
+ /* i2c */
+ struct mutex i2c_mutex;
+ struct i2c_adapter i2c_adap;
+
+ int num_adapters_initialized;
+ struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ /* remote control */
+ struct input_dev *rc_input_dev;
+ char rc_phys[64];
+ struct delayed_work rc_query_work;
+ u32 last_event;
+ int last_state;
+
+ struct module *owner;
+
+ void *priv;
+};
+
+extern int dvb_usb_device_init(struct usb_interface *,
+ struct dvb_usb_device_properties *,
+ struct module *, struct dvb_usb_device **,
+ short *adapter_nums);
+extern void dvb_usb_device_exit(struct usb_interface *);
+
+/* the generic read/write method for device control */
+extern int dvb_usb_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16,int);
+extern int dvb_usb_generic_write(struct dvb_usb_device *, u8 *, u16);
+
+/* commonly used remote control parsing */
+extern int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *, u8[], u32 *, int *);
+
+/* commonly used firmware download types and function */
+struct hexline {
+ u8 len;
+ u32 addr;
+ u8 type;
+ u8 data[255];
+ u8 chk;
+};
+extern int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type);
+extern int dvb_usb_get_hexline(const struct firmware *fw, struct hexline *hx, int *pos);
+
+
+#endif
diff --git a/v4l/kernel-2.6.27/dvb_demux.h b/v4l/kernel-2.6.27/dvb_demux.h
new file mode 100644
index 0000000..2c5f915
--- /dev/null
+++ b/v4l/kernel-2.6.27/dvb_demux.h
@@ -0,0 +1,140 @@
+/*
+ * dvb_demux.h: DVB kernel demux API
+ *
+ * Copyright (C) 2000-2001 Marcus Metzler & Ralph Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_DEMUX_H_
+#define _DVB_DEMUX_H_
+
+#include <linux/time.h>
+#include <linux/timer.h>
+#include <linux/spinlock.h>
+#include <linux/mutex.h>
+
+#include "demux.h"
+
+#define DMX_TYPE_TS 0
+#define DMX_TYPE_SEC 1
+#define DMX_TYPE_PES 2
+
+#define DMX_STATE_FREE 0
+#define DMX_STATE_ALLOCATED 1
+#define DMX_STATE_SET 2
+#define DMX_STATE_READY 3
+#define DMX_STATE_GO 4
+
+#define DVB_DEMUX_MASK_MAX 18
+
+struct dvb_demux_filter {
+ struct dmx_section_filter filter;
+ u8 maskandmode[DMX_MAX_FILTER_SIZE];
+ u8 maskandnotmode[DMX_MAX_FILTER_SIZE];
+ int doneq;
+
+ struct dvb_demux_filter *next;
+ struct dvb_demux_feed *feed;
+ int index;
+ int state;
+ int type;
+
+ u16 hw_handle;
+ struct timer_list timer;
+};
+
+#define DMX_FEED_ENTRY(pos) list_entry(pos, struct dvb_demux_feed, list_head)
+
+struct dvb_demux_feed {
+ union {
+ struct dmx_ts_feed ts;
+ struct dmx_section_feed sec;
+ } feed;
+
+ union {
+ dmx_ts_cb ts;
+ dmx_section_cb sec;
+ } cb;
+
+ struct dvb_demux *demux;
+ void *priv;
+ int type;
+ int state;
+ u16 pid;
+ u8 *buffer;
+ int buffer_size;
+
+ struct timespec timeout;
+ struct dvb_demux_filter *filter;
+
+ int ts_type;
+ enum dmx_ts_pes pes_type;
+
+ int cc;
+ int pusi_seen; /* prevents feeding of garbage from previous section */
+
+ u16 peslen;
+
+ struct list_head list_head;
+ unsigned int index; /* a unique index for each feed (can be used as hardware pid filter index) */
+};
+
+struct dvb_demux {
+ struct dmx_demux dmx;
+ void *priv;
+ int filternum;
+ int feednum;
+ int (*start_feed)(struct dvb_demux_feed *feed);
+ int (*stop_feed)(struct dvb_demux_feed *feed);
+ int (*write_to_decoder)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ u32 (*check_crc32)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ void (*memcopy)(struct dvb_demux_feed *feed, u8 *dst,
+ const u8 *src, size_t len);
+
+ int users;
+#define MAX_DVB_DEMUX_USERS 10
+ struct dvb_demux_filter *filter;
+ struct dvb_demux_feed *feed;
+
+ struct list_head frontend_list;
+
+ struct dvb_demux_feed *pesfilter[DMX_TS_PES_OTHER];
+ u16 pids[DMX_TS_PES_OTHER];
+ int playing;
+ int recording;
+
+#define DMX_MAX_PID 0x2000
+ struct list_head feed_list;
+ u8 tsbuf[204];
+ int tsbufp;
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+int dvb_dmx_init(struct dvb_demux *dvbdemux);
+void dvb_dmx_release(struct dvb_demux *dvbdemux);
+void dvb_dmx_swfilter_packets(struct dvb_demux *dvbdmx, const u8 *buf,
+ size_t count);
+void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count);
+void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf,
+ size_t count);
+
+#endif /* _DVB_DEMUX_H_ */
diff --git a/v4l/kernel-2.6.27/dvb_frontend.h b/v4l/kernel-2.6.27/dvb_frontend.h
new file mode 100644
index 0000000..aa4133f
--- /dev/null
+++ b/v4l/kernel-2.6.27/dvb_frontend.h
@@ -0,0 +1,207 @@
+/*
+ * dvb_frontend.h
+ *
+ * Copyright (C) 2001 convergence integrated media GmbH
+ * Copyright (C) 2004 convergence GmbH
+ *
+ * Written by Ralph Metzler
+ * Overhauled by Holger Waechtler
+ * Kernel I2C stuff by Michael Hunold <hunold@convergence.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_FRONTEND_H_
+#define _DVB_FRONTEND_H_
+
+#include <linux/types.h>
+#include <linux/sched.h>
+#include <linux/ioctl.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/delay.h>
+#include <linux/mutex.h>
+
+#include <linux/dvb/frontend.h>
+
+#include "dvbdev.h"
+
+struct dvb_frontend_tune_settings {
+ int min_delay_ms;
+ int step_size;
+ int max_drift;
+ struct dvb_frontend_parameters parameters;
+};
+
+struct dvb_frontend;
+
+struct dvb_tuner_info {
+ char name[128];
+
+ u32 frequency_min;
+ u32 frequency_max;
+ u32 frequency_step;
+
+ u32 bandwidth_min;
+ u32 bandwidth_max;
+ u32 bandwidth_step;
+};
+
+struct analog_parameters {
+ unsigned int frequency;
+ unsigned int mode;
+ unsigned int audmode;
+ u64 std;
+};
+
+struct dvb_tuner_ops {
+
+ struct dvb_tuner_info info;
+
+ int (*release)(struct dvb_frontend *fe);
+ int (*init)(struct dvb_frontend *fe);
+ int (*sleep)(struct dvb_frontend *fe);
+
+ /** This is for simple PLLs - set all parameters in one go. */
+ int (*set_params)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
+ int (*set_analog_params)(struct dvb_frontend *fe, struct analog_parameters *p);
+
+ /** This is support for demods like the mt352 - fills out the supplied buffer with what to write. */
+ int (*calc_regs)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p, u8 *buf, int buf_len);
+
+ /** This is to allow setting tuner-specific configs */
+ int (*set_config)(struct dvb_frontend *fe, void *priv_cfg);
+
+ int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency);
+ int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth);
+
+#define TUNER_STATUS_LOCKED 1
+#define TUNER_STATUS_STEREO 2
+ int (*get_status)(struct dvb_frontend *fe, u32 *status);
+ int (*get_rf_strength)(struct dvb_frontend *fe, u16 *strength);
+
+ /** These are provided seperately from set_params in order to facilitate silicon
+ * tuners which require sophisticated tuning loops, controlling each parameter seperately. */
+ int (*set_frequency)(struct dvb_frontend *fe, u32 frequency);
+ int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
+};
+
+struct analog_demod_info {
+ char *name;
+};
+
+struct analog_demod_ops {
+
+ struct analog_demod_info info;
+
+ void (*set_params)(struct dvb_frontend *fe,
+ struct analog_parameters *params);
+ int (*has_signal)(struct dvb_frontend *fe);
+ int (*is_stereo)(struct dvb_frontend *fe);
+ int (*get_afc)(struct dvb_frontend *fe);
+ void (*tuner_status)(struct dvb_frontend *fe);
+ void (*standby)(struct dvb_frontend *fe);
+ void (*release)(struct dvb_frontend *fe);
+ int (*i2c_gate_ctrl)(struct dvb_frontend *fe, int enable);
+
+ /** This is to allow setting tuner-specific configuration */
+ int (*set_config)(struct dvb_frontend *fe, void *priv_cfg);
+};
+
+struct dvb_frontend_ops {
+
+ struct dvb_frontend_info info;
+
+ void (*release)(struct dvb_frontend* fe);
+ void (*release_sec)(struct dvb_frontend* fe);
+
+ int (*init)(struct dvb_frontend* fe);
+ int (*sleep)(struct dvb_frontend* fe);
+
+ int (*write)(struct dvb_frontend* fe, u8* buf, int len);
+
+ /* if this is set, it overrides the default swzigzag */
+ int (*tune)(struct dvb_frontend* fe,
+ struct dvb_frontend_parameters* params,
+ unsigned int mode_flags,
+ unsigned int *delay,
+ fe_status_t *status);
+ /* get frontend tuning algorithm from the module */
+ int (*get_frontend_algo)(struct dvb_frontend *fe);
+
+ /* these two are only used for the swzigzag code */
+ int (*set_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+ int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings);
+
+ int (*get_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+
+ int (*read_status)(struct dvb_frontend* fe, fe_status_t* status);
+ int (*read_ber)(struct dvb_frontend* fe, u32* ber);
+ int (*read_signal_strength)(struct dvb_frontend* fe, u16* strength);
+ int (*read_snr)(struct dvb_frontend* fe, u16* snr);
+ int (*read_ucblocks)(struct dvb_frontend* fe, u32* ucblocks);
+
+ int (*diseqc_reset_overload)(struct dvb_frontend* fe);
+ int (*diseqc_send_master_cmd)(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd);
+ int (*diseqc_recv_slave_reply)(struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply);
+ int (*diseqc_send_burst)(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd);
+ int (*set_tone)(struct dvb_frontend* fe, fe_sec_tone_mode_t tone);
+ int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
+ int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg);
+ int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
+ int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
+ int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);
+
+ struct dvb_tuner_ops tuner_ops;
+ struct analog_demod_ops analog_ops;
+};
+
+#define MAX_EVENT 8
+
+struct dvb_fe_events {
+ struct dvb_frontend_event events[MAX_EVENT];
+ int eventw;
+ int eventr;
+ int overflow;
+ wait_queue_head_t wait_queue;
+ struct mutex mtx;
+};
+
+struct dvb_frontend {
+ struct dvb_frontend_ops ops;
+ struct dvb_adapter *dvb;
+ void *demodulator_priv;
+ void *tuner_priv;
+ void *frontend_priv;
+ void *sec_priv;
+ void *analog_demod_priv;
+};
+
+extern int dvb_register_frontend(struct dvb_adapter *dvb,
+ struct dvb_frontend *fe);
+
+extern int dvb_unregister_frontend(struct dvb_frontend *fe);
+
+extern void dvb_frontend_detach(struct dvb_frontend *fe);
+
+extern void dvb_frontend_reinitialise(struct dvb_frontend *fe);
+
+extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec);
+extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime);
+
+#endif
diff --git a/v4l/kernel-2.6.27/dvb_net.h b/v4l/kernel-2.6.27/dvb_net.h
new file mode 100644
index 0000000..3a3126c
--- /dev/null
+++ b/v4l/kernel-2.6.27/dvb_net.h
@@ -0,0 +1,47 @@
+/*
+ * dvb_net.h
+ *
+ * Copyright (C) 2001 Ralph Metzler for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_NET_H_
+#define _DVB_NET_H_
+
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/inetdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/skbuff.h>
+
+#include "dvbdev.h"
+
+#define DVB_NET_DEVICES_MAX 10
+
+struct dvb_net {
+ struct dvb_device *dvbdev;
+ struct net_device *device[DVB_NET_DEVICES_MAX];
+ int state[DVB_NET_DEVICES_MAX];
+ unsigned int exit:1;
+ struct dmx_demux *demux;
+};
+
+
+void dvb_net_release(struct dvb_net *);
+int dvb_net_init(struct dvb_adapter *, struct dvb_net *, struct dmx_demux *);
+
+#endif
diff --git a/v4l/kernel-2.6.27/dvb_ringbuffer.h b/v4l/kernel-2.6.27/dvb_ringbuffer.h
new file mode 100644
index 0000000..41f04da
--- /dev/null
+++ b/v4l/kernel-2.6.27/dvb_ringbuffer.h
@@ -0,0 +1,186 @@
+/*
+ *
+ * dvb_ringbuffer.h: ring buffer implementation for the dvb driver
+ *
+ * Copyright (C) 2003 Oliver Endriss
+ * Copyright (C) 2004 Andrew de Quincey
+ *
+ * based on code originally found in av7110.c & dvb_ci.c:
+ * Copyright (C) 1999-2003 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _DVB_RINGBUFFER_H_
+#define _DVB_RINGBUFFER_H_
+
+#include <linux/spinlock.h>
+#include <linux/wait.h>
+
+struct dvb_ringbuffer {
+ u8 *data;
+ ssize_t size;
+ ssize_t pread;
+ ssize_t pwrite;
+ int error;
+
+ wait_queue_head_t queue;
+ spinlock_t lock;
+};
+
+#define DVB_RINGBUFFER_PKTHDRSIZE 3
+
+
+/*
+** Notes:
+** ------
+** (1) For performance reasons read and write routines don't check buffer sizes
+** and/or number of bytes free/available. This has to be done before these
+** routines are called. For example:
+**
+** *** write <buflen> bytes ***
+** free = dvb_ringbuffer_free(rbuf);
+** if (free >= buflen)
+** count = dvb_ringbuffer_write(rbuf, buffer, buflen);
+** else
+** ...
+**
+** *** read min. 1000, max. <bufsize> bytes ***
+** avail = dvb_ringbuffer_avail(rbuf);
+** if (avail >= 1000)
+** count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize));
+** else
+** ...
+**
+** (2) If there is exactly one reader and one writer, there is no need
+** to lock read or write operations.
+** Two or more readers must be locked against each other.
+** Flushing the buffer counts as a read operation.
+** Resetting the buffer counts as a read and write operation.
+** Two or more writers must be locked against each other.
+*/
+
+/* initialize ring buffer, lock and queue */
+extern void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data, size_t len);
+
+/* test whether buffer is empty */
+extern int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf);
+
+/* return the number of free bytes in the buffer */
+extern ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf);
+
+/* return the number of bytes waiting in the buffer */
+extern ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf);
+
+
+/*
+** Reset the read and write pointers to zero and flush the buffer
+** This counts as a read and write operation
+*/
+extern void dvb_ringbuffer_reset(struct dvb_ringbuffer *rbuf);
+
+
+/* read routines & macros */
+/* ---------------------- */
+/* flush buffer */
+extern void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf);
+
+/* flush buffer protected by spinlock and wake-up waiting task(s) */
+extern void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf);
+
+/* peek at byte <offs> in the buffer */
+#define DVB_RINGBUFFER_PEEK(rbuf,offs) \
+ (rbuf)->data[((rbuf)->pread+(offs))%(rbuf)->size]
+
+/* advance read ptr by <num> bytes */
+#define DVB_RINGBUFFER_SKIP(rbuf,num) \
+ (rbuf)->pread=((rbuf)->pread+(num))%(rbuf)->size
+
+/*
+** read <len> bytes from ring buffer into <buf>
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_read_user(struct dvb_ringbuffer *rbuf,
+ u8 __user *buf, size_t len);
+extern void dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf,
+ u8 *buf, size_t len);
+
+
+/* write routines & macros */
+/* ----------------------- */
+/* write single byte to ring buffer */
+#define DVB_RINGBUFFER_WRITE_BYTE(rbuf,byte) \
+ { (rbuf)->data[(rbuf)->pwrite]=(byte); \
+ (rbuf)->pwrite=((rbuf)->pwrite+1)%(rbuf)->size; }
+/*
+** write <len> bytes to ring buffer
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf,
+ size_t len);
+
+
+/**
+ * Write a packet into the ringbuffer.
+ *
+ * <rbuf> Ringbuffer to write to.
+ * <buf> Buffer to write.
+ * <len> Length of buffer (currently limited to 65535 bytes max).
+ * returns Number of bytes written, or -EFAULT, -ENOMEM, -EVINAL.
+ */
+extern ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8* buf,
+ size_t len);
+
+/**
+ * Read from a packet in the ringbuffer. Note: unlike dvb_ringbuffer_read(), this
+ * does NOT update the read pointer in the ringbuffer. You must use
+ * dvb_ringbuffer_pkt_dispose() to mark a packet as no longer required.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ * <offset> Offset into packet to read from.
+ * <buf> Destination buffer for data.
+ * <len> Size of destination buffer.
+ * <usermem> Set to 1 if <buf> is in userspace.
+ * returns Number of bytes read, or -EFAULT.
+ */
+extern ssize_t dvb_ringbuffer_pkt_read_user(struct dvb_ringbuffer *rbuf, size_t idx,
+ int offset, u8 __user *buf, size_t len);
+extern ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx,
+ int offset, u8 *buf, size_t len);
+
+/**
+ * Dispose of a packet in the ring buffer.
+ *
+ * <rbuf> Ring buffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ */
+extern void dvb_ringbuffer_pkt_dispose(struct dvb_ringbuffer *rbuf, size_t idx);
+
+/**
+ * Get the index of the next packet in a ringbuffer.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Previous packet index, or -1 to return the first packet index.
+ * <pktlen> On success, will be updated to contain the length of the packet in bytes.
+ * returns Packet index (if >=0), or -1 if no packets available.
+ */
+extern ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf, size_t idx, size_t* pktlen);
+
+
+#endif /* _DVB_RINGBUFFER_H_ */
diff --git a/v4l/kernel-2.6.27/dvbdev.h b/v4l/kernel-2.6.27/dvbdev.h
new file mode 100644
index 0000000..89d12dc
--- /dev/null
+++ b/v4l/kernel-2.6.27/dvbdev.h
@@ -0,0 +1,139 @@
+/*
+ * dvbdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBDEV_H_
+#define _DVBDEV_H_
+
+#include <linux/types.h>
+#include <linux/poll.h>
+#include <linux/fs.h>
+#include <linux/list.h>
+#include <linux/smp_lock.h>
+
+#define DVB_MAJOR 212
+
+#define DVB_MAX_ADAPTERS 8
+
+#define DVB_UNSET (-1)
+
+#define DVB_DEVICE_VIDEO 0
+#define DVB_DEVICE_AUDIO 1
+#define DVB_DEVICE_SEC 2
+#define DVB_DEVICE_FRONTEND 3
+#define DVB_DEVICE_DEMUX 4
+#define DVB_DEVICE_DVR 5
+#define DVB_DEVICE_CA 6
+#define DVB_DEVICE_NET 7
+#define DVB_DEVICE_OSD 8
+
+#define DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr) \
+ static short adapter_nr[] = \
+ {[0 ... (DVB_MAX_ADAPTERS - 1)] = DVB_UNSET }; \
+ module_param_array(adapter_nr, short, NULL, 0444); \
+ MODULE_PARM_DESC(adapter_nr, "DVB adapter numbers")
+
+struct dvb_adapter {
+ int num;
+ struct list_head list_head;
+ struct list_head device_list;
+ const char *name;
+ u8 proposed_mac [6];
+ void* priv;
+
+ struct device *device;
+
+ struct module *module;
+};
+
+
+struct dvb_device {
+ struct list_head list_head;
+ struct file_operations *fops;
+ struct dvb_adapter *adapter;
+ int type;
+ u32 id;
+
+ /* in theory, 'users' can vanish now,
+ but I don't want to change too much now... */
+ int readers;
+ int writers;
+ int users;
+
+ wait_queue_head_t wait_queue;
+ /* don't really need those !? -- FIXME: use video_usercopy */
+ int (*kernel_ioctl)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg);
+
+ void *priv;
+};
+
+
+extern int dvb_register_adapter(struct dvb_adapter *adap, const char *name,
+ struct module *module, struct device *device,
+ short *adapter_nums);
+extern int dvb_unregister_adapter (struct dvb_adapter *adap);
+
+extern int dvb_register_device (struct dvb_adapter *adap,
+ struct dvb_device **pdvbdev,
+ const struct dvb_device *template,
+ void *priv,
+ int type);
+
+extern void dvb_unregister_device (struct dvb_device *dvbdev);
+
+extern int dvb_generic_open (struct inode *inode, struct file *file);
+extern int dvb_generic_release (struct inode *inode, struct file *file);
+extern int dvb_generic_ioctl (struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg);
+
+/* we don't mess with video_usercopy() any more,
+we simply define out own dvb_usercopy(), which will hopefully become
+generic_usercopy() someday... */
+
+extern int dvb_usercopy(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg,
+ int (*func)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg));
+
+/** generic DVB attach function. */
+#ifdef CONFIG_MEDIA_ATTACH
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ void *__r = NULL; \
+ typeof(&FUNCTION) __a = symbol_request(FUNCTION); \
+ if (__a) { \
+ __r = (void *) __a(ARGS); \
+ if (__r == NULL) \
+ symbol_put(FUNCTION); \
+ } else { \
+ printk(KERN_ERR "DVB: Unable to find symbol "#FUNCTION"()\n"); \
+ } \
+ __r; \
+})
+
+#else
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ FUNCTION(ARGS); \
+})
+
+#endif
+
+#endif /* #ifndef _DVBDEV_H_ */
diff --git a/v4l/kernel-2.6.28/demux.h b/v4l/kernel-2.6.28/demux.h
new file mode 100644
index 0000000..eb91fd8
--- /dev/null
+++ b/v4l/kernel-2.6.28/demux.h
@@ -0,0 +1,280 @@
+/*
+ * demux.h
+ *
+ * Copyright (c) 2002 Convergence GmbH
+ *
+ * based on code:
+ * Copyright (c) 2000 Nokia Research Center
+ * Tampere, FINLAND
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __DEMUX_H
+#define __DEMUX_H
+
+#include <linux/types.h>
+#include <linux/errno.h>
+#include <linux/list.h>
+#include <linux/time.h>
+#include <linux/dvb/dmx.h>
+
+/*--------------------------------------------------------------------------*/
+/* Common definitions */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * DMX_MAX_FILTER_SIZE: Maximum length (in bytes) of a section/PES filter.
+ */
+
+#ifndef DMX_MAX_FILTER_SIZE
+#define DMX_MAX_FILTER_SIZE 18
+#endif
+
+/*
+ * DMX_MAX_SECFEED_SIZE: Maximum length (in bytes) of a private section feed filter.
+ */
+
+#ifndef DMX_MAX_SECTION_SIZE
+#define DMX_MAX_SECTION_SIZE 4096
+#endif
+#ifndef DMX_MAX_SECFEED_SIZE
+#define DMX_MAX_SECFEED_SIZE (DMX_MAX_SECTION_SIZE + 188)
+#endif
+
+
+/*
+ * enum dmx_success: Success codes for the Demux Callback API.
+ */
+
+enum dmx_success {
+ DMX_OK = 0, /* Received Ok */
+ DMX_LENGTH_ERROR, /* Incorrect length */
+ DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */
+ DMX_CRC_ERROR, /* Incorrect CRC */
+ DMX_FRAME_ERROR, /* Frame alignment error */
+ DMX_FIFO_ERROR, /* Receiver FIFO overrun */
+ DMX_MISSED_ERROR /* Receiver missed packet */
+} ;
+
+/*--------------------------------------------------------------------------*/
+/* TS packet reception */
+/*--------------------------------------------------------------------------*/
+
+/* TS filter type for set() */
+
+#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */
+#define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS
+ payload (<=184 bytes per packet) to callback */
+#define TS_DECODER 4 /* send stream to built-in decoder (if present) */
+#define TS_DEMUX 8 /* in case TS_PACKET is set, send the TS to
+ the demux device, not to the dvr device */
+
+/* PES type for filters which write to built-in decoder */
+/* these should be kept identical to the types in dmx.h */
+
+enum dmx_ts_pes
+{ /* also send packets to decoder (if it exists) */
+ DMX_TS_PES_AUDIO0,
+ DMX_TS_PES_VIDEO0,
+ DMX_TS_PES_TELETEXT0,
+ DMX_TS_PES_SUBTITLE0,
+ DMX_TS_PES_PCR0,
+
+ DMX_TS_PES_AUDIO1,
+ DMX_TS_PES_VIDEO1,
+ DMX_TS_PES_TELETEXT1,
+ DMX_TS_PES_SUBTITLE1,
+ DMX_TS_PES_PCR1,
+
+ DMX_TS_PES_AUDIO2,
+ DMX_TS_PES_VIDEO2,
+ DMX_TS_PES_TELETEXT2,
+ DMX_TS_PES_SUBTITLE2,
+ DMX_TS_PES_PCR2,
+
+ DMX_TS_PES_AUDIO3,
+ DMX_TS_PES_VIDEO3,
+ DMX_TS_PES_TELETEXT3,
+ DMX_TS_PES_SUBTITLE3,
+ DMX_TS_PES_PCR3,
+
+ DMX_TS_PES_OTHER
+};
+
+#define DMX_TS_PES_AUDIO DMX_TS_PES_AUDIO0
+#define DMX_TS_PES_VIDEO DMX_TS_PES_VIDEO0
+#define DMX_TS_PES_TELETEXT DMX_TS_PES_TELETEXT0
+#define DMX_TS_PES_SUBTITLE DMX_TS_PES_SUBTITLE0
+#define DMX_TS_PES_PCR DMX_TS_PES_PCR0
+
+
+struct dmx_ts_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux *parent; /* Back-pointer */
+ void *priv; /* Pointer to private data of the API client */
+ int (*set) (struct dmx_ts_feed *feed,
+ u16 pid,
+ int type,
+ enum dmx_ts_pes pes_type,
+ size_t circular_buffer_size,
+ struct timespec timeout);
+ int (*start_filtering) (struct dmx_ts_feed* feed);
+ int (*stop_filtering) (struct dmx_ts_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Section reception */
+/*--------------------------------------------------------------------------*/
+
+struct dmx_section_filter {
+ u8 filter_value [DMX_MAX_FILTER_SIZE];
+ u8 filter_mask [DMX_MAX_FILTER_SIZE];
+ u8 filter_mode [DMX_MAX_FILTER_SIZE];
+ struct dmx_section_feed* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+};
+
+struct dmx_section_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+
+ int check_crc;
+ u32 crc_val;
+
+ u8 *secbuf;
+ u8 secbuf_base[DMX_MAX_SECFEED_SIZE];
+ u16 secbufp, seclen, tsfeedp;
+
+ int (*set) (struct dmx_section_feed* feed,
+ u16 pid,
+ size_t circular_buffer_size,
+ int check_crc);
+ int (*allocate_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter** filter);
+ int (*release_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter* filter);
+ int (*start_filtering) (struct dmx_section_feed* feed);
+ int (*stop_filtering) (struct dmx_section_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Callback functions */
+/*--------------------------------------------------------------------------*/
+
+typedef int (*dmx_ts_cb) ( const u8 * buffer1,
+ size_t buffer1_length,
+ const u8 * buffer2,
+ size_t buffer2_length,
+ struct dmx_ts_feed* source,
+ enum dmx_success success);
+
+typedef int (*dmx_section_cb) ( const u8 * buffer1,
+ size_t buffer1_len,
+ const u8 * buffer2,
+ size_t buffer2_len,
+ struct dmx_section_filter * source,
+ enum dmx_success success);
+
+/*--------------------------------------------------------------------------*/
+/* DVB Front-End */
+/*--------------------------------------------------------------------------*/
+
+enum dmx_frontend_source {
+ DMX_MEMORY_FE,
+ DMX_FRONTEND_0,
+ DMX_FRONTEND_1,
+ DMX_FRONTEND_2,
+ DMX_FRONTEND_3,
+ DMX_STREAM_0, /* external stream input, e.g. LVDS */
+ DMX_STREAM_1,
+ DMX_STREAM_2,
+ DMX_STREAM_3
+};
+
+struct dmx_frontend {
+ struct list_head connectivity_list; /* List of front-ends that can
+ be connected to a particular
+ demux */
+ enum dmx_frontend_source source;
+};
+
+/*--------------------------------------------------------------------------*/
+/* MPEG-2 TS Demux */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * Flags OR'ed in the capabilities field of struct dmx_demux.
+ */
+
+#define DMX_TS_FILTERING 1
+#define DMX_PES_FILTERING 2
+#define DMX_SECTION_FILTERING 4
+#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */
+#define DMX_CRC_CHECKING 16
+#define DMX_TS_DESCRAMBLING 32
+
+/*
+ * Demux resource type identifier.
+*/
+
+/*
+ * DMX_FE_ENTRY(): Casts elements in the list of registered
+ * front-ends from the generic type struct list_head
+ * to the type * struct dmx_frontend
+ *.
+*/
+
+#define DMX_FE_ENTRY(list) list_entry(list, struct dmx_frontend, connectivity_list)
+
+struct dmx_demux {
+ u32 capabilities; /* Bitfield of capability flags */
+ struct dmx_frontend* frontend; /* Front-end connected to the demux */
+ void* priv; /* Pointer to private data of the API client */
+ int (*open) (struct dmx_demux* demux);
+ int (*close) (struct dmx_demux* demux);
+ int (*write) (struct dmx_demux* demux, const char __user *buf, size_t count);
+ int (*allocate_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed** feed,
+ dmx_ts_cb callback);
+ int (*release_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed* feed);
+ int (*allocate_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed** feed,
+ dmx_section_cb callback);
+ int (*release_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed* feed);
+ int (*add_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*remove_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ struct list_head* (*get_frontends) (struct dmx_demux* demux);
+ int (*connect_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*disconnect_frontend) (struct dmx_demux* demux);
+
+ int (*get_pes_pids) (struct dmx_demux* demux, u16 *pids);
+
+ int (*get_caps) (struct dmx_demux* demux, struct dmx_caps *caps);
+
+ int (*set_source) (struct dmx_demux* demux, const dmx_source_t *src);
+
+ int (*get_stc) (struct dmx_demux* demux, unsigned int num,
+ u64 *stc, unsigned int *base);
+};
+
+#endif /* #ifndef __DEMUX_H */
diff --git a/v4l/kernel-2.6.28/dmxdev.h b/v4l/kernel-2.6.28/dmxdev.h
new file mode 100644
index 0000000..29746e7
--- /dev/null
+++ b/v4l/kernel-2.6.28/dmxdev.h
@@ -0,0 +1,110 @@
+/*
+ * dmxdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DMXDEV_H_
+#define _DMXDEV_H_
+
+#include <linux/types.h>
+#include <linux/spinlock.h>
+#include <linux/kernel.h>
+#include <linux/timer.h>
+#include <linux/wait.h>
+#include <linux/fs.h>
+#include <linux/string.h>
+#include <linux/mutex.h>
+
+#include <linux/dvb/dmx.h>
+
+#include "dvbdev.h"
+#include "demux.h"
+#include "dvb_ringbuffer.h"
+
+enum dmxdev_type {
+ DMXDEV_TYPE_NONE,
+ DMXDEV_TYPE_SEC,
+ DMXDEV_TYPE_PES,
+};
+
+enum dmxdev_state {
+ DMXDEV_STATE_FREE,
+ DMXDEV_STATE_ALLOCATED,
+ DMXDEV_STATE_SET,
+ DMXDEV_STATE_GO,
+ DMXDEV_STATE_DONE,
+ DMXDEV_STATE_TIMEDOUT
+};
+
+struct dmxdev_filter {
+ union {
+ struct dmx_section_filter *sec;
+ } filter;
+
+ union {
+ struct dmx_ts_feed *ts;
+ struct dmx_section_feed *sec;
+ } feed;
+
+ union {
+ struct dmx_sct_filter_params sec;
+ struct dmx_pes_filter_params pes;
+ } params;
+
+ enum dmxdev_type type;
+ enum dmxdev_state state;
+ struct dmxdev *dev;
+ struct dvb_ringbuffer buffer;
+
+ struct mutex mutex;
+
+ /* only for sections */
+ struct timer_list timer;
+ int todo;
+ u8 secheader[3];
+};
+
+
+struct dmxdev {
+ struct dvb_device *dvbdev;
+ struct dvb_device *dvr_dvbdev;
+
+ struct dmxdev_filter *filter;
+ struct dmx_demux *demux;
+
+ int filternum;
+ int capabilities;
+
+ unsigned int exit:1;
+#define DMXDEV_CAP_DUPLEX 1
+ struct dmx_frontend *dvr_orig_fe;
+
+ struct dvb_ringbuffer dvr_buffer;
+#define DVR_BUFFER_SIZE (10*188*1024)
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+
+int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *);
+void dvb_dmxdev_release(struct dmxdev *dmxdev);
+
+#endif /* _DMXDEV_H_ */
diff --git a/v4l/kernel-2.6.28/dvb-pll.h b/v4l/kernel-2.6.28/dvb-pll.h
new file mode 100644
index 0000000..05239f5
--- /dev/null
+++ b/v4l/kernel-2.6.28/dvb-pll.h
@@ -0,0 +1,52 @@
+/*
+ * descriptions + helper functions for simple dvb plls.
+ */
+
+#ifndef __DVB_PLL_H__
+#define __DVB_PLL_H__
+
+#include <linux/i2c.h>
+#include "dvb_frontend.h"
+
+#define DVB_PLL_UNDEFINED 0
+#define DVB_PLL_THOMSON_DTT7579 1
+#define DVB_PLL_THOMSON_DTT759X 2
+#define DVB_PLL_LG_Z201 3
+#define DVB_PLL_UNKNOWN_1 4
+#define DVB_PLL_TUA6010XS 5
+#define DVB_PLL_ENV57H1XD5 6
+#define DVB_PLL_TUA6034 7
+#define DVB_PLL_TDA665X 8
+#define DVB_PLL_TDED4 9
+#define DVB_PLL_TDHU2 10
+#define DVB_PLL_SAMSUNG_TBMV 11
+#define DVB_PLL_PHILIPS_SD1878_TDA8261 12
+#define DVB_PLL_OPERA1 13
+#define DVB_PLL_SAMSUNG_DTOS403IH102A 14
+
+/**
+ * Attach a dvb-pll to the supplied frontend structure.
+ *
+ * @param fe Frontend to attach to.
+ * @param pll_addr i2c address of the PLL (if used).
+ * @param i2c i2c adapter to use (set to NULL if not used).
+ * @param pll_desc_id dvb_pll_desc to use.
+ * @return Frontend pointer on success, NULL on failure
+ */
+#if defined(CONFIG_DVB_PLL) || (defined(CONFIG_DVB_PLL_MODULE) && defined(MODULE))
+extern struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ unsigned int pll_desc_id);
+#else
+static inline struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ unsigned int pll_desc_id)
+{
+ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
+ return NULL;
+}
+#endif
+
+#endif
diff --git a/v4l/kernel-2.6.28/dvb-usb-ids.h b/v4l/kernel-2.6.28/dvb-usb-ids.h
new file mode 100644
index 0000000..7380b94
--- /dev/null
+++ b/v4l/kernel-2.6.28/dvb-usb-ids.h
@@ -0,0 +1,237 @@
+/* dvb-usb-ids.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de) see
+ * dvb-usb-init.c for copyright information.
+ *
+ * a header file containing define's for the USB device supported by the
+ * various drivers.
+ */
+#ifndef _DVB_USB_IDS_H_
+#define _DVB_USB_IDS_H_
+
+/* Vendor IDs */
+#define USB_VID_ADSTECH 0x06e1
+#define USB_VID_AFATECH 0x15a4
+#define USB_VID_ALCOR_MICRO 0x058f
+#define USB_VID_ALINK 0x05e3
+#define USB_VID_AMT 0x1c73
+#define USB_VID_ANCHOR 0x0547
+#define USB_VID_ANSONIC 0x10b9
+#define USB_VID_ANUBIS_ELECTRONIC 0x10fd
+#define USB_VID_ASUS 0x0b05
+#define USB_VID_AVERMEDIA 0x07ca
+#define USB_VID_COMPRO 0x185b
+#define USB_VID_COMPRO_UNK 0x145f
+#define USB_VID_CONEXANT 0x0572
+#define USB_VID_CYPRESS 0x04b4
+#define USB_VID_DIBCOM 0x10b8
+#define USB_VID_DPOSH 0x1498
+#define USB_VID_DVICO 0x0fe9
+#define USB_VID_EMPIA 0xeb1a
+#define USB_VID_GENPIX 0x09c0
+#define USB_VID_GRANDTEC 0x5032
+#define USB_VID_HANFTEK 0x15f4
+#define USB_VID_HAUPPAUGE 0x2040
+#define USB_VID_HYPER_PALTEK 0x1025
+#define USB_VID_KWORLD 0xeb2a
+#define USB_VID_KWORLD_2 0x1b80
+#define USB_VID_KYE 0x0458
+#define USB_VID_LEADTEK 0x0413
+#define USB_VID_LITEON 0x04ca
+#define USB_VID_MEDION 0x1660
+#define USB_VID_MIGLIA 0x18f3
+#define USB_VID_MSI 0x0db0
+#define USB_VID_MSI_2 0x1462
+#define USB_VID_OPERA1 0x695c
+#define USB_VID_PINNACLE 0x2304
+#define USB_VID_TECHNOTREND 0x0b48
+#define USB_VID_TERRATEC 0x0ccd
+#define USB_VID_TELESTAR 0x10b9
+#define USB_VID_VISIONPLUS 0x13d3
+#define USB_VID_TWINHAN 0x1822
+#define USB_VID_ULTIMA_ELECTRONIC 0x05d8
+#define USB_VID_UNIWILL 0x1584
+#define USB_VID_WIDEVIEW 0x14aa
+#define USB_VID_GIGABYTE 0x1044
+#define USB_VID_YUAN 0x1164
+#define USB_VID_XTENSIONS 0x1ae7
+
+/* Product IDs */
+#define USB_PID_ADSTECH_USB2_COLD 0xa333
+#define USB_PID_ADSTECH_USB2_WARM 0xa334
+#define USB_PID_AFATECH_AF9005 0x9020
+#define USB_PID_AFATECH_AF9015_9015 0x9015
+#define USB_PID_AFATECH_AF9015_9016 0x9016
+#define USB_VID_ALINK_DTU 0xf170
+#define USB_PID_ANSONIC_DVBT_USB 0x6000
+#define USB_PID_ANYSEE 0x861f
+#define USB_PID_AZUREWAVE_AD_TU700 0x3237
+#define USB_PID_AVERMEDIA_DVBT_USB_COLD 0x0001
+#define USB_PID_AVERMEDIA_DVBT_USB_WARM 0x0002
+#define USB_PID_AVERMEDIA_DVBT_USB2_COLD 0xa800
+#define USB_PID_AVERMEDIA_DVBT_USB2_WARM 0xa801
+#define USB_PID_COMPRO_DVBU2000_COLD 0xd000
+#define USB_PID_COMPRO_DVBU2000_WARM 0xd001
+#define USB_PID_COMPRO_DVBU2000_UNK_COLD 0x010c
+#define USB_PID_COMPRO_DVBU2000_UNK_WARM 0x010d
+#define USB_PID_COMPRO_VIDEOMATE_U500 0x1e78
+#define USB_PID_COMPRO_VIDEOMATE_U500_PC 0x1e80
+#define USB_PID_CONEXANT_D680_DMB 0x86d6
+#define USB_PID_DIBCOM_HOOK_DEFAULT 0x0064
+#define USB_PID_DIBCOM_HOOK_DEFAULT_REENUM 0x0065
+#define USB_PID_DIBCOM_MOD3000_COLD 0x0bb8
+#define USB_PID_DIBCOM_MOD3000_WARM 0x0bb9
+#define USB_PID_DIBCOM_MOD3001_COLD 0x0bc6
+#define USB_PID_DIBCOM_MOD3001_WARM 0x0bc7
+#define USB_PID_DIBCOM_STK7700P 0x1e14
+#define USB_PID_DIBCOM_STK7700P_PC 0x1e78
+#define USB_PID_DIBCOM_STK7700D 0x1ef0
+#define USB_PID_DIBCOM_STK7700_U7000 0x7001
+#define USB_PID_DIBCOM_STK7070P 0x1ebc
+#define USB_PID_DIBCOM_STK7070PD 0x1ebe
+#define USB_PID_DIBCOM_ANCHOR_2135_COLD 0x2131
+#define USB_PID_DPOSH_M9206_COLD 0x9206
+#define USB_PID_DPOSH_M9206_WARM 0xa090
+#define USB_PID_UNIWILL_STK7700P 0x6003
+#define USB_PID_GRANDTEC_DVBT_USB_COLD 0x0fa0
+#define USB_PID_GRANDTEC_DVBT_USB_WARM 0x0fa1
+#define USB_PID_KWORLD_399U 0xe399
+#define USB_PID_KWORLD_PC160_2T 0xc160
+#define USB_PID_KWORLD_VSTREAM_COLD 0x17de
+#define USB_PID_KWORLD_VSTREAM_WARM 0x17df
+#define USB_PID_TERRATEC_CINERGY_T_USB_XE 0x0055
+#define USB_PID_TERRATEC_CINERGY_T_USB_XE_REV2 0x0069
+#define USB_PID_TWINHAN_VP7041_COLD 0x3201
+#define USB_PID_TWINHAN_VP7041_WARM 0x3202
+#define USB_PID_TWINHAN_VP7020_COLD 0x3203
+#define USB_PID_TWINHAN_VP7020_WARM 0x3204
+#define USB_PID_TWINHAN_VP7045_COLD 0x3205
+#define USB_PID_TWINHAN_VP7045_WARM 0x3206
+#define USB_PID_TWINHAN_VP7021_COLD 0x3207
+#define USB_PID_TWINHAN_VP7021_WARM 0x3208
+#define USB_PID_TINYTWIN 0x3226
+#define USB_PID_DNTV_TINYUSB2_COLD 0x3223
+#define USB_PID_DNTV_TINYUSB2_WARM 0x3224
+#define USB_PID_ULTIMA_TVBOX_COLD 0x8105
+#define USB_PID_ULTIMA_TVBOX_WARM 0x8106
+#define USB_PID_ULTIMA_TVBOX_AN2235_COLD 0x8107
+#define USB_PID_ULTIMA_TVBOX_AN2235_WARM 0x8108
+#define USB_PID_ULTIMA_TVBOX_ANCHOR_COLD 0x2235
+#define USB_PID_ULTIMA_TVBOX_USB2_COLD 0x8109
+#define USB_PID_ULTIMA_TVBOX_USB2_WARM 0x810a
+#define USB_PID_ARTEC_T14_COLD 0x810b
+#define USB_PID_ARTEC_T14_WARM 0x810c
+#define USB_PID_ARTEC_T14BR 0x810f
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_COLD 0x8613
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_WARM 0x1002
+#define USB_PID_UNK_HYPER_PALTEK_COLD 0x005e
+#define USB_PID_UNK_HYPER_PALTEK_WARM 0x005f
+#define USB_PID_HANFTEK_UMT_010_COLD 0x0001
+#define USB_PID_HANFTEK_UMT_010_WARM 0x0015
+#define USB_PID_DTT200U_COLD 0x0201
+#define USB_PID_DTT200U_WARM 0x0301
+#define USB_PID_WT220U_ZAP250_COLD 0x0220
+#define USB_PID_WT220U_COLD 0x0222
+#define USB_PID_WT220U_WARM 0x0221
+#define USB_PID_WT220U_FC_COLD 0x0225
+#define USB_PID_WT220U_FC_WARM 0x0226
+#define USB_PID_WT220U_ZL0353_COLD 0x022a
+#define USB_PID_WT220U_ZL0353_WARM 0x022b
+#define USB_PID_WINTV_NOVA_T_USB2_COLD 0x9300
+#define USB_PID_WINTV_NOVA_T_USB2_WARM 0x9301
+#define USB_PID_HAUPPAUGE_NOVA_T_500 0x9941
+#define USB_PID_HAUPPAUGE_NOVA_T_500_2 0x9950
+#define USB_PID_HAUPPAUGE_NOVA_T_500_3 0x8400
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK 0x7050
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK_2 0x7060
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK_3 0x7070
+#define USB_PID_HAUPPAUGE_MYTV_T 0x7080
+#define USB_PID_HAUPPAUGE_NOVA_TD_STICK 0x9580
+#define USB_PID_HAUPPAUGE_NOVA_TD_STICK_52009 0x5200
+#define USB_PID_AVERMEDIA_EXPRESS 0xb568
+#define USB_PID_AVERMEDIA_VOLAR 0xa807
+#define USB_PID_AVERMEDIA_VOLAR_2 0xb808
+#define USB_PID_AVERMEDIA_VOLAR_A868R 0xa868
+#define USB_PID_AVERMEDIA_MCE_USB_M038 0x1228
+#define USB_PID_AVERMEDIA_HYBRID_ULTRA_USB_M039R 0x0039
+#define USB_PID_AVERMEDIA_HYBRID_ULTRA_USB_M039R_ATSC 0x1039
+#define USB_PID_AVERMEDIA_HYBRID_ULTRA_USB_M039R_DVBT 0x2039
+#define USB_PID_AVERMEDIA_VOLAR_X 0xa815
+#define USB_PID_AVERMEDIA_VOLAR_X_2 0x8150
+#define USB_PID_AVERMEDIA_A309 0xa309
+#define USB_PID_TECHNOTREND_CONNECT_S2400 0x3006
+#define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY 0x005a
+#define USB_PID_TERRATEC_CINERGY_HT_USB_XE 0x0058
+#define USB_PID_TERRATEC_CINERGY_HT_EXPRESS 0x0060
+#define USB_PID_TERRATEC_CINERGY_T_XXS 0x0078
+#define USB_PID_PINNACLE_EXPRESSCARD_320CX 0x022e
+#define USB_PID_PINNACLE_PCTV2000E 0x022c
+#define USB_PID_PINNACLE_PCTV_DVB_T_FLASH 0x0228
+#define USB_PID_PINNACLE_PCTV_DUAL_DIVERSITY_DVB_T 0x0229
+#define USB_PID_PINNACLE_PCTV71E 0x022b
+#define USB_PID_PINNACLE_PCTV72E 0x0236
+#define USB_PID_PINNACLE_PCTV73E 0x0237
+#define USB_PID_PINNACLE_PCTV801E 0x023a
+#define USB_PID_PINNACLE_PCTV801E_SE 0x023b
+#define USB_PID_PCTV_200E 0x020e
+#define USB_PID_PCTV_400E 0x020f
+#define USB_PID_PCTV_450E 0x0222
+#define USB_PID_NEBULA_DIGITV 0x0201
+#define USB_PID_DVICO_BLUEBIRD_LGDT 0xd820
+#define USB_PID_DVICO_BLUEBIRD_LG064F_COLD 0xd500
+#define USB_PID_DVICO_BLUEBIRD_LG064F_WARM 0xd501
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_COLD 0xdb00
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_WARM 0xdb01
+#define USB_PID_DVICO_BLUEBIRD_TH7579_COLD 0xdb10
+#define USB_PID_DVICO_BLUEBIRD_TH7579_WARM 0xdb11
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_COLD 0xdb50
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_WARM 0xdb51
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_COLD 0xdb58
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_WARM 0xdb59
+#define USB_PID_DVICO_BLUEBIRD_DUAL_4 0xdb78
+#define USB_PID_DVICO_BLUEBIRD_DUAL_4_REV_2 0xdb98
+#define USB_PID_DVICO_BLUEBIRD_DVB_T_NANO_2 0xdb70
+#define USB_PID_DVICO_BLUEBIRD_DVB_T_NANO_2_NFW_WARM 0xdb71
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_COLD 0xdb54
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_WARM 0xdb55
+#define USB_PID_MEDION_MD95700 0x0932
+#define USB_PID_MSI_MEGASKY580 0x5580
+#define USB_PID_MSI_MEGASKY580_55801 0x5581
+#define USB_PID_KYE_DVB_T_COLD 0x701e
+#define USB_PID_KYE_DVB_T_WARM 0x701f
+#define USB_PID_LITEON_DVB_T_COLD 0xf000
+#define USB_PID_LITEON_DVB_T_WARM 0xf001
+#define USB_PID_DIGIVOX_MINI_SL_COLD 0xe360
+#define USB_PID_DIGIVOX_MINI_SL_WARM 0xe361
+#define USB_PID_GRANDTEC_DVBT_USB2_COLD 0x0bc6
+#define USB_PID_GRANDTEC_DVBT_USB2_WARM 0x0bc7
+#define USB_PID_WINFAST_DTV_DONGLE_COLD 0x6025
+#define USB_PID_WINFAST_DTV_DONGLE_WARM 0x6026
+#define USB_PID_WINFAST_DTV_DONGLE_STK7700P 0x6f00
+#define USB_PID_WINFAST_DTV_DONGLE_STK7700P_2 0x6f01
+#define USB_PID_WINFAST_DTV_DONGLE_GOLD 0x6029
+#define USB_PID_GENPIX_8PSK_REV_1_COLD 0x0200
+#define USB_PID_GENPIX_8PSK_REV_1_WARM 0x0201
+#define USB_PID_GENPIX_8PSK_REV_2 0x0202
+#define USB_PID_GENPIX_SKYWALKER_1 0x0203
+#define USB_PID_GENPIX_SKYWALKER_CW3K 0x0204
+#define USB_PID_SIGMATEK_DVB_110 0x6610
+#define USB_PID_MSI_DIGI_VOX_MINI_II 0x1513
+#define USB_PID_MSI_DIGIVOX_DUO 0x8801
+#define USB_PID_OPERA1_COLD 0x2830
+#define USB_PID_OPERA1_WARM 0x3829
+#define USB_PID_LIFEVIEW_TV_WALKER_TWIN_COLD 0x0514
+#define USB_PID_LIFEVIEW_TV_WALKER_TWIN_WARM 0x0513
+#define USB_PID_GIGABYTE_U7000 0x7001
+#define USB_PID_GIGABYTE_U8000 0x7002
+#define USB_PID_ASUS_U3000 0x171f
+#define USB_PID_ASUS_U3000H 0x1736
+#define USB_PID_ASUS_U3100 0x173f
+#define USB_PID_YUAN_EC372S 0x1edc
+#define USB_PID_YUAN_STK7700PH 0x1f08
+#define USB_PID_DW2102 0x2102
+#define USB_PID_XTENSIONS_XD_380 0x0381
+#define USB_PID_TELESTAR_STARSTICK_2 0x8000
+#define USB_PID_MSI_DIGI_VOX_MINI_III 0x8807
+
+#endif
diff --git a/v4l/kernel-2.6.28/dvb-usb.h b/v4l/kernel-2.6.28/dvb-usb.h
new file mode 100644
index 0000000..b1de0f7
--- /dev/null
+++ b/v4l/kernel-2.6.28/dvb-usb.h
@@ -0,0 +1,400 @@
+/* dvb-usb.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * the headerfile, all dvb-usb-drivers have to include.
+ *
+ * TODO: clean-up the structures for unused fields and update the comments
+ */
+#ifndef __DVB_USB_H__
+#define __DVB_USB_H__
+
+#include <linux/input.h>
+#include <linux/usb.h>
+#include <linux/firmware.h>
+#include <linux/mutex.h>
+
+#include "dvb_frontend.h"
+#include "dvb_demux.h"
+#include "dvb_net.h"
+#include "dmxdev.h"
+
+#include "dvb-pll.h"
+
+#include "dvb-usb-ids.h"
+
+/* debug */
+#ifdef CONFIG_DVB_USB_DEBUG
+#define dprintk(var,level,args...) \
+ do { if ((var & level)) { printk(args); } } while (0)
+
+#define debug_dump(b,l,func) {\
+ int loop_; \
+ for (loop_ = 0; loop_ < l; loop_++) func("%02x ", b[loop_]); \
+ func("\n");\
+}
+#define DVB_USB_DEBUG_STATUS
+#else
+#define dprintk(args...)
+#define debug_dump(b,l,func)
+
+#define DVB_USB_DEBUG_STATUS " (debugging is not enabled)"
+
+#endif
+
+/* generic log methods - taken from usb.h */
+#ifndef DVB_USB_LOG_PREFIX
+ #define DVB_USB_LOG_PREFIX "dvb-usb (please define a log prefix)"
+#endif
+
+#undef err
+#define err(format, arg...) printk(KERN_ERR DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef info
+#define info(format, arg...) printk(KERN_INFO DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef warn
+#define warn(format, arg...) printk(KERN_WARNING DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+
+/**
+ * struct dvb_usb_device_description - name and its according USB IDs
+ * @name: real name of the box, regardless which DVB USB device class is in use
+ * @cold_ids: array of struct usb_device_id which describe the device in
+ * pre-firmware state
+ * @warm_ids: array of struct usb_device_id which describe the device in
+ * post-firmware state
+ *
+ * Each DVB USB device class can have one or more actual devices, this struct
+ * assigns a name to it.
+ */
+struct dvb_usb_device_description {
+ const char *name;
+
+#define DVB_USB_ID_MAX_NUM 15
+ struct usb_device_id *cold_ids[DVB_USB_ID_MAX_NUM];
+ struct usb_device_id *warm_ids[DVB_USB_ID_MAX_NUM];
+};
+
+/**
+ * struct dvb_usb_rc_key - a remote control key and its input-event
+ * @custom: the vendor/custom part of the key
+ * @data: the actual key part
+ * @event: the input event assigned to key identified by custom and data
+ */
+struct dvb_usb_rc_key {
+ u8 custom,data;
+ u32 event;
+};
+
+struct dvb_usb_device;
+struct dvb_usb_adapter;
+struct usb_data_stream;
+
+/**
+ * Properties of USB streaming - TODO this structure should be somewhere else
+ * describes the kind of USB transfer used for data-streaming.
+ * (BULK or ISOC)
+ */
+struct usb_data_stream_properties {
+#define USB_BULK 1
+#define USB_ISOC 2
+ int type;
+ int count;
+ int endpoint;
+
+ union {
+ struct {
+ int buffersize; /* per URB */
+ } bulk;
+ struct {
+ int framesperurb;
+ int framesize;
+ int interval;
+ } isoc;
+ } u;
+};
+
+/**
+ * struct dvb_usb_adapter_properties - properties of a dvb-usb-adapter.
+ * A DVB-USB-Adapter is basically a dvb_adapter which is present on a USB-device.
+ * @caps: capabilities of the DVB USB device.
+ * @pid_filter_count: number of PID filter position in the optional hardware
+ * PID-filter.
+ * @streaming_ctrl: called to start and stop the MPEG2-TS streaming of the
+ * device (not URB submitting/killing).
+ * @pid_filter_ctrl: called to en/disable the PID filter, if any.
+ * @pid_filter: called to set/unset a PID for filtering.
+ * @frontend_attach: called to attach the possible frontends (fill fe-field
+ * of struct dvb_usb_device).
+ * @tuner_attach: called to attach the correct tuner and to fill pll_addr,
+ * pll_desc and pll_init_buf of struct dvb_usb_device).
+ * @stream: configuration of the USB streaming
+ */
+struct dvb_usb_adapter_properties {
+#define DVB_USB_ADAP_HAS_PID_FILTER 0x01
+#define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
+#define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
+#define DVB_USB_ADAP_RECEIVES_204_BYTE_TS 0x08
+ int caps;
+ int pid_filter_count;
+
+ int (*streaming_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
+
+ int (*frontend_attach) (struct dvb_usb_adapter *);
+ int (*tuner_attach) (struct dvb_usb_adapter *);
+
+ struct usb_data_stream_properties stream;
+
+ int size_of_priv;
+};
+
+/**
+ * struct dvb_usb_device_properties - properties of a dvb-usb-device
+ * @usb_ctrl: which USB device-side controller is in use. Needed for firmware
+ * download.
+ * @firmware: name of the firmware file.
+ * @download_firmware: called to download the firmware when the usb_ctrl is
+ * DEVICE_SPECIFIC.
+ * @no_reconnect: device doesn't do a reconnect after downloading the firmware,
+ * so do the warm initialization right after it
+ *
+ * @size_of_priv: how many bytes shall be allocated for the private field
+ * of struct dvb_usb_device.
+ *
+ * @power_ctrl: called to enable/disable power of the device.
+ * @read_mac_address: called to read the MAC address of the device.
+ * @identify_state: called to determine the state (cold or warm), when it
+ * is not distinguishable by the USB IDs.
+ *
+ * @rc_key_map: a hard-wired array of struct dvb_usb_rc_key (NULL to disable
+ * remote control handling).
+ * @rc_key_map_size: number of items in @rc_key_map.
+ * @rc_query: called to query an event event.
+ * @rc_interval: time in ms between two queries.
+ *
+ * @i2c_algo: i2c_algorithm if the device has I2CoverUSB.
+ *
+ * @generic_bulk_ctrl_endpoint: most of the DVB USB devices have a generic
+ * endpoint which received control messages with bulk transfers. When this
+ * is non-zero, one can use dvb_usb_generic_rw and dvb_usb_generic_write-
+ * helper functions.
+ *
+ * @num_device_descs: number of struct dvb_usb_device_description in @devices
+ * @devices: array of struct dvb_usb_device_description compatibles with these
+ * properties.
+ */
+#define MAX_NO_OF_ADAPTER_PER_DEVICE 2
+struct dvb_usb_device_properties {
+
+#define DVB_USB_IS_AN_I2C_ADAPTER 0x01
+ int caps;
+
+#define DEVICE_SPECIFIC 0
+#define CYPRESS_AN2135 1
+#define CYPRESS_AN2235 2
+#define CYPRESS_FX2 3
+ int usb_ctrl;
+ int (*download_firmware) (struct usb_device *, const struct firmware *);
+ const char firmware[FIRMWARE_NAME_MAX];
+ int no_reconnect;
+
+ int size_of_priv;
+
+ int num_adapters;
+ struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ int (*power_ctrl) (struct dvb_usb_device *, int);
+ int (*read_mac_address) (struct dvb_usb_device *, u8 []);
+ int (*identify_state) (struct usb_device *, struct dvb_usb_device_properties *,
+ struct dvb_usb_device_description **, int *);
+
+/* remote control properties */
+#define REMOTE_NO_KEY_PRESSED 0x00
+#define REMOTE_KEY_PRESSED 0x01
+#define REMOTE_KEY_REPEAT 0x02
+ struct dvb_usb_rc_key *rc_key_map;
+ int rc_key_map_size;
+ int (*rc_query) (struct dvb_usb_device *, u32 *, int *);
+ int rc_interval;
+
+ struct i2c_algorithm *i2c_algo;
+
+ int generic_bulk_ctrl_endpoint;
+
+ int num_device_descs;
+ struct dvb_usb_device_description devices[9];
+};
+
+/**
+ * struct usb_data_stream - generic object of an USB stream
+ * @buf_num: number of buffer allocated.
+ * @buf_size: size of each buffer in buf_list.
+ * @buf_list: array containing all allocate buffers for streaming.
+ * @dma_addr: list of dma_addr_t for each buffer in buf_list.
+ *
+ * @urbs_initialized: number of URBs initialized.
+ * @urbs_submitted: number of URBs submitted.
+ */
+#define MAX_NO_URBS_FOR_DATA_STREAM 10
+struct usb_data_stream {
+ struct usb_device *udev;
+ struct usb_data_stream_properties props;
+
+#define USB_STATE_INIT 0x00
+#define USB_STATE_URB_BUF 0x01
+ int state;
+
+ void (*complete) (struct usb_data_stream *, u8 *, size_t);
+
+ struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ int buf_num;
+ unsigned long buf_size;
+ u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
+
+ int urbs_initialized;
+ int urbs_submitted;
+
+ void *user_priv;
+};
+
+/**
+ * struct dvb_usb_adapter - a DVB adapter on a USB device
+ * @id: index of this adapter (starting with 0).
+ *
+ * @feedcount: number of reqested feeds (used for streaming-activation)
+ * @pid_filtering: is hardware pid_filtering used or not.
+ *
+ * @pll_addr: I2C address of the tuner for programming
+ * @pll_init: array containing the initialization buffer
+ * @pll_desc: pointer to the appropriate struct dvb_pll_desc
+ * @tuner_pass_ctrl: called to (de)activate tuner passthru of the demod or the board
+ *
+ * @dvb_adap: device's dvb_adapter.
+ * @dmxdev: device's dmxdev.
+ * @demux: device's software demuxer.
+ * @dvb_net: device's dvb_net interfaces.
+ * @dvb_frontend: device's frontend.
+ * @max_feed_count: how many feeds can be handled simultaneously by this
+ * device
+ *
+ * @fe_init: rerouted frontend-init (wakeup) function.
+ * @fe_sleep: rerouted frontend-sleep function.
+ *
+ * @stream: the usb data stream.
+ */
+struct dvb_usb_adapter {
+ struct dvb_usb_device *dev;
+ struct dvb_usb_adapter_properties props;
+
+#define DVB_USB_ADAP_STATE_INIT 0x000
+#define DVB_USB_ADAP_STATE_DVB 0x001
+ int state;
+
+ u8 id;
+
+ int feedcount;
+ int pid_filtering;
+
+ /* dvb */
+ struct dvb_adapter dvb_adap;
+ struct dmxdev dmxdev;
+ struct dvb_demux demux;
+ struct dvb_net dvb_net;
+ struct dvb_frontend *fe;
+ int max_feed_count;
+
+ int (*fe_init) (struct dvb_frontend *);
+ int (*fe_sleep) (struct dvb_frontend *);
+
+ struct usb_data_stream stream;
+
+ void *priv;
+};
+
+/**
+ * struct dvb_usb_device - object of a DVB USB device
+ * @props: copy of the struct dvb_usb_properties this device belongs to.
+ * @desc: pointer to the device's struct dvb_usb_device_description.
+ * @state: initialization and runtime state of the device.
+ *
+ * @powered: indicated whether the device is power or not.
+ * Powered is in/decremented for each call to modify the state.
+ * @udev: pointer to the device's struct usb_device.
+ *
+ * @usb_mutex: semaphore of USB control messages (reading needs two messages)
+ * @i2c_mutex: semaphore for i2c-transfers
+ *
+ * @i2c_adap: device's i2c_adapter if it uses I2CoverUSB
+ *
+ * @rc_input_dev: input device for the remote control.
+ * @rc_query_work: struct work_struct frequent rc queries
+ * @last_event: last triggered event
+ * @last_state: last state (no, pressed, repeat)
+ * @owner: owner of the dvb_adapter
+ * @priv: private data of the actual driver (allocate by dvb-usb, size defined
+ * in size_of_priv of dvb_usb_properties).
+ */
+struct dvb_usb_device {
+ struct dvb_usb_device_properties props;
+ struct dvb_usb_device_description *desc;
+
+ struct usb_device *udev;
+
+#define DVB_USB_STATE_INIT 0x000
+#define DVB_USB_STATE_I2C 0x001
+#define DVB_USB_STATE_DVB 0x002
+#define DVB_USB_STATE_REMOTE 0x004
+ int state;
+
+ int powered;
+
+ /* locking */
+ struct mutex usb_mutex;
+
+ /* i2c */
+ struct mutex i2c_mutex;
+ struct i2c_adapter i2c_adap;
+
+ int num_adapters_initialized;
+ struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ /* remote control */
+ struct input_dev *rc_input_dev;
+ char rc_phys[64];
+ struct delayed_work rc_query_work;
+ u32 last_event;
+ int last_state;
+
+ struct module *owner;
+
+ void *priv;
+};
+
+extern int dvb_usb_device_init(struct usb_interface *,
+ struct dvb_usb_device_properties *,
+ struct module *, struct dvb_usb_device **,
+ short *adapter_nums);
+extern void dvb_usb_device_exit(struct usb_interface *);
+
+/* the generic read/write method for device control */
+extern int dvb_usb_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16,int);
+extern int dvb_usb_generic_write(struct dvb_usb_device *, u8 *, u16);
+
+/* commonly used remote control parsing */
+extern int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *, u8[], u32 *, int *);
+
+/* commonly used firmware download types and function */
+struct hexline {
+ u8 len;
+ u32 addr;
+ u8 type;
+ u8 data[255];
+ u8 chk;
+};
+extern int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type);
+extern int dvb_usb_get_hexline(const struct firmware *fw, struct hexline *hx, int *pos);
+
+
+#endif
diff --git a/v4l/kernel-2.6.28/dvb_demux.h b/v4l/kernel-2.6.28/dvb_demux.h
new file mode 100644
index 0000000..2c5f915
--- /dev/null
+++ b/v4l/kernel-2.6.28/dvb_demux.h
@@ -0,0 +1,140 @@
+/*
+ * dvb_demux.h: DVB kernel demux API
+ *
+ * Copyright (C) 2000-2001 Marcus Metzler & Ralph Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_DEMUX_H_
+#define _DVB_DEMUX_H_
+
+#include <linux/time.h>
+#include <linux/timer.h>
+#include <linux/spinlock.h>
+#include <linux/mutex.h>
+
+#include "demux.h"
+
+#define DMX_TYPE_TS 0
+#define DMX_TYPE_SEC 1
+#define DMX_TYPE_PES 2
+
+#define DMX_STATE_FREE 0
+#define DMX_STATE_ALLOCATED 1
+#define DMX_STATE_SET 2
+#define DMX_STATE_READY 3
+#define DMX_STATE_GO 4
+
+#define DVB_DEMUX_MASK_MAX 18
+
+struct dvb_demux_filter {
+ struct dmx_section_filter filter;
+ u8 maskandmode[DMX_MAX_FILTER_SIZE];
+ u8 maskandnotmode[DMX_MAX_FILTER_SIZE];
+ int doneq;
+
+ struct dvb_demux_filter *next;
+ struct dvb_demux_feed *feed;
+ int index;
+ int state;
+ int type;
+
+ u16 hw_handle;
+ struct timer_list timer;
+};
+
+#define DMX_FEED_ENTRY(pos) list_entry(pos, struct dvb_demux_feed, list_head)
+
+struct dvb_demux_feed {
+ union {
+ struct dmx_ts_feed ts;
+ struct dmx_section_feed sec;
+ } feed;
+
+ union {
+ dmx_ts_cb ts;
+ dmx_section_cb sec;
+ } cb;
+
+ struct dvb_demux *demux;
+ void *priv;
+ int type;
+ int state;
+ u16 pid;
+ u8 *buffer;
+ int buffer_size;
+
+ struct timespec timeout;
+ struct dvb_demux_filter *filter;
+
+ int ts_type;
+ enum dmx_ts_pes pes_type;
+
+ int cc;
+ int pusi_seen; /* prevents feeding of garbage from previous section */
+
+ u16 peslen;
+
+ struct list_head list_head;
+ unsigned int index; /* a unique index for each feed (can be used as hardware pid filter index) */
+};
+
+struct dvb_demux {
+ struct dmx_demux dmx;
+ void *priv;
+ int filternum;
+ int feednum;
+ int (*start_feed)(struct dvb_demux_feed *feed);
+ int (*stop_feed)(struct dvb_demux_feed *feed);
+ int (*write_to_decoder)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ u32 (*check_crc32)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ void (*memcopy)(struct dvb_demux_feed *feed, u8 *dst,
+ const u8 *src, size_t len);
+
+ int users;
+#define MAX_DVB_DEMUX_USERS 10
+ struct dvb_demux_filter *filter;
+ struct dvb_demux_feed *feed;
+
+ struct list_head frontend_list;
+
+ struct dvb_demux_feed *pesfilter[DMX_TS_PES_OTHER];
+ u16 pids[DMX_TS_PES_OTHER];
+ int playing;
+ int recording;
+
+#define DMX_MAX_PID 0x2000
+ struct list_head feed_list;
+ u8 tsbuf[204];
+ int tsbufp;
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+int dvb_dmx_init(struct dvb_demux *dvbdemux);
+void dvb_dmx_release(struct dvb_demux *dvbdemux);
+void dvb_dmx_swfilter_packets(struct dvb_demux *dvbdmx, const u8 *buf,
+ size_t count);
+void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count);
+void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf,
+ size_t count);
+
+#endif /* _DVB_DEMUX_H_ */
diff --git a/v4l/kernel-2.6.28/dvb_frontend.h b/v4l/kernel-2.6.28/dvb_frontend.h
new file mode 100644
index 0000000..db4a63b
--- /dev/null
+++ b/v4l/kernel-2.6.28/dvb_frontend.h
@@ -0,0 +1,240 @@
+/*
+ * dvb_frontend.h
+ *
+ * Copyright (C) 2001 convergence integrated media GmbH
+ * Copyright (C) 2004 convergence GmbH
+ *
+ * Written by Ralph Metzler
+ * Overhauled by Holger Waechtler
+ * Kernel I2C stuff by Michael Hunold <hunold@convergence.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_FRONTEND_H_
+#define _DVB_FRONTEND_H_
+
+#include <linux/types.h>
+#include <linux/sched.h>
+#include <linux/ioctl.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/delay.h>
+#include <linux/mutex.h>
+
+#include <linux/dvb/frontend.h>
+
+#include "dvbdev.h"
+
+struct dvb_frontend_tune_settings {
+ int min_delay_ms;
+ int step_size;
+ int max_drift;
+ struct dvb_frontend_parameters parameters;
+};
+
+struct dvb_frontend;
+
+struct dvb_tuner_info {
+ char name[128];
+
+ u32 frequency_min;
+ u32 frequency_max;
+ u32 frequency_step;
+
+ u32 bandwidth_min;
+ u32 bandwidth_max;
+ u32 bandwidth_step;
+};
+
+struct analog_parameters {
+ unsigned int frequency;
+ unsigned int mode;
+ unsigned int audmode;
+ u64 std;
+};
+
+struct dvb_tuner_ops {
+
+ struct dvb_tuner_info info;
+
+ int (*release)(struct dvb_frontend *fe);
+ int (*init)(struct dvb_frontend *fe);
+ int (*sleep)(struct dvb_frontend *fe);
+
+ /** This is for simple PLLs - set all parameters in one go. */
+ int (*set_params)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
+ int (*set_analog_params)(struct dvb_frontend *fe, struct analog_parameters *p);
+
+ /** This is support for demods like the mt352 - fills out the supplied buffer with what to write. */
+ int (*calc_regs)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p, u8 *buf, int buf_len);
+
+ /** This is to allow setting tuner-specific configs */
+ int (*set_config)(struct dvb_frontend *fe, void *priv_cfg);
+
+ int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency);
+ int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth);
+
+#define TUNER_STATUS_LOCKED 1
+#define TUNER_STATUS_STEREO 2
+ int (*get_status)(struct dvb_frontend *fe, u32 *status);
+ int (*get_rf_strength)(struct dvb_frontend *fe, u16 *strength);
+
+ /** These are provided seperately from set_params in order to facilitate silicon
+ * tuners which require sophisticated tuning loops, controlling each parameter seperately. */
+ int (*set_frequency)(struct dvb_frontend *fe, u32 frequency);
+ int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
+};
+
+struct analog_demod_info {
+ char *name;
+};
+
+struct analog_demod_ops {
+
+ struct analog_demod_info info;
+
+ void (*set_params)(struct dvb_frontend *fe,
+ struct analog_parameters *params);
+ int (*has_signal)(struct dvb_frontend *fe);
+ int (*is_stereo)(struct dvb_frontend *fe);
+ int (*get_afc)(struct dvb_frontend *fe);
+ void (*tuner_status)(struct dvb_frontend *fe);
+ void (*standby)(struct dvb_frontend *fe);
+ void (*release)(struct dvb_frontend *fe);
+ int (*i2c_gate_ctrl)(struct dvb_frontend *fe, int enable);
+
+ /** This is to allow setting tuner-specific configuration */
+ int (*set_config)(struct dvb_frontend *fe, void *priv_cfg);
+};
+
+struct dvb_frontend_ops {
+
+ struct dvb_frontend_info info;
+
+ void (*release)(struct dvb_frontend* fe);
+ void (*release_sec)(struct dvb_frontend* fe);
+
+ int (*init)(struct dvb_frontend* fe);
+ int (*sleep)(struct dvb_frontend* fe);
+
+ int (*write)(struct dvb_frontend* fe, u8* buf, int len);
+
+ /* if this is set, it overrides the default swzigzag */
+ int (*tune)(struct dvb_frontend* fe,
+ struct dvb_frontend_parameters* params,
+ unsigned int mode_flags,
+ unsigned int *delay,
+ fe_status_t *status);
+ /* get frontend tuning algorithm from the module */
+ int (*get_frontend_algo)(struct dvb_frontend *fe);
+
+ /* these two are only used for the swzigzag code */
+ int (*set_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+ int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings);
+
+ int (*get_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+
+ int (*read_status)(struct dvb_frontend* fe, fe_status_t* status);
+ int (*read_ber)(struct dvb_frontend* fe, u32* ber);
+ int (*read_signal_strength)(struct dvb_frontend* fe, u16* strength);
+ int (*read_snr)(struct dvb_frontend* fe, u16* snr);
+ int (*read_ucblocks)(struct dvb_frontend* fe, u32* ucblocks);
+
+ int (*diseqc_reset_overload)(struct dvb_frontend* fe);
+ int (*diseqc_send_master_cmd)(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd);
+ int (*diseqc_recv_slave_reply)(struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply);
+ int (*diseqc_send_burst)(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd);
+ int (*set_tone)(struct dvb_frontend* fe, fe_sec_tone_mode_t tone);
+ int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
+ int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg);
+ int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
+ int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
+ int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);
+
+ struct dvb_tuner_ops tuner_ops;
+ struct analog_demod_ops analog_ops;
+
+ int (*set_property)(struct dvb_frontend* fe, struct dtv_property* tvp);
+ int (*get_property)(struct dvb_frontend* fe, struct dtv_property* tvp);
+};
+
+#define MAX_EVENT 8
+
+struct dvb_fe_events {
+ struct dvb_frontend_event events[MAX_EVENT];
+ int eventw;
+ int eventr;
+ int overflow;
+ wait_queue_head_t wait_queue;
+ struct mutex mtx;
+};
+
+struct dtv_frontend_properties {
+
+ /* Cache State */
+ u32 state;
+
+ u32 frequency;
+ fe_modulation_t modulation;
+
+ fe_sec_voltage_t voltage;
+ fe_sec_tone_mode_t sectone;
+ fe_spectral_inversion_t inversion;
+ fe_code_rate_t fec_inner;
+ fe_transmit_mode_t transmission_mode;
+ u32 bandwidth_hz; /* 0 = AUTO */
+ fe_guard_interval_t guard_interval;
+ fe_hierarchy_t hierarchy;
+ u32 symbol_rate;
+ fe_code_rate_t code_rate_HP;
+ fe_code_rate_t code_rate_LP;
+
+ fe_pilot_t pilot;
+ fe_rolloff_t rolloff;
+
+ fe_delivery_system_t delivery_system;
+};
+
+struct dvb_frontend {
+ struct dvb_frontend_ops ops;
+ struct dvb_adapter *dvb;
+ void *demodulator_priv;
+ void *tuner_priv;
+ void *frontend_priv;
+ void *sec_priv;
+ void *analog_demod_priv;
+ struct dtv_frontend_properties dtv_property_cache;
+#define DVB_FRONTEND_COMPONENT_TUNER 0
+ int (*callback)(void *adapter_priv, int component, int cmd, int arg);
+ int id;
+};
+
+extern int dvb_register_frontend(struct dvb_adapter *dvb,
+ struct dvb_frontend *fe);
+
+extern int dvb_unregister_frontend(struct dvb_frontend *fe);
+
+extern void dvb_frontend_detach(struct dvb_frontend *fe);
+
+extern void dvb_frontend_reinitialise(struct dvb_frontend *fe);
+
+extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec);
+extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime);
+
+#endif
diff --git a/v4l/kernel-2.6.28/dvb_net.h b/v4l/kernel-2.6.28/dvb_net.h
new file mode 100644
index 0000000..3a3126c
--- /dev/null
+++ b/v4l/kernel-2.6.28/dvb_net.h
@@ -0,0 +1,47 @@
+/*
+ * dvb_net.h
+ *
+ * Copyright (C) 2001 Ralph Metzler for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_NET_H_
+#define _DVB_NET_H_
+
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/inetdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/skbuff.h>
+
+#include "dvbdev.h"
+
+#define DVB_NET_DEVICES_MAX 10
+
+struct dvb_net {
+ struct dvb_device *dvbdev;
+ struct net_device *device[DVB_NET_DEVICES_MAX];
+ int state[DVB_NET_DEVICES_MAX];
+ unsigned int exit:1;
+ struct dmx_demux *demux;
+};
+
+
+void dvb_net_release(struct dvb_net *);
+int dvb_net_init(struct dvb_adapter *, struct dvb_net *, struct dmx_demux *);
+
+#endif
diff --git a/v4l/kernel-2.6.28/dvb_ringbuffer.h b/v4l/kernel-2.6.28/dvb_ringbuffer.h
new file mode 100644
index 0000000..41f04da
--- /dev/null
+++ b/v4l/kernel-2.6.28/dvb_ringbuffer.h
@@ -0,0 +1,186 @@
+/*
+ *
+ * dvb_ringbuffer.h: ring buffer implementation for the dvb driver
+ *
+ * Copyright (C) 2003 Oliver Endriss
+ * Copyright (C) 2004 Andrew de Quincey
+ *
+ * based on code originally found in av7110.c & dvb_ci.c:
+ * Copyright (C) 1999-2003 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _DVB_RINGBUFFER_H_
+#define _DVB_RINGBUFFER_H_
+
+#include <linux/spinlock.h>
+#include <linux/wait.h>
+
+struct dvb_ringbuffer {
+ u8 *data;
+ ssize_t size;
+ ssize_t pread;
+ ssize_t pwrite;
+ int error;
+
+ wait_queue_head_t queue;
+ spinlock_t lock;
+};
+
+#define DVB_RINGBUFFER_PKTHDRSIZE 3
+
+
+/*
+** Notes:
+** ------
+** (1) For performance reasons read and write routines don't check buffer sizes
+** and/or number of bytes free/available. This has to be done before these
+** routines are called. For example:
+**
+** *** write <buflen> bytes ***
+** free = dvb_ringbuffer_free(rbuf);
+** if (free >= buflen)
+** count = dvb_ringbuffer_write(rbuf, buffer, buflen);
+** else
+** ...
+**
+** *** read min. 1000, max. <bufsize> bytes ***
+** avail = dvb_ringbuffer_avail(rbuf);
+** if (avail >= 1000)
+** count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize));
+** else
+** ...
+**
+** (2) If there is exactly one reader and one writer, there is no need
+** to lock read or write operations.
+** Two or more readers must be locked against each other.
+** Flushing the buffer counts as a read operation.
+** Resetting the buffer counts as a read and write operation.
+** Two or more writers must be locked against each other.
+*/
+
+/* initialize ring buffer, lock and queue */
+extern void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data, size_t len);
+
+/* test whether buffer is empty */
+extern int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf);
+
+/* return the number of free bytes in the buffer */
+extern ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf);
+
+/* return the number of bytes waiting in the buffer */
+extern ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf);
+
+
+/*
+** Reset the read and write pointers to zero and flush the buffer
+** This counts as a read and write operation
+*/
+extern void dvb_ringbuffer_reset(struct dvb_ringbuffer *rbuf);
+
+
+/* read routines & macros */
+/* ---------------------- */
+/* flush buffer */
+extern void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf);
+
+/* flush buffer protected by spinlock and wake-up waiting task(s) */
+extern void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf);
+
+/* peek at byte <offs> in the buffer */
+#define DVB_RINGBUFFER_PEEK(rbuf,offs) \
+ (rbuf)->data[((rbuf)->pread+(offs))%(rbuf)->size]
+
+/* advance read ptr by <num> bytes */
+#define DVB_RINGBUFFER_SKIP(rbuf,num) \
+ (rbuf)->pread=((rbuf)->pread+(num))%(rbuf)->size
+
+/*
+** read <len> bytes from ring buffer into <buf>
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_read_user(struct dvb_ringbuffer *rbuf,
+ u8 __user *buf, size_t len);
+extern void dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf,
+ u8 *buf, size_t len);
+
+
+/* write routines & macros */
+/* ----------------------- */
+/* write single byte to ring buffer */
+#define DVB_RINGBUFFER_WRITE_BYTE(rbuf,byte) \
+ { (rbuf)->data[(rbuf)->pwrite]=(byte); \
+ (rbuf)->pwrite=((rbuf)->pwrite+1)%(rbuf)->size; }
+/*
+** write <len> bytes to ring buffer
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf,
+ size_t len);
+
+
+/**
+ * Write a packet into the ringbuffer.
+ *
+ * <rbuf> Ringbuffer to write to.
+ * <buf> Buffer to write.
+ * <len> Length of buffer (currently limited to 65535 bytes max).
+ * returns Number of bytes written, or -EFAULT, -ENOMEM, -EVINAL.
+ */
+extern ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8* buf,
+ size_t len);
+
+/**
+ * Read from a packet in the ringbuffer. Note: unlike dvb_ringbuffer_read(), this
+ * does NOT update the read pointer in the ringbuffer. You must use
+ * dvb_ringbuffer_pkt_dispose() to mark a packet as no longer required.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ * <offset> Offset into packet to read from.
+ * <buf> Destination buffer for data.
+ * <len> Size of destination buffer.
+ * <usermem> Set to 1 if <buf> is in userspace.
+ * returns Number of bytes read, or -EFAULT.
+ */
+extern ssize_t dvb_ringbuffer_pkt_read_user(struct dvb_ringbuffer *rbuf, size_t idx,
+ int offset, u8 __user *buf, size_t len);
+extern ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx,
+ int offset, u8 *buf, size_t len);
+
+/**
+ * Dispose of a packet in the ring buffer.
+ *
+ * <rbuf> Ring buffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ */
+extern void dvb_ringbuffer_pkt_dispose(struct dvb_ringbuffer *rbuf, size_t idx);
+
+/**
+ * Get the index of the next packet in a ringbuffer.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Previous packet index, or -1 to return the first packet index.
+ * <pktlen> On success, will be updated to contain the length of the packet in bytes.
+ * returns Packet index (if >=0), or -1 if no packets available.
+ */
+extern ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf, size_t idx, size_t* pktlen);
+
+
+#endif /* _DVB_RINGBUFFER_H_ */
diff --git a/v4l/kernel-2.6.28/dvbdev.h b/v4l/kernel-2.6.28/dvbdev.h
new file mode 100644
index 0000000..574e336
--- /dev/null
+++ b/v4l/kernel-2.6.28/dvbdev.h
@@ -0,0 +1,143 @@
+/*
+ * dvbdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBDEV_H_
+#define _DVBDEV_H_
+
+#include <linux/types.h>
+#include <linux/poll.h>
+#include <linux/fs.h>
+#include <linux/list.h>
+#include <linux/smp_lock.h>
+
+#define DVB_MAJOR 212
+
+#define DVB_MAX_ADAPTERS 8
+
+#define DVB_UNSET (-1)
+
+#define DVB_DEVICE_VIDEO 0
+#define DVB_DEVICE_AUDIO 1
+#define DVB_DEVICE_SEC 2
+#define DVB_DEVICE_FRONTEND 3
+#define DVB_DEVICE_DEMUX 4
+#define DVB_DEVICE_DVR 5
+#define DVB_DEVICE_CA 6
+#define DVB_DEVICE_NET 7
+#define DVB_DEVICE_OSD 8
+
+#define DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr) \
+ static short adapter_nr[] = \
+ {[0 ... (DVB_MAX_ADAPTERS - 1)] = DVB_UNSET }; \
+ module_param_array(adapter_nr, short, NULL, 0444); \
+ MODULE_PARM_DESC(adapter_nr, "DVB adapter numbers")
+
+struct dvb_adapter {
+ int num;
+ struct list_head list_head;
+ struct list_head device_list;
+ const char *name;
+ u8 proposed_mac [6];
+ void* priv;
+
+ struct device *device;
+
+ struct module *module;
+
+ int mfe_shared; /* indicates mutually exclusive frontends */
+ struct dvb_device *mfe_dvbdev; /* frontend device in use */
+ struct mutex mfe_lock; /* access lock for thread creation */
+};
+
+
+struct dvb_device {
+ struct list_head list_head;
+ struct file_operations *fops;
+ struct dvb_adapter *adapter;
+ int type;
+ u32 id;
+
+ /* in theory, 'users' can vanish now,
+ but I don't want to change too much now... */
+ int readers;
+ int writers;
+ int users;
+
+ wait_queue_head_t wait_queue;
+ /* don't really need those !? -- FIXME: use video_usercopy */
+ int (*kernel_ioctl)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg);
+
+ void *priv;
+};
+
+
+extern int dvb_register_adapter(struct dvb_adapter *adap, const char *name,
+ struct module *module, struct device *device,
+ short *adapter_nums);
+extern int dvb_unregister_adapter (struct dvb_adapter *adap);
+
+extern int dvb_register_device (struct dvb_adapter *adap,
+ struct dvb_device **pdvbdev,
+ const struct dvb_device *template,
+ void *priv,
+ int type);
+
+extern void dvb_unregister_device (struct dvb_device *dvbdev);
+
+extern int dvb_generic_open (struct inode *inode, struct file *file);
+extern int dvb_generic_release (struct inode *inode, struct file *file);
+extern int dvb_generic_ioctl (struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg);
+
+/* we don't mess with video_usercopy() any more,
+we simply define out own dvb_usercopy(), which will hopefully become
+generic_usercopy() someday... */
+
+extern int dvb_usercopy(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg,
+ int (*func)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg));
+
+/** generic DVB attach function. */
+#ifdef CONFIG_MEDIA_ATTACH
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ void *__r = NULL; \
+ typeof(&FUNCTION) __a = symbol_request(FUNCTION); \
+ if (__a) { \
+ __r = (void *) __a(ARGS); \
+ if (__r == NULL) \
+ symbol_put(FUNCTION); \
+ } else { \
+ printk(KERN_ERR "DVB: Unable to find symbol "#FUNCTION"()\n"); \
+ } \
+ __r; \
+})
+
+#else
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ FUNCTION(ARGS); \
+})
+
+#endif
+
+#endif /* #ifndef _DVBDEV_H_ */
diff --git a/v4l/kernel-2.6.29/demux.h b/v4l/kernel-2.6.29/demux.h
new file mode 100644
index 0000000..eb91fd8
--- /dev/null
+++ b/v4l/kernel-2.6.29/demux.h
@@ -0,0 +1,280 @@
+/*
+ * demux.h
+ *
+ * Copyright (c) 2002 Convergence GmbH
+ *
+ * based on code:
+ * Copyright (c) 2000 Nokia Research Center
+ * Tampere, FINLAND
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __DEMUX_H
+#define __DEMUX_H
+
+#include <linux/types.h>
+#include <linux/errno.h>
+#include <linux/list.h>
+#include <linux/time.h>
+#include <linux/dvb/dmx.h>
+
+/*--------------------------------------------------------------------------*/
+/* Common definitions */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * DMX_MAX_FILTER_SIZE: Maximum length (in bytes) of a section/PES filter.
+ */
+
+#ifndef DMX_MAX_FILTER_SIZE
+#define DMX_MAX_FILTER_SIZE 18
+#endif
+
+/*
+ * DMX_MAX_SECFEED_SIZE: Maximum length (in bytes) of a private section feed filter.
+ */
+
+#ifndef DMX_MAX_SECTION_SIZE
+#define DMX_MAX_SECTION_SIZE 4096
+#endif
+#ifndef DMX_MAX_SECFEED_SIZE
+#define DMX_MAX_SECFEED_SIZE (DMX_MAX_SECTION_SIZE + 188)
+#endif
+
+
+/*
+ * enum dmx_success: Success codes for the Demux Callback API.
+ */
+
+enum dmx_success {
+ DMX_OK = 0, /* Received Ok */
+ DMX_LENGTH_ERROR, /* Incorrect length */
+ DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */
+ DMX_CRC_ERROR, /* Incorrect CRC */
+ DMX_FRAME_ERROR, /* Frame alignment error */
+ DMX_FIFO_ERROR, /* Receiver FIFO overrun */
+ DMX_MISSED_ERROR /* Receiver missed packet */
+} ;
+
+/*--------------------------------------------------------------------------*/
+/* TS packet reception */
+/*--------------------------------------------------------------------------*/
+
+/* TS filter type for set() */
+
+#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */
+#define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS
+ payload (<=184 bytes per packet) to callback */
+#define TS_DECODER 4 /* send stream to built-in decoder (if present) */
+#define TS_DEMUX 8 /* in case TS_PACKET is set, send the TS to
+ the demux device, not to the dvr device */
+
+/* PES type for filters which write to built-in decoder */
+/* these should be kept identical to the types in dmx.h */
+
+enum dmx_ts_pes
+{ /* also send packets to decoder (if it exists) */
+ DMX_TS_PES_AUDIO0,
+ DMX_TS_PES_VIDEO0,
+ DMX_TS_PES_TELETEXT0,
+ DMX_TS_PES_SUBTITLE0,
+ DMX_TS_PES_PCR0,
+
+ DMX_TS_PES_AUDIO1,
+ DMX_TS_PES_VIDEO1,
+ DMX_TS_PES_TELETEXT1,
+ DMX_TS_PES_SUBTITLE1,
+ DMX_TS_PES_PCR1,
+
+ DMX_TS_PES_AUDIO2,
+ DMX_TS_PES_VIDEO2,
+ DMX_TS_PES_TELETEXT2,
+ DMX_TS_PES_SUBTITLE2,
+ DMX_TS_PES_PCR2,
+
+ DMX_TS_PES_AUDIO3,
+ DMX_TS_PES_VIDEO3,
+ DMX_TS_PES_TELETEXT3,
+ DMX_TS_PES_SUBTITLE3,
+ DMX_TS_PES_PCR3,
+
+ DMX_TS_PES_OTHER
+};
+
+#define DMX_TS_PES_AUDIO DMX_TS_PES_AUDIO0
+#define DMX_TS_PES_VIDEO DMX_TS_PES_VIDEO0
+#define DMX_TS_PES_TELETEXT DMX_TS_PES_TELETEXT0
+#define DMX_TS_PES_SUBTITLE DMX_TS_PES_SUBTITLE0
+#define DMX_TS_PES_PCR DMX_TS_PES_PCR0
+
+
+struct dmx_ts_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux *parent; /* Back-pointer */
+ void *priv; /* Pointer to private data of the API client */
+ int (*set) (struct dmx_ts_feed *feed,
+ u16 pid,
+ int type,
+ enum dmx_ts_pes pes_type,
+ size_t circular_buffer_size,
+ struct timespec timeout);
+ int (*start_filtering) (struct dmx_ts_feed* feed);
+ int (*stop_filtering) (struct dmx_ts_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Section reception */
+/*--------------------------------------------------------------------------*/
+
+struct dmx_section_filter {
+ u8 filter_value [DMX_MAX_FILTER_SIZE];
+ u8 filter_mask [DMX_MAX_FILTER_SIZE];
+ u8 filter_mode [DMX_MAX_FILTER_SIZE];
+ struct dmx_section_feed* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+};
+
+struct dmx_section_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+
+ int check_crc;
+ u32 crc_val;
+
+ u8 *secbuf;
+ u8 secbuf_base[DMX_MAX_SECFEED_SIZE];
+ u16 secbufp, seclen, tsfeedp;
+
+ int (*set) (struct dmx_section_feed* feed,
+ u16 pid,
+ size_t circular_buffer_size,
+ int check_crc);
+ int (*allocate_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter** filter);
+ int (*release_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter* filter);
+ int (*start_filtering) (struct dmx_section_feed* feed);
+ int (*stop_filtering) (struct dmx_section_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Callback functions */
+/*--------------------------------------------------------------------------*/
+
+typedef int (*dmx_ts_cb) ( const u8 * buffer1,
+ size_t buffer1_length,
+ const u8 * buffer2,
+ size_t buffer2_length,
+ struct dmx_ts_feed* source,
+ enum dmx_success success);
+
+typedef int (*dmx_section_cb) ( const u8 * buffer1,
+ size_t buffer1_len,
+ const u8 * buffer2,
+ size_t buffer2_len,
+ struct dmx_section_filter * source,
+ enum dmx_success success);
+
+/*--------------------------------------------------------------------------*/
+/* DVB Front-End */
+/*--------------------------------------------------------------------------*/
+
+enum dmx_frontend_source {
+ DMX_MEMORY_FE,
+ DMX_FRONTEND_0,
+ DMX_FRONTEND_1,
+ DMX_FRONTEND_2,
+ DMX_FRONTEND_3,
+ DMX_STREAM_0, /* external stream input, e.g. LVDS */
+ DMX_STREAM_1,
+ DMX_STREAM_2,
+ DMX_STREAM_3
+};
+
+struct dmx_frontend {
+ struct list_head connectivity_list; /* List of front-ends that can
+ be connected to a particular
+ demux */
+ enum dmx_frontend_source source;
+};
+
+/*--------------------------------------------------------------------------*/
+/* MPEG-2 TS Demux */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * Flags OR'ed in the capabilities field of struct dmx_demux.
+ */
+
+#define DMX_TS_FILTERING 1
+#define DMX_PES_FILTERING 2
+#define DMX_SECTION_FILTERING 4
+#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */
+#define DMX_CRC_CHECKING 16
+#define DMX_TS_DESCRAMBLING 32
+
+/*
+ * Demux resource type identifier.
+*/
+
+/*
+ * DMX_FE_ENTRY(): Casts elements in the list of registered
+ * front-ends from the generic type struct list_head
+ * to the type * struct dmx_frontend
+ *.
+*/
+
+#define DMX_FE_ENTRY(list) list_entry(list, struct dmx_frontend, connectivity_list)
+
+struct dmx_demux {
+ u32 capabilities; /* Bitfield of capability flags */
+ struct dmx_frontend* frontend; /* Front-end connected to the demux */
+ void* priv; /* Pointer to private data of the API client */
+ int (*open) (struct dmx_demux* demux);
+ int (*close) (struct dmx_demux* demux);
+ int (*write) (struct dmx_demux* demux, const char __user *buf, size_t count);
+ int (*allocate_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed** feed,
+ dmx_ts_cb callback);
+ int (*release_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed* feed);
+ int (*allocate_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed** feed,
+ dmx_section_cb callback);
+ int (*release_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed* feed);
+ int (*add_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*remove_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ struct list_head* (*get_frontends) (struct dmx_demux* demux);
+ int (*connect_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*disconnect_frontend) (struct dmx_demux* demux);
+
+ int (*get_pes_pids) (struct dmx_demux* demux, u16 *pids);
+
+ int (*get_caps) (struct dmx_demux* demux, struct dmx_caps *caps);
+
+ int (*set_source) (struct dmx_demux* demux, const dmx_source_t *src);
+
+ int (*get_stc) (struct dmx_demux* demux, unsigned int num,
+ u64 *stc, unsigned int *base);
+};
+
+#endif /* #ifndef __DEMUX_H */
diff --git a/v4l/kernel-2.6.29/dmxdev.h b/v4l/kernel-2.6.29/dmxdev.h
new file mode 100644
index 0000000..29746e7
--- /dev/null
+++ b/v4l/kernel-2.6.29/dmxdev.h
@@ -0,0 +1,110 @@
+/*
+ * dmxdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DMXDEV_H_
+#define _DMXDEV_H_
+
+#include <linux/types.h>
+#include <linux/spinlock.h>
+#include <linux/kernel.h>
+#include <linux/timer.h>
+#include <linux/wait.h>
+#include <linux/fs.h>
+#include <linux/string.h>
+#include <linux/mutex.h>
+
+#include <linux/dvb/dmx.h>
+
+#include "dvbdev.h"
+#include "demux.h"
+#include "dvb_ringbuffer.h"
+
+enum dmxdev_type {
+ DMXDEV_TYPE_NONE,
+ DMXDEV_TYPE_SEC,
+ DMXDEV_TYPE_PES,
+};
+
+enum dmxdev_state {
+ DMXDEV_STATE_FREE,
+ DMXDEV_STATE_ALLOCATED,
+ DMXDEV_STATE_SET,
+ DMXDEV_STATE_GO,
+ DMXDEV_STATE_DONE,
+ DMXDEV_STATE_TIMEDOUT
+};
+
+struct dmxdev_filter {
+ union {
+ struct dmx_section_filter *sec;
+ } filter;
+
+ union {
+ struct dmx_ts_feed *ts;
+ struct dmx_section_feed *sec;
+ } feed;
+
+ union {
+ struct dmx_sct_filter_params sec;
+ struct dmx_pes_filter_params pes;
+ } params;
+
+ enum dmxdev_type type;
+ enum dmxdev_state state;
+ struct dmxdev *dev;
+ struct dvb_ringbuffer buffer;
+
+ struct mutex mutex;
+
+ /* only for sections */
+ struct timer_list timer;
+ int todo;
+ u8 secheader[3];
+};
+
+
+struct dmxdev {
+ struct dvb_device *dvbdev;
+ struct dvb_device *dvr_dvbdev;
+
+ struct dmxdev_filter *filter;
+ struct dmx_demux *demux;
+
+ int filternum;
+ int capabilities;
+
+ unsigned int exit:1;
+#define DMXDEV_CAP_DUPLEX 1
+ struct dmx_frontend *dvr_orig_fe;
+
+ struct dvb_ringbuffer dvr_buffer;
+#define DVR_BUFFER_SIZE (10*188*1024)
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+
+int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *);
+void dvb_dmxdev_release(struct dmxdev *dmxdev);
+
+#endif /* _DMXDEV_H_ */
diff --git a/v4l/kernel-2.6.29/dvb-pll.h b/v4l/kernel-2.6.29/dvb-pll.h
new file mode 100644
index 0000000..05239f5
--- /dev/null
+++ b/v4l/kernel-2.6.29/dvb-pll.h
@@ -0,0 +1,52 @@
+/*
+ * descriptions + helper functions for simple dvb plls.
+ */
+
+#ifndef __DVB_PLL_H__
+#define __DVB_PLL_H__
+
+#include <linux/i2c.h>
+#include "dvb_frontend.h"
+
+#define DVB_PLL_UNDEFINED 0
+#define DVB_PLL_THOMSON_DTT7579 1
+#define DVB_PLL_THOMSON_DTT759X 2
+#define DVB_PLL_LG_Z201 3
+#define DVB_PLL_UNKNOWN_1 4
+#define DVB_PLL_TUA6010XS 5
+#define DVB_PLL_ENV57H1XD5 6
+#define DVB_PLL_TUA6034 7
+#define DVB_PLL_TDA665X 8
+#define DVB_PLL_TDED4 9
+#define DVB_PLL_TDHU2 10
+#define DVB_PLL_SAMSUNG_TBMV 11
+#define DVB_PLL_PHILIPS_SD1878_TDA8261 12
+#define DVB_PLL_OPERA1 13
+#define DVB_PLL_SAMSUNG_DTOS403IH102A 14
+
+/**
+ * Attach a dvb-pll to the supplied frontend structure.
+ *
+ * @param fe Frontend to attach to.
+ * @param pll_addr i2c address of the PLL (if used).
+ * @param i2c i2c adapter to use (set to NULL if not used).
+ * @param pll_desc_id dvb_pll_desc to use.
+ * @return Frontend pointer on success, NULL on failure
+ */
+#if defined(CONFIG_DVB_PLL) || (defined(CONFIG_DVB_PLL_MODULE) && defined(MODULE))
+extern struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ unsigned int pll_desc_id);
+#else
+static inline struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ unsigned int pll_desc_id)
+{
+ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
+ return NULL;
+}
+#endif
+
+#endif
diff --git a/v4l/kernel-2.6.29/dvb-usb-ids.h b/v4l/kernel-2.6.29/dvb-usb-ids.h
new file mode 100644
index 0000000..7380b94
--- /dev/null
+++ b/v4l/kernel-2.6.29/dvb-usb-ids.h
@@ -0,0 +1,237 @@
+/* dvb-usb-ids.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de) see
+ * dvb-usb-init.c for copyright information.
+ *
+ * a header file containing define's for the USB device supported by the
+ * various drivers.
+ */
+#ifndef _DVB_USB_IDS_H_
+#define _DVB_USB_IDS_H_
+
+/* Vendor IDs */
+#define USB_VID_ADSTECH 0x06e1
+#define USB_VID_AFATECH 0x15a4
+#define USB_VID_ALCOR_MICRO 0x058f
+#define USB_VID_ALINK 0x05e3
+#define USB_VID_AMT 0x1c73
+#define USB_VID_ANCHOR 0x0547
+#define USB_VID_ANSONIC 0x10b9
+#define USB_VID_ANUBIS_ELECTRONIC 0x10fd
+#define USB_VID_ASUS 0x0b05
+#define USB_VID_AVERMEDIA 0x07ca
+#define USB_VID_COMPRO 0x185b
+#define USB_VID_COMPRO_UNK 0x145f
+#define USB_VID_CONEXANT 0x0572
+#define USB_VID_CYPRESS 0x04b4
+#define USB_VID_DIBCOM 0x10b8
+#define USB_VID_DPOSH 0x1498
+#define USB_VID_DVICO 0x0fe9
+#define USB_VID_EMPIA 0xeb1a
+#define USB_VID_GENPIX 0x09c0
+#define USB_VID_GRANDTEC 0x5032
+#define USB_VID_HANFTEK 0x15f4
+#define USB_VID_HAUPPAUGE 0x2040
+#define USB_VID_HYPER_PALTEK 0x1025
+#define USB_VID_KWORLD 0xeb2a
+#define USB_VID_KWORLD_2 0x1b80
+#define USB_VID_KYE 0x0458
+#define USB_VID_LEADTEK 0x0413
+#define USB_VID_LITEON 0x04ca
+#define USB_VID_MEDION 0x1660
+#define USB_VID_MIGLIA 0x18f3
+#define USB_VID_MSI 0x0db0
+#define USB_VID_MSI_2 0x1462
+#define USB_VID_OPERA1 0x695c
+#define USB_VID_PINNACLE 0x2304
+#define USB_VID_TECHNOTREND 0x0b48
+#define USB_VID_TERRATEC 0x0ccd
+#define USB_VID_TELESTAR 0x10b9
+#define USB_VID_VISIONPLUS 0x13d3
+#define USB_VID_TWINHAN 0x1822
+#define USB_VID_ULTIMA_ELECTRONIC 0x05d8
+#define USB_VID_UNIWILL 0x1584
+#define USB_VID_WIDEVIEW 0x14aa
+#define USB_VID_GIGABYTE 0x1044
+#define USB_VID_YUAN 0x1164
+#define USB_VID_XTENSIONS 0x1ae7
+
+/* Product IDs */
+#define USB_PID_ADSTECH_USB2_COLD 0xa333
+#define USB_PID_ADSTECH_USB2_WARM 0xa334
+#define USB_PID_AFATECH_AF9005 0x9020
+#define USB_PID_AFATECH_AF9015_9015 0x9015
+#define USB_PID_AFATECH_AF9015_9016 0x9016
+#define USB_VID_ALINK_DTU 0xf170
+#define USB_PID_ANSONIC_DVBT_USB 0x6000
+#define USB_PID_ANYSEE 0x861f
+#define USB_PID_AZUREWAVE_AD_TU700 0x3237
+#define USB_PID_AVERMEDIA_DVBT_USB_COLD 0x0001
+#define USB_PID_AVERMEDIA_DVBT_USB_WARM 0x0002
+#define USB_PID_AVERMEDIA_DVBT_USB2_COLD 0xa800
+#define USB_PID_AVERMEDIA_DVBT_USB2_WARM 0xa801
+#define USB_PID_COMPRO_DVBU2000_COLD 0xd000
+#define USB_PID_COMPRO_DVBU2000_WARM 0xd001
+#define USB_PID_COMPRO_DVBU2000_UNK_COLD 0x010c
+#define USB_PID_COMPRO_DVBU2000_UNK_WARM 0x010d
+#define USB_PID_COMPRO_VIDEOMATE_U500 0x1e78
+#define USB_PID_COMPRO_VIDEOMATE_U500_PC 0x1e80
+#define USB_PID_CONEXANT_D680_DMB 0x86d6
+#define USB_PID_DIBCOM_HOOK_DEFAULT 0x0064
+#define USB_PID_DIBCOM_HOOK_DEFAULT_REENUM 0x0065
+#define USB_PID_DIBCOM_MOD3000_COLD 0x0bb8
+#define USB_PID_DIBCOM_MOD3000_WARM 0x0bb9
+#define USB_PID_DIBCOM_MOD3001_COLD 0x0bc6
+#define USB_PID_DIBCOM_MOD3001_WARM 0x0bc7
+#define USB_PID_DIBCOM_STK7700P 0x1e14
+#define USB_PID_DIBCOM_STK7700P_PC 0x1e78
+#define USB_PID_DIBCOM_STK7700D 0x1ef0
+#define USB_PID_DIBCOM_STK7700_U7000 0x7001
+#define USB_PID_DIBCOM_STK7070P 0x1ebc
+#define USB_PID_DIBCOM_STK7070PD 0x1ebe
+#define USB_PID_DIBCOM_ANCHOR_2135_COLD 0x2131
+#define USB_PID_DPOSH_M9206_COLD 0x9206
+#define USB_PID_DPOSH_M9206_WARM 0xa090
+#define USB_PID_UNIWILL_STK7700P 0x6003
+#define USB_PID_GRANDTEC_DVBT_USB_COLD 0x0fa0
+#define USB_PID_GRANDTEC_DVBT_USB_WARM 0x0fa1
+#define USB_PID_KWORLD_399U 0xe399
+#define USB_PID_KWORLD_PC160_2T 0xc160
+#define USB_PID_KWORLD_VSTREAM_COLD 0x17de
+#define USB_PID_KWORLD_VSTREAM_WARM 0x17df
+#define USB_PID_TERRATEC_CINERGY_T_USB_XE 0x0055
+#define USB_PID_TERRATEC_CINERGY_T_USB_XE_REV2 0x0069
+#define USB_PID_TWINHAN_VP7041_COLD 0x3201
+#define USB_PID_TWINHAN_VP7041_WARM 0x3202
+#define USB_PID_TWINHAN_VP7020_COLD 0x3203
+#define USB_PID_TWINHAN_VP7020_WARM 0x3204
+#define USB_PID_TWINHAN_VP7045_COLD 0x3205
+#define USB_PID_TWINHAN_VP7045_WARM 0x3206
+#define USB_PID_TWINHAN_VP7021_COLD 0x3207
+#define USB_PID_TWINHAN_VP7021_WARM 0x3208
+#define USB_PID_TINYTWIN 0x3226
+#define USB_PID_DNTV_TINYUSB2_COLD 0x3223
+#define USB_PID_DNTV_TINYUSB2_WARM 0x3224
+#define USB_PID_ULTIMA_TVBOX_COLD 0x8105
+#define USB_PID_ULTIMA_TVBOX_WARM 0x8106
+#define USB_PID_ULTIMA_TVBOX_AN2235_COLD 0x8107
+#define USB_PID_ULTIMA_TVBOX_AN2235_WARM 0x8108
+#define USB_PID_ULTIMA_TVBOX_ANCHOR_COLD 0x2235
+#define USB_PID_ULTIMA_TVBOX_USB2_COLD 0x8109
+#define USB_PID_ULTIMA_TVBOX_USB2_WARM 0x810a
+#define USB_PID_ARTEC_T14_COLD 0x810b
+#define USB_PID_ARTEC_T14_WARM 0x810c
+#define USB_PID_ARTEC_T14BR 0x810f
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_COLD 0x8613
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_WARM 0x1002
+#define USB_PID_UNK_HYPER_PALTEK_COLD 0x005e
+#define USB_PID_UNK_HYPER_PALTEK_WARM 0x005f
+#define USB_PID_HANFTEK_UMT_010_COLD 0x0001
+#define USB_PID_HANFTEK_UMT_010_WARM 0x0015
+#define USB_PID_DTT200U_COLD 0x0201
+#define USB_PID_DTT200U_WARM 0x0301
+#define USB_PID_WT220U_ZAP250_COLD 0x0220
+#define USB_PID_WT220U_COLD 0x0222
+#define USB_PID_WT220U_WARM 0x0221
+#define USB_PID_WT220U_FC_COLD 0x0225
+#define USB_PID_WT220U_FC_WARM 0x0226
+#define USB_PID_WT220U_ZL0353_COLD 0x022a
+#define USB_PID_WT220U_ZL0353_WARM 0x022b
+#define USB_PID_WINTV_NOVA_T_USB2_COLD 0x9300
+#define USB_PID_WINTV_NOVA_T_USB2_WARM 0x9301
+#define USB_PID_HAUPPAUGE_NOVA_T_500 0x9941
+#define USB_PID_HAUPPAUGE_NOVA_T_500_2 0x9950
+#define USB_PID_HAUPPAUGE_NOVA_T_500_3 0x8400
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK 0x7050
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK_2 0x7060
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK_3 0x7070
+#define USB_PID_HAUPPAUGE_MYTV_T 0x7080
+#define USB_PID_HAUPPAUGE_NOVA_TD_STICK 0x9580
+#define USB_PID_HAUPPAUGE_NOVA_TD_STICK_52009 0x5200
+#define USB_PID_AVERMEDIA_EXPRESS 0xb568
+#define USB_PID_AVERMEDIA_VOLAR 0xa807
+#define USB_PID_AVERMEDIA_VOLAR_2 0xb808
+#define USB_PID_AVERMEDIA_VOLAR_A868R 0xa868
+#define USB_PID_AVERMEDIA_MCE_USB_M038 0x1228
+#define USB_PID_AVERMEDIA_HYBRID_ULTRA_USB_M039R 0x0039
+#define USB_PID_AVERMEDIA_HYBRID_ULTRA_USB_M039R_ATSC 0x1039
+#define USB_PID_AVERMEDIA_HYBRID_ULTRA_USB_M039R_DVBT 0x2039
+#define USB_PID_AVERMEDIA_VOLAR_X 0xa815
+#define USB_PID_AVERMEDIA_VOLAR_X_2 0x8150
+#define USB_PID_AVERMEDIA_A309 0xa309
+#define USB_PID_TECHNOTREND_CONNECT_S2400 0x3006
+#define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY 0x005a
+#define USB_PID_TERRATEC_CINERGY_HT_USB_XE 0x0058
+#define USB_PID_TERRATEC_CINERGY_HT_EXPRESS 0x0060
+#define USB_PID_TERRATEC_CINERGY_T_XXS 0x0078
+#define USB_PID_PINNACLE_EXPRESSCARD_320CX 0x022e
+#define USB_PID_PINNACLE_PCTV2000E 0x022c
+#define USB_PID_PINNACLE_PCTV_DVB_T_FLASH 0x0228
+#define USB_PID_PINNACLE_PCTV_DUAL_DIVERSITY_DVB_T 0x0229
+#define USB_PID_PINNACLE_PCTV71E 0x022b
+#define USB_PID_PINNACLE_PCTV72E 0x0236
+#define USB_PID_PINNACLE_PCTV73E 0x0237
+#define USB_PID_PINNACLE_PCTV801E 0x023a
+#define USB_PID_PINNACLE_PCTV801E_SE 0x023b
+#define USB_PID_PCTV_200E 0x020e
+#define USB_PID_PCTV_400E 0x020f
+#define USB_PID_PCTV_450E 0x0222
+#define USB_PID_NEBULA_DIGITV 0x0201
+#define USB_PID_DVICO_BLUEBIRD_LGDT 0xd820
+#define USB_PID_DVICO_BLUEBIRD_LG064F_COLD 0xd500
+#define USB_PID_DVICO_BLUEBIRD_LG064F_WARM 0xd501
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_COLD 0xdb00
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_WARM 0xdb01
+#define USB_PID_DVICO_BLUEBIRD_TH7579_COLD 0xdb10
+#define USB_PID_DVICO_BLUEBIRD_TH7579_WARM 0xdb11
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_COLD 0xdb50
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_WARM 0xdb51
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_COLD 0xdb58
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_WARM 0xdb59
+#define USB_PID_DVICO_BLUEBIRD_DUAL_4 0xdb78
+#define USB_PID_DVICO_BLUEBIRD_DUAL_4_REV_2 0xdb98
+#define USB_PID_DVICO_BLUEBIRD_DVB_T_NANO_2 0xdb70
+#define USB_PID_DVICO_BLUEBIRD_DVB_T_NANO_2_NFW_WARM 0xdb71
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_COLD 0xdb54
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_WARM 0xdb55
+#define USB_PID_MEDION_MD95700 0x0932
+#define USB_PID_MSI_MEGASKY580 0x5580
+#define USB_PID_MSI_MEGASKY580_55801 0x5581
+#define USB_PID_KYE_DVB_T_COLD 0x701e
+#define USB_PID_KYE_DVB_T_WARM 0x701f
+#define USB_PID_LITEON_DVB_T_COLD 0xf000
+#define USB_PID_LITEON_DVB_T_WARM 0xf001
+#define USB_PID_DIGIVOX_MINI_SL_COLD 0xe360
+#define USB_PID_DIGIVOX_MINI_SL_WARM 0xe361
+#define USB_PID_GRANDTEC_DVBT_USB2_COLD 0x0bc6
+#define USB_PID_GRANDTEC_DVBT_USB2_WARM 0x0bc7
+#define USB_PID_WINFAST_DTV_DONGLE_COLD 0x6025
+#define USB_PID_WINFAST_DTV_DONGLE_WARM 0x6026
+#define USB_PID_WINFAST_DTV_DONGLE_STK7700P 0x6f00
+#define USB_PID_WINFAST_DTV_DONGLE_STK7700P_2 0x6f01
+#define USB_PID_WINFAST_DTV_DONGLE_GOLD 0x6029
+#define USB_PID_GENPIX_8PSK_REV_1_COLD 0x0200
+#define USB_PID_GENPIX_8PSK_REV_1_WARM 0x0201
+#define USB_PID_GENPIX_8PSK_REV_2 0x0202
+#define USB_PID_GENPIX_SKYWALKER_1 0x0203
+#define USB_PID_GENPIX_SKYWALKER_CW3K 0x0204
+#define USB_PID_SIGMATEK_DVB_110 0x6610
+#define USB_PID_MSI_DIGI_VOX_MINI_II 0x1513
+#define USB_PID_MSI_DIGIVOX_DUO 0x8801
+#define USB_PID_OPERA1_COLD 0x2830
+#define USB_PID_OPERA1_WARM 0x3829
+#define USB_PID_LIFEVIEW_TV_WALKER_TWIN_COLD 0x0514
+#define USB_PID_LIFEVIEW_TV_WALKER_TWIN_WARM 0x0513
+#define USB_PID_GIGABYTE_U7000 0x7001
+#define USB_PID_GIGABYTE_U8000 0x7002
+#define USB_PID_ASUS_U3000 0x171f
+#define USB_PID_ASUS_U3000H 0x1736
+#define USB_PID_ASUS_U3100 0x173f
+#define USB_PID_YUAN_EC372S 0x1edc
+#define USB_PID_YUAN_STK7700PH 0x1f08
+#define USB_PID_DW2102 0x2102
+#define USB_PID_XTENSIONS_XD_380 0x0381
+#define USB_PID_TELESTAR_STARSTICK_2 0x8000
+#define USB_PID_MSI_DIGI_VOX_MINI_III 0x8807
+
+#endif
diff --git a/v4l/kernel-2.6.29/dvb-usb.h b/v4l/kernel-2.6.29/dvb-usb.h
new file mode 100644
index 0000000..b1de0f7
--- /dev/null
+++ b/v4l/kernel-2.6.29/dvb-usb.h
@@ -0,0 +1,400 @@
+/* dvb-usb.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * the headerfile, all dvb-usb-drivers have to include.
+ *
+ * TODO: clean-up the structures for unused fields and update the comments
+ */
+#ifndef __DVB_USB_H__
+#define __DVB_USB_H__
+
+#include <linux/input.h>
+#include <linux/usb.h>
+#include <linux/firmware.h>
+#include <linux/mutex.h>
+
+#include "dvb_frontend.h"
+#include "dvb_demux.h"
+#include "dvb_net.h"
+#include "dmxdev.h"
+
+#include "dvb-pll.h"
+
+#include "dvb-usb-ids.h"
+
+/* debug */
+#ifdef CONFIG_DVB_USB_DEBUG
+#define dprintk(var,level,args...) \
+ do { if ((var & level)) { printk(args); } } while (0)
+
+#define debug_dump(b,l,func) {\
+ int loop_; \
+ for (loop_ = 0; loop_ < l; loop_++) func("%02x ", b[loop_]); \
+ func("\n");\
+}
+#define DVB_USB_DEBUG_STATUS
+#else
+#define dprintk(args...)
+#define debug_dump(b,l,func)
+
+#define DVB_USB_DEBUG_STATUS " (debugging is not enabled)"
+
+#endif
+
+/* generic log methods - taken from usb.h */
+#ifndef DVB_USB_LOG_PREFIX
+ #define DVB_USB_LOG_PREFIX "dvb-usb (please define a log prefix)"
+#endif
+
+#undef err
+#define err(format, arg...) printk(KERN_ERR DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef info
+#define info(format, arg...) printk(KERN_INFO DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef warn
+#define warn(format, arg...) printk(KERN_WARNING DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+
+/**
+ * struct dvb_usb_device_description - name and its according USB IDs
+ * @name: real name of the box, regardless which DVB USB device class is in use
+ * @cold_ids: array of struct usb_device_id which describe the device in
+ * pre-firmware state
+ * @warm_ids: array of struct usb_device_id which describe the device in
+ * post-firmware state
+ *
+ * Each DVB USB device class can have one or more actual devices, this struct
+ * assigns a name to it.
+ */
+struct dvb_usb_device_description {
+ const char *name;
+
+#define DVB_USB_ID_MAX_NUM 15
+ struct usb_device_id *cold_ids[DVB_USB_ID_MAX_NUM];
+ struct usb_device_id *warm_ids[DVB_USB_ID_MAX_NUM];
+};
+
+/**
+ * struct dvb_usb_rc_key - a remote control key and its input-event
+ * @custom: the vendor/custom part of the key
+ * @data: the actual key part
+ * @event: the input event assigned to key identified by custom and data
+ */
+struct dvb_usb_rc_key {
+ u8 custom,data;
+ u32 event;
+};
+
+struct dvb_usb_device;
+struct dvb_usb_adapter;
+struct usb_data_stream;
+
+/**
+ * Properties of USB streaming - TODO this structure should be somewhere else
+ * describes the kind of USB transfer used for data-streaming.
+ * (BULK or ISOC)
+ */
+struct usb_data_stream_properties {
+#define USB_BULK 1
+#define USB_ISOC 2
+ int type;
+ int count;
+ int endpoint;
+
+ union {
+ struct {
+ int buffersize; /* per URB */
+ } bulk;
+ struct {
+ int framesperurb;
+ int framesize;
+ int interval;
+ } isoc;
+ } u;
+};
+
+/**
+ * struct dvb_usb_adapter_properties - properties of a dvb-usb-adapter.
+ * A DVB-USB-Adapter is basically a dvb_adapter which is present on a USB-device.
+ * @caps: capabilities of the DVB USB device.
+ * @pid_filter_count: number of PID filter position in the optional hardware
+ * PID-filter.
+ * @streaming_ctrl: called to start and stop the MPEG2-TS streaming of the
+ * device (not URB submitting/killing).
+ * @pid_filter_ctrl: called to en/disable the PID filter, if any.
+ * @pid_filter: called to set/unset a PID for filtering.
+ * @frontend_attach: called to attach the possible frontends (fill fe-field
+ * of struct dvb_usb_device).
+ * @tuner_attach: called to attach the correct tuner and to fill pll_addr,
+ * pll_desc and pll_init_buf of struct dvb_usb_device).
+ * @stream: configuration of the USB streaming
+ */
+struct dvb_usb_adapter_properties {
+#define DVB_USB_ADAP_HAS_PID_FILTER 0x01
+#define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
+#define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
+#define DVB_USB_ADAP_RECEIVES_204_BYTE_TS 0x08
+ int caps;
+ int pid_filter_count;
+
+ int (*streaming_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
+
+ int (*frontend_attach) (struct dvb_usb_adapter *);
+ int (*tuner_attach) (struct dvb_usb_adapter *);
+
+ struct usb_data_stream_properties stream;
+
+ int size_of_priv;
+};
+
+/**
+ * struct dvb_usb_device_properties - properties of a dvb-usb-device
+ * @usb_ctrl: which USB device-side controller is in use. Needed for firmware
+ * download.
+ * @firmware: name of the firmware file.
+ * @download_firmware: called to download the firmware when the usb_ctrl is
+ * DEVICE_SPECIFIC.
+ * @no_reconnect: device doesn't do a reconnect after downloading the firmware,
+ * so do the warm initialization right after it
+ *
+ * @size_of_priv: how many bytes shall be allocated for the private field
+ * of struct dvb_usb_device.
+ *
+ * @power_ctrl: called to enable/disable power of the device.
+ * @read_mac_address: called to read the MAC address of the device.
+ * @identify_state: called to determine the state (cold or warm), when it
+ * is not distinguishable by the USB IDs.
+ *
+ * @rc_key_map: a hard-wired array of struct dvb_usb_rc_key (NULL to disable
+ * remote control handling).
+ * @rc_key_map_size: number of items in @rc_key_map.
+ * @rc_query: called to query an event event.
+ * @rc_interval: time in ms between two queries.
+ *
+ * @i2c_algo: i2c_algorithm if the device has I2CoverUSB.
+ *
+ * @generic_bulk_ctrl_endpoint: most of the DVB USB devices have a generic
+ * endpoint which received control messages with bulk transfers. When this
+ * is non-zero, one can use dvb_usb_generic_rw and dvb_usb_generic_write-
+ * helper functions.
+ *
+ * @num_device_descs: number of struct dvb_usb_device_description in @devices
+ * @devices: array of struct dvb_usb_device_description compatibles with these
+ * properties.
+ */
+#define MAX_NO_OF_ADAPTER_PER_DEVICE 2
+struct dvb_usb_device_properties {
+
+#define DVB_USB_IS_AN_I2C_ADAPTER 0x01
+ int caps;
+
+#define DEVICE_SPECIFIC 0
+#define CYPRESS_AN2135 1
+#define CYPRESS_AN2235 2
+#define CYPRESS_FX2 3
+ int usb_ctrl;
+ int (*download_firmware) (struct usb_device *, const struct firmware *);
+ const char firmware[FIRMWARE_NAME_MAX];
+ int no_reconnect;
+
+ int size_of_priv;
+
+ int num_adapters;
+ struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ int (*power_ctrl) (struct dvb_usb_device *, int);
+ int (*read_mac_address) (struct dvb_usb_device *, u8 []);
+ int (*identify_state) (struct usb_device *, struct dvb_usb_device_properties *,
+ struct dvb_usb_device_description **, int *);
+
+/* remote control properties */
+#define REMOTE_NO_KEY_PRESSED 0x00
+#define REMOTE_KEY_PRESSED 0x01
+#define REMOTE_KEY_REPEAT 0x02
+ struct dvb_usb_rc_key *rc_key_map;
+ int rc_key_map_size;
+ int (*rc_query) (struct dvb_usb_device *, u32 *, int *);
+ int rc_interval;
+
+ struct i2c_algorithm *i2c_algo;
+
+ int generic_bulk_ctrl_endpoint;
+
+ int num_device_descs;
+ struct dvb_usb_device_description devices[9];
+};
+
+/**
+ * struct usb_data_stream - generic object of an USB stream
+ * @buf_num: number of buffer allocated.
+ * @buf_size: size of each buffer in buf_list.
+ * @buf_list: array containing all allocate buffers for streaming.
+ * @dma_addr: list of dma_addr_t for each buffer in buf_list.
+ *
+ * @urbs_initialized: number of URBs initialized.
+ * @urbs_submitted: number of URBs submitted.
+ */
+#define MAX_NO_URBS_FOR_DATA_STREAM 10
+struct usb_data_stream {
+ struct usb_device *udev;
+ struct usb_data_stream_properties props;
+
+#define USB_STATE_INIT 0x00
+#define USB_STATE_URB_BUF 0x01
+ int state;
+
+ void (*complete) (struct usb_data_stream *, u8 *, size_t);
+
+ struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ int buf_num;
+ unsigned long buf_size;
+ u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
+
+ int urbs_initialized;
+ int urbs_submitted;
+
+ void *user_priv;
+};
+
+/**
+ * struct dvb_usb_adapter - a DVB adapter on a USB device
+ * @id: index of this adapter (starting with 0).
+ *
+ * @feedcount: number of reqested feeds (used for streaming-activation)
+ * @pid_filtering: is hardware pid_filtering used or not.
+ *
+ * @pll_addr: I2C address of the tuner for programming
+ * @pll_init: array containing the initialization buffer
+ * @pll_desc: pointer to the appropriate struct dvb_pll_desc
+ * @tuner_pass_ctrl: called to (de)activate tuner passthru of the demod or the board
+ *
+ * @dvb_adap: device's dvb_adapter.
+ * @dmxdev: device's dmxdev.
+ * @demux: device's software demuxer.
+ * @dvb_net: device's dvb_net interfaces.
+ * @dvb_frontend: device's frontend.
+ * @max_feed_count: how many feeds can be handled simultaneously by this
+ * device
+ *
+ * @fe_init: rerouted frontend-init (wakeup) function.
+ * @fe_sleep: rerouted frontend-sleep function.
+ *
+ * @stream: the usb data stream.
+ */
+struct dvb_usb_adapter {
+ struct dvb_usb_device *dev;
+ struct dvb_usb_adapter_properties props;
+
+#define DVB_USB_ADAP_STATE_INIT 0x000
+#define DVB_USB_ADAP_STATE_DVB 0x001
+ int state;
+
+ u8 id;
+
+ int feedcount;
+ int pid_filtering;
+
+ /* dvb */
+ struct dvb_adapter dvb_adap;
+ struct dmxdev dmxdev;
+ struct dvb_demux demux;
+ struct dvb_net dvb_net;
+ struct dvb_frontend *fe;
+ int max_feed_count;
+
+ int (*fe_init) (struct dvb_frontend *);
+ int (*fe_sleep) (struct dvb_frontend *);
+
+ struct usb_data_stream stream;
+
+ void *priv;
+};
+
+/**
+ * struct dvb_usb_device - object of a DVB USB device
+ * @props: copy of the struct dvb_usb_properties this device belongs to.
+ * @desc: pointer to the device's struct dvb_usb_device_description.
+ * @state: initialization and runtime state of the device.
+ *
+ * @powered: indicated whether the device is power or not.
+ * Powered is in/decremented for each call to modify the state.
+ * @udev: pointer to the device's struct usb_device.
+ *
+ * @usb_mutex: semaphore of USB control messages (reading needs two messages)
+ * @i2c_mutex: semaphore for i2c-transfers
+ *
+ * @i2c_adap: device's i2c_adapter if it uses I2CoverUSB
+ *
+ * @rc_input_dev: input device for the remote control.
+ * @rc_query_work: struct work_struct frequent rc queries
+ * @last_event: last triggered event
+ * @last_state: last state (no, pressed, repeat)
+ * @owner: owner of the dvb_adapter
+ * @priv: private data of the actual driver (allocate by dvb-usb, size defined
+ * in size_of_priv of dvb_usb_properties).
+ */
+struct dvb_usb_device {
+ struct dvb_usb_device_properties props;
+ struct dvb_usb_device_description *desc;
+
+ struct usb_device *udev;
+
+#define DVB_USB_STATE_INIT 0x000
+#define DVB_USB_STATE_I2C 0x001
+#define DVB_USB_STATE_DVB 0x002
+#define DVB_USB_STATE_REMOTE 0x004
+ int state;
+
+ int powered;
+
+ /* locking */
+ struct mutex usb_mutex;
+
+ /* i2c */
+ struct mutex i2c_mutex;
+ struct i2c_adapter i2c_adap;
+
+ int num_adapters_initialized;
+ struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ /* remote control */
+ struct input_dev *rc_input_dev;
+ char rc_phys[64];
+ struct delayed_work rc_query_work;
+ u32 last_event;
+ int last_state;
+
+ struct module *owner;
+
+ void *priv;
+};
+
+extern int dvb_usb_device_init(struct usb_interface *,
+ struct dvb_usb_device_properties *,
+ struct module *, struct dvb_usb_device **,
+ short *adapter_nums);
+extern void dvb_usb_device_exit(struct usb_interface *);
+
+/* the generic read/write method for device control */
+extern int dvb_usb_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16,int);
+extern int dvb_usb_generic_write(struct dvb_usb_device *, u8 *, u16);
+
+/* commonly used remote control parsing */
+extern int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *, u8[], u32 *, int *);
+
+/* commonly used firmware download types and function */
+struct hexline {
+ u8 len;
+ u32 addr;
+ u8 type;
+ u8 data[255];
+ u8 chk;
+};
+extern int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type);
+extern int dvb_usb_get_hexline(const struct firmware *fw, struct hexline *hx, int *pos);
+
+
+#endif
diff --git a/v4l/kernel-2.6.29/dvb_demux.h b/v4l/kernel-2.6.29/dvb_demux.h
new file mode 100644
index 0000000..2c5f915
--- /dev/null
+++ b/v4l/kernel-2.6.29/dvb_demux.h
@@ -0,0 +1,140 @@
+/*
+ * dvb_demux.h: DVB kernel demux API
+ *
+ * Copyright (C) 2000-2001 Marcus Metzler & Ralph Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_DEMUX_H_
+#define _DVB_DEMUX_H_
+
+#include <linux/time.h>
+#include <linux/timer.h>
+#include <linux/spinlock.h>
+#include <linux/mutex.h>
+
+#include "demux.h"
+
+#define DMX_TYPE_TS 0
+#define DMX_TYPE_SEC 1
+#define DMX_TYPE_PES 2
+
+#define DMX_STATE_FREE 0
+#define DMX_STATE_ALLOCATED 1
+#define DMX_STATE_SET 2
+#define DMX_STATE_READY 3
+#define DMX_STATE_GO 4
+
+#define DVB_DEMUX_MASK_MAX 18
+
+struct dvb_demux_filter {
+ struct dmx_section_filter filter;
+ u8 maskandmode[DMX_MAX_FILTER_SIZE];
+ u8 maskandnotmode[DMX_MAX_FILTER_SIZE];
+ int doneq;
+
+ struct dvb_demux_filter *next;
+ struct dvb_demux_feed *feed;
+ int index;
+ int state;
+ int type;
+
+ u16 hw_handle;
+ struct timer_list timer;
+};
+
+#define DMX_FEED_ENTRY(pos) list_entry(pos, struct dvb_demux_feed, list_head)
+
+struct dvb_demux_feed {
+ union {
+ struct dmx_ts_feed ts;
+ struct dmx_section_feed sec;
+ } feed;
+
+ union {
+ dmx_ts_cb ts;
+ dmx_section_cb sec;
+ } cb;
+
+ struct dvb_demux *demux;
+ void *priv;
+ int type;
+ int state;
+ u16 pid;
+ u8 *buffer;
+ int buffer_size;
+
+ struct timespec timeout;
+ struct dvb_demux_filter *filter;
+
+ int ts_type;
+ enum dmx_ts_pes pes_type;
+
+ int cc;
+ int pusi_seen; /* prevents feeding of garbage from previous section */
+
+ u16 peslen;
+
+ struct list_head list_head;
+ unsigned int index; /* a unique index for each feed (can be used as hardware pid filter index) */
+};
+
+struct dvb_demux {
+ struct dmx_demux dmx;
+ void *priv;
+ int filternum;
+ int feednum;
+ int (*start_feed)(struct dvb_demux_feed *feed);
+ int (*stop_feed)(struct dvb_demux_feed *feed);
+ int (*write_to_decoder)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ u32 (*check_crc32)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ void (*memcopy)(struct dvb_demux_feed *feed, u8 *dst,
+ const u8 *src, size_t len);
+
+ int users;
+#define MAX_DVB_DEMUX_USERS 10
+ struct dvb_demux_filter *filter;
+ struct dvb_demux_feed *feed;
+
+ struct list_head frontend_list;
+
+ struct dvb_demux_feed *pesfilter[DMX_TS_PES_OTHER];
+ u16 pids[DMX_TS_PES_OTHER];
+ int playing;
+ int recording;
+
+#define DMX_MAX_PID 0x2000
+ struct list_head feed_list;
+ u8 tsbuf[204];
+ int tsbufp;
+
+ struct mutex mutex;
+ spinlock_t lock;
+};
+
+int dvb_dmx_init(struct dvb_demux *dvbdemux);
+void dvb_dmx_release(struct dvb_demux *dvbdemux);
+void dvb_dmx_swfilter_packets(struct dvb_demux *dvbdmx, const u8 *buf,
+ size_t count);
+void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count);
+void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf,
+ size_t count);
+
+#endif /* _DVB_DEMUX_H_ */
diff --git a/v4l/kernel-2.6.29/dvb_frontend.h b/v4l/kernel-2.6.29/dvb_frontend.h
new file mode 100644
index 0000000..db4a63b
--- /dev/null
+++ b/v4l/kernel-2.6.29/dvb_frontend.h
@@ -0,0 +1,240 @@
+/*
+ * dvb_frontend.h
+ *
+ * Copyright (C) 2001 convergence integrated media GmbH
+ * Copyright (C) 2004 convergence GmbH
+ *
+ * Written by Ralph Metzler
+ * Overhauled by Holger Waechtler
+ * Kernel I2C stuff by Michael Hunold <hunold@convergence.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_FRONTEND_H_
+#define _DVB_FRONTEND_H_
+
+#include <linux/types.h>
+#include <linux/sched.h>
+#include <linux/ioctl.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/delay.h>
+#include <linux/mutex.h>
+
+#include <linux/dvb/frontend.h>
+
+#include "dvbdev.h"
+
+struct dvb_frontend_tune_settings {
+ int min_delay_ms;
+ int step_size;
+ int max_drift;
+ struct dvb_frontend_parameters parameters;
+};
+
+struct dvb_frontend;
+
+struct dvb_tuner_info {
+ char name[128];
+
+ u32 frequency_min;
+ u32 frequency_max;
+ u32 frequency_step;
+
+ u32 bandwidth_min;
+ u32 bandwidth_max;
+ u32 bandwidth_step;
+};
+
+struct analog_parameters {
+ unsigned int frequency;
+ unsigned int mode;
+ unsigned int audmode;
+ u64 std;
+};
+
+struct dvb_tuner_ops {
+
+ struct dvb_tuner_info info;
+
+ int (*release)(struct dvb_frontend *fe);
+ int (*init)(struct dvb_frontend *fe);
+ int (*sleep)(struct dvb_frontend *fe);
+
+ /** This is for simple PLLs - set all parameters in one go. */
+ int (*set_params)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
+ int (*set_analog_params)(struct dvb_frontend *fe, struct analog_parameters *p);
+
+ /** This is support for demods like the mt352 - fills out the supplied buffer with what to write. */
+ int (*calc_regs)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p, u8 *buf, int buf_len);
+
+ /** This is to allow setting tuner-specific configs */
+ int (*set_config)(struct dvb_frontend *fe, void *priv_cfg);
+
+ int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency);
+ int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth);
+
+#define TUNER_STATUS_LOCKED 1
+#define TUNER_STATUS_STEREO 2
+ int (*get_status)(struct dvb_frontend *fe, u32 *status);
+ int (*get_rf_strength)(struct dvb_frontend *fe, u16 *strength);
+
+ /** These are provided seperately from set_params in order to facilitate silicon
+ * tuners which require sophisticated tuning loops, controlling each parameter seperately. */
+ int (*set_frequency)(struct dvb_frontend *fe, u32 frequency);
+ int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
+};
+
+struct analog_demod_info {
+ char *name;
+};
+
+struct analog_demod_ops {
+
+ struct analog_demod_info info;
+
+ void (*set_params)(struct dvb_frontend *fe,
+ struct analog_parameters *params);
+ int (*has_signal)(struct dvb_frontend *fe);
+ int (*is_stereo)(struct dvb_frontend *fe);
+ int (*get_afc)(struct dvb_frontend *fe);
+ void (*tuner_status)(struct dvb_frontend *fe);
+ void (*standby)(struct dvb_frontend *fe);
+ void (*release)(struct dvb_frontend *fe);
+ int (*i2c_gate_ctrl)(struct dvb_frontend *fe, int enable);
+
+ /** This is to allow setting tuner-specific configuration */
+ int (*set_config)(struct dvb_frontend *fe, void *priv_cfg);
+};
+
+struct dvb_frontend_ops {
+
+ struct dvb_frontend_info info;
+
+ void (*release)(struct dvb_frontend* fe);
+ void (*release_sec)(struct dvb_frontend* fe);
+
+ int (*init)(struct dvb_frontend* fe);
+ int (*sleep)(struct dvb_frontend* fe);
+
+ int (*write)(struct dvb_frontend* fe, u8* buf, int len);
+
+ /* if this is set, it overrides the default swzigzag */
+ int (*tune)(struct dvb_frontend* fe,
+ struct dvb_frontend_parameters* params,
+ unsigned int mode_flags,
+ unsigned int *delay,
+ fe_status_t *status);
+ /* get frontend tuning algorithm from the module */
+ int (*get_frontend_algo)(struct dvb_frontend *fe);
+
+ /* these two are only used for the swzigzag code */
+ int (*set_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+ int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings);
+
+ int (*get_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+
+ int (*read_status)(struct dvb_frontend* fe, fe_status_t* status);
+ int (*read_ber)(struct dvb_frontend* fe, u32* ber);
+ int (*read_signal_strength)(struct dvb_frontend* fe, u16* strength);
+ int (*read_snr)(struct dvb_frontend* fe, u16* snr);
+ int (*read_ucblocks)(struct dvb_frontend* fe, u32* ucblocks);
+
+ int (*diseqc_reset_overload)(struct dvb_frontend* fe);
+ int (*diseqc_send_master_cmd)(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd);
+ int (*diseqc_recv_slave_reply)(struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply);
+ int (*diseqc_send_burst)(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd);
+ int (*set_tone)(struct dvb_frontend* fe, fe_sec_tone_mode_t tone);
+ int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
+ int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg);
+ int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
+ int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
+ int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);
+
+ struct dvb_tuner_ops tuner_ops;
+ struct analog_demod_ops analog_ops;
+
+ int (*set_property)(struct dvb_frontend* fe, struct dtv_property* tvp);
+ int (*get_property)(struct dvb_frontend* fe, struct dtv_property* tvp);
+};
+
+#define MAX_EVENT 8
+
+struct dvb_fe_events {
+ struct dvb_frontend_event events[MAX_EVENT];
+ int eventw;
+ int eventr;
+ int overflow;
+ wait_queue_head_t wait_queue;
+ struct mutex mtx;
+};
+
+struct dtv_frontend_properties {
+
+ /* Cache State */
+ u32 state;
+
+ u32 frequency;
+ fe_modulation_t modulation;
+
+ fe_sec_voltage_t voltage;
+ fe_sec_tone_mode_t sectone;
+ fe_spectral_inversion_t inversion;
+ fe_code_rate_t fec_inner;
+ fe_transmit_mode_t transmission_mode;
+ u32 bandwidth_hz; /* 0 = AUTO */
+ fe_guard_interval_t guard_interval;
+ fe_hierarchy_t hierarchy;
+ u32 symbol_rate;
+ fe_code_rate_t code_rate_HP;
+ fe_code_rate_t code_rate_LP;
+
+ fe_pilot_t pilot;
+ fe_rolloff_t rolloff;
+
+ fe_delivery_system_t delivery_system;
+};
+
+struct dvb_frontend {
+ struct dvb_frontend_ops ops;
+ struct dvb_adapter *dvb;
+ void *demodulator_priv;
+ void *tuner_priv;
+ void *frontend_priv;
+ void *sec_priv;
+ void *analog_demod_priv;
+ struct dtv_frontend_properties dtv_property_cache;
+#define DVB_FRONTEND_COMPONENT_TUNER 0
+ int (*callback)(void *adapter_priv, int component, int cmd, int arg);
+ int id;
+};
+
+extern int dvb_register_frontend(struct dvb_adapter *dvb,
+ struct dvb_frontend *fe);
+
+extern int dvb_unregister_frontend(struct dvb_frontend *fe);
+
+extern void dvb_frontend_detach(struct dvb_frontend *fe);
+
+extern void dvb_frontend_reinitialise(struct dvb_frontend *fe);
+
+extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec);
+extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime);
+
+#endif
diff --git a/v4l/kernel-2.6.29/dvb_net.h b/v4l/kernel-2.6.29/dvb_net.h
new file mode 100644
index 0000000..3a3126c
--- /dev/null
+++ b/v4l/kernel-2.6.29/dvb_net.h
@@ -0,0 +1,47 @@
+/*
+ * dvb_net.h
+ *
+ * Copyright (C) 2001 Ralph Metzler for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_NET_H_
+#define _DVB_NET_H_
+
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/inetdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/skbuff.h>
+
+#include "dvbdev.h"
+
+#define DVB_NET_DEVICES_MAX 10
+
+struct dvb_net {
+ struct dvb_device *dvbdev;
+ struct net_device *device[DVB_NET_DEVICES_MAX];
+ int state[DVB_NET_DEVICES_MAX];
+ unsigned int exit:1;
+ struct dmx_demux *demux;
+};
+
+
+void dvb_net_release(struct dvb_net *);
+int dvb_net_init(struct dvb_adapter *, struct dvb_net *, struct dmx_demux *);
+
+#endif
diff --git a/v4l/kernel-2.6.29/dvb_ringbuffer.h b/v4l/kernel-2.6.29/dvb_ringbuffer.h
new file mode 100644
index 0000000..41f04da
--- /dev/null
+++ b/v4l/kernel-2.6.29/dvb_ringbuffer.h
@@ -0,0 +1,186 @@
+/*
+ *
+ * dvb_ringbuffer.h: ring buffer implementation for the dvb driver
+ *
+ * Copyright (C) 2003 Oliver Endriss
+ * Copyright (C) 2004 Andrew de Quincey
+ *
+ * based on code originally found in av7110.c & dvb_ci.c:
+ * Copyright (C) 1999-2003 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _DVB_RINGBUFFER_H_
+#define _DVB_RINGBUFFER_H_
+
+#include <linux/spinlock.h>
+#include <linux/wait.h>
+
+struct dvb_ringbuffer {
+ u8 *data;
+ ssize_t size;
+ ssize_t pread;
+ ssize_t pwrite;
+ int error;
+
+ wait_queue_head_t queue;
+ spinlock_t lock;
+};
+
+#define DVB_RINGBUFFER_PKTHDRSIZE 3
+
+
+/*
+** Notes:
+** ------
+** (1) For performance reasons read and write routines don't check buffer sizes
+** and/or number of bytes free/available. This has to be done before these
+** routines are called. For example:
+**
+** *** write <buflen> bytes ***
+** free = dvb_ringbuffer_free(rbuf);
+** if (free >= buflen)
+** count = dvb_ringbuffer_write(rbuf, buffer, buflen);
+** else
+** ...
+**
+** *** read min. 1000, max. <bufsize> bytes ***
+** avail = dvb_ringbuffer_avail(rbuf);
+** if (avail >= 1000)
+** count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize));
+** else
+** ...
+**
+** (2) If there is exactly one reader and one writer, there is no need
+** to lock read or write operations.
+** Two or more readers must be locked against each other.
+** Flushing the buffer counts as a read operation.
+** Resetting the buffer counts as a read and write operation.
+** Two or more writers must be locked against each other.
+*/
+
+/* initialize ring buffer, lock and queue */
+extern void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data, size_t len);
+
+/* test whether buffer is empty */
+extern int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf);
+
+/* return the number of free bytes in the buffer */
+extern ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf);
+
+/* return the number of bytes waiting in the buffer */
+extern ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf);
+
+
+/*
+** Reset the read and write pointers to zero and flush the buffer
+** This counts as a read and write operation
+*/
+extern void dvb_ringbuffer_reset(struct dvb_ringbuffer *rbuf);
+
+
+/* read routines & macros */
+/* ---------------------- */
+/* flush buffer */
+extern void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf);
+
+/* flush buffer protected by spinlock and wake-up waiting task(s) */
+extern void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf);
+
+/* peek at byte <offs> in the buffer */
+#define DVB_RINGBUFFER_PEEK(rbuf,offs) \
+ (rbuf)->data[((rbuf)->pread+(offs))%(rbuf)->size]
+
+/* advance read ptr by <num> bytes */
+#define DVB_RINGBUFFER_SKIP(rbuf,num) \
+ (rbuf)->pread=((rbuf)->pread+(num))%(rbuf)->size
+
+/*
+** read <len> bytes from ring buffer into <buf>
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_read_user(struct dvb_ringbuffer *rbuf,
+ u8 __user *buf, size_t len);
+extern void dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf,
+ u8 *buf, size_t len);
+
+
+/* write routines & macros */
+/* ----------------------- */
+/* write single byte to ring buffer */
+#define DVB_RINGBUFFER_WRITE_BYTE(rbuf,byte) \
+ { (rbuf)->data[(rbuf)->pwrite]=(byte); \
+ (rbuf)->pwrite=((rbuf)->pwrite+1)%(rbuf)->size; }
+/*
+** write <len> bytes to ring buffer
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf,
+ size_t len);
+
+
+/**
+ * Write a packet into the ringbuffer.
+ *
+ * <rbuf> Ringbuffer to write to.
+ * <buf> Buffer to write.
+ * <len> Length of buffer (currently limited to 65535 bytes max).
+ * returns Number of bytes written, or -EFAULT, -ENOMEM, -EVINAL.
+ */
+extern ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8* buf,
+ size_t len);
+
+/**
+ * Read from a packet in the ringbuffer. Note: unlike dvb_ringbuffer_read(), this
+ * does NOT update the read pointer in the ringbuffer. You must use
+ * dvb_ringbuffer_pkt_dispose() to mark a packet as no longer required.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ * <offset> Offset into packet to read from.
+ * <buf> Destination buffer for data.
+ * <len> Size of destination buffer.
+ * <usermem> Set to 1 if <buf> is in userspace.
+ * returns Number of bytes read, or -EFAULT.
+ */
+extern ssize_t dvb_ringbuffer_pkt_read_user(struct dvb_ringbuffer *rbuf, size_t idx,
+ int offset, u8 __user *buf, size_t len);
+extern ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx,
+ int offset, u8 *buf, size_t len);
+
+/**
+ * Dispose of a packet in the ring buffer.
+ *
+ * <rbuf> Ring buffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ */
+extern void dvb_ringbuffer_pkt_dispose(struct dvb_ringbuffer *rbuf, size_t idx);
+
+/**
+ * Get the index of the next packet in a ringbuffer.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Previous packet index, or -1 to return the first packet index.
+ * <pktlen> On success, will be updated to contain the length of the packet in bytes.
+ * returns Packet index (if >=0), or -1 if no packets available.
+ */
+extern ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf, size_t idx, size_t* pktlen);
+
+
+#endif /* _DVB_RINGBUFFER_H_ */
diff --git a/v4l/kernel-2.6.29/dvbdev.h b/v4l/kernel-2.6.29/dvbdev.h
new file mode 100644
index 0000000..574e336
--- /dev/null
+++ b/v4l/kernel-2.6.29/dvbdev.h
@@ -0,0 +1,143 @@
+/*
+ * dvbdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBDEV_H_
+#define _DVBDEV_H_
+
+#include <linux/types.h>
+#include <linux/poll.h>
+#include <linux/fs.h>
+#include <linux/list.h>
+#include <linux/smp_lock.h>
+
+#define DVB_MAJOR 212
+
+#define DVB_MAX_ADAPTERS 8
+
+#define DVB_UNSET (-1)
+
+#define DVB_DEVICE_VIDEO 0
+#define DVB_DEVICE_AUDIO 1
+#define DVB_DEVICE_SEC 2
+#define DVB_DEVICE_FRONTEND 3
+#define DVB_DEVICE_DEMUX 4
+#define DVB_DEVICE_DVR 5
+#define DVB_DEVICE_CA 6
+#define DVB_DEVICE_NET 7
+#define DVB_DEVICE_OSD 8
+
+#define DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr) \
+ static short adapter_nr[] = \
+ {[0 ... (DVB_MAX_ADAPTERS - 1)] = DVB_UNSET }; \
+ module_param_array(adapter_nr, short, NULL, 0444); \
+ MODULE_PARM_DESC(adapter_nr, "DVB adapter numbers")
+
+struct dvb_adapter {
+ int num;
+ struct list_head list_head;
+ struct list_head device_list;
+ const char *name;
+ u8 proposed_mac [6];
+ void* priv;
+
+ struct device *device;
+
+ struct module *module;
+
+ int mfe_shared; /* indicates mutually exclusive frontends */
+ struct dvb_device *mfe_dvbdev; /* frontend device in use */
+ struct mutex mfe_lock; /* access lock for thread creation */
+};
+
+
+struct dvb_device {
+ struct list_head list_head;
+ struct file_operations *fops;
+ struct dvb_adapter *adapter;
+ int type;
+ u32 id;
+
+ /* in theory, 'users' can vanish now,
+ but I don't want to change too much now... */
+ int readers;
+ int writers;
+ int users;
+
+ wait_queue_head_t wait_queue;
+ /* don't really need those !? -- FIXME: use video_usercopy */
+ int (*kernel_ioctl)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg);
+
+ void *priv;
+};
+
+
+extern int dvb_register_adapter(struct dvb_adapter *adap, const char *name,
+ struct module *module, struct device *device,
+ short *adapter_nums);
+extern int dvb_unregister_adapter (struct dvb_adapter *adap);
+
+extern int dvb_register_device (struct dvb_adapter *adap,
+ struct dvb_device **pdvbdev,
+ const struct dvb_device *template,
+ void *priv,
+ int type);
+
+extern void dvb_unregister_device (struct dvb_device *dvbdev);
+
+extern int dvb_generic_open (struct inode *inode, struct file *file);
+extern int dvb_generic_release (struct inode *inode, struct file *file);
+extern int dvb_generic_ioctl (struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg);
+
+/* we don't mess with video_usercopy() any more,
+we simply define out own dvb_usercopy(), which will hopefully become
+generic_usercopy() someday... */
+
+extern int dvb_usercopy(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg,
+ int (*func)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg));
+
+/** generic DVB attach function. */
+#ifdef CONFIG_MEDIA_ATTACH
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ void *__r = NULL; \
+ typeof(&FUNCTION) __a = symbol_request(FUNCTION); \
+ if (__a) { \
+ __r = (void *) __a(ARGS); \
+ if (__r == NULL) \
+ symbol_put(FUNCTION); \
+ } else { \
+ printk(KERN_ERR "DVB: Unable to find symbol "#FUNCTION"()\n"); \
+ } \
+ __r; \
+})
+
+#else
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ FUNCTION(ARGS); \
+})
+
+#endif
+
+#endif /* #ifndef _DVBDEV_H_ */
diff --git a/v4l/kernel-2.6.tmp/compat.h b/v4l/kernel-2.6.tmp/compat.h
new file mode 100644
index 0000000..915ecac
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/compat.h
@@ -0,0 +1,503 @@
+/*
+ * $Id: compat.h,v 1.44 2006/01/15 09:35:16 mchehab Exp $
+ */
+
+#ifndef _COMPAT_H
+#define _COMPAT_H
+
+#include <linux/version.h>
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24)
+#define KERN_CONT ""
+#endif
+
+/* To allow I2C compatibility code to work */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 24)
+#include <linux/i2c-dev.h>
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
+# define set_freezable()
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,18)
+# define minor(x) MINOR(x)
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)
+# define DEVICE_ATTR(a,b,c,d) CLASS_DEVICE_ATTR(a,b,c,d)
+# define device_create_file(a,b) class_device_create_file(a,b)
+# define device_remove_file(a,b) class_device_remove_file(a,b)
+# define device_register(a) class_device_register(a)
+# define device_unregister(a) class_device_unregister(a)
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+# include <linux/moduleparam.h>
+# include <linux/delay.h>
+# define need_resched() (current->need_resched)
+# define work_struct tq_struct
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,19)
+# define BUG_ON(condition) do { if ((condition)!=0) BUG(); } while(0)
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,23)
+# define irqreturn_t void
+# define IRQ_RETVAL(foobar)
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,71)
+# define strlcpy(dest,src,len) strncpy(dest,src,(len)-1)
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
+# define iminor(inode) minor(inode->i_rdev)
+#endif
+
+#if defined(I2C_ADAP_CLASS_TV_ANALOG) && !defined(I2C_CLASS_TV_ANALOG)
+# define I2C_CLASS_TV_ANALOG I2C_ADAP_CLASS_TV_ANALOG
+# define I2C_CLASS_TV_DIGITAL I2C_ADAP_CLASS_TV_DIGITAL
+#endif
+
+#ifndef __pure
+# define __pure __attribute__((pure))
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,9)
+# define __user
+# define __kernel
+# define __iomem
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,11)
+# define pm_message_t u32
+# define pci_choose_state(pci_dev, state) (state)
+# define PCI_D0 (0)
+# define assert_spin_locked(foobar)
+#endif
+
+/* Since v4l-dvb now includes it's own copy of linux/i2c-id.h these
+ are no longer necessary */
+/*
+#if !defined(I2C_ALGO_SAA7134)
+#define I2C_ALGO_SAA7134 I2C_HW_B_BT848
+#endif
+#if !defined(I2C_HW_B_CX2388x)
+# define I2C_HW_B_CX2388x I2C_HW_B_BT848
+#endif
+#if !defined(I2C_HW_SAA7134)
+# define I2C_HW_SAA7134 I2C_ALGO_SAA7134
+#endif
+#if !defined(I2C_HW_SAA7146)
+# define I2C_HW_SAA7146 I2C_ALGO_SAA7146
+#endif
+#if !defined(I2C_HW_B_EM2820)
+#define I2C_HW_B_EM2820 0x99
+#endif
+*/
+
+#ifndef I2C_M_IGNORE_NAK
+# define I2C_M_IGNORE_NAK 0x1000
+#endif
+
+/* v4l-dvb uses an out of kernel copy of i2c-id.h, which does not have
+ some stuff that previous versions of i2c-id.h defined. */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14) && defined(LINUX_I2C_ID_H)
+# define I2C_ALGO_BIT 0x010000
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,9)
+#define __le32 __u32
+#endif
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,7))
+static inline unsigned long msecs_to_jiffies(const unsigned int m)
+{
+#if HZ <= 1000 && !(1000 % HZ)
+ return (m + (1000 / HZ) - 1) / (1000 / HZ);
+#else
+#if HZ > 1000 && !(HZ % 1000)
+ return m * (HZ / 1000);
+#else
+ return (m * HZ + 999) / 1000;
+#endif
+#endif
+}
+static inline unsigned int jiffies_to_msecs(const unsigned long j)
+{
+#if HZ <= 1000 && !(1000 % HZ)
+ return (1000 / HZ) * j;
+#else
+#if HZ > 1000 && !(HZ % 1000)
+ return (j + (HZ / 1000) - 1)/(HZ / 1000);
+#else
+ return (j * 1000) / HZ;
+#endif
+#endif
+}
+static inline void msleep(unsigned int msecs)
+{
+ unsigned long timeout = msecs_to_jiffies(msecs);
+ while (timeout) {
+ set_current_state(TASK_UNINTERRUPTIBLE);
+ timeout = schedule_timeout(timeout);
+ }
+}
+#endif
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) && LINUX_VERSION_CODE < KERNEL_VERSION(2,6,9)
+static inline unsigned long msleep_interruptible(unsigned int msecs)
+{
+ unsigned long timeout = msecs_to_jiffies(msecs);
+
+ while (timeout) {
+ set_current_state(TASK_INTERRUPTIBLE);
+ timeout = schedule_timeout(timeout);
+ }
+ return jiffies_to_msecs(timeout);
+}
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
+/* some keys from 2.6.x which are not (yet?) in 2.4.x */
+# define KEY_PLAY 207
+# define KEY_PRINT 210
+# define KEY_EMAIL 215
+# define KEY_SEARCH 217
+# define KEY_SELECT 0x161
+# define KEY_GOTO 0x162
+# define KEY_INFO 0x166
+# define KEY_CHANNEL 0x16b
+# define KEY_LANGUAGE 0x170
+# define KEY_SUBTITLE 0x172
+# define KEY_ZOOM 0x174
+# define KEY_MODE 0x175
+# define KEY_TV 0x179
+# define KEY_CD 0x17f
+# define KEY_TUNER 0x182
+# define KEY_TEXT 0x184
+# define KEY_DVD 0x185
+# define KEY_AUDIO 0x188
+# define KEY_VIDEO 0x189
+# define KEY_RED 0x18e
+# define KEY_GREEN 0x18f
+# define KEY_YELLOW 0x190
+# define KEY_BLUE 0x191
+# define KEY_CHANNELUP 0x192
+# define KEY_CHANNELDOWN 0x193
+# define KEY_RESTART 0x198
+# define KEY_SHUFFLE 0x19a
+# define KEY_NEXT 0x197
+# define KEY_RADIO 0x181
+# define KEY_PREVIOUS 0x19c
+# define KEY_MHP 0x16f
+# define KEY_EPG 0x16d
+# define KEY_FASTFORWARD 208
+# define KEY_LIST 0x18b
+# define KEY_LAST 0x195
+# define KEY_CLEAR 0x163
+# define KEY_AUX 0x186
+# define KEY_SCREEN 0x177
+# define KEY_PC 0x178
+# define KEY_MEDIA 226
+# define KEY_SLOW 0x199
+# define KEY_OK 0x160
+# define KEY_DIGITS 0x19d
+#endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14)
+# define KEY_SEND 231
+# define KEY_REPLY 232
+# define KEY_FORWARDMAIL 233
+# define KEY_SAVE 234
+# define KEY_DOCUMENTS 235
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+#define container_of(ptr, type, member) ({ \
+ const typeof( ((type *)0)->member ) *__mptr = (ptr); \
+ (type *)( (char *)__mptr - offsetof(type,member) );})
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10)
+#include <linux/mm.h>
+static inline unsigned long vmalloc_to_pfn(void * vmalloc_addr)
+{
+ return page_to_pfn(vmalloc_to_page(vmalloc_addr));
+}
+
+static unsigned long kvirt_to_pa(unsigned long adr)
+{
+ unsigned long kva, ret;
+
+ kva = (unsigned long) page_address(vmalloc_to_page((void *)adr));
+ kva |= adr & (PAGE_SIZE-1); /* restore the offset */
+ ret = __pa(kva);
+ return ret;
+}
+
+#ifndef wait_event_timeout
+#define wait_event_timeout(wq, condition, timeout) \
+({ \
+ long __ret = timeout; \
+ if (!(condition)) \
+ do { \
+ DEFINE_WAIT(__wait); \
+ for (;;) { \
+ prepare_to_wait(&wq, &__wait, TASK_UNINTERRUPTIBLE); \
+ if (condition) \
+ break; \
+ __ret = schedule_timeout(__ret); \
+ if (!__ret) \
+ break; \
+ } \
+ finish_wait(&wq, &__wait); \
+ } while (0); \
+ __ret; \
+})
+#endif
+
+#define remap_pfn_range remap_page_range
+
+#endif
+
+/* vm_insert_page() was added in 2.6.15 */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15) && defined(_LINUX_MM_H)
+static inline int vm_insert_page(struct vm_area_struct *vma,
+ unsigned long addr, struct page *page)
+{
+ return remap_pfn_range(vma, addr, page_to_pfn(page), PAGE_SIZE,
+ vma->vm_page_prot);
+}
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,9)
+#ifndef kcalloc
+#define kcalloc(n,size,flags) \
+({ \
+ void * __ret = NULL; \
+ __ret = kmalloc(n * size, flags); \
+ if (__ret) \
+ memset(__ret, 0, n * size); \
+ __ret; \
+})
+#endif
+#endif
+
+/* try_to_freeze() lost its argument. Must appear after linux/sched.h */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13) && defined(_LINUX_SCHED_H)
+# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
+# define try_to_freeze() try_to_freeze(PF_FREEZE)
+# else
+# define try_to_freeze() (0)
+# endif
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14)
+#ifndef kzalloc
+#define kzalloc(size, flags) \
+({ \
+ void *__ret = kmalloc(size, flags); \
+ if (__ret) \
+ memset(__ret, 0, size); \
+ __ret; \
+})
+#endif
+#endif
+
+/* The class_device system didn't appear until 2.5.69 */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
+#define class_device_create_file(a, b) (0)
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)
+# define class_device_create(a, b, c, d, e, f, g, h) class_simple_device_add(a, c, d, e, f, g, h)
+# define class_device_destroy(a, b) class_simple_device_remove(b)
+# define class_create(a, b) class_simple_create(a, b)
+# define class_destroy(a) class_simple_destroy(a)
+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)
+# define class_device_create(a, b, c, d, e, f, g, h) class_device_create(a, c, d, e, f, g, h)
+#endif
+/* device_create/destroy added in 2.6.18 */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)
+/* on older kernels, class_device_create will in turn be a compat macro */
+# define device_create(a, b, c, d, e, f, g) class_device_create(a, NULL, c, b, d, e, f, g)
+# define device_destroy(a, b) class_device_destroy(a, b)
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)
+# define input_allocate_device() kzalloc(sizeof(struct input_dev),GFP_KERNEL);
+# define input_free_device(input_dev) kfree(input_dev)
+# ifdef _INPUT_H /* input.h must be included _before_ compat.h for this to work */
+ /* input_register_device() was changed to return an error code in 2.6.15 */
+# define input_register_device(x) (input_register_device(x), 0)
+# endif
+#endif
+
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,15)
+#define DEFINE_MUTEX(a) DECLARE_MUTEX(a)
+#define mutex_lock_interruptible(a) down_interruptible(a)
+#define mutex_unlock(a) up(a)
+#define mutex_lock(a) down(a)
+#define mutex_init(a) init_MUTEX(a)
+#define mutex_trylock(a) down_trylock(a)
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14) && defined(_LINUX_SCHED_H)
+static inline signed long __sched
+schedule_timeout_interruptible(signed long timeout)
+{
+ __set_current_state(TASK_INTERRUPTIBLE);
+ return schedule_timeout(timeout);
+}
+#endif
+
+/* New 4GB DMA zone was added in 2.6.15-rc2 */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)
+# define __GFP_DMA32 __GFP_DMA
+#endif
+
+/* setup_timer() helper added 10/31/05, 2.6.15-rc1 */
+/* Need linux/timer.h to be included for struct timer_list */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15) && defined(_LINUX_TIMER_H)
+static inline void setup_timer(struct timer_list * timer,
+ void (*function)(unsigned long),
+ unsigned long data)
+{
+ timer->function = function;
+ timer->data = data;
+ init_timer(timer);
+}
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)
+#define IRQF_SHARED SA_SHIRQ
+#define IRQF_DISABLED SA_INTERRUPT
+#endif
+
+/* linux/usb.h must be included _before_ compat.h for this code to get
+ turned on. We can not just include usb.h here, because there is a
+ lot of code which will not compile if it has usb.h included, due to
+ conflicts with symbol names. */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13) && \
+ defined(__LINUX_USB_H) && defined(_INPUT_H)
+#include <linux/input.h>
+/* Found in linux/usb_input.h in 2.6.13 */
+/* Moved to linux/usb/input.h in 2.6.18 */
+static inline void
+usb_to_input_id(const struct usb_device *dev, struct input_id *id)
+{
+ id->bustype = BUS_USB;
+ id->vendor = le16_to_cpu(dev->descriptor.idVendor);
+ id->product = le16_to_cpu(dev->descriptor.idProduct);
+ id->version = le16_to_cpu(dev->descriptor.bcdDevice);
+}
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
+# define PCIAGP_FAIL 0
+
+#define vmalloc_32_user(a) vmalloc_32(a)
+
+#endif
+
+/* bool type and enum-based definition of true and false was added in 2.6.19 */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
+typedef int bool;
+#define true 1
+#define false 0
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
+#define sony_pic_camera_command(a,b) sonypi_camera_command(a,b)
+
+#define SONY_PIC_COMMAND_SETCAMERAAGC SONYPI_COMMAND_SETCAMERAAGC
+#define SONY_PIC_COMMAND_SETCAMERABRIGHTNESS SONYPI_COMMAND_SETCAMERABRIGHTNESS
+#define SONY_PIC_COMMAND_SETCAMERACOLOR SONYPI_COMMAND_SETCAMERACOLOR
+#define SONY_PIC_COMMAND_SETCAMERACONTRAST SONYPI_COMMAND_SETCAMERACONTRAST
+#define SONY_PIC_COMMAND_SETCAMERAHUE SONYPI_COMMAND_SETCAMERAHUE
+#define SONY_PIC_COMMAND_SETCAMERAPICTURE SONYPI_COMMAND_SETCAMERAPICTURE
+#define SONY_PIC_COMMAND_SETCAMERASHARPNESS SONYPI_COMMAND_SETCAMERASHARPNESS
+#define SONY_PIC_COMMAND_SETCAMERA SONYPI_COMMAND_SETCAMERA
+#endif
+
+/* Parameter to pci_match_device() changed in 2.6.13-rc2 */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13) && defined(LINUX_PCI_H)
+#define pci_match_device(drv, dev) pci_match_device((drv)->id_table, dev)
+#endif
+
+/* pci_dev got a new revision field in 2.6.23-rc1 */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23) && defined(LINUX_PCI_H)
+/* Just make it easier to subsitute pci_dev->revision with
+ * v4l_compat_pci_rev(pci_dev). It's too bad there isn't some kind of context
+ * sensitive macro in C that could do this for us. */
+static inline u8 v4l_compat_pci_rev(struct pci_dev *pci)
+{ u8 rev; pci_read_config_byte(pci, PCI_REVISION_ID, &rev); return rev; }
+#endif
+
+/* ALSA removed a bunch of typedefs and renamed some structs in 2.6.16 */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)
+# ifdef __SOUND_CORE_H
+# define snd_card _snd_card /* struct _snd_card became struct snd_card */
+# define snd_pcm _snd_pcm
+# undef snd_device
+# define snd_device _snd_device
+# endif
+# ifdef __SOUND_PCM_H
+# define snd_pcm_substream _snd_pcm_substream
+# define snd_pcm_hardware _snd_pcm_hardware
+# define snd_pcm_runtime _snd_pcm_runtime
+# define snd_pcm_ops _snd_pcm_ops
+# endif
+# ifdef __SOUND_ASOUND_H
+# define snd_pcm_hw_params sndrv_pcm_hw_params
+# define snd_ctl_elem_info sndrv_ctl_elem_info
+# define snd_ctl_elem_value sndrv_ctl_elem_value
+# endif
+# ifdef __SOUND_CONTROL_H
+# undef snd_kcontrol
+# define snd_kcontrol _snd_kcontrol
+# define snd_kcontrol_new _snd_kcontrol_new
+# endif
+#endif
+
+#if defined(COMPAT_PCM_TO_RATE_BIT) && defined(__SOUND_PCM_H)
+/* New alsa core utility function */
+static inline unsigned int snd_pcm_rate_to_rate_bit(unsigned int rate)
+{
+ static const unsigned int rates[] = { 5512, 8000, 11025, 16000, 22050,
+ 32000, 44100, 48000, 64000, 88200, 96000, 176400, 192000 };
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE(rates); i++)
+ if (rates[i] == rate)
+ return 1u << i;
+ return SNDRV_PCM_RATE_KNOT;
+}
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
+# define task_pid_nr(current) ((current)->pid)
+
+# define sg_init_table(a,b)
+# define sg_page(p) (sg->page)
+# define sg_set_page(sglist,pg,sz,off) \
+do { \
+ struct scatterlist *p=sglist; \
+ p->page = pg; \
+ p->length = sz; \
+ p->offset = off; \
+} while (0)
+#endif
+
+#ifndef BIT_MASK
+# define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG))
+# define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
+#endif
+
+#endif
+/*
+ * Local variables:
+ * c-basic-offset: 8
+ * End:
+ */
diff --git a/v4l/kernel-2.6.tmp/demux.h b/v4l/kernel-2.6.tmp/demux.h
new file mode 100644
index 0000000..0c1d87c
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/demux.h
@@ -0,0 +1,278 @@
+/*
+ * demux.h
+ *
+ * Copyright (c) 2002 Convergence GmbH
+ *
+ * based on code:
+ * Copyright (c) 2000 Nokia Research Center
+ * Tampere, FINLAND
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __DEMUX_H
+#define __DEMUX_H
+
+#include <linux/types.h>
+#include <linux/errno.h>
+#include <linux/list.h>
+#include <linux/time.h>
+#include <linux/dvb/dmx.h>
+
+/*--------------------------------------------------------------------------*/
+/* Common definitions */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * DMX_MAX_FILTER_SIZE: Maximum length (in bytes) of a section/PES filter.
+ */
+
+#ifndef DMX_MAX_FILTER_SIZE
+#define DMX_MAX_FILTER_SIZE 18
+#endif
+
+/*
+ * DMX_MAX_SECFEED_SIZE: Maximum length (in bytes) of a private section feed filter.
+ */
+
+#ifndef DMX_MAX_SECTION_SIZE
+#define DMX_MAX_SECTION_SIZE 4096
+#endif
+#ifndef DMX_MAX_SECFEED_SIZE
+#define DMX_MAX_SECFEED_SIZE (DMX_MAX_SECTION_SIZE + 188)
+#endif
+
+
+/*
+ * enum dmx_success: Success codes for the Demux Callback API.
+ */
+
+enum dmx_success {
+ DMX_OK = 0, /* Received Ok */
+ DMX_LENGTH_ERROR, /* Incorrect length */
+ DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */
+ DMX_CRC_ERROR, /* Incorrect CRC */
+ DMX_FRAME_ERROR, /* Frame alignment error */
+ DMX_FIFO_ERROR, /* Receiver FIFO overrun */
+ DMX_MISSED_ERROR /* Receiver missed packet */
+} ;
+
+/*--------------------------------------------------------------------------*/
+/* TS packet reception */
+/*--------------------------------------------------------------------------*/
+
+/* TS filter type for set() */
+
+#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */
+#define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS
+ payload (<=184 bytes per packet) to callback */
+#define TS_DECODER 4 /* send stream to built-in decoder (if present) */
+
+/* PES type for filters which write to built-in decoder */
+/* these should be kept identical to the types in dmx.h */
+
+enum dmx_ts_pes
+{ /* also send packets to decoder (if it exists) */
+ DMX_TS_PES_AUDIO0,
+ DMX_TS_PES_VIDEO0,
+ DMX_TS_PES_TELETEXT0,
+ DMX_TS_PES_SUBTITLE0,
+ DMX_TS_PES_PCR0,
+
+ DMX_TS_PES_AUDIO1,
+ DMX_TS_PES_VIDEO1,
+ DMX_TS_PES_TELETEXT1,
+ DMX_TS_PES_SUBTITLE1,
+ DMX_TS_PES_PCR1,
+
+ DMX_TS_PES_AUDIO2,
+ DMX_TS_PES_VIDEO2,
+ DMX_TS_PES_TELETEXT2,
+ DMX_TS_PES_SUBTITLE2,
+ DMX_TS_PES_PCR2,
+
+ DMX_TS_PES_AUDIO3,
+ DMX_TS_PES_VIDEO3,
+ DMX_TS_PES_TELETEXT3,
+ DMX_TS_PES_SUBTITLE3,
+ DMX_TS_PES_PCR3,
+
+ DMX_TS_PES_OTHER
+};
+
+#define DMX_TS_PES_AUDIO DMX_TS_PES_AUDIO0
+#define DMX_TS_PES_VIDEO DMX_TS_PES_VIDEO0
+#define DMX_TS_PES_TELETEXT DMX_TS_PES_TELETEXT0
+#define DMX_TS_PES_SUBTITLE DMX_TS_PES_SUBTITLE0
+#define DMX_TS_PES_PCR DMX_TS_PES_PCR0
+
+
+struct dmx_ts_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux *parent; /* Back-pointer */
+ void *priv; /* Pointer to private data of the API client */
+ int (*set) (struct dmx_ts_feed *feed,
+ u16 pid,
+ int type,
+ enum dmx_ts_pes pes_type,
+ size_t circular_buffer_size,
+ struct timespec timeout);
+ int (*start_filtering) (struct dmx_ts_feed* feed);
+ int (*stop_filtering) (struct dmx_ts_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Section reception */
+/*--------------------------------------------------------------------------*/
+
+struct dmx_section_filter {
+ u8 filter_value [DMX_MAX_FILTER_SIZE];
+ u8 filter_mask [DMX_MAX_FILTER_SIZE];
+ u8 filter_mode [DMX_MAX_FILTER_SIZE];
+ struct dmx_section_feed* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+};
+
+struct dmx_section_feed {
+ int is_filtering; /* Set to non-zero when filtering in progress */
+ struct dmx_demux* parent; /* Back-pointer */
+ void* priv; /* Pointer to private data of the API client */
+
+ int check_crc;
+ u32 crc_val;
+
+ u8 *secbuf;
+ u8 secbuf_base[DMX_MAX_SECFEED_SIZE];
+ u16 secbufp, seclen, tsfeedp;
+
+ int (*set) (struct dmx_section_feed* feed,
+ u16 pid,
+ size_t circular_buffer_size,
+ int check_crc);
+ int (*allocate_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter** filter);
+ int (*release_filter) (struct dmx_section_feed* feed,
+ struct dmx_section_filter* filter);
+ int (*start_filtering) (struct dmx_section_feed* feed);
+ int (*stop_filtering) (struct dmx_section_feed* feed);
+};
+
+/*--------------------------------------------------------------------------*/
+/* Callback functions */
+/*--------------------------------------------------------------------------*/
+
+typedef int (*dmx_ts_cb) ( const u8 * buffer1,
+ size_t buffer1_length,
+ const u8 * buffer2,
+ size_t buffer2_length,
+ struct dmx_ts_feed* source,
+ enum dmx_success success);
+
+typedef int (*dmx_section_cb) ( const u8 * buffer1,
+ size_t buffer1_len,
+ const u8 * buffer2,
+ size_t buffer2_len,
+ struct dmx_section_filter * source,
+ enum dmx_success success);
+
+/*--------------------------------------------------------------------------*/
+/* DVB Front-End */
+/*--------------------------------------------------------------------------*/
+
+enum dmx_frontend_source {
+ DMX_MEMORY_FE,
+ DMX_FRONTEND_0,
+ DMX_FRONTEND_1,
+ DMX_FRONTEND_2,
+ DMX_FRONTEND_3,
+ DMX_STREAM_0, /* external stream input, e.g. LVDS */
+ DMX_STREAM_1,
+ DMX_STREAM_2,
+ DMX_STREAM_3
+};
+
+struct dmx_frontend {
+ struct list_head connectivity_list; /* List of front-ends that can
+ be connected to a particular
+ demux */
+ enum dmx_frontend_source source;
+};
+
+/*--------------------------------------------------------------------------*/
+/* MPEG-2 TS Demux */
+/*--------------------------------------------------------------------------*/
+
+/*
+ * Flags OR'ed in the capabilities field of struct dmx_demux.
+ */
+
+#define DMX_TS_FILTERING 1
+#define DMX_PES_FILTERING 2
+#define DMX_SECTION_FILTERING 4
+#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */
+#define DMX_CRC_CHECKING 16
+#define DMX_TS_DESCRAMBLING 32
+
+/*
+ * Demux resource type identifier.
+*/
+
+/*
+ * DMX_FE_ENTRY(): Casts elements in the list of registered
+ * front-ends from the generic type struct list_head
+ * to the type * struct dmx_frontend
+ *.
+*/
+
+#define DMX_FE_ENTRY(list) list_entry(list, struct dmx_frontend, connectivity_list)
+
+struct dmx_demux {
+ u32 capabilities; /* Bitfield of capability flags */
+ struct dmx_frontend* frontend; /* Front-end connected to the demux */
+ void* priv; /* Pointer to private data of the API client */
+ int (*open) (struct dmx_demux* demux);
+ int (*close) (struct dmx_demux* demux);
+ int (*write) (struct dmx_demux* demux, const char* buf, size_t count);
+ int (*allocate_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed** feed,
+ dmx_ts_cb callback);
+ int (*release_ts_feed) (struct dmx_demux* demux,
+ struct dmx_ts_feed* feed);
+ int (*allocate_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed** feed,
+ dmx_section_cb callback);
+ int (*release_section_feed) (struct dmx_demux* demux,
+ struct dmx_section_feed* feed);
+ int (*add_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*remove_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ struct list_head* (*get_frontends) (struct dmx_demux* demux);
+ int (*connect_frontend) (struct dmx_demux* demux,
+ struct dmx_frontend* frontend);
+ int (*disconnect_frontend) (struct dmx_demux* demux);
+
+ int (*get_pes_pids) (struct dmx_demux* demux, u16 *pids);
+
+ int (*get_caps) (struct dmx_demux* demux, struct dmx_caps *caps);
+
+ int (*set_source) (struct dmx_demux* demux, const dmx_source_t *src);
+
+ int (*get_stc) (struct dmx_demux* demux, unsigned int num,
+ u64 *stc, unsigned int *base);
+};
+
+#endif /* #ifndef __DEMUX_H */
diff --git a/v4l/kernel-2.6.tmp/dmxdev.c b/v4l/kernel-2.6.tmp/dmxdev.c
new file mode 100644
index 0000000..f94bc31
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dmxdev.c
@@ -0,0 +1,1126 @@
+/*
+ * dmxdev.c - DVB demultiplexer device
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include <linux/spinlock.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+#include <linux/module.h>
+#include <linux/poll.h>
+#include <linux/ioctl.h>
+#include <linux/wait.h>
+#include <asm/uaccess.h>
+#include <asm/system.h>
+#include "dmxdev.h"
+
+static int debug;
+
+module_param(debug, int, 0644);
+MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");
+
+#define dprintk if (debug) printk
+
+static int dvb_dmxdev_buffer_write(struct dvb_ringbuffer *buf,
+ const u8 *src, size_t len)
+{
+ ssize_t free;
+
+ if (!len)
+ return 0;
+ if (!buf->data)
+ return 0;
+
+ free = dvb_ringbuffer_free(buf);
+ if (len > free) {
+ dprintk("dmxdev: buffer overflow\n");
+ return -EOVERFLOW;
+ }
+
+ return dvb_ringbuffer_write(buf, src, len);
+}
+
+static ssize_t dvb_dmxdev_buffer_read(struct dvb_ringbuffer *src,
+ int non_blocking, char __user *buf,
+ size_t count, loff_t *ppos)
+{
+ size_t todo;
+ ssize_t avail;
+ ssize_t ret = 0;
+
+ if (!src->data)
+ return 0;
+
+ if (src->error) {
+ ret = src->error;
+ dvb_ringbuffer_flush(src);
+ return ret;
+ }
+
+ for (todo = count; todo > 0; todo -= ret) {
+ if (non_blocking && dvb_ringbuffer_empty(src)) {
+ ret = -EWOULDBLOCK;
+ break;
+ }
+
+ ret = wait_event_interruptible(src->queue,
+ !dvb_ringbuffer_empty(src) ||
+ (src->error != 0));
+ if (ret < 0)
+ break;
+
+ if (src->error) {
+ ret = src->error;
+ dvb_ringbuffer_flush(src);
+ break;
+ }
+
+ avail = dvb_ringbuffer_avail(src);
+ if (avail > todo)
+ avail = todo;
+
+ ret = dvb_ringbuffer_read(src, (u8 *)buf, avail, 1);
+ if (ret < 0)
+ break;
+
+ buf += ret;
+ }
+
+ return (count - todo) ? (count - todo) : ret;
+}
+
+static struct dmx_frontend *get_fe(struct dmx_demux *demux, int type)
+{
+ struct list_head *head, *pos;
+
+ head = demux->get_frontends(demux);
+ if (!head)
+ return NULL;
+ list_for_each(pos, head)
+ if (DMX_FE_ENTRY(pos)->source == type)
+ return DMX_FE_ENTRY(pos);
+
+ return NULL;
+}
+
+static int dvb_dvr_open(struct inode *inode, struct file *file)
+{
+ struct dvb_device *dvbdev = file->private_data;
+ struct dmxdev *dmxdev = dvbdev->priv;
+ struct dmx_frontend *front;
+
+ dprintk("function : %s\n", __FUNCTION__);
+
+ if (mutex_lock_interruptible(&dmxdev->mutex))
+ return -ERESTARTSYS;
+
+ if (dmxdev->exit) {
+ mutex_unlock(&dmxdev->mutex);
+ return -ENODEV;
+ }
+
+ if ((file->f_flags & O_ACCMODE) == O_RDWR) {
+ if (!(dmxdev->capabilities & DMXDEV_CAP_DUPLEX)) {
+ mutex_unlock(&dmxdev->mutex);
+ return -EOPNOTSUPP;
+ }
+ }
+
+ if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
+ void *mem;
+ if (!dvbdev->readers) {
+ mutex_unlock(&dmxdev->mutex);
+ return -EBUSY;
+ }
+ mem = vmalloc(DVR_BUFFER_SIZE);
+ if (!mem) {
+ mutex_unlock(&dmxdev->mutex);
+ return -ENOMEM;
+ }
+ dvb_ringbuffer_init(&dmxdev->dvr_buffer, mem, DVR_BUFFER_SIZE);
+ dvbdev->readers--;
+ }
+
+ if ((file->f_flags & O_ACCMODE) == O_WRONLY) {
+ dmxdev->dvr_orig_fe = dmxdev->demux->frontend;
+
+ if (!dmxdev->demux->write) {
+ mutex_unlock(&dmxdev->mutex);
+ return -EOPNOTSUPP;
+ }
+
+ front = get_fe(dmxdev->demux, DMX_MEMORY_FE);
+
+ if (!front) {
+ mutex_unlock(&dmxdev->mutex);
+ return -EINVAL;
+ }
+ dmxdev->demux->disconnect_frontend(dmxdev->demux);
+ dmxdev->demux->connect_frontend(dmxdev->demux, front);
+ }
+ dvbdev->users++;
+ mutex_unlock(&dmxdev->mutex);
+ return 0;
+}
+
+static int dvb_dvr_release(struct inode *inode, struct file *file)
+{
+ struct dvb_device *dvbdev = file->private_data;
+ struct dmxdev *dmxdev = dvbdev->priv;
+
+ mutex_lock(&dmxdev->mutex);
+
+ if ((file->f_flags & O_ACCMODE) == O_WRONLY) {
+ dmxdev->demux->disconnect_frontend(dmxdev->demux);
+ dmxdev->demux->connect_frontend(dmxdev->demux,
+ dmxdev->dvr_orig_fe);
+ }
+ if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
+ dvbdev->readers++;
+ if (dmxdev->dvr_buffer.data) {
+ void *mem = dmxdev->dvr_buffer.data;
+ mb();
+ spin_lock_irq(&dmxdev->lock);
+ dmxdev->dvr_buffer.data = NULL;
+ spin_unlock_irq(&dmxdev->lock);
+ vfree(mem);
+ }
+ }
+ /* TODO */
+ dvbdev->users--;
+ if(dvbdev->users==-1 && dmxdev->exit==1) {
+ fops_put(file->f_op);
+ file->f_op = NULL;
+ mutex_unlock(&dmxdev->mutex);
+ wake_up(&dvbdev->wait_queue);
+ } else
+ mutex_unlock(&dmxdev->mutex);
+
+ return 0;
+}
+
+static ssize_t dvb_dvr_write(struct file *file, const char __user *buf,
+ size_t count, loff_t *ppos)
+{
+ struct dvb_device *dvbdev = file->private_data;
+ struct dmxdev *dmxdev = dvbdev->priv;
+ int ret;
+
+ if (!dmxdev->demux->write)
+ return -EOPNOTSUPP;
+ if ((file->f_flags & O_ACCMODE) != O_WRONLY)
+ return -EINVAL;
+ if (mutex_lock_interruptible(&dmxdev->mutex))
+ return -ERESTARTSYS;
+
+ if (dmxdev->exit) {
+ mutex_unlock(&dmxdev->mutex);
+ return -ENODEV;
+ }
+ ret = dmxdev->demux->write(dmxdev->demux, buf, count);
+ mutex_unlock(&dmxdev->mutex);
+ return ret;
+}
+
+static ssize_t dvb_dvr_read(struct file *file, char __user *buf, size_t count,
+ loff_t *ppos)
+{
+ struct dvb_device *dvbdev = file->private_data;
+ struct dmxdev *dmxdev = dvbdev->priv;
+ int ret;
+
+ if (dmxdev->exit) {
+ mutex_unlock(&dmxdev->mutex);
+ return -ENODEV;
+ }
+
+ //mutex_lock(&dmxdev->mutex);
+ ret = dvb_dmxdev_buffer_read(&dmxdev->dvr_buffer,
+ file->f_flags & O_NONBLOCK,
+ buf, count, ppos);
+ //mutex_unlock(&dmxdev->mutex);
+ return ret;
+}
+
+static inline void dvb_dmxdev_filter_state_set(struct dmxdev_filter
+ *dmxdevfilter, int state)
+{
+ spin_lock_irq(&dmxdevfilter->dev->lock);
+ dmxdevfilter->state = state;
+ spin_unlock_irq(&dmxdevfilter->dev->lock);
+}
+
+static int dvb_dmxdev_set_buffer_size(struct dmxdev_filter *dmxdevfilter,
+ unsigned long size)
+{
+ struct dvb_ringbuffer *buf = &dmxdevfilter->buffer;
+ void *mem;
+
+ if (buf->size == size)
+ return 0;
+ if (dmxdevfilter->state >= DMXDEV_STATE_GO)
+ return -EBUSY;
+ spin_lock_irq(&dmxdevfilter->dev->lock);
+ mem = buf->data;
+ buf->data = NULL;
+ buf->size = size;
+ dvb_ringbuffer_flush(buf);
+ spin_unlock_irq(&dmxdevfilter->dev->lock);
+ vfree(mem);
+
+ if (buf->size) {
+ mem = vmalloc(dmxdevfilter->buffer.size);
+ if (!mem)
+ return -ENOMEM;
+ spin_lock_irq(&dmxdevfilter->dev->lock);
+ buf->data = mem;
+ spin_unlock_irq(&dmxdevfilter->dev->lock);
+ }
+ return 0;
+}
+
+static void dvb_dmxdev_filter_timeout(unsigned long data)
+{
+ struct dmxdev_filter *dmxdevfilter = (struct dmxdev_filter *)data;
+
+ dmxdevfilter->buffer.error = -ETIMEDOUT;
+ spin_lock_irq(&dmxdevfilter->dev->lock);
+ dmxdevfilter->state = DMXDEV_STATE_TIMEDOUT;
+ spin_unlock_irq(&dmxdevfilter->dev->lock);
+ wake_up(&dmxdevfilter->buffer.queue);
+}
+
+static void dvb_dmxdev_filter_timer(struct dmxdev_filter *dmxdevfilter)
+{
+ struct dmx_sct_filter_params *para = &dmxdevfilter->params.sec;
+
+ del_timer(&dmxdevfilter->timer);
+ if (para->timeout) {
+ dmxdevfilter->timer.function = dvb_dmxdev_filter_timeout;
+ dmxdevfilter->timer.data = (unsigned long)dmxdevfilter;
+ dmxdevfilter->timer.expires =
+ jiffies + 1 + (HZ / 2 + HZ * para->timeout) / 1000;
+ add_timer(&dmxdevfilter->timer);
+ }
+}
+
+static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len,
+ const u8 *buffer2, size_t buffer2_len,
+ struct dmx_section_filter *filter,
+ enum dmx_success success)
+{
+ struct dmxdev_filter *dmxdevfilter = filter->priv;
+ int ret;
+
+ if (dmxdevfilter->buffer.error) {
+ wake_up(&dmxdevfilter->buffer.queue);
+ return 0;
+ }
+ spin_lock(&dmxdevfilter->dev->lock);
+ if (dmxdevfilter->state != DMXDEV_STATE_GO) {
+ spin_unlock(&dmxdevfilter->dev->lock);
+ return 0;
+ }
+ del_timer(&dmxdevfilter->timer);
+ dprintk("dmxdev: section callback %02x %02x %02x %02x %02x %02x\n",
+ buffer1[0], buffer1[1],
+ buffer1[2], buffer1[3], buffer1[4], buffer1[5]);
+ ret = dvb_dmxdev_buffer_write(&dmxdevfilter->buffer, buffer1,
+ buffer1_len);
+ if (ret == buffer1_len) {
+ ret = dvb_dmxdev_buffer_write(&dmxdevfilter->buffer, buffer2,
+ buffer2_len);
+ }
+ if (ret < 0) {
+ dvb_ringbuffer_flush(&dmxdevfilter->buffer);
+ dmxdevfilter->buffer.error = ret;
+ }
+ if (dmxdevfilter->params.sec.flags & DMX_ONESHOT)
+ dmxdevfilter->state = DMXDEV_STATE_DONE;
+ spin_unlock(&dmxdevfilter->dev->lock);
+ wake_up(&dmxdevfilter->buffer.queue);
+ return 0;
+}
+
+static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len,
+ const u8 *buffer2, size_t buffer2_len,
+ struct dmx_ts_feed *feed,
+ enum dmx_success success)
+{
+ struct dmxdev_filter *dmxdevfilter = feed->priv;
+ struct dvb_ringbuffer *buffer;
+ int ret;
+
+ spin_lock(&dmxdevfilter->dev->lock);
+ if (dmxdevfilter->params.pes.output == DMX_OUT_DECODER) {
+ spin_unlock(&dmxdevfilter->dev->lock);
+ return 0;
+ }
+
+ if (dmxdevfilter->params.pes.output == DMX_OUT_TAP)
+ buffer = &dmxdevfilter->buffer;
+ else
+ buffer = &dmxdevfilter->dev->dvr_buffer;
+ if (buffer->error) {
+ spin_unlock(&dmxdevfilter->dev->lock);
+ wake_up(&buffer->queue);
+ return 0;
+ }
+ ret = dvb_dmxdev_buffer_write(buffer, buffer1, buffer1_len);
+ if (ret == buffer1_len)
+ ret = dvb_dmxdev_buffer_write(buffer, buffer2, buffer2_len);
+ if (ret < 0) {
+ dvb_ringbuffer_flush(buffer);
+ buffer->error = ret;
+ }
+ spin_unlock(&dmxdevfilter->dev->lock);
+ wake_up(&buffer->queue);
+ return 0;
+}
+
+/* stop feed but only mark the specified filter as stopped (state set) */
+static int dvb_dmxdev_feed_stop(struct dmxdev_filter *dmxdevfilter)
+{
+ dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_SET);
+
+ switch (dmxdevfilter->type) {
+ case DMXDEV_TYPE_SEC:
+ del_timer(&dmxdevfilter->timer);
+ dmxdevfilter->feed.sec->stop_filtering(dmxdevfilter->feed.sec);
+ break;
+ case DMXDEV_TYPE_PES:
+ dmxdevfilter->feed.ts->stop_filtering(dmxdevfilter->feed.ts);
+ break;
+ default:
+ return -EINVAL;
+ }
+ return 0;
+}
+
+/* start feed associated with the specified filter */
+static int dvb_dmxdev_feed_start(struct dmxdev_filter *filter)
+{
+ dvb_dmxdev_filter_state_set(filter, DMXDEV_STATE_GO);
+
+ switch (filter->type) {
+ case DMXDEV_TYPE_SEC:
+ return filter->feed.sec->start_filtering(filter->feed.sec);
+ case DMXDEV_TYPE_PES:
+ return filter->feed.ts->start_filtering(filter->feed.ts);
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+/* restart section feed if it has filters left associated with it,
+ otherwise release the feed */
+static int dvb_dmxdev_feed_restart(struct dmxdev_filter *filter)
+{
+ int i;
+ struct dmxdev *dmxdev = filter->dev;
+ u16 pid = filter->params.sec.pid;
+
+ for (i = 0; i < dmxdev->filternum; i++)
+ if (dmxdev->filter[i].state >= DMXDEV_STATE_GO &&
+ dmxdev->filter[i].type == DMXDEV_TYPE_SEC &&
+ dmxdev->filter[i].params.sec.pid == pid) {
+ dvb_dmxdev_feed_start(&dmxdev->filter[i]);
+ return 0;
+ }
+
+ filter->dev->demux->release_section_feed(dmxdev->demux,
+ filter->feed.sec);
+
+ return 0;
+}
+
+static int dvb_dmxdev_filter_stop(struct dmxdev_filter *dmxdevfilter)
+{
+ if (dmxdevfilter->state < DMXDEV_STATE_GO)
+ return 0;
+
+ switch (dmxdevfilter->type) {
+ case DMXDEV_TYPE_SEC:
+ if (!dmxdevfilter->feed.sec)
+ break;
+ dvb_dmxdev_feed_stop(dmxdevfilter);
+ if (dmxdevfilter->filter.sec)
+ dmxdevfilter->feed.sec->
+ release_filter(dmxdevfilter->feed.sec,
+ dmxdevfilter->filter.sec);
+ dvb_dmxdev_feed_restart(dmxdevfilter);
+ dmxdevfilter->feed.sec = NULL;
+ break;
+ case DMXDEV_TYPE_PES:
+ if (!dmxdevfilter->feed.ts)
+ break;
+ dvb_dmxdev_feed_stop(dmxdevfilter);
+ dmxdevfilter->dev->demux->
+ release_ts_feed(dmxdevfilter->dev->demux,
+ dmxdevfilter->feed.ts);
+ dmxdevfilter->feed.ts = NULL;
+ break;
+ default:
+ if (dmxdevfilter->state == DMXDEV_STATE_ALLOCATED)
+ return 0;
+ return -EINVAL;
+ }
+
+ dvb_ringbuffer_flush(&dmxdevfilter->buffer);
+ return 0;
+}
+
+static inline int dvb_dmxdev_filter_reset(struct dmxdev_filter *dmxdevfilter)
+{
+ if (dmxdevfilter->state < DMXDEV_STATE_SET)
+ return 0;
+
+ dmxdevfilter->type = DMXDEV_TYPE_NONE;
+ dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_ALLOCATED);
+ return 0;
+}
+
+static int dvb_dmxdev_filter_start(struct dmxdev_filter *filter)
+{
+ struct dmxdev *dmxdev = filter->dev;
+ void *mem;
+ int ret, i;
+
+ if (filter->state < DMXDEV_STATE_SET)
+ return -EINVAL;
+
+ if (filter->state >= DMXDEV_STATE_GO)
+ dvb_dmxdev_filter_stop(filter);
+
+ if (!filter->buffer.data) {
+ mem = vmalloc(filter->buffer.size);
+ if (!mem)
+ return -ENOMEM;
+ spin_lock_irq(&filter->dev->lock);
+ filter->buffer.data = mem;
+ spin_unlock_irq(&filter->dev->lock);
+ }
+
+ dvb_ringbuffer_flush(&filter->buffer);
+
+ switch (filter->type) {
+ case DMXDEV_TYPE_SEC:
+ {
+ struct dmx_sct_filter_params *para = &filter->params.sec;
+ struct dmx_section_filter **secfilter = &filter->filter.sec;
+ struct dmx_section_feed **secfeed = &filter->feed.sec;
+
+ *secfilter = NULL;
+ *secfeed = NULL;
+
+
+ /* find active filter/feed with same PID */
+ for (i = 0; i < dmxdev->filternum; i++) {
+ if (dmxdev->filter[i].state >= DMXDEV_STATE_GO &&
+ dmxdev->filter[i].type == DMXDEV_TYPE_SEC &&
+ dmxdev->filter[i].params.sec.pid == para->pid) {
+ *secfeed = dmxdev->filter[i].feed.sec;
+ break;
+ }
+ }
+
+ /* if no feed found, try to allocate new one */
+ if (!*secfeed) {
+ ret = dmxdev->demux->allocate_section_feed(dmxdev->demux,
+ secfeed,
+ dvb_dmxdev_section_callback);
+ if (ret < 0) {
+ printk("DVB (%s): could not alloc feed\n",
+ __FUNCTION__);
+ return ret;
+ }
+
+ ret = (*secfeed)->set(*secfeed, para->pid, 32768,
+ (para->flags & DMX_CHECK_CRC) ? 1 : 0);
+ if (ret < 0) {
+ printk("DVB (%s): could not set feed\n",
+ __FUNCTION__);
+ dvb_dmxdev_feed_restart(filter);
+ return ret;
+ }
+ } else {
+ dvb_dmxdev_feed_stop(filter);
+ }
+
+ ret = (*secfeed)->allocate_filter(*secfeed, secfilter);
+ if (ret < 0) {
+ dvb_dmxdev_feed_restart(filter);
+ filter->feed.sec->start_filtering(*secfeed);
+ dprintk("could not get filter\n");
+ return ret;
+ }
+
+ (*secfilter)->priv = filter;
+
+ memcpy(&((*secfilter)->filter_value[3]),
+ &(para->filter.filter[1]), DMX_FILTER_SIZE - 1);
+ memcpy(&(*secfilter)->filter_mask[3],
+ &para->filter.mask[1], DMX_FILTER_SIZE - 1);
+ memcpy(&(*secfilter)->filter_mode[3],
+ &para->filter.mode[1], DMX_FILTER_SIZE - 1);
+
+ (*secfilter)->filter_value[0] = para->filter.filter[0];
+ (*secfilter)->filter_mask[0] = para->filter.mask[0];
+ (*secfilter)->filter_mode[0] = para->filter.mode[0];
+ (*secfilter)->filter_mask[1] = 0;
+ (*secfilter)->filter_mask[2] = 0;
+
+ filter->todo = 0;
+
+ ret = filter->feed.sec->start_filtering(filter->feed.sec);
+ if (ret < 0)
+ return ret;
+
+ dvb_dmxdev_filter_timer(filter);
+ break;
+ }
+ case DMXDEV_TYPE_PES:
+ {
+ struct timespec timeout = { 0 };
+ struct dmx_pes_filter_params *para = &filter->params.pes;
+ dmx_output_t otype;
+ int ret;
+ int ts_type;
+ enum dmx_ts_pes ts_pes;
+ struct dmx_ts_feed **tsfeed = &filter->feed.ts;
+
+ filter->feed.ts = NULL;
+ otype = para->output;
+
+ ts_pes = (enum dmx_ts_pes)para->pes_type;
+
+ if (ts_pes < DMX_PES_OTHER)
+ ts_type = TS_DECODER;
+ else
+ ts_type = 0;
+
+ if (otype == DMX_OUT_TS_TAP)
+ ts_type |= TS_PACKET;
+
+ if (otype == DMX_OUT_TAP)
+ ts_type |= TS_PAYLOAD_ONLY | TS_PACKET;
+
+ ret = dmxdev->demux->allocate_ts_feed(dmxdev->demux,
+ tsfeed,
+ dvb_dmxdev_ts_callback);
+ if (ret < 0)
+ return ret;
+
+ (*tsfeed)->priv = filter;
+
+ ret = (*tsfeed)->set(*tsfeed, para->pid, ts_type, ts_pes,
+ 32768, timeout);
+ if (ret < 0) {
+ dmxdev->demux->release_ts_feed(dmxdev->demux,
+ *tsfeed);
+ return ret;
+ }
+
+ ret = filter->feed.ts->start_filtering(filter->feed.ts);
+ if (ret < 0) {
+ dmxdev->demux->release_ts_feed(dmxdev->demux,
+ *tsfeed);
+ return ret;
+ }
+
+ break;
+ }
+ default:
+ return -EINVAL;
+ }
+
+ dvb_dmxdev_filter_state_set(filter, DMXDEV_STATE_GO);
+ return 0;
+}
+
+static int dvb_demux_open(struct inode *inode, struct file *file)
+{
+ struct dvb_device *dvbdev = file->private_data;
+ struct dmxdev *dmxdev = dvbdev->priv;
+ int i;
+ struct dmxdev_filter *dmxdevfilter;
+
+ if (!dmxdev->filter)
+ return -EINVAL;
+
+ if (mutex_lock_interruptible(&dmxdev->mutex))
+ return -ERESTARTSYS;
+
+ for (i = 0; i < dmxdev->filternum; i++)
+ if (dmxdev->filter[i].state == DMXDEV_STATE_FREE)
+ break;
+
+ if (i == dmxdev->filternum) {
+ mutex_unlock(&dmxdev->mutex);
+ return -EMFILE;
+ }
+
+ dmxdevfilter = &dmxdev->filter[i];
+ mutex_init(&dmxdevfilter->mutex);
+ file->private_data = dmxdevfilter;
+
+ dvb_ringbuffer_init(&dmxdevfilter->buffer, NULL, 8192);
+ dmxdevfilter->type = DMXDEV_TYPE_NONE;
+ dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_ALLOCATED);
+ dmxdevfilter->feed.ts = NULL;
+ init_timer(&dmxdevfilter->timer);
+
+ dvbdev->users++;
+
+ mutex_unlock(&dmxdev->mutex);
+ return 0;
+}
+
+static int dvb_dmxdev_filter_free(struct dmxdev *dmxdev,
+ struct dmxdev_filter *dmxdevfilter)
+{
+ mutex_lock(&dmxdev->mutex);
+ mutex_lock(&dmxdevfilter->mutex);
+
+ dvb_dmxdev_filter_stop(dmxdevfilter);
+ dvb_dmxdev_filter_reset(dmxdevfilter);
+
+ if (dmxdevfilter->buffer.data) {
+ void *mem = dmxdevfilter->buffer.data;
+
+ spin_lock_irq(&dmxdev->lock);
+ dmxdevfilter->buffer.data = NULL;
+ spin_unlock_irq(&dmxdev->lock);
+ vfree(mem);
+ }
+
+ dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_FREE);
+ wake_up(&dmxdevfilter->buffer.queue);
+ mutex_unlock(&dmxdevfilter->mutex);
+ mutex_unlock(&dmxdev->mutex);
+ return 0;
+}
+
+static inline void invert_mode(dmx_filter_t *filter)
+{
+ int i;
+
+ for (i = 0; i < DMX_FILTER_SIZE; i++)
+ filter->mode[i] ^= 0xff;
+}
+
+static int dvb_dmxdev_filter_set(struct dmxdev *dmxdev,
+ struct dmxdev_filter *dmxdevfilter,
+ struct dmx_sct_filter_params *params)
+{
+ dprintk("function : %s\n", __FUNCTION__);
+
+ dvb_dmxdev_filter_stop(dmxdevfilter);
+
+ dmxdevfilter->type = DMXDEV_TYPE_SEC;
+ memcpy(&dmxdevfilter->params.sec,
+ params, sizeof(struct dmx_sct_filter_params));
+ invert_mode(&dmxdevfilter->params.sec.filter);
+ dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_SET);
+
+ if (params->flags & DMX_IMMEDIATE_START)
+ return dvb_dmxdev_filter_start(dmxdevfilter);
+
+ return 0;
+}
+
+static int dvb_dmxdev_pes_filter_set(struct dmxdev *dmxdev,
+ struct dmxdev_filter *dmxdevfilter,
+ struct dmx_pes_filter_params *params)
+{
+ dvb_dmxdev_filter_stop(dmxdevfilter);
+
+ if (params->pes_type > DMX_PES_OTHER || params->pes_type < 0)
+ return -EINVAL;
+
+ dmxdevfilter->type = DMXDEV_TYPE_PES;
+ memcpy(&dmxdevfilter->params, params,
+ sizeof(struct dmx_pes_filter_params));
+
+ dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_SET);
+
+ if (params->flags & DMX_IMMEDIATE_START)
+ return dvb_dmxdev_filter_start(dmxdevfilter);
+
+ return 0;
+}
+
+static ssize_t dvb_dmxdev_read_sec(struct dmxdev_filter *dfil,
+ struct file *file, char __user *buf,
+ size_t count, loff_t *ppos)
+{
+ int result, hcount;
+ int done = 0;
+
+ if (dfil->todo <= 0) {
+ hcount = 3 + dfil->todo;
+ if (hcount > count)
+ hcount = count;
+ result = dvb_dmxdev_buffer_read(&dfil->buffer,
+ file->f_flags & O_NONBLOCK,
+ buf, hcount, ppos);
+ if (result < 0) {
+ dfil->todo = 0;
+ return result;
+ }
+ if (copy_from_user(dfil->secheader - dfil->todo, buf, result))
+ return -EFAULT;
+ buf += result;
+ done = result;
+ count -= result;
+ dfil->todo -= result;
+ if (dfil->todo > -3)
+ return done;
+ dfil->todo = ((dfil->secheader[1] << 8) | dfil->secheader[2]) & 0xfff;
+ if (!count)
+ return done;
+ }
+ if (count > dfil->todo)
+ count = dfil->todo;
+ result = dvb_dmxdev_buffer_read(&dfil->buffer,
+ file->f_flags & O_NONBLOCK,
+ buf, count, ppos);
+ if (result < 0)
+ return result;
+ dfil->todo -= result;
+ return (result + done);
+}
+
+static ssize_t
+dvb_demux_read(struct file *file, char __user *buf, size_t count,
+ loff_t *ppos)
+{
+ struct dmxdev_filter *dmxdevfilter = file->private_data;
+ int ret;
+
+ if (mutex_lock_interruptible(&dmxdevfilter->mutex))
+ return -ERESTARTSYS;
+
+ if (dmxdevfilter->type == DMXDEV_TYPE_SEC)
+ ret = dvb_dmxdev_read_sec(dmxdevfilter, file, buf, count, ppos);
+ else
+ ret = dvb_dmxdev_buffer_read(&dmxdevfilter->buffer,
+ file->f_flags & O_NONBLOCK,
+ buf, count, ppos);
+
+ mutex_unlock(&dmxdevfilter->mutex);
+ return ret;
+}
+
+static int dvb_demux_do_ioctl(struct inode *inode, struct file *file,
+ unsigned int cmd, void *parg)
+{
+ struct dmxdev_filter *dmxdevfilter = file->private_data;
+ struct dmxdev *dmxdev = dmxdevfilter->dev;
+ unsigned long arg = (unsigned long)parg;
+ int ret = 0;
+
+ if (mutex_lock_interruptible(&dmxdev->mutex))
+ return -ERESTARTSYS;
+
+ switch (cmd) {
+ case DMX_START:
+ if (mutex_lock_interruptible(&dmxdevfilter->mutex)) {
+ mutex_unlock(&dmxdev->mutex);
+ return -ERESTARTSYS;
+ }
+ if (dmxdevfilter->state < DMXDEV_STATE_SET)
+ ret = -EINVAL;
+ else
+ ret = dvb_dmxdev_filter_start(dmxdevfilter);
+ mutex_unlock(&dmxdevfilter->mutex);
+ break;
+
+ case DMX_STOP:
+ if (mutex_lock_interruptible(&dmxdevfilter->mutex)) {
+ mutex_unlock(&dmxdev->mutex);
+ return -ERESTARTSYS;
+ }
+ ret = dvb_dmxdev_filter_stop(dmxdevfilter);
+ mutex_unlock(&dmxdevfilter->mutex);
+ break;
+
+ case DMX_SET_FILTER:
+ if (mutex_lock_interruptible(&dmxdevfilter->mutex)) {
+ mutex_unlock(&dmxdev->mutex);
+ return -ERESTARTSYS;
+ }
+ ret = dvb_dmxdev_filter_set(dmxdev, dmxdevfilter, parg);
+ mutex_unlock(&dmxdevfilter->mutex);
+ break;
+
+ case DMX_SET_PES_FILTER:
+ if (mutex_lock_interruptible(&dmxdevfilter->mutex)) {
+ mutex_unlock(&dmxdev->mutex);
+ return -ERESTARTSYS;
+ }
+ ret = dvb_dmxdev_pes_filter_set(dmxdev, dmxdevfilter, parg);
+ mutex_unlock(&dmxdevfilter->mutex);
+ break;
+
+ case DMX_SET_BUFFER_SIZE:
+ if (mutex_lock_interruptible(&dmxdevfilter->mutex)) {
+ mutex_unlock(&dmxdev->mutex);
+ return -ERESTARTSYS;
+ }
+ ret = dvb_dmxdev_set_buffer_size(dmxdevfilter, arg);
+ mutex_unlock(&dmxdevfilter->mutex);
+ break;
+
+ case DMX_GET_PES_PIDS:
+ if (!dmxdev->demux->get_pes_pids) {
+ ret = -EINVAL;
+ break;
+ }
+ dmxdev->demux->get_pes_pids(dmxdev->demux, parg);
+ break;
+
+ case DMX_GET_CAPS:
+ if (!dmxdev->demux->get_caps) {
+ ret = -EINVAL;
+ break;
+ }
+ ret = dmxdev->demux->get_caps(dmxdev->demux, parg);
+ break;
+
+ case DMX_SET_SOURCE:
+ if (!dmxdev->demux->set_source) {
+ ret = -EINVAL;
+ break;
+ }
+ ret = dmxdev->demux->set_source(dmxdev->demux, parg);
+ break;
+
+ case DMX_GET_STC:
+ if (!dmxdev->demux->get_stc) {
+ ret = -EINVAL;
+ break;
+ }
+ ret = dmxdev->demux->get_stc(dmxdev->demux,
+ ((struct dmx_stc *)parg)->num,
+ &((struct dmx_stc *)parg)->stc,
+ &((struct dmx_stc *)parg)->base);
+ break;
+
+ default:
+ ret = -EINVAL;
+ break;
+ }
+ mutex_unlock(&dmxdev->mutex);
+ return ret;
+}
+
+static int dvb_demux_ioctl(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg)
+{
+ return dvb_usercopy(inode, file, cmd, arg, dvb_demux_do_ioctl);
+}
+
+static unsigned int dvb_demux_poll(struct file *file, poll_table *wait)
+{
+ struct dmxdev_filter *dmxdevfilter = file->private_data;
+ unsigned int mask = 0;
+
+ if (!dmxdevfilter)
+ return -EINVAL;
+
+ poll_wait(file, &dmxdevfilter->buffer.queue, wait);
+
+ if (dmxdevfilter->state != DMXDEV_STATE_GO &&
+ dmxdevfilter->state != DMXDEV_STATE_DONE &&
+ dmxdevfilter->state != DMXDEV_STATE_TIMEDOUT)
+ return 0;
+
+ if (dmxdevfilter->buffer.error)
+ mask |= (POLLIN | POLLRDNORM | POLLPRI | POLLERR);
+
+ if (!dvb_ringbuffer_empty(&dmxdevfilter->buffer))
+ mask |= (POLLIN | POLLRDNORM | POLLPRI);
+
+ return mask;
+}
+
+static int dvb_demux_release(struct inode *inode, struct file *file)
+{
+ struct dmxdev_filter *dmxdevfilter = file->private_data;
+ struct dmxdev *dmxdev = dmxdevfilter->dev;
+
+ int ret;
+
+ ret = dvb_dmxdev_filter_free(dmxdev, dmxdevfilter);
+
+ mutex_lock(&dmxdev->mutex);
+ dmxdev->dvbdev->users--;
+ if(dmxdev->dvbdev->users==1 && dmxdev->exit==1) {
+ fops_put(file->f_op);
+ file->f_op = NULL;
+ mutex_unlock(&dmxdev->mutex);
+ wake_up(&dmxdev->dvbdev->wait_queue);
+ } else
+ mutex_unlock(&dmxdev->mutex);
+
+ return ret;
+}
+
+static struct file_operations dvb_demux_fops = {
+ .owner = THIS_MODULE,
+ .read = dvb_demux_read,
+ .ioctl = dvb_demux_ioctl,
+ .open = dvb_demux_open,
+ .release = dvb_demux_release,
+ .poll = dvb_demux_poll,
+};
+
+static struct dvb_device dvbdev_demux = {
+ .priv = NULL,
+ .users = 1,
+ .writers = 1,
+ .fops = &dvb_demux_fops
+};
+
+static int dvb_dvr_do_ioctl(struct inode *inode, struct file *file,
+ unsigned int cmd, void *parg)
+{
+ struct dvb_device *dvbdev = file->private_data;
+ struct dmxdev *dmxdev = dvbdev->priv;
+ int ret;
+
+ if (mutex_lock_interruptible(&dmxdev->mutex))
+ return -ERESTARTSYS;
+
+ switch (cmd) {
+ case DMX_SET_BUFFER_SIZE:
+ // FIXME: implement
+ ret = 0;
+ break;
+
+ default:
+ ret = -EINVAL;
+ break;
+ }
+ mutex_unlock(&dmxdev->mutex);
+ return ret;
+}
+
+static int dvb_dvr_ioctl(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg)
+{
+ return dvb_usercopy(inode, file, cmd, arg, dvb_dvr_do_ioctl);
+}
+
+static unsigned int dvb_dvr_poll(struct file *file, poll_table *wait)
+{
+ struct dvb_device *dvbdev = file->private_data;
+ struct dmxdev *dmxdev = dvbdev->priv;
+ unsigned int mask = 0;
+
+ dprintk("function : %s\n", __FUNCTION__);
+
+ poll_wait(file, &dmxdev->dvr_buffer.queue, wait);
+
+ if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
+ if (dmxdev->dvr_buffer.error)
+ mask |= (POLLIN | POLLRDNORM | POLLPRI | POLLERR);
+
+ if (!dvb_ringbuffer_empty(&dmxdev->dvr_buffer))
+ mask |= (POLLIN | POLLRDNORM | POLLPRI);
+ } else
+ mask |= (POLLOUT | POLLWRNORM | POLLPRI);
+
+ return mask;
+}
+
+static struct file_operations dvb_dvr_fops = {
+ .owner = THIS_MODULE,
+ .read = dvb_dvr_read,
+ .write = dvb_dvr_write,
+ .ioctl = dvb_dvr_ioctl,
+ .open = dvb_dvr_open,
+ .release = dvb_dvr_release,
+ .poll = dvb_dvr_poll,
+};
+
+static struct dvb_device dvbdev_dvr = {
+ .priv = NULL,
+ .readers = 1,
+ .users = 1,
+ .fops = &dvb_dvr_fops
+};
+
+int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *dvb_adapter)
+{
+ int i;
+
+ if (dmxdev->demux->open(dmxdev->demux) < 0)
+ return -EUSERS;
+
+ dmxdev->filter = vmalloc(dmxdev->filternum * sizeof(struct dmxdev_filter));
+ if (!dmxdev->filter)
+ return -ENOMEM;
+
+ mutex_init(&dmxdev->mutex);
+ spin_lock_init(&dmxdev->lock);
+ for (i = 0; i < dmxdev->filternum; i++) {
+ dmxdev->filter[i].dev = dmxdev;
+ dmxdev->filter[i].buffer.data = NULL;
+ dvb_dmxdev_filter_state_set(&dmxdev->filter[i],
+ DMXDEV_STATE_FREE);
+ }
+
+ dvb_register_device(dvb_adapter, &dmxdev->dvbdev, &dvbdev_demux, dmxdev,
+ DVB_DEVICE_DEMUX);
+ dvb_register_device(dvb_adapter, &dmxdev->dvr_dvbdev, &dvbdev_dvr,
+ dmxdev, DVB_DEVICE_DVR);
+
+ dvb_ringbuffer_init(&dmxdev->dvr_buffer, NULL, 8192);
+
+ return 0;
+}
+
+EXPORT_SYMBOL(dvb_dmxdev_init);
+
+void dvb_dmxdev_release(struct dmxdev *dmxdev)
+{
+ dmxdev->exit=1;
+ if (dmxdev->dvbdev->users > 1) {
+ wait_event(dmxdev->dvbdev->wait_queue,
+ dmxdev->dvbdev->users==1);
+ }
+ if (dmxdev->dvr_dvbdev->users > 1) {
+ wait_event(dmxdev->dvr_dvbdev->wait_queue,
+ dmxdev->dvr_dvbdev->users==1);
+ }
+
+ dvb_unregister_device(dmxdev->dvbdev);
+ dvb_unregister_device(dmxdev->dvr_dvbdev);
+
+ vfree(dmxdev->filter);
+ dmxdev->filter = NULL;
+ dmxdev->demux->close(dmxdev->demux);
+}
+
+EXPORT_SYMBOL(dvb_dmxdev_release);
diff --git a/v4l/kernel-2.6.tmp/dmxdev.h b/v4l/kernel-2.6.tmp/dmxdev.h
new file mode 100644
index 0000000..bb416e6
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dmxdev.h
@@ -0,0 +1,121 @@
+/*
+ * dmxdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DMXDEV_H_
+#define _DMXDEV_H_
+
+#include <linux/types.h>
+#include <linux/spinlock.h>
+#include <linux/kernel.h>
+#include <linux/timer.h>
+#include <linux/wait.h>
+#include <linux/fs.h>
+#include <linux/string.h>
+#include "compat.h"
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,15)
+#include <linux/mutex.h>
+#endif
+
+#include <linux/dvb/dmx.h>
+
+#include "dvbdev.h"
+#include "demux.h"
+#include "dvb_ringbuffer.h"
+
+enum dmxdev_type {
+ DMXDEV_TYPE_NONE,
+ DMXDEV_TYPE_SEC,
+ DMXDEV_TYPE_PES,
+};
+
+enum dmxdev_state {
+ DMXDEV_STATE_FREE,
+ DMXDEV_STATE_ALLOCATED,
+ DMXDEV_STATE_SET,
+ DMXDEV_STATE_GO,
+ DMXDEV_STATE_DONE,
+ DMXDEV_STATE_TIMEDOUT
+};
+
+struct dmxdev_filter {
+ union {
+ struct dmx_section_filter *sec;
+ } filter;
+
+ union {
+ struct dmx_ts_feed *ts;
+ struct dmx_section_feed *sec;
+ } feed;
+
+ union {
+ struct dmx_sct_filter_params sec;
+ struct dmx_pes_filter_params pes;
+ } params;
+
+ enum dmxdev_type type;
+ enum dmxdev_state state;
+ struct dmxdev *dev;
+ struct dvb_ringbuffer buffer;
+
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,15)
+ struct mutex mutex;
+#else
+ struct semaphore mutex;
+#endif
+
+ /* only for sections */
+ struct timer_list timer;
+ int todo;
+ u8 secheader[3];
+};
+
+
+struct dmxdev {
+ struct dvb_device *dvbdev;
+ struct dvb_device *dvr_dvbdev;
+
+ struct dmxdev_filter *filter;
+ struct dmx_demux *demux;
+
+ int filternum;
+ int capabilities;
+
+ unsigned int exit:1;
+#define DMXDEV_CAP_DUPLEX 1
+ struct dmx_frontend *dvr_orig_fe;
+
+ struct dvb_ringbuffer dvr_buffer;
+#define DVR_BUFFER_SIZE (10*188*1024)
+
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,15)
+ struct mutex mutex;
+#else
+ struct semaphore mutex;
+#endif
+ spinlock_t lock;
+};
+
+
+int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *);
+void dvb_dmxdev_release(struct dmxdev *dmxdev);
+
+#endif /* _DMXDEV_H_ */
diff --git a/v4l/kernel-2.6.tmp/dummy_ram.h b/v4l/kernel-2.6.tmp/dummy_ram.h
new file mode 100644
index 0000000..6481f76
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dummy_ram.h
@@ -0,0 +1,447 @@
+#ifndef DUMMY_RAM_LIST
+#define DUMMY_RAM_LIST
+
+
+#define MERCURY_ROM_CODE
+
+#define DUMMY_FW_VER0 4
+#define DUMMY_FW_VER1 60
+#define DUMMY_FW_VER2 0
+#define DUMMY_FW_VER3 0
+
+
+
+#define DUMMY_RAM_BASE 0x9BB9 //Attention: Reserved RAM All are 8-bit for code size down.
+#define DUMMY_RAM_LEN 71 //d'64bytes = 0x40 //(DUMMY_RAM_BASE + DUMMY_RAM_LEN - 1) is last dummy byte
+
+
+#define p_dummy_stes_last_case 0x9bb9
+#define xd_p_dummy_stes_last_case (*(volatile byte xdata *) 0x9bb9)
+#define dummy_stes_last_case_pos 0
+#define dummy_stes_last_case_len 4
+#define dummy_stes_last_case_lsb 0
+
+#define p_dummy_IF_max_8bits 0x9bba //INIT SCRIPT
+#define xd_p_dummy_IF_max_8bits (*(volatile byte xdata *) 0x9bba)
+#define dummy_IF_max_8bits_pos 0
+#define dummy_IF_max_8bits_len 8
+#define dummy_IF_max_8bits_lsb 0
+
+#define p_dummy_ForceDropRfGainByGUI 0x9bbb //INIT SCRIPT
+#define xd_p_dummy_ForceDropRfGainByGUI (*(volatile byte xdata *) 0x9bbb)
+#define dummy_ForceDropRfGainByGUI_pos 0
+#define dummy_ForceDropRfGainByGUI_len 1
+#define dummy_ForceDropRfGainByGUI_lsb 0
+
+#define p_dummy_antenna_unplugged 0x9bbc
+#define xd_p_dummy_antenna_unplugged (*(volatile byte xdata *) 0x9bbc)
+#define dummy_antenna_unplugged_pos 0
+#define dummy_antenna_unplugged_len 1
+#define dummy_antenna_unplugged_lsb 0
+
+#define p_dummy_ccid_bypass 0x9bbd
+#define xd_p_dummy_ccid_bypass (*(volatile byte xdata *) 0x9bbd)
+#define dummy_ccid_bypass_pos 0
+#define dummy_ccid_bypass_len 1
+#define dummy_ccid_bypass_lsb 0
+
+#define p_dummy_acid_bypass 0x9bbe
+#define xd_p_dummy_acid_bypass (*(volatile byte xdata *) 0x9bbe)
+#define dummy_acid_bypass_pos 0
+#define dummy_acid_bypass_len 1
+#define dummy_acid_bypass_lsb 0
+
+#define p_dummy_aci_0 0x9bbf
+#define xd_p_dummy_aci_0 (*(volatile byte xdata *) 0x9bbf)
+#define dummy_aci_0_pos 0
+#define dummy_aci_0_len 8
+#define dummy_aci_0_lsb 0
+
+#define p_dummy_aci_1 0x9bc0
+#define xd_p_dummy_aci_1 (*(volatile byte xdata *) 0x9bc0)
+#define dummy_aci_1_pos 0
+#define dummy_aci_1_len 8
+#define dummy_aci_1_lsb 0
+
+#define p_dummy_CallApShiftFreofTuner 0x9bc1
+#define xd_p_dummy_CallApShiftFreofTuner (*(volatile byte xdata *) 0x9bc1)
+#define dummy_CallApShiftFreofTuner_pos 0
+#define dummy_CallApShiftFreofTuner_len 8
+#define dummy_CallApShiftFreofTuner_lsb 0
+
+#define p_dummy_antenna_unplug_thr 0x9bc2
+#define xd_p_dummy_antenna_unplug_thr (*(volatile byte xdata *) 0x9bc2)
+#define dummy_antenna_unplug_thr_pos 0
+#define dummy_antenna_unplug_thr_len 1
+#define dummy_antenna_unplug_thr_lsb 0
+
+#define p_dummy_rf_min_bak_7_0 0x9bc3
+#define xd_p_dummy_rf_min_bak_7_0 (*(volatile byte xdata *) 0x9bc3)
+#define dummy_rf_min_bak_7_0_pos 0
+#define dummy_rf_min_bak_7_0_len 8
+#define dummy_rf_min_bak_7_0_lsb 0
+
+#define p_dummy_rf_min_bak_9_8 0x9bc4
+#define xd_p_dummy_rf_min_bak_9_8 (*(volatile byte xdata *) 0x9bc4)
+#define dummy_rf_min_bak_9_8_pos 0
+#define dummy_rf_min_bak_9_8_len 8
+#define dummy_rf_min_bak_9_8_lsb 0
+
+#define p_dummy_if_min_bak_7_0 0x9bc5
+#define xd_p_dummy_if_min_bak_7_0 (*(volatile byte xdata *) 0x9bc5)
+#define dummy_if_min_bak_7_0_pos 0
+#define dummy_if_min_bak_7_0_len 8
+#define dummy_if_min_bak_7_0_lsb 0
+
+#define p_dummy_if_min_bak_9_8 0x9bc6
+#define xd_p_dummy_if_min_bak_9_8 (*(volatile byte xdata *) 0x9bc6)
+#define dummy_if_min_bak_9_8_pos 0
+#define dummy_if_min_bak_9_8_len 8
+#define dummy_if_min_bak_9_8_lsb 0
+
+#define p_dummy_rf_min_8bits_bak 0x9bc7
+#define xd_p_dummy_rf_min_8bits_bak (*(volatile byte xdata *) 0x9bc7)
+#define dummy_rf_min_8bits_bak_pos 0
+#define dummy_rf_min_8bits_bak_len 8
+#define dummy_rf_min_8bits_bak_lsb 0
+
+#define p_dummy_reg_weak_signal_rfagc_thr 0x9bc8
+#define xd_p_dummy_reg_weak_signal_rfagc_thr (*(volatile byte xdata *) 0x9bc8)
+#define dummy_reg_weak_signal_rfagc_thr_pos 0
+#define dummy_reg_weak_signal_rfagc_thr_len 8
+#define dummy_reg_weak_signal_rfagc_thr_lsb 0
+
+#define p_dummy_reg_unplug_th 0x9bc9
+#define xd_p_dummy_reg_unplug_th (*(volatile byte xdata *) 0x9bc9)
+#define dummy_reg_unplug_th_pos 0
+#define dummy_reg_unplug_th_len 8
+#define dummy_reg_unplug_th_lsb 0
+
+#define p_dummy_strong_signal_detected 0x9bca
+#define xd_p_dummy_strong_signal_detected (*(volatile byte xdata *) 0x9bca)
+#define dummy_strong_signal_detected_pos 0
+#define dummy_strong_signal_detected_len 1
+#define dummy_strong_signal_detected_lsb 0
+
+#define p_dummy_reg_unplug_flag 0x9bcb
+#define xd_p_dummy_reg_unplug_flag (*(volatile byte xdata *) 0x9bcb)
+#define dummy_reg_unplug_flag_pos 0
+#define dummy_reg_unplug_flag_len 1
+#define dummy_reg_unplug_flag_lsb 0
+
+#define p_dummy_reg_CFI_th 0x9bcc
+#define xd_p_dummy_reg_CFI_th (*(volatile byte xdata *) 0x9bcc)
+#define dummy_reg_CFI_th_pos 0
+#define dummy_reg_CFI_th_len 8
+#define dummy_reg_CFI_th_lsb 0
+
+#define p_dummy_cvi_reg_15_8 0x9bcd
+#define xd_p_dummy_cvi_reg_15_8 (*(volatile byte xdata *) 0x9bcd)
+#define dummy_cvi_reg_15_8_pos 0
+#define dummy_cvi_reg_15_8_len 8
+#define dummy_cvi_reg_15_8_lsb 8
+
+#define p_dummy_cvi_reg_7_0 0x9bce
+#define xd_p_dummy_cvi_reg_7_0 (*(volatile byte xdata *) 0x9bce)
+#define dummy_cvi_reg_7_0_pos 0
+#define dummy_cvi_reg_7_0_len 8
+#define dummy_cvi_reg_7_0_lsb 0
+
+#define p_dummy_fot_coeff_tuner_type 0x9bcf
+#define xd_p_dummy_fot_coeff_tuner_type (*(volatile byte xdata *) 0x9bcf)
+#define dummy_fot_coeff_tuner_type_pos 0
+#define dummy_fot_coeff_tuner_type_len 8
+#define dummy_fot_coeff_tuner_type_lsb 0
+
+#define p_dummy_rsda_trigger_delay_cnt 0x9bd0
+#define xd_p_dummy_rsda_trigger_delay_cnt (*(volatile byte xdata *) 0x9bd0)
+#define dummy_rsda_trigger_delay_cnt_pos 0
+#define dummy_rsda_trigger_delay_cnt_len 8
+#define dummy_rsda_trigger_delay_cnt_lsb 0
+
+#define p_dummy_channelFlatnessInd 0x9bd1
+#define xd_p_dummy_channelFlatnessInd (*(volatile byte xdata *) 0x9bd1)
+#define dummy_channelFlatnessInd_pos 0
+#define dummy_channelFlatnessInd_len 1
+#define dummy_channelFlatnessInd_lsb 0
+
+#define p_dummy_fadc_type 0x9bd2
+#define xd_p_dummy_fadc_type (*(volatile byte xdata *) 0x9bd2)
+#define dummy_fadc_type_pos 0
+#define dummy_fadc_type_len 4
+#define dummy_fadc_type_lsb 0
+
+#define p_dummy_reg_unplug_rf_th 0x9bd3 //new
+#define xd_p_dummy_reg_unplug_rf_th (*(volatile byte xdata *) 0x9bd3)
+#define dummy_reg_unplug_rf_th_pos 0
+#define dummy_reg_unplug_rf_th_len 8
+#define dummy_reg_unplug_rf_th_lsb 0
+
+#define p_dummy_ce_is_mobile 0x9bd4
+#define xd_p_dummy_ce_is_mobile (*(volatile byte xdata *) 0x9bd4)
+#define dummy_ce_is_mobile_pos 0
+#define dummy_ce_is_mobile_len 1
+#define dummy_ce_is_mobile_lsb 0
+
+#define p_dummy_tuner_ver_0 0x9bd5 //GUI
+#define xd_p_dummy_tuner_ver_0 (*(volatile byte xdata *) 0x9bd5)
+#define dummy_tuner_ver_0_pos 0
+#define dummy_tuner_ver_0_len 8
+#define dummy_tuner_ver_0_lsb 0
+
+#define p_dummy_tuner_ver_1 0x9bd6 //GUI
+#define xd_p_dummy_tuner_ver_1 (*(volatile byte xdata *) 0x9bd6)
+#define dummy_tuner_ver_1_pos 0
+#define dummy_tuner_ver_1_len 8
+#define dummy_tuner_ver_1_lsb 0
+
+#define p_dummy_aagc_speed_detect_count 0x9bd7
+#define xd_p_dummy_aagc_speed_detect_count (*(volatile byte xdata *) 0x9bd7)
+#define dummy_aagc_speed_detect_count_pos 0
+#define dummy_aagc_speed_detect_count_len 8
+#define dummy_aagc_speed_detect_count_lsb 0
+
+#define p_dummy_aagc_mobile_thr 0x9bd8
+#define xd_p_dummy_aagc_mobile_thr (*(volatile byte xdata *) 0x9bd8)
+#define dummy_aagc_mobile_thr_pos 0
+#define dummy_aagc_mobile_thr_len 8
+#define dummy_aagc_mobile_thr_lsb 0
+
+#define p_dummy_aagc_nonmobile_thr 0x9bd9
+#define xd_p_dummy_aagc_nonmobile_thr (*(volatile byte xdata *) 0x9bd9)
+#define dummy_aagc_nonmobile_thr_pos 0
+#define dummy_aagc_nonmobile_thr_len 8
+#define dummy_aagc_nonmobile_thr_lsb 0
+
+#define p_dummy_retrain_dtop_bypass 0x9bda //GUI
+#define xd_p_dummy_retrain_dtop_bypass (*(volatile byte xdata *) 0x9bda)
+#define dummy_retrain_dtop_bypass_pos 0
+#define dummy_retrain_dtop_bypass_len 8
+#define dummy_retrain_dtop_bypass_lsb 0
+
+#define p_dummy_strong_detect_bypass 0x9bdb
+#define xd_p_dummy_strong_detect_bypass (*(volatile byte xdata *) 0x9bdb)
+#define dummy_strong_detect_bypass_pos 0
+#define dummy_strong_detect_bypass_len 8
+#define dummy_strong_detect_bypass_lsb 0
+
+//#define p_dummy_aaagc_bypass (DUMMY_RAM_BASE+35) //DEBUG
+//#define xd_p_dummy_aaagc_bypass (*(volatile byte xdata *) (DUMMY_RAM_BASE+35))
+//#define dummy_aaagc_bypass_pos 0
+//#define dummy_aaagc_bypass_len 8
+//#define dummy_aaagc_bypass_lsb 0
+
+#define p_dummy_ofsm_state 0x9bdd //DEBUG
+#define xd_p_dummy_ofsm_state (*(volatile byte xdata *) 0x9bdd)
+#define dummy_ofsm_state_pos 0
+#define dummy_ofsm_state_len 8
+#define dummy_ofsm_state_lsb 0
+
+#define p_dummy_rsda_trigger_en 0x9bde //DEBUG
+#define xd_p_dummy_rsda_trigger_en (*(volatile byte xdata *) 0x9bde)
+#define dummy_rsda_trigger_en_pos 0
+#define dummy_rsda_trigger_en_len 1
+#define dummy_rsda_trigger_en_lsb 0
+
+#define p_dummy_ce_mobile_count_max 0x9bdf //INIT
+#define xd_p_dummy_ce_mobile_count_max (*(volatile byte xdata *) 0x9bdf)
+#define dummy_ce_mobile_count_max_pos 0
+#define dummy_ce_mobile_count_max_len 8
+#define dummy_ce_mobile_count_max_lsb 0
+
+#define p_dummy_ce_mobile_count_th 0x9be0 //INIT
+#define xd_p_dummy_ce_mobile_count_th (*(volatile byte xdata *) 0x9be0)
+#define dummy_ce_mobile_count_th_pos 0
+#define dummy_ce_mobile_count_th_len 8
+#define dummy_ce_mobile_count_th_lsb 0
+
+#define p_dummy_timing_retrain_cnt 0x9be1
+#define xd_p_dummy_timing_retrain_cnt (*(volatile byte xdata *) 0x9be1)
+#define dummy_timing_retrain_cnt_pos 0
+#define dummy_timing_retrain_cnt_len 8
+#define dummy_timing_retrain_cnt_lsb 0
+
+#define p_dummy_err_timing_detect_en 0x9be2
+#define xd_p_dummy_err_timing_detect_en (*(volatile byte xdata *) 0x9be2)
+#define dummy_err_timing_detect_en_pos 0
+#define dummy_err_timing_detect_en_len 8
+#define dummy_err_timing_detect_en_lsb 0
+
+#define p_dummy_ss_dtop_bypass 0x9be3 //GUI
+#define xd_p_dummy_ss_dtop_bypass (*(volatile byte xdata *) 0x9be3)
+#define dummy_ss_dtop_bypass_pos 0
+#define dummy_ss_dtop_bypass_len 8
+#define dummy_ss_dtop_bypass_lsb 0
+
+#define p_dummy_stes_quit_case 0x9be4 //DEBUG
+#define xd_p_dummy_stes_quit_case (*(volatile byte xdata *) 0x9be4)
+#define dummy_stes_quit_case_pos 0
+#define dummy_stes_quit_case_len 4
+#define dummy_stes_quit_case_lsb 0
+
+#define p_dummy_rom_ver_1 0x9be5 //GUI
+#define xd_p_dummy_rom_ver_1 (*(volatile byte xdata *) 0x9be5)
+#define dummy_rom_ver_1_pos 0
+#define dummy_rom_ver_1_len 8
+#define dummy_rom_ver_1_lsb 0
+
+#define p_dummy_spec_inv_detect_en 0x9be6 //GUI
+#define xd_p_dummy_spec_inv_detect_en (*(volatile byte xdata *) 0x9be6)
+#define dummy_spec_inv_detect_en_pos 0
+#define dummy_spec_inv_detect_en_len 8
+#define dummy_spec_inv_detect_en_lsb 0
+
+#define p_dummy_bfs_fcw_def_7_0 0x9be7 //GUI
+#define xd_p_dummy_bfs_fcw_def_7_0 (*(volatile byte xdata *) 0x9be7)
+#define dummy_bfs_fcw_def_7_0_pos 0
+#define dummy_bfs_fcw_def_7_0_len 8
+#define dummy_bfs_fcw_def_7_0_lsb 0
+
+
+#define p_dummy_bfs_fcw_def_15_8 0x9be8 //GUI
+#define xd_p_dummy_bfs_fcw_def_15_8 (*(volatile byte xdata *) 0x9be8)
+#define dummy_bfs_fcw_def_15_8_pos 0
+#define dummy_bfs_fcw_def_15_8_len 8
+#define dummy_bfs_fcw_def_15_8_lsb 0
+
+
+#define p_dummy_bfs_fcw_def_22_16 0x9be9 //GUI
+#define xd_p_dummy_bfs_fcw_def_22_16 (*(volatile byte xdata *) 0x9be9)
+#define dummy_bfs_fcw_def_22_16_pos 0
+#define dummy_bfs_fcw_def_22_16_len 7
+#define dummy_bfs_fcw_def_22_16_lsb 0
+
+#define p_dummy_bfs_fcw_inv_7_0 0x9bea //GUI
+#define xd_p_dummy_bfs_fcw_inv_7_0 (*(volatile byte xdata *) 0x9bea)
+#define dummy_bfs_fcw_inv_7_0_pos 0
+#define dummy_bfs_fcw_inv_7_0_len 8
+#define dummy_bfs_fcw_inv_7_0_lsb 0
+
+#define p_dummy_bfs_fcw_inv_15_8 0x9beb //GUI
+#define xd_p_dummy_bfs_fcw_inv_15_8 (*(volatile byte xdata *) 0x9beb)
+#define dummy_bfs_fcw_inv_15_8_pos 0
+#define dummy_bfs_fcw_inv_15_8_len 8
+#define dummy_bfs_fcw_inv_15_8_lsb 0
+
+#define p_dummy_bfs_fcw_inv_22_16 0x9bec //GUI
+#define xd_p_dummy_bfs_fcw_inv_22_16 (*(volatile byte xdata *) 0x9bec)
+#define dummy_bfs_fcw_inv_22_16_pos 0
+#define dummy_bfs_fcw_inv_22_16_len 7
+#define dummy_bfs_fcw_inv_22_16_lsb 0
+
+#define p_dummy_spec_inv_detected 0x9bed //GUI
+#define xd_p_dummy_spec_inv_detected (*(volatile byte xdata *) 0x9bed)
+#define dummy_spec_inv_detected_pos 0
+#define dummy_spec_inv_detected_len 1
+#define dummy_spec_inv_detected_lsb 0
+
+//#define p_dummy_adc_attenu_en (DUMMY_RAM_BASE+53)
+//#define xd_p_dummy_adc_attenu_en (*(volatile byte xdata *) (DUMMY_RAM_BASE+53))
+//#define dummy_adc_attenu_en_pos 0
+//#define dummy_adc_attenu_en_len 1
+//#define dummy_adc_attenu_en_lsb 0
+
+#define p_dummy_adc_attenu_on_if_thr 0x9bef
+#define xd_p_dummy_adc_attenu_on_if_thr (*(volatile byte xdata *) 0x9bef)
+#define dummy_adc_attenu_on_if_thr_pos 0
+#define dummy_adc_attenu_on_if_thr_len 8
+#define dummy_adc_attenu_on_if_thr_lsb 0
+
+#define p_dummy_adc_attenu_off_if_thr 0x9bf0
+#define xd_p_dummy_adc_attenu_off_if_thr (*(volatile byte xdata *) 0x9bf0)
+#define dummy_adc_attenu_off_if_thr_pos 0
+#define dummy_adc_attenu_off_if_thr_len 8
+#define dummy_adc_attenu_off_if_thr_lsb 0
+
+#define p_dummy_rom_ver_0 0x9bf1 //GUI
+#define xd_p_dummy_rom_ver_0 (*(volatile byte xdata *) 0x9bf1)
+#define dummy_rom_ver_0_pos 0
+#define dummy_rom_ver_0_len 8
+#define dummy_rom_ver_0_lsb 0
+
+#define p_dummy_api_ver_0 0x9bf2 //GUI
+#define xd_p_dummy_api_ver_0 (*(volatile byte xdata *) 0x9bf2)
+#define dummy_api_ver_0_pos 0
+#define dummy_api_ver_0_len 8
+#define dummy_api_ver_0_lsb 0
+
+#define p_dummy_api_ver_1 0x9bf3 //GUI
+#define xd_p_dummy_api_ver_1 (*(volatile byte xdata *) 0x9bf3)
+#define dummy_api_ver_1_pos 0
+#define dummy_api_ver_1_len 8
+#define dummy_api_ver_1_lsb 0
+
+#define p_dummy_api_ver_2 0x9bf4 //GUI
+#define xd_p_dummy_api_ver_2 (*(volatile byte xdata *) 0x9bf4)
+#define dummy_api_ver_2_pos 0
+#define dummy_api_ver_2_len 8
+#define dummy_api_ver_2_lsb 0
+
+#define p_dummy_api_ver_3 0x9bf5 //GUI
+#define xd_p_dummy_api_ver_3 (*(volatile byte xdata *) 0x9bf5)
+#define dummy_api_ver_3_pos 0
+#define dummy_api_ver_3_len 8
+#define dummy_api_ver_3_lsb 0
+
+#define p_dummy_qef_drop_num 0x9bf6
+#define xd_p_dummy_qef_drop_num (*(volatile byte xdata *) 0x9bf6)
+#define dummy_qef_drop_num_pos 0
+#define dummy_qef_drop_num_len 8
+#define dummy_qef_drop_num_lsb 0
+
+#define p_dummy_terr_drop_num 0x9bf7
+#define xd_p_dummy_terr_drop_num (*(volatile byte xdata *) 0x9bf7)
+#define dummy_terr_drop_num_pos 0
+#define dummy_terr_drop_num_len 8
+#define dummy_terr_drop_num_lsb 0
+
+#define p_dummy_qef_drop_value 0x9bf8
+#define xd_p_dummy_qef_drop_value (*(volatile byte xdata *) 0x9bf8)
+#define dummy_qef_drop_value_pos 0
+#define dummy_qef_drop_value_len 8
+#define dummy_qef_drop_value_lsb 0
+
+#define p_dummy_terr_drop_value 0x9bf9
+#define xd_p_dummy_terr_drop_value (*(volatile byte xdata *) 0x9bf9)
+#define dummy_terr_drop_value_pos 0
+#define dummy_terr_drop_value_len 8
+#define dummy_terr_drop_value_lsb 0
+
+#define p_dummy_ber_times 0x9bfa
+#define xd_p_dummy_ber_times (*(volatile byte xdata *) 0x9bfa)
+#define dummy_ber_times_pos 0
+#define dummy_ber_times_len 8
+#define dummy_ber_times_lsb 0
+
+#define p_dummy_good_performance_th 0x9bfb
+#define xd_p_dummy_good_performance_th (*(volatile byte xdata *) 0x9bfb)
+#define dummy_good_performance_th_pos 0
+#define dummy_good_performance_th_len 8
+#define dummy_good_performance_th_lsb 0
+
+#define p_dummy_one_shot_drop 0x9bfc
+#define xd_p_dummy_one_shot_drop (*(volatile byte xdata *) 0x9bfc)
+#define dummy_one_shot_drop_pos 0
+#define dummy_one_shot_drop_len 8
+#define dummy_one_shot_drop_lsb 0
+
+#define p_dummy_tps_trial_times 0x9bfd
+#define xd_p_dummy_tps_trial_times (*(volatile byte xdata *) 0x9bfd)
+#define dummy_tps_trial_times_pos 0
+#define dummy_tps_trial_times_len 8
+#define dummy_tps_trial_times_lsb 0
+
+#define p_dummy_was_steady_trial_times 0x9bfe
+#define xd_p_dummy_was_steady_trial_times (*(volatile byte xdata *) 0x9bfe)
+#define dummy_was_steady_trial_times_pos 0
+#define dummy_was_steady_trial_times_len 8
+#define dummy_was_steady_trial_times_lsb 0
+
+#define p_dummy_timing_err_level 0x9bff
+#define xd_p_dummy_timing_err_level (*(volatile byte xdata *) 0x9bff)
+#define dummy_timing_err_level_pos 0
+#define dummy_timing_err_level_len 4
+#define dummy_timing_err_level_lsb 0
+
+
+#endif
diff --git a/v4l/kernel-2.6.tmp/dvb-pll.c b/v4l/kernel-2.6.tmp/dvb-pll.c
new file mode 100644
index 0000000..50c8ee2
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb-pll.c
@@ -0,0 +1,874 @@
+/*
+ * descriptions + helper functions for simple dvb plls.
+ *
+ * (c) 2004 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <linux/module.h>
+#include <linux/dvb/frontend.h>
+#include <asm/types.h>
+#include "compat.h"
+
+#include "dvb-pll.h"
+
+struct dvb_pll_priv {
+ /* pll number */
+ int nr;
+
+ /* i2c details */
+ int pll_i2c_address;
+ struct i2c_adapter *i2c;
+
+ /* the PLL descriptor */
+ struct dvb_pll_desc *pll_desc;
+
+ /* cached frequency/bandwidth */
+ u32 frequency;
+ u32 bandwidth;
+};
+
+#define DVB_PLL_MAX 64
+
+static unsigned int dvb_pll_devcount;
+
+static int debug = 0;
+module_param(debug, int, 0644);
+MODULE_PARM_DESC(debug, "enable verbose debug messages");
+
+static unsigned int input[DVB_PLL_MAX] = { [ 0 ... (DVB_PLL_MAX-1) ] = 0 };
+module_param_array(input, int, NULL, 0644);
+MODULE_PARM_DESC(input,"specify rf input choice, 0 for autoselect (default)");
+
+static unsigned int id[DVB_PLL_MAX] =
+ { [ 0 ... (DVB_PLL_MAX-1) ] = DVB_PLL_UNDEFINED };
+module_param_array(id, int, NULL, 0644);
+MODULE_PARM_DESC(id, "force pll id to use (DEBUG ONLY)");
+
+/* ----------------------------------------------------------- */
+
+struct dvb_pll_desc {
+ char *name;
+ u32 min;
+ u32 max;
+ u32 iffreq;
+ void (*set)(struct dvb_frontend *fe, u8 *buf,
+ const struct dvb_frontend_parameters *params);
+ u8 *initdata;
+ u8 *sleepdata;
+ int count;
+ struct {
+ u32 limit;
+ u32 stepsize;
+ u8 config;
+ u8 cb;
+ } entries[12];
+};
+
+/* ----------------------------------------------------------- */
+/* descriptions */
+
+/* Set AGC TOP value to 103 dBuV:
+ 0x80 = Control Byte
+ 0x40 = 250 uA charge pump (irrelevant)
+ 0x18 = Aux Byte to follow
+ 0x06 = 64.5 kHz divider (irrelevant)
+ 0x01 = Disable Vt (aka sleep)
+
+ 0x00 = AGC Time constant 2s Iagc = 300 nA (vs 0x80 = 9 nA)
+ 0x50 = AGC Take over point = 103 dBuV */
+static u8 tua603x_agc103[] = { 2, 0x80|0x40|0x18|0x06|0x01, 0x00|0x50 };
+
+/* 0x04 = 166.67 kHz divider
+
+ 0x80 = AGC Time constant 50ms Iagc = 9 uA
+ 0x20 = AGC Take over point = 112 dBuV */
+static u8 tua603x_agc112[] = { 2, 0x80|0x40|0x18|0x04|0x01, 0x80|0x20 };
+
+static struct dvb_pll_desc dvb_pll_thomson_dtt7579 = {
+ .name = "Thomson dtt7579",
+ .min = 177000000,
+ .max = 858000000,
+ .iffreq= 36166667,
+ .sleepdata = (u8[]){ 2, 0xb4, 0x03 },
+ .count = 4,
+ .entries = {
+ { 443250000, 166667, 0xb4, 0x02 },
+ { 542000000, 166667, 0xb4, 0x08 },
+ { 771000000, 166667, 0xbc, 0x08 },
+ { 999999999, 166667, 0xf4, 0x08 },
+ },
+};
+
+static struct dvb_pll_desc dvb_pll_thomson_dtt7610 = {
+ .name = "Thomson dtt7610",
+ .min = 44000000,
+ .max = 958000000,
+ .iffreq= 44000000,
+ .count = 3,
+ .entries = {
+ { 157250000, 62500, 0x8e, 0x39 },
+ { 454000000, 62500, 0x8e, 0x3a },
+ { 999999999, 62500, 0x8e, 0x3c },
+ },
+};
+
+static void thomson_dtt759x_bw(struct dvb_frontend *fe, u8 *buf,
+ const struct dvb_frontend_parameters *params)
+{
+ if (BANDWIDTH_7_MHZ == params->u.ofdm.bandwidth)
+ buf[3] |= 0x10;
+}
+
+static struct dvb_pll_desc dvb_pll_thomson_dtt759x = {
+ .name = "Thomson dtt759x",
+ .min = 177000000,
+ .max = 896000000,
+ .set = thomson_dtt759x_bw,
+ .iffreq= 36166667,
+ .sleepdata = (u8[]){ 2, 0x84, 0x03 },
+ .count = 5,
+ .entries = {
+ { 264000000, 166667, 0xb4, 0x02 },
+ { 470000000, 166667, 0xbc, 0x02 },
+ { 735000000, 166667, 0xbc, 0x08 },
+ { 835000000, 166667, 0xf4, 0x08 },
+ { 999999999, 166667, 0xfc, 0x08 },
+ },
+};
+
+static struct dvb_pll_desc dvb_pll_lg_z201 = {
+ .name = "LG z201",
+ .min = 174000000,
+ .max = 862000000,
+ .iffreq= 36166667,
+ .sleepdata = (u8[]){ 2, 0xbc, 0x03 },
+ .count = 5,
+ .entries = {
+ { 157500000, 166667, 0xbc, 0x01 },
+ { 443250000, 166667, 0xbc, 0x02 },
+ { 542000000, 166667, 0xbc, 0x04 },
+ { 830000000, 166667, 0xf4, 0x04 },
+ { 999999999, 166667, 0xfc, 0x04 },
+ },
+};
+
+static struct dvb_pll_desc dvb_pll_microtune_4042 = {
+ .name = "Microtune 4042 FI5",
+ .min = 57000000,
+ .max = 858000000,
+ .iffreq= 44000000,
+ .count = 3,
+ .entries = {
+ { 162000000, 62500, 0x8e, 0xa1 },
+ { 457000000, 62500, 0x8e, 0x91 },
+ { 999999999, 62500, 0x8e, 0x31 },
+ },
+};
+
+static struct dvb_pll_desc dvb_pll_thomson_dtt761x = {
+ /* DTT 7611 7611A 7612 7613 7613A 7614 7615 7615A */
+ .name = "Thomson dtt761x",
+ .min = 57000000,
+ .max = 863000000,
+ .iffreq= 44000000,
+ .count = 3,
+ .initdata = tua603x_agc103,
+ .entries = {
+ { 147000000, 62500, 0x8e, 0x39 },
+ { 417000000, 62500, 0x8e, 0x3a },
+ { 999999999, 62500, 0x8e, 0x3c },
+ },
+};
+
+static struct dvb_pll_desc dvb_pll_unknown_1 = {
+ .name = "unknown 1", /* used by dntv live dvb-t */
+ .min = 174000000,
+ .max = 862000000,
+ .iffreq= 36166667,
+ .count = 9,
+ .entries = {
+ { 150000000, 166667, 0xb4, 0x01 },
+ { 173000000, 166667, 0xbc, 0x01 },
+ { 250000000, 166667, 0xb4, 0x02 },
+ { 400000000, 166667, 0xbc, 0x02 },
+ { 420000000, 166667, 0xf4, 0x02 },
+ { 470000000, 166667, 0xfc, 0x02 },
+ { 600000000, 166667, 0xbc, 0x08 },
+ { 730000000, 166667, 0xf4, 0x08 },
+ { 999999999, 166667, 0xfc, 0x08 },
+ },
+};
+
+/* Infineon TUA6010XS
+ * used in Thomson Cable Tuner
+ */
+static struct dvb_pll_desc dvb_pll_tua6010xs = {
+ .name = "Infineon TUA6010XS",
+ .min = 44250000,
+ .max = 858000000,
+ .iffreq= 36125000,
+ .count = 3,
+ .entries = {
+ { 115750000, 62500, 0x8e, 0x03 },
+ { 403250000, 62500, 0x8e, 0x06 },
+ { 999999999, 62500, 0x8e, 0x85 },
+ },
+};
+
+/* Panasonic env57h1xd5 (some Philips PLL ?) */
+static struct dvb_pll_desc dvb_pll_env57h1xd5 = {
+ .name = "Panasonic ENV57H1XD5",
+ .min = 44250000,
+ .max = 858000000,
+ .iffreq= 36125000,
+ .count = 4,
+ .entries = {
+ { 153000000, 166667, 0xc2, 0x41 },
+ { 470000000, 166667, 0xc2, 0x42 },
+ { 526000000, 166667, 0xc2, 0x84 },
+ { 999999999, 166667, 0xc2, 0xa4 },
+ },
+};
+
+/* Philips TDA6650/TDA6651
+ * used in Panasonic ENV77H11D5
+ */
+static void tda665x_bw(struct dvb_frontend *fe, u8 *buf,
+ const struct dvb_frontend_parameters *params)
+{
+ if (params->u.ofdm.bandwidth == BANDWIDTH_8_MHZ)
+ buf[3] |= 0x08;
+}
+
+static struct dvb_pll_desc dvb_pll_tda665x = {
+ .name = "Philips TDA6650/TDA6651",
+ .min = 44250000,
+ .max = 858000000,
+ .set = tda665x_bw,
+ .iffreq= 36166667,
+ .initdata = (u8[]){ 4, 0x0b, 0xf5, 0x85, 0xab },
+ .count = 12,
+ .entries = {
+ { 93834000, 166667, 0xca, 0x61 /* 011 0 0 0 01 */ },
+ { 123834000, 166667, 0xca, 0xa1 /* 101 0 0 0 01 */ },
+ { 161000000, 166667, 0xca, 0xa1 /* 101 0 0 0 01 */ },
+ { 163834000, 166667, 0xca, 0xc2 /* 110 0 0 0 10 */ },
+ { 253834000, 166667, 0xca, 0x62 /* 011 0 0 0 10 */ },
+ { 383834000, 166667, 0xca, 0xa2 /* 101 0 0 0 10 */ },
+ { 443834000, 166667, 0xca, 0xc2 /* 110 0 0 0 10 */ },
+ { 444000000, 166667, 0xca, 0xc4 /* 110 0 0 1 00 */ },
+ { 583834000, 166667, 0xca, 0x64 /* 011 0 0 1 00 */ },
+ { 793834000, 166667, 0xca, 0xa4 /* 101 0 0 1 00 */ },
+ { 444834000, 166667, 0xca, 0xc4 /* 110 0 0 1 00 */ },
+ { 861000000, 166667, 0xca, 0xe4 /* 111 0 0 1 00 */ },
+ }
+};
+
+/* Infineon TUA6034
+ * used in LG TDTP E102P
+ */
+static void tua6034_bw(struct dvb_frontend *fe, u8 *buf,
+ const struct dvb_frontend_parameters *params)
+{
+ if (BANDWIDTH_7_MHZ != params->u.ofdm.bandwidth)
+ buf[3] |= 0x08;
+}
+
+static struct dvb_pll_desc dvb_pll_tua6034 = {
+ .name = "Infineon TUA6034",
+ .min = 44250000,
+ .max = 858000000,
+ .iffreq= 36166667,
+ .count = 3,
+ .set = tua6034_bw,
+ .entries = {
+ { 174500000, 62500, 0xce, 0x01 },
+ { 230000000, 62500, 0xce, 0x02 },
+ { 999999999, 62500, 0xce, 0x04 },
+ },
+};
+
+/* Infineon TUA6034
+ * used in LG TDVS-H061F, LG TDVS-H062F and LG TDVS-H064F
+ */
+static struct dvb_pll_desc dvb_pll_lg_tdvs_h06xf = {
+ .name = "LG TDVS-H06xF",
+ .min = 54000000,
+ .max = 863000000,
+ .iffreq= 44000000,
+ .initdata = tua603x_agc103,
+ .count = 3,
+ .entries = {
+ { 165000000, 62500, 0xce, 0x01 },
+ { 450000000, 62500, 0xce, 0x02 },
+ { 999999999, 62500, 0xce, 0x04 },
+ },
+};
+
+/* Philips FMD1216ME
+ * used in Medion Hybrid PCMCIA card and USB Box
+ */
+static void fmd1216me_bw(struct dvb_frontend *fe, u8 *buf,
+ const struct dvb_frontend_parameters *params)
+{
+ if (params->u.ofdm.bandwidth == BANDWIDTH_8_MHZ &&
+ params->frequency >= 158870000)
+ buf[3] |= 0x08;
+}
+
+static struct dvb_pll_desc dvb_pll_fmd1216me = {
+ .name = "Philips FMD1216ME",
+ .min = 50870000,
+ .max = 858000000,
+ .iffreq= 36125000,
+ .set = fmd1216me_bw,
+ .initdata = tua603x_agc112,
+ .sleepdata = (u8[]){ 4, 0x9c, 0x60, 0x85, 0x54 },
+ .count = 7,
+ .entries = {
+ { 143870000, 166667, 0xbc, 0x41 },
+ { 158870000, 166667, 0xf4, 0x41 },
+ { 329870000, 166667, 0xbc, 0x42 },
+ { 441870000, 166667, 0xf4, 0x42 },
+ { 625870000, 166667, 0xbc, 0x44 },
+ { 803870000, 166667, 0xf4, 0x44 },
+ { 999999999, 166667, 0xfc, 0x44 },
+ }
+};
+
+/* ALPS TDED4
+ * used in Nebula-Cards and USB boxes
+ */
+static void tded4_bw(struct dvb_frontend *fe, u8 *buf,
+ const struct dvb_frontend_parameters *params)
+{
+ if (params->u.ofdm.bandwidth == BANDWIDTH_8_MHZ)
+ buf[3] |= 0x04;
+}
+
+static struct dvb_pll_desc dvb_pll_tded4 = {
+ .name = "ALPS TDED4",
+ .min = 47000000,
+ .max = 863000000,
+ .iffreq= 36166667,
+ .set = tded4_bw,
+ .count = 4,
+ .entries = {
+ { 153000000, 166667, 0x85, 0x01 },
+ { 470000000, 166667, 0x85, 0x02 },
+ { 823000000, 166667, 0x85, 0x08 },
+ { 999999999, 166667, 0x85, 0x88 },
+ }
+};
+
+/* ALPS TDHU2
+ * used in AverTVHD MCE A180
+ */
+static struct dvb_pll_desc dvb_pll_tdhu2 = {
+ .name = "ALPS TDHU2",
+ .min = 54000000,
+ .max = 864000000,
+ .iffreq= 44000000,
+ .count = 4,
+ .entries = {
+ { 162000000, 62500, 0x85, 0x01 },
+ { 426000000, 62500, 0x85, 0x02 },
+ { 782000000, 62500, 0x85, 0x08 },
+ { 999999999, 62500, 0x85, 0x88 },
+ }
+};
+
+/* Philips TUV1236D
+ * used in ATI HDTV Wonder
+ */
+static void tuv1236d_rf(struct dvb_frontend *fe, u8 *buf,
+ const struct dvb_frontend_parameters *params)
+{
+ struct dvb_pll_priv *priv = fe->tuner_priv;
+ unsigned int new_rf = input[priv->nr];
+
+ if ((new_rf == 0) || (new_rf > 2)) {
+ switch (params->u.vsb.modulation) {
+ case QAM_64:
+ case QAM_256:
+ new_rf = 1;
+ break;
+ case VSB_8:
+ default:
+ new_rf = 2;
+ }
+ }
+
+ switch (new_rf) {
+ case 1:
+ buf[3] |= 0x08;
+ break;
+ case 2:
+ buf[3] &= ~0x08;
+ break;
+ default:
+ printk(KERN_WARNING
+ "%s: unhandled rf input selection: %d",
+ __FUNCTION__, new_rf);
+ }
+}
+
+static struct dvb_pll_desc dvb_pll_tuv1236d = {
+ .name = "Philips TUV1236D",
+ .min = 54000000,
+ .max = 864000000,
+ .iffreq= 44000000,
+ .set = tuv1236d_rf,
+ .count = 3,
+ .entries = {
+ { 157250000, 62500, 0xc6, 0x41 },
+ { 454000000, 62500, 0xc6, 0x42 },
+ { 999999999, 62500, 0xc6, 0x44 },
+ },
+};
+
+/* Samsung TBMV30111IN / TBMV30712IN1
+ * used in Air2PC ATSC - 2nd generation (nxt2002)
+ */
+static struct dvb_pll_desc dvb_pll_samsung_tbmv = {
+ .name = "Samsung TBMV30111IN / TBMV30712IN1",
+ .min = 54000000,
+ .max = 860000000,
+ .iffreq= 44000000,
+ .count = 6,
+ .entries = {
+ { 172000000, 166667, 0xb4, 0x01 },
+ { 214000000, 166667, 0xb4, 0x02 },
+ { 467000000, 166667, 0xbc, 0x02 },
+ { 721000000, 166667, 0xbc, 0x08 },
+ { 841000000, 166667, 0xf4, 0x08 },
+ { 999999999, 166667, 0xfc, 0x02 },
+ }
+};
+
+/*
+ * Philips SD1878 Tuner.
+ */
+static struct dvb_pll_desc dvb_pll_philips_sd1878_tda8261 = {
+ .name = "Philips SD1878",
+ .min = 950000,
+ .max = 2150000,
+ .iffreq= 249, /* zero-IF, offset 249 is to round up */
+ .count = 4,
+ .entries = {
+ { 1250000, 500, 0xc4, 0x00},
+ { 1550000, 500, 0xc4, 0x40},
+ { 2050000, 500, 0xc4, 0x80},
+ { 2150000, 500, 0xc4, 0xc0},
+ },
+};
+
+/*
+ * Philips TD1316 Tuner.
+ */
+static void td1316_bw(struct dvb_frontend *fe, u8 *buf,
+ const struct dvb_frontend_parameters *params)
+{
+ u8 band;
+
+ /* determine band */
+ if (params->frequency < 161000000)
+ band = 1;
+ else if (params->frequency < 444000000)
+ band = 2;
+ else
+ band = 4;
+
+ buf[3] |= band;
+
+ /* setup PLL filter */
+ if (params->u.ofdm.bandwidth == BANDWIDTH_8_MHZ)
+ buf[3] |= 1 << 3;
+}
+
+static struct dvb_pll_desc dvb_pll_philips_td1316 = {
+ .name = "Philips TD1316",
+ .min = 87000000,
+ .max = 895000000,
+ .iffreq= 36166667,
+ .set = td1316_bw,
+ .count = 9,
+ .entries = {
+ { 93834000, 166667, 0xca, 0x60},
+ { 123834000, 166667, 0xca, 0xa0},
+ { 163834000, 166667, 0xca, 0xc0},
+ { 253834000, 166667, 0xca, 0x60},
+ { 383834000, 166667, 0xca, 0xa0},
+ { 443834000, 166667, 0xca, 0xc0},
+ { 583834000, 166667, 0xca, 0x60},
+ { 793834000, 166667, 0xca, 0xa0},
+ { 858834000, 166667, 0xca, 0xe0},
+ },
+};
+
+/* FE6600 used on DViCO Hybrid */
+static struct dvb_pll_desc dvb_pll_thomson_fe6600 = {
+ .name = "Thomson FE6600",
+ .min = 44250000,
+ .max = 858000000,
+ .iffreq= 36125000,
+ .count = 4,
+ .entries = {
+ { 250000000, 166667, 0xb4, 0x12 },
+ { 455000000, 166667, 0xfe, 0x11 },
+ { 775500000, 166667, 0xbc, 0x18 },
+ { 999999999, 166667, 0xf4, 0x18 },
+ }
+};
+
+static void opera1_bw(struct dvb_frontend *fe, u8 *buf,
+ const struct dvb_frontend_parameters *params)
+{
+ if (params->u.ofdm.bandwidth == BANDWIDTH_8_MHZ)
+ buf[2] |= 0x08;
+}
+
+static struct dvb_pll_desc dvb_pll_opera1 = {
+ .name = "Opera Tuner",
+ .min = 900000,
+ .max = 2250000,
+ .iffreq= 0,
+ .set = opera1_bw,
+ .count = 8,
+ .entries = {
+ { 1064000, 500, 0xe5, 0xc6 },
+ { 1169000, 500, 0xe5, 0xe6 },
+ { 1299000, 500, 0xe5, 0x24 },
+ { 1444000, 500, 0xe5, 0x44 },
+ { 1606000, 500, 0xe5, 0x64 },
+ { 1777000, 500, 0xe5, 0x84 },
+ { 1941000, 500, 0xe5, 0xa4 },
+ { 2250000, 500, 0xe5, 0xc4 },
+ }
+};
+
+/* Philips FCV1236D
+ */
+static struct dvb_pll_desc dvb_pll_fcv1236d = {
+/* Bit_0: RF Input select
+ * Bit_1: 0=digital, 1=analog
+ */
+ .name = "Philips FCV1236D",
+ .min = 53000000,
+ .max = 803000000,
+ .iffreq= 44000000,
+ .count = 3,
+ .entries = {
+ { 159000000, 62500, 0x8e, 0xa0 },
+ { 453000000, 62500, 0x8e, 0x90 },
+ { 999999999, 62500, 0x8e, 0x30 },
+ },
+};
+
+/* ----------------------------------------------------------- */
+
+static struct dvb_pll_desc *pll_list[] = {
+ [DVB_PLL_UNDEFINED] = NULL,
+ [DVB_PLL_THOMSON_DTT7579] = &dvb_pll_thomson_dtt7579,
+ [DVB_PLL_THOMSON_DTT759X] = &dvb_pll_thomson_dtt759x,
+ [DVB_PLL_THOMSON_DTT7610] = &dvb_pll_thomson_dtt7610,
+ [DVB_PLL_LG_Z201] = &dvb_pll_lg_z201,
+ [DVB_PLL_MICROTUNE_4042] = &dvb_pll_microtune_4042,
+ [DVB_PLL_THOMSON_DTT761X] = &dvb_pll_thomson_dtt761x,
+ [DVB_PLL_UNKNOWN_1] = &dvb_pll_unknown_1,
+ [DVB_PLL_TUA6010XS] = &dvb_pll_tua6010xs,
+ [DVB_PLL_ENV57H1XD5] = &dvb_pll_env57h1xd5,
+ [DVB_PLL_TUA6034] = &dvb_pll_tua6034,
+ [DVB_PLL_LG_TDVS_H06XF] = &dvb_pll_lg_tdvs_h06xf,
+ [DVB_PLL_TDA665X] = &dvb_pll_tda665x,
+ [DVB_PLL_FMD1216ME] = &dvb_pll_fmd1216me,
+ [DVB_PLL_TDED4] = &dvb_pll_tded4,
+ [DVB_PLL_TUV1236D] = &dvb_pll_tuv1236d,
+ [DVB_PLL_TDHU2] = &dvb_pll_tdhu2,
+ [DVB_PLL_SAMSUNG_TBMV] = &dvb_pll_samsung_tbmv,
+ [DVB_PLL_PHILIPS_SD1878_TDA8261] = &dvb_pll_philips_sd1878_tda8261,
+ [DVB_PLL_PHILIPS_TD1316] = &dvb_pll_philips_td1316,
+ [DVB_PLL_THOMSON_FE6600] = &dvb_pll_thomson_fe6600,
+ [DVB_PLL_OPERA1] = &dvb_pll_opera1,
+ [DVB_PLL_FCV1236D] = &dvb_pll_fcv1236d,
+};
+
+/* ----------------------------------------------------------- */
+/* code */
+
+static int dvb_pll_configure(struct dvb_frontend *fe, u8 *buf,
+ const struct dvb_frontend_parameters *params)
+{
+ struct dvb_pll_priv *priv = fe->tuner_priv;
+ struct dvb_pll_desc *desc = priv->pll_desc;
+ u32 div;
+ int i;
+
+ if (params->frequency != 0 && (params->frequency < desc->min ||
+ params->frequency > desc->max))
+ return -EINVAL;
+
+ for (i = 0; i < desc->count; i++) {
+ if (params->frequency > desc->entries[i].limit)
+ continue;
+ break;
+ }
+
+ if (debug)
+ printk("pll: %s: freq=%d | i=%d/%d\n", desc->name,
+ params->frequency, i, desc->count);
+ if (i == desc->count)
+ return -EINVAL;
+
+ div = (params->frequency + desc->iffreq +
+ desc->entries[i].stepsize/2) / desc->entries[i].stepsize;
+ buf[0] = div >> 8;
+ buf[1] = div & 0xff;
+ buf[2] = desc->entries[i].config;
+ buf[3] = desc->entries[i].cb;
+
+ if (desc->set)
+ desc->set(fe, buf, params);
+
+ if (debug)
+ printk("pll: %s: div=%d | buf=0x%02x,0x%02x,0x%02x,0x%02x\n",
+ desc->name, div, buf[0], buf[1], buf[2], buf[3]);
+
+ // calculate the frequency we set it to
+ return (div * desc->entries[i].stepsize) - desc->iffreq;
+}
+
+static int dvb_pll_release(struct dvb_frontend *fe)
+{
+ kfree(fe->tuner_priv);
+ fe->tuner_priv = NULL;
+ return 0;
+}
+
+static int dvb_pll_sleep(struct dvb_frontend *fe)
+{
+ struct dvb_pll_priv *priv = fe->tuner_priv;
+
+ if (priv->i2c == NULL)
+ return -EINVAL;
+
+ if (priv->pll_desc->sleepdata) {
+ struct i2c_msg msg = { .flags = 0,
+ .addr = priv->pll_i2c_address,
+ .buf = priv->pll_desc->sleepdata + 1,
+ .len = priv->pll_desc->sleepdata[0] };
+
+ int result;
+
+ if (fe->ops.i2c_gate_ctrl)
+ fe->ops.i2c_gate_ctrl(fe, 1);
+ if ((result = i2c_transfer(priv->i2c, &msg, 1)) != 1) {
+ return result;
+ }
+ return 0;
+ }
+ /* Shouldn't be called when initdata is NULL, maybe BUG()? */
+ return -EINVAL;
+}
+
+static int dvb_pll_set_params(struct dvb_frontend *fe,
+ struct dvb_frontend_parameters *params)
+{
+ struct dvb_pll_priv *priv = fe->tuner_priv;
+ u8 buf[4];
+ struct i2c_msg msg =
+ { .addr = priv->pll_i2c_address, .flags = 0,
+ .buf = buf, .len = sizeof(buf) };
+ int result;
+ u32 frequency = 0;
+
+ if (priv->i2c == NULL)
+ return -EINVAL;
+
+ if ((result = dvb_pll_configure(fe, buf, params)) < 0)
+ return result;
+ else
+ frequency = result;
+
+ if (fe->ops.i2c_gate_ctrl)
+ fe->ops.i2c_gate_ctrl(fe, 1);
+ if ((result = i2c_transfer(priv->i2c, &msg, 1)) != 1) {
+ return result;
+ }
+
+ priv->frequency = frequency;
+ priv->bandwidth = (fe->ops.info.type == FE_OFDM) ? params->u.ofdm.bandwidth : 0;
+
+ return 0;
+}
+
+static int dvb_pll_calc_regs(struct dvb_frontend *fe,
+ struct dvb_frontend_parameters *params,
+ u8 *buf, int buf_len)
+{
+ struct dvb_pll_priv *priv = fe->tuner_priv;
+ int result;
+ u32 frequency = 0;
+
+ if (buf_len < 5)
+ return -EINVAL;
+
+ if ((result = dvb_pll_configure(fe, buf+1, params)) < 0)
+ return result;
+ else
+ frequency = result;
+
+ buf[0] = priv->pll_i2c_address;
+
+ priv->frequency = frequency;
+ priv->bandwidth = (fe->ops.info.type == FE_OFDM) ? params->u.ofdm.bandwidth : 0;
+
+ return 5;
+}
+
+static int dvb_pll_get_frequency(struct dvb_frontend *fe, u32 *frequency)
+{
+ struct dvb_pll_priv *priv = fe->tuner_priv;
+ *frequency = priv->frequency;
+ return 0;
+}
+
+static int dvb_pll_get_bandwidth(struct dvb_frontend *fe, u32 *bandwidth)
+{
+ struct dvb_pll_priv *priv = fe->tuner_priv;
+ *bandwidth = priv->bandwidth;
+ return 0;
+}
+
+static int dvb_pll_init(struct dvb_frontend *fe)
+{
+ struct dvb_pll_priv *priv = fe->tuner_priv;
+
+ if (priv->i2c == NULL)
+ return -EINVAL;
+
+ if (priv->pll_desc->initdata) {
+ struct i2c_msg msg = { .flags = 0,
+ .addr = priv->pll_i2c_address,
+ .buf = priv->pll_desc->initdata + 1,
+ .len = priv->pll_desc->initdata[0] };
+
+ int result;
+ if (fe->ops.i2c_gate_ctrl)
+ fe->ops.i2c_gate_ctrl(fe, 1);
+ if ((result = i2c_transfer(priv->i2c, &msg, 1)) != 1) {
+ return result;
+ }
+ return 0;
+ }
+ /* Shouldn't be called when initdata is NULL, maybe BUG()? */
+ return -EINVAL;
+}
+
+static struct dvb_tuner_ops dvb_pll_tuner_ops = {
+ .release = dvb_pll_release,
+ .sleep = dvb_pll_sleep,
+ .init = dvb_pll_init,
+ .set_params = dvb_pll_set_params,
+ .calc_regs = dvb_pll_calc_regs,
+ .get_frequency = dvb_pll_get_frequency,
+ .get_bandwidth = dvb_pll_get_bandwidth,
+};
+
+struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe, int pll_addr,
+ struct i2c_adapter *i2c,
+ unsigned int pll_desc_id)
+{
+ u8 b1 [] = { 0 };
+ struct i2c_msg msg = { .addr = pll_addr, .flags = I2C_M_RD,
+ .buf = b1, .len = 1 };
+ struct dvb_pll_priv *priv = NULL;
+ int ret;
+ struct dvb_pll_desc *desc;
+
+ if ((id[dvb_pll_devcount] > DVB_PLL_UNDEFINED) &&
+ (id[dvb_pll_devcount] < ARRAY_SIZE(pll_list)))
+ pll_desc_id = id[dvb_pll_devcount];
+
+ BUG_ON(pll_desc_id < 1 || pll_desc_id >= ARRAY_SIZE(pll_list));
+
+ desc = pll_list[pll_desc_id];
+
+ if (i2c != NULL) {
+ if (fe->ops.i2c_gate_ctrl)
+ fe->ops.i2c_gate_ctrl(fe, 1);
+
+ ret = i2c_transfer (i2c, &msg, 1);
+ if (ret != 1)
+ return NULL;
+ if (fe->ops.i2c_gate_ctrl)
+ fe->ops.i2c_gate_ctrl(fe, 0);
+ }
+
+ priv = kzalloc(sizeof(struct dvb_pll_priv), GFP_KERNEL);
+ if (priv == NULL)
+ return NULL;
+
+ priv->pll_i2c_address = pll_addr;
+ priv->i2c = i2c;
+ priv->pll_desc = desc;
+ priv->nr = dvb_pll_devcount++;
+
+ memcpy(&fe->ops.tuner_ops, &dvb_pll_tuner_ops,
+ sizeof(struct dvb_tuner_ops));
+
+ strncpy(fe->ops.tuner_ops.info.name, desc->name,
+ sizeof(fe->ops.tuner_ops.info.name));
+ fe->ops.tuner_ops.info.frequency_min = desc->min;
+ fe->ops.tuner_ops.info.frequency_max = desc->max;
+ if (!desc->initdata)
+ fe->ops.tuner_ops.init = NULL;
+ if (!desc->sleepdata)
+ fe->ops.tuner_ops.sleep = NULL;
+
+ fe->tuner_priv = priv;
+
+ if ((debug) || (id[priv->nr] == pll_desc_id)) {
+ printk("dvb-pll[%d]", priv->nr);
+ if (i2c != NULL)
+ printk(" %d-%04x", i2c_adapter_id(i2c), pll_addr);
+ printk(": id# %d (%s) attached, %s\n", pll_desc_id, desc->name,
+ id[priv->nr] == pll_desc_id ?
+ "insmod option" : "autodetected");
+ }
+ if ((debug) || (input[priv->nr] > 0)) {
+ printk("dvb-pll[%d]", priv->nr);
+ if (i2c != NULL)
+ printk(" %d-%04x", i2c_adapter_id(i2c), pll_addr);
+ printk(": tuner rf input will be ");
+ switch (input[priv->nr]) {
+ case 0:
+ printk("autoselected\n");
+ break;
+ default:
+ printk("set to input %d (insmod option)\n",
+ input[priv->nr]);
+ }
+ }
+
+ return fe;
+}
+EXPORT_SYMBOL(dvb_pll_attach);
+
+MODULE_DESCRIPTION("dvb pll library");
+MODULE_AUTHOR("Gerd Knorr");
+MODULE_LICENSE("GPL");
diff --git a/v4l/kernel-2.6.tmp/dvb-pll.h b/v4l/kernel-2.6.tmp/dvb-pll.h
new file mode 100644
index 0000000..56c2b79
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb-pll.h
@@ -0,0 +1,60 @@
+/*
+ * descriptions + helper functions for simple dvb plls.
+ */
+
+#ifndef __DVB_PLL_H__
+#define __DVB_PLL_H__
+
+#include <linux/i2c.h>
+#include "dvb_frontend.h"
+
+#define DVB_PLL_UNDEFINED 0
+#define DVB_PLL_THOMSON_DTT7579 1
+#define DVB_PLL_THOMSON_DTT759X 2
+#define DVB_PLL_THOMSON_DTT7610 3
+#define DVB_PLL_LG_Z201 4
+#define DVB_PLL_MICROTUNE_4042 5
+#define DVB_PLL_THOMSON_DTT761X 6
+#define DVB_PLL_UNKNOWN_1 7
+#define DVB_PLL_TUA6010XS 8
+#define DVB_PLL_ENV57H1XD5 9
+#define DVB_PLL_TUA6034 10
+#define DVB_PLL_LG_TDVS_H06XF 11
+#define DVB_PLL_TDA665X 12
+#define DVB_PLL_FMD1216ME 13
+#define DVB_PLL_TDED4 14
+#define DVB_PLL_TUV1236D 15
+#define DVB_PLL_TDHU2 16
+#define DVB_PLL_SAMSUNG_TBMV 17
+#define DVB_PLL_PHILIPS_SD1878_TDA8261 18
+#define DVB_PLL_PHILIPS_TD1316 19
+#define DVB_PLL_THOMSON_FE6600 20
+#define DVB_PLL_OPERA1 21
+#define DVB_PLL_FCV1236D 22
+
+/**
+ * Attach a dvb-pll to the supplied frontend structure.
+ *
+ * @param fe Frontend to attach to.
+ * @param pll_addr i2c address of the PLL (if used).
+ * @param i2c i2c adapter to use (set to NULL if not used).
+ * @param pll_desc_id dvb_pll_desc to use.
+ * @return Frontend pointer on success, NULL on failure
+ */
+#if defined(CONFIG_DVB_PLL) || (defined(CONFIG_DVB_PLL_MODULE) && defined(MODULE))
+extern struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ unsigned int pll_desc_id);
+#else
+/*static inline struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe,
+ int pll_addr,
+ struct i2c_adapter *i2c,
+ unsigned int pll_desc_id)
+{
+ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __FUNCTION__);
+ return NULL;
+}*/
+#endif
+
+#endif
diff --git a/v4l/kernel-2.6.tmp/dvb-usb-common.h b/v4l/kernel-2.6.tmp/dvb-usb-common.h
new file mode 100644
index 0000000..35ab68f
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb-usb-common.h
@@ -0,0 +1,51 @@
+/* dvb-usb-common.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * a header file containing prototypes and types for internal use of the dvb-usb-lib
+ */
+#ifndef _DVB_USB_COMMON_H_
+#define _DVB_USB_COMMON_H_
+
+#define DVB_USB_LOG_PREFIX "dvb-usb"
+#include "dvb-usb.h"
+
+extern int dvb_usb_debug;
+extern int dvb_usb_disable_rc_polling;
+
+#define deb_info(args...) dprintk(dvb_usb_debug,0x001,args)
+#define deb_xfer(args...) dprintk(dvb_usb_debug,0x002,args)
+#define deb_pll(args...) dprintk(dvb_usb_debug,0x004,args)
+#define deb_ts(args...) dprintk(dvb_usb_debug,0x008,args)
+#define deb_err(args...) dprintk(dvb_usb_debug,0x010,args)
+#define deb_rc(args...) dprintk(dvb_usb_debug,0x020,args)
+#define deb_fw(args...) dprintk(dvb_usb_debug,0x040,args)
+#define deb_mem(args...) dprintk(dvb_usb_debug,0x080,args)
+#define deb_uxfer(args...) dprintk(dvb_usb_debug,0x100,args)
+
+/* commonly used methods */
+extern int dvb_usb_download_firmware(struct usb_device *, struct dvb_usb_device_properties *);
+
+extern int dvb_usb_device_power_ctrl(struct dvb_usb_device *d, int onoff);
+
+extern int usb_urb_init(struct usb_data_stream *stream, struct usb_data_stream_properties *props);
+extern int usb_urb_exit(struct usb_data_stream *stream);
+extern int usb_urb_submit(struct usb_data_stream *stream);
+extern int usb_urb_kill(struct usb_data_stream *stream);
+
+extern int dvb_usb_adapter_stream_init(struct dvb_usb_adapter *adap);
+extern int dvb_usb_adapter_stream_exit(struct dvb_usb_adapter *adap);
+
+extern int dvb_usb_i2c_init(struct dvb_usb_device *);
+extern int dvb_usb_i2c_exit(struct dvb_usb_device *);
+
+extern int dvb_usb_adapter_dvb_init(struct dvb_usb_adapter *adap);
+extern int dvb_usb_adapter_dvb_exit(struct dvb_usb_adapter *adap);
+extern int dvb_usb_adapter_frontend_init(struct dvb_usb_adapter *adap);
+extern int dvb_usb_adapter_frontend_exit(struct dvb_usb_adapter *adap);
+
+extern int dvb_usb_remote_init(struct dvb_usb_device *);
+extern int dvb_usb_remote_exit(struct dvb_usb_device *);
+
+#endif
diff --git a/v4l/kernel-2.6.tmp/dvb-usb-dvb.c b/v4l/kernel-2.6.tmp/dvb-usb-dvb.c
new file mode 100644
index 0000000..4561a67
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb-usb-dvb.c
@@ -0,0 +1,206 @@
+/* dvb-usb-dvb.c is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * This file contains functions for initializing and handling the
+ * linux-dvb API.
+ */
+#include "dvb-usb-common.h"
+
+/* does the complete input transfer handling */
+static int dvb_usb_ctrl_feed(struct dvb_demux_feed *dvbdmxfeed, int onoff)
+{
+ struct dvb_usb_adapter *adap = dvbdmxfeed->demux->priv;
+ int newfeedcount,ret;
+
+ if (adap == NULL)
+ return -ENODEV;
+
+ newfeedcount = adap->feedcount + (onoff ? 1 : -1);
+
+ /* stop feed before setting a new pid if there will be no pid anymore */
+ if (newfeedcount == 0) {
+ deb_ts("stop feeding\n");
+ usb_urb_kill(&adap->stream);
+
+ if (adap->props.streaming_ctrl != NULL)
+ if ((ret = adap->props.streaming_ctrl(adap,0)))
+ err("error while stopping stream.");
+ }
+
+ adap->feedcount = newfeedcount;
+
+ /* activate the pid on the device specific pid_filter */
+ deb_ts("setting pid (%s): %5d %04x at index %d '%s'\n",adap->pid_filtering ?
+ "yes" : "no", dvbdmxfeed->pid,dvbdmxfeed->pid,dvbdmxfeed->index,onoff ?
+ "on" : "off");
+ if (adap->props.caps & DVB_USB_ADAP_HAS_PID_FILTER &&
+ adap->pid_filtering &&
+ adap->props.pid_filter != NULL)
+ adap->props.pid_filter(adap, dvbdmxfeed->index, dvbdmxfeed->pid,onoff);
+
+ /* start the feed if this was the first feed and there is still a feed
+ * for reception.
+ */
+ if (adap->feedcount == onoff && adap->feedcount > 0) {
+ deb_ts("submitting all URBs\n");
+ usb_urb_submit(&adap->stream);
+
+ deb_ts("controlling pid parser\n");
+ if (adap->props.caps & DVB_USB_ADAP_HAS_PID_FILTER &&
+ adap->props.caps & DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF &&
+ adap->props.pid_filter_ctrl != NULL)
+ if (adap->props.pid_filter_ctrl(adap,adap->pid_filtering) < 0)
+ err("could not handle pid_parser");
+
+ deb_ts("start feeding\n");
+ if (adap->props.streaming_ctrl != NULL)
+ if (adap->props.streaming_ctrl(adap,1)) {
+ err("error while enabling fifo.");
+ return -ENODEV;
+ }
+
+ }
+ return 0;
+}
+
+static int dvb_usb_start_feed(struct dvb_demux_feed *dvbdmxfeed)
+{
+ deb_ts("start pid: 0x%04x, feedtype: %d\n", dvbdmxfeed->pid,dvbdmxfeed->type);
+ return dvb_usb_ctrl_feed(dvbdmxfeed,1);
+}
+
+static int dvb_usb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
+{
+ deb_ts("stop pid: 0x%04x, feedtype: %d\n", dvbdmxfeed->pid, dvbdmxfeed->type);
+ return dvb_usb_ctrl_feed(dvbdmxfeed,0);
+}
+
+int dvb_usb_adapter_dvb_init(struct dvb_usb_adapter *adap)
+{
+ int ret;
+
+ if ((ret = dvb_register_adapter(&adap->dvb_adap, adap->dev->desc->name,
+ adap->dev->owner, &adap->dev->udev->dev)) < 0) {
+ deb_info("dvb_register_adapter failed: error %d", ret);
+ goto err;
+ }
+ adap->dvb_adap.priv = adap;
+
+ if (adap->dev->props.read_mac_address) {
+ if (adap->dev->props.read_mac_address(adap->dev,adap->dvb_adap.proposed_mac) == 0)
+ info("MAC address: %02x:%02x:%02x:%02x:%02x:%02x",adap->dvb_adap.proposed_mac[0],
+ adap->dvb_adap.proposed_mac[1], adap->dvb_adap.proposed_mac[2],
+ adap->dvb_adap.proposed_mac[3], adap->dvb_adap.proposed_mac[4],
+ adap->dvb_adap.proposed_mac[5]);
+ else
+ err("MAC address reading failed.");
+ }
+
+
+ adap->demux.dmx.capabilities = DMX_TS_FILTERING | DMX_SECTION_FILTERING;
+ adap->demux.priv = adap;
+
+ adap->demux.feednum = adap->demux.filternum = adap->max_feed_count;
+ adap->demux.start_feed = dvb_usb_start_feed;
+ adap->demux.stop_feed = dvb_usb_stop_feed;
+ adap->demux.write_to_decoder = NULL;
+ if ((ret = dvb_dmx_init(&adap->demux)) < 0) {
+ err("dvb_dmx_init failed: error %d",ret);
+ goto err_dmx;
+ }
+
+ adap->dmxdev.filternum = adap->demux.filternum;
+ adap->dmxdev.demux = &adap->demux.dmx;
+ adap->dmxdev.capabilities = 0;
+ if ((ret = dvb_dmxdev_init(&adap->dmxdev, &adap->dvb_adap)) < 0) {
+ err("dvb_dmxdev_init failed: error %d",ret);
+ goto err_dmx_dev;
+ }
+
+ dvb_net_init(&adap->dvb_adap, &adap->dvb_net, &adap->demux.dmx);
+
+ adap->state |= DVB_USB_ADAP_STATE_DVB;
+ return 0;
+
+err_dmx_dev:
+ dvb_dmx_release(&adap->demux);
+err_dmx:
+ dvb_unregister_adapter(&adap->dvb_adap);
+err:
+ return ret;
+}
+
+int dvb_usb_adapter_dvb_exit(struct dvb_usb_adapter *adap)
+{
+ if (adap->state & DVB_USB_ADAP_STATE_DVB) {
+ deb_info("unregistering DVB part\n");
+ dvb_net_release(&adap->dvb_net);
+ adap->demux.dmx.close(&adap->demux.dmx);
+ dvb_dmxdev_release(&adap->dmxdev);
+ dvb_dmx_release(&adap->demux);
+ dvb_unregister_adapter(&adap->dvb_adap);
+ adap->state &= ~DVB_USB_ADAP_STATE_DVB;
+ }
+ return 0;
+}
+
+static int dvb_usb_fe_wakeup(struct dvb_frontend *fe)
+{
+ struct dvb_usb_adapter *adap = fe->dvb->priv;
+
+ dvb_usb_device_power_ctrl(adap->dev, 1);
+
+ if (adap->fe_init)
+ adap->fe_init(fe);
+
+ return 0;
+}
+
+static int dvb_usb_fe_sleep(struct dvb_frontend *fe)
+{
+ struct dvb_usb_adapter *adap = fe->dvb->priv;
+
+ if (adap->fe_sleep)
+ adap->fe_sleep(fe);
+
+ return dvb_usb_device_power_ctrl(adap->dev, 0);
+}
+
+int dvb_usb_adapter_frontend_init(struct dvb_usb_adapter *adap)
+{
+ if (adap->props.frontend_attach == NULL) {
+ err("strange: '%s' #%d doesn't want to attach a frontend.",adap->dev->desc->name, adap->id);
+ return 0;
+ }
+
+ /* re-assign sleep and wakeup functions */
+ if (adap->props.frontend_attach(adap) == 0 && adap->fe != NULL) {
+ adap->fe_init = adap->fe->ops.init; adap->fe->ops.init = dvb_usb_fe_wakeup;
+ adap->fe_sleep = adap->fe->ops.sleep; adap->fe->ops.sleep = dvb_usb_fe_sleep;
+
+ if (dvb_register_frontend(&adap->dvb_adap, adap->fe)) {
+ err("Frontend registration failed.");
+ dvb_frontend_detach(adap->fe);
+ adap->fe = NULL;
+ return -ENODEV;
+ }
+
+ /* only attach the tuner if the demod is there */
+ if (adap->props.tuner_attach != NULL)
+ adap->props.tuner_attach(adap);
+ } else
+ err("no frontend was attached by '%s'",adap->dev->desc->name);
+
+ return 0;
+}
+
+int dvb_usb_adapter_frontend_exit(struct dvb_usb_adapter *adap)
+{
+ if (adap->fe != NULL) {
+ dvb_unregister_frontend(adap->fe);
+ dvb_frontend_detach(adap->fe);
+ }
+ return 0;
+}
diff --git a/v4l/kernel-2.6.tmp/dvb-usb-firmware.c b/v4l/kernel-2.6.tmp/dvb-usb-firmware.c
new file mode 100644
index 0000000..e1112e3
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb-usb-firmware.c
@@ -0,0 +1,146 @@
+/* dvb-usb-firmware.c is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * This file contains functions for downloading the firmware to Cypress FX 1 and 2 based devices.
+ *
+ * FIXME: This part does actually not belong to dvb-usb, but to the usb-subsystem.
+ */
+#include "dvb-usb-common.h"
+
+#include <linux/usb.h>
+
+struct usb_cypress_controller {
+ int id;
+ const char *name; /* name of the usb controller */
+ u16 cpu_cs_register; /* needs to be restarted, when the firmware has been downloaded. */
+};
+
+static struct usb_cypress_controller cypress[] = {
+ { .id = DEVICE_SPECIFIC, .name = "Device specific", .cpu_cs_register = 0 },
+ { .id = CYPRESS_AN2135, .name = "Cypress AN2135", .cpu_cs_register = 0x7f92 },
+ { .id = CYPRESS_AN2235, .name = "Cypress AN2235", .cpu_cs_register = 0x7f92 },
+ { .id = CYPRESS_FX2, .name = "Cypress FX2", .cpu_cs_register = 0xe600 },
+};
+
+/*
+ * load a firmware packet to the device
+ */
+static int usb_cypress_writemem(struct usb_device *udev,u16 addr,u8 *data, u8 len)
+{
+ return usb_control_msg(udev, usb_sndctrlpipe(udev,0),
+ 0xa0, USB_TYPE_VENDOR, addr, 0x00, data, len, 5000);
+}
+
+int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type)
+{
+ struct hexline hx;
+ u8 reset;
+ int ret,pos=0;
+
+ /* stop the CPU */
+ reset = 1;
+ if ((ret = usb_cypress_writemem(udev,cypress[type].cpu_cs_register,&reset,1)) != 1)
+ err("could not stop the USB controller CPU.");
+
+ while ((ret = dvb_usb_get_hexline(fw,&hx,&pos)) > 0) {
+ deb_fw("writing to address 0x%04x (buffer: 0x%02x %02x)\n",hx.addr,hx.len,hx.chk);
+ ret = usb_cypress_writemem(udev,hx.addr,hx.data,hx.len);
+
+ if (ret != hx.len) {
+ err("error while transferring firmware "
+ "(transferred size: %d, block size: %d)",
+ ret,hx.len);
+ ret = -EINVAL;
+ break;
+ }
+ }
+ if (ret < 0) {
+ err("firmware download failed at %d with %d",pos,ret);
+ return ret;
+ }
+
+ if (ret == 0) {
+ /* restart the CPU */
+ reset = 0;
+ if (ret || usb_cypress_writemem(udev,cypress[type].cpu_cs_register,&reset,1) != 1) {
+ err("could not restart the USB controller CPU.");
+ ret = -EINVAL;
+ }
+ } else
+ ret = -EIO;
+
+ return ret;
+}
+EXPORT_SYMBOL(usb_cypress_load_firmware);
+
+int dvb_usb_download_firmware(struct usb_device *udev, struct dvb_usb_device_properties *props)
+{
+ int ret;
+ const struct firmware *fw = NULL;
+
+ if ((ret = request_firmware(&fw, props->firmware, &udev->dev)) != 0) {
+ err("did not find the firmware file. (%s) "
+ "Please see linux/Documentation/dvb/ for more details on firmware-problems. (%d)",
+ props->firmware,ret);
+ return ret;
+ }
+
+ info("downloading firmware from file '%s'",props->firmware);
+
+ switch (props->usb_ctrl) {
+ case CYPRESS_AN2135:
+ case CYPRESS_AN2235:
+ case CYPRESS_FX2:
+ ret = usb_cypress_load_firmware(udev, fw, props->usb_ctrl);
+ break;
+ case DEVICE_SPECIFIC:
+ if (props->download_firmware)
+ ret = props->download_firmware(udev,fw);
+ else {
+ err("BUG: driver didn't specified a download_firmware-callback, although it claims to have a DEVICE_SPECIFIC one.");
+ ret = -EINVAL;
+ }
+ break;
+ default:
+ ret = -EINVAL;
+ break;
+ }
+
+ release_firmware(fw);
+ return ret;
+}
+
+int dvb_usb_get_hexline(const struct firmware *fw, struct hexline *hx,
+ int *pos)
+{
+ u8 *b = (u8 *) &fw->data[*pos];
+ int data_offs = 4;
+ if (*pos >= fw->size)
+ return 0;
+
+ memset(hx,0,sizeof(struct hexline));
+
+ hx->len = b[0];
+
+ if ((*pos + hx->len + 4) >= fw->size)
+ return -EINVAL;
+
+ hx->addr = le16_to_cpu( *((u16 *) &b[1]) );
+ hx->type = b[3];
+
+ if (hx->type == 0x04) {
+ /* b[4] and b[5] are the Extended linear address record data field */
+ hx->addr |= (b[4] << 24) | (b[5] << 16);
+/* hx->len -= 2;
+ data_offs += 2; */
+ }
+ memcpy(hx->data,&b[data_offs],hx->len);
+ hx->chk = b[hx->len + data_offs];
+
+ *pos += hx->len + 5;
+
+ return *pos;
+}
+EXPORT_SYMBOL(dvb_usb_get_hexline);
diff --git a/v4l/kernel-2.6.tmp/dvb-usb-i2c.c b/v4l/kernel-2.6.tmp/dvb-usb-i2c.c
new file mode 100644
index 0000000..23428cd
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb-usb-i2c.c
@@ -0,0 +1,48 @@
+/* dvb-usb-i2c.c is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * This file contains functions for (de-)initializing an I2C adapter.
+ */
+#include "dvb-usb-common.h"
+
+int dvb_usb_i2c_init(struct dvb_usb_device *d)
+{
+ int ret = 0;
+
+ if (!(d->props.caps & DVB_USB_IS_AN_I2C_ADAPTER))
+ return 0;
+
+ if (d->props.i2c_algo == NULL) {
+ err("no i2c algorithm specified");
+ return -EINVAL;
+ }
+
+ strncpy(d->i2c_adap.name, d->desc->name, sizeof(d->i2c_adap.name));
+#ifdef I2C_ADAP_CLASS_TV_DIGITAL
+ d->i2c_adap.class = I2C_ADAP_CLASS_TV_DIGITAL,
+#else
+ d->i2c_adap.class = I2C_CLASS_TV_DIGITAL,
+#endif
+ d->i2c_adap.algo = d->props.i2c_algo;
+ d->i2c_adap.algo_data = NULL;
+ d->i2c_adap.dev.parent = &d->udev->dev;
+
+ i2c_set_adapdata(&d->i2c_adap, d);
+
+ if ((ret = i2c_add_adapter(&d->i2c_adap)) < 0)
+ err("could not add i2c adapter");
+
+ d->state |= DVB_USB_STATE_I2C;
+
+ return ret;
+}
+
+int dvb_usb_i2c_exit(struct dvb_usb_device *d)
+{
+ if (d->state & DVB_USB_STATE_I2C)
+ i2c_del_adapter(&d->i2c_adap);
+ d->state &= ~DVB_USB_STATE_I2C;
+ return 0;
+}
diff --git a/v4l/kernel-2.6.tmp/dvb-usb-ids.h b/v4l/kernel-2.6.tmp/dvb-usb-ids.h
new file mode 100644
index 0000000..c94d993
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb-usb-ids.h
@@ -0,0 +1,183 @@
+/* dvb-usb-ids.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de) see
+ * dvb-usb-init.c for copyright information.
+ *
+ * a header file containing define's for the USB device supported by the
+ * various drivers.
+ */
+#ifndef _DVB_USB_IDS_H_
+#define _DVB_USB_IDS_H_
+
+/* Vendor IDs */
+#define USB_VID_ADSTECH 0x06e1
+#define USB_VID_AFATECH 0x15a4
+#define USB_VID_ALCOR_MICRO 0x058f
+#define USB_VID_ALINK 0x05e3
+#define USB_VID_ANCHOR 0x0547
+#define USB_VID_ANUBIS_ELECTRONIC 0x10fd
+#define USB_VID_AVERMEDIA 0x07ca
+#define USB_VID_COMPRO 0x185b
+#define USB_VID_COMPRO_UNK 0x145f
+#define USB_VID_CYPRESS 0x04b4
+#define USB_VID_DIBCOM 0x10b8
+#define USB_VID_DPOSH 0x1498
+#define USB_VID_DVICO 0x0fe9
+#define USB_VID_EMPIA 0xeb1a
+#define USB_VID_GENPIX 0x09c0
+#define USB_VID_GRANDTEC 0x5032
+#define USB_VID_HANFTEK 0x15f4
+#define USB_VID_HAUPPAUGE 0x2040
+#define USB_VID_HYPER_PALTEK 0x1025
+#define USB_VID_KWORLD 0xeb2a
+#define USB_VID_KYE 0x0458
+#define USB_VID_LEADTEK 0x0413
+#define USB_VID_LITEON 0x04ca
+#define USB_VID_MEDION 0x1660
+#define USB_VID_MIGLIA 0x18f3
+#define USB_VID_MSI 0x0db0
+#define USB_VID_OPERA1 0x695c
+#define USB_VID_PINNACLE 0x2304
+#define USB_VID_TERRATEC 0x0ccd
+#define USB_VID_VISIONPLUS 0x13d3
+#define USB_VID_TWINHAN 0x1822
+#define USB_VID_ULTIMA_ELECTRONIC 0x05d8
+#define USB_VID_UNIWILL 0x1584
+#define USB_VID_WIDEVIEW 0x14aa
+/* dom : pour gigabyte u7000 */
+#define USB_VID_GIGABYTE 0x1044
+
+
+/* Product IDs */
+#define USB_PID_ADSTECH_USB2_COLD 0xa333
+#define USB_PID_ADSTECH_USB2_WARM 0xa334
+#define USB_PID_AFATECH_AF9005 0x9020
+#define USB_VID_ALINK_DTU 0xf170
+#define USB_PID_AVERMEDIA_DVBT_USB_COLD 0x0001
+#define USB_PID_AVERMEDIA_DVBT_USB_WARM 0x0002
+#define USB_PID_AVERMEDIA_DVBT_USB2_COLD 0xa800
+#define USB_PID_AVERMEDIA_DVBT_USB2_WARM 0xa801
+#define USB_PID_COMPRO_DVBU2000_COLD 0xd000
+#define USB_PID_COMPRO_DVBU2000_WARM 0xd001
+#define USB_PID_COMPRO_DVBU2000_UNK_COLD 0x010c
+#define USB_PID_COMPRO_DVBU2000_UNK_WARM 0x010d
+#define USB_PID_COMPRO_VIDEOMATE_U500 0x1e78
+#define USB_PID_COMPRO_VIDEOMATE_U500_PC 0x1e80
+#define USB_PID_DIBCOM_HOOK_DEFAULT 0x0064
+#define USB_PID_DIBCOM_HOOK_DEFAULT_REENUM 0x0065
+#define USB_PID_DIBCOM_MOD3000_COLD 0x0bb8
+#define USB_PID_DIBCOM_MOD3000_WARM 0x0bb9
+#define USB_PID_DIBCOM_MOD3001_COLD 0x0bc6
+#define USB_PID_DIBCOM_MOD3001_WARM 0x0bc7
+#define USB_PID_DIBCOM_STK7700P 0x1e14
+#define USB_PID_DIBCOM_STK7700P_PC 0x1e78
+#define USB_PID_DIBCOM_STK7700D 0x1ef0
+#define USB_PID_DIBCOM_STK7700_U7000 0x7001
+#define USB_PID_DIBCOM_STK7070P 0x1ebc
+#define USB_PID_DIBCOM_STK7070PD 0x1ebe
+#define USB_PID_DIBCOM_ANCHOR_2135_COLD 0x2131
+#define USB_PID_DPOSH_M9206_COLD 0x9206
+#define USB_PID_DPOSH_M9206_WARM 0xa090
+#define USB_PID_UNIWILL_STK7700P 0x6003
+#define USB_PID_GRANDTEC_DVBT_USB_COLD 0x0fa0
+#define USB_PID_GRANDTEC_DVBT_USB_WARM 0x0fa1
+#define USB_PID_KWORLD_VSTREAM_COLD 0x17de
+#define USB_PID_KWORLD_VSTREAM_WARM 0x17df
+#define USB_PID_TERRATEC_CINERGY_T_USB_XE 0x0055
+#define USB_PID_TWINHAN_VP7041_COLD 0x3201
+#define USB_PID_TWINHAN_VP7041_WARM 0x3202
+#define USB_PID_TWINHAN_VP7020_COLD 0x3203
+#define USB_PID_TWINHAN_VP7020_WARM 0x3204
+#define USB_PID_TWINHAN_VP7045_COLD 0x3205
+#define USB_PID_TWINHAN_VP7045_WARM 0x3206
+#define USB_PID_TWINHAN_VP7021_COLD 0x3207
+#define USB_PID_TWINHAN_VP7021_WARM 0x3208
+#define USB_PID_DNTV_TINYUSB2_COLD 0x3223
+#define USB_PID_DNTV_TINYUSB2_WARM 0x3224
+#define USB_PID_ULTIMA_TVBOX_COLD 0x8105
+#define USB_PID_ULTIMA_TVBOX_WARM 0x8106
+#define USB_PID_ULTIMA_TVBOX_AN2235_COLD 0x8107
+#define USB_PID_ULTIMA_TVBOX_AN2235_WARM 0x8108
+#define USB_PID_ULTIMA_TVBOX_ANCHOR_COLD 0x2235
+#define USB_PID_ULTIMA_TVBOX_USB2_COLD 0x8109
+#define USB_PID_ULTIMA_TVBOX_USB2_WARM 0x810a
+#define USB_PID_ARTEC_T14_COLD 0x810b
+#define USB_PID_ARTEC_T14_WARM 0x810c
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_COLD 0x8613
+#define USB_PID_ULTIMA_TVBOX_USB2_FX_WARM 0x1002
+#define USB_PID_UNK_HYPER_PALTEK_COLD 0x005e
+#define USB_PID_UNK_HYPER_PALTEK_WARM 0x005f
+#define USB_PID_HANFTEK_UMT_010_COLD 0x0001
+#define USB_PID_HANFTEK_UMT_010_WARM 0x0015
+#define USB_PID_DTT200U_COLD 0x0201
+#define USB_PID_DTT200U_WARM 0x0301
+#define USB_PID_WT220U_ZAP250_COLD 0x0220
+#define USB_PID_WT220U_COLD 0x0222
+#define USB_PID_WT220U_WARM 0x0221
+#define USB_PID_WT220U_FC_COLD 0x0225
+#define USB_PID_WT220U_FC_WARM 0x0226
+#define USB_PID_WT220U_ZL0353_COLD 0x022a
+#define USB_PID_WT220U_ZL0353_WARM 0x022b
+#define USB_PID_WINTV_NOVA_T_USB2_COLD 0x9300
+#define USB_PID_WINTV_NOVA_T_USB2_WARM 0x9301
+#define USB_PID_HAUPPAUGE_NOVA_T_500 0x9941
+#define USB_PID_HAUPPAUGE_NOVA_T_500_2 0x9950
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK 0x7050
+#define USB_PID_HAUPPAUGE_NOVA_T_STICK_2 0x7060
+#define USB_PID_HAUPPAUGE_NOVA_TD_STICK 0x9580
+#define USB_PID_AVERMEDIA_EXPRESS 0xb568
+#define USB_PID_AVERMEDIA_VOLAR 0xa807
+#define USB_PID_AVERMEDIA_VOLAR_2 0xb808
+#define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY 0x005a
+#define USB_PID_PINNACLE_PCTV2000E 0x022c
+#define USB_PID_PINNACLE_PCTV_DVB_T_FLASH 0x0228
+#define USB_PID_PINNACLE_PCTV_DUAL_DIVERSITY_DVB_T 0x0229
+#define USB_PID_PCTV_200E 0x020e
+#define USB_PID_PCTV_400E 0x020f
+#define USB_PID_PCTV_450E 0x0222
+#define USB_PID_NEBULA_DIGITV 0x0201
+#define USB_PID_DVICO_BLUEBIRD_LGDT 0xd820
+#define USB_PID_DVICO_BLUEBIRD_LG064F_COLD 0xd500
+#define USB_PID_DVICO_BLUEBIRD_LG064F_WARM 0xd501
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_COLD 0xdb00
+#define USB_PID_DVICO_BLUEBIRD_LGZ201_WARM 0xdb01
+#define USB_PID_DVICO_BLUEBIRD_TH7579_COLD 0xdb10
+#define USB_PID_DVICO_BLUEBIRD_TH7579_WARM 0xdb11
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_COLD 0xdb50
+#define USB_PID_DVICO_BLUEBIRD_DUAL_1_WARM 0xdb51
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_COLD 0xdb58
+#define USB_PID_DVICO_BLUEBIRD_DUAL_2_WARM 0xdb59
+#define USB_PID_DVICO_BLUEBIRD_DUAL_4 0xdb78
+#define USB_PID_DVICO_BLUEBIRD_DVB_T_NANO_2 0xdb70
+#define USB_PID_DVICO_BLUEBIRD_DVB_T_NANO_2_NFW_WARM 0xdb71
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_COLD 0xdb54
+#define USB_PID_DIGITALNOW_BLUEBIRD_DUAL_1_WARM 0xdb55
+#define USB_PID_MEDION_MD95700 0x0932
+#define USB_PID_MSI_MEGASKY580 0x5580
+#define USB_PID_MSI_MEGASKY580_55801 0x5581
+#define USB_PID_KYE_DVB_T_COLD 0x701e
+#define USB_PID_KYE_DVB_T_WARM 0x701f
+#define USB_PID_LITEON_DVB_T_COLD 0xf000
+#define USB_PID_LITEON_DVB_T_WARM 0xf001
+#define USB_PID_DIGIVOX_MINI_SL_COLD 0xe360
+#define USB_PID_DIGIVOX_MINI_SL_WARM 0xe361
+#define USB_PID_GRANDTEC_DVBT_USB2_COLD 0x0bc6
+#define USB_PID_GRANDTEC_DVBT_USB2_WARM 0x0bc7
+#define USB_PID_WINFAST_DTV_DONGLE_COLD 0x6025
+#define USB_PID_WINFAST_DTV_DONGLE_WARM 0x6026
+#define USB_PID_WINFAST_DTV_DONGLE_STK7700P 0x6f00
+#define USB_PID_GENPIX_8PSK_REV_1_COLD 0x0200
+#define USB_PID_GENPIX_8PSK_REV_1_WARM 0x0201
+#define USB_PID_GENPIX_8PSK_REV_2 0x0202
+#define USB_PID_GENPIX_SKYWALKER_1 0x0203
+#define USB_PID_GENPIX_SKYWALKER_CW3K 0x0204
+#define USB_PID_SIGMATEK_DVB_110 0x6610
+#define USB_PID_MSI_DIGI_VOX_MINI_II 0x1513
+#define USB_PID_OPERA1_COLD 0x2830
+#define USB_PID_OPERA1_WARM 0x3829
+#define USB_PID_LIFEVIEW_TV_WALKER_TWIN_COLD 0x0514
+#define USB_PID_LIFEVIEW_TV_WALKER_TWIN_WARM 0x0513
+/* dom pour gigabyte u7000 */
+#define USB_PID_GIGABYTE_U7000 0x7001
+
+#endif
diff --git a/v4l/kernel-2.6.tmp/dvb-usb-init.c b/v4l/kernel-2.6.tmp/dvb-usb-init.c
new file mode 100644
index 0000000..cdd717c
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb-usb-init.c
@@ -0,0 +1,285 @@
+/*
+ * DVB USB library - provides a generic interface for a DVB USB device driver.
+ *
+ * dvb-usb-init.c
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation, version 2.
+ *
+ * see Documentation/dvb/README.dvb-usb for more information
+ */
+#include "dvb-usb-common.h"
+
+/* debug */
+int dvb_usb_debug;
+module_param_named(debug,dvb_usb_debug, int, 0644);
+MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2,pll=4,ts=8,err=16,rc=32,fw=64,mem=128,uxfer=256 (or-able))." DVB_USB_DEBUG_STATUS);
+
+int dvb_usb_disable_rc_polling;
+module_param_named(disable_rc_polling, dvb_usb_disable_rc_polling, int, 0644);
+MODULE_PARM_DESC(disable_rc_polling, "disable remote control polling (default: 0).");
+
+static int dvb_usb_force_pid_filter_usage;
+module_param_named(force_pid_filter_usage, dvb_usb_force_pid_filter_usage, int, 0444);
+MODULE_PARM_DESC(force_pid_filter_usage, "force all dvb-usb-devices to use a PID filter, if any (default: 0).");
+
+static int dvb_usb_adapter_init(struct dvb_usb_device *d)
+{
+ struct dvb_usb_adapter *adap;
+ int ret,n;
+
+ for (n = 0; n < d->props.num_adapters; n++) {
+ adap = &d->adapter[n];
+ adap->dev = d;
+ adap->id = n;
+
+ memcpy(&adap->props, &d->props.adapter[n], sizeof(struct dvb_usb_adapter_properties));
+
+/* speed - when running at FULL speed we need a HW PID filter */
+ if (d->udev->speed == USB_SPEED_FULL && !(adap->props.caps & DVB_USB_ADAP_HAS_PID_FILTER)) {
+ err("This USB2.0 device cannot be run on a USB1.1 port. (it lacks a hardware PID filter)");
+ return -ENODEV;
+ }
+
+ if ((d->udev->speed == USB_SPEED_FULL && adap->props.caps & DVB_USB_ADAP_HAS_PID_FILTER) ||
+ (adap->props.caps & DVB_USB_ADAP_NEED_PID_FILTERING)) {
+ info("will use the device's hardware PID filter (table count: %d).",adap->props.pid_filter_count);
+ adap->pid_filtering = 1;
+ adap->max_feed_count = adap->props.pid_filter_count;
+ } else {
+ info("will pass the complete MPEG2 transport stream to the software demuxer.");
+ adap->pid_filtering = 0;
+ adap->max_feed_count = 255;
+ }
+
+ if (!adap->pid_filtering &&
+ dvb_usb_force_pid_filter_usage &&
+ adap->props.caps & DVB_USB_ADAP_HAS_PID_FILTER) {
+ info("pid filter enabled by module option.");
+ adap->pid_filtering = 1;
+ adap->max_feed_count = adap->props.pid_filter_count;
+ }
+
+ if (adap->props.size_of_priv > 0) {
+ adap->priv = kzalloc(adap->props.size_of_priv,GFP_KERNEL);
+ if (adap->priv == NULL) {
+ err("no memory for priv for adapter %d.",n);
+ return -ENOMEM;
+ }
+ }
+
+ if ((ret = dvb_usb_adapter_stream_init(adap)) ||
+ (ret = dvb_usb_adapter_dvb_init(adap)) ||
+ (ret = dvb_usb_adapter_frontend_init(adap))) {
+ return ret;
+ }
+
+ d->num_adapters_initialized++;
+ d->state |= DVB_USB_STATE_DVB;
+ }
+
+ /*
+ * when reloading the driver w/o replugging the device
+ * sometimes a timeout occures, this helps
+ */
+ if (d->props.generic_bulk_ctrl_endpoint != 0) {
+ usb_clear_halt(d->udev,usb_sndbulkpipe(d->udev,d->props.generic_bulk_ctrl_endpoint));
+ usb_clear_halt(d->udev,usb_rcvbulkpipe(d->udev,d->props.generic_bulk_ctrl_endpoint));
+ }
+
+ return 0;
+}
+
+static int dvb_usb_adapter_exit(struct dvb_usb_device *d)
+{
+ int n;
+ for (n = 0; n < d->num_adapters_initialized; n++) {
+ dvb_usb_adapter_frontend_exit(&d->adapter[n]);
+ dvb_usb_adapter_dvb_exit(&d->adapter[n]);
+ dvb_usb_adapter_stream_exit(&d->adapter[n]);
+ kfree(d->adapter[n].priv);
+ }
+ d->num_adapters_initialized = 0;
+ d->state &= ~DVB_USB_STATE_DVB;
+ return 0;
+}
+
+
+/* general initialization functions */
+static int dvb_usb_exit(struct dvb_usb_device *d)
+{
+ deb_info("state before exiting everything: %x\n",d->state);
+ dvb_usb_remote_exit(d);
+ dvb_usb_adapter_exit(d);
+ dvb_usb_i2c_exit(d);
+ deb_info("state should be zero now: %x\n",d->state);
+ d->state = DVB_USB_STATE_INIT;
+ kfree(d->priv);
+ kfree(d);
+ return 0;
+}
+
+static int dvb_usb_init(struct dvb_usb_device *d)
+{
+ int ret = 0;
+
+ mutex_init(&d->usb_mutex);
+ mutex_init(&d->i2c_mutex);
+
+ d->state = DVB_USB_STATE_INIT;
+
+ if (d->props.size_of_priv > 0) {
+ d->priv = kzalloc(d->props.size_of_priv,GFP_KERNEL);
+ if (d->priv == NULL) {
+ err("no memory for priv in 'struct dvb_usb_device'");
+ return -ENOMEM;
+ }
+ }
+
+/* check the capabilities and set appropriate variables */
+ dvb_usb_device_power_ctrl(d, 1);
+
+ if ((ret = dvb_usb_i2c_init(d)) ||
+ (ret = dvb_usb_adapter_init(d))) {
+ dvb_usb_exit(d);
+ return ret;
+ }
+
+ if ((ret = dvb_usb_remote_init(d)))
+ err("could not initialize remote control.");
+
+ dvb_usb_device_power_ctrl(d, 0);
+
+ return 0;
+}
+
+/* determine the name and the state of the just found USB device */
+static struct dvb_usb_device_description * dvb_usb_find_device(struct usb_device *udev,struct dvb_usb_device_properties *props, int *cold)
+{
+ int i,j;
+ struct dvb_usb_device_description *desc = NULL;
+ *cold = -1;
+
+ for (i = 0; i < props->num_device_descs; i++) {
+
+ for (j = 0; j < DVB_USB_ID_MAX_NUM && props->devices[i].cold_ids[j] != NULL; j++) {
+ deb_info("check for cold %x %x\n",props->devices[i].cold_ids[j]->idVendor, props->devices[i].cold_ids[j]->idProduct);
+ if (props->devices[i].cold_ids[j]->idVendor == le16_to_cpu(udev->descriptor.idVendor) &&
+ props->devices[i].cold_ids[j]->idProduct == le16_to_cpu(udev->descriptor.idProduct)) {
+ *cold = 1;
+ desc = &props->devices[i];
+ break;
+ }
+ }
+
+ if (desc != NULL)
+ break;
+
+ for (j = 0; j < DVB_USB_ID_MAX_NUM && props->devices[i].warm_ids[j] != NULL; j++) {
+ deb_info("check for warm %x %x\n",props->devices[i].warm_ids[j]->idVendor, props->devices[i].warm_ids[j]->idProduct);
+ if (props->devices[i].warm_ids[j]->idVendor == le16_to_cpu(udev->descriptor.idVendor) &&
+ props->devices[i].warm_ids[j]->idProduct == le16_to_cpu(udev->descriptor.idProduct)) {
+ *cold = 0;
+ desc = &props->devices[i];
+ break;
+ }
+ }
+ }
+
+ if (desc != NULL && props->identify_state != NULL)
+ props->identify_state(udev,props,&desc,cold);
+
+ return desc;
+}
+
+int dvb_usb_device_power_ctrl(struct dvb_usb_device *d, int onoff)
+{
+ if (onoff)
+ d->powered++;
+ else
+ d->powered--;
+
+ if (d->powered == 0 || (onoff && d->powered == 1)) { // when switching from 1 to 0 or from 0 to 1
+ deb_info("power control: %d\n", onoff);
+ if (d->props.power_ctrl)
+ return d->props.power_ctrl(d, onoff);
+ }
+ return 0;
+}
+
+/*
+ * USB
+ */
+int dvb_usb_device_init(struct usb_interface *intf, struct dvb_usb_device_properties
+ *props, struct module *owner,struct dvb_usb_device **du)
+{
+ struct usb_device *udev = interface_to_usbdev(intf);
+ struct dvb_usb_device *d = NULL;
+ struct dvb_usb_device_description *desc = NULL;
+
+ int ret = -ENOMEM,cold=0;
+
+ if (du != NULL)
+ *du = NULL;
+
+ if ((desc = dvb_usb_find_device(udev,props,&cold)) == NULL) {
+ deb_err("something went very wrong, device was not found in current device list - let's see what comes next.\n");
+ return -ENODEV;
+ }
+
+ if (cold) {
+ info("found a '%s' in cold state, will try to load a firmware",desc->name);
+ ret = dvb_usb_download_firmware(udev,props);
+ if (!props->no_reconnect || ret != 0)
+ return ret;
+ }
+
+ info("found a '%s' in warm state.",desc->name);
+ d = kzalloc(sizeof(struct dvb_usb_device),GFP_KERNEL);
+ if (d == NULL) {
+ err("no memory for 'struct dvb_usb_device'");
+ return ret;
+ }
+
+ d->udev = udev;
+ memcpy(&d->props,props,sizeof(struct dvb_usb_device_properties));
+ d->desc = desc;
+ d->owner = owner;
+
+ usb_set_intfdata(intf, d);
+
+ if (du != NULL)
+ *du = d;
+
+ ret = dvb_usb_init(d);
+
+ if (ret == 0)
+ info("%s successfully initialized and connected.",desc->name);
+ else
+ info("%s error while loading driver (%d)",desc->name,ret);
+ return ret;
+}
+EXPORT_SYMBOL(dvb_usb_device_init);
+
+void dvb_usb_device_exit(struct usb_interface *intf)
+{
+ struct dvb_usb_device *d = usb_get_intfdata(intf);
+ const char *name = "generic DVB-USB module";
+
+ usb_set_intfdata(intf,NULL);
+ if (d != NULL && d->desc != NULL) {
+ name = d->desc->name;
+ dvb_usb_exit(d);
+ }
+ info("%s successfully deinitialized and disconnected.",name);
+
+}
+EXPORT_SYMBOL(dvb_usb_device_exit);
+
+MODULE_VERSION("1.0");
+MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>");
+MODULE_DESCRIPTION("A library module containing commonly used USB and DVB function USB DVB devices");
+MODULE_LICENSE("GPL");
diff --git a/v4l/kernel-2.6.tmp/dvb-usb-remote.c b/v4l/kernel-2.6.tmp/dvb-usb-remote.c
new file mode 100644
index 0000000..b47427e
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb-usb-remote.c
@@ -0,0 +1,222 @@
+/* dvb-usb-remote.c is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * This file contains functions for initializing the input-device and for handling remote-control-queries.
+ */
+#include "dvb-usb-common.h"
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
+#include <linux/usb/input.h>
+#else
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13)
+#include <linux/usb_input.h>
+#endif
+#endif
+
+/* Remote-control poll function - called every dib->rc_query_interval ms to see
+ * whether the remote control has received anything.
+ *
+ * TODO: Fix the repeat rate of the input device.
+ */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+static void dvb_usb_read_remote_control(void *data)
+#else
+static void dvb_usb_read_remote_control(struct work_struct *work)
+#endif
+{
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+ struct dvb_usb_device *d = data;
+#else
+ struct dvb_usb_device *d =
+ container_of(work, struct dvb_usb_device, rc_query_work.work);
+#endif
+ u32 event;
+ int state;
+
+ /* TODO: need a lock here. We can simply skip checking for the remote control
+ if we're busy. */
+
+ /* when the parameter has been set to 1 via sysfs while the driver was running */
+ if (dvb_usb_disable_rc_polling)
+ return;
+
+ if (d->props.rc_query(d,&event,&state)) {
+ err("error while querying for an remote control event.");
+ goto schedule;
+ }
+
+
+ switch (state) {
+ case REMOTE_NO_KEY_PRESSED:
+ break;
+ case REMOTE_KEY_PRESSED:
+ deb_rc("key pressed\n");
+ d->last_event = event;
+ case REMOTE_KEY_REPEAT:
+ deb_rc("key repeated\n");
+ input_event(d->rc_input_dev, EV_KEY, event, 1);
+ input_event(d->rc_input_dev, EV_KEY, d->last_event, 0);
+ input_sync(d->rc_input_dev);
+ break;
+ default:
+ break;
+ }
+
+/* improved repeat handling ???
+ switch (state) {
+ case REMOTE_NO_KEY_PRESSED:
+ deb_rc("NO KEY PRESSED\n");
+ if (d->last_state != REMOTE_NO_KEY_PRESSED) {
+ deb_rc("releasing event %d\n",d->last_event);
+ input_event(d->rc_input_dev, EV_KEY, d->last_event, 0);
+ input_sync(d->rc_input_dev);
+ }
+ d->last_state = REMOTE_NO_KEY_PRESSED;
+ d->last_event = 0;
+ break;
+ case REMOTE_KEY_PRESSED:
+ deb_rc("KEY PRESSED\n");
+ deb_rc("pressing event %d\n",event);
+
+ input_event(d->rc_input_dev, EV_KEY, event, 1);
+ input_sync(d->rc_input_dev);
+
+ d->last_event = event;
+ d->last_state = REMOTE_KEY_PRESSED;
+ break;
+ case REMOTE_KEY_REPEAT:
+ deb_rc("KEY_REPEAT\n");
+ if (d->last_state != REMOTE_NO_KEY_PRESSED) {
+ deb_rc("repeating event %d\n",d->last_event);
+ input_event(d->rc_input_dev, EV_KEY, d->last_event, 2);
+ input_sync(d->rc_input_dev);
+ d->last_state = REMOTE_KEY_REPEAT;
+ }
+ default:
+ break;
+ }
+*/
+
+schedule:
+ schedule_delayed_work(&d->rc_query_work,msecs_to_jiffies(d->props.rc_interval));
+}
+
+int dvb_usb_remote_init(struct dvb_usb_device *d)
+{
+ struct input_dev *input_dev;
+ int i;
+ int err;
+
+ if (d->props.rc_key_map == NULL ||
+ d->props.rc_query == NULL ||
+ dvb_usb_disable_rc_polling)
+ return 0;
+
+ usb_make_path(d->udev, d->rc_phys, sizeof(d->rc_phys));
+ strlcat(d->rc_phys, "/ir0", sizeof(d->rc_phys));
+
+ input_dev = input_allocate_device();
+ if (!input_dev)
+ return -ENOMEM;
+
+ input_dev->evbit[0] = BIT_MASK(EV_KEY);
+ input_dev->name = "IR-receiver inside an USB DVB receiver";
+ input_dev->phys = d->rc_phys;
+ usb_to_input_id(d->udev, &input_dev->id);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
+ input_dev->dev.parent = &d->udev->dev;
+#else
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)
+ input_dev->cdev.dev = &d->udev->dev;
+#endif
+#endif
+
+ /* set the bits for the keys */
+ deb_rc("key map size: %d\n", d->props.rc_key_map_size);
+ for (i = 0; i < d->props.rc_key_map_size; i++) {
+ deb_rc("setting bit for event %d item %d\n",
+ d->props.rc_key_map[i].event, i);
+ set_bit(d->props.rc_key_map[i].event, input_dev->keybit);
+ }
+
+ /* Start the remote-control polling. */
+ if (d->props.rc_interval < 40)
+ d->props.rc_interval = 100; /* default */
+
+ /* setting these two values to non-zero, we have to manage key repeats */
+ input_dev->rep[REP_PERIOD] = d->props.rc_interval;
+ input_dev->rep[REP_DELAY] = d->props.rc_interval + 150;
+
+ err = input_register_device(input_dev);
+ if (err) {
+ input_free_device(input_dev);
+ return err;
+ }
+
+ d->rc_input_dev = input_dev;
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+ INIT_WORK(&d->rc_query_work, dvb_usb_read_remote_control, d);
+#else
+ INIT_DELAYED_WORK(&d->rc_query_work, dvb_usb_read_remote_control);
+#endif
+
+ info("schedule remote query interval to %d msecs.", d->props.rc_interval);
+ schedule_delayed_work(&d->rc_query_work,msecs_to_jiffies(d->props.rc_interval));
+
+ d->state |= DVB_USB_STATE_REMOTE;
+
+ return 0;
+}
+
+int dvb_usb_remote_exit(struct dvb_usb_device *d)
+{
+ if (d->state & DVB_USB_STATE_REMOTE) {
+ cancel_rearming_delayed_work(&d->rc_query_work);
+ flush_scheduled_work();
+ input_unregister_device(d->rc_input_dev);
+ }
+ d->state &= ~DVB_USB_STATE_REMOTE;
+ return 0;
+}
+
+#define DVB_USB_RC_NEC_EMPTY 0x00
+#define DVB_USB_RC_NEC_KEY_PRESSED 0x01
+#define DVB_USB_RC_NEC_KEY_REPEATED 0x02
+int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *d,
+ u8 keybuf[5], u32 *event, int *state)
+{
+ int i;
+ struct dvb_usb_rc_key *keymap = d->props.rc_key_map;
+ *event = 0;
+ *state = REMOTE_NO_KEY_PRESSED;
+ switch (keybuf[0]) {
+ case DVB_USB_RC_NEC_EMPTY:
+ break;
+ case DVB_USB_RC_NEC_KEY_PRESSED:
+ if ((u8) ~keybuf[1] != keybuf[2] ||
+ (u8) ~keybuf[3] != keybuf[4]) {
+ deb_err("remote control checksum failed.\n");
+ break;
+ }
+ /* See if we can match the raw key code. */
+ for (i = 0; i < d->props.rc_key_map_size; i++)
+ if (keymap[i].custom == keybuf[1] &&
+ keymap[i].data == keybuf[3]) {
+ *event = keymap[i].event;
+ *state = REMOTE_KEY_PRESSED;
+ return 0;
+ }
+ deb_err("key mapping failed - no appropriate key found in keymapping\n");
+ break;
+ case DVB_USB_RC_NEC_KEY_REPEATED:
+ *state = REMOTE_KEY_REPEAT;
+ break;
+ default:
+ deb_err("unkown type of remote status: %d\n",keybuf[0]);
+ break;
+ }
+ return 0;
+}
+EXPORT_SYMBOL(dvb_usb_nec_rc_key_to_event);
diff --git a/v4l/kernel-2.6.tmp/dvb-usb-urb.c b/v4l/kernel-2.6.tmp/dvb-usb-urb.c
new file mode 100644
index 0000000..5cef12a
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb-usb-urb.c
@@ -0,0 +1,95 @@
+/* dvb-usb-urb.c is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * This file keeps functions for initializing and handling the
+ * USB and URB stuff.
+ */
+#include "dvb-usb-common.h"
+
+int dvb_usb_generic_rw(struct dvb_usb_device *d, u8 *wbuf, u16 wlen, u8 *rbuf,
+ u16 rlen, int delay_ms)
+{
+ int actlen,ret = -ENOMEM;
+
+ if (d->props.generic_bulk_ctrl_endpoint == 0) {
+ err("endpoint for generic control not specified.");
+ return -EINVAL;
+ }
+
+ if (wbuf == NULL || wlen == 0)
+ return -EINVAL;
+
+ if ((ret = mutex_lock_interruptible(&d->usb_mutex)))
+ return ret;
+
+ deb_xfer(">>> ");
+ debug_dump(wbuf,wlen,deb_xfer);
+
+ ret = usb_bulk_msg(d->udev,usb_sndbulkpipe(d->udev,
+ d->props.generic_bulk_ctrl_endpoint), wbuf,wlen,&actlen,
+ 2000);
+
+ if (ret)
+ err("bulk message failed: %d (%d/%d)",ret,wlen,actlen);
+ else
+ ret = actlen != wlen ? -1 : 0;
+
+ /* an answer is expected, and no error before */
+ if (!ret && rbuf && rlen) {
+ if (delay_ms)
+ msleep(delay_ms);
+
+ ret = usb_bulk_msg(d->udev,usb_rcvbulkpipe(d->udev,
+ d->props.generic_bulk_ctrl_endpoint),rbuf,rlen,&actlen,
+ 2000);
+
+ if (ret)
+ err("recv bulk message failed: %d",ret);
+ else {
+ deb_xfer("<<< ");
+ debug_dump(rbuf,actlen,deb_xfer);
+ }
+ }
+
+ mutex_unlock(&d->usb_mutex);
+ return ret;
+}
+EXPORT_SYMBOL(dvb_usb_generic_rw);
+
+int dvb_usb_generic_write(struct dvb_usb_device *d, u8 *buf, u16 len)
+{
+ return dvb_usb_generic_rw(d,buf,len,NULL,0,0);
+}
+EXPORT_SYMBOL(dvb_usb_generic_write);
+
+static void dvb_usb_data_complete(struct usb_data_stream *stream, u8 *buffer, size_t length)
+{
+ struct dvb_usb_adapter *adap = stream->user_priv;
+ if (adap->feedcount > 0 && adap->state & DVB_USB_ADAP_STATE_DVB)
+ dvb_dmx_swfilter(&adap->demux, buffer, length);
+}
+
+static void dvb_usb_data_complete_204(struct usb_data_stream *stream, u8 *buffer, size_t length)
+{
+ struct dvb_usb_adapter *adap = stream->user_priv;
+ if (adap->feedcount > 0 && adap->state & DVB_USB_ADAP_STATE_DVB)
+ dvb_dmx_swfilter_204(&adap->demux, buffer, length);
+}
+
+int dvb_usb_adapter_stream_init(struct dvb_usb_adapter *adap)
+{
+ adap->stream.udev = adap->dev->udev;
+ if (adap->props.caps & DVB_USB_ADAP_RECEIVES_204_BYTE_TS)
+ adap->stream.complete = dvb_usb_data_complete_204;
+ else
+ adap->stream.complete = dvb_usb_data_complete;
+ adap->stream.user_priv = adap;
+ return usb_urb_init(&adap->stream, &adap->props.stream);
+}
+
+int dvb_usb_adapter_stream_exit(struct dvb_usb_adapter *adap)
+{
+ return usb_urb_exit(&adap->stream);
+}
diff --git a/v4l/kernel-2.6.tmp/dvb-usb.h b/v4l/kernel-2.6.tmp/dvb-usb.h
new file mode 100644
index 0000000..cc5d432
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb-usb.h
@@ -0,0 +1,412 @@
+/* dvb-usb.h is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * the headerfile, all dvb-usb-drivers have to include.
+ *
+ * TODO: clean-up the structures for unused fields and update the comments
+ */
+#ifndef __DVB_USB_H__
+#define __DVB_USB_H__
+
+#include <linux/input.h>
+#include <linux/usb.h>
+#include <linux/firmware.h>
+#include "compat.h"
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,15)
+#include <linux/mutex.h>
+#endif
+
+#include "dvb_frontend.h"
+#include "dvb_demux.h"
+#include "dvb_net.h"
+#include "dmxdev.h"
+
+#include "dvb-pll.h"
+
+#include "dvb-usb-ids.h"
+
+/* debug */
+#ifdef CONFIG_DVB_USB_DEBUG
+#define dprintk(var,level,args...) \
+ do { if ((var & level)) { printk(args); } } while (0)
+
+#define debug_dump(b,l,func) {\
+ int loop_; \
+ for (loop_ = 0; loop_ < l; loop_++) func("%02x ", b[loop_]); \
+ func("\n");\
+}
+#define DVB_USB_DEBUG_STATUS
+#else
+#define dprintk(args...)
+#define debug_dump(b,l,func)
+
+#define DVB_USB_DEBUG_STATUS " (debugging is not enabled)"
+
+#endif
+
+/* generic log methods - taken from usb.h */
+#ifndef DVB_USB_LOG_PREFIX
+ #define DVB_USB_LOG_PREFIX "dvb-usb (please define a log prefix)"
+#endif
+
+#undef err
+#define err(format, arg...) printk(KERN_ERR DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef info
+#define info(format, arg...) printk(KERN_INFO DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+#undef warn
+#define warn(format, arg...) printk(KERN_WARNING DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
+
+/**
+ * struct dvb_usb_device_description - name and its according USB IDs
+ * @name: real name of the box, regardless which DVB USB device class is in use
+ * @cold_ids: array of struct usb_device_id which describe the device in
+ * pre-firmware state
+ * @warm_ids: array of struct usb_device_id which describe the device in
+ * post-firmware state
+ *
+ * Each DVB USB device class can have one or more actual devices, this struct
+ * assigns a name to it.
+ */
+struct dvb_usb_device_description {
+ const char *name;
+
+#define DVB_USB_ID_MAX_NUM 15
+ struct usb_device_id *cold_ids[DVB_USB_ID_MAX_NUM];
+ struct usb_device_id *warm_ids[DVB_USB_ID_MAX_NUM];
+};
+
+/**
+ * struct dvb_usb_rc_key - a remote control key and its input-event
+ * @custom: the vendor/custom part of the key
+ * @data: the actual key part
+ * @event: the input event assigned to key identified by custom and data
+ */
+struct dvb_usb_rc_key {
+ u8 custom,data;
+ u32 event;
+};
+
+struct dvb_usb_device;
+struct dvb_usb_adapter;
+struct usb_data_stream;
+
+/**
+ * Properties of USB streaming - TODO this structure should be somewhere else
+ * describes the kind of USB transfer used for data-streaming.
+ * (BULK or ISOC)
+ */
+struct usb_data_stream_properties {
+#define USB_BULK 1
+#define USB_ISOC 2
+ int type;
+ int count;
+ int endpoint;
+
+ union {
+ struct {
+ int buffersize; /* per URB */
+ } bulk;
+ struct {
+ int framesperurb;
+ int framesize;
+ int interval;
+ } isoc;
+ } u;
+};
+
+/**
+ * struct dvb_usb_adapter_properties - properties of a dvb-usb-adapter.
+ * A DVB-USB-Adapter is basically a dvb_adapter which is present on a USB-device.
+ * @caps: capabilities of the DVB USB device.
+ * @pid_filter_count: number of PID filter position in the optional hardware
+ * PID-filter.
+ * @streaming_ctrl: called to start and stop the MPEG2-TS streaming of the
+ * device (not URB submitting/killing).
+ * @pid_filter_ctrl: called to en/disable the PID filter, if any.
+ * @pid_filter: called to set/unset a PID for filtering.
+ * @frontend_attach: called to attach the possible frontends (fill fe-field
+ * of struct dvb_usb_device).
+ * @tuner_attach: called to attach the correct tuner and to fill pll_addr,
+ * pll_desc and pll_init_buf of struct dvb_usb_device).
+ * @stream: configuration of the USB streaming
+ */
+struct dvb_usb_adapter_properties {
+#define DVB_USB_ADAP_HAS_PID_FILTER 0x01
+#define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
+#define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
+#define DVB_USB_ADAP_RECEIVES_204_BYTE_TS 0x08
+ int caps;
+ int pid_filter_count;
+
+ int (*streaming_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
+ int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
+
+ int (*frontend_attach) (struct dvb_usb_adapter *);
+ int (*tuner_attach) (struct dvb_usb_adapter *);
+
+ struct usb_data_stream_properties stream;
+
+ int size_of_priv;
+};
+
+/**
+ * struct dvb_usb_device_properties - properties of a dvb-usb-device
+ * @usb_ctrl: which USB device-side controller is in use. Needed for firmware
+ * download.
+ * @firmware: name of the firmware file.
+ * @download_firmware: called to download the firmware when the usb_ctrl is
+ * DEVICE_SPECIFIC.
+ * @no_reconnect: device doesn't do a reconnect after downloading the firmware,
+ * so do the warm initialization right after it
+ *
+ * @size_of_priv: how many bytes shall be allocated for the private field
+ * of struct dvb_usb_device.
+ *
+ * @power_ctrl: called to enable/disable power of the device.
+ * @read_mac_address: called to read the MAC address of the device.
+ * @identify_state: called to determine the state (cold or warm), when it
+ * is not distinguishable by the USB IDs.
+ *
+ * @rc_key_map: a hard-wired array of struct dvb_usb_rc_key (NULL to disable
+ * remote control handling).
+ * @rc_key_map_size: number of items in @rc_key_map.
+ * @rc_query: called to query an event event.
+ * @rc_interval: time in ms between two queries.
+ *
+ * @i2c_algo: i2c_algorithm if the device has I2CoverUSB.
+ *
+ * @generic_bulk_ctrl_endpoint: most of the DVB USB devices have a generic
+ * endpoint which received control messages with bulk transfers. When this
+ * is non-zero, one can use dvb_usb_generic_rw and dvb_usb_generic_write-
+ * helper functions.
+ *
+ * @num_device_descs: number of struct dvb_usb_device_description in @devices
+ * @devices: array of struct dvb_usb_device_description compatibles with these
+ * properties.
+ */
+#define MAX_NO_OF_ADAPTER_PER_DEVICE 2
+struct dvb_usb_device_properties {
+
+#define DVB_USB_IS_AN_I2C_ADAPTER 0x01
+ int caps;
+
+#define DEVICE_SPECIFIC 0
+#define CYPRESS_AN2135 1
+#define CYPRESS_AN2235 2
+#define CYPRESS_FX2 3
+ int usb_ctrl;
+ int (*download_firmware) (struct usb_device *, const struct firmware *);
+ const char firmware[FIRMWARE_NAME_MAX];
+ int no_reconnect;
+
+ int size_of_priv;
+
+ int num_adapters;
+ struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ int (*power_ctrl) (struct dvb_usb_device *, int);
+ int (*read_mac_address) (struct dvb_usb_device *, u8 []);
+ int (*identify_state) (struct usb_device *, struct dvb_usb_device_properties *,
+ struct dvb_usb_device_description **, int *);
+
+/* remote control properties */
+#define REMOTE_NO_KEY_PRESSED 0x00
+#define REMOTE_KEY_PRESSED 0x01
+#define REMOTE_KEY_REPEAT 0x02
+ struct dvb_usb_rc_key *rc_key_map;
+ int rc_key_map_size;
+ int (*rc_query) (struct dvb_usb_device *, u32 *, int *);
+ int rc_interval;
+
+ struct i2c_algorithm *i2c_algo;
+
+ int generic_bulk_ctrl_endpoint;
+
+ int num_device_descs;
+ struct dvb_usb_device_description devices[9];
+};
+
+/**
+ * struct usb_data_stream - generic object of an USB stream
+ * @buf_num: number of buffer allocated.
+ * @buf_size: size of each buffer in buf_list.
+ * @buf_list: array containing all allocate buffers for streaming.
+ * @dma_addr: list of dma_addr_t for each buffer in buf_list.
+ *
+ * @urbs_initialized: number of URBs initialized.
+ * @urbs_submitted: number of URBs submitted.
+ */
+#define MAX_NO_URBS_FOR_DATA_STREAM 10
+struct usb_data_stream {
+ struct usb_device *udev;
+ struct usb_data_stream_properties props;
+
+#define USB_STATE_INIT 0x00
+#define USB_STATE_URB_BUF 0x01
+ int state;
+
+ void (*complete) (struct usb_data_stream *, u8 *, size_t);
+
+ struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ int buf_num;
+ unsigned long buf_size;
+ u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
+ dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
+
+ int urbs_initialized;
+ int urbs_submitted;
+
+ void *user_priv;
+};
+
+/**
+ * struct dvb_usb_adapter - a DVB adapter on a USB device
+ * @id: index of this adapter (starting with 0).
+ *
+ * @feedcount: number of reqested feeds (used for streaming-activation)
+ * @pid_filtering: is hardware pid_filtering used or not.
+ *
+ * @pll_addr: I2C address of the tuner for programming
+ * @pll_init: array containing the initialization buffer
+ * @pll_desc: pointer to the appropriate struct dvb_pll_desc
+ * @tuner_pass_ctrl: called to (de)activate tuner passthru of the demod or the board
+ *
+ * @dvb_adap: device's dvb_adapter.
+ * @dmxdev: device's dmxdev.
+ * @demux: device's software demuxer.
+ * @dvb_net: device's dvb_net interfaces.
+ * @dvb_frontend: device's frontend.
+ * @max_feed_count: how many feeds can be handled simultaneously by this
+ * device
+ *
+ * @fe_init: rerouted frontend-init (wakeup) function.
+ * @fe_sleep: rerouted frontend-sleep function.
+ *
+ * @stream: the usb data stream.
+ */
+struct dvb_usb_adapter {
+ struct dvb_usb_device *dev;
+ struct dvb_usb_adapter_properties props;
+
+#define DVB_USB_ADAP_STATE_INIT 0x000
+#define DVB_USB_ADAP_STATE_DVB 0x001
+ int state;
+
+ u8 id;
+
+ int feedcount;
+ int pid_filtering;
+
+ /* dvb */
+ struct dvb_adapter dvb_adap;
+ struct dmxdev dmxdev;
+ struct dvb_demux demux;
+ struct dvb_net dvb_net;
+ struct dvb_frontend *fe;
+ int max_feed_count;
+
+ int (*fe_init) (struct dvb_frontend *);
+ int (*fe_sleep) (struct dvb_frontend *);
+
+ struct usb_data_stream stream;
+
+ void *priv;
+};
+
+/**
+ * struct dvb_usb_device - object of a DVB USB device
+ * @props: copy of the struct dvb_usb_properties this device belongs to.
+ * @desc: pointer to the device's struct dvb_usb_device_description.
+ * @state: initialization and runtime state of the device.
+ *
+ * @powered: indicated whether the device is power or not.
+ * Powered is in/decremented for each call to modify the state.
+ * @udev: pointer to the device's struct usb_device.
+ *
+ * @usb_mutex: semaphore of USB control messages (reading needs two messages)
+ * @i2c_mutex: semaphore for i2c-transfers
+ *
+ * @i2c_adap: device's i2c_adapter if it uses I2CoverUSB
+ *
+ * @rc_input_dev: input device for the remote control.
+ * @rc_query_work: struct work_struct frequent rc queries
+ * @last_event: last triggered event
+ * @last_state: last state (no, pressed, repeat)
+ * @owner: owner of the dvb_adapter
+ * @priv: private data of the actual driver (allocate by dvb-usb, size defined
+ * in size_of_priv of dvb_usb_properties).
+ */
+struct dvb_usb_device {
+ struct dvb_usb_device_properties props;
+ struct dvb_usb_device_description *desc;
+
+ struct usb_device *udev;
+
+#define DVB_USB_STATE_INIT 0x000
+#define DVB_USB_STATE_I2C 0x001
+#define DVB_USB_STATE_DVB 0x002
+#define DVB_USB_STATE_REMOTE 0x004
+ int state;
+
+ int powered;
+
+ /* locking */
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,15)
+ struct mutex usb_mutex;
+#else
+ struct semaphore usb_mutex;
+#endif
+
+ /* i2c */
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,15)
+ struct mutex i2c_mutex;
+#else
+ struct semaphore i2c_mutex;
+#endif
+ struct i2c_adapter i2c_adap;
+
+ int num_adapters_initialized;
+ struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
+
+ /* remote control */
+ struct input_dev *rc_input_dev;
+ char rc_phys[64];
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+ struct work_struct rc_query_work;
+#else
+ struct delayed_work rc_query_work;
+#endif
+ u32 last_event;
+ int last_state;
+
+ struct module *owner;
+
+ void *priv;
+};
+
+extern int dvb_usb_device_init(struct usb_interface *, struct dvb_usb_device_properties *, struct module *, struct dvb_usb_device **);
+extern void dvb_usb_device_exit(struct usb_interface *);
+
+/* the generic read/write method for device control */
+extern int dvb_usb_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16,int);
+extern int dvb_usb_generic_write(struct dvb_usb_device *, u8 *, u16);
+
+/* commonly used remote control parsing */
+extern int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *, u8[], u32 *, int *);
+
+/* commonly used firmware download types and function */
+struct hexline {
+ u8 len;
+ u32 addr;
+ u8 type;
+ u8 data[255];
+ u8 chk;
+};
+extern int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type);
+extern int dvb_usb_get_hexline(const struct firmware *fw, struct hexline *hx, int *pos);
+
+
+#endif
diff --git a/v4l/kernel-2.6.tmp/dvb_demux.c b/v4l/kernel-2.6.tmp/dvb_demux.c
new file mode 100644
index 0000000..7959020
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb_demux.c
@@ -0,0 +1,1222 @@
+/*
+ * dvb_demux.c - DVB kernel demux API
+ *
+ * Copyright (C) 2000-2001 Ralph Metzler <ralph@convergence.de>
+ * & Marcus Metzler <marcus@convergence.de>
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include <linux/spinlock.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+#include <linux/module.h>
+#include <linux/poll.h>
+#include <linux/string.h>
+#include <linux/crc32.h>
+#include <asm/uaccess.h>
+
+#include "dvb_demux.h"
+
+#define NOBUFS
+/*
+** #define DVB_DEMUX_SECTION_LOSS_LOG to monitor payload loss in the syslog
+*/
+// #define DVB_DEMUX_SECTION_LOSS_LOG
+
+/******************************************************************************
+ * static inlined helper functions
+ ******************************************************************************/
+
+static inline u16 section_length(const u8 *buf)
+{
+ return 3 + ((buf[1] & 0x0f) << 8) + buf[2];
+}
+
+static inline u16 ts_pid(const u8 *buf)
+{
+ return ((buf[1] & 0x1f) << 8) + buf[2];
+}
+
+static inline u8 payload(const u8 *tsp)
+{
+ if (!(tsp[3] & 0x10)) // no payload?
+ return 0;
+
+ if (tsp[3] & 0x20) { // adaptation field?
+ if (tsp[4] > 183) // corrupted data?
+ return 0;
+ else
+ return 184 - 1 - tsp[4];
+ }
+
+ return 184;
+}
+
+static u32 dvb_dmx_crc32(struct dvb_demux_feed *f, const u8 *src, size_t len)
+{
+ return (f->feed.sec.crc_val = crc32_be(f->feed.sec.crc_val, src, len));
+}
+
+static void dvb_dmx_memcopy(struct dvb_demux_feed *f, u8 *d, const u8 *s,
+ size_t len)
+{
+ memcpy(d, s, len);
+}
+
+/******************************************************************************
+ * Software filter functions
+ ******************************************************************************/
+
+static inline int dvb_dmx_swfilter_payload(struct dvb_demux_feed *feed,
+ const u8 *buf)
+{
+ int count = payload(buf);
+ int p;
+ //int ccok;
+ //u8 cc;
+
+ if (count == 0)
+ return -1;
+
+ p = 188 - count;
+
+ /*
+ cc = buf[3] & 0x0f;
+ ccok = ((feed->cc + 1) & 0x0f) == cc;
+ feed->cc = cc;
+ if (!ccok)
+ printk("missed packet!\n");
+ */
+
+ if (buf[1] & 0x40) // PUSI ?
+ feed->peslen = 0xfffa;
+
+ feed->peslen += count;
+
+ return feed->cb.ts(&buf[p], count, NULL, 0, &feed->feed.ts, DMX_OK);
+}
+
+static int dvb_dmx_swfilter_sectionfilter(struct dvb_demux_feed *feed,
+ struct dvb_demux_filter *f)
+{
+ u8 neq = 0;
+ int i;
+
+ for (i = 0; i < DVB_DEMUX_MASK_MAX; i++) {
+ u8 xor = f->filter.filter_value[i] ^ feed->feed.sec.secbuf[i];
+
+ if (f->maskandmode[i] & xor)
+ return 0;
+
+ neq |= f->maskandnotmode[i] & xor;
+ }
+
+ if (f->doneq && !neq)
+ return 0;
+
+ return feed->cb.sec(feed->feed.sec.secbuf, feed->feed.sec.seclen,
+ NULL, 0, &f->filter, DMX_OK);
+}
+
+static inline int dvb_dmx_swfilter_section_feed(struct dvb_demux_feed *feed)
+{
+ struct dvb_demux *demux = feed->demux;
+ struct dvb_demux_filter *f = feed->filter;
+ struct dmx_section_feed *sec = &feed->feed.sec;
+ int section_syntax_indicator;
+
+ if (!sec->is_filtering)
+ return 0;
+
+ if (!f)
+ return 0;
+
+ if (sec->check_crc) {
+ section_syntax_indicator = ((sec->secbuf[1] & 0x80) != 0);
+ if (section_syntax_indicator &&
+ demux->check_crc32(feed, sec->secbuf, sec->seclen))
+ return -1;
+ }
+
+ do {
+ if (dvb_dmx_swfilter_sectionfilter(feed, f) < 0)
+ return -1;
+ } while ((f = f->next) && sec->is_filtering);
+
+ sec->seclen = 0;
+
+ return 0;
+}
+
+static void dvb_dmx_swfilter_section_new(struct dvb_demux_feed *feed)
+{
+ struct dmx_section_feed *sec = &feed->feed.sec;
+
+#ifdef DVB_DEMUX_SECTION_LOSS_LOG
+ if (sec->secbufp < sec->tsfeedp) {
+ int i, n = sec->tsfeedp - sec->secbufp;
+
+ /*
+ * Section padding is done with 0xff bytes entirely.
+ * Due to speed reasons, we won't check all of them
+ * but just first and last.
+ */
+ if (sec->secbuf[0] != 0xff || sec->secbuf[n - 1] != 0xff) {
+ printk("dvb_demux.c section ts padding loss: %d/%d\n",
+ n, sec->tsfeedp);
+ printk("dvb_demux.c pad data:");
+ for (i = 0; i < n; i++)
+ printk(" %02x", sec->secbuf[i]);
+ printk("\n");
+ }
+ }
+#endif
+
+ sec->tsfeedp = sec->secbufp = sec->seclen = 0;
+ sec->secbuf = sec->secbuf_base;
+}
+
+/*
+ * Losless Section Demux 1.4.1 by Emard
+ * Valsecchi Patrick:
+ * - middle of section A (no PUSI)
+ * - end of section A and start of section B
+ * (with PUSI pointing to the start of the second section)
+ *
+ * In this case, without feed->pusi_seen you'll receive a garbage section
+ * consisting of the end of section A. Basically because tsfeedp
+ * is incemented and the use=0 condition is not raised
+ * when the second packet arrives.
+ *
+ * Fix:
+ * when demux is started, let feed->pusi_seen = 0 to
+ * prevent initial feeding of garbage from the end of
+ * previous section. When you for the first time see PUSI=1
+ * then set feed->pusi_seen = 1
+ */
+static int dvb_dmx_swfilter_section_copy_dump(struct dvb_demux_feed *feed,
+ const u8 *buf, u8 len)
+{
+ struct dvb_demux *demux = feed->demux;
+ struct dmx_section_feed *sec = &feed->feed.sec;
+ u16 limit, seclen, n;
+
+ if (sec->tsfeedp >= DMX_MAX_SECFEED_SIZE)
+ return 0;
+
+ if (sec->tsfeedp + len > DMX_MAX_SECFEED_SIZE) {
+#ifdef DVB_DEMUX_SECTION_LOSS_LOG
+ printk("dvb_demux.c section buffer full loss: %d/%d\n",
+ sec->tsfeedp + len - DMX_MAX_SECFEED_SIZE,
+ DMX_MAX_SECFEED_SIZE);
+#endif
+ len = DMX_MAX_SECFEED_SIZE - sec->tsfeedp;
+ }
+
+ if (len <= 0)
+ return 0;
+
+ demux->memcopy(feed, sec->secbuf_base + sec->tsfeedp, buf, len);
+ sec->tsfeedp += len;
+
+ /*
+ * Dump all the sections we can find in the data (Emard)
+ */
+ limit = sec->tsfeedp;
+ if (limit > DMX_MAX_SECFEED_SIZE)
+ return -1; /* internal error should never happen */
+
+ /* to be sure always set secbuf */
+ sec->secbuf = sec->secbuf_base + sec->secbufp;
+
+ for (n = 0; sec->secbufp + 2 < limit; n++) {
+ seclen = section_length(sec->secbuf);
+ if (seclen <= 0 || seclen > DMX_MAX_SECTION_SIZE
+ || seclen + sec->secbufp > limit)
+ return 0;
+ sec->seclen = seclen;
+ sec->crc_val = ~0;
+ /* dump [secbuf .. secbuf+seclen) */
+ if (feed->pusi_seen)
+ dvb_dmx_swfilter_section_feed(feed);
+#ifdef DVB_DEMUX_SECTION_LOSS_LOG
+ else
+ printk("dvb_demux.c pusi not seen, discarding section data\n");
+#endif
+ sec->secbufp += seclen; /* secbufp and secbuf moving together is */
+ sec->secbuf += seclen; /* redundant but saves pointer arithmetic */
+ }
+
+ return 0;
+}
+
+static int dvb_dmx_swfilter_section_packet(struct dvb_demux_feed *feed,
+ const u8 *buf)
+{
+ u8 p, count;
+ int ccok, dc_i = 0;
+ u8 cc;
+
+ count = payload(buf);
+
+ if (count == 0) /* count == 0 if no payload or out of range */
+ return -1;
+
+ p = 188 - count; /* payload start */
+
+ cc = buf[3] & 0x0f;
+ ccok = ((feed->cc + 1) & 0x0f) == cc;
+ feed->cc = cc;
+
+ if (buf[3] & 0x20) {
+ /* adaption field present, check for discontinuity_indicator */
+ if ((buf[4] > 0) && (buf[5] & 0x80))
+ dc_i = 1;
+ }
+
+ if (!ccok || dc_i) {
+#ifdef DVB_DEMUX_SECTION_LOSS_LOG
+ printk("dvb_demux.c discontinuity detected %d bytes lost\n",
+ count);
+ /*
+ * those bytes under sume circumstances will again be reported
+ * in the following dvb_dmx_swfilter_section_new
+ */
+#endif
+ /*
+ * Discontinuity detected. Reset pusi_seen = 0 to
+ * stop feeding of suspicious data until next PUSI=1 arrives
+ */
+ feed->pusi_seen = 0;
+ dvb_dmx_swfilter_section_new(feed);
+ }
+
+ if (buf[1] & 0x40) {
+ /* PUSI=1 (is set), section boundary is here */
+ if (count > 1 && buf[p] < count) {
+ const u8 *before = &buf[p + 1];
+ u8 before_len = buf[p];
+ const u8 *after = &before[before_len];
+ u8 after_len = count - 1 - before_len;
+
+ dvb_dmx_swfilter_section_copy_dump(feed, before,
+ before_len);
+ /* before start of new section, set pusi_seen = 1 */
+ feed->pusi_seen = 1;
+ dvb_dmx_swfilter_section_new(feed);
+ dvb_dmx_swfilter_section_copy_dump(feed, after,
+ after_len);
+ }
+#ifdef DVB_DEMUX_SECTION_LOSS_LOG
+ else if (count > 0)
+ printk("dvb_demux.c PUSI=1 but %d bytes lost\n", count);
+#endif
+ } else {
+ /* PUSI=0 (is not set), no section boundary */
+ dvb_dmx_swfilter_section_copy_dump(feed, &buf[p], count);
+ }
+
+ return 0;
+}
+
+static inline void dvb_dmx_swfilter_packet_type(struct dvb_demux_feed *feed,
+ const u8 *buf)
+{
+ switch (feed->type) {
+ case DMX_TYPE_TS:
+ if (!feed->feed.ts.is_filtering)
+ break;
+ if (feed->ts_type & TS_PACKET) {
+ if (feed->ts_type & TS_PAYLOAD_ONLY)
+ dvb_dmx_swfilter_payload(feed, buf);
+ else
+ feed->cb.ts(buf, 188, NULL, 0, &feed->feed.ts,
+ DMX_OK);
+ }
+ if (feed->ts_type & TS_DECODER)
+ if (feed->demux->write_to_decoder)
+ feed->demux->write_to_decoder(feed, buf, 188);
+ break;
+
+ case DMX_TYPE_SEC:
+ if (!feed->feed.sec.is_filtering)
+ break;
+ if (dvb_dmx_swfilter_section_packet(feed, buf) < 0)
+ feed->feed.sec.seclen = feed->feed.sec.secbufp = 0;
+ break;
+
+ default:
+ break;
+ }
+}
+
+#define DVR_FEED(f) \
+ (((f)->type == DMX_TYPE_TS) && \
+ ((f)->feed.ts.is_filtering) && \
+ (((f)->ts_type & (TS_PACKET|TS_PAYLOAD_ONLY)) == TS_PACKET))
+
+static void dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf)
+{
+ struct dvb_demux_feed *feed;
+ u16 pid = ts_pid(buf);
+ int dvr_done = 0;
+
+ list_for_each_entry(feed, &demux->feed_list, list_head) {
+ if ((feed->pid != pid) && (feed->pid != 0x2000))
+ continue;
+
+ /* copy each packet only once to the dvr device, even
+ * if a PID is in multiple filters (e.g. video + PCR) */
+ if ((DVR_FEED(feed)) && (dvr_done++))
+ continue;
+
+ if (feed->pid == pid) {
+ dvb_dmx_swfilter_packet_type(feed, buf);
+ if (DVR_FEED(feed))
+ continue;
+ }
+
+ if (feed->pid == 0x2000)
+ feed->cb.ts(buf, 188, NULL, 0, &feed->feed.ts, DMX_OK);
+ }
+}
+
+void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf,
+ size_t count)
+{
+ spin_lock(&demux->lock);
+
+ while (count--) {
+ if (buf[0] == 0x47)
+ dvb_dmx_swfilter_packet(demux, buf);
+ buf += 188;
+ }
+
+ spin_unlock(&demux->lock);
+}
+
+EXPORT_SYMBOL(dvb_dmx_swfilter_packets);
+
+void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count)
+{
+ int p = 0, i, j;
+
+ spin_lock(&demux->lock);
+
+ if (demux->tsbufp) {
+ i = demux->tsbufp;
+ j = 188 - i;
+ if (count < j) {
+ memcpy(&demux->tsbuf[i], buf, count);
+ demux->tsbufp += count;
+ goto bailout;
+ }
+ memcpy(&demux->tsbuf[i], buf, j);
+ if (demux->tsbuf[0] == 0x47)
+ dvb_dmx_swfilter_packet(demux, demux->tsbuf);
+ demux->tsbufp = 0;
+ p += j;
+ }
+
+ while (p < count) {
+ if (buf[p] == 0x47) {
+ if (count - p >= 188) {
+ dvb_dmx_swfilter_packet(demux, &buf[p]);
+ p += 188;
+ } else {
+ i = count - p;
+ memcpy(demux->tsbuf, &buf[p], i);
+ demux->tsbufp = i;
+ goto bailout;
+ }
+ } else
+ p++;
+ }
+
+bailout:
+ spin_unlock(&demux->lock);
+}
+
+EXPORT_SYMBOL(dvb_dmx_swfilter);
+
+void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf, size_t count)
+{
+ int p = 0, i, j;
+ u8 tmppack[188];
+
+ spin_lock(&demux->lock);
+
+ if (demux->tsbufp) {
+ i = demux->tsbufp;
+ j = 204 - i;
+ if (count < j) {
+ memcpy(&demux->tsbuf[i], buf, count);
+ demux->tsbufp += count;
+ goto bailout;
+ }
+ memcpy(&demux->tsbuf[i], buf, j);
+ if ((demux->tsbuf[0] == 0x47) || (demux->tsbuf[0] == 0xB8)) {
+ memcpy(tmppack, demux->tsbuf, 188);
+ if (tmppack[0] == 0xB8)
+ tmppack[0] = 0x47;
+ dvb_dmx_swfilter_packet(demux, tmppack);
+ }
+ demux->tsbufp = 0;
+ p += j;
+ }
+
+ while (p < count) {
+ if ((buf[p] == 0x47) || (buf[p] == 0xB8)) {
+ if (count - p >= 204) {
+ memcpy(tmppack, &buf[p], 188);
+ if (tmppack[0] == 0xB8)
+ tmppack[0] = 0x47;
+ dvb_dmx_swfilter_packet(demux, tmppack);
+ p += 204;
+ } else {
+ i = count - p;
+ memcpy(demux->tsbuf, &buf[p], i);
+ demux->tsbufp = i;
+ goto bailout;
+ }
+ } else {
+ p++;
+ }
+ }
+
+bailout:
+ spin_unlock(&demux->lock);
+}
+
+EXPORT_SYMBOL(dvb_dmx_swfilter_204);
+
+static struct dvb_demux_filter *dvb_dmx_filter_alloc(struct dvb_demux *demux)
+{
+ int i;
+
+ for (i = 0; i < demux->filternum; i++)
+ if (demux->filter[i].state == DMX_STATE_FREE)
+ break;
+
+ if (i == demux->filternum)
+ return NULL;
+
+ demux->filter[i].state = DMX_STATE_ALLOCATED;
+
+ return &demux->filter[i];
+}
+
+static struct dvb_demux_feed *dvb_dmx_feed_alloc(struct dvb_demux *demux)
+{
+ int i;
+
+ for (i = 0; i < demux->feednum; i++)
+ if (demux->feed[i].state == DMX_STATE_FREE)
+ break;
+
+ if (i == demux->feednum)
+ return NULL;
+
+ demux->feed[i].state = DMX_STATE_ALLOCATED;
+
+ return &demux->feed[i];
+}
+
+static int dvb_demux_feed_find(struct dvb_demux_feed *feed)
+{
+ struct dvb_demux_feed *entry;
+
+ list_for_each_entry(entry, &feed->demux->feed_list, list_head)
+ if (entry == feed)
+ return 1;
+
+ return 0;
+}
+
+static void dvb_demux_feed_add(struct dvb_demux_feed *feed)
+{
+ spin_lock_irq(&feed->demux->lock);
+ if (dvb_demux_feed_find(feed)) {
+ printk(KERN_ERR "%s: feed already in list (type=%x state=%x pid=%x)\n",
+ __FUNCTION__, feed->type, feed->state, feed->pid);
+ goto out;
+ }
+
+ list_add(&feed->list_head, &feed->demux->feed_list);
+out:
+ spin_unlock_irq(&feed->demux->lock);
+}
+
+static void dvb_demux_feed_del(struct dvb_demux_feed *feed)
+{
+ spin_lock_irq(&feed->demux->lock);
+ if (!(dvb_demux_feed_find(feed))) {
+ printk(KERN_ERR "%s: feed not in list (type=%x state=%x pid=%x)\n",
+ __FUNCTION__, feed->type, feed->state, feed->pid);
+ goto out;
+ }
+
+ list_del(&feed->list_head);
+out:
+ spin_unlock_irq(&feed->demux->lock);
+}
+
+static int dmx_ts_feed_set(struct dmx_ts_feed *ts_feed, u16 pid, int ts_type,
+ enum dmx_ts_pes pes_type,
+ size_t circular_buffer_size, struct timespec timeout)
+{
+ struct dvb_demux_feed *feed = (struct dvb_demux_feed *)ts_feed;
+ struct dvb_demux *demux = feed->demux;
+
+ if (pid > DMX_MAX_PID)
+ return -EINVAL;
+
+ if (mutex_lock_interruptible(&demux->mutex))
+ return -ERESTARTSYS;
+
+ if (ts_type & TS_DECODER) {
+ if (pes_type >= DMX_TS_PES_OTHER) {
+ mutex_unlock(&demux->mutex);
+ return -EINVAL;
+ }
+
+ if (demux->pesfilter[pes_type] &&
+ demux->pesfilter[pes_type] != feed) {
+ mutex_unlock(&demux->mutex);
+ return -EINVAL;
+ }
+
+ demux->pesfilter[pes_type] = feed;
+ demux->pids[pes_type] = pid;
+ }
+
+ dvb_demux_feed_add(feed);
+
+ feed->pid = pid;
+ feed->buffer_size = circular_buffer_size;
+ feed->timeout = timeout;
+ feed->ts_type = ts_type;
+ feed->pes_type = pes_type;
+
+ if (feed->buffer_size) {
+#ifdef NOBUFS
+ feed->buffer = NULL;
+#else
+ feed->buffer = vmalloc(feed->buffer_size);
+ if (!feed->buffer) {
+ mutex_unlock(&demux->mutex);
+ return -ENOMEM;
+ }
+#endif
+ }
+
+ feed->state = DMX_STATE_READY;
+ mutex_unlock(&demux->mutex);
+
+ return 0;
+}
+
+static int dmx_ts_feed_start_filtering(struct dmx_ts_feed *ts_feed)
+{
+ struct dvb_demux_feed *feed = (struct dvb_demux_feed *)ts_feed;
+ struct dvb_demux *demux = feed->demux;
+ int ret;
+
+ if (mutex_lock_interruptible(&demux->mutex))
+ return -ERESTARTSYS;
+
+ if (feed->state != DMX_STATE_READY || feed->type != DMX_TYPE_TS) {
+ mutex_unlock(&demux->mutex);
+ return -EINVAL;
+ }
+
+ if (!demux->start_feed) {
+ mutex_unlock(&demux->mutex);
+ return -ENODEV;
+ }
+
+ if ((ret = demux->start_feed(feed)) < 0) {
+ mutex_unlock(&demux->mutex);
+ return ret;
+ }
+
+ spin_lock_irq(&demux->lock);
+ ts_feed->is_filtering = 1;
+ feed->state = DMX_STATE_GO;
+ spin_unlock_irq(&demux->lock);
+ mutex_unlock(&demux->mutex);
+
+ return 0;
+}
+
+static int dmx_ts_feed_stop_filtering(struct dmx_ts_feed *ts_feed)
+{
+ struct dvb_demux_feed *feed = (struct dvb_demux_feed *)ts_feed;
+ struct dvb_demux *demux = feed->demux;
+ int ret;
+
+ mutex_lock(&demux->mutex);
+
+ if (feed->state < DMX_STATE_GO) {
+ mutex_unlock(&demux->mutex);
+ return -EINVAL;
+ }
+
+ if (!demux->stop_feed) {
+ mutex_unlock(&demux->mutex);
+ return -ENODEV;
+ }
+
+ ret = demux->stop_feed(feed);
+
+ spin_lock_irq(&demux->lock);
+ ts_feed->is_filtering = 0;
+ feed->state = DMX_STATE_ALLOCATED;
+ spin_unlock_irq(&demux->lock);
+ mutex_unlock(&demux->mutex);
+
+ return ret;
+}
+
+static int dvbdmx_allocate_ts_feed(struct dmx_demux *dmx,
+ struct dmx_ts_feed **ts_feed,
+ dmx_ts_cb callback)
+{
+ struct dvb_demux *demux = (struct dvb_demux *)dmx;
+ struct dvb_demux_feed *feed;
+
+ if (mutex_lock_interruptible(&demux->mutex))
+ return -ERESTARTSYS;
+
+ if (!(feed = dvb_dmx_feed_alloc(demux))) {
+ mutex_unlock(&demux->mutex);
+ return -EBUSY;
+ }
+
+ feed->type = DMX_TYPE_TS;
+ feed->cb.ts = callback;
+ feed->demux = demux;
+ feed->pid = 0xffff;
+ feed->peslen = 0xfffa;
+ feed->buffer = NULL;
+
+ (*ts_feed) = &feed->feed.ts;
+ (*ts_feed)->parent = dmx;
+ (*ts_feed)->priv = NULL;
+ (*ts_feed)->is_filtering = 0;
+ (*ts_feed)->start_filtering = dmx_ts_feed_start_filtering;
+ (*ts_feed)->stop_filtering = dmx_ts_feed_stop_filtering;
+ (*ts_feed)->set = dmx_ts_feed_set;
+
+ if (!(feed->filter = dvb_dmx_filter_alloc(demux))) {
+ feed->state = DMX_STATE_FREE;
+ mutex_unlock(&demux->mutex);
+ return -EBUSY;
+ }
+
+ feed->filter->type = DMX_TYPE_TS;
+ feed->filter->feed = feed;
+ feed->filter->state = DMX_STATE_READY;
+
+ mutex_unlock(&demux->mutex);
+
+ return 0;
+}
+
+static int dvbdmx_release_ts_feed(struct dmx_demux *dmx,
+ struct dmx_ts_feed *ts_feed)
+{
+ struct dvb_demux *demux = (struct dvb_demux *)dmx;
+ struct dvb_demux_feed *feed = (struct dvb_demux_feed *)ts_feed;
+
+ mutex_lock(&demux->mutex);
+
+ if (feed->state == DMX_STATE_FREE) {
+ mutex_unlock(&demux->mutex);
+ return -EINVAL;
+ }
+#ifndef NOBUFS
+ vfree(feed->buffer);
+ feed->buffer = NULL;
+#endif
+
+ feed->state = DMX_STATE_FREE;
+ feed->filter->state = DMX_STATE_FREE;
+
+ dvb_demux_feed_del(feed);
+
+ feed->pid = 0xffff;
+
+ if (feed->ts_type & TS_DECODER && feed->pes_type < DMX_TS_PES_OTHER)
+ demux->pesfilter[feed->pes_type] = NULL;
+
+ mutex_unlock(&demux->mutex);
+ return 0;
+}
+
+/******************************************************************************
+ * dmx_section_feed API calls
+ ******************************************************************************/
+
+static int dmx_section_feed_allocate_filter(struct dmx_section_feed *feed,
+ struct dmx_section_filter **filter)
+{
+ struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *)feed;
+ struct dvb_demux *dvbdemux = dvbdmxfeed->demux;
+ struct dvb_demux_filter *dvbdmxfilter;
+
+ if (mutex_lock_interruptible(&dvbdemux->mutex))
+ return -ERESTARTSYS;
+
+ dvbdmxfilter = dvb_dmx_filter_alloc(dvbdemux);
+ if (!dvbdmxfilter) {
+ mutex_unlock(&dvbdemux->mutex);
+ return -EBUSY;
+ }
+
+ spin_lock_irq(&dvbdemux->lock);
+ *filter = &dvbdmxfilter->filter;
+ (*filter)->parent = feed;
+ (*filter)->priv = NULL;
+ dvbdmxfilter->feed = dvbdmxfeed;
+ dvbdmxfilter->type = DMX_TYPE_SEC;
+ dvbdmxfilter->state = DMX_STATE_READY;
+ dvbdmxfilter->next = dvbdmxfeed->filter;
+ dvbdmxfeed->filter = dvbdmxfilter;
+ spin_unlock_irq(&dvbdemux->lock);
+
+ mutex_unlock(&dvbdemux->mutex);
+ return 0;
+}
+
+static int dmx_section_feed_set(struct dmx_section_feed *feed,
+ u16 pid, size_t circular_buffer_size,
+ int check_crc)
+{
+ struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *)feed;
+ struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
+
+ if (pid > 0x1fff)
+ return -EINVAL;
+
+ if (mutex_lock_interruptible(&dvbdmx->mutex))
+ return -ERESTARTSYS;
+
+ dvb_demux_feed_add(dvbdmxfeed);
+
+ dvbdmxfeed->pid = pid;
+ dvbdmxfeed->buffer_size = circular_buffer_size;
+ dvbdmxfeed->feed.sec.check_crc = check_crc;
+
+#ifdef NOBUFS
+ dvbdmxfeed->buffer = NULL;
+#else
+ dvbdmxfeed->buffer = vmalloc(dvbdmxfeed->buffer_size);
+ if (!dvbdmxfeed->buffer) {
+ mutex_unlock(&dvbdmx->mutex);
+ return -ENOMEM;
+ }
+#endif
+
+ dvbdmxfeed->state = DMX_STATE_READY;
+ mutex_unlock(&dvbdmx->mutex);
+ return 0;
+}
+
+static void prepare_secfilters(struct dvb_demux_feed *dvbdmxfeed)
+{
+ int i;
+ struct dvb_demux_filter *f;
+ struct dmx_section_filter *sf;
+ u8 mask, mode, doneq;
+
+ if (!(f = dvbdmxfeed->filter))
+ return;
+ do {
+ sf = &f->filter;
+ doneq = 0;
+ for (i = 0; i < DVB_DEMUX_MASK_MAX; i++) {
+ mode = sf->filter_mode[i];
+ mask = sf->filter_mask[i];
+ f->maskandmode[i] = mask & mode;
+ doneq |= f->maskandnotmode[i] = mask & ~mode;
+ }
+ f->doneq = doneq ? 1 : 0;
+ } while ((f = f->next));
+}
+
+static int dmx_section_feed_start_filtering(struct dmx_section_feed *feed)
+{
+ struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *)feed;
+ struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
+ int ret;
+
+ if (mutex_lock_interruptible(&dvbdmx->mutex))
+ return -ERESTARTSYS;
+
+ if (feed->is_filtering) {
+ mutex_unlock(&dvbdmx->mutex);
+ return -EBUSY;
+ }
+
+ if (!dvbdmxfeed->filter) {
+ mutex_unlock(&dvbdmx->mutex);
+ return -EINVAL;
+ }
+
+ dvbdmxfeed->feed.sec.tsfeedp = 0;
+ dvbdmxfeed->feed.sec.secbuf = dvbdmxfeed->feed.sec.secbuf_base;
+ dvbdmxfeed->feed.sec.secbufp = 0;
+ dvbdmxfeed->feed.sec.seclen = 0;
+
+ if (!dvbdmx->start_feed) {
+ mutex_unlock(&dvbdmx->mutex);
+ return -ENODEV;
+ }
+
+ prepare_secfilters(dvbdmxfeed);
+
+ if ((ret = dvbdmx->start_feed(dvbdmxfeed)) < 0) {
+ mutex_unlock(&dvbdmx->mutex);
+ return ret;
+ }
+
+ spin_lock_irq(&dvbdmx->lock);
+ feed->is_filtering = 1;
+ dvbdmxfeed->state = DMX_STATE_GO;
+ spin_unlock_irq(&dvbdmx->lock);
+
+ mutex_unlock(&dvbdmx->mutex);
+ return 0;
+}
+
+static int dmx_section_feed_stop_filtering(struct dmx_section_feed *feed)
+{
+ struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *)feed;
+ struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
+ int ret;
+
+ mutex_lock(&dvbdmx->mutex);
+
+ if (!dvbdmx->stop_feed) {
+ mutex_unlock(&dvbdmx->mutex);
+ return -ENODEV;
+ }
+
+ ret = dvbdmx->stop_feed(dvbdmxfeed);
+
+ spin_lock_irq(&dvbdmx->lock);
+ dvbdmxfeed->state = DMX_STATE_READY;
+ feed->is_filtering = 0;
+ spin_unlock_irq(&dvbdmx->lock);
+
+ mutex_unlock(&dvbdmx->mutex);
+ return ret;
+}
+
+static int dmx_section_feed_release_filter(struct dmx_section_feed *feed,
+ struct dmx_section_filter *filter)
+{
+ struct dvb_demux_filter *dvbdmxfilter = (struct dvb_demux_filter *)filter, *f;
+ struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *)feed;
+ struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
+
+ mutex_lock(&dvbdmx->mutex);
+
+ if (dvbdmxfilter->feed != dvbdmxfeed) {
+ mutex_unlock(&dvbdmx->mutex);
+ return -EINVAL;
+ }
+
+ if (feed->is_filtering)
+ feed->stop_filtering(feed);
+
+ spin_lock_irq(&dvbdmx->lock);
+ f = dvbdmxfeed->filter;
+
+ if (f == dvbdmxfilter) {
+ dvbdmxfeed->filter = dvbdmxfilter->next;
+ } else {
+ while (f->next != dvbdmxfilter)
+ f = f->next;
+ f->next = f->next->next;
+ }
+
+ dvbdmxfilter->state = DMX_STATE_FREE;
+ spin_unlock_irq(&dvbdmx->lock);
+ mutex_unlock(&dvbdmx->mutex);
+ return 0;
+}
+
+static int dvbdmx_allocate_section_feed(struct dmx_demux *demux,
+ struct dmx_section_feed **feed,
+ dmx_section_cb callback)
+{
+ struct dvb_demux *dvbdmx = (struct dvb_demux *)demux;
+ struct dvb_demux_feed *dvbdmxfeed;
+
+ if (mutex_lock_interruptible(&dvbdmx->mutex))
+ return -ERESTARTSYS;
+
+ if (!(dvbdmxfeed = dvb_dmx_feed_alloc(dvbdmx))) {
+ mutex_unlock(&dvbdmx->mutex);
+ return -EBUSY;
+ }
+
+ dvbdmxfeed->type = DMX_TYPE_SEC;
+ dvbdmxfeed->cb.sec = callback;
+ dvbdmxfeed->demux = dvbdmx;
+ dvbdmxfeed->pid = 0xffff;
+ dvbdmxfeed->feed.sec.secbuf = dvbdmxfeed->feed.sec.secbuf_base;
+ dvbdmxfeed->feed.sec.secbufp = dvbdmxfeed->feed.sec.seclen = 0;
+ dvbdmxfeed->feed.sec.tsfeedp = 0;
+ dvbdmxfeed->filter = NULL;
+ dvbdmxfeed->buffer = NULL;
+
+ (*feed) = &dvbdmxfeed->feed.sec;
+ (*feed)->is_filtering = 0;
+ (*feed)->parent = demux;
+ (*feed)->priv = NULL;
+
+ (*feed)->set = dmx_section_feed_set;
+ (*feed)->allocate_filter = dmx_section_feed_allocate_filter;
+ (*feed)->start_filtering = dmx_section_feed_start_filtering;
+ (*feed)->stop_filtering = dmx_section_feed_stop_filtering;
+ (*feed)->release_filter = dmx_section_feed_release_filter;
+
+ mutex_unlock(&dvbdmx->mutex);
+ return 0;
+}
+
+static int dvbdmx_release_section_feed(struct dmx_demux *demux,
+ struct dmx_section_feed *feed)
+{
+ struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *)feed;
+ struct dvb_demux *dvbdmx = (struct dvb_demux *)demux;
+
+ mutex_lock(&dvbdmx->mutex);
+
+ if (dvbdmxfeed->state == DMX_STATE_FREE) {
+ mutex_unlock(&dvbdmx->mutex);
+ return -EINVAL;
+ }
+#ifndef NOBUFS
+ vfree(dvbdmxfeed->buffer);
+ dvbdmxfeed->buffer = NULL;
+#endif
+ dvbdmxfeed->state = DMX_STATE_FREE;
+
+ dvb_demux_feed_del(dvbdmxfeed);
+
+ dvbdmxfeed->pid = 0xffff;
+
+ mutex_unlock(&dvbdmx->mutex);
+ return 0;
+}
+
+/******************************************************************************
+ * dvb_demux kernel data API calls
+ ******************************************************************************/
+
+static int dvbdmx_open(struct dmx_demux *demux)
+{
+ struct dvb_demux *dvbdemux = (struct dvb_demux *)demux;
+
+ if (dvbdemux->users >= MAX_DVB_DEMUX_USERS)
+ return -EUSERS;
+
+ dvbdemux->users++;
+ return 0;
+}
+
+static int dvbdmx_close(struct dmx_demux *demux)
+{
+ struct dvb_demux *dvbdemux = (struct dvb_demux *)demux;
+
+ if (dvbdemux->users == 0)
+ return -ENODEV;
+
+ dvbdemux->users--;
+ //FIXME: release any unneeded resources if users==0
+ return 0;
+}
+
+static int dvbdmx_write(struct dmx_demux *demux, const char *buf, size_t count)
+{
+ struct dvb_demux *dvbdemux = (struct dvb_demux *)demux;
+
+ if ((!demux->frontend) || (demux->frontend->source != DMX_MEMORY_FE))
+ return -EINVAL;
+
+ if (mutex_lock_interruptible(&dvbdemux->mutex))
+ return -ERESTARTSYS;
+ dvb_dmx_swfilter(dvbdemux, (u8 *)buf, count);
+ mutex_unlock(&dvbdemux->mutex);
+
+ if (signal_pending(current))
+ return -EINTR;
+ return count;
+}
+
+static int dvbdmx_add_frontend(struct dmx_demux *demux,
+ struct dmx_frontend *frontend)
+{
+ struct dvb_demux *dvbdemux = (struct dvb_demux *)demux;
+ struct list_head *head = &dvbdemux->frontend_list;
+
+ list_add(&(frontend->connectivity_list), head);
+
+ return 0;
+}
+
+static int dvbdmx_remove_frontend(struct dmx_demux *demux,
+ struct dmx_frontend *frontend)
+{
+ struct dvb_demux *dvbdemux = (struct dvb_demux *)demux;
+ struct list_head *pos, *n, *head = &dvbdemux->frontend_list;
+
+ list_for_each_safe(pos, n, head) {
+ if (DMX_FE_ENTRY(pos) == frontend) {
+ list_del(pos);
+ return 0;
+ }
+ }
+
+ return -ENODEV;
+}
+
+static struct list_head *dvbdmx_get_frontends(struct dmx_demux *demux)
+{
+ struct dvb_demux *dvbdemux = (struct dvb_demux *)demux;
+
+ if (list_empty(&dvbdemux->frontend_list))
+ return NULL;
+
+ return &dvbdemux->frontend_list;
+}
+
+static int dvbdmx_connect_frontend(struct dmx_demux *demux,
+ struct dmx_frontend *frontend)
+{
+ struct dvb_demux *dvbdemux = (struct dvb_demux *)demux;
+
+ if (demux->frontend)
+ return -EINVAL;
+
+ mutex_lock(&dvbdemux->mutex);
+
+ demux->frontend = frontend;
+ mutex_unlock(&dvbdemux->mutex);
+ return 0;
+}
+
+static int dvbdmx_disconnect_frontend(struct dmx_demux *demux)
+{
+ struct dvb_demux *dvbdemux = (struct dvb_demux *)demux;
+
+ mutex_lock(&dvbdemux->mutex);
+
+ demux->frontend = NULL;
+ mutex_unlock(&dvbdemux->mutex);
+ return 0;
+}
+
+static int dvbdmx_get_pes_pids(struct dmx_demux *demux, u16 * pids)
+{
+ struct dvb_demux *dvbdemux = (struct dvb_demux *)demux;
+
+ memcpy(pids, dvbdemux->pids, 5 * sizeof(u16));
+ return 0;
+}
+
+int dvb_dmx_init(struct dvb_demux *dvbdemux)
+{
+ int i;
+ struct dmx_demux *dmx = &dvbdemux->dmx;
+
+ dvbdemux->users = 0;
+ dvbdemux->filter = vmalloc(dvbdemux->filternum * sizeof(struct dvb_demux_filter));
+
+ if (!dvbdemux->filter)
+ return -ENOMEM;
+
+ dvbdemux->feed = vmalloc(dvbdemux->feednum * sizeof(struct dvb_demux_feed));
+ if (!dvbdemux->feed) {
+ vfree(dvbdemux->filter);
+ return -ENOMEM;
+ }
+ for (i = 0; i < dvbdemux->filternum; i++) {
+ dvbdemux->filter[i].state = DMX_STATE_FREE;
+ dvbdemux->filter[i].index = i;
+ }
+ for (i = 0; i < dvbdemux->feednum; i++) {
+ dvbdemux->feed[i].state = DMX_STATE_FREE;
+ dvbdemux->feed[i].index = i;
+ }
+
+ INIT_LIST_HEAD(&dvbdemux->frontend_list);
+
+ for (i = 0; i < DMX_TS_PES_OTHER; i++) {
+ dvbdemux->pesfilter[i] = NULL;
+ dvbdemux->pids[i] = 0xffff;
+ }
+
+ INIT_LIST_HEAD(&dvbdemux->feed_list);
+
+ dvbdemux->playing = 0;
+ dvbdemux->recording = 0;
+ dvbdemux->tsbufp = 0;
+
+ if (!dvbdemux->check_crc32)
+ dvbdemux->check_crc32 = dvb_dmx_crc32;
+
+ if (!dvbdemux->memcopy)
+ dvbdemux->memcopy = dvb_dmx_memcopy;
+
+ dmx->frontend = NULL;
+ dmx->priv = dvbdemux;
+ dmx->open = dvbdmx_open;
+ dmx->close = dvbdmx_close;
+ dmx->write = dvbdmx_write;
+ dmx->allocate_ts_feed = dvbdmx_allocate_ts_feed;
+ dmx->release_ts_feed = dvbdmx_release_ts_feed;
+ dmx->allocate_section_feed = dvbdmx_allocate_section_feed;
+ dmx->release_section_feed = dvbdmx_release_section_feed;
+
+ dmx->add_frontend = dvbdmx_add_frontend;
+ dmx->remove_frontend = dvbdmx_remove_frontend;
+ dmx->get_frontends = dvbdmx_get_frontends;
+ dmx->connect_frontend = dvbdmx_connect_frontend;
+ dmx->disconnect_frontend = dvbdmx_disconnect_frontend;
+ dmx->get_pes_pids = dvbdmx_get_pes_pids;
+
+ mutex_init(&dvbdemux->mutex);
+ spin_lock_init(&dvbdemux->lock);
+
+ return 0;
+}
+
+EXPORT_SYMBOL(dvb_dmx_init);
+
+void dvb_dmx_release(struct dvb_demux *dvbdemux)
+{
+ vfree(dvbdemux->filter);
+ vfree(dvbdemux->feed);
+}
+
+EXPORT_SYMBOL(dvb_dmx_release);
diff --git a/v4l/kernel-2.6.tmp/dvb_demux.h b/v4l/kernel-2.6.tmp/dvb_demux.h
new file mode 100644
index 0000000..099b149
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb_demux.h
@@ -0,0 +1,147 @@
+/*
+ * dvb_demux.h: DVB kernel demux API
+ *
+ * Copyright (C) 2000-2001 Marcus Metzler & Ralph Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_DEMUX_H_
+#define _DVB_DEMUX_H_
+
+#include <linux/time.h>
+#include <linux/timer.h>
+#include <linux/spinlock.h>
+#include "compat.h"
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,15)
+#include <linux/mutex.h>
+#endif
+
+#include "demux.h"
+
+#define DMX_TYPE_TS 0
+#define DMX_TYPE_SEC 1
+#define DMX_TYPE_PES 2
+
+#define DMX_STATE_FREE 0
+#define DMX_STATE_ALLOCATED 1
+#define DMX_STATE_SET 2
+#define DMX_STATE_READY 3
+#define DMX_STATE_GO 4
+
+#define DVB_DEMUX_MASK_MAX 18
+
+struct dvb_demux_filter {
+ struct dmx_section_filter filter;
+ u8 maskandmode[DMX_MAX_FILTER_SIZE];
+ u8 maskandnotmode[DMX_MAX_FILTER_SIZE];
+ int doneq;
+
+ struct dvb_demux_filter *next;
+ struct dvb_demux_feed *feed;
+ int index;
+ int state;
+ int type;
+
+ u16 hw_handle;
+ struct timer_list timer;
+};
+
+#define DMX_FEED_ENTRY(pos) list_entry(pos, struct dvb_demux_feed, list_head)
+
+struct dvb_demux_feed {
+ union {
+ struct dmx_ts_feed ts;
+ struct dmx_section_feed sec;
+ } feed;
+
+ union {
+ dmx_ts_cb ts;
+ dmx_section_cb sec;
+ } cb;
+
+ struct dvb_demux *demux;
+ void *priv;
+ int type;
+ int state;
+ u16 pid;
+ u8 *buffer;
+ int buffer_size;
+
+ struct timespec timeout;
+ struct dvb_demux_filter *filter;
+
+ int ts_type;
+ enum dmx_ts_pes pes_type;
+
+ int cc;
+ int pusi_seen; /* prevents feeding of garbage from previous section */
+
+ u16 peslen;
+
+ struct list_head list_head;
+ unsigned int index; /* a unique index for each feed (can be used as hardware pid filter index) */
+};
+
+struct dvb_demux {
+ struct dmx_demux dmx;
+ void *priv;
+ int filternum;
+ int feednum;
+ int (*start_feed)(struct dvb_demux_feed *feed);
+ int (*stop_feed)(struct dvb_demux_feed *feed);
+ int (*write_to_decoder)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ u32 (*check_crc32)(struct dvb_demux_feed *feed,
+ const u8 *buf, size_t len);
+ void (*memcopy)(struct dvb_demux_feed *feed, u8 *dst,
+ const u8 *src, size_t len);
+
+ int users;
+#define MAX_DVB_DEMUX_USERS 10
+ struct dvb_demux_filter *filter;
+ struct dvb_demux_feed *feed;
+
+ struct list_head frontend_list;
+
+ struct dvb_demux_feed *pesfilter[DMX_TS_PES_OTHER];
+ u16 pids[DMX_TS_PES_OTHER];
+ int playing;
+ int recording;
+
+#define DMX_MAX_PID 0x2000
+ struct list_head feed_list;
+ u8 tsbuf[204];
+ int tsbufp;
+
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,15)
+ struct mutex mutex;
+#else
+ struct semaphore mutex;
+#endif
+ spinlock_t lock;
+};
+
+int dvb_dmx_init(struct dvb_demux *dvbdemux);
+void dvb_dmx_release(struct dvb_demux *dvbdemux);
+void dvb_dmx_swfilter_packets(struct dvb_demux *dvbdmx, const u8 *buf,
+ size_t count);
+void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count);
+void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf,
+ size_t count);
+
+#endif /* _DVB_DEMUX_H_ */
diff --git a/v4l/kernel-2.6.tmp/dvb_filter.c b/v4l/kernel-2.6.tmp/dvb_filter.c
new file mode 100644
index 0000000..b710391
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb_filter.c
@@ -0,0 +1,603 @@
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/string.h>
+#include "dvb_filter.h"
+
+#if 0 /* keep */
+static unsigned int bitrates[3][16] =
+{{0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,0},
+ {0,32,48,56,64,80,96,112,128,160,192,224,256,320,384,0},
+ {0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,0}};
+#endif
+
+static u32 freq[4] = {480, 441, 320, 0};
+
+static unsigned int ac3_bitrates[32] =
+ {32,40,48,56,64,80,96,112,128,160,192,224,256,320,384,448,512,576,640,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0};
+
+static u32 ac3_frames[3][32] =
+ {{64,80,96,112,128,160,192,224,256,320,384,448,512,640,768,896,1024,
+ 1152,1280,0,0,0,0,0,0,0,0,0,0,0,0,0},
+ {69,87,104,121,139,174,208,243,278,348,417,487,557,696,835,975,1114,
+ 1253,1393,0,0,0,0,0,0,0,0,0,0,0,0,0},
+ {96,120,144,168,192,240,288,336,384,480,576,672,768,960,1152,1344,
+ 1536,1728,1920,0,0,0,0,0,0,0,0,0,0,0,0,0}};
+
+
+
+#if 0 /* keep */
+static void setup_ts2pes(ipack *pa, ipack *pv, u16 *pida, u16 *pidv,
+ void (*pes_write)(u8 *buf, int count, void *data),
+ void *priv)
+{
+ dvb_filter_ipack_init(pa, IPACKS, pes_write);
+ dvb_filter_ipack_init(pv, IPACKS, pes_write);
+ pa->pid = pida;
+ pv->pid = pidv;
+ pa->data = priv;
+ pv->data = priv;
+}
+#endif
+
+#if 0 /* keep */
+static void ts_to_pes(ipack *p, u8 *buf) // don't need count (=188)
+{
+ u8 off = 0;
+
+ if (!buf || !p ){
+ printk("NULL POINTER IDIOT\n");
+ return;
+ }
+ if (buf[1]&PAY_START) {
+ if (p->plength == MMAX_PLENGTH-6 && p->found>6){
+ p->plength = p->found-6;
+ p->found = 0;
+ send_ipack(p);
+ dvb_filter_ipack_reset(p);
+ }
+ }
+ if (buf[3] & ADAPT_FIELD) { // adaptation field?
+ off = buf[4] + 1;
+ if (off+4 > 187) return;
+ }
+ dvb_filter_instant_repack(buf+4+off, TS_SIZE-4-off, p);
+}
+#endif
+
+#if 0 /* keep */
+/* needs 5 byte input, returns picture coding type*/
+static int read_picture_header(u8 *headr, struct mpg_picture *pic, int field, int pr)
+{
+ u8 pct;
+
+ if (pr) printk( "Pic header: ");
+ pic->temporal_reference[field] = (( headr[0] << 2 ) |
+ (headr[1] & 0x03) )& 0x03ff;
+ if (pr) printk( " temp ref: 0x%04x", pic->temporal_reference[field]);
+
+ pct = ( headr[1] >> 2 ) & 0x07;
+ pic->picture_coding_type[field] = pct;
+ if (pr) {
+ switch(pct){
+ case I_FRAME:
+ printk( " I-FRAME");
+ break;
+ case B_FRAME:
+ printk( " B-FRAME");
+ break;
+ case P_FRAME:
+ printk( " P-FRAME");
+ break;
+ }
+ }
+
+
+ pic->vinfo.vbv_delay = (( headr[1] >> 5 ) | ( headr[2] << 3) |
+ ( (headr[3] & 0x1F) << 11) ) & 0xffff;
+
+ if (pr) printk( " vbv delay: 0x%04x", pic->vinfo.vbv_delay);
+
+ pic->picture_header_parameter = ( headr[3] & 0xe0 ) |
+ ((headr[4] & 0x80) >> 3);
+
+ if ( pct == B_FRAME ){
+ pic->picture_header_parameter |= ( headr[4] >> 3 ) & 0x0f;
+ }
+ if (pr) printk( " pic head param: 0x%x",
+ pic->picture_header_parameter);
+
+ return pct;
+}
+#endif
+
+#if 0 /* keep */
+/* needs 4 byte input */
+static int read_gop_header(u8 *headr, struct mpg_picture *pic, int pr)
+{
+ if (pr) printk("GOP header: ");
+
+ pic->time_code = (( headr[0] << 17 ) | ( headr[1] << 9) |
+ ( headr[2] << 1 ) | (headr[3] &0x01)) & 0x1ffffff;
+
+ if (pr) printk(" time: %d:%d.%d ", (headr[0]>>2)& 0x1F,
+ ((headr[0]<<4)& 0x30)| ((headr[1]>>4)& 0x0F),
+ ((headr[1]<<3)& 0x38)| ((headr[2]>>5)& 0x0F));
+
+ if ( ( headr[3] & 0x40 ) != 0 ){
+ pic->closed_gop = 1;
+ } else {
+ pic->closed_gop = 0;
+ }
+ if (pr) printk("closed: %d", pic->closed_gop);
+
+ if ( ( headr[3] & 0x20 ) != 0 ){
+ pic->broken_link = 1;
+ } else {
+ pic->broken_link = 0;
+ }
+ if (pr) printk(" broken: %d\n", pic->broken_link);
+
+ return 0;
+}
+#endif
+
+#if 0 /* keep */
+/* needs 8 byte input */
+static int read_sequence_header(u8 *headr, struct dvb_video_info *vi, int pr)
+{
+ int sw;
+ int form = -1;
+
+ if (pr) printk("Reading sequence header\n");
+
+ vi->horizontal_size = ((headr[1] &0xF0) >> 4) | (headr[0] << 4);
+ vi->vertical_size = ((headr[1] &0x0F) << 8) | (headr[2]);
+
+ sw = (int)((headr[3]&0xF0) >> 4) ;
+
+ switch( sw ){
+ case 1:
+ if (pr)
+ printk("Videostream: ASPECT: 1:1");
+ vi->aspect_ratio = 100;
+ break;
+ case 2:
+ if (pr)
+ printk("Videostream: ASPECT: 4:3");
+ vi->aspect_ratio = 133;
+ break;
+ case 3:
+ if (pr)
+ printk("Videostream: ASPECT: 16:9");
+ vi->aspect_ratio = 177;
+ break;
+ case 4:
+ if (pr)
+ printk("Videostream: ASPECT: 2.21:1");
+ vi->aspect_ratio = 221;
+ break;
+
+ case 5 ... 15:
+ if (pr)
+ printk("Videostream: ASPECT: reserved");
+ vi->aspect_ratio = 0;
+ break;
+
+ default:
+ vi->aspect_ratio = 0;
+ return -1;
+ }
+
+ if (pr)
+ printk(" Size = %dx%d",vi->horizontal_size,vi->vertical_size);
+
+ sw = (int)(headr[3]&0x0F);
+
+ switch ( sw ) {
+ case 1:
+ if (pr)
+ printk(" FRate: 23.976 fps");
+ vi->framerate = 23976;
+ form = -1;
+ break;
+ case 2:
+ if (pr)
+ printk(" FRate: 24 fps");
+ vi->framerate = 24000;
+ form = -1;
+ break;
+ case 3:
+ if (pr)
+ printk(" FRate: 25 fps");
+ vi->framerate = 25000;
+ form = VIDEO_MODE_PAL;
+ break;
+ case 4:
+ if (pr)
+ printk(" FRate: 29.97 fps");
+ vi->framerate = 29970;
+ form = VIDEO_MODE_NTSC;
+ break;
+ case 5:
+ if (pr)
+ printk(" FRate: 30 fps");
+ vi->framerate = 30000;
+ form = VIDEO_MODE_NTSC;
+ break;
+ case 6:
+ if (pr)
+ printk(" FRate: 50 fps");
+ vi->framerate = 50000;
+ form = VIDEO_MODE_PAL;
+ break;
+ case 7:
+ if (pr)
+ printk(" FRate: 60 fps");
+ vi->framerate = 60000;
+ form = VIDEO_MODE_NTSC;
+ break;
+ }
+
+ vi->bit_rate = (headr[4] << 10) | (headr[5] << 2) | (headr[6] & 0x03);
+
+ vi->vbv_buffer_size
+ = (( headr[6] & 0xF8) >> 3 ) | (( headr[7] & 0x1F )<< 5);
+
+ if (pr){
+ printk(" BRate: %d Mbit/s",4*(vi->bit_rate)/10000);
+ printk(" vbvbuffer %d",16*1024*(vi->vbv_buffer_size));
+ printk("\n");
+ }
+
+ vi->video_format = form;
+
+ return 0;
+}
+#endif
+
+
+#if 0 /* keep */
+static int get_vinfo(u8 *mbuf, int count, struct dvb_video_info *vi, int pr)
+{
+ u8 *headr;
+ int found = 0;
+ int c = 0;
+
+ while (found < 4 && c+4 < count){
+ u8 *b;
+
+ b = mbuf+c;
+ if ( b[0] == 0x00 && b[1] == 0x00 && b[2] == 0x01
+ && b[3] == 0xb3) found = 4;
+ else {
+ c++;
+ }
+ }
+
+ if (! found) return -1;
+ c += 4;
+ if (c+12 >= count) return -1;
+ headr = mbuf+c;
+ if (read_sequence_header(headr, vi, pr) < 0) return -1;
+ vi->off = c-4;
+ return 0;
+}
+#endif
+
+
+#if 0 /* keep */
+static int get_ainfo(u8 *mbuf, int count, struct dvb_audio_info *ai, int pr)
+{
+ u8 *headr;
+ int found = 0;
+ int c = 0;
+ int fr = 0;
+
+ while (found < 2 && c < count){
+ u8 b[2];
+ memcpy( b, mbuf+c, 2);
+
+ if ( b[0] == 0xff && (b[1] & 0xf8) == 0xf8)
+ found = 2;
+ else {
+ c++;
+ }
+ }
+
+ if (!found) return -1;
+
+ if (c+3 >= count) return -1;
+ headr = mbuf+c;
+
+ ai->layer = (headr[1] & 0x06) >> 1;
+
+ if (pr)
+ printk("Audiostream: Layer: %d", 4-ai->layer);
+
+
+ ai->bit_rate = bitrates[(3-ai->layer)][(headr[2] >> 4 )]*1000;
+
+ if (pr){
+ if (ai->bit_rate == 0)
+ printk(" Bit rate: free");
+ else if (ai->bit_rate == 0xf)
+ printk(" BRate: reserved");
+ else
+ printk(" BRate: %d kb/s", ai->bit_rate/1000);
+ }
+
+ fr = (headr[2] & 0x0c ) >> 2;
+ ai->frequency = freq[fr]*100;
+ if (pr){
+ if (ai->frequency == 3)
+ printk(" Freq: reserved\n");
+ else
+ printk(" Freq: %d kHz\n",ai->frequency);
+
+ }
+ ai->off = c;
+ return 0;
+}
+#endif
+
+
+int dvb_filter_get_ac3info(u8 *mbuf, int count, struct dvb_audio_info *ai, int pr)
+{
+ u8 *headr;
+ int found = 0;
+ int c = 0;
+ u8 frame = 0;
+ int fr = 0;
+
+ while ( !found && c < count){
+ u8 *b = mbuf+c;
+
+ if ( b[0] == 0x0b && b[1] == 0x77 )
+ found = 1;
+ else {
+ c++;
+ }
+ }
+
+ if (!found) return -1;
+ if (pr)
+ printk("Audiostream: AC3");
+
+ ai->off = c;
+ if (c+5 >= count) return -1;
+
+ ai->layer = 0; // 0 for AC3
+ headr = mbuf+c+2;
+
+ frame = (headr[2]&0x3f);
+ ai->bit_rate = ac3_bitrates[frame >> 1]*1000;
+
+ if (pr)
+ printk(" BRate: %d kb/s", (int) ai->bit_rate/1000);
+
+ ai->frequency = (headr[2] & 0xc0 ) >> 6;
+ fr = (headr[2] & 0xc0 ) >> 6;
+ ai->frequency = freq[fr]*100;
+ if (pr) printk (" Freq: %d Hz\n", (int) ai->frequency);
+
+
+ ai->framesize = ac3_frames[fr][frame >> 1];
+ if ((frame & 1) && (fr == 1)) ai->framesize++;
+ ai->framesize = ai->framesize << 1;
+ if (pr) printk (" Framesize %d\n",(int) ai->framesize);
+
+
+ return 0;
+}
+EXPORT_SYMBOL(dvb_filter_get_ac3info);
+
+
+#if 0 /* keep */
+static u8 *skip_pes_header(u8 **bufp)
+{
+ u8 *inbuf = *bufp;
+ u8 *buf = inbuf;
+ u8 *pts = NULL;
+ int skip = 0;
+
+ static const int mpeg1_skip_table[16] = {
+ 1, 0xffff, 5, 10, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff
+ };
+
+
+ if ((inbuf[6] & 0xc0) == 0x80){ /* mpeg2 */
+ if (buf[7] & PTS_ONLY)
+ pts = buf+9;
+ else pts = NULL;
+ buf = inbuf + 9 + inbuf[8];
+ } else { /* mpeg1 */
+ for (buf = inbuf + 6; *buf == 0xff; buf++)
+ if (buf == inbuf + 6 + 16) {
+ break;
+ }
+ if ((*buf & 0xc0) == 0x40)
+ buf += 2;
+ skip = mpeg1_skip_table [*buf >> 4];
+ if (skip == 5 || skip == 10) pts = buf;
+ else pts = NULL;
+
+ buf += mpeg1_skip_table [*buf >> 4];
+ }
+
+ *bufp = buf;
+ return pts;
+}
+#endif
+
+#if 0 /* keep */
+static void initialize_quant_matrix( u32 *matrix )
+{
+ int i;
+
+ matrix[0] = 0x08101013;
+ matrix[1] = 0x10131616;
+ matrix[2] = 0x16161616;
+ matrix[3] = 0x1a181a1b;
+ matrix[4] = 0x1b1b1a1a;
+ matrix[5] = 0x1a1a1b1b;
+ matrix[6] = 0x1b1d1d1d;
+ matrix[7] = 0x2222221d;
+ matrix[8] = 0x1d1d1b1b;
+ matrix[9] = 0x1d1d2020;
+ matrix[10] = 0x22222526;
+ matrix[11] = 0x25232322;
+ matrix[12] = 0x23262628;
+ matrix[13] = 0x28283030;
+ matrix[14] = 0x2e2e3838;
+ matrix[15] = 0x3a454553;
+
+ for ( i = 16 ; i < 32 ; i++ )
+ matrix[i] = 0x10101010;
+}
+#endif
+
+#if 0 /* keep */
+static void initialize_mpg_picture(struct mpg_picture *pic)
+{
+ int i;
+
+ /* set MPEG1 */
+ pic->mpeg1_flag = 1;
+ pic->profile_and_level = 0x4A ; /* MP@LL */
+ pic->progressive_sequence = 1;
+ pic->low_delay = 0;
+
+ pic->sequence_display_extension_flag = 0;
+ for ( i = 0 ; i < 4 ; i++ ){
+ pic->frame_centre_horizontal_offset[i] = 0;
+ pic->frame_centre_vertical_offset[i] = 0;
+ }
+ pic->last_frame_centre_horizontal_offset = 0;
+ pic->last_frame_centre_vertical_offset = 0;
+
+ pic->picture_display_extension_flag[0] = 0;
+ pic->picture_display_extension_flag[1] = 0;
+ pic->sequence_header_flag = 0;
+ pic->gop_flag = 0;
+ pic->sequence_end_flag = 0;
+}
+#endif
+
+#if 0 /* keep */
+static void mpg_set_picture_parameter( int32_t field_type, struct mpg_picture *pic )
+{
+ int16_t last_h_offset;
+ int16_t last_v_offset;
+
+ int16_t *p_h_offset;
+ int16_t *p_v_offset;
+
+ if ( pic->mpeg1_flag ){
+ pic->picture_structure[field_type] = VIDEO_FRAME_PICTURE;
+ pic->top_field_first = 0;
+ pic->repeat_first_field = 0;
+ pic->progressive_frame = 1;
+ pic->picture_coding_parameter = 0x000010;
+ }
+
+ /* Reset flag */
+ pic->picture_display_extension_flag[field_type] = 0;
+
+ last_h_offset = pic->last_frame_centre_horizontal_offset;
+ last_v_offset = pic->last_frame_centre_vertical_offset;
+ if ( field_type == FIRST_FIELD ){
+ p_h_offset = pic->frame_centre_horizontal_offset;
+ p_v_offset = pic->frame_centre_vertical_offset;
+ *p_h_offset = last_h_offset;
+ *(p_h_offset + 1) = last_h_offset;
+ *(p_h_offset + 2) = last_h_offset;
+ *p_v_offset = last_v_offset;
+ *(p_v_offset + 1) = last_v_offset;
+ *(p_v_offset + 2) = last_v_offset;
+ } else {
+ pic->frame_centre_horizontal_offset[3] = last_h_offset;
+ pic->frame_centre_vertical_offset[3] = last_v_offset;
+ }
+}
+#endif
+
+#if 0 /* keep */
+static void init_mpg_picture( struct mpg_picture *pic, int chan, int32_t field_type)
+{
+ pic->picture_header = 0;
+ pic->sequence_header_data
+ = ( INIT_HORIZONTAL_SIZE << 20 )
+ | ( INIT_VERTICAL_SIZE << 8 )
+ | ( INIT_ASPECT_RATIO << 4 )
+ | ( INIT_FRAME_RATE );
+ pic->mpeg1_flag = 0;
+ pic->vinfo.horizontal_size
+ = INIT_DISP_HORIZONTAL_SIZE;
+ pic->vinfo.vertical_size
+ = INIT_DISP_VERTICAL_SIZE;
+ pic->picture_display_extension_flag[field_type]
+ = 0;
+ pic->pts_flag[field_type] = 0;
+
+ pic->sequence_gop_header = 0;
+ pic->picture_header = 0;
+ pic->sequence_header_flag = 0;
+ pic->gop_flag = 0;
+ pic->sequence_end_flag = 0;
+ pic->sequence_display_extension_flag = 0;
+ pic->last_frame_centre_horizontal_offset = 0;
+ pic->last_frame_centre_vertical_offset = 0;
+ pic->channel = chan;
+}
+#endif
+
+void dvb_filter_pes2ts_init(struct dvb_filter_pes2ts *p2ts, unsigned short pid,
+ dvb_filter_pes2ts_cb_t *cb, void *priv)
+{
+ unsigned char *buf=p2ts->buf;
+
+ buf[0]=0x47;
+ buf[1]=(pid>>8);
+ buf[2]=pid&0xff;
+ p2ts->cc=0;
+ p2ts->cb=cb;
+ p2ts->priv=priv;
+}
+EXPORT_SYMBOL(dvb_filter_pes2ts_init);
+
+int dvb_filter_pes2ts(struct dvb_filter_pes2ts *p2ts, unsigned char *pes,
+ int len, int payload_start)
+{
+ unsigned char *buf=p2ts->buf;
+ int ret=0, rest;
+
+ //len=6+((pes[4]<<8)|pes[5]);
+
+ if (payload_start)
+ buf[1]|=0x40;
+ else
+ buf[1]&=~0x40;
+ while (len>=184) {
+ buf[3]=0x10|((p2ts->cc++)&0x0f);
+ memcpy(buf+4, pes, 184);
+ if ((ret=p2ts->cb(p2ts->priv, buf)))
+ return ret;
+ len-=184; pes+=184;
+ buf[1]&=~0x40;
+ }
+ if (!len)
+ return 0;
+ buf[3]=0x30|((p2ts->cc++)&0x0f);
+ rest=183-len;
+ if (rest) {
+ buf[5]=0x00;
+ if (rest-1)
+ memset(buf+6, 0xff, rest-1);
+ }
+ buf[4]=rest;
+ memcpy(buf+5+rest, pes, len);
+ return p2ts->cb(p2ts->priv, buf);
+}
+EXPORT_SYMBOL(dvb_filter_pes2ts);
diff --git a/v4l/kernel-2.6.tmp/dvb_filter.h b/v4l/kernel-2.6.tmp/dvb_filter.h
new file mode 100644
index 0000000..375e3be
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb_filter.h
@@ -0,0 +1,246 @@
+/*
+ * dvb_filter.h
+ *
+ * Copyright (C) 2003 Convergence GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _DVB_FILTER_H_
+#define _DVB_FILTER_H_
+
+#include <linux/slab.h>
+
+#include "demux.h"
+
+typedef int (dvb_filter_pes2ts_cb_t) (void *, unsigned char *);
+
+struct dvb_filter_pes2ts {
+ unsigned char buf[188];
+ unsigned char cc;
+ dvb_filter_pes2ts_cb_t *cb;
+ void *priv;
+};
+
+void dvb_filter_pes2ts_init(struct dvb_filter_pes2ts *p2ts, unsigned short pid,
+ dvb_filter_pes2ts_cb_t *cb, void *priv);
+
+int dvb_filter_pes2ts(struct dvb_filter_pes2ts *p2ts, unsigned char *pes,
+ int len, int payload_start);
+
+
+#define PROG_STREAM_MAP 0xBC
+#define PRIVATE_STREAM1 0xBD
+#define PADDING_STREAM 0xBE
+#define PRIVATE_STREAM2 0xBF
+#define AUDIO_STREAM_S 0xC0
+#define AUDIO_STREAM_E 0xDF
+#define VIDEO_STREAM_S 0xE0
+#define VIDEO_STREAM_E 0xEF
+#define ECM_STREAM 0xF0
+#define EMM_STREAM 0xF1
+#define DSM_CC_STREAM 0xF2
+#define ISO13522_STREAM 0xF3
+#define PROG_STREAM_DIR 0xFF
+
+#define DVB_PICTURE_START 0x00
+#define DVB_USER_START 0xb2
+#define DVB_SEQUENCE_HEADER 0xb3
+#define DVB_SEQUENCE_ERROR 0xb4
+#define DVB_EXTENSION_START 0xb5
+#define DVB_SEQUENCE_END 0xb7
+#define DVB_GOP_START 0xb8
+#define DVB_EXCEPT_SLICE 0xb0
+
+#define SEQUENCE_EXTENSION 0x01
+#define SEQUENCE_DISPLAY_EXTENSION 0x02
+#define PICTURE_CODING_EXTENSION 0x08
+#define QUANT_MATRIX_EXTENSION 0x03
+#define PICTURE_DISPLAY_EXTENSION 0x07
+
+#define I_FRAME 0x01
+#define B_FRAME 0x02
+#define P_FRAME 0x03
+
+/* Initialize sequence_data */
+#define INIT_HORIZONTAL_SIZE 720
+#define INIT_VERTICAL_SIZE 576
+#define INIT_ASPECT_RATIO 0x02
+#define INIT_FRAME_RATE 0x03
+#define INIT_DISP_HORIZONTAL_SIZE 540
+#define INIT_DISP_VERTICAL_SIZE 576
+
+
+//flags2
+#define PTS_DTS_FLAGS 0xC0
+#define ESCR_FLAG 0x20
+#define ES_RATE_FLAG 0x10
+#define DSM_TRICK_FLAG 0x08
+#define ADD_CPY_FLAG 0x04
+#define PES_CRC_FLAG 0x02
+#define PES_EXT_FLAG 0x01
+
+//pts_dts flags
+#define PTS_ONLY 0x80
+#define PTS_DTS 0xC0
+
+#define TS_SIZE 188
+#define TRANS_ERROR 0x80
+#define PAY_START 0x40
+#define TRANS_PRIO 0x20
+#define PID_MASK_HI 0x1F
+//flags
+#define TRANS_SCRMBL1 0x80
+#define TRANS_SCRMBL2 0x40
+#define ADAPT_FIELD 0x20
+#define PAYLOAD 0x10
+#define COUNT_MASK 0x0F
+
+// adaptation flags
+#define DISCON_IND 0x80
+#define RAND_ACC_IND 0x40
+#define ES_PRI_IND 0x20
+#define PCR_FLAG 0x10
+#define OPCR_FLAG 0x08
+#define SPLICE_FLAG 0x04
+#define TRANS_PRIV 0x02
+#define ADAP_EXT_FLAG 0x01
+
+// adaptation extension flags
+#define LTW_FLAG 0x80
+#define PIECE_RATE 0x40
+#define SEAM_SPLICE 0x20
+
+
+#define MAX_PLENGTH 0xFFFF
+#define MMAX_PLENGTH (256*MAX_PLENGTH)
+
+#ifndef IPACKS
+#define IPACKS 2048
+#endif
+
+struct ipack {
+ int size;
+ int found;
+ u8 *buf;
+ u8 cid;
+ u32 plength;
+ u8 plen[2];
+ u8 flag1;
+ u8 flag2;
+ u8 hlength;
+ u8 pts[5];
+ u16 *pid;
+ int mpeg;
+ u8 check;
+ int which;
+ int done;
+ void *data;
+ void (*func)(u8 *buf, int size, void *priv);
+ int count;
+ int repack_subids;
+};
+
+struct dvb_video_info {
+ u32 horizontal_size;
+ u32 vertical_size;
+ u32 aspect_ratio;
+ u32 framerate;
+ u32 video_format;
+ u32 bit_rate;
+ u32 comp_bit_rate;
+ u32 vbv_buffer_size;
+ s16 vbv_delay;
+ u32 CSPF;
+ u32 off;
+};
+
+#define OFF_SIZE 4
+#define FIRST_FIELD 0
+#define SECOND_FIELD 1
+#define VIDEO_FRAME_PICTURE 0x03
+
+struct mpg_picture {
+ int channel;
+ struct dvb_video_info vinfo;
+ u32 *sequence_gop_header;
+ u32 *picture_header;
+ s32 time_code;
+ int low_delay;
+ int closed_gop;
+ int broken_link;
+ int sequence_header_flag;
+ int gop_flag;
+ int sequence_end_flag;
+
+ u8 profile_and_level;
+ s32 picture_coding_parameter;
+ u32 matrix[32];
+ s8 matrix_change_flag;
+
+ u8 picture_header_parameter;
+ /* bit 0 - 2: bwd f code
+ bit 3 : fpb vector
+ bit 4 - 6: fwd f code
+ bit 7 : fpf vector */
+
+ int mpeg1_flag;
+ int progressive_sequence;
+ int sequence_display_extension_flag;
+ u32 sequence_header_data;
+ s16 last_frame_centre_horizontal_offset;
+ s16 last_frame_centre_vertical_offset;
+
+ u32 pts[2]; /* [0] 1st field, [1] 2nd field */
+ int top_field_first;
+ int repeat_first_field;
+ int progressive_frame;
+ int bank;
+ int forward_bank;
+ int backward_bank;
+ int compress;
+ s16 frame_centre_horizontal_offset[OFF_SIZE];
+ /* [0-2] 1st field, [3] 2nd field */
+ s16 frame_centre_vertical_offset[OFF_SIZE];
+ /* [0-2] 1st field, [3] 2nd field */
+ s16 temporal_reference[2];
+ /* [0] 1st field, [1] 2nd field */
+
+ s8 picture_coding_type[2];
+ /* [0] 1st field, [1] 2nd field */
+ s8 picture_structure[2];
+ /* [0] 1st field, [1] 2nd field */
+ s8 picture_display_extension_flag[2];
+ /* [0] 1st field, [1] 2nd field */
+ /* picture_display_extenion() 0:no 1:exit*/
+ s8 pts_flag[2];
+ /* [0] 1st field, [1] 2nd field */
+};
+
+struct dvb_audio_info {
+ int layer;
+ u32 bit_rate;
+ u32 frequency;
+ u32 mode;
+ u32 mode_extension ;
+ u32 emphasis;
+ u32 framesize;
+ u32 off;
+};
+
+int dvb_filter_get_ac3info(u8 *mbuf, int count, struct dvb_audio_info *ai, int pr);
+
+
+#endif
diff --git a/v4l/kernel-2.6.tmp/dvb_frontend.c b/v4l/kernel-2.6.tmp/dvb_frontend.c
new file mode 100644
index 0000000..bbefb9c
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb_frontend.c
@@ -0,0 +1,1241 @@
+/*
+ * dvb_frontend.c: DVB frontend tuning interface/thread
+ *
+ *
+ * Copyright (C) 1999-2001 Ralph Metzler
+ * Marcus Metzler
+ * Holger Waechtler
+ * for convergence integrated media GmbH
+ *
+ * Copyright (C) 2004 Andrew de Quincey (tuning thread cleanup)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
+ */
+
+#include <linux/version.h>
+#include <linux/string.h>
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/wait.h>
+#include <linux/slab.h>
+#include <linux/poll.h>
+#include <linux/module.h>
+#include <linux/list.h>
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+#include <linux/suspend.h>
+#else
+#include <linux/freezer.h>
+#endif
+#include <linux/jiffies.h>
+#include <linux/kthread.h>
+#include <asm/processor.h>
+
+#include "dvb_frontend.h"
+#include "dvbdev.h"
+#include "compat.h"
+
+static int dvb_frontend_debug;
+static int dvb_shutdown_timeout;
+static int dvb_force_auto_inversion;
+static int dvb_override_tune_delay;
+static int dvb_powerdown_on_sleep = 1;
+
+
+module_param_named(frontend_debug, dvb_frontend_debug, int, 0644);
+MODULE_PARM_DESC(frontend_debug, "Turn on/off frontend core debugging (default:off).");
+module_param(dvb_shutdown_timeout, int, 0644);
+MODULE_PARM_DESC(dvb_shutdown_timeout, "wait <shutdown_timeout> seconds after close() before suspending hardware");
+module_param(dvb_force_auto_inversion, int, 0644);
+MODULE_PARM_DESC(dvb_force_auto_inversion, "0: normal (default), 1: INVERSION_AUTO forced always");
+module_param(dvb_override_tune_delay, int, 0644);
+MODULE_PARM_DESC(dvb_override_tune_delay, "0: normal (default), >0 => delay in milliseconds to wait for lock after a tune attempt");
+module_param(dvb_powerdown_on_sleep, int, 0644);
+MODULE_PARM_DESC(dvb_powerdown_on_sleep, "0: do not power down, 1: turn LNB voltage off on sleep (default)");
+
+#define dprintk if (dvb_frontend_debug) printk
+
+#define FESTATE_IDLE 1
+#define FESTATE_RETUNE 2
+#define FESTATE_TUNING_FAST 4
+#define FESTATE_TUNING_SLOW 8
+#define FESTATE_TUNED 16
+#define FESTATE_ZIGZAG_FAST 32
+#define FESTATE_ZIGZAG_SLOW 64
+#define FESTATE_DISEQC 128
+#define FESTATE_WAITFORLOCK (FESTATE_TUNING_FAST | FESTATE_TUNING_SLOW | FESTATE_ZIGZAG_FAST | FESTATE_ZIGZAG_SLOW | FESTATE_DISEQC)
+#define FESTATE_SEARCHING_FAST (FESTATE_TUNING_FAST | FESTATE_ZIGZAG_FAST)
+#define FESTATE_SEARCHING_SLOW (FESTATE_TUNING_SLOW | FESTATE_ZIGZAG_SLOW)
+#define FESTATE_LOSTLOCK (FESTATE_ZIGZAG_FAST | FESTATE_ZIGZAG_SLOW)
+
+#define FE_ALGO_HW 1
+/*
+ * FESTATE_IDLE. No tuning parameters have been supplied and the loop is idling.
+ * FESTATE_RETUNE. Parameters have been supplied, but we have not yet performed the first tune.
+ * FESTATE_TUNING_FAST. Tuning parameters have been supplied and fast zigzag scan is in progress.
+ * FESTATE_TUNING_SLOW. Tuning parameters have been supplied. Fast zigzag failed, so we're trying again, but slower.
+ * FESTATE_TUNED. The frontend has successfully locked on.
+ * FESTATE_ZIGZAG_FAST. The lock has been lost, and a fast zigzag has been initiated to try and regain it.
+ * FESTATE_ZIGZAG_SLOW. The lock has been lost. Fast zigzag has been failed, so we're trying again, but slower.
+ * FESTATE_DISEQC. A DISEQC command has just been issued.
+ * FESTATE_WAITFORLOCK. When we're waiting for a lock.
+ * FESTATE_SEARCHING_FAST. When we're searching for a signal using a fast zigzag scan.
+ * FESTATE_SEARCHING_SLOW. When we're searching for a signal using a slow zigzag scan.
+ * FESTATE_LOSTLOCK. When the lock has been lost, and we're searching it again.
+ */
+
+static DEFINE_MUTEX(frontend_mutex);
+
+struct dvb_frontend_private {
+
+ /* thread/frontend values */
+ struct dvb_device *dvbdev;
+ struct dvb_frontend_parameters parameters;
+ struct dvb_fe_events events;
+ struct semaphore sem;
+ struct list_head list_head;
+ wait_queue_head_t wait_queue;
+ struct task_struct *thread;
+ unsigned long release_jiffies;
+ unsigned int exit;
+ unsigned int wakeup;
+ fe_status_t status;
+ unsigned long tune_mode_flags;
+ unsigned int delay;
+ unsigned int reinitialise;
+ int tone;
+ int voltage;
+
+ /* swzigzag values */
+ unsigned int state;
+ unsigned int bending;
+ int lnb_drift;
+ unsigned int inversion;
+ unsigned int auto_step;
+ unsigned int auto_sub_step;
+ unsigned int started_auto_step;
+ unsigned int min_delay;
+ unsigned int max_drift;
+ unsigned int step_size;
+ int quality;
+ unsigned int check_wrapped;
+};
+
+static void dvb_frontend_wakeup(struct dvb_frontend *fe);
+
+static void dvb_frontend_add_event(struct dvb_frontend *fe, fe_status_t status)
+{
+ struct dvb_frontend_private *fepriv = fe->frontend_priv;
+ struct dvb_fe_events *events = &fepriv->events;
+ struct dvb_frontend_event *e;
+ int wp;
+
+ dprintk ("%s\n", __FUNCTION__);
+
+ if (mutex_lock_interruptible (&events->mtx))
+ return;
+
+ wp = (events->eventw + 1) % MAX_EVENT;
+
+ if (wp == events->eventr) {
+ events->overflow = 1;
+ events->eventr = (events->eventr + 1) % MAX_EVENT;
+ }
+
+ e = &events->events[events->eventw];
+
+ memcpy (&e->parameters, &fepriv->parameters,
+ sizeof (struct dvb_frontend_parameters));
+
+ if (status & FE_HAS_LOCK)
+ if (fe->ops.get_frontend)
+ fe->ops.get_frontend(fe, &e->parameters);
+
+ events->eventw = wp;
+
+ mutex_unlock(&events->mtx);
+
+ e->status = status;
+
+ wake_up_interruptible (&events->wait_queue);
+}
+
+static int dvb_frontend_get_event(struct dvb_frontend *fe,
+ struct dvb_frontend_event *event, int flags)
+{
+ struct dvb_frontend_private *fepriv = fe->frontend_priv;
+ struct dvb_fe_events *events = &fepriv->events;
+
+ dprintk ("%s\n", __FUNCTION__);
+
+ if (events->overflow) {
+ events->overflow = 0;
+ return -EOVERFLOW;
+ }
+
+ if (events->eventw == events->eventr) {
+ int ret;
+
+ if (flags & O_NONBLOCK)
+ return -EWOULDBLOCK;
+
+ up(&fepriv->sem);
+
+ ret = wait_event_interruptible (events->wait_queue,
+ events->eventw != events->eventr);
+
+ if (down_interruptible (&fepriv->sem))
+ return -ERESTARTSYS;
+
+ if (ret < 0)
+ return ret;
+ }
+
+ if (mutex_lock_interruptible (&events->mtx))
+ return -ERESTARTSYS;
+
+ memcpy (event, &events->events[events->eventr],
+ sizeof(struct dvb_frontend_event));
+
+ events->eventr = (events->eventr + 1) % MAX_EVENT;
+
+ mutex_unlock(&events->mtx);
+
+ return 0;
+}
+
+static void dvb_frontend_init(struct dvb_frontend *fe)
+{
+ dprintk ("DVB: initialising frontend %i (%s)...\n",
+ fe->dvb->num,
+ fe->ops.info.name);
+
+ if (fe->ops.init)
+ fe->ops.init(fe);
+ if (fe->ops.tuner_ops.init) {
+ fe->ops.tuner_ops.init(fe);
+ if (fe->ops.i2c_gate_ctrl)
+ fe->ops.i2c_gate_ctrl(fe, 0);
+ }
+}
+
+void dvb_frontend_reinitialise(struct dvb_frontend *fe)
+{
+ struct dvb_frontend_private *fepriv = fe->frontend_priv;
+
+ fepriv->reinitialise = 1;
+ dvb_frontend_wakeup(fe);
+}
+EXPORT_SYMBOL(dvb_frontend_reinitialise);
+
+static void dvb_frontend_swzigzag_update_delay(struct dvb_frontend_private *fepriv, int locked)
+{
+ int q2;
+
+ dprintk ("%s\n", __FUNCTION__);
+
+ if (locked)
+ (fepriv->quality) = (fepriv->quality * 220 + 36*256) / 256;
+ else
+ (fepriv->quality) = (fepriv->quality * 220 + 0) / 256;
+
+ q2 = fepriv->quality - 128;
+ q2 *= q2;
+
+ fepriv->delay = fepriv->min_delay + q2 * HZ / (128*128);
+}
+
+/**
+ * Performs automatic twiddling of frontend parameters.
+ *
+ * @param fe The frontend concerned.
+ * @param check_wrapped Checks if an iteration has completed. DO NOT SET ON THE FIRST ATTEMPT
+ * @returns Number of complete iterations that have been performed.
+ */
+static int dvb_frontend_swzigzag_autotune(struct dvb_frontend *fe, int check_wrapped)
+{
+ int autoinversion;
+ int ready = 0;
+ struct dvb_frontend_private *fepriv = fe->frontend_priv;
+ int original_inversion = fepriv->parameters.inversion;
+ u32 original_frequency = fepriv->parameters.frequency;
+
+ /* are we using autoinversion? */
+ autoinversion = ((!(fe->ops.info.caps & FE_CAN_INVERSION_AUTO)) &&
+ (fepriv->parameters.inversion == INVERSION_AUTO));
+
+ /* setup parameters correctly */
+ while(!ready) {
+ /* calculate the lnb_drift */
+ fepriv->lnb_drift = fepriv->auto_step * fepriv->step_size;
+
+ /* wrap the auto_step if we've exceeded the maximum drift */
+ if (fepriv->lnb_drift > fepriv->max_drift) {
+ fepriv->auto_step = 0;
+ fepriv->auto_sub_step = 0;
+ fepriv->lnb_drift = 0;
+ }
+
+ /* perform inversion and +/- zigzag */
+ switch(fepriv->auto_sub_step) {
+ case 0:
+ /* try with the current inversion and current drift setting */
+ ready = 1;
+ break;
+
+ case 1:
+ if (!autoinversion) break;
+
+ fepriv->inversion = (fepriv->inversion == INVERSION_OFF) ? INVERSION_ON : INVERSION_OFF;
+ ready = 1;
+ break;
+
+ case 2:
+ if (fepriv->lnb_drift == 0) break;
+
+ fepriv->lnb_drift = -fepriv->lnb_drift;
+ ready = 1;
+ break;
+
+ case 3:
+ if (fepriv->lnb_drift == 0) break;
+ if (!autoinversion) break;
+
+ fepriv->inversion = (fepriv->inversion == INVERSION_OFF) ? INVERSION_ON : INVERSION_OFF;
+ fepriv->lnb_drift = -fepriv->lnb_drift;
+ ready = 1;
+ break;
+
+ default:
+ fepriv->auto_step++;
+ fepriv->auto_sub_step = -1; /* it'll be incremented to 0 in a moment */
+ break;
+ }
+
+ if (!ready) fepriv->auto_sub_step++;
+ }
+
+ /* if this attempt would hit where we started, indicate a complete
+ * iteration has occurred */
+ if ((fepriv->auto_step == fepriv->started_auto_step) &&
+ (fepriv->auto_sub_step == 0) && check_wrapped) {
+ return 1;
+ }
+
+ dprintk("%s: drift:%i inversion:%i auto_step:%i "
+ "auto_sub_step:%i started_auto_step:%i\n",
+ __FUNCTION__, fepriv->lnb_drift, fepriv->inversion,
+ fepriv->auto_step, fepriv->auto_sub_step, fepriv->started_auto_step);
+
+ /* set the frontend itself */
+ fepriv->parameters.frequency += fepriv->lnb_drift;
+ if (autoinversion)
+ fepriv->parameters.inversion = fepriv->inversion;
+ if (fe->ops.set_frontend)
+ fe->ops.set_frontend(fe, &fepriv->parameters);
+
+ fepriv->parameters.frequency = original_frequency;
+ fepriv->parameters.inversion = original_inversion;
+
+ fepriv->auto_sub_step++;
+ return 0;
+}
+
+static void dvb_frontend_swzigzag(struct dvb_frontend *fe)
+{
+ fe_status_t s = 0;
+ struct dvb_frontend_private *fepriv = fe->frontend_priv;
+
+ /* if we've got no parameters, just keep idling */
+ if (fepriv->state & FESTATE_IDLE) {
+ fepriv->delay = 3*HZ;
+ fepriv->quality = 0;
+ return;
+ }
+
+ /* in SCAN mode, we just set the frontend when asked and leave it alone */
+ if (fepriv->tune_mode_flags & FE_TUNE_MODE_ONESHOT) {
+ if (fepriv->state & FESTATE_RETUNE) {
+ if (fe->ops.set_frontend)
+ fe->ops.set_frontend(fe, &fepriv->parameters);
+ fepriv->state = FESTATE_TUNED;
+ }
+ fepriv->delay = 3*HZ;
+ fepriv->quality = 0;
+ return;
+ }
+
+ /* get the frontend status */
+ if (fepriv->state & FESTATE_RETUNE) {
+ s = 0;
+ } else {
+ if (fe->ops.read_status)
+ fe->ops.read_status(fe, &s);
+ if (s != fepriv->status) {
+ dvb_frontend_add_event(fe, s);
+ fepriv->status = s;
+ }
+ }
+
+ /* if we're not tuned, and we have a lock, move to the TUNED state */
+ if ((fepriv->state & FESTATE_WAITFORLOCK) && (s & FE_HAS_LOCK)) {
+ dvb_frontend_swzigzag_update_delay(fepriv, s & FE_HAS_LOCK);
+ fepriv->state = FESTATE_TUNED;
+
+ /* if we're tuned, then we have determined the correct inversion */
+ if ((!(fe->ops.info.caps & FE_CAN_INVERSION_AUTO)) &&
+ (fepriv->parameters.inversion == INVERSION_AUTO)) {
+ fepriv->parameters.inversion = fepriv->inversion;
+ }
+ return;
+ }
+
+ /* if we are tuned already, check we're still locked */
+ if (fepriv->state & FESTATE_TUNED) {
+ dvb_frontend_swzigzag_update_delay(fepriv, s & FE_HAS_LOCK);
+
+ /* we're tuned, and the lock is still good... */
+ if (s & FE_HAS_LOCK) {
+ return;
+ } else { /* if we _WERE_ tuned, but now don't have a lock */
+ fepriv->state = FESTATE_ZIGZAG_FAST;
+ fepriv->started_auto_step = fepriv->auto_step;
+ fepriv->check_wrapped = 0;
+ }
+ }
+
+ /* don't actually do anything if we're in the LOSTLOCK state,
+ * the frontend is set to FE_CAN_RECOVER, and the max_drift is 0 */
+ if ((fepriv->state & FESTATE_LOSTLOCK) &&
+ (fe->ops.info.caps & FE_CAN_RECOVER) && (fepriv->max_drift == 0)) {
+ dvb_frontend_swzigzag_update_delay(fepriv, s & FE_HAS_LOCK);
+ return;
+ }
+
+ /* don't do anything if we're in the DISEQC state, since this
+ * might be someone with a motorized dish controlled by DISEQC.
+ * If its actually a re-tune, there will be a SET_FRONTEND soon enough. */
+ if (fepriv->state & FESTATE_DISEQC) {
+ dvb_frontend_swzigzag_update_delay(fepriv, s & FE_HAS_LOCK);
+ return;
+ }
+
+ /* if we're in the RETUNE state, set everything up for a brand
+ * new scan, keeping the current inversion setting, as the next
+ * tune is _very_ likely to require the same */
+ if (fepriv->state & FESTATE_RETUNE) {
+ fepriv->lnb_drift = 0;
+ fepriv->auto_step = 0;
+ fepriv->auto_sub_step = 0;
+ fepriv->started_auto_step = 0;
+ fepriv->check_wrapped = 0;
+ }
+
+ /* fast zigzag. */
+ if ((fepriv->state & FESTATE_SEARCHING_FAST) || (fepriv->state & FESTATE_RETUNE)) {
+ fepriv->delay = fepriv->min_delay;
+
+ /* peform a tune */
+ if (dvb_frontend_swzigzag_autotune(fe, fepriv->check_wrapped)) {
+ /* OK, if we've run out of trials at the fast speed.
+ * Drop back to slow for the _next_ attempt */
+ fepriv->state = FESTATE_SEARCHING_SLOW;
+ fepriv->started_auto_step = fepriv->auto_step;
+ return;
+ }
+ fepriv->check_wrapped = 1;
+
+ /* if we've just retuned, enter the ZIGZAG_FAST state.
+ * This ensures we cannot return from an
+ * FE_SET_FRONTEND ioctl before the first frontend tune
+ * occurs */
+ if (fepriv->state & FESTATE_RETUNE) {
+ fepriv->state = FESTATE_TUNING_FAST;
+ }
+ }
+
+ /* slow zigzag */
+ if (fepriv->state & FESTATE_SEARCHING_SLOW) {
+ dvb_frontend_swzigzag_update_delay(fepriv, s & FE_HAS_LOCK);
+
+ /* Note: don't bother checking for wrapping; we stay in this
+ * state until we get a lock */
+ dvb_frontend_swzigzag_autotune(fe, 0);
+ }
+}
+
+static int dvb_frontend_is_exiting(struct dvb_frontend *fe)
+{
+ struct dvb_frontend_private *fepriv = fe->frontend_priv;
+
+ if (fepriv->exit)
+ return 1;
+
+ if (fepriv->dvbdev->writers == 1)
+ if (time_after(jiffies, fepriv->release_jiffies +
+ dvb_shutdown_timeout * HZ))
+ return 1;
+
+ return 0;
+}
+
+static int dvb_frontend_should_wakeup(struct dvb_frontend *fe)
+{
+ struct dvb_frontend_private *fepriv = fe->frontend_priv;
+
+ if (fepriv->wakeup) {
+ fepriv->wakeup = 0;
+ return 1;
+ }
+ return dvb_frontend_is_exiting(fe);
+}
+
+static void dvb_frontend_wakeup(struct dvb_frontend *fe)
+{
+ struct dvb_frontend_private *fepriv = fe->frontend_priv;
+
+ fepriv->wakeup = 1;
+ wake_up_interruptible(&fepriv->wait_queue);
+}
+
+static int dvb_frontend_thread(void *data)
+{
+ struct dvb_frontend *fe = data;
+ struct dvb_frontend_private *fepriv = fe->frontend_priv;
+ unsigned long timeout;
+ fe_status_t s;
+ struct dvb_frontend_parameters *params;
+
+ dprintk("%s\n", __FUNCTION__);
+
+ fepriv->check_wrapped = 0;
+ fepriv->quality = 0;
+ fepriv->delay = 3*HZ;
+ fepriv->status = 0;
+ fepriv->wakeup = 0;
+ fepriv->reinitialise = 0;
+
+ dvb_frontend_init(fe);
+
+ set_freezable();
+ while (1) {
+ up(&fepriv->sem); /* is locked when we enter the thread... */
+restart:
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
+ timeout = wait_event_interruptible_timeout(fepriv->wait_queue,
+ dvb_frontend_should_wakeup(fe) || kthread_should_stop(),
+ fepriv->delay);
+#else
+ timeout = wait_event_interruptible_timeout(fepriv->wait_queue,
+ dvb_frontend_should_wakeup(fe) || kthread_should_stop()
+ || freezing(current),
+ fepriv->delay);
+#endif
+
+ if (kthread_should_stop() || dvb_frontend_is_exiting(fe)) {
+ /* got signal or quitting */
+ break;
+ }
+
+ if (try_to_freeze())
+ goto restart;
+
+ if (down_interruptible(&fepriv->sem))
+ break;
+
+ if (fepriv->reinitialise) {
+ dvb_frontend_init(fe);
+ if (fepriv->tone != -1) {
+ fe->ops.set_tone(fe, fepriv->tone);
+ }
+ if (fepriv->voltage != -1) {
+ fe->ops.set_voltage(fe, fepriv->voltage);
+ }
+ fepriv->reinitialise = 0;
+ }
+
+ /* do an iteration of the tuning loop */
+ if (fe->ops.get_frontend_algo) {
+ if (fe->ops.get_frontend_algo(fe) == FE_ALGO_HW) {
+ /* have we been asked to retune? */
+ params = NULL;
+ if (fepriv->state & FESTATE_RETUNE) {
+ params = &fepriv->parameters;
+ fepriv->state = FESTATE_TUNED;
+ }
+
+ fe->ops.tune(fe, params, fepriv->tune_mode_flags, &fepriv->delay, &s);
+ if (s != fepriv->status) {
+ dvb_frontend_add_event(fe, s);
+ fepriv->status = s;
+ }
+ } else
+ dvb_frontend_swzigzag(fe);
+ } else
+ dvb_frontend_swzigzag(fe);
+ }
+
+ if (dvb_powerdown_on_sleep) {
+ if (fe->ops.set_voltage)
+ fe->ops.set_voltage(fe, SEC_VOLTAGE_OFF);
+ if (fe->ops.tuner_ops.sleep) {
+ fe->ops.tuner_ops.sleep(fe);
+ if (fe->ops.i2c_gate_ctrl)
+ fe->ops.i2c_gate_ctrl(fe, 0);
+ }
+ if (fe->ops.sleep)
+ fe->ops.sleep(fe);
+ }
+
+ fepriv->thread = NULL;
+ mb();
+
+ dvb_frontend_wakeup(fe);
+ return 0;
+}
+
+static void dvb_frontend_stop(struct dvb_frontend *fe)
+{
+ struct dvb_frontend_private *fepriv = fe->frontend_priv;
+
+ dprintk ("%s\n", __FUNCTION__);
+
+ fepriv->exit = 1;
+ mb();
+
+ if (!fepriv->thread)
+ return;
+
+ kthread_stop(fepriv->thread);
+
+ init_MUTEX (&fepriv->sem);
+ fepriv->state = FESTATE_IDLE;
+
+ /* paranoia check in case a signal arrived */
+ if (fepriv->thread)
+ printk("dvb_frontend_stop: warning: thread %p won't exit\n",
+ fepriv->thread);
+}
+
+s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime)
+{
+ return ((curtime.tv_usec < lasttime.tv_usec) ?
+ 1000000 - lasttime.tv_usec + curtime.tv_usec :
+ curtime.tv_usec - lasttime.tv_usec);
+}
+EXPORT_SYMBOL(timeval_usec_diff);
+
+static inline void timeval_usec_add(struct timeval *curtime, u32 add_usec)
+{
+ curtime->tv_usec += add_usec;
+ if (curtime->tv_usec >= 1000000) {
+ curtime->tv_usec -= 1000000;
+ curtime->tv_sec++;
+ }
+}
+
+/*
+ * Sleep until gettimeofday() > waketime + add_usec
+ * This needs to be as precise as possible, but as the delay is
+ * usually between 2ms and 32ms, it is done using a scheduled msleep
+ * followed by usleep (normally a busy-wait loop) for the remainder
+ */
+void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec)
+{
+ struct timeval lasttime;
+ s32 delta, newdelta;
+
+ timeval_usec_add(waketime, add_usec);
+
+ do_gettimeofday(&lasttime);
+ delta = timeval_usec_diff(lasttime, *waketime);
+ if (delta > 2500) {
+ msleep((delta - 1500) / 1000);
+ do_gettimeofday(&lasttime);
+ newdelta = timeval_usec_diff(lasttime, *waketime);
+ delta = (newdelta > delta) ? 0 : newdelta;
+ }
+ if (delta > 0)
+ udelay(delta);
+}
+EXPORT_SYMBOL(dvb_frontend_sleep_until);
+
+static int dvb_frontend_start(struct dvb_frontend *fe)
+{
+ int ret;
+ struct dvb_frontend_private *fepriv = fe->frontend_priv;
+ struct task_struct *fe_thread;
+
+ dprintk ("%s\n", __FUNCTION__);
+
+ if (fepriv->thread) {
+ if (!fepriv->exit)
+ return 0;
+ else
+ dvb_frontend_stop (fe);
+ }
+
+ if (signal_pending(current))
+ return -EINTR;
+ if (down_interruptible (&fepriv->sem))
+ return -EINTR;
+
+ fepriv->state = FESTATE_IDLE;
+ fepriv->exit = 0;
+ fepriv->thread = NULL;
+ mb();
+
+ fe_thread = kthread_run(dvb_frontend_thread, fe,
+ "kdvb-fe-%i", fe->dvb->num);
+ if (IS_ERR(fe_thread)) {
+ ret = PTR_ERR(fe_thread);
+ printk("dvb_frontend_start: failed to start kthread (%d)\n", ret);
+ up(&fepriv->sem);
+ return ret;
+ }
+ fepriv->thread = fe_thread;
+ return 0;
+}
+
+static void dvb_frontend_get_frequeny_limits(struct dvb_frontend *fe,
+ u32 *freq_min, u32 *freq_max)
+{
+ *freq_min = max(fe->ops.info.frequency_min, fe->ops.tuner_ops.info.frequency_min);
+
+ if (fe->ops.info.frequency_max == 0)
+ *freq_max = fe->ops.tuner_ops.info.frequency_max;
+ else if (fe->ops.tuner_ops.info.frequency_max == 0)
+ *freq_max = fe->ops.info.frequency_max;
+ else
+ *freq_max = min(fe->ops.info.frequency_max, fe->ops.tuner_ops.info.frequency_max);
+
+ if (*freq_min == 0 || *freq_max == 0)
+ printk(KERN_WARNING "DVB: frontend %u frequency limits undefined - fix the driver\n",
+ fe->dvb->num);
+}
+
+static int dvb_frontend_check_parameters(struct dvb_frontend *fe,
+ struct dvb_frontend_parameters *parms)
+{
+ u32 freq_min;
+ u32 freq_max;
+
+ /* range check: frequency */
+ dvb_frontend_get_frequeny_limits(fe, &freq_min, &freq_max);
+ if ((freq_min && parms->frequency < freq_min) ||
+ (freq_max && parms->frequency > freq_max)) {
+ printk(KERN_WARNING "DVB: frontend %u frequency %u out of range (%u..%u)\n",
+ fe->dvb->num, parms->frequency, freq_min, freq_max);
+ return -EINVAL;
+ }
+
+ /* range check: symbol rate */
+ if (fe->ops.info.type == FE_QPSK) {
+ if ((fe->ops.info.symbol_rate_min &&
+ parms->u.qpsk.symbol_rate < fe->ops.info.symbol_rate_min) ||
+ (fe->ops.info.symbol_rate_max &&
+ parms->u.qpsk.symbol_rate > fe->ops.info.symbol_rate_max)) {
+ printk(KERN_WARNING "DVB: frontend %u symbol rate %u out of range (%u..%u)\n",
+ fe->dvb->num, parms->u.qpsk.symbol_rate,
+ fe->ops.info.symbol_rate_min, fe->ops.info.symbol_rate_max);
+ return -EINVAL;
+ }
+
+ } else if (fe->ops.info.type == FE_QAM) {
+ if ((fe->ops.info.symbol_rate_min &&
+ parms->u.qam.symbol_rate < fe->ops.info.symbol_rate_min) ||
+ (fe->ops.info.symbol_rate_max &&
+ parms->u.qam.symbol_rate > fe->ops.info.symbol_rate_max)) {
+ printk(KERN_WARNING "DVB: frontend %u symbol rate %u out of range (%u..%u)\n",
+ fe->dvb->num, parms->u.qam.symbol_rate,
+ fe->ops.info.symbol_rate_min, fe->ops.info.symbol_rate_max);
+ return -EINVAL;
+ }
+ }
+
+ return 0;
+}
+
+static int dvb_frontend_ioctl(struct inode *inode, struct file *file,
+ unsigned int cmd, void *parg)
+{
+ struct dvb_device *dvbdev = file->private_data;
+ struct dvb_frontend *fe = dvbdev->priv;
+ struct dvb_frontend_private *fepriv = fe->frontend_priv;
+ int err = -EOPNOTSUPP;
+
+ dprintk ("%s\n", __FUNCTION__);
+
+ if (fepriv->exit)
+ return -ENODEV;
+
+ if ((file->f_flags & O_ACCMODE) == O_RDONLY &&
+ (_IOC_DIR(cmd) != _IOC_READ || cmd == FE_GET_EVENT ||
+ cmd == FE_DISEQC_RECV_SLAVE_REPLY))
+ return -EPERM;
+
+ if (down_interruptible (&fepriv->sem))
+ return -ERESTARTSYS;
+
+ switch (cmd) {
+ case FE_GET_INFO: {
+ struct dvb_frontend_info* info = parg;
+ memcpy(info, &fe->ops.info, sizeof(struct dvb_frontend_info));
+ dvb_frontend_get_frequeny_limits(fe, &info->frequency_min, &info->frequency_max);
+
+ /* Force the CAN_INVERSION_AUTO bit on. If the frontend doesn't
+ * do it, it is done for it. */
+ info->caps |= FE_CAN_INVERSION_AUTO;
+ err = 0;
+ break;
+ }
+
+ case FE_READ_STATUS: {
+ fe_status_t* status = parg;
+
+ /* if retune was requested but hasn't occured yet, prevent
+ * that user get signal state from previous tuning */
+ if(fepriv->state == FESTATE_RETUNE) {
+ err=0;
+ *status = 0;
+ break;
+ }
+
+ if (fe->ops.read_status)
+ err = fe->ops.read_status(fe, status);
+ break;
+ }
+ case FE_READ_BER:
+ if (fe->ops.read_ber)
+ err = fe->ops.read_ber(fe, (__u32*) parg);
+ break;
+
+ case FE_READ_SIGNAL_STRENGTH:
+ if (fe->ops.read_signal_strength)
+ err = fe->ops.read_signal_strength(fe, (__u16*) parg);
+ break;
+
+ case FE_READ_SNR:
+ if (fe->ops.read_snr)
+ err = fe->ops.read_snr(fe, (__u16*) parg);
+ break;
+
+ case FE_READ_UNCORRECTED_BLOCKS:
+ if (fe->ops.read_ucblocks)
+ err = fe->ops.read_ucblocks(fe, (__u32*) parg);
+ break;
+
+
+ case FE_DISEQC_RESET_OVERLOAD:
+ if (fe->ops.diseqc_reset_overload) {
+ err = fe->ops.diseqc_reset_overload(fe);
+ fepriv->state = FESTATE_DISEQC;
+ fepriv->status = 0;
+ }
+ break;
+
+ case FE_DISEQC_SEND_MASTER_CMD:
+ if (fe->ops.diseqc_send_master_cmd) {
+ err = fe->ops.diseqc_send_master_cmd(fe, (struct dvb_diseqc_master_cmd*) parg);
+ fepriv->state = FESTATE_DISEQC;
+ fepriv->status = 0;
+ }
+ break;
+
+ case FE_DISEQC_SEND_BURST:
+ if (fe->ops.diseqc_send_burst) {
+ err = fe->ops.diseqc_send_burst(fe, (fe_sec_mini_cmd_t) parg);
+ fepriv->state = FESTATE_DISEQC;
+ fepriv->status = 0;
+ }
+ break;
+
+ case FE_SET_TONE:
+ if (fe->ops.set_tone) {
+ err = fe->ops.set_tone(fe, (fe_sec_tone_mode_t) parg);
+ fepriv->tone = (fe_sec_tone_mode_t) parg;
+ fepriv->state = FESTATE_DISEQC;
+ fepriv->status = 0;
+ }
+ break;
+
+ case FE_SET_VOLTAGE:
+ if (fe->ops.set_voltage) {
+ err = fe->ops.set_voltage(fe, (fe_sec_voltage_t) parg);
+ fepriv->voltage = (fe_sec_voltage_t) parg;
+ fepriv->state = FESTATE_DISEQC;
+ fepriv->status = 0;
+ }
+ break;
+
+ case FE_DISHNETWORK_SEND_LEGACY_CMD:
+ if (fe->ops.dishnetwork_send_legacy_command) {
+ err = fe->ops.dishnetwork_send_legacy_command(fe, (unsigned long) parg);
+ fepriv->state = FESTATE_DISEQC;
+ fepriv->status = 0;
+ } else if (fe->ops.set_voltage) {
+ /*
+ * NOTE: This is a fallback condition. Some frontends
+ * (stv0299 for instance) take longer than 8msec to
+ * respond to a set_voltage command. Those switches
+ * need custom routines to switch properly. For all
+ * other frontends, the following shoule work ok.
+ * Dish network legacy switches (as used by Dish500)
+ * are controlled by sending 9-bit command words
+ * spaced 8msec apart.
+ * the actual command word is switch/port dependant
+ * so it is up to the userspace application to send
+ * the right command.
+ * The command must always start with a '0' after
+ * initialization, so parg is 8 bits and does not
+ * include the initialization or start bit
+ */
+ unsigned long cmd = ((unsigned long) parg) << 1;
+ struct timeval nexttime;
+ struct timeval tv[10];
+ int i;
+ u8 last = 1;
+ if (dvb_frontend_debug)
+ printk("%s switch command: 0x%04lx\n", __FUNCTION__, cmd);
+ do_gettimeofday(&nexttime);
+ if (dvb_frontend_debug)
+ memcpy(&tv[0], &nexttime, sizeof(struct timeval));
+ /* before sending a command, initialize by sending
+ * a 32ms 18V to the switch
+ */
+ fe->ops.set_voltage(fe, SEC_VOLTAGE_18);
+ dvb_frontend_sleep_until(&nexttime, 32000);
+
+ for (i = 0; i < 9; i++) {
+ if (dvb_frontend_debug)
+ do_gettimeofday(&tv[i + 1]);
+ if ((cmd & 0x01) != last) {
+ /* set voltage to (last ? 13V : 18V) */
+ fe->ops.set_voltage(fe, (last) ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18);
+ last = (last) ? 0 : 1;
+ }
+ cmd = cmd >> 1;
+ if (i != 8)
+ dvb_frontend_sleep_until(&nexttime, 8000);
+ }
+ if (dvb_frontend_debug) {
+ printk("%s(%d): switch delay (should be 32k followed by all 8k\n",
+ __FUNCTION__, fe->dvb->num);
+ for (i = 1; i < 10; i++)
+ printk("%d: %d\n", i, timeval_usec_diff(tv[i-1] , tv[i]));
+ }
+ err = 0;
+ fepriv->state = FESTATE_DISEQC;
+ fepriv->status = 0;
+ }
+ break;
+
+ case FE_DISEQC_RECV_SLAVE_REPLY:
+ if (fe->ops.diseqc_recv_slave_reply)
+ err = fe->ops.diseqc_recv_slave_reply(fe, (struct dvb_diseqc_slave_reply*) parg);
+ break;
+
+ case FE_ENABLE_HIGH_LNB_VOLTAGE:
+ if (fe->ops.enable_high_lnb_voltage)
+ err = fe->ops.enable_high_lnb_voltage(fe, (long) parg);
+ break;
+
+ case FE_SET_FRONTEND: {
+ struct dvb_frontend_tune_settings fetunesettings;
+
+ if (dvb_frontend_check_parameters(fe, parg) < 0) {
+ err = -EINVAL;
+ break;
+ }
+
+ memcpy (&fepriv->parameters, parg,
+ sizeof (struct dvb_frontend_parameters));
+
+ memset(&fetunesettings, 0, sizeof(struct dvb_frontend_tune_settings));
+ memcpy(&fetunesettings.parameters, parg,
+ sizeof (struct dvb_frontend_parameters));
+
+ /* force auto frequency inversion if requested */
+ if (dvb_force_auto_inversion) {
+ fepriv->parameters.inversion = INVERSION_AUTO;
+ fetunesettings.parameters.inversion = INVERSION_AUTO;
+ }
+ if (fe->ops.info.type == FE_OFDM) {
+ /* without hierarchical coding code_rate_LP is irrelevant,
+ * so we tolerate the otherwise invalid FEC_NONE setting */
+ if (fepriv->parameters.u.ofdm.hierarchy_information == HIERARCHY_NONE &&
+ fepriv->parameters.u.ofdm.code_rate_LP == FEC_NONE)
+ fepriv->parameters.u.ofdm.code_rate_LP = FEC_AUTO;
+ }
+
+ /* get frontend-specific tuning settings */
+ if (fe->ops.get_tune_settings && (fe->ops.get_tune_settings(fe, &fetunesettings) == 0)) {
+ fepriv->min_delay = (fetunesettings.min_delay_ms * HZ) / 1000;
+ fepriv->max_drift = fetunesettings.max_drift;
+ fepriv->step_size = fetunesettings.step_size;
+ } else {
+ /* default values */
+ switch(fe->ops.info.type) {
+ case FE_QPSK:
+ fepriv->min_delay = HZ/20;
+ fepriv->step_size = fepriv->parameters.u.qpsk.symbol_rate / 16000;
+ fepriv->max_drift = fepriv->parameters.u.qpsk.symbol_rate / 2000;
+ break;
+
+ case FE_QAM:
+ fepriv->min_delay = HZ/20;
+ fepriv->step_size = 0; /* no zigzag */
+ fepriv->max_drift = 0;
+ break;
+
+ case FE_OFDM:
+ fepriv->min_delay = HZ/20;
+ fepriv->step_size = fe->ops.info.frequency_stepsize * 2;
+ fepriv->max_drift = (fe->ops.info.frequency_stepsize * 2) + 1;
+ break;
+ case FE_ATSC:
+ fepriv->min_delay = HZ/20;
+ fepriv->step_size = 0;
+ fepriv->max_drift = 0;
+ break;
+ }
+ }
+ if (dvb_override_tune_delay > 0)
+ fepriv->min_delay = (dvb_override_tune_delay * HZ) / 1000;
+
+ fepriv->state = FESTATE_RETUNE;
+ dvb_frontend_wakeup(fe);
+ dvb_frontend_add_event(fe, 0);
+ fepriv->status = 0;
+ err = 0;
+ break;
+ }
+
+ case FE_GET_EVENT:
+ err = dvb_frontend_get_event (fe, parg, file->f_flags);
+ break;
+
+ case FE_GET_FRONTEND:
+ if (fe->ops.get_frontend) {
+ memcpy (parg, &fepriv->parameters, sizeof (struct dvb_frontend_parameters));
+ err = fe->ops.get_frontend(fe, (struct dvb_frontend_parameters*) parg);
+ }
+ break;
+
+ case FE_SET_FRONTEND_TUNE_MODE:
+ fepriv->tune_mode_flags = (unsigned long) parg;
+ err = 0;
+ break;
+ };
+
+ up (&fepriv->sem);
+ return err;
+}
+
+static unsigned int dvb_frontend_poll(struct file *file, struct poll_table_struct *wait)
+{
+ struct dvb_device *dvbdev = file->private_data;
+ struct dvb_frontend *fe = dvbdev->priv;
+ struct dvb_frontend_private *fepriv = fe->frontend_priv;
+
+ dprintk ("%s\n", __FUNCTION__);
+
+ poll_wait (file, &fepriv->events.wait_queue, wait);
+
+ if (fepriv->events.eventw != fepriv->events.eventr)
+ return (POLLIN | POLLRDNORM | POLLPRI);
+
+ return 0;
+}
+
+static int dvb_frontend_open(struct inode *inode, struct file *file)
+{
+ struct dvb_device *dvbdev = file->private_data;
+ struct dvb_frontend *fe = dvbdev->priv;
+ struct dvb_frontend_private *fepriv = fe->frontend_priv;
+ int ret;
+
+ dprintk ("%s\n", __FUNCTION__);
+
+ if (dvbdev->users == -1 && fe->ops.ts_bus_ctrl) {
+ if ((ret = fe->ops.ts_bus_ctrl(fe, 1)) < 0)
+ return ret;
+ }
+
+ if ((ret = dvb_generic_open (inode, file)) < 0)
+ goto err1;
+
+ if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
+ /* normal tune mode when opened R/W */
+ fepriv->tune_mode_flags &= ~FE_TUNE_MODE_ONESHOT;
+ fepriv->tone = -1;
+ fepriv->voltage = -1;
+
+ ret = dvb_frontend_start (fe);
+ if (ret)
+ goto err2;
+
+ /* empty event queue */
+ fepriv->events.eventr = fepriv->events.eventw = 0;
+ }
+
+ return ret;
+
+err2:
+ dvb_generic_release(inode, file);
+err1:
+ if (dvbdev->users == -1 && fe->ops.ts_bus_ctrl)
+ fe->ops.ts_bus_ctrl(fe, 0);
+ return ret;
+}
+
+static int dvb_frontend_release(struct inode *inode, struct file *file)
+{
+ struct dvb_device *dvbdev = file->private_data;
+ struct dvb_frontend *fe = dvbdev->priv;
+ struct dvb_frontend_private *fepriv = fe->frontend_priv;
+ int ret;
+
+ dprintk ("%s\n", __FUNCTION__);
+
+ if ((file->f_flags & O_ACCMODE) != O_RDONLY)
+ fepriv->release_jiffies = jiffies;
+
+ ret = dvb_generic_release (inode, file);
+
+ if (dvbdev->users == -1) {
+ if (fepriv->exit == 1) {
+ fops_put(file->f_op);
+ file->f_op = NULL;
+ wake_up(&dvbdev->wait_queue);
+ }
+ if (fe->ops.ts_bus_ctrl)
+ fe->ops.ts_bus_ctrl(fe, 0);
+ }
+
+ return ret;
+}
+
+static struct file_operations dvb_frontend_fops = {
+ .owner = THIS_MODULE,
+ .ioctl = dvb_generic_ioctl,
+ .poll = dvb_frontend_poll,
+ .open = dvb_frontend_open,
+ .release = dvb_frontend_release
+};
+
+int dvb_register_frontend(struct dvb_adapter* dvb,
+ struct dvb_frontend* fe)
+{
+ struct dvb_frontend_private *fepriv;
+ static const struct dvb_device dvbdev_template = {
+ .users = ~0,
+ .writers = 1,
+ .readers = (~0)-1,
+ .fops = &dvb_frontend_fops,
+ .kernel_ioctl = dvb_frontend_ioctl
+ };
+
+ dprintk ("%s\n", __FUNCTION__);
+
+ if (mutex_lock_interruptible(&frontend_mutex))
+ return -ERESTARTSYS;
+
+ fe->frontend_priv = kzalloc(sizeof(struct dvb_frontend_private), GFP_KERNEL);
+ if (fe->frontend_priv == NULL) {
+ mutex_unlock(&frontend_mutex);
+ return -ENOMEM;
+ }
+ fepriv = fe->frontend_priv;
+
+ init_MUTEX (&fepriv->sem);
+ init_waitqueue_head (&fepriv->wait_queue);
+ init_waitqueue_head (&fepriv->events.wait_queue);
+ mutex_init(&fepriv->events.mtx);
+ fe->dvb = dvb;
+ fepriv->inversion = INVERSION_OFF;
+
+ printk ("DVB: registering frontend %i (%s)...\n",
+ fe->dvb->num,
+ fe->ops.info.name);
+
+ dvb_register_device (fe->dvb, &fepriv->dvbdev, &dvbdev_template,
+ fe, DVB_DEVICE_FRONTEND);
+
+ mutex_unlock(&frontend_mutex);
+ return 0;
+}
+EXPORT_SYMBOL(dvb_register_frontend);
+
+int dvb_unregister_frontend(struct dvb_frontend* fe)
+{
+ struct dvb_frontend_private *fepriv = fe->frontend_priv;
+ dprintk ("%s\n", __FUNCTION__);
+
+ mutex_lock(&frontend_mutex);
+ dvb_frontend_stop (fe);
+ mutex_unlock(&frontend_mutex);
+
+ if (fepriv->dvbdev->users < -1)
+ wait_event(fepriv->dvbdev->wait_queue,
+ fepriv->dvbdev->users==-1);
+
+ mutex_lock(&frontend_mutex);
+ dvb_unregister_device (fepriv->dvbdev);
+
+ /* fe is invalid now */
+ kfree(fepriv);
+ mutex_unlock(&frontend_mutex);
+ return 0;
+}
+EXPORT_SYMBOL(dvb_unregister_frontend);
+
+#ifdef CONFIG_DVB_CORE_ATTACH
+void dvb_frontend_detach(struct dvb_frontend* fe)
+{
+ void *ptr;
+
+ if (fe->ops.release_sec) {
+ fe->ops.release_sec(fe);
+ symbol_put_addr(fe->ops.release_sec);
+ }
+ if (fe->ops.tuner_ops.release) {
+ fe->ops.tuner_ops.release(fe);
+ symbol_put_addr(fe->ops.tuner_ops.release);
+ }
+ if (fe->ops.analog_ops.release) {
+ fe->ops.analog_ops.release(fe);
+ symbol_put_addr(fe->ops.analog_ops.release);
+ }
+ ptr = (void*)fe->ops.release;
+ if (ptr) {
+ fe->ops.release(fe);
+ symbol_put_addr(ptr);
+ }
+}
+#else
+void dvb_frontend_detach(struct dvb_frontend* fe)
+{
+ if (fe->ops.release_sec)
+ fe->ops.release_sec(fe);
+ if (fe->ops.tuner_ops.release)
+ fe->ops.tuner_ops.release(fe);
+ if (fe->ops.analog_ops.release)
+ fe->ops.analog_ops.release(fe);
+ if (fe->ops.release)
+ fe->ops.release(fe);
+}
+#endif
+EXPORT_SYMBOL(dvb_frontend_detach);
diff --git a/v4l/kernel-2.6.tmp/dvb_frontend.h b/v4l/kernel-2.6.tmp/dvb_frontend.h
new file mode 100644
index 0000000..6a05d27
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb_frontend.h
@@ -0,0 +1,214 @@
+/*
+ * dvb_frontend.h
+ *
+ * Copyright (C) 2001 convergence integrated media GmbH
+ * Copyright (C) 2004 convergence GmbH
+ *
+ * Written by Ralph Metzler
+ * Overhauled by Holger Waechtler
+ * Kernel I2C stuff by Michael Hunold <hunold@convergence.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include <linux/version.h>
+#ifndef _DVB_FRONTEND_H_
+#define _DVB_FRONTEND_H_
+
+#include <linux/types.h>
+#include <linux/sched.h>
+#include <linux/ioctl.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/delay.h>
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,15)
+#include <linux/mutex.h>
+#endif
+
+#include <linux/dvb/frontend.h>
+
+#include "dvbdev.h"
+
+struct dvb_frontend_tune_settings {
+ int min_delay_ms;
+ int step_size;
+ int max_drift;
+ struct dvb_frontend_parameters parameters;
+};
+
+struct dvb_frontend;
+
+struct dvb_tuner_info {
+ char name[128];
+
+ u32 frequency_min;
+ u32 frequency_max;
+ u32 frequency_step;
+
+ u32 bandwidth_min;
+ u32 bandwidth_max;
+ u32 bandwidth_step;
+};
+
+struct analog_parameters {
+ unsigned int frequency;
+ unsigned int mode;
+ unsigned int audmode;
+ u64 std;
+};
+
+struct dvb_tuner_ops {
+
+ struct dvb_tuner_info info;
+
+ int (*release)(struct dvb_frontend *fe);
+ int (*init)(struct dvb_frontend *fe);
+ int (*sleep)(struct dvb_frontend *fe);
+
+ /** This is for simple PLLs - set all parameters in one go. */
+ int (*set_params)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p);
+ int (*set_analog_params)(struct dvb_frontend *fe, struct analog_parameters *p);
+
+ /** This is support for demods like the mt352 - fills out the supplied buffer with what to write. */
+ int (*calc_regs)(struct dvb_frontend *fe, struct dvb_frontend_parameters *p, u8 *buf, int buf_len);
+
+ /** This is to allow setting tuner-specific configs */
+ int (*set_config)(struct dvb_frontend *fe, void *priv_cfg);
+
+ int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency);
+ int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth);
+
+#define TUNER_STATUS_LOCKED 1
+#define TUNER_STATUS_STEREO 2
+ int (*get_status)(struct dvb_frontend *fe, u32 *status);
+ int (*get_rf_strength)(struct dvb_frontend *fe, u16 *strength);
+
+ /** These are provided seperately from set_params in order to facilitate silicon
+ * tuners which require sophisticated tuning loops, controlling each parameter seperately. */
+ int (*set_frequency)(struct dvb_frontend *fe, u32 frequency);
+ int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
+};
+
+struct analog_demod_info {
+ char *name;
+};
+
+struct analog_demod_ops {
+
+ struct analog_demod_info info;
+
+ void (*set_params)(struct dvb_frontend *fe,
+ struct analog_parameters *params);
+ int (*has_signal)(struct dvb_frontend *fe);
+ int (*is_stereo)(struct dvb_frontend *fe);
+ int (*get_afc)(struct dvb_frontend *fe);
+ void (*tuner_status)(struct dvb_frontend *fe);
+ void (*standby)(struct dvb_frontend *fe);
+ void (*release)(struct dvb_frontend *fe);
+ int (*i2c_gate_ctrl)(struct dvb_frontend *fe, int enable);
+
+ /** This is to allow setting tuner-specific configuration */
+ int (*set_config)(struct dvb_frontend *fe, void *priv_cfg);
+};
+
+struct dvb_frontend_ops {
+
+ struct dvb_frontend_info info;
+
+ void (*release)(struct dvb_frontend* fe);
+ void (*release_sec)(struct dvb_frontend* fe);
+
+ int (*init)(struct dvb_frontend* fe);
+ int (*sleep)(struct dvb_frontend* fe);
+
+ int (*write)(struct dvb_frontend* fe, u8* buf, int len);
+
+ /* if this is set, it overrides the default swzigzag */
+ int (*tune)(struct dvb_frontend* fe,
+ struct dvb_frontend_parameters* params,
+ unsigned int mode_flags,
+ unsigned int *delay,
+ fe_status_t *status);
+ /* get frontend tuning algorithm from the module */
+ int (*get_frontend_algo)(struct dvb_frontend *fe);
+
+ /* these two are only used for the swzigzag code */
+ int (*set_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+ int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings);
+
+ int (*get_frontend)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
+
+ int (*read_status)(struct dvb_frontend* fe, fe_status_t* status);
+ int (*read_ber)(struct dvb_frontend* fe, u32* ber);
+ int (*read_signal_strength)(struct dvb_frontend* fe, u16* strength);
+ int (*read_snr)(struct dvb_frontend* fe, u16* snr);
+ int (*read_ucblocks)(struct dvb_frontend* fe, u32* ucblocks);
+
+ int (*diseqc_reset_overload)(struct dvb_frontend* fe);
+ int (*diseqc_send_master_cmd)(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd);
+ int (*diseqc_recv_slave_reply)(struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply);
+ int (*diseqc_send_burst)(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd);
+ int (*set_tone)(struct dvb_frontend* fe, fe_sec_tone_mode_t tone);
+ int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
+ int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg);
+ int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
+ int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
+ int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);
+
+ struct dvb_tuner_ops tuner_ops;
+ struct analog_demod_ops analog_ops;
+};
+
+#define MAX_EVENT 8
+
+struct dvb_fe_events {
+ struct dvb_frontend_event events[MAX_EVENT];
+ int eventw;
+ int eventr;
+ int overflow;
+ wait_queue_head_t wait_queue;
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,15)
+ struct mutex mtx;
+#else
+ struct semaphore mtx;
+#endif
+};
+
+struct dvb_frontend {
+ struct dvb_frontend_ops ops;
+ struct dvb_adapter *dvb;
+ void *demodulator_priv;
+ void *tuner_priv;
+ void *frontend_priv;
+ void *sec_priv;
+ void *analog_demod_priv;
+};
+
+extern int dvb_register_frontend(struct dvb_adapter *dvb,
+ struct dvb_frontend *fe);
+
+extern int dvb_unregister_frontend(struct dvb_frontend *fe);
+
+extern void dvb_frontend_detach(struct dvb_frontend *fe);
+
+extern void dvb_frontend_reinitialise(struct dvb_frontend *fe);
+
+extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec);
+extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime);
+
+#endif
diff --git a/v4l/kernel-2.6.tmp/dvb_math.c b/v4l/kernel-2.6.tmp/dvb_math.c
new file mode 100644
index 0000000..beb7c93
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb_math.c
@@ -0,0 +1,145 @@
+/*
+ * dvb-math provides some complex fixed-point math
+ * operations shared between the dvb related stuff
+ *
+ * Copyright (C) 2006 Christoph Pfister (christophpfister@gmail.com)
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <linux/bitops.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <asm/bug.h>
+#include "dvb_math.h"
+
+static const unsigned short logtable[256] = {
+ 0x0000, 0x0171, 0x02e0, 0x044e, 0x05ba, 0x0725, 0x088e, 0x09f7,
+ 0x0b5d, 0x0cc3, 0x0e27, 0x0f8a, 0x10eb, 0x124b, 0x13aa, 0x1508,
+ 0x1664, 0x17bf, 0x1919, 0x1a71, 0x1bc8, 0x1d1e, 0x1e73, 0x1fc6,
+ 0x2119, 0x226a, 0x23ba, 0x2508, 0x2656, 0x27a2, 0x28ed, 0x2a37,
+ 0x2b80, 0x2cc8, 0x2e0f, 0x2f54, 0x3098, 0x31dc, 0x331e, 0x345f,
+ 0x359f, 0x36de, 0x381b, 0x3958, 0x3a94, 0x3bce, 0x3d08, 0x3e41,
+ 0x3f78, 0x40af, 0x41e4, 0x4319, 0x444c, 0x457f, 0x46b0, 0x47e1,
+ 0x4910, 0x4a3f, 0x4b6c, 0x4c99, 0x4dc5, 0x4eef, 0x5019, 0x5142,
+ 0x526a, 0x5391, 0x54b7, 0x55dc, 0x5700, 0x5824, 0x5946, 0x5a68,
+ 0x5b89, 0x5ca8, 0x5dc7, 0x5ee5, 0x6003, 0x611f, 0x623a, 0x6355,
+ 0x646f, 0x6588, 0x66a0, 0x67b7, 0x68ce, 0x69e4, 0x6af8, 0x6c0c,
+ 0x6d20, 0x6e32, 0x6f44, 0x7055, 0x7165, 0x7274, 0x7383, 0x7490,
+ 0x759d, 0x76aa, 0x77b5, 0x78c0, 0x79ca, 0x7ad3, 0x7bdb, 0x7ce3,
+ 0x7dea, 0x7ef0, 0x7ff6, 0x80fb, 0x81ff, 0x8302, 0x8405, 0x8507,
+ 0x8608, 0x8709, 0x8809, 0x8908, 0x8a06, 0x8b04, 0x8c01, 0x8cfe,
+ 0x8dfa, 0x8ef5, 0x8fef, 0x90e9, 0x91e2, 0x92db, 0x93d2, 0x94ca,
+ 0x95c0, 0x96b6, 0x97ab, 0x98a0, 0x9994, 0x9a87, 0x9b7a, 0x9c6c,
+ 0x9d5e, 0x9e4f, 0x9f3f, 0xa02e, 0xa11e, 0xa20c, 0xa2fa, 0xa3e7,
+ 0xa4d4, 0xa5c0, 0xa6ab, 0xa796, 0xa881, 0xa96a, 0xaa53, 0xab3c,
+ 0xac24, 0xad0c, 0xadf2, 0xaed9, 0xafbe, 0xb0a4, 0xb188, 0xb26c,
+ 0xb350, 0xb433, 0xb515, 0xb5f7, 0xb6d9, 0xb7ba, 0xb89a, 0xb97a,
+ 0xba59, 0xbb38, 0xbc16, 0xbcf4, 0xbdd1, 0xbead, 0xbf8a, 0xc065,
+ 0xc140, 0xc21b, 0xc2f5, 0xc3cf, 0xc4a8, 0xc580, 0xc658, 0xc730,
+ 0xc807, 0xc8de, 0xc9b4, 0xca8a, 0xcb5f, 0xcc34, 0xcd08, 0xcddc,
+ 0xceaf, 0xcf82, 0xd054, 0xd126, 0xd1f7, 0xd2c8, 0xd399, 0xd469,
+ 0xd538, 0xd607, 0xd6d6, 0xd7a4, 0xd872, 0xd93f, 0xda0c, 0xdad9,
+ 0xdba5, 0xdc70, 0xdd3b, 0xde06, 0xded0, 0xdf9a, 0xe063, 0xe12c,
+ 0xe1f5, 0xe2bd, 0xe385, 0xe44c, 0xe513, 0xe5d9, 0xe69f, 0xe765,
+ 0xe82a, 0xe8ef, 0xe9b3, 0xea77, 0xeb3b, 0xebfe, 0xecc1, 0xed83,
+ 0xee45, 0xef06, 0xefc8, 0xf088, 0xf149, 0xf209, 0xf2c8, 0xf387,
+ 0xf446, 0xf505, 0xf5c3, 0xf680, 0xf73e, 0xf7fb, 0xf8b7, 0xf973,
+ 0xfa2f, 0xfaea, 0xfba5, 0xfc60, 0xfd1a, 0xfdd4, 0xfe8e, 0xff47
+};
+
+unsigned int intlog2(u32 value)
+{
+ /**
+ * returns: log2(value) * 2^24
+ * wrong result if value = 0 (log2(0) is undefined)
+ */
+ unsigned int msb;
+ unsigned int logentry;
+ unsigned int significand;
+ unsigned int interpolation;
+
+ if (unlikely(value == 0)) {
+ WARN_ON(1);
+ return 0;
+ }
+
+ /* first detect the msb (count begins at 0) */
+ msb = fls(value) - 1;
+
+ /**
+ * now we use a logtable after the following method:
+ *
+ * log2(2^x * y) * 2^24 = x * 2^24 + log2(y) * 2^24
+ * where x = msb and therefore 1 <= y < 2
+ * first y is determined by shifting the value left
+ * so that msb is bit 31
+ * 0x00231f56 -> 0x8C7D5800
+ * the result is y * 2^31 -> "significand"
+ * then the highest 9 bits are used for a table lookup
+ * the highest bit is discarded because it's always set
+ * the highest nine bits in our example are 100011000
+ * so we would use the entry 0x18
+ */
+ significand = value << (31 - msb);
+ logentry = (significand >> 23) & 0xff;
+
+ /**
+ * last step we do is interpolation because of the
+ * limitations of the log table the error is that part of
+ * the significand which isn't used for lookup then we
+ * compute the ratio between the error and the next table entry
+ * and interpolate it between the log table entry used and the
+ * next one the biggest error possible is 0x7fffff
+ * (in our example it's 0x7D5800)
+ * needed value for next table entry is 0x800000
+ * so the interpolation is
+ * (error / 0x800000) * (logtable_next - logtable_current)
+ * in the implementation the division is moved to the end for
+ * better accuracy there is also an overflow correction if
+ * logtable_next is 256
+ */
+ interpolation = ((significand & 0x7fffff) *
+ ((logtable[(logentry + 1) & 0xff] -
+ logtable[logentry]) & 0xffff)) >> 15;
+
+ /* now we return the result */
+ return ((msb << 24) + (logtable[logentry] << 8) + interpolation);
+}
+EXPORT_SYMBOL(intlog2);
+
+unsigned int intlog10(u32 value)
+{
+ /**
+ * returns: log10(value) * 2^24
+ * wrong result if value = 0 (log10(0) is undefined)
+ */
+ u64 log;
+
+ if (unlikely(value == 0)) {
+ WARN_ON(1);
+ return 0;
+ }
+
+ log = intlog2(value);
+
+ /**
+ * we use the following method:
+ * log10(x) = log2(x) * log10(2)
+ */
+
+ return (log * 646456993) >> 31;
+}
+EXPORT_SYMBOL(intlog10);
diff --git a/v4l/kernel-2.6.tmp/dvb_math.h b/v4l/kernel-2.6.tmp/dvb_math.h
new file mode 100644
index 0000000..aecc867
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb_math.h
@@ -0,0 +1,58 @@
+/*
+ * dvb-math provides some complex fixed-point math
+ * operations shared between the dvb related stuff
+ *
+ * Copyright (C) 2006 Christoph Pfister (christophpfister@gmail.com)
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __DVB_MATH_H
+#define __DVB_MATH_H
+
+#include <linux/types.h>
+
+/**
+ * computes log2 of a value; the result is shifted left by 24 bits
+ *
+ * to use rational values you can use the following method:
+ * intlog2(value) = intlog2(value * 2^x) - x * 2^24
+ *
+ * example: intlog2(8) will give 3 << 24 = 3 * 2^24
+ * example: intlog2(9) will give 3 << 24 + ... = 3.16... * 2^24
+ * example: intlog2(1.5) = intlog2(3) - 2^24 = 0.584... * 2^24
+ *
+ * @param value The value (must be != 0)
+ * @return log2(value) * 2^24
+ */
+extern unsigned int intlog2(u32 value);
+
+/**
+ * computes log10 of a value; the result is shifted left by 24 bits
+ *
+ * to use rational values you can use the following method:
+ * intlog10(value) = intlog10(value * 10^x) - x * 2^24
+ *
+ * example: intlog10(1000) will give 3 << 24 = 3 * 2^24
+ * due to the implementation intlog10(1000) might be not exactly 3 * 2^24
+ *
+ * look at intlog2 for similar examples
+ *
+ * @param value The value (must be != 0)
+ * @return log10(value) * 2^24
+ */
+extern unsigned int intlog10(u32 value);
+
+#endif
diff --git a/v4l/kernel-2.6.tmp/dvb_net.c b/v4l/kernel-2.6.tmp/dvb_net.c
new file mode 100644
index 0000000..9fff57c
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb_net.c
@@ -0,0 +1,1576 @@
+/*
+ * dvb_net.c
+ *
+ * Copyright (C) 2001 Convergence integrated media GmbH
+ * Ralph Metzler <ralph@convergence.de>
+ * Copyright (C) 2002 Ralph Metzler <rjkm@metzlerbros.de>
+ *
+ * ULE Decapsulation code:
+ * Copyright (C) 2003, 2004 gcs - Global Communication & Services GmbH.
+ * and Department of Scientific Computing
+ * Paris Lodron University of Salzburg.
+ * Hilmar Linder <hlinder@cosy.sbg.ac.at>
+ * and Wolfram Stering <wstering@cosy.sbg.ac.at>
+ *
+ * ULE Decaps according to RFC 4326.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
+ */
+
+/*
+ * ULE ChangeLog:
+ * Feb 2004: hl/ws v1: Implementing draft-fair-ipdvb-ule-01.txt
+ *
+ * Dec 2004: hl/ws v2: Implementing draft-ietf-ipdvb-ule-03.txt:
+ * ULE Extension header handling.
+ * Bugreports by Moritz Vieth and Hanno Tersteegen,
+ * Fraunhofer Institute for Open Communication Systems
+ * Competence Center for Advanced Satellite Communications.
+ * Bugfixes and robustness improvements.
+ * Filtering on dest MAC addresses, if present (D-Bit = 0)
+ * ULE_DEBUG compile-time option.
+ * Apr 2006: cp v3: Bugfixes and compliency with RFC 4326 (ULE) by
+ * Christian Praehauser <cpraehaus@cosy.sbg.ac.at>,
+ * Paris Lodron University of Salzburg.
+ */
+
+/*
+ * FIXME / TODO (dvb_net.c):
+ *
+ * Unloading does not work for 2.6.9 kernels: a refcount doesn't go to zero.
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/netdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/dvb/net.h>
+#include <linux/uio.h>
+#include <asm/uaccess.h>
+#include <linux/crc32.h>
+#include "compat.h"
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,15)
+#include <linux/mutex.h>
+#endif
+
+#include "dvb_demux.h"
+#include "dvb_net.h"
+
+static int dvb_net_debug;
+module_param(dvb_net_debug, int, 0444);
+MODULE_PARM_DESC(dvb_net_debug, "enable debug messages");
+
+#define dprintk(x...) do { if (dvb_net_debug) printk(x); } while (0)
+
+
+static inline __u32 iov_crc32( __u32 c, struct kvec *iov, unsigned int cnt )
+{
+ unsigned int j;
+ for (j = 0; j < cnt; j++)
+ c = crc32_be( c, iov[j].iov_base, iov[j].iov_len );
+ return c;
+}
+
+
+#define DVB_NET_MULTICAST_MAX 10
+
+#undef ULE_DEBUG
+
+#ifdef ULE_DEBUG
+
+#define MAC_ADDR_PRINTFMT "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x"
+#define MAX_ADDR_PRINTFMT_ARGS(macap) (macap)[0],(macap)[1],(macap)[2],(macap)[3],(macap)[4],(macap)[5]
+
+#define isprint(c) ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9'))
+
+static void hexdump( const unsigned char *buf, unsigned short len )
+{
+ char str[80], octet[10];
+ int ofs, i, l;
+
+ for (ofs = 0; ofs < len; ofs += 16) {
+ sprintf( str, "%03d: ", ofs );
+
+ for (i = 0; i < 16; i++) {
+ if ((i + ofs) < len)
+ sprintf( octet, "%02x ", buf[ofs + i] );
+ else
+ strcpy( octet, " " );
+
+ strcat( str, octet );
+ }
+ strcat( str, " " );
+ l = strlen( str );
+
+ for (i = 0; (i < 16) && ((i + ofs) < len); i++)
+ str[l++] = isprint( buf[ofs + i] ) ? buf[ofs + i] : '.';
+
+ str[l] = '\0';
+ printk( KERN_WARNING "%s\n", str );
+ }
+}
+
+#endif
+
+struct dvb_net_priv {
+ int in_use;
+ struct net_device_stats stats;
+ u16 pid;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
+ struct net_device *net;
+#endif
+ struct dvb_net *host;
+ struct dmx_demux *demux;
+ struct dmx_section_feed *secfeed;
+ struct dmx_section_filter *secfilter;
+ struct dmx_ts_feed *tsfeed;
+ int multi_num;
+ struct dmx_section_filter *multi_secfilter[DVB_NET_MULTICAST_MAX];
+ unsigned char multi_macs[DVB_NET_MULTICAST_MAX][6];
+ int rx_mode;
+#define RX_MODE_UNI 0
+#define RX_MODE_MULTI 1
+#define RX_MODE_ALL_MULTI 2
+#define RX_MODE_PROMISC 3
+ struct work_struct set_multicast_list_wq;
+ struct work_struct restart_net_feed_wq;
+ unsigned char feedtype; /* Either FEED_TYPE_ or FEED_TYPE_ULE */
+ int need_pusi; /* Set to 1, if synchronization on PUSI required. */
+ unsigned char tscc; /* TS continuity counter after sync on PUSI. */
+ struct sk_buff *ule_skb; /* ULE SNDU decodes into this buffer. */
+ unsigned char *ule_next_hdr; /* Pointer into skb to next ULE extension header. */
+ unsigned short ule_sndu_len; /* ULE SNDU length in bytes, w/o D-Bit. */
+ unsigned short ule_sndu_type; /* ULE SNDU type field, complete. */
+ unsigned char ule_sndu_type_1; /* ULE SNDU type field, if split across 2 TS cells. */
+ unsigned char ule_dbit; /* Whether the DestMAC address present
+ * or not (bit is set). */
+ unsigned char ule_bridged; /* Whether the ULE_BRIDGED extension header was found. */
+ int ule_sndu_remain; /* Nr. of bytes still required for current ULE SNDU. */
+ unsigned long ts_count; /* Current ts cell counter. */
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,15)
+ struct mutex mutex;
+#else
+ struct semaphore mutex;
+#endif
+};
+
+
+/**
+ * Determine the packet's protocol ID. The rule here is that we
+ * assume 802.3 if the type field is short enough to be a length.
+ * This is normal practice and works for any 'now in use' protocol.
+ *
+ * stolen from eth.c out of the linux kernel, hacked for dvb-device
+ * by Michael Holzt <kju@debian.org>
+ */
+static unsigned short dvb_net_eth_type_trans(struct sk_buff *skb,
+ struct net_device *dev)
+{
+ struct ethhdr *eth;
+ unsigned char *rawp;
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
+ skb->mac.raw=skb->data;
+#else
+ skb_reset_mac_header(skb);
+#endif
+ skb_pull(skb,dev->hard_header_len);
+ eth = eth_hdr(skb);
+
+ if (*eth->h_dest & 1) {
+ if(memcmp(eth->h_dest,dev->broadcast, ETH_ALEN)==0)
+ skb->pkt_type=PACKET_BROADCAST;
+ else
+ skb->pkt_type=PACKET_MULTICAST;
+ }
+
+ if (ntohs(eth->h_proto) >= 1536)
+ return eth->h_proto;
+
+ rawp = skb->data;
+
+ /**
+ * This is a magic hack to spot IPX packets. Older Novell breaks
+ * the protocol design and runs IPX over 802.3 without an 802.2 LLC
+ * layer. We look for FFFF which isn't a used 802.2 SSAP/DSAP. This
+ * won't work for fault tolerant netware but does for the rest.
+ */
+ if (*(unsigned short *)rawp == 0xFFFF)
+ return htons(ETH_P_802_3);
+
+ /**
+ * Real 802.2 LLC
+ */
+ return htons(ETH_P_802_2);
+}
+
+#define TS_SZ 188
+#define TS_SYNC 0x47
+#define TS_TEI 0x80
+#define TS_SC 0xC0
+#define TS_PUSI 0x40
+#define TS_AF_A 0x20
+#define TS_AF_D 0x10
+
+/* ULE Extension Header handlers. */
+
+#define ULE_TEST 0
+#define ULE_BRIDGED 1
+
+#define ULE_OPTEXTHDR_PADDING 0
+
+static int ule_test_sndu( struct dvb_net_priv *p )
+{
+ return -1;
+}
+
+static int ule_bridged_sndu( struct dvb_net_priv *p )
+{
+ struct ethhdr *hdr = (struct ethhdr*) p->ule_next_hdr;
+ if(ntohs(hdr->h_proto) < 1536) {
+ int framelen = p->ule_sndu_len - ((p->ule_next_hdr+sizeof(struct ethhdr)) - p->ule_skb->data);
+ /* A frame Type < 1536 for a bridged frame, introduces a LLC Length field. */
+ if(framelen != ntohs(hdr->h_proto)) {
+ return -1;
+ }
+ }
+ /* Note:
+ * From RFC4326:
+ * "A bridged SNDU is a Mandatory Extension Header of Type 1.
+ * It must be the final (or only) extension header specified in the header chain of a SNDU."
+ * The 'ule_bridged' flag will cause the extension header processing loop to terminate.
+ */
+ p->ule_bridged = 1;
+ return 0;
+}
+
+static int ule_exthdr_padding(struct dvb_net_priv *p)
+{
+ return 0;
+}
+
+/** Handle ULE extension headers.
+ * Function is called after a successful CRC32 verification of an ULE SNDU to complete its decoding.
+ * Returns: >= 0: nr. of bytes consumed by next extension header
+ * -1: Mandatory extension header that is not recognized or TEST SNDU; discard.
+ */
+static int handle_one_ule_extension( struct dvb_net_priv *p )
+{
+ /* Table of mandatory extension header handlers. The header type is the index. */
+ static int (*ule_mandatory_ext_handlers[255])( struct dvb_net_priv *p ) =
+ { [0] = ule_test_sndu, [1] = ule_bridged_sndu, [2] = NULL, };
+
+ /* Table of optional extension header handlers. The header type is the index. */
+ static int (*ule_optional_ext_handlers[255])( struct dvb_net_priv *p ) =
+ { [0] = ule_exthdr_padding, [1] = NULL, };
+
+ int ext_len = 0;
+ unsigned char hlen = (p->ule_sndu_type & 0x0700) >> 8;
+ unsigned char htype = p->ule_sndu_type & 0x00FF;
+
+ /* Discriminate mandatory and optional extension headers. */
+ if (hlen == 0) {
+ /* Mandatory extension header */
+ if (ule_mandatory_ext_handlers[htype]) {
+ ext_len = ule_mandatory_ext_handlers[htype]( p );
+ if(ext_len >= 0) {
+ p->ule_next_hdr += ext_len;
+ if (!p->ule_bridged) {
+ p->ule_sndu_type = ntohs(*(unsigned short *)p->ule_next_hdr);
+ p->ule_next_hdr += 2;
+ } else {
+ p->ule_sndu_type = ntohs(*(unsigned short *)(p->ule_next_hdr + ((p->ule_dbit ? 2 : 3) * ETH_ALEN)));
+ /* This assures the extension handling loop will terminate. */
+ }
+ }
+ // else: extension handler failed or SNDU should be discarded
+ } else
+ ext_len = -1; /* SNDU has to be discarded. */
+ } else {
+ /* Optional extension header. Calculate the length. */
+ ext_len = hlen << 1;
+ /* Process the optional extension header according to its type. */
+ if (ule_optional_ext_handlers[htype])
+ (void)ule_optional_ext_handlers[htype]( p );
+ p->ule_next_hdr += ext_len;
+ p->ule_sndu_type = ntohs( *(unsigned short *)(p->ule_next_hdr-2) );
+ /*
+ * note: the length of the next header type is included in the
+ * length of THIS optional extension header
+ */
+ }
+
+ return ext_len;
+}
+
+static int handle_ule_extensions( struct dvb_net_priv *p )
+{
+ int total_ext_len = 0, l;
+
+ p->ule_next_hdr = p->ule_skb->data;
+ do {
+ l = handle_one_ule_extension( p );
+ if (l < 0)
+ return l; /* Stop extension header processing and discard SNDU. */
+ total_ext_len += l;
+#ifdef ULE_DEBUG
+ dprintk("handle_ule_extensions: ule_next_hdr=%p, ule_sndu_type=%i, "
+ "l=%i, total_ext_len=%i\n", p->ule_next_hdr,
+ (int) p->ule_sndu_type, l, total_ext_len);
+#endif
+
+ } while (p->ule_sndu_type < 1536);
+
+ return total_ext_len;
+}
+
+
+/** Prepare for a new ULE SNDU: reset the decoder state. */
+static inline void reset_ule( struct dvb_net_priv *p )
+{
+ p->ule_skb = NULL;
+ p->ule_next_hdr = NULL;
+ p->ule_sndu_len = 0;
+ p->ule_sndu_type = 0;
+ p->ule_sndu_type_1 = 0;
+ p->ule_sndu_remain = 0;
+ p->ule_dbit = 0xFF;
+ p->ule_bridged = 0;
+}
+
+/**
+ * Decode ULE SNDUs according to draft-ietf-ipdvb-ule-03.txt from a sequence of
+ * TS cells of a single PID.
+ */
+static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
+{
+ struct dvb_net_priv *priv = dev->priv;
+ unsigned long skipped = 0L;
+ const u8 *ts, *ts_end, *from_where = NULL;
+ u8 ts_remain = 0, how_much = 0, new_ts = 1;
+ struct ethhdr *ethh = NULL;
+
+#ifdef ULE_DEBUG
+ /* The code inside ULE_DEBUG keeps a history of the last 100 TS cells processed. */
+ static unsigned char ule_hist[100*TS_SZ];
+ static unsigned char *ule_where = ule_hist, ule_dump = 0;
+#endif
+
+ /* For all TS cells in current buffer.
+ * Appearently, we are called for every single TS cell.
+ */
+ for (ts = buf, ts_end = buf + buf_len; ts < ts_end; /* no default incr. */ ) {
+
+ if (new_ts) {
+ /* We are about to process a new TS cell. */
+
+#ifdef ULE_DEBUG
+ if (ule_where >= &ule_hist[100*TS_SZ]) ule_where = ule_hist;
+ memcpy( ule_where, ts, TS_SZ );
+ if (ule_dump) {
+ hexdump( ule_where, TS_SZ );
+ ule_dump = 0;
+ }
+ ule_where += TS_SZ;
+#endif
+
+ /* Check TS error conditions: sync_byte, transport_error_indicator, scrambling_control . */
+ if ((ts[0] != TS_SYNC) || (ts[1] & TS_TEI) || ((ts[3] & TS_SC) != 0)) {
+ printk(KERN_WARNING "%lu: Invalid TS cell: SYNC %#x, TEI %u, SC %#x.\n",
+ priv->ts_count, ts[0], ts[1] & TS_TEI >> 7, ts[3] & 0xC0 >> 6);
+
+ /* Drop partly decoded SNDU, reset state, resync on PUSI. */
+ if (priv->ule_skb) {
+ dev_kfree_skb( priv->ule_skb );
+ /* Prepare for next SNDU. */
+ priv->stats.rx_errors++;
+ priv->stats.rx_frame_errors++;
+ }
+ reset_ule(priv);
+ priv->need_pusi = 1;
+
+ /* Continue with next TS cell. */
+ ts += TS_SZ;
+ priv->ts_count++;
+ continue;
+ }
+
+ ts_remain = 184;
+ from_where = ts + 4;
+ }
+ /* Synchronize on PUSI, if required. */
+ if (priv->need_pusi) {
+ if (ts[1] & TS_PUSI) {
+ /* Find beginning of first ULE SNDU in current TS cell. */
+ /* Synchronize continuity counter. */
+ priv->tscc = ts[3] & 0x0F;
+ /* There is a pointer field here. */
+ if (ts[4] > ts_remain) {
+ printk(KERN_ERR "%lu: Invalid ULE packet "
+ "(pointer field %d)\n", priv->ts_count, ts[4]);
+ ts += TS_SZ;
+ priv->ts_count++;
+ continue;
+ }
+ /* Skip to destination of pointer field. */
+ from_where = &ts[5] + ts[4];
+ ts_remain -= 1 + ts[4];
+ skipped = 0;
+ } else {
+ skipped++;
+ ts += TS_SZ;
+ priv->ts_count++;
+ continue;
+ }
+ }
+
+ if (new_ts) {
+ /* Check continuity counter. */
+ if ((ts[3] & 0x0F) == priv->tscc)
+ priv->tscc = (priv->tscc + 1) & 0x0F;
+ else {
+ /* TS discontinuity handling: */
+ printk(KERN_WARNING "%lu: TS discontinuity: got %#x, "
+ "expected %#x.\n", priv->ts_count, ts[3] & 0x0F, priv->tscc);
+ /* Drop partly decoded SNDU, reset state, resync on PUSI. */
+ if (priv->ule_skb) {
+ dev_kfree_skb( priv->ule_skb );
+ /* Prepare for next SNDU. */
+ // reset_ule(priv); moved to below.
+ priv->stats.rx_errors++;
+ priv->stats.rx_frame_errors++;
+ }
+ reset_ule(priv);
+ /* skip to next PUSI. */
+ priv->need_pusi = 1;
+ continue;
+ }
+ /* If we still have an incomplete payload, but PUSI is
+ * set; some TS cells are missing.
+ * This is only possible here, if we missed exactly 16 TS
+ * cells (continuity counter wrap). */
+ if (ts[1] & TS_PUSI) {
+ if (! priv->need_pusi) {
+ if (!(*from_where < (ts_remain-1)) || *from_where != priv->ule_sndu_remain) {
+ /* Pointer field is invalid. Drop this TS cell and any started ULE SNDU. */
+ printk(KERN_WARNING "%lu: Invalid pointer "
+ "field: %u.\n", priv->ts_count, *from_where);
+
+ /* Drop partly decoded SNDU, reset state, resync on PUSI. */
+ if (priv->ule_skb) {
+ dev_kfree_skb( priv->ule_skb );
+ ((struct dvb_net_priv *) dev->priv)->stats.rx_errors++;
+ ((struct dvb_net_priv *) dev->priv)->stats.rx_frame_errors++;
+ }
+ reset_ule(priv);
+ priv->need_pusi = 1;
+ continue;
+ }
+ /* Skip pointer field (we're processing a
+ * packed payload). */
+ from_where += 1;
+ ts_remain -= 1;
+ } else
+ priv->need_pusi = 0;
+
+ if (priv->ule_sndu_remain > 183) {
+ /* Current SNDU lacks more data than there could be available in the
+ * current TS cell. */
+ priv->stats.rx_errors++;
+ priv->stats.rx_length_errors++;
+ printk(KERN_WARNING "%lu: Expected %d more SNDU bytes, but "
+ "got PUSI (pf %d, ts_remain %d). Flushing incomplete payload.\n",
+ priv->ts_count, priv->ule_sndu_remain, ts[4], ts_remain);
+ dev_kfree_skb(priv->ule_skb);
+ /* Prepare for next SNDU. */
+ reset_ule(priv);
+ /* Resync: go to where pointer field points to: start of next ULE SNDU. */
+ from_where += ts[4];
+ ts_remain -= ts[4];
+ }
+ }
+ }
+
+ /* Check if new payload needs to be started. */
+ if (priv->ule_skb == NULL) {
+ /* Start a new payload with skb.
+ * Find ULE header. It is only guaranteed that the
+ * length field (2 bytes) is contained in the current
+ * TS.
+ * Check ts_remain has to be >= 2 here. */
+ if (ts_remain < 2) {
+ printk(KERN_WARNING "Invalid payload packing: only %d "
+ "bytes left in TS. Resyncing.\n", ts_remain);
+ priv->ule_sndu_len = 0;
+ priv->need_pusi = 1;
+ continue;
+ }
+
+ if (! priv->ule_sndu_len) {
+ /* Got at least two bytes, thus extrace the SNDU length. */
+ priv->ule_sndu_len = from_where[0] << 8 | from_where[1];
+ if (priv->ule_sndu_len & 0x8000) {
+ /* D-Bit is set: no dest mac present. */
+ priv->ule_sndu_len &= 0x7FFF;
+ priv->ule_dbit = 1;
+ } else
+ priv->ule_dbit = 0;
+
+ if (priv->ule_sndu_len < 5) {
+ printk(KERN_WARNING "%lu: Invalid ULE SNDU length %u. "
+ "Resyncing.\n", priv->ts_count, priv->ule_sndu_len);
+ priv->stats.rx_errors++;
+ priv->stats.rx_length_errors++;
+ priv->ule_sndu_len = 0;
+ priv->need_pusi = 1;
+ new_ts = 1;
+ ts += TS_SZ;
+ priv->ts_count++;
+ continue;
+ }
+ ts_remain -= 2; /* consume the 2 bytes SNDU length. */
+ from_where += 2;
+ }
+
+ /*
+ * State of current TS:
+ * ts_remain (remaining bytes in the current TS cell)
+ * 0 ule_type is not available now, we need the next TS cell
+ * 1 the first byte of the ule_type is present
+ * >=2 full ULE header present, maybe some payload data as well.
+ */
+ switch (ts_remain) {
+ case 1:
+ priv->ule_sndu_type = from_where[0] << 8;
+ priv->ule_sndu_type_1 = 1; /* first byte of ule_type is set. */
+ ts_remain -= 1; from_where += 1;
+ /* Continue w/ next TS. */
+ case 0:
+ new_ts = 1;
+ ts += TS_SZ;
+ priv->ts_count++;
+ continue;
+
+ default: /* complete ULE header is present in current TS. */
+ /* Extract ULE type field. */
+ if (priv->ule_sndu_type_1) {
+ priv->ule_sndu_type |= from_where[0];
+ from_where += 1; /* points to payload start. */
+ ts_remain -= 1;
+ } else {
+ /* Complete type is present in new TS. */
+ priv->ule_sndu_type = from_where[0] << 8 | from_where[1];
+ from_where += 2; /* points to payload start. */
+ ts_remain -= 2;
+ }
+ break;
+ }
+
+ /* Allocate the skb (decoder target buffer) with the correct size, as follows:
+ * prepare for the largest case: bridged SNDU with MAC address (dbit = 0). */
+ priv->ule_skb = dev_alloc_skb( priv->ule_sndu_len + ETH_HLEN + ETH_ALEN );
+ if (priv->ule_skb == NULL) {
+ printk(KERN_NOTICE "%s: Memory squeeze, dropping packet.\n",
+ dev->name);
+ ((struct dvb_net_priv *)dev->priv)->stats.rx_dropped++;
+ return;
+ }
+
+ /* This includes the CRC32 _and_ dest mac, if !dbit. */
+ priv->ule_sndu_remain = priv->ule_sndu_len;
+ priv->ule_skb->dev = dev;
+ /* Leave space for Ethernet or bridged SNDU header (eth hdr plus one MAC addr). */
+ skb_reserve( priv->ule_skb, ETH_HLEN + ETH_ALEN );
+ }
+
+ /* Copy data into our current skb. */
+ how_much = min(priv->ule_sndu_remain, (int)ts_remain);
+ memcpy(skb_put(priv->ule_skb, how_much), from_where, how_much);
+ priv->ule_sndu_remain -= how_much;
+ ts_remain -= how_much;
+ from_where += how_much;
+
+ /* Check for complete payload. */
+ if (priv->ule_sndu_remain <= 0) {
+ /* Check CRC32, we've got it in our skb already. */
+ unsigned short ulen = htons(priv->ule_sndu_len);
+ unsigned short utype = htons(priv->ule_sndu_type);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
+ const u8 *tail;
+#endif
+ struct kvec iov[3] = {
+ { &ulen, sizeof ulen },
+ { &utype, sizeof utype },
+ { priv->ule_skb->data, priv->ule_skb->len - 4 }
+ };
+ u32 ule_crc = ~0L, expected_crc;
+ if (priv->ule_dbit) {
+ /* Set D-bit for CRC32 verification,
+ * if it was set originally. */
+ ulen |= 0x0080;
+ }
+
+ ule_crc = iov_crc32(ule_crc, iov, 3);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
+ expected_crc = *((u8 *)priv->ule_skb->tail - 4) << 24 |
+ *((u8 *)priv->ule_skb->tail - 3) << 16 |
+ *((u8 *)priv->ule_skb->tail - 2) << 8 |
+ *((u8 *)priv->ule_skb->tail - 1);
+#else
+ tail = skb_tail_pointer(priv->ule_skb);
+ expected_crc = *(tail - 4) << 24 |
+ *(tail - 3) << 16 |
+ *(tail - 2) << 8 |
+ *(tail - 1);
+#endif
+ if (ule_crc != expected_crc) {
+ printk(KERN_WARNING "%lu: CRC32 check FAILED: %08x / %08x, SNDU len %d type %#x, ts_remain %d, next 2: %x.\n",
+ priv->ts_count, ule_crc, expected_crc, priv->ule_sndu_len, priv->ule_sndu_type, ts_remain, ts_remain > 2 ? *(unsigned short *)from_where : 0);
+
+#ifdef ULE_DEBUG
+ hexdump( iov[0].iov_base, iov[0].iov_len );
+ hexdump( iov[1].iov_base, iov[1].iov_len );
+ hexdump( iov[2].iov_base, iov[2].iov_len );
+
+ if (ule_where == ule_hist) {
+ hexdump( &ule_hist[98*TS_SZ], TS_SZ );
+ hexdump( &ule_hist[99*TS_SZ], TS_SZ );
+ } else if (ule_where == &ule_hist[TS_SZ]) {
+ hexdump( &ule_hist[99*TS_SZ], TS_SZ );
+ hexdump( ule_hist, TS_SZ );
+ } else {
+ hexdump( ule_where - TS_SZ - TS_SZ, TS_SZ );
+ hexdump( ule_where - TS_SZ, TS_SZ );
+ }
+ ule_dump = 1;
+#endif
+
+ priv->stats.rx_errors++;
+ priv->stats.rx_crc_errors++;
+ dev_kfree_skb(priv->ule_skb);
+ } else {
+ /* CRC32 verified OK. */
+ u8 dest_addr[ETH_ALEN];
+ static const u8 bc_addr[ETH_ALEN] =
+ { [ 0 ... ETH_ALEN-1] = 0xff };
+
+ /* CRC32 was OK. Remove it from skb. */
+ priv->ule_skb->tail -= 4;
+ priv->ule_skb->len -= 4;
+
+ if (!priv->ule_dbit) {
+ /*
+ * The destination MAC address is the
+ * next data in the skb. It comes
+ * before any extension headers.
+ *
+ * Check if the payload of this SNDU
+ * should be passed up the stack.
+ */
+ register int drop = 0;
+ if (priv->rx_mode != RX_MODE_PROMISC) {
+ if (priv->ule_skb->data[0] & 0x01) {
+ /* multicast or broadcast */
+ if (memcmp(priv->ule_skb->data, bc_addr, ETH_ALEN)) {
+ /* multicast */
+ if (priv->rx_mode == RX_MODE_MULTI) {
+ int i;
+ for(i = 0; i < priv->multi_num && memcmp(priv->ule_skb->data, priv->multi_macs[i], ETH_ALEN); i++)
+ ;
+ if (i == priv->multi_num)
+ drop = 1;
+ } else if (priv->rx_mode != RX_MODE_ALL_MULTI)
+ drop = 1; /* no broadcast; */
+ /* else: all multicast mode: accept all multicast packets */
+ }
+ /* else: broadcast */
+ }
+ else if (memcmp(priv->ule_skb->data, dev->dev_addr, ETH_ALEN))
+ drop = 1;
+ /* else: destination address matches the MAC address of our receiver device */
+ }
+ /* else: promiscious mode; pass everything up the stack */
+
+ if (drop) {
+#ifdef ULE_DEBUG
+ dprintk("Dropping SNDU: MAC destination address does not match: dest addr: "MAC_ADDR_PRINTFMT", dev addr: "MAC_ADDR_PRINTFMT"\n",
+ MAX_ADDR_PRINTFMT_ARGS(priv->ule_skb->data), MAX_ADDR_PRINTFMT_ARGS(dev->dev_addr));
+#endif
+ dev_kfree_skb(priv->ule_skb);
+ goto sndu_done;
+ }
+ else
+ {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
+ memcpy(dest_addr, priv->ule_skb->data, ETH_ALEN);
+#else
+ skb_copy_from_linear_data(priv->ule_skb,
+ dest_addr,
+ ETH_ALEN);
+#endif
+ skb_pull(priv->ule_skb, ETH_ALEN);
+ }
+ }
+
+ /* Handle ULE Extension Headers. */
+ if (priv->ule_sndu_type < 1536) {
+ /* There is an extension header. Handle it accordingly. */
+ int l = handle_ule_extensions(priv);
+ if (l < 0) {
+ /* Mandatory extension header unknown or TEST SNDU. Drop it. */
+ // printk( KERN_WARNING "Dropping SNDU, extension headers.\n" );
+ dev_kfree_skb(priv->ule_skb);
+ goto sndu_done;
+ }
+ skb_pull(priv->ule_skb, l);
+ }
+
+ /*
+ * Construct/assure correct ethernet header.
+ * Note: in bridged mode (priv->ule_bridged !=
+ * 0) we already have the (original) ethernet
+ * header at the start of the payload (after
+ * optional dest. address and any extension
+ * headers).
+ */
+
+ if (!priv->ule_bridged) {
+ skb_push(priv->ule_skb, ETH_HLEN);
+ ethh = (struct ethhdr *)priv->ule_skb->data;
+ if (!priv->ule_dbit) {
+ /* dest_addr buffer is only valid if priv->ule_dbit == 0 */
+ memcpy(ethh->h_dest, dest_addr, ETH_ALEN);
+ memset(ethh->h_source, 0, ETH_ALEN);
+ }
+ else /* zeroize source and dest */
+ memset( ethh, 0, ETH_ALEN*2 );
+
+ ethh->h_proto = htons(priv->ule_sndu_type);
+ }
+ /* else: skb is in correct state; nothing to do. */
+ priv->ule_bridged = 0;
+
+ /* Stuff into kernel's protocol stack. */
+ priv->ule_skb->protocol = dvb_net_eth_type_trans(priv->ule_skb, dev);
+ /* If D-bit is set (i.e. destination MAC address not present),
+ * receive the packet anyhow. */
+ /* if (priv->ule_dbit && skb->pkt_type == PACKET_OTHERHOST)
+ priv->ule_skb->pkt_type = PACKET_HOST; */
+ priv->stats.rx_packets++;
+ priv->stats.rx_bytes += priv->ule_skb->len;
+ netif_rx(priv->ule_skb);
+ }
+ sndu_done:
+ /* Prepare for next SNDU. */
+ reset_ule(priv);
+ }
+
+ /* More data in current TS (look at the bytes following the CRC32)? */
+ if (ts_remain >= 2 && *((unsigned short *)from_where) != 0xFFFF) {
+ /* Next ULE SNDU starts right there. */
+ new_ts = 0;
+ priv->ule_skb = NULL;
+ priv->ule_sndu_type_1 = 0;
+ priv->ule_sndu_len = 0;
+ // printk(KERN_WARNING "More data in current TS: [%#x %#x %#x %#x]\n",
+ // *(from_where + 0), *(from_where + 1),
+ // *(from_where + 2), *(from_where + 3));
+ // printk(KERN_WARNING "ts @ %p, stopped @ %p:\n", ts, from_where + 0);
+ // hexdump(ts, 188);
+ } else {
+ new_ts = 1;
+ ts += TS_SZ;
+ priv->ts_count++;
+ if (priv->ule_skb == NULL) {
+ priv->need_pusi = 1;
+ priv->ule_sndu_type_1 = 0;
+ priv->ule_sndu_len = 0;
+ }
+ }
+ } /* for all available TS cells */
+}
+
+static int dvb_net_ts_callback(const u8 *buffer1, size_t buffer1_len,
+ const u8 *buffer2, size_t buffer2_len,
+ struct dmx_ts_feed *feed, enum dmx_success success)
+{
+ struct net_device *dev = feed->priv;
+
+ if (buffer2 != 0)
+ printk(KERN_WARNING "buffer2 not 0: %p.\n", buffer2);
+ if (buffer1_len > 32768)
+ printk(KERN_WARNING "length > 32k: %zu.\n", buffer1_len);
+ /* printk("TS callback: %u bytes, %u TS cells @ %p.\n",
+ buffer1_len, buffer1_len / TS_SZ, buffer1); */
+ dvb_net_ule(dev, buffer1, buffer1_len);
+ return 0;
+}
+
+
+static void dvb_net_sec(struct net_device *dev,
+ const u8 *pkt, int pkt_len)
+{
+ u8 *eth;
+ struct sk_buff *skb;
+ struct net_device_stats *stats = &(((struct dvb_net_priv *) dev->priv)->stats);
+ int snap = 0;
+
+ /* note: pkt_len includes a 32bit checksum */
+ if (pkt_len < 16) {
+ printk("%s: IP/MPE packet length = %d too small.\n",
+ dev->name, pkt_len);
+ stats->rx_errors++;
+ stats->rx_length_errors++;
+ return;
+ }
+/* it seems some ISPs manage to screw up here, so we have to
+ * relax the error checks... */
+#if 0 /* keep */
+ if ((pkt[5] & 0xfd) != 0xc1) {
+ /* drop scrambled or broken packets */
+#else
+ if ((pkt[5] & 0x3c) != 0x00) {
+ /* drop scrambled */
+#endif
+ stats->rx_errors++;
+ stats->rx_crc_errors++;
+ return;
+ }
+ if (pkt[5] & 0x02) {
+ /* handle LLC/SNAP, see rfc-1042 */
+ if (pkt_len < 24 || memcmp(&pkt[12], "\xaa\xaa\x03\0\0\0", 6)) {
+ stats->rx_dropped++;
+ return;
+ }
+ snap = 8;
+ }
+ if (pkt[7]) {
+ /* FIXME: assemble datagram from multiple sections */
+ stats->rx_errors++;
+ stats->rx_frame_errors++;
+ return;
+ }
+
+ /* we have 14 byte ethernet header (ip header follows);
+ * 12 byte MPE header; 4 byte checksum; + 2 byte alignment, 8 byte LLC/SNAP
+ */
+ if (!(skb = dev_alloc_skb(pkt_len - 4 - 12 + 14 + 2 - snap))) {
+ //printk(KERN_NOTICE "%s: Memory squeeze, dropping packet.\n", dev->name);
+ stats->rx_dropped++;
+ return;
+ }
+ skb_reserve(skb, 2); /* longword align L3 header */
+ skb->dev = dev;
+
+ /* copy L3 payload */
+ eth = (u8 *) skb_put(skb, pkt_len - 12 - 4 + 14 - snap);
+ memcpy(eth + 14, pkt + 12 + snap, pkt_len - 12 - 4 - snap);
+
+ /* create ethernet header: */
+ eth[0]=pkt[0x0b];
+ eth[1]=pkt[0x0a];
+ eth[2]=pkt[0x09];
+ eth[3]=pkt[0x08];
+ eth[4]=pkt[0x04];
+ eth[5]=pkt[0x03];
+
+ eth[6]=eth[7]=eth[8]=eth[9]=eth[10]=eth[11]=0;
+
+ if (snap) {
+ eth[12] = pkt[18];
+ eth[13] = pkt[19];
+ } else {
+ /* protocol numbers are from rfc-1700 or
+ * http://www.iana.org/assignments/ethernet-numbers
+ */
+ if (pkt[12] >> 4 == 6) { /* version field from IP header */
+ eth[12] = 0x86; /* IPv6 */
+ eth[13] = 0xdd;
+ } else {
+ eth[12] = 0x08; /* IPv4 */
+ eth[13] = 0x00;
+ }
+ }
+
+ skb->protocol = dvb_net_eth_type_trans(skb, dev);
+
+ stats->rx_packets++;
+ stats->rx_bytes+=skb->len;
+ netif_rx(skb);
+}
+
+static int dvb_net_sec_callback(const u8 *buffer1, size_t buffer1_len,
+ const u8 *buffer2, size_t buffer2_len,
+ struct dmx_section_filter *filter,
+ enum dmx_success success)
+{
+ struct net_device *dev = filter->priv;
+
+ /**
+ * we rely on the DVB API definition where exactly one complete
+ * section is delivered in buffer1
+ */
+ dvb_net_sec (dev, buffer1, buffer1_len);
+ return 0;
+}
+
+static int dvb_net_tx(struct sk_buff *skb, struct net_device *dev)
+{
+ dev_kfree_skb(skb);
+ return 0;
+}
+
+static u8 mask_normal[6]={0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+static u8 mask_allmulti[6]={0xff, 0xff, 0xff, 0x00, 0x00, 0x00};
+static u8 mac_allmulti[6]={0x01, 0x00, 0x5e, 0x00, 0x00, 0x00};
+static u8 mask_promisc[6]={0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+
+static int dvb_net_filter_sec_set(struct net_device *dev,
+ struct dmx_section_filter **secfilter,
+ u8 *mac, u8 *mac_mask)
+{
+ struct dvb_net_priv *priv = dev->priv;
+ int ret;
+
+ *secfilter=NULL;
+ ret = priv->secfeed->allocate_filter(priv->secfeed, secfilter);
+ if (ret<0) {
+ printk("%s: could not get filter\n", dev->name);
+ return ret;
+ }
+
+ (*secfilter)->priv=(void *) dev;
+
+ memset((*secfilter)->filter_value, 0x00, DMX_MAX_FILTER_SIZE);
+ memset((*secfilter)->filter_mask, 0x00, DMX_MAX_FILTER_SIZE);
+ memset((*secfilter)->filter_mode, 0xff, DMX_MAX_FILTER_SIZE);
+
+ (*secfilter)->filter_value[0]=0x3e;
+ (*secfilter)->filter_value[3]=mac[5];
+ (*secfilter)->filter_value[4]=mac[4];
+ (*secfilter)->filter_value[8]=mac[3];
+ (*secfilter)->filter_value[9]=mac[2];
+ (*secfilter)->filter_value[10]=mac[1];
+ (*secfilter)->filter_value[11]=mac[0];
+
+ (*secfilter)->filter_mask[0] = 0xff;
+ (*secfilter)->filter_mask[3] = mac_mask[5];
+ (*secfilter)->filter_mask[4] = mac_mask[4];
+ (*secfilter)->filter_mask[8] = mac_mask[3];
+ (*secfilter)->filter_mask[9] = mac_mask[2];
+ (*secfilter)->filter_mask[10] = mac_mask[1];
+ (*secfilter)->filter_mask[11]=mac_mask[0];
+
+ dprintk("%s: filter mac=%02x %02x %02x %02x %02x %02x\n",
+ dev->name, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
+ dprintk("%s: filter mask=%02x %02x %02x %02x %02x %02x\n",
+ dev->name, mac_mask[0], mac_mask[1], mac_mask[2],
+ mac_mask[3], mac_mask[4], mac_mask[5]);
+
+ return 0;
+}
+
+static int dvb_net_feed_start(struct net_device *dev)
+{
+ int ret = 0, i;
+ struct dvb_net_priv *priv = dev->priv;
+ struct dmx_demux *demux = priv->demux;
+ unsigned char *mac = (unsigned char *) dev->dev_addr;
+
+ dprintk("%s: rx_mode %i\n", __FUNCTION__, priv->rx_mode);
+ mutex_lock(&priv->mutex);
+ if (priv->tsfeed || priv->secfeed || priv->secfilter || priv->multi_secfilter[0])
+ printk("%s: BUG %d\n", __FUNCTION__, __LINE__);
+
+ priv->secfeed=NULL;
+ priv->secfilter=NULL;
+ priv->tsfeed = NULL;
+
+ if (priv->feedtype == DVB_NET_FEEDTYPE_MPE) {
+ dprintk("%s: alloc secfeed\n", __FUNCTION__);
+ ret=demux->allocate_section_feed(demux, &priv->secfeed,
+ dvb_net_sec_callback);
+ if (ret<0) {
+ printk("%s: could not allocate section feed\n", dev->name);
+ goto error;
+ }
+
+ ret = priv->secfeed->set(priv->secfeed, priv->pid, 32768, 1);
+
+ if (ret<0) {
+ printk("%s: could not set section feed\n", dev->name);
+ priv->demux->release_section_feed(priv->demux, priv->secfeed);
+ priv->secfeed=NULL;
+ goto error;
+ }
+
+ if (priv->rx_mode != RX_MODE_PROMISC) {
+ dprintk("%s: set secfilter\n", __FUNCTION__);
+ dvb_net_filter_sec_set(dev, &priv->secfilter, mac, mask_normal);
+ }
+
+ switch (priv->rx_mode) {
+ case RX_MODE_MULTI:
+ for (i = 0; i < priv->multi_num; i++) {
+ dprintk("%s: set multi_secfilter[%d]\n", __FUNCTION__, i);
+ dvb_net_filter_sec_set(dev, &priv->multi_secfilter[i],
+ priv->multi_macs[i], mask_normal);
+ }
+ break;
+ case RX_MODE_ALL_MULTI:
+ priv->multi_num=1;
+ dprintk("%s: set multi_secfilter[0]\n", __FUNCTION__);
+ dvb_net_filter_sec_set(dev, &priv->multi_secfilter[0],
+ mac_allmulti, mask_allmulti);
+ break;
+ case RX_MODE_PROMISC:
+ priv->multi_num=0;
+ dprintk("%s: set secfilter\n", __FUNCTION__);
+ dvb_net_filter_sec_set(dev, &priv->secfilter, mac, mask_promisc);
+ break;
+ }
+
+ dprintk("%s: start filtering\n", __FUNCTION__);
+ priv->secfeed->start_filtering(priv->secfeed);
+ } else if (priv->feedtype == DVB_NET_FEEDTYPE_ULE) {
+ struct timespec timeout = { 0, 10000000 }; // 10 msec
+
+ /* we have payloads encapsulated in TS */
+ dprintk("%s: alloc tsfeed\n", __FUNCTION__);
+ ret = demux->allocate_ts_feed(demux, &priv->tsfeed, dvb_net_ts_callback);
+ if (ret < 0) {
+ printk("%s: could not allocate ts feed\n", dev->name);
+ goto error;
+ }
+
+ /* Set netdevice pointer for ts decaps callback. */
+ priv->tsfeed->priv = (void *)dev;
+ ret = priv->tsfeed->set(priv->tsfeed,
+ priv->pid, /* pid */
+ TS_PACKET, /* type */
+ DMX_TS_PES_OTHER, /* pes type */
+ 32768, /* circular buffer size */
+ timeout /* timeout */
+ );
+
+ if (ret < 0) {
+ printk("%s: could not set ts feed\n", dev->name);
+ priv->demux->release_ts_feed(priv->demux, priv->tsfeed);
+ priv->tsfeed = NULL;
+ goto error;
+ }
+
+ dprintk("%s: start filtering\n", __FUNCTION__);
+ priv->tsfeed->start_filtering(priv->tsfeed);
+ } else
+ ret = -EINVAL;
+
+error:
+ mutex_unlock(&priv->mutex);
+ return ret;
+}
+
+static int dvb_net_feed_stop(struct net_device *dev)
+{
+ struct dvb_net_priv *priv = dev->priv;
+ int i, ret = 0;
+
+ dprintk("%s\n", __FUNCTION__);
+ mutex_lock(&priv->mutex);
+ if (priv->feedtype == DVB_NET_FEEDTYPE_MPE) {
+ if (priv->secfeed) {
+ if (priv->secfeed->is_filtering) {
+ dprintk("%s: stop secfeed\n", __FUNCTION__);
+ priv->secfeed->stop_filtering(priv->secfeed);
+ }
+
+ if (priv->secfilter) {
+ dprintk("%s: release secfilter\n", __FUNCTION__);
+ priv->secfeed->release_filter(priv->secfeed,
+ priv->secfilter);
+ priv->secfilter=NULL;
+ }
+
+ for (i=0; i<priv->multi_num; i++) {
+ if (priv->multi_secfilter[i]) {
+ dprintk("%s: release multi_filter[%d]\n",
+ __FUNCTION__, i);
+ priv->secfeed->release_filter(priv->secfeed,
+ priv->multi_secfilter[i]);
+ priv->multi_secfilter[i] = NULL;
+ }
+ }
+
+ priv->demux->release_section_feed(priv->demux, priv->secfeed);
+ priv->secfeed = NULL;
+ } else
+ printk("%s: no feed to stop\n", dev->name);
+ } else if (priv->feedtype == DVB_NET_FEEDTYPE_ULE) {
+ if (priv->tsfeed) {
+ if (priv->tsfeed->is_filtering) {
+ dprintk("%s: stop tsfeed\n", __FUNCTION__);
+ priv->tsfeed->stop_filtering(priv->tsfeed);
+ }
+ priv->demux->release_ts_feed(priv->demux, priv->tsfeed);
+ priv->tsfeed = NULL;
+ }
+ else
+ printk("%s: no ts feed to stop\n", dev->name);
+ } else
+ ret = -EINVAL;
+ mutex_unlock(&priv->mutex);
+ return ret;
+}
+
+
+static int dvb_set_mc_filter (struct net_device *dev, struct dev_mc_list *mc)
+{
+ struct dvb_net_priv *priv = dev->priv;
+
+ if (priv->multi_num == DVB_NET_MULTICAST_MAX)
+ return -ENOMEM;
+
+ memcpy(priv->multi_macs[priv->multi_num], mc->dmi_addr, 6);
+
+ priv->multi_num++;
+ return 0;
+}
+
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+static void wq_set_multicast_list (void *data)
+#else
+static void wq_set_multicast_list (struct work_struct *work)
+#endif
+{
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+ struct net_device *dev = data;
+ struct dvb_net_priv *priv = dev->priv;
+#else
+ struct dvb_net_priv *priv =
+ container_of(work, struct dvb_net_priv, set_multicast_list_wq);
+ struct net_device *dev = priv->net;
+#endif
+
+ dvb_net_feed_stop(dev);
+ priv->rx_mode = RX_MODE_UNI;
+#ifdef OLD_XMIT_LOCK /* Kernels equal or lower than 2.6.17 */
+ spin_lock_bh(&dev->xmit_lock);
+#else
+// netif_tx_lock_bh(dev);
+#endif
+
+ if (dev->flags & IFF_PROMISC) {
+ dprintk("%s: promiscuous mode\n", dev->name);
+ priv->rx_mode = RX_MODE_PROMISC;
+ } else if ((dev->flags & IFF_ALLMULTI)) {
+ dprintk("%s: allmulti mode\n", dev->name);
+ priv->rx_mode = RX_MODE_ALL_MULTI;
+ } else if (dev->mc_count) {
+ int mci;
+ struct dev_mc_list *mc;
+
+ dprintk("%s: set_mc_list, %d entries\n",
+ dev->name, dev->mc_count);
+
+ priv->rx_mode = RX_MODE_MULTI;
+ priv->multi_num = 0;
+
+ for (mci = 0, mc=dev->mc_list;
+ mci < dev->mc_count;
+ mc = mc->next, mci++) {
+ dvb_set_mc_filter(dev, mc);
+ }
+ }
+
+#ifdef OLD_XMIT_LOCK /* Kernels equal or lower than 2.6.17 */
+ spin_unlock_bh(&dev->xmit_lock);
+#else
+// netif_tx_unlock_bh(dev);
+#endif
+ dvb_net_feed_start(dev);
+}
+
+
+static void dvb_net_set_multicast_list (struct net_device *dev)
+{
+ struct dvb_net_priv *priv = dev->priv;
+ schedule_work(&priv->set_multicast_list_wq);
+}
+
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+static void wq_restart_net_feed (void *data)
+#else
+static void wq_restart_net_feed (struct work_struct *work)
+#endif
+{
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+ struct net_device *dev = data;
+#else
+ struct dvb_net_priv *priv =
+ container_of(work, struct dvb_net_priv, restart_net_feed_wq);
+ struct net_device *dev = priv->net;
+#endif
+
+ if (netif_running(dev)) {
+ dvb_net_feed_stop(dev);
+ dvb_net_feed_start(dev);
+ }
+}
+
+
+static int dvb_net_set_mac (struct net_device *dev, void *p)
+{
+ struct dvb_net_priv *priv = dev->priv;
+ struct sockaddr *addr=p;
+
+ memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
+
+ if (netif_running(dev))
+ schedule_work(&priv->restart_net_feed_wq);
+
+ return 0;
+}
+
+
+static int dvb_net_open(struct net_device *dev)
+{
+ struct dvb_net_priv *priv = dev->priv;
+
+ priv->in_use++;
+ dvb_net_feed_start(dev);
+ return 0;
+}
+
+
+static int dvb_net_stop(struct net_device *dev)
+{
+ struct dvb_net_priv *priv = dev->priv;
+
+ priv->in_use--;
+ return dvb_net_feed_stop(dev);
+}
+
+static struct net_device_stats * dvb_net_get_stats(struct net_device *dev)
+{
+ return &((struct dvb_net_priv*) dev->priv)->stats;
+}
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+static const struct header_ops dvb_header_ops = {
+ .create = eth_header,
+ .parse = eth_header_parse,
+ .rebuild = eth_rebuild_header,
+};
+#endif
+
+static void dvb_net_setup(struct net_device *dev)
+{
+ ether_setup(dev);
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ dev->header_ops = &dvb_header_ops;
+#else
+ dev->hard_header_cache = NULL;
+#endif
+ dev->open = dvb_net_open;
+ dev->stop = dvb_net_stop;
+ dev->hard_start_xmit = dvb_net_tx;
+ dev->get_stats = dvb_net_get_stats;
+ dev->set_multicast_list = dvb_net_set_multicast_list;
+ dev->set_mac_address = dvb_net_set_mac;
+ dev->mtu = 4096;
+ dev->mc_count = 0;
+
+ dev->flags |= IFF_NOARP;
+}
+
+static int get_if(struct dvb_net *dvbnet)
+{
+ int i;
+
+ for (i=0; i<DVB_NET_DEVICES_MAX; i++)
+ if (!dvbnet->state[i])
+ break;
+
+ if (i == DVB_NET_DEVICES_MAX)
+ return -1;
+
+ dvbnet->state[i]=1;
+ return i;
+}
+
+static int dvb_net_add_if(struct dvb_net *dvbnet, u16 pid, u8 feedtype)
+{
+ struct net_device *net;
+ struct dvb_net_priv *priv;
+ int result;
+ int if_num;
+
+ if (feedtype != DVB_NET_FEEDTYPE_MPE && feedtype != DVB_NET_FEEDTYPE_ULE)
+ return -EINVAL;
+ if ((if_num = get_if(dvbnet)) < 0)
+ return -EINVAL;
+
+ net = alloc_netdev(sizeof(struct dvb_net_priv), "dvb", dvb_net_setup);
+ if (!net)
+ return -ENOMEM;
+
+ if (dvbnet->dvbdev->id)
+ snprintf(net->name, IFNAMSIZ, "dvb%d%u%d",
+ dvbnet->dvbdev->adapter->num, dvbnet->dvbdev->id, if_num);
+ else
+ /* compatibility fix to keep dvb0_0 format */
+ snprintf(net->name, IFNAMSIZ, "dvb%d_%d",
+ dvbnet->dvbdev->adapter->num, if_num);
+
+ net->addr_len = 6;
+ memcpy(net->dev_addr, dvbnet->dvbdev->adapter->proposed_mac, 6);
+
+ dvbnet->device[if_num] = net;
+
+ priv = net->priv;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
+ priv->net = net;
+#endif
+ priv->demux = dvbnet->demux;
+ priv->pid = pid;
+ priv->rx_mode = RX_MODE_UNI;
+ priv->need_pusi = 1;
+ priv->tscc = 0;
+ priv->feedtype = feedtype;
+ reset_ule(priv);
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+ INIT_WORK(&priv->set_multicast_list_wq, wq_set_multicast_list, net);
+ INIT_WORK(&priv->restart_net_feed_wq, wq_restart_net_feed, net);
+#else
+ INIT_WORK(&priv->set_multicast_list_wq, wq_set_multicast_list);
+ INIT_WORK(&priv->restart_net_feed_wq, wq_restart_net_feed);
+#endif
+ mutex_init(&priv->mutex);
+
+ net->base_addr = pid;
+
+ if ((result = register_netdev(net)) < 0) {
+ dvbnet->device[if_num] = NULL;
+ free_netdev(net);
+ return result;
+ }
+ printk("dvb_net: created network interface %s\n", net->name);
+
+ return if_num;
+}
+
+static int dvb_net_remove_if(struct dvb_net *dvbnet, unsigned long num)
+{
+ struct net_device *net = dvbnet->device[num];
+ struct dvb_net_priv *priv;
+
+ if (!dvbnet->state[num])
+ return -EINVAL;
+ priv = net->priv;
+ if (priv->in_use)
+ return -EBUSY;
+
+ dvb_net_stop(net);
+ flush_scheduled_work();
+ printk("dvb_net: removed network interface %s\n", net->name);
+ unregister_netdev(net);
+ dvbnet->state[num]=0;
+ dvbnet->device[num] = NULL;
+ free_netdev(net);
+
+ return 0;
+}
+
+static int dvb_net_do_ioctl(struct inode *inode, struct file *file,
+ unsigned int cmd, void *parg)
+{
+ struct dvb_device *dvbdev = file->private_data;
+ struct dvb_net *dvbnet = dvbdev->priv;
+
+ if (((file->f_flags&O_ACCMODE)==O_RDONLY))
+ return -EPERM;
+
+ switch (cmd) {
+ case NET_ADD_IF:
+ {
+ struct dvb_net_if *dvbnetif = parg;
+ int result;
+
+ if (!capable(CAP_SYS_ADMIN))
+ return -EPERM;
+
+ if (!try_module_get(dvbdev->adapter->module))
+ return -EPERM;
+
+ result=dvb_net_add_if(dvbnet, dvbnetif->pid, dvbnetif->feedtype);
+ if (result<0) {
+ module_put(dvbdev->adapter->module);
+ return result;
+ }
+ dvbnetif->if_num=result;
+ break;
+ }
+ case NET_GET_IF:
+ {
+ struct net_device *netdev;
+ struct dvb_net_priv *priv_data;
+ struct dvb_net_if *dvbnetif = parg;
+
+ if (dvbnetif->if_num >= DVB_NET_DEVICES_MAX ||
+ !dvbnet->state[dvbnetif->if_num])
+ return -EINVAL;
+
+ netdev = dvbnet->device[dvbnetif->if_num];
+
+ priv_data = netdev->priv;
+ dvbnetif->pid=priv_data->pid;
+ dvbnetif->feedtype=priv_data->feedtype;
+ break;
+ }
+ case NET_REMOVE_IF:
+ {
+ int ret;
+
+ if (!capable(CAP_SYS_ADMIN))
+ return -EPERM;
+ if ((unsigned long) parg >= DVB_NET_DEVICES_MAX)
+ return -EINVAL;
+ ret = dvb_net_remove_if(dvbnet, (unsigned long) parg);
+ if (!ret)
+ module_put(dvbdev->adapter->module);
+ return ret;
+ }
+
+ /* binary compatiblity cruft */
+ case __NET_ADD_IF_OLD:
+ {
+ struct __dvb_net_if_old *dvbnetif = parg;
+ int result;
+
+ if (!capable(CAP_SYS_ADMIN))
+ return -EPERM;
+
+ if (!try_module_get(dvbdev->adapter->module))
+ return -EPERM;
+
+ result=dvb_net_add_if(dvbnet, dvbnetif->pid, DVB_NET_FEEDTYPE_MPE);
+ if (result<0) {
+ module_put(dvbdev->adapter->module);
+ return result;
+ }
+ dvbnetif->if_num=result;
+ break;
+ }
+ case __NET_GET_IF_OLD:
+ {
+ struct net_device *netdev;
+ struct dvb_net_priv *priv_data;
+ struct __dvb_net_if_old *dvbnetif = parg;
+
+ if (dvbnetif->if_num >= DVB_NET_DEVICES_MAX ||
+ !dvbnet->state[dvbnetif->if_num])
+ return -EINVAL;
+
+ netdev = dvbnet->device[dvbnetif->if_num];
+
+ priv_data = netdev->priv;
+ dvbnetif->pid=priv_data->pid;
+ break;
+ }
+ default:
+ return -ENOTTY;
+ }
+ return 0;
+}
+
+static int dvb_net_ioctl(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg)
+{
+ return dvb_usercopy(inode, file, cmd, arg, dvb_net_do_ioctl);
+}
+
+static int dvb_net_close(struct inode *inode, struct file *file)
+{
+ struct dvb_device *dvbdev = file->private_data;
+ struct dvb_net *dvbnet = dvbdev->priv;
+
+ dvb_generic_release(inode, file);
+
+ if(dvbdev->users == 1 && dvbnet->exit == 1) {
+ fops_put(file->f_op);
+ file->f_op = NULL;
+ wake_up(&dvbdev->wait_queue);
+ }
+ return 0;
+}
+
+
+static struct file_operations dvb_net_fops = {
+ .owner = THIS_MODULE,
+ .ioctl = dvb_net_ioctl,
+ .open = dvb_generic_open,
+ .release = dvb_net_close,
+};
+
+static struct dvb_device dvbdev_net = {
+ .priv = NULL,
+ .users = 1,
+ .writers = 1,
+ .fops = &dvb_net_fops,
+};
+
+
+void dvb_net_release (struct dvb_net *dvbnet)
+{
+ int i;
+
+ dvbnet->exit = 1;
+ if (dvbnet->dvbdev->users < 1)
+ wait_event(dvbnet->dvbdev->wait_queue,
+ dvbnet->dvbdev->users==1);
+
+ dvb_unregister_device(dvbnet->dvbdev);
+
+ for (i=0; i<DVB_NET_DEVICES_MAX; i++) {
+ if (!dvbnet->state[i])
+ continue;
+ dvb_net_remove_if(dvbnet, i);
+ }
+}
+EXPORT_SYMBOL(dvb_net_release);
+
+
+int dvb_net_init (struct dvb_adapter *adap, struct dvb_net *dvbnet,
+ struct dmx_demux *dmx)
+{
+ int i;
+
+ dvbnet->demux = dmx;
+
+ for (i=0; i<DVB_NET_DEVICES_MAX; i++)
+ dvbnet->state[i] = 0;
+
+ dvb_register_device (adap, &dvbnet->dvbdev, &dvbdev_net,
+ dvbnet, DVB_DEVICE_NET);
+
+ return 0;
+}
+EXPORT_SYMBOL(dvb_net_init);
diff --git a/v4l/kernel-2.6.tmp/dvb_net.h b/v4l/kernel-2.6.tmp/dvb_net.h
new file mode 100644
index 0000000..3a3126c
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb_net.h
@@ -0,0 +1,47 @@
+/*
+ * dvb_net.h
+ *
+ * Copyright (C) 2001 Ralph Metzler for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVB_NET_H_
+#define _DVB_NET_H_
+
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/inetdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/skbuff.h>
+
+#include "dvbdev.h"
+
+#define DVB_NET_DEVICES_MAX 10
+
+struct dvb_net {
+ struct dvb_device *dvbdev;
+ struct net_device *device[DVB_NET_DEVICES_MAX];
+ int state[DVB_NET_DEVICES_MAX];
+ unsigned int exit:1;
+ struct dmx_demux *demux;
+};
+
+
+void dvb_net_release(struct dvb_net *);
+int dvb_net_init(struct dvb_adapter *, struct dvb_net *, struct dmx_demux *);
+
+#endif
diff --git a/v4l/kernel-2.6.tmp/dvb_ringbuffer.c b/v4l/kernel-2.6.tmp/dvb_ringbuffer.c
new file mode 100644
index 0000000..ac9d93c
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb_ringbuffer.c
@@ -0,0 +1,266 @@
+/*
+ *
+ * dvb_ringbuffer.c: ring buffer implementation for the dvb driver
+ *
+ * Copyright (C) 2003 Oliver Endriss
+ * Copyright (C) 2004 Andrew de Quincey
+ *
+ * based on code originally found in av7110.c & dvb_ci.c:
+ * Copyright (C) 1999-2003 Ralph Metzler
+ * & Marcus Metzler for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+
+
+#include <linux/errno.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/sched.h>
+#include <linux/string.h>
+#include <asm/uaccess.h>
+
+#include "dvb_ringbuffer.h"
+
+#define PKT_READY 0
+#define PKT_DISPOSED 1
+
+
+void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data, size_t len)
+{
+ rbuf->pread=rbuf->pwrite=0;
+ rbuf->data=data;
+ rbuf->size=len;
+ rbuf->error=0;
+
+ init_waitqueue_head(&rbuf->queue);
+
+ spin_lock_init(&(rbuf->lock));
+}
+
+
+
+int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf)
+{
+ return (rbuf->pread==rbuf->pwrite);
+}
+
+
+
+ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf)
+{
+ ssize_t free;
+
+ free = rbuf->pread - rbuf->pwrite;
+ if (free <= 0)
+ free += rbuf->size;
+ return free-1;
+}
+
+
+
+ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf)
+{
+ ssize_t avail;
+
+ avail = rbuf->pwrite - rbuf->pread;
+ if (avail < 0)
+ avail += rbuf->size;
+ return avail;
+}
+
+
+
+void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf)
+{
+ rbuf->pread = rbuf->pwrite;
+ rbuf->error = 0;
+}
+
+
+
+void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf)
+{
+ unsigned long flags;
+
+ spin_lock_irqsave(&rbuf->lock, flags);
+ dvb_ringbuffer_flush(rbuf);
+ spin_unlock_irqrestore(&rbuf->lock, flags);
+
+ wake_up(&rbuf->queue);
+}
+
+
+
+ssize_t dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf, u8 *buf, size_t len, int usermem)
+{
+ size_t todo = len;
+ size_t split;
+
+ split = (rbuf->pread + len > rbuf->size) ? rbuf->size - rbuf->pread : 0;
+ if (split > 0) {
+ if (!usermem)
+ memcpy(buf, rbuf->data+rbuf->pread, split);
+ else
+ if (copy_to_user(buf, rbuf->data+rbuf->pread, split))
+ return -EFAULT;
+ buf += split;
+ todo -= split;
+ rbuf->pread = 0;
+ }
+ if (!usermem)
+ memcpy(buf, rbuf->data+rbuf->pread, todo);
+ else
+ if (copy_to_user(buf, rbuf->data+rbuf->pread, todo))
+ return -EFAULT;
+
+ rbuf->pread = (rbuf->pread + todo) % rbuf->size;
+
+ return len;
+}
+
+
+
+ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf, size_t len)
+{
+ size_t todo = len;
+ size_t split;
+
+ split = (rbuf->pwrite + len > rbuf->size) ? rbuf->size - rbuf->pwrite : 0;
+
+ if (split > 0) {
+ memcpy(rbuf->data+rbuf->pwrite, buf, split);
+ buf += split;
+ todo -= split;
+ rbuf->pwrite = 0;
+ }
+ memcpy(rbuf->data+rbuf->pwrite, buf, todo);
+ rbuf->pwrite = (rbuf->pwrite + todo) % rbuf->size;
+
+ return len;
+}
+
+ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8* buf, size_t len)
+{
+ int status;
+ ssize_t oldpwrite = rbuf->pwrite;
+
+ DVB_RINGBUFFER_WRITE_BYTE(rbuf, len >> 8);
+ DVB_RINGBUFFER_WRITE_BYTE(rbuf, len & 0xff);
+ DVB_RINGBUFFER_WRITE_BYTE(rbuf, PKT_READY);
+ status = dvb_ringbuffer_write(rbuf, buf, len);
+
+ if (status < 0) rbuf->pwrite = oldpwrite;
+ return status;
+}
+
+ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx,
+ int offset, u8* buf, size_t len, int usermem)
+{
+ size_t todo;
+ size_t split;
+ size_t pktlen;
+
+ pktlen = rbuf->data[idx] << 8;
+ pktlen |= rbuf->data[(idx + 1) % rbuf->size];
+ if (offset > pktlen) return -EINVAL;
+ if ((offset + len) > pktlen) len = pktlen - offset;
+
+ idx = (idx + DVB_RINGBUFFER_PKTHDRSIZE + offset) % rbuf->size;
+ todo = len;
+ split = ((idx + len) > rbuf->size) ? rbuf->size - idx : 0;
+ if (split > 0) {
+ if (!usermem)
+ memcpy(buf, rbuf->data+idx, split);
+ else
+ if (copy_to_user(buf, rbuf->data+idx, split))
+ return -EFAULT;
+ buf += split;
+ todo -= split;
+ idx = 0;
+ }
+ if (!usermem)
+ memcpy(buf, rbuf->data+idx, todo);
+ else
+ if (copy_to_user(buf, rbuf->data+idx, todo))
+ return -EFAULT;
+
+ return len;
+}
+
+void dvb_ringbuffer_pkt_dispose(struct dvb_ringbuffer *rbuf, size_t idx)
+{
+ size_t pktlen;
+
+ rbuf->data[(idx + 2) % rbuf->size] = PKT_DISPOSED;
+
+ // clean up disposed packets
+ while(dvb_ringbuffer_avail(rbuf) > DVB_RINGBUFFER_PKTHDRSIZE) {
+ if (DVB_RINGBUFFER_PEEK(rbuf, 2) == PKT_DISPOSED) {
+ pktlen = DVB_RINGBUFFER_PEEK(rbuf, 0) << 8;
+ pktlen |= DVB_RINGBUFFER_PEEK(rbuf, 1);
+ DVB_RINGBUFFER_SKIP(rbuf, pktlen + DVB_RINGBUFFER_PKTHDRSIZE);
+ } else {
+ // first packet is not disposed, so we stop cleaning now
+ break;
+ }
+ }
+}
+
+ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf, size_t idx, size_t* pktlen)
+{
+ int consumed;
+ int curpktlen;
+ int curpktstatus;
+
+ if (idx == -1) {
+ idx = rbuf->pread;
+ } else {
+ curpktlen = rbuf->data[idx] << 8;
+ curpktlen |= rbuf->data[(idx + 1) % rbuf->size];
+ idx = (idx + curpktlen + DVB_RINGBUFFER_PKTHDRSIZE) % rbuf->size;
+ }
+
+ consumed = (idx - rbuf->pread) % rbuf->size;
+
+ while((dvb_ringbuffer_avail(rbuf) - consumed) > DVB_RINGBUFFER_PKTHDRSIZE) {
+
+ curpktlen = rbuf->data[idx] << 8;
+ curpktlen |= rbuf->data[(idx + 1) % rbuf->size];
+ curpktstatus = rbuf->data[(idx + 2) % rbuf->size];
+
+ if (curpktstatus == PKT_READY) {
+ *pktlen = curpktlen;
+ return idx;
+ }
+
+ consumed += curpktlen + DVB_RINGBUFFER_PKTHDRSIZE;
+ idx = (idx + curpktlen + DVB_RINGBUFFER_PKTHDRSIZE) % rbuf->size;
+ }
+
+ // no packets available
+ return -1;
+}
+
+
+
+EXPORT_SYMBOL(dvb_ringbuffer_init);
+EXPORT_SYMBOL(dvb_ringbuffer_empty);
+EXPORT_SYMBOL(dvb_ringbuffer_free);
+EXPORT_SYMBOL(dvb_ringbuffer_avail);
+EXPORT_SYMBOL(dvb_ringbuffer_flush_spinlock_wakeup);
+EXPORT_SYMBOL(dvb_ringbuffer_read);
+EXPORT_SYMBOL(dvb_ringbuffer_write);
diff --git a/v4l/kernel-2.6.tmp/dvb_ringbuffer.h b/v4l/kernel-2.6.tmp/dvb_ringbuffer.h
new file mode 100644
index 0000000..d97714e
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvb_ringbuffer.h
@@ -0,0 +1,174 @@
+/*
+ *
+ * dvb_ringbuffer.h: ring buffer implementation for the dvb driver
+ *
+ * Copyright (C) 2003 Oliver Endriss
+ * Copyright (C) 2004 Andrew de Quincey
+ *
+ * based on code originally found in av7110.c & dvb_ci.c:
+ * Copyright (C) 1999-2003 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _DVB_RINGBUFFER_H_
+#define _DVB_RINGBUFFER_H_
+
+#include <linux/spinlock.h>
+#include <linux/wait.h>
+
+struct dvb_ringbuffer {
+ u8 *data;
+ ssize_t size;
+ ssize_t pread;
+ ssize_t pwrite;
+ int error;
+
+ wait_queue_head_t queue;
+ spinlock_t lock;
+};
+
+#define DVB_RINGBUFFER_PKTHDRSIZE 3
+
+
+/*
+** Notes:
+** ------
+** (1) For performance reasons read and write routines don't check buffer sizes
+** and/or number of bytes free/available. This has to be done before these
+** routines are called. For example:
+**
+** *** write <buflen> bytes ***
+** free = dvb_ringbuffer_free(rbuf);
+** if (free >= buflen)
+** count = dvb_ringbuffer_write(rbuf, buffer, buflen);
+** else
+** ...
+**
+** *** read min. 1000, max. <bufsize> bytes ***
+** avail = dvb_ringbuffer_avail(rbuf);
+** if (avail >= 1000)
+** count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize), 0);
+** else
+** ...
+**
+** (2) If there is exactly one reader and one writer, there is no need
+** to lock read or write operations.
+** Two or more readers must be locked against each other.
+** Flushing the buffer counts as a read operation.
+** Two or more writers must be locked against each other.
+*/
+
+/* initialize ring buffer, lock and queue */
+extern void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data, size_t len);
+
+/* test whether buffer is empty */
+extern int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf);
+
+/* return the number of free bytes in the buffer */
+extern ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf);
+
+/* return the number of bytes waiting in the buffer */
+extern ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf);
+
+
+/* read routines & macros */
+/* ---------------------- */
+/* flush buffer */
+extern void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf);
+
+/* flush buffer protected by spinlock and wake-up waiting task(s) */
+extern void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf);
+
+/* peek at byte <offs> in the buffer */
+#define DVB_RINGBUFFER_PEEK(rbuf,offs) \
+ (rbuf)->data[((rbuf)->pread+(offs))%(rbuf)->size]
+
+/* advance read ptr by <num> bytes */
+#define DVB_RINGBUFFER_SKIP(rbuf,num) \
+ (rbuf)->pread=((rbuf)->pread+(num))%(rbuf)->size
+
+/*
+** read <len> bytes from ring buffer into <buf>
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf, u8 *buf,
+ size_t len, int usermem);
+
+
+/* write routines & macros */
+/* ----------------------- */
+/* write single byte to ring buffer */
+#define DVB_RINGBUFFER_WRITE_BYTE(rbuf,byte) \
+ { (rbuf)->data[(rbuf)->pwrite]=(byte); \
+ (rbuf)->pwrite=((rbuf)->pwrite+1)%(rbuf)->size; }
+/*
+** write <len> bytes to ring buffer
+** <usermem> specifies whether <buf> resides in user space
+** returns number of bytes transferred or -EFAULT
+*/
+extern ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf,
+ size_t len);
+
+
+/**
+ * Write a packet into the ringbuffer.
+ *
+ * <rbuf> Ringbuffer to write to.
+ * <buf> Buffer to write.
+ * <len> Length of buffer (currently limited to 65535 bytes max).
+ * returns Number of bytes written, or -EFAULT, -ENOMEM, -EVINAL.
+ */
+extern ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8* buf,
+ size_t len);
+
+/**
+ * Read from a packet in the ringbuffer. Note: unlike dvb_ringbuffer_read(), this
+ * does NOT update the read pointer in the ringbuffer. You must use
+ * dvb_ringbuffer_pkt_dispose() to mark a packet as no longer required.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ * <offset> Offset into packet to read from.
+ * <buf> Destination buffer for data.
+ * <len> Size of destination buffer.
+ * <usermem> Set to 1 if <buf> is in userspace.
+ * returns Number of bytes read, or -EFAULT.
+ */
+extern ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx,
+ int offset, u8* buf, size_t len, int usermem);
+
+/**
+ * Dispose of a packet in the ring buffer.
+ *
+ * <rbuf> Ring buffer concerned.
+ * <idx> Packet index as returned by dvb_ringbuffer_pkt_next().
+ */
+extern void dvb_ringbuffer_pkt_dispose(struct dvb_ringbuffer *rbuf, size_t idx);
+
+/**
+ * Get the index of the next packet in a ringbuffer.
+ *
+ * <rbuf> Ringbuffer concerned.
+ * <idx> Previous packet index, or -1 to return the first packet index.
+ * <pktlen> On success, will be updated to contain the length of the packet in bytes.
+ * returns Packet index (if >=0), or -1 if no packets available.
+ */
+extern ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf, size_t idx, size_t* pktlen);
+
+
+#endif /* _DVB_RINGBUFFER_H_ */
diff --git a/v4l/kernel-2.6.tmp/dvbdev.c b/v4l/kernel-2.6.tmp/dvbdev.c
new file mode 100644
index 0000000..70b1bbe
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvbdev.c
@@ -0,0 +1,445 @@
+/*
+ * dvbdev.c
+ *
+ * Copyright (C) 2000 Ralph Metzler <ralph@convergence.de>
+ * & Marcus Metzler <marcus@convergence.de>
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include <linux/types.h>
+#include <linux/errno.h>
+#include <linux/string.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <linux/device.h>
+#include <linux/fs.h>
+#include <linux/cdev.h>
+#include "compat.h"
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,15)
+#include <linux/mutex.h>
+#endif
+#include "dvbdev.h"
+
+static int dvbdev_debug;
+
+module_param(dvbdev_debug, int, 0644);
+MODULE_PARM_DESC(dvbdev_debug, "Turn on/off device debugging (default:off).");
+
+#define dprintk if (dvbdev_debug) printk
+
+static LIST_HEAD(dvb_adapter_list);
+static DEFINE_MUTEX(dvbdev_register_lock);
+
+static const char * const dnames[] = {
+ "video", "audio", "sec", "frontend", "demux", "dvr", "ca",
+ "net", "osd"
+};
+
+#define DVB_MAX_ADAPTERS 8
+#define DVB_MAX_IDS 4
+#define nums2minor(num,type,id) ((num << 6) | (id << 4) | type)
+#define MAX_DVB_MINORS (DVB_MAX_ADAPTERS*64)
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13)
+static struct class *dvb_class;
+#else
+static struct class_simple *dvb_class;
+#endif
+
+static struct dvb_device* dvbdev_find_device (int minor)
+{
+ struct dvb_adapter *adap;
+
+ list_for_each_entry(adap, &dvb_adapter_list, list_head) {
+ struct dvb_device *dev;
+ list_for_each_entry(dev, &adap->device_list, list_head)
+ if (nums2minor(adap->num, dev->type, dev->id) == minor)
+ return dev;
+ }
+
+ return NULL;
+}
+
+
+static int dvb_device_open(struct inode *inode, struct file *file)
+{
+ struct dvb_device *dvbdev;
+
+ dvbdev = dvbdev_find_device (iminor(inode));
+
+ if (dvbdev && dvbdev->fops) {
+ int err = 0;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17)
+ const struct file_operations *old_fops;
+#else
+ struct file_operations *old_fops;
+#endif
+
+ file->private_data = dvbdev;
+ old_fops = file->f_op;
+ file->f_op = fops_get(dvbdev->fops);
+ if(file->f_op->open)
+ err = file->f_op->open(inode,file);
+ if (err) {
+ fops_put(file->f_op);
+ file->f_op = fops_get(old_fops);
+ }
+ fops_put(old_fops);
+ return err;
+ }
+ return -ENODEV;
+}
+
+
+static struct file_operations dvb_device_fops =
+{
+ .owner = THIS_MODULE,
+ .open = dvb_device_open,
+};
+
+static struct cdev dvb_device_cdev;
+
+int dvb_generic_open(struct inode *inode, struct file *file)
+{
+ struct dvb_device *dvbdev = file->private_data;
+
+ if (!dvbdev)
+ return -ENODEV;
+
+ if (!dvbdev->users)
+ return -EBUSY;
+
+ if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
+ if (!dvbdev->readers)
+ return -EBUSY;
+ dvbdev->readers--;
+ } else {
+ if (!dvbdev->writers)
+ return -EBUSY;
+ dvbdev->writers--;
+ }
+
+ dvbdev->users--;
+ return 0;
+}
+EXPORT_SYMBOL(dvb_generic_open);
+
+
+int dvb_generic_release(struct inode *inode, struct file *file)
+{
+ struct dvb_device *dvbdev = file->private_data;
+
+ if (!dvbdev)
+ return -ENODEV;
+
+ if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
+ dvbdev->readers++;
+ } else {
+ dvbdev->writers++;
+ }
+
+ dvbdev->users++;
+ return 0;
+}
+EXPORT_SYMBOL(dvb_generic_release);
+
+
+int dvb_generic_ioctl(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg)
+{
+ struct dvb_device *dvbdev = file->private_data;
+
+ if (!dvbdev)
+ return -ENODEV;
+
+ if (!dvbdev->kernel_ioctl)
+ return -EINVAL;
+
+ return dvb_usercopy (inode, file, cmd, arg, dvbdev->kernel_ioctl);
+}
+EXPORT_SYMBOL(dvb_generic_ioctl);
+
+
+static int dvbdev_get_free_id (struct dvb_adapter *adap, int type)
+{
+ u32 id = 0;
+
+ while (id < DVB_MAX_IDS) {
+ struct dvb_device *dev;
+ list_for_each_entry(dev, &adap->device_list, list_head)
+ if (dev->type == type && dev->id == id)
+ goto skip;
+ return id;
+skip:
+ id++;
+ }
+ return -ENFILE;
+}
+
+
+int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
+ const struct dvb_device *template, void *priv, int type)
+{
+ struct dvb_device *dvbdev;
+ struct file_operations *dvbdevfops;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
+ struct device *clsdev;
+#else
+ struct class_device *clsdev;
+#endif
+ int id;
+
+ mutex_lock(&dvbdev_register_lock);
+
+ if ((id = dvbdev_get_free_id (adap, type)) < 0){
+ mutex_unlock(&dvbdev_register_lock);
+ *pdvbdev = NULL;
+ printk(KERN_ERR "%s: couldn't find free device id\n", __FUNCTION__);
+ return -ENFILE;
+ }
+
+ *pdvbdev = dvbdev = kmalloc(sizeof(struct dvb_device), GFP_KERNEL);
+
+ if (!dvbdev){
+ mutex_unlock(&dvbdev_register_lock);
+ return -ENOMEM;
+ }
+
+ dvbdevfops = kzalloc(sizeof(struct file_operations), GFP_KERNEL);
+
+ if (!dvbdevfops){
+ kfree (dvbdev);
+ mutex_unlock(&dvbdev_register_lock);
+ return -ENOMEM;
+ }
+
+ memcpy(dvbdev, template, sizeof(struct dvb_device));
+ dvbdev->type = type;
+ dvbdev->id = id;
+ dvbdev->adapter = adap;
+ dvbdev->priv = priv;
+ dvbdev->fops = dvbdevfops;
+ init_waitqueue_head (&dvbdev->wait_queue);
+
+ memcpy(dvbdev->fops, template->fops, sizeof(struct file_operations));
+ dvbdev->fops->owner = adap->module;
+
+ list_add_tail (&dvbdev->list_head, &adap->device_list);
+
+ mutex_unlock(&dvbdev_register_lock);
+
+ clsdev = device_create(dvb_class, adap->device,
+ MKDEV(DVB_MAJOR, nums2minor(adap->num, type, id)),
+ "dvb%d.%s%d", adap->num, dnames[type], id);
+ if (IS_ERR(clsdev)) {
+ printk(KERN_ERR "%s: failed to create device dvb%d.%s%d (%ld)\n",
+ __FUNCTION__, adap->num, dnames[type], id, PTR_ERR(clsdev));
+ return PTR_ERR(clsdev);
+ }
+
+ dprintk(KERN_DEBUG "DVB: register adapter%d/%s%d @ minor: %i (0x%02x)\n",
+ adap->num, dnames[type], id, nums2minor(adap->num, type, id),
+ nums2minor(adap->num, type, id));
+
+ return 0;
+}
+EXPORT_SYMBOL(dvb_register_device);
+
+
+void dvb_unregister_device(struct dvb_device *dvbdev)
+{
+ if (!dvbdev)
+ return;
+
+ device_destroy(dvb_class, MKDEV(DVB_MAJOR, nums2minor(dvbdev->adapter->num,
+ dvbdev->type, dvbdev->id)));
+
+ list_del (&dvbdev->list_head);
+ kfree (dvbdev->fops);
+ kfree (dvbdev);
+}
+EXPORT_SYMBOL(dvb_unregister_device);
+
+
+static int dvbdev_get_free_adapter_num (void)
+{
+ int num = 0;
+
+ while (num < DVB_MAX_ADAPTERS) {
+ struct dvb_adapter *adap;
+ list_for_each_entry(adap, &dvb_adapter_list, list_head)
+ if (adap->num == num)
+ goto skip;
+ return num;
+skip:
+ num++;
+ }
+
+ return -ENFILE;
+}
+
+
+int dvb_register_adapter(struct dvb_adapter *adap, const char *name, struct module *module, struct device *device)
+{
+ int num;
+
+ mutex_lock(&dvbdev_register_lock);
+
+ if ((num = dvbdev_get_free_adapter_num ()) < 0) {
+ mutex_unlock(&dvbdev_register_lock);
+ return -ENFILE;
+ }
+
+ memset (adap, 0, sizeof(struct dvb_adapter));
+ INIT_LIST_HEAD (&adap->device_list);
+
+ printk(KERN_INFO "DVB: registering new adapter (%s)\n", name);
+
+ adap->num = num;
+ adap->name = name;
+ adap->module = module;
+ adap->device = device;
+
+ list_add_tail (&adap->list_head, &dvb_adapter_list);
+
+ mutex_unlock(&dvbdev_register_lock);
+
+ return num;
+}
+EXPORT_SYMBOL(dvb_register_adapter);
+
+
+int dvb_unregister_adapter(struct dvb_adapter *adap)
+{
+ mutex_lock(&dvbdev_register_lock);
+ list_del (&adap->list_head);
+ mutex_unlock(&dvbdev_register_lock);
+ return 0;
+}
+EXPORT_SYMBOL(dvb_unregister_adapter);
+
+/* if the miracle happens and "generic_usercopy()" is included into
+ the kernel, then this can vanish. please don't make the mistake and
+ define this as video_usercopy(). this will introduce a dependecy
+ to the v4l "videodev.o" module, which is unnecessary for some
+ cards (ie. the budget dvb-cards don't need the v4l module...) */
+int dvb_usercopy(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg,
+ int (*func)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg))
+{
+ char sbuf[128];
+ void *mbuf = NULL;
+ void *parg = NULL;
+ int err = -EINVAL;
+
+ /* Copy arguments into temp kernel buffer */
+ switch (_IOC_DIR(cmd)) {
+ case _IOC_NONE:
+ /*
+ * For this command, the pointer is actually an integer
+ * argument.
+ */
+ parg = (void *) arg;
+ break;
+ case _IOC_READ: /* some v4l ioctls are marked wrong ... */
+ case _IOC_WRITE:
+ case (_IOC_WRITE | _IOC_READ):
+ if (_IOC_SIZE(cmd) <= sizeof(sbuf)) {
+ parg = sbuf;
+ } else {
+ /* too big to allocate from stack */
+ mbuf = kmalloc(_IOC_SIZE(cmd),GFP_KERNEL);
+ if (NULL == mbuf)
+ return -ENOMEM;
+ parg = mbuf;
+ }
+
+ err = -EFAULT;
+ if (copy_from_user(parg, (void __user *)arg, _IOC_SIZE(cmd)))
+ goto out;
+ break;
+ }
+
+ /* call driver */
+ if ((err = func(inode, file, cmd, parg)) == -ENOIOCTLCMD)
+ err = -EINVAL;
+
+ if (err < 0)
+ goto out;
+
+ /* Copy results into user buffer */
+ switch (_IOC_DIR(cmd))
+ {
+ case _IOC_READ:
+ case (_IOC_WRITE | _IOC_READ):
+ if (copy_to_user((void __user *)arg, parg, _IOC_SIZE(cmd)))
+ err = -EFAULT;
+ break;
+ }
+
+out:
+ kfree(mbuf);
+ return err;
+}
+
+static int __init init_dvbdev(void)
+{
+ int retval;
+ dev_t dev = MKDEV(DVB_MAJOR, 0);
+
+ if ((retval = register_chrdev_region(dev, MAX_DVB_MINORS, "DVB")) != 0) {
+ printk(KERN_ERR "dvb-core: unable to get major %d\n", DVB_MAJOR);
+ return retval;
+ }
+
+ cdev_init(&dvb_device_cdev, &dvb_device_fops);
+ if ((retval = cdev_add(&dvb_device_cdev, dev, MAX_DVB_MINORS)) != 0) {
+ printk(KERN_ERR "dvb-core: unable register character device\n");
+ goto error;
+ }
+
+ dvb_class = class_create(THIS_MODULE, "dvb");
+ if (IS_ERR(dvb_class)) {
+ retval = PTR_ERR(dvb_class);
+ goto error;
+ }
+ return 0;
+
+error:
+ cdev_del(&dvb_device_cdev);
+ unregister_chrdev_region(dev, MAX_DVB_MINORS);
+ return retval;
+}
+
+
+static void __exit exit_dvbdev(void)
+{
+ class_destroy(dvb_class);
+ cdev_del(&dvb_device_cdev);
+ unregister_chrdev_region(MKDEV(DVB_MAJOR, 0), MAX_DVB_MINORS);
+}
+
+subsys_initcall(init_dvbdev);
+module_exit(exit_dvbdev);
+
+MODULE_DESCRIPTION("DVB Core Driver");
+MODULE_AUTHOR("Marcus Metzler, Ralph Metzler, Holger Waechtler");
+MODULE_LICENSE("GPL");
diff --git a/v4l/kernel-2.6.tmp/dvbdev.h b/v4l/kernel-2.6.tmp/dvbdev.h
new file mode 100644
index 0000000..6dff10e
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/dvbdev.h
@@ -0,0 +1,128 @@
+/*
+ * dvbdev.h
+ *
+ * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBDEV_H_
+#define _DVBDEV_H_
+
+#include <linux/types.h>
+#include <linux/poll.h>
+#include <linux/fs.h>
+#include <linux/list.h>
+#include <linux/smp_lock.h>
+
+#define DVB_MAJOR 212
+
+#define DVB_DEVICE_VIDEO 0
+#define DVB_DEVICE_AUDIO 1
+#define DVB_DEVICE_SEC 2
+#define DVB_DEVICE_FRONTEND 3
+#define DVB_DEVICE_DEMUX 4
+#define DVB_DEVICE_DVR 5
+#define DVB_DEVICE_CA 6
+#define DVB_DEVICE_NET 7
+#define DVB_DEVICE_OSD 8
+
+
+struct dvb_adapter {
+ int num;
+ struct list_head list_head;
+ struct list_head device_list;
+ const char *name;
+ u8 proposed_mac [6];
+ void* priv;
+
+ struct device *device;
+
+ struct module *module;
+};
+
+
+struct dvb_device {
+ struct list_head list_head;
+ struct file_operations *fops;
+ struct dvb_adapter *adapter;
+ int type;
+ u32 id;
+
+ /* in theory, 'users' can vanish now,
+ but I don't want to change too much now... */
+ int readers;
+ int writers;
+ int users;
+
+ wait_queue_head_t wait_queue;
+ /* don't really need those !? -- FIXME: use video_usercopy */
+ int (*kernel_ioctl)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg);
+
+ void *priv;
+};
+
+
+extern int dvb_register_adapter (struct dvb_adapter *adap, const char *name, struct module *module, struct device *device);
+extern int dvb_unregister_adapter (struct dvb_adapter *adap);
+
+extern int dvb_register_device (struct dvb_adapter *adap,
+ struct dvb_device **pdvbdev,
+ const struct dvb_device *template,
+ void *priv,
+ int type);
+
+extern void dvb_unregister_device (struct dvb_device *dvbdev);
+
+extern int dvb_generic_open (struct inode *inode, struct file *file);
+extern int dvb_generic_release (struct inode *inode, struct file *file);
+extern int dvb_generic_ioctl (struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg);
+
+/* we don't mess with video_usercopy() any more,
+we simply define out own dvb_usercopy(), which will hopefully become
+generic_usercopy() someday... */
+
+extern int dvb_usercopy(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg,
+ int (*func)(struct inode *inode, struct file *file,
+ unsigned int cmd, void *arg));
+
+/** generic DVB attach function. */
+#ifdef CONFIG_DVB_CORE_ATTACH
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ void *__r = NULL; \
+ typeof(&FUNCTION) __a = symbol_request(FUNCTION); \
+ if (__a) { \
+ __r = (void *) __a(ARGS); \
+ if (__r == NULL) \
+ symbol_put(FUNCTION); \
+ } else { \
+ printk(KERN_ERR "DVB: Unable to find symbol "#FUNCTION"()\n"); \
+ } \
+ __r; \
+})
+
+#else
+#define dvb_attach(FUNCTION, ARGS...) ({ \
+ FUNCTION(ARGS); \
+})
+
+#endif
+
+#endif /* #ifndef _DVBDEV_H_ */
diff --git a/v4l/kernel-2.6.tmp/usb-urb.c b/v4l/kernel-2.6.tmp/usb-urb.c
new file mode 100644
index 0000000..5caec20
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/usb-urb.c
@@ -0,0 +1,247 @@
+/* usb-urb.c is part of the DVB USB library.
+ *
+ * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
+ * see dvb-usb-init.c for copyright information.
+ *
+ * This file keeps functions for initializing and handling the
+ * BULK and ISOC USB data transfers in a generic way.
+ * Can be used for DVB-only and also, that's the plan, for
+ * Hybrid USB devices (analog and DVB).
+ */
+#include "dvb-usb-common.h"
+
+/* URB stuff for streaming */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
+static void usb_urb_complete(struct urb *urb, struct pt_regs *ptregs)
+#else
+static void usb_urb_complete(struct urb *urb)
+#endif
+{
+ struct usb_data_stream *stream = urb->context;
+ int ptype = usb_pipetype(urb->pipe);
+ int i;
+ u8 *b;
+
+ deb_uxfer("'%s' urb completed. status: %d, length: %d/%d, pack_num: %d, errors: %d\n",
+ ptype == PIPE_ISOCHRONOUS ? "isoc" : "bulk",
+ urb->status,urb->actual_length,urb->transfer_buffer_length,
+ urb->number_of_packets,urb->error_count);
+
+ switch (urb->status) {
+ case 0: /* success */
+ case -ETIMEDOUT: /* NAK */
+ break;
+ case -ECONNRESET: /* kill */
+ case -ENOENT:
+ case -ESHUTDOWN:
+ return;
+ default: /* error */
+ deb_ts("urb completition error %d.\n", urb->status);
+ break;
+ }
+
+ b = (u8 *) urb->transfer_buffer;
+ switch (ptype) {
+ case PIPE_ISOCHRONOUS:
+ for (i = 0; i < urb->number_of_packets; i++) {
+
+ if (urb->iso_frame_desc[i].status != 0)
+ deb_ts("iso frame descriptor has an error: %d\n",urb->iso_frame_desc[i].status);
+ else if (urb->iso_frame_desc[i].actual_length > 0)
+ stream->complete(stream, b + urb->iso_frame_desc[i].offset, urb->iso_frame_desc[i].actual_length);
+
+ urb->iso_frame_desc[i].status = 0;
+ urb->iso_frame_desc[i].actual_length = 0;
+ }
+ debug_dump(b,20,deb_uxfer);
+ break;
+ case PIPE_BULK:
+ if (urb->actual_length > 0)
+ stream->complete(stream, b, urb->actual_length);
+ break;
+ default:
+ err("unkown endpoint type in completition handler.");
+ return;
+ }
+ usb_submit_urb(urb,GFP_ATOMIC);
+}
+
+int usb_urb_kill(struct usb_data_stream *stream)
+{
+ int i;
+ for (i = 0; i < stream->urbs_submitted; i++) {
+ deb_ts("killing URB no. %d.\n",i);
+
+ /* stop the URB */
+ usb_kill_urb(stream->urb_list[i]);
+ }
+ stream->urbs_submitted = 0;
+ return 0;
+}
+
+int usb_urb_submit(struct usb_data_stream *stream)
+{
+ int i,ret;
+ for (i = 0; i < stream->urbs_initialized; i++) {
+ deb_ts("submitting URB no. %d\n",i);
+ if ((ret = usb_submit_urb(stream->urb_list[i],GFP_ATOMIC))) {
+ err("could not submit URB no. %d - get them all back",i);
+ usb_urb_kill(stream);
+ return ret;
+ }
+ stream->urbs_submitted++;
+ }
+ return 0;
+}
+
+static int usb_free_stream_buffers(struct usb_data_stream *stream)
+{
+ if (stream->state & USB_STATE_URB_BUF) {
+ while (stream->buf_num) {
+ stream->buf_num--;
+ deb_mem("freeing buffer %d\n",stream->buf_num);
+ usb_buffer_free(stream->udev, stream->buf_size,
+ stream->buf_list[stream->buf_num], stream->dma_addr[stream->buf_num]);
+ }
+ }
+
+ stream->state &= ~USB_STATE_URB_BUF;
+
+ return 0;
+}
+
+static int usb_allocate_stream_buffers(struct usb_data_stream *stream, int num, unsigned long size)
+{
+ stream->buf_num = 0;
+ stream->buf_size = size;
+
+ deb_mem("all in all I will use %lu bytes for streaming\n",num*size);
+
+ for (stream->buf_num = 0; stream->buf_num < num; stream->buf_num++) {
+ deb_mem("allocating buffer %d\n",stream->buf_num);
+ if (( stream->buf_list[stream->buf_num] =
+ usb_buffer_alloc(stream->udev, size, GFP_ATOMIC,
+ &stream->dma_addr[stream->buf_num]) ) == NULL) {
+ deb_mem("not enough memory for urb-buffer allocation.\n");
+ usb_free_stream_buffers(stream);
+ return -ENOMEM;
+ }
+ deb_mem("buffer %d: %p (dma: %Lu)\n",
+ stream->buf_num,
+stream->buf_list[stream->buf_num], (long long)stream->dma_addr[stream->buf_num]);
+ memset(stream->buf_list[stream->buf_num],0,size);
+ stream->state |= USB_STATE_URB_BUF;
+ }
+ deb_mem("allocation successful\n");
+
+ return 0;
+}
+
+static int usb_bulk_urb_init(struct usb_data_stream *stream)
+{
+ int i;
+
+ if ((i = usb_allocate_stream_buffers(stream,stream->props.count,
+ stream->props.u.bulk.buffersize)) < 0)
+ return i;
+
+ /* allocate the URBs */
+ for (i = 0; i < stream->props.count; i++) {
+ if ((stream->urb_list[i] = usb_alloc_urb(0,GFP_ATOMIC)) == NULL)
+ return -ENOMEM;
+
+ usb_fill_bulk_urb( stream->urb_list[i], stream->udev,
+ usb_rcvbulkpipe(stream->udev,stream->props.endpoint),
+ stream->buf_list[i],
+ stream->props.u.bulk.buffersize,
+ usb_urb_complete, stream);
+
+ stream->urb_list[i]->transfer_flags = 0;
+ stream->urbs_initialized++;
+ }
+ return 0;
+}
+
+static int usb_isoc_urb_init(struct usb_data_stream *stream)
+{
+ int i,j;
+
+ if ((i = usb_allocate_stream_buffers(stream,stream->props.count,
+ stream->props.u.isoc.framesize*stream->props.u.isoc.framesperurb)) < 0)
+ return i;
+
+ /* allocate the URBs */
+ for (i = 0; i < stream->props.count; i++) {
+ struct urb *urb;
+ int frame_offset = 0;
+ if ((stream->urb_list[i] =
+ usb_alloc_urb(stream->props.u.isoc.framesperurb,GFP_ATOMIC)) == NULL)
+ return -ENOMEM;
+
+ urb = stream->urb_list[i];
+
+ urb->dev = stream->udev;
+ urb->context = stream;
+ urb->complete = usb_urb_complete;
+ urb->pipe = usb_rcvisocpipe(stream->udev,stream->props.endpoint);
+ urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
+ urb->interval = stream->props.u.isoc.interval;
+ urb->number_of_packets = stream->props.u.isoc.framesperurb;
+ urb->transfer_buffer_length = stream->buf_size;
+ urb->transfer_buffer = stream->buf_list[i];
+ urb->transfer_dma = stream->dma_addr[i];
+
+ for (j = 0; j < stream->props.u.isoc.framesperurb; j++) {
+ urb->iso_frame_desc[j].offset = frame_offset;
+ urb->iso_frame_desc[j].length = stream->props.u.isoc.framesize;
+ frame_offset += stream->props.u.isoc.framesize;
+ }
+
+ stream->urbs_initialized++;
+ }
+ return 0;
+}
+
+int usb_urb_init(struct usb_data_stream *stream, struct usb_data_stream_properties *props)
+{
+ if (stream == NULL || props == NULL)
+ return -EINVAL;
+
+ memcpy(&stream->props, props, sizeof(*props));
+
+ usb_clear_halt(stream->udev,usb_rcvbulkpipe(stream->udev,stream->props.endpoint));
+
+ if (stream->complete == NULL) {
+ err("there is no data callback - this doesn't make sense.");
+ return -EINVAL;
+ }
+
+ switch (stream->props.type) {
+ case USB_BULK:
+ return usb_bulk_urb_init(stream);
+ case USB_ISOC:
+ return usb_isoc_urb_init(stream);
+ default:
+ err("unkown URB-type for data transfer.");
+ return -EINVAL;
+ }
+}
+
+int usb_urb_exit(struct usb_data_stream *stream)
+{
+ int i;
+
+ usb_urb_kill(stream);
+
+ for (i = 0; i < stream->urbs_initialized; i++) {
+ if (stream->urb_list[i] != NULL) {
+ deb_mem("freeing URB no. %d.\n",i);
+ /* free the URBs */
+ usb_free_urb(stream->urb_list[i]);
+ }
+ }
+ stream->urbs_initialized = 0;
+
+ usb_free_stream_buffers(stream);
+ return 0;
+}
diff --git a/v4l/kernel-2.6.tmp/usb_biu_reg.h b/v4l/kernel-2.6.tmp/usb_biu_reg.h
new file mode 100644
index 0000000..6811466
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/usb_biu_reg.h
@@ -0,0 +1,557 @@
+// biu_reg.h 1-9-2006
+// gen_biu Ver 1.9 generated by luke
+#define xd_p_reg_usb_cfg_speed ( 0xDD00)
+#define p_reg_usb_cfg_speed 0xDD00
+#define reg_usb_cfg_speed_pos 0
+#define reg_usb_cfg_speed_len 1
+#define reg_usb_cfg_speed_lsb 0
+#define xd_p_reg_usb_cfg_utmi16 ( 0xDD00)
+#define p_reg_usb_cfg_utmi16 0xDD00
+#define reg_usb_cfg_utmi16_pos 1
+#define reg_usb_cfg_utmi16_len 1
+#define reg_usb_cfg_utmi16_lsb 0
+#define xd_p_reg_usb_cfg_test ( 0xDD00)
+#define p_reg_usb_cfg_test 0xDD00
+#define reg_usb_cfg_test_pos 3
+#define reg_usb_cfg_test_len 3
+#define reg_usb_cfg_test_lsb 0
+#define xd_p_reg_usb_port_sim_reset ( 0xDD00)
+#define p_reg_usb_port_sim_reset 0xDD00
+#define reg_usb_port_sim_reset_pos 6
+#define reg_usb_port_sim_reset_len 1
+#define reg_usb_port_sim_reset_lsb 0
+#define xd_p_reg_usb_port_run ( 0xDD00)
+#define p_reg_usb_port_run 0xDD00
+#define reg_usb_port_run_pos 7
+#define reg_usb_port_run_len 1
+#define reg_usb_port_run_lsb 0
+#define xd_r_usb_line_state_0 ( 0xDD01)
+#define r_usb_line_state_0 0xDD01
+#define usb_line_state_0_pos 0
+#define usb_line_state_0_len 1
+#define usb_line_state_0_lsb 0
+#define xd_r_usb_line_state_1 ( 0xDD01)
+#define r_usb_line_state_1 0xDD01
+#define usb_line_state_1_pos 1
+#define usb_line_state_1_len 1
+#define usb_line_state_1_lsb 0
+#define xd_r_reg_usb_status_speed ( 0xDD01)
+#define r_reg_usb_status_speed 0xDD01
+#define reg_usb_status_speed_pos 2
+#define reg_usb_status_speed_len 1
+#define reg_usb_status_speed_lsb 0
+#define xd_r_reg_usb_status_connect ( 0xDD01)
+#define r_reg_usb_status_connect 0xDD01
+#define reg_usb_status_connect_pos 3
+#define reg_usb_status_connect_len 1
+#define reg_usb_status_connect_lsb 0
+#define xd_r_reg_usb_rx_buf ( 0xDD01)
+#define r_reg_usb_rx_buf 0xDD01
+#define reg_usb_rx_buf_pos 4
+#define reg_usb_rx_buf_len 1
+#define reg_usb_rx_buf_lsb 0
+#define xd_r_reg_usb_port_reset ( 0xDD01)
+#define r_reg_usb_port_reset 0xDD01
+#define reg_usb_port_reset_pos 5
+#define reg_usb_port_reset_len 1
+#define reg_usb_port_reset_lsb 0
+#define xd_r_reg_usb_port_suspend ( 0xDD01)
+#define r_reg_usb_port_suspend 0xDD01
+#define reg_usb_port_suspend_pos 6
+#define reg_usb_port_suspend_len 1
+#define reg_usb_port_suspend_lsb 0
+#define xd_p_reg_ep1_tx_type ( 0xDD07)
+#define p_reg_ep1_tx_type 0xDD07
+#define reg_ep1_tx_type_pos 2
+#define reg_ep1_tx_type_len 1
+#define reg_ep1_tx_type_lsb 0
+#define xd_p_reg_ep2_rx_type ( 0xDD07)
+#define p_reg_ep2_rx_type 0xDD07
+#define reg_ep2_rx_type_pos 3
+#define reg_ep2_rx_type_len 1
+#define reg_ep2_rx_type_lsb 0
+#define xd_p_reg_ep3_tx_type ( 0xDD07)
+#define p_reg_ep3_tx_type 0xDD07
+#define reg_ep3_tx_type_pos 4
+#define reg_ep3_tx_type_len 1
+#define reg_ep3_tx_type_lsb 0
+#define xd_p_reg_ep4_tx_type ( 0xDD07)
+#define p_reg_ep4_tx_type 0xDD07
+#define reg_ep4_tx_type_pos 5
+#define reg_ep4_tx_type_len 1
+#define reg_ep4_tx_type_lsb 0
+#define xd_p_reg_ep5_tx_type ( 0xDD07)
+#define p_reg_ep5_tx_type 0xDD07
+#define reg_ep5_tx_type_pos 6
+#define reg_ep5_tx_type_len 1
+#define reg_ep5_tx_type_lsb 0
+#define xd_p_reg_ep0_max_pkt ( 0xDD08)
+#define p_reg_ep0_max_pkt 0xDD08
+#define reg_ep0_max_pkt_pos 0
+#define reg_ep0_max_pkt_len 8
+#define reg_ep0_max_pkt_lsb 0
+#define xd_p_reg_ep2_max_pkt ( 0xDD0A)
+#define p_reg_ep2_max_pkt 0xDD0A
+#define reg_ep2_max_pkt_pos 0
+#define reg_ep2_max_pkt_len 8
+#define reg_ep2_max_pkt_lsb 0
+#define xd_p_reg_ep4_max_pkt ( 0xDD0C)
+#define p_reg_ep4_max_pkt 0xDD0C
+#define reg_ep4_max_pkt_pos 0
+#define reg_ep4_max_pkt_len 8
+#define reg_ep4_max_pkt_lsb 0
+#define xd_p_reg_ep5_max_pkt ( 0xDD0D)
+#define p_reg_ep5_max_pkt 0xDD0D
+#define reg_ep5_max_pkt_pos 0
+#define reg_ep5_max_pkt_len 8
+#define reg_ep5_max_pkt_lsb 0
+#define xd_p_reg_usb_addr ( 0xDD10)
+#define p_reg_usb_addr 0xDD10
+#define reg_usb_addr_pos 0
+#define reg_usb_addr_len 7
+#define reg_usb_addr_lsb 0
+#define xd_p_reg_usb_addr_now ( 0xDD10)
+#define p_reg_usb_addr_now 0xDD10
+#define reg_usb_addr_now_pos 7
+#define reg_usb_addr_now_len 1
+#define reg_usb_addr_now_lsb 0
+#define xd_p_reg_ep0_tx_en ( 0xDD11)
+#define p_reg_ep0_tx_en 0xDD11
+#define reg_ep0_tx_en_pos 0
+#define reg_ep0_tx_en_len 1
+#define reg_ep0_tx_en_lsb 0
+#define xd_p_reg_ep0_rx_en ( 0xDD11)
+#define p_reg_ep0_rx_en 0xDD11
+#define reg_ep0_rx_en_pos 1
+#define reg_ep0_rx_en_len 1
+#define reg_ep0_rx_en_lsb 0
+#define xd_p_reg_ep1_tx_en ( 0xDD11)
+#define p_reg_ep1_tx_en 0xDD11
+#define reg_ep1_tx_en_pos 2
+#define reg_ep1_tx_en_len 1
+#define reg_ep1_tx_en_lsb 0
+#define xd_p_reg_ep2_rx_en ( 0xDD11)
+#define p_reg_ep2_rx_en 0xDD11
+#define reg_ep2_rx_en_pos 3
+#define reg_ep2_rx_en_len 1
+#define reg_ep2_rx_en_lsb 0
+#define xd_p_reg_ep3_tx_en ( 0xDD11)
+#define p_reg_ep3_tx_en 0xDD11
+#define reg_ep3_tx_en_pos 4
+#define reg_ep3_tx_en_len 1
+#define reg_ep3_tx_en_lsb 0
+#define xd_p_reg_ep4_tx_en ( 0xDD11)
+#define p_reg_ep4_tx_en 0xDD11
+#define reg_ep4_tx_en_pos 5
+#define reg_ep4_tx_en_len 1
+#define reg_ep4_tx_en_lsb 0
+#define xd_p_reg_ep5_tx_en ( 0xDD11)
+#define p_reg_ep5_tx_en 0xDD11
+#define reg_ep5_tx_en_pos 6
+#define reg_ep5_tx_en_len 1
+#define reg_ep5_tx_en_lsb 0
+#define xd_p_reg_ep0_tx_stall ( 0xDD12)
+#define p_reg_ep0_tx_stall 0xDD12
+#define reg_ep0_tx_stall_pos 0
+#define reg_ep0_tx_stall_len 1
+#define reg_ep0_tx_stall_lsb 0
+#define xd_p_reg_ep0_rx_stall ( 0xDD12)
+#define p_reg_ep0_rx_stall 0xDD12
+#define reg_ep0_rx_stall_pos 1
+#define reg_ep0_rx_stall_len 1
+#define reg_ep0_rx_stall_lsb 0
+#define xd_p_reg_ep1_tx_stall ( 0xDD12)
+#define p_reg_ep1_tx_stall 0xDD12
+#define reg_ep1_tx_stall_pos 2
+#define reg_ep1_tx_stall_len 1
+#define reg_ep1_tx_stall_lsb 0
+#define xd_p_reg_ep2_rx_stall ( 0xDD12)
+#define p_reg_ep2_rx_stall 0xDD12
+#define reg_ep2_rx_stall_pos 3
+#define reg_ep2_rx_stall_len 1
+#define reg_ep2_rx_stall_lsb 0
+#define xd_p_reg_ep3_tx_stall ( 0xDD12)
+#define p_reg_ep3_tx_stall 0xDD12
+#define reg_ep3_tx_stall_pos 4
+#define reg_ep3_tx_stall_len 1
+#define reg_ep3_tx_stall_lsb 0
+#define xd_p_reg_ep4_tx_stall ( 0xDD12)
+#define p_reg_ep4_tx_stall 0xDD12
+#define reg_ep4_tx_stall_pos 5
+#define reg_ep4_tx_stall_len 1
+#define reg_ep4_tx_stall_lsb 0
+#define xd_p_reg_ep5_tx_stall ( 0xDD12)
+#define p_reg_ep5_tx_stall 0xDD12
+#define reg_ep5_tx_stall_pos 6
+#define reg_ep5_tx_stall_len 1
+#define reg_ep5_tx_stall_lsb 0
+#define xd_p_reg_ep0_tx_nak ( 0xDD13)
+#define p_reg_ep0_tx_nak 0xDD13
+#define reg_ep0_tx_nak_pos 0
+#define reg_ep0_tx_nak_len 1
+#define reg_ep0_tx_nak_lsb 0
+#define xd_p_reg_ep0_rx_nak ( 0xDD13)
+#define p_reg_ep0_rx_nak 0xDD13
+#define reg_ep0_rx_nak_pos 1
+#define reg_ep0_rx_nak_len 1
+#define reg_ep0_rx_nak_lsb 0
+#define xd_p_reg_ep1_tx_nak ( 0xDD13)
+#define p_reg_ep1_tx_nak 0xDD13
+#define reg_ep1_tx_nak_pos 2
+#define reg_ep1_tx_nak_len 1
+#define reg_ep1_tx_nak_lsb 0
+#define xd_p_reg_ep2_rx_nak ( 0xDD13)
+#define p_reg_ep2_rx_nak 0xDD13
+#define reg_ep2_rx_nak_pos 3
+#define reg_ep2_rx_nak_len 1
+#define reg_ep2_rx_nak_lsb 0
+#define xd_p_reg_ep3_tx_nak ( 0xDD13)
+#define p_reg_ep3_tx_nak 0xDD13
+#define reg_ep3_tx_nak_pos 4
+#define reg_ep3_tx_nak_len 1
+#define reg_ep3_tx_nak_lsb 0
+#define xd_p_reg_ep4_tx_nak ( 0xDD13)
+#define p_reg_ep4_tx_nak 0xDD13
+#define reg_ep4_tx_nak_pos 5
+#define reg_ep4_tx_nak_len 1
+#define reg_ep4_tx_nak_lsb 0
+#define xd_p_reg_ep5_tx_nak ( 0xDD13)
+#define p_reg_ep5_tx_nak 0xDD13
+#define reg_ep5_tx_nak_pos 6
+#define reg_ep5_tx_nak_len 1
+#define reg_ep5_tx_nak_lsb 0
+#define xd_p_reg_ep0_tx_nak_int_en ( 0xDD14)
+#define p_reg_ep0_tx_nak_int_en 0xDD14
+#define reg_ep0_tx_nak_int_en_pos 0
+#define reg_ep0_tx_nak_int_en_len 1
+#define reg_ep0_tx_nak_int_en_lsb 0
+#define xd_p_reg_ep0_rx_nak_int_en ( 0xDD14)
+#define p_reg_ep0_rx_nak_int_en 0xDD14
+#define reg_ep0_rx_nak_int_en_pos 1
+#define reg_ep0_rx_nak_int_en_len 1
+#define reg_ep0_rx_nak_int_en_lsb 0
+#define xd_p_reg_ep1_tx_nak_int_en ( 0xDD14)
+#define p_reg_ep1_tx_nak_int_en 0xDD14
+#define reg_ep1_tx_nak_int_en_pos 2
+#define reg_ep1_tx_nak_int_en_len 1
+#define reg_ep1_tx_nak_int_en_lsb 0
+#define xd_p_reg_ep2_rx_nak_int_en ( 0xDD14)
+#define p_reg_ep2_rx_nak_int_en 0xDD14
+#define reg_ep2_rx_nak_int_en_pos 3
+#define reg_ep2_rx_nak_int_en_len 1
+#define reg_ep2_rx_nak_int_en_lsb 0
+#define xd_p_reg_ep3_tx_nak_int_en ( 0xDD14)
+#define p_reg_ep3_tx_nak_int_en 0xDD14
+#define reg_ep3_tx_nak_int_en_pos 4
+#define reg_ep3_tx_nak_int_en_len 1
+#define reg_ep3_tx_nak_int_en_lsb 0
+#define xd_p_reg_ep4_tx_nak_int_en ( 0xDD14)
+#define p_reg_ep4_tx_nak_int_en 0xDD14
+#define reg_ep4_tx_nak_int_en_pos 5
+#define reg_ep4_tx_nak_int_en_len 1
+#define reg_ep4_tx_nak_int_en_lsb 0
+#define xd_p_reg_ep5_tx_nak_int_en ( 0xDD14)
+#define p_reg_ep5_tx_nak_int_en 0xDD14
+#define reg_ep5_tx_nak_int_en_pos 6
+#define reg_ep5_tx_nak_int_en_len 1
+#define reg_ep5_tx_nak_int_en_lsb 0
+#define xd_p_reg_ep0_tx_done_int_en ( 0xDD15)
+#define p_reg_ep0_tx_done_int_en 0xDD15
+#define reg_ep0_tx_done_int_en_pos 0
+#define reg_ep0_tx_done_int_en_len 1
+#define reg_ep0_tx_done_int_en_lsb 0
+#define xd_p_reg_ep0_rx_done_int_en ( 0xDD15)
+#define p_reg_ep0_rx_done_int_en 0xDD15
+#define reg_ep0_rx_done_int_en_pos 1
+#define reg_ep0_rx_done_int_en_len 1
+#define reg_ep0_rx_done_int_en_lsb 0
+#define xd_p_reg_ep1_tx_done_int_en ( 0xDD15)
+#define p_reg_ep1_tx_done_int_en 0xDD15
+#define reg_ep1_tx_done_int_en_pos 2
+#define reg_ep1_tx_done_int_en_len 1
+#define reg_ep1_tx_done_int_en_lsb 0
+#define xd_p_reg_ep2_rx_done_int_en ( 0xDD15)
+#define p_reg_ep2_rx_done_int_en 0xDD15
+#define reg_ep2_rx_done_int_en_pos 3
+#define reg_ep2_rx_done_int_en_len 1
+#define reg_ep2_rx_done_int_en_lsb 0
+#define xd_p_reg_ep3_tx_done_int_en ( 0xDD15)
+#define p_reg_ep3_tx_done_int_en 0xDD15
+#define reg_ep3_tx_done_int_en_pos 4
+#define reg_ep3_tx_done_int_en_len 1
+#define reg_ep3_tx_done_int_en_lsb 0
+#define xd_p_reg_ep4_tx_done_int_en ( 0xDD15)
+#define p_reg_ep4_tx_done_int_en 0xDD15
+#define reg_ep4_tx_done_int_en_pos 5
+#define reg_ep4_tx_done_int_en_len 1
+#define reg_ep4_tx_done_int_en_lsb 0
+#define xd_p_reg_ep5_tx_done_int_en ( 0xDD15)
+#define p_reg_ep5_tx_done_int_en 0xDD15
+#define reg_ep5_tx_done_int_en_pos 6
+#define reg_ep5_tx_done_int_en_len 1
+#define reg_ep5_tx_done_int_en_lsb 0
+#define xd_p_reg_ep0_tx_fail_int_en ( 0xDD16)
+#define p_reg_ep0_tx_fail_int_en 0xDD16
+#define reg_ep0_tx_fail_int_en_pos 0
+#define reg_ep0_tx_fail_int_en_len 1
+#define reg_ep0_tx_fail_int_en_lsb 0
+#define xd_p_reg_ep0_rx_fail_int_en ( 0xDD16)
+#define p_reg_ep0_rx_fail_int_en 0xDD16
+#define reg_ep0_rx_fail_int_en_pos 1
+#define reg_ep0_rx_fail_int_en_len 1
+#define reg_ep0_rx_fail_int_en_lsb 0
+#define xd_p_reg_ep1_tx_fail_int_en ( 0xDD16)
+#define p_reg_ep1_tx_fail_int_en 0xDD16
+#define reg_ep1_tx_fail_int_en_pos 2
+#define reg_ep1_tx_fail_int_en_len 1
+#define reg_ep1_tx_fail_int_en_lsb 0
+#define xd_p_reg_ep2_rx_fail_int_en ( 0xDD16)
+#define p_reg_ep2_rx_fail_int_en 0xDD16
+#define reg_ep2_rx_fail_int_en_pos 3
+#define reg_ep2_rx_fail_int_en_len 1
+#define reg_ep2_rx_fail_int_en_lsb 0
+#define xd_p_reg_ep3_tx_fail_int_en ( 0xDD16)
+#define p_reg_ep3_tx_fail_int_en 0xDD16
+#define reg_ep3_tx_fail_int_en_pos 4
+#define reg_ep3_tx_fail_int_en_len 1
+#define reg_ep3_tx_fail_int_en_lsb 0
+#define xd_p_reg_ep4_tx_fail_int_en ( 0xDD16)
+#define p_reg_ep4_tx_fail_int_en 0xDD16
+#define reg_ep4_tx_fail_int_en_pos 5
+#define reg_ep4_tx_fail_int_en_len 1
+#define reg_ep4_tx_fail_int_en_lsb 0
+#define xd_p_reg_ep5_tx_fail_int_en ( 0xDD16)
+#define p_reg_ep5_tx_fail_int_en 0xDD16
+#define reg_ep5_tx_fail_int_en_pos 6
+#define reg_ep5_tx_fail_int_en_len 1
+#define reg_ep5_tx_fail_int_en_lsb 0
+#define xd_p_reg_suspend_int_en ( 0xDD17)
+#define p_reg_suspend_int_en 0xDD17
+#define reg_suspend_int_en_pos 0
+#define reg_suspend_int_en_len 1
+#define reg_suspend_int_en_lsb 0
+#define xd_p_reg_bus_reset_int_en ( 0xDD17)
+#define p_reg_bus_reset_int_en 0xDD17
+#define reg_bus_reset_int_en_pos 1
+#define reg_bus_reset_int_en_len 1
+#define reg_bus_reset_int_en_lsb 0
+#define xd_p_reg_ep0_setup_int_en ( 0xDD17)
+#define p_reg_ep0_setup_int_en 0xDD17
+#define reg_ep0_setup_int_en_pos 2
+#define reg_ep0_setup_int_en_len 1
+#define reg_ep0_setup_int_en_lsb 0
+#define xd_p_reg_ep0_tx_nak_int ( 0xDD18)
+#define p_reg_ep0_tx_nak_int 0xDD18
+#define reg_ep0_tx_nak_int_pos 0
+#define reg_ep0_tx_nak_int_len 1
+#define reg_ep0_tx_nak_int_lsb 0
+#define xd_p_reg_ep0_rx_nak_int ( 0xDD18)
+#define p_reg_ep0_rx_nak_int 0xDD18
+#define reg_ep0_rx_nak_int_pos 1
+#define reg_ep0_rx_nak_int_len 1
+#define reg_ep0_rx_nak_int_lsb 0
+#define xd_p_reg_ep1_tx_nak_int ( 0xDD18)
+#define p_reg_ep1_tx_nak_int 0xDD18
+#define reg_ep1_tx_nak_int_pos 2
+#define reg_ep1_tx_nak_int_len 1
+#define reg_ep1_tx_nak_int_lsb 0
+#define xd_p_reg_ep2_rx_nak_int ( 0xDD18)
+#define p_reg_ep2_rx_nak_int 0xDD18
+#define reg_ep2_rx_nak_int_pos 3
+#define reg_ep2_rx_nak_int_len 1
+#define reg_ep2_rx_nak_int_lsb 0
+#define xd_p_reg_ep3_tx_nak_int ( 0xDD18)
+#define p_reg_ep3_tx_nak_int 0xDD18
+#define reg_ep3_tx_nak_int_pos 4
+#define reg_ep3_tx_nak_int_len 1
+#define reg_ep3_tx_nak_int_lsb 0
+#define xd_p_reg_ep4_tx_nak_int ( 0xDD18)
+#define p_reg_ep4_tx_nak_int 0xDD18
+#define reg_ep4_tx_nak_int_pos 5
+#define reg_ep4_tx_nak_int_len 1
+#define reg_ep4_tx_nak_int_lsb 0
+#define xd_p_reg_ep5_tx_nak_int ( 0xDD18)
+#define p_reg_ep5_tx_nak_int 0xDD18
+#define reg_ep5_tx_nak_int_pos 6
+#define reg_ep5_tx_nak_int_len 1
+#define reg_ep5_tx_nak_int_lsb 0
+#define xd_p_reg_ep0_tx_done_int ( 0xDD19)
+#define p_reg_ep0_tx_done_int 0xDD19
+#define reg_ep0_tx_done_int_pos 0
+#define reg_ep0_tx_done_int_len 1
+#define reg_ep0_tx_done_int_lsb 0
+#define xd_p_reg_ep0_rx_done_int ( 0xDD19)
+#define p_reg_ep0_rx_done_int 0xDD19
+#define reg_ep0_rx_done_int_pos 1
+#define reg_ep0_rx_done_int_len 1
+#define reg_ep0_rx_done_int_lsb 0
+#define xd_p_reg_ep1_tx_done_int ( 0xDD19)
+#define p_reg_ep1_tx_done_int 0xDD19
+#define reg_ep1_tx_done_int_pos 2
+#define reg_ep1_tx_done_int_len 1
+#define reg_ep1_tx_done_int_lsb 0
+#define xd_p_reg_ep2_rx_done_int ( 0xDD19)
+#define p_reg_ep2_rx_done_int 0xDD19
+#define reg_ep2_rx_done_int_pos 3
+#define reg_ep2_rx_done_int_len 1
+#define reg_ep2_rx_done_int_lsb 0
+#define xd_p_reg_ep3_tx_done_int ( 0xDD19)
+#define p_reg_ep3_tx_done_int 0xDD19
+#define reg_ep3_tx_done_int_pos 4
+#define reg_ep3_tx_done_int_len 1
+#define reg_ep3_tx_done_int_lsb 0
+#define xd_p_reg_ep4_tx_done_int ( 0xDD19)
+#define p_reg_ep4_tx_done_int 0xDD19
+#define reg_ep4_tx_done_int_pos 5
+#define reg_ep4_tx_done_int_len 1
+#define reg_ep4_tx_done_int_lsb 0
+#define xd_p_reg_ep5_tx_done_int ( 0xDD19)
+#define p_reg_ep5_tx_done_int 0xDD19
+#define reg_ep5_tx_done_int_pos 6
+#define reg_ep5_tx_done_int_len 1
+#define reg_ep5_tx_done_int_lsb 0
+#define xd_p_reg_ep0_tx_fail_int ( 0xDD1A)
+#define p_reg_ep0_tx_fail_int 0xDD1A
+#define reg_ep0_tx_fail_int_pos 0
+#define reg_ep0_tx_fail_int_len 1
+#define reg_ep0_tx_fail_int_lsb 0
+#define xd_p_reg_ep0_rx_fail_int ( 0xDD1A)
+#define p_reg_ep0_rx_fail_int 0xDD1A
+#define reg_ep0_rx_fail_int_pos 1
+#define reg_ep0_rx_fail_int_len 1
+#define reg_ep0_rx_fail_int_lsb 0
+#define xd_p_reg_ep1_tx_fail_int ( 0xDD1A)
+#define p_reg_ep1_tx_fail_int 0xDD1A
+#define reg_ep1_tx_fail_int_pos 2
+#define reg_ep1_tx_fail_int_len 1
+#define reg_ep1_tx_fail_int_lsb 0
+#define xd_p_reg_ep2_rx_fail_int ( 0xDD1A)
+#define p_reg_ep2_rx_fail_int 0xDD1A
+#define reg_ep2_rx_fail_int_pos 3
+#define reg_ep2_rx_fail_int_len 1
+#define reg_ep2_rx_fail_int_lsb 0
+#define xd_p_reg_ep3_tx_fail_int ( 0xDD1A)
+#define p_reg_ep3_tx_fail_int 0xDD1A
+#define reg_ep3_tx_fail_int_pos 4
+#define reg_ep3_tx_fail_int_len 1
+#define reg_ep3_tx_fail_int_lsb 0
+#define xd_p_reg_ep4_tx_fail_int ( 0xDD1A)
+#define p_reg_ep4_tx_fail_int 0xDD1A
+#define reg_ep4_tx_fail_int_pos 5
+#define reg_ep4_tx_fail_int_len 1
+#define reg_ep4_tx_fail_int_lsb 0
+#define xd_p_reg_ep5_tx_fail_int ( 0xDD1A)
+#define p_reg_ep5_tx_fail_int 0xDD1A
+#define reg_ep5_tx_fail_int_pos 6
+#define reg_ep5_tx_fail_int_len 1
+#define reg_ep5_tx_fail_int_lsb 0
+#define xd_p_reg_suspend_int ( 0xDD1B)
+#define p_reg_suspend_int 0xDD1B
+#define reg_suspend_int_pos 0
+#define reg_suspend_int_len 1
+#define reg_suspend_int_lsb 0
+#define xd_p_reg_bus_reset_int ( 0xDD1B)
+#define p_reg_bus_reset_int 0xDD1B
+#define reg_bus_reset_int_pos 1
+#define reg_bus_reset_int_len 1
+#define reg_bus_reset_int_lsb 0
+#define xd_p_reg_ep0_setup_int ( 0xDD1B)
+#define p_reg_ep0_setup_int 0xDD1B
+#define reg_ep0_setup_int_pos 2
+#define reg_ep0_setup_int_len 1
+#define reg_ep0_setup_int_lsb 0
+#define xd_r_usbc_int ( 0xDD1B)
+#define r_usbc_int 0xDD1B
+#define usbc_int_pos 3
+#define usbc_int_len 1
+#define usbc_int_lsb 0
+#define xd_r_usb_ir_int ( 0xDD1B)
+#define r_usb_ir_int 0xDD1B
+#define usb_ir_int_pos 4
+#define usb_ir_int_len 1
+#define usb_ir_int_lsb 0
+#define xd_p_reg_ep0_tx_rst ( 0xDD1D)
+#define p_reg_ep0_tx_rst 0xDD1D
+#define reg_ep0_tx_rst_pos 0
+#define reg_ep0_tx_rst_len 1
+#define reg_ep0_tx_rst_lsb 0
+#define xd_p_reg_ep0_rx_rst ( 0xDD1D)
+#define p_reg_ep0_rx_rst 0xDD1D
+#define reg_ep0_rx_rst_pos 1
+#define reg_ep0_rx_rst_len 1
+#define reg_ep0_rx_rst_lsb 0
+#define xd_p_reg_ep1_tx_rst ( 0xDD1D)
+#define p_reg_ep1_tx_rst 0xDD1D
+#define reg_ep1_tx_rst_pos 2
+#define reg_ep1_tx_rst_len 1
+#define reg_ep1_tx_rst_lsb 0
+#define xd_p_reg_ep2_rx_rst ( 0xDD1D)
+#define p_reg_ep2_rx_rst 0xDD1D
+#define reg_ep2_rx_rst_pos 3
+#define reg_ep2_rx_rst_len 1
+#define reg_ep2_rx_rst_lsb 0
+#define xd_p_reg_ep3_tx_rst ( 0xDD1D)
+#define p_reg_ep3_tx_rst 0xDD1D
+#define reg_ep3_tx_rst_pos 4
+#define reg_ep3_tx_rst_len 1
+#define reg_ep3_tx_rst_lsb 0
+#define xd_p_reg_ep4_tx_rst ( 0xDD1D)
+#define p_reg_ep4_tx_rst 0xDD1D
+#define reg_ep4_tx_rst_pos 5
+#define reg_ep4_tx_rst_len 1
+#define reg_ep4_tx_rst_lsb 0
+#define xd_p_reg_ep5_tx_rst ( 0xDD1D)
+#define p_reg_ep5_tx_rst 0xDD1D
+#define reg_ep5_tx_rst_pos 6
+#define reg_ep5_tx_rst_len 1
+#define reg_ep5_tx_rst_lsb 0
+#define xd_r_reg_ep0_tx_active ( 0xDD1E)
+#define r_reg_ep0_tx_active 0xDD1E
+#define reg_ep0_tx_active_pos 0
+#define reg_ep0_tx_active_len 1
+#define reg_ep0_tx_active_lsb 0
+#define xd_r_reg_ep0_rx_active ( 0xDD1E)
+#define r_reg_ep0_rx_active 0xDD1E
+#define reg_ep0_rx_active_pos 1
+#define reg_ep0_rx_active_len 1
+#define reg_ep0_rx_active_lsb 0
+#define xd_r_reg_ep1_tx_active ( 0xDD1E)
+#define r_reg_ep1_tx_active 0xDD1E
+#define reg_ep1_tx_active_pos 2
+#define reg_ep1_tx_active_len 1
+#define reg_ep1_tx_active_lsb 0
+#define xd_r_reg_ep2_rx_active ( 0xDD1E)
+#define r_reg_ep2_rx_active 0xDD1E
+#define reg_ep2_rx_active_pos 3
+#define reg_ep2_rx_active_len 1
+#define reg_ep2_rx_active_lsb 0
+#define xd_r_reg_ep3_tx_active ( 0xDD1E)
+#define r_reg_ep3_tx_active 0xDD1E
+#define reg_ep3_tx_active_pos 4
+#define reg_ep3_tx_active_len 1
+#define reg_ep3_tx_active_lsb 0
+#define xd_r_reg_ep4_tx_active ( 0xDD1E)
+#define r_reg_ep4_tx_active 0xDD1E
+#define reg_ep4_tx_active_pos 5
+#define reg_ep4_tx_active_len 1
+#define reg_ep4_tx_active_lsb 0
+#define xd_r_reg_ep5_tx_active ( 0xDD1E)
+#define r_reg_ep5_tx_active 0xDD1E
+#define reg_ep5_tx_active_pos 6
+#define reg_ep5_tx_active_len 1
+#define reg_ep5_tx_active_lsb 0
+#define xd_p_reg_usb_setup_reset ( 0xDD1F)
+#define p_reg_usb_setup_reset 0xDD1F
+#define reg_usb_setup_reset_pos 0
+#define reg_usb_setup_reset_len 1
+#define reg_usb_setup_reset_lsb 0
+#define xd_p_reg_usb_ep4_retry_new ( 0xDD1F)
+#define p_reg_usb_ep4_retry_new 0xDD1F
+#define reg_usb_ep4_retry_new_pos 1
+#define reg_usb_ep4_retry_new_len 1
+#define reg_usb_ep4_retry_new_lsb 0
+#define xd_p_reg_usb_ep5_retry_new ( 0xDD1F)
+#define p_reg_usb_ep5_retry_new 0xDD1F
+#define reg_usb_ep5_retry_new_pos 2
+#define reg_usb_ep5_retry_new_len 1
+#define reg_usb_ep5_retry_new_lsb 0
diff --git a/v4l/kernel-2.6.tmp/usbdma_biu_reg.h b/v4l/kernel-2.6.tmp/usbdma_biu_reg.h
new file mode 100644
index 0000000..b01d523
--- /dev/null
+++ b/v4l/kernel-2.6.tmp/usbdma_biu_reg.h
@@ -0,0 +1,172 @@
+// biu_reg.h 1-9-2006
+// gen_biu Ver 1.9 generated by luke
+#define xd_p_reg_ep_rx_addr ( 0xDD80)
+#define p_reg_ep_rx_addr 0xDD80
+#define reg_ep_rx_addr_pos 2
+#define reg_ep_rx_addr_len 6
+#define reg_ep_rx_addr_lsb 0
+#define xd_p_reg_ep0_tx_addr ( 0xDD81)
+#define p_reg_ep0_tx_addr 0xDD81
+#define reg_ep0_tx_addr_pos 2
+#define reg_ep0_tx_addr_len 6
+#define reg_ep0_tx_addr_lsb 0
+#define xd_p_reg_ep1_tx_addr ( 0xDD82)
+#define p_reg_ep1_tx_addr 0xDD82
+#define reg_ep1_tx_addr_pos 2
+#define reg_ep1_tx_addr_len 6
+#define reg_ep1_tx_addr_lsb 0
+#define xd_p_reg_ep3_tx_addr ( 0xDD83)
+#define p_reg_ep3_tx_addr 0xDD83
+#define reg_ep3_tx_addr_pos 2
+#define reg_ep3_tx_addr_len 6
+#define reg_ep3_tx_addr_lsb 0
+#define xd_p_reg_ep_rx_len ( 0xDD84)
+#define p_reg_ep_rx_len 0xDD84
+#define reg_ep_rx_len_pos 0
+#define reg_ep_rx_len_len 8
+#define reg_ep_rx_len_lsb 0
+#define xd_p_reg_ep0_tx_len ( 0xDD85)
+#define p_reg_ep0_tx_len 0xDD85
+#define reg_ep0_tx_len_pos 0
+#define reg_ep0_tx_len_len 8
+#define reg_ep0_tx_len_lsb 0
+#define xd_p_reg_ep1_tx_len ( 0xDD86)
+#define p_reg_ep1_tx_len 0xDD86
+#define reg_ep1_tx_len_pos 0
+#define reg_ep1_tx_len_len 8
+#define reg_ep1_tx_len_lsb 0
+#define xd_p_reg_ep3_tx_len ( 0xDD87)
+#define p_reg_ep3_tx_len 0xDD87
+#define reg_ep3_tx_len_pos 0
+#define reg_ep3_tx_len_len 8
+#define reg_ep3_tx_len_lsb 0
+#define xd_p_reg_ep4_tx_len_7_0 ( 0xDD88)
+#define p_reg_ep4_tx_len_7_0 0xDD88
+#define reg_ep4_tx_len_7_0_pos 0
+#define reg_ep4_tx_len_7_0_len 8
+#define reg_ep4_tx_len_7_0_lsb 0
+#define xd_p_reg_ep4_tx_len_15_8 ( 0xDD89)
+#define p_reg_ep4_tx_len_15_8 0xDD89
+#define reg_ep4_tx_len_15_8_pos 0
+#define reg_ep4_tx_len_15_8_len 8
+#define reg_ep4_tx_len_15_8_lsb 8
+#define xd_p_reg_ep5_tx_len_7_0 ( 0xDD8A)
+#define p_reg_ep5_tx_len_7_0 0xDD8A
+#define reg_ep5_tx_len_7_0_pos 0
+#define reg_ep5_tx_len_7_0_len 8
+#define reg_ep5_tx_len_7_0_lsb 0
+#define xd_p_reg_ep5_tx_len_15_8 ( 0xDD8B)
+#define p_reg_ep5_tx_len_15_8 0xDD8B
+#define reg_ep5_tx_len_15_8_pos 0
+#define reg_ep5_tx_len_15_8_len 8
+#define reg_ep5_tx_len_15_8_lsb 8
+#define xd_p_reg_usb_reset_addr ( 0xDD8C)
+#define p_reg_usb_reset_addr 0xDD8C
+#define reg_usb_reset_addr_pos 0
+#define reg_usb_reset_addr_len 7
+#define reg_usb_reset_addr_lsb 0
+#define xd_p_reg_usb_reset ( 0xDD8C)
+#define p_reg_usb_reset 0xDD8C
+#define reg_usb_reset_pos 7
+#define reg_usb_reset_len 1
+#define reg_usb_reset_lsb 0
+#define xd_p_reg_usb_sync_in ( 0xDD8D)
+#define p_reg_usb_sync_in 0xDD8D
+#define reg_usb_sync_in_pos 0
+#define reg_usb_sync_in_len 1
+#define reg_usb_sync_in_lsb 0
+#define xd_p_reg_usb_sync_txready ( 0xDD8D)
+#define p_reg_usb_sync_txready 0xDD8D
+#define reg_usb_sync_txready_pos 1
+#define reg_usb_sync_txready_len 1
+#define reg_usb_sync_txready_lsb 0
+#define xd_p_reg_usb_clk_phase ( 0xDD93)
+#define p_reg_usb_clk_phase 0xDD93
+#define reg_usb_clk_phase_pos 0
+#define reg_usb_clk_phase_len 2
+#define reg_usb_clk_phase_lsb 0
+#define xd_p_reg_usb_clk_sel ( 0xDD93)
+#define p_reg_usb_clk_sel 0xDD93
+#define reg_usb_clk_sel_pos 4
+#define reg_usb_clk_sel_len 4
+#define reg_usb_clk_sel_lsb 0
+#define xd_p_reg_usb_fifo_ptr ( 0xDD94)
+#define p_reg_usb_fifo_ptr 0xDD94
+#define reg_usb_fifo_ptr_pos 0
+#define reg_usb_fifo_ptr_len 3
+#define reg_usb_fifo_ptr_lsb 0
+#define xd_p_reg_usb_fifo_byte ( 0xDD94)
+#define p_reg_usb_fifo_byte 0xDD94
+#define reg_usb_fifo_byte_pos 3
+#define reg_usb_fifo_byte_len 2
+#define reg_usb_fifo_byte_lsb 0
+#define xd_p_reg_usb_fifo_sys ( 0xDD94)
+#define p_reg_usb_fifo_sys 0xDD94
+#define reg_usb_fifo_sys_pos 5
+#define reg_usb_fifo_sys_len 1
+#define reg_usb_fifo_sys_lsb 0
+#define xd_p_usbdma_utmi_a_ctl_i_7_0 ( 0xDDA0)
+#define p_usbdma_utmi_a_ctl_i_7_0 0xDDA0
+#define usbdma_utmi_a_ctl_i_7_0_pos 0
+#define usbdma_utmi_a_ctl_i_7_0_len 8
+#define usbdma_utmi_a_ctl_i_7_0_lsb 0
+#define xd_p_usbdma_utmi_a_ctl_i_15_8 ( 0xDDA1)
+#define p_usbdma_utmi_a_ctl_i_15_8 0xDDA1
+#define usbdma_utmi_a_ctl_i_15_8_pos 0
+#define usbdma_utmi_a_ctl_i_15_8_len 8
+#define usbdma_utmi_a_ctl_i_15_8_lsb 8
+#define xd_p_usbdma_utmi_a_ctl_i_23_16 ( 0xDDA2)
+#define p_usbdma_utmi_a_ctl_i_23_16 0xDDA2
+#define usbdma_utmi_a_ctl_i_23_16_pos 0
+#define usbdma_utmi_a_ctl_i_23_16_len 8
+#define usbdma_utmi_a_ctl_i_23_16_lsb 16
+#define xd_p_usbdma_utmi_a_ctl_i_31_24 ( 0xDDA3)
+#define p_usbdma_utmi_a_ctl_i_31_24 0xDDA3
+#define usbdma_utmi_a_ctl_i_31_24_pos 0
+#define usbdma_utmi_a_ctl_i_31_24_len 8
+#define usbdma_utmi_a_ctl_i_31_24_lsb 24
+#define xd_p_usbdma_utmi_a_ctl_i_39_32 ( 0xDDA4)
+#define p_usbdma_utmi_a_ctl_i_39_32 0xDDA4
+#define usbdma_utmi_a_ctl_i_39_32_pos 0
+#define usbdma_utmi_a_ctl_i_39_32_len 8
+#define usbdma_utmi_a_ctl_i_39_32_lsb 32
+#define xd_p_usbdma_utmi_d_ctl_i_7_0 ( 0xDDA5)
+#define p_usbdma_utmi_d_ctl_i_7_0 0xDDA5
+#define usbdma_utmi_d_ctl_i_7_0_pos 0
+#define usbdma_utmi_d_ctl_i_7_0_len 8
+#define usbdma_utmi_d_ctl_i_7_0_lsb 0
+#define xd_p_usbdma_utmi_d_ctl_i_10_8 ( 0xDDA6)
+#define p_usbdma_utmi_d_ctl_i_10_8 0xDDA6
+#define usbdma_utmi_d_ctl_i_10_8_pos 0
+#define usbdma_utmi_d_ctl_i_10_8_len 3
+#define usbdma_utmi_d_ctl_i_10_8_lsb 8
+#define xd_p_usbdma_utmi_pwrmode ( 0xDDA6)
+#define p_usbdma_utmi_pwrmode 0xDDA6
+#define usbdma_utmi_pwrmode_pos 3
+#define usbdma_utmi_pwrmode_len 1
+#define usbdma_utmi_pwrmode_lsb 0
+#define xd_p_usbdma_utmi_vbus_int_en ( 0xDDA7)
+#define p_usbdma_utmi_vbus_int_en 0xDDA7
+#define usbdma_utmi_vbus_int_en_pos 0
+#define usbdma_utmi_vbus_int_en_len 1
+#define usbdma_utmi_vbus_int_en_lsb 0
+#define xd_p_usbdma_utmi_vbus_int_pol ( 0xDDA7)
+#define p_usbdma_utmi_vbus_int_pol 0xDDA7
+#define usbdma_utmi_vbus_int_pol_pos 1
+#define usbdma_utmi_vbus_int_pol_len 1
+#define usbdma_utmi_vbus_int_pol_lsb 0
+#define xd_r_usbdma_utmi_vbus_int ( 0xDDA8)
+#define r_usbdma_utmi_vbus_int 0xDDA8
+#define usbdma_utmi_vbus_int_pos 0
+#define usbdma_utmi_vbus_int_len 1
+#define usbdma_utmi_vbus_int_lsb 0
+#define xd_r_usbdma_utmi_vbus_status ( 0xDDA8)
+#define r_usbdma_utmi_vbus_status 0xDDA8
+#define usbdma_utmi_vbus_status_pos 1
+#define usbdma_utmi_vbus_status_len 1
+#define usbdma_utmi_vbus_status_lsb 0
+#define xd_r_usbdma_utmi_clkrdy ( 0xDDA8)
+#define r_usbdma_utmi_clkrdy 0xDDA8
+#define usbdma_utmi_clkrdy_pos 2
+#define usbdma_utmi_clkrdy_len 1
+#define usbdma_utmi_clkrdy_lsb 0