From fecdd9457cd3912c2b89aff1f99db0ba669af93b Mon Sep 17 00:00:00 2001 From: Oliver Schinagl Date: Tue, 28 Jun 2011 15:40:27 +0200 Subject: 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). --- Makefile | 167 + Makefile.release | 102 + af35irtbl.bin | Bin 0 -> 238 bytes api/Afa_AF9007.c | 69 + api/Afa_AF9007.h | 60 + api/Afa_AF9007_Script.h | 92 + api/Afa_PEACOCK.c | 394 + api/Afa_PEACOCK.h | 60 + api/Afa_Peacock_Script.h | 110 + api/Afa_Pictor_Script.h | 78 + api/Common.h | 286 + api/Elonics_E4000.c | 108 + api/Elonics_E4000.h | 60 + api/Elonics_E4000_Script.h | 171 + api/FCI_FC2580.c | 119 + api/FCI_FC2580.h | 62 + api/FCI_FC2580_Script.h | 61 + api/Fitipower_FC0011.c | 453 + api/Fitipower_FC0011.h | 61 + api/Fitipower_FC0011_Script.h | 83 + api/Fitipower_FC0012.c | 346 + api/Fitipower_FC0012.h | 60 + api/Fitipower_FC0012_Script.h | 77 + api/Freescale_MC44CD02.c | 307 + api/Freescale_MC44CD02.h | 61 + api/Freescale_MC44CD02_Script.h | 129 + api/ITD30x0.c | 703 ++ api/ITD30x0.h | 254 + api/Infineon_TUA6039.c | 248 + api/Infineon_TUA6039.h | 60 + api/Infineon_TUA6039_Script.h | 107 + api/Infineon_TUA8010.c | 309 + api/Infineon_TUA8010.h | 60 + api/Infineon_TUA8010_Script.h | 64 + api/Infineon_TUA9001.c | 283 + api/Infineon_TUA9001.h | 61 + api/Infineon_TUA9001_Script.h | 65 + api/Integrant_ITD3020.c | 106 + api/Integrant_ITD3020.h | 60 + api/Integrant_ITD3020_Script.h | 92 + api/MXL5005.c | 2783 +++++ api/MXL5005.h | 68 + api/MXL5005_Initialize.c | 1259 +++ api/Maxlinear_MXL5005.c | 325 + api/Maxlinear_MXL5005.h | 64 + api/Maxlinear_MXL5005_Script.h | 88 + api/Microtune_MT2260B0.c | 115 + api/Microtune_MT2260B0.h | 66 + api/Microtune_MT2260B0_Script.h | 130 + api/Microtune_MT2266.c | 178 + api/Microtune_MT2266.h | 71 + api/Microtune_MT2266_Script.h | 89 + api/Microtune_MT2266_TA4029CTC_Script.h | 89 + api/Panasonic_ENV77H11D5.c | 114 + api/Panasonic_ENV77H11D5.h | 60 + api/Panasonic_ENV77H11D5_Script.h | 128 + api/Peacock.c | 2 + api/Peacock.h | 0 api/Philips_FQD1218ME_MK5.c | 146 + api/Philips_FQD1218ME_MK5.h | 60 + api/Philips_FQD1218ME_MK5_Script.h | 92 + api/Philips_TD1316AFIHP.c | 136 + api/Philips_TD1316AFIHP.h | 60 + api/Philips_TD1316AFIHP_Script.h | 78 + api/Philips_TD1316_Script.h | 78 + api/Philips_TDA18271.c | 139 + api/Philips_TDA18271.h | 60 + api/Philips_TDA18271_C2.c | 128 + api/Philips_TDA18271_C2.h | 42 + api/Philips_TDA18271_C2_Askey.c | 128 + api/Philips_TDA18271_C2_Askey.h | 42 + api/Philips_TDA18271_C2_Askey_Script.h | 58 + api/Philips_TDA18271_C2_Script.h | 58 + api/Philips_TDA18271_Script.h | 57 + api/Philips_TDA18291HN.c | 166 + api/Philips_TDA18291HN.h | 60 + api/Philips_TDA18291HN_Script.h | 84 + api/TDA18271.c | 2933 ++++++ api/TDA18271.h | 67 + api/TDA18271Local.h | 650 ++ api/TDA18271StaticInstance_C2.h | 1670 +++ api/TDA18271StaticInstance_C2_Askey.h | 1668 +++ api/TDA18271_C2.c | 3599 +++++++ api/TDA18271_C2.h | 177 + api/TDA18271_C2_Askey.c | 3637 +++++++ api/TDA18271_C2_Askey.h | 177 + api/TDA18271local_C2.h | 891 ++ api/TDA18271local_C2_Askey.h | 891 ++ api/TDA18291.c | 1315 +++ api/TDA18291.h | 74 + api/TDA18291local.h | 347 + api/Xceive_XC3028L.c | 180 + api/Xceive_XC3028L.h | 60 + api/Xceive_XC3028L_Script.h | 58 + api/Xceive_XC4000.c | 213 + api/Xceive_XC4000.h | 60 + api/Xceive_XC4000_Script.h | 58 + api/cmd.c | 990 ++ api/cmd.h | 209 + api/demodulator.c | 462 + api/demodulator.h | 1305 +++ api/demodulatorextend.c | 750 ++ api/demodulatorextend.h | 1406 +++ api/driver_tua8010.c | 366 + api/driver_tua8010.h | 114 + api/driver_tua8010_NeededFunctions.h | 98 + api/driver_tua9001.c | 409 + api/driver_tua9001.h | 112 + api/driver_tua9001_NeededFunctions.h | 77 + api/e4000.c | 859 ++ api/e4000.h | 15 + api/error.h | 147 + api/fc2580.c | 451 + api/fc2580.h | 191 + api/firmware.h | 10713 ++++++++++++++++++++ api/i2c_driver.c | 65 + api/i2c_driver.h | 21 + api/inttype.h | 40 + api/iocontrol.h | 738 ++ api/mt2260.c | 1992 ++++ api/mt2260.h | 611 ++ api/mt2260_userdef.c | 221 + api/mt2260_userdef.h | 250 + api/mt2266.c | 2368 +++++ api/mt2266.h | 780 ++ api/mt2266_userdef.c | 545 + api/mt2266_userdef.h | 288 + api/mt_errordef.h | 143 + api/register.h | 13519 +++++++++++++++++++++++++ api/standard.c | 4093 ++++++++ api/standard.h | 1013 ++ api/type.h | 915 ++ api/usb2impl.c | 177 + api/usb2impl.h | 38 + api/user.c | 142 + api/user.h | 122 + api/variable.h | 271 + api/version.h | 3 + api/xc3028_channelmaps.h | 2601 +++++ api/xc3028_control.c | 549 + api/xc3028_control.h | 180 + api/xc3028_firmwares.h | 16191 ++++++++++++++++++++++++++++++ api/xc3028_scodes.h | 664 ++ api/xc4000_channelmaps.h | 4028 ++++++++ api/xc4000_control.c | 347 + api/xc4000_control.h | 145 + api/xc4000_firmwares.h | 2993 ++++++ api/xc4000_scodes.h | 906 ++ api/xc4000_standards.h | 127 + src/af903x-core.c | 126 + src/af903x-devices.c | 214 + src/af903x-drv.c | 1579 +++ src/af903x-fe.c | 249 + src/af903x-ioctl.h | 29 + src/af903x-tuner.c | 92 + src/af903x.h | 225 + src/userdef.h | 24 + v4l/kernel-2.6.18/demux.h | 278 + v4l/kernel-2.6.18/dmxdev.h | 108 + v4l/kernel-2.6.18/dvb-pll.h | 64 + v4l/kernel-2.6.18/dvb-usb-ids.h | 110 + v4l/kernel-2.6.18/dvb-usb.h | 346 + v4l/kernel-2.6.18/dvb_demux.h | 140 + v4l/kernel-2.6.18/dvb_frontend.h | 163 + v4l/kernel-2.6.18/dvb_net.h | 46 + v4l/kernel-2.6.18/dvb_ringbuffer.h | 174 + v4l/kernel-2.6.18/dvbdev.h | 105 + v4l/kernel-2.6.19/demux.h | 278 + v4l/kernel-2.6.19/dmxdev.h | 108 + v4l/kernel-2.6.19/dvb-pll.h | 64 + v4l/kernel-2.6.19/dvb-usb-ids.h | 131 + v4l/kernel-2.6.19/dvb-usb.h | 408 + v4l/kernel-2.6.19/dvb_demux.h | 140 + v4l/kernel-2.6.19/dvb_frontend.h | 169 + v4l/kernel-2.6.19/dvb_net.h | 46 + v4l/kernel-2.6.19/dvb_ringbuffer.h | 174 + v4l/kernel-2.6.19/dvbdev.h | 127 + v4l/kernel-2.6.20/demux.h | 278 + v4l/kernel-2.6.20/dmxdev.h | 108 + v4l/kernel-2.6.20/dvb-pll.h | 67 + v4l/kernel-2.6.20/dvb-usb-ids.h | 139 + v4l/kernel-2.6.20/dvb-usb.h | 408 + v4l/kernel-2.6.20/dvb_demux.h | 140 + v4l/kernel-2.6.20/dvb_frontend.h | 169 + v4l/kernel-2.6.20/dvb_net.h | 46 + v4l/kernel-2.6.20/dvb_ringbuffer.h | 174 + v4l/kernel-2.6.20/dvbdev.h | 127 + v4l/kernel-2.6.21/demux.h | 278 + v4l/kernel-2.6.21/dmxdev.h | 108 + v4l/kernel-2.6.21/dvb-pll.h | 67 + v4l/kernel-2.6.21/dvb-usb-ids.h | 144 + v4l/kernel-2.6.21/dvb-usb.h | 408 + v4l/kernel-2.6.21/dvb_demux.h | 140 + v4l/kernel-2.6.21/dvb_frontend.h | 169 + v4l/kernel-2.6.21/dvb_net.h | 46 + v4l/kernel-2.6.21/dvb_ringbuffer.h | 174 + v4l/kernel-2.6.21/dvbdev.h | 127 + v4l/kernel-2.6.22/demux.h | 278 + v4l/kernel-2.6.22/dmxdev.h | 110 + v4l/kernel-2.6.22/dvb-pll.h | 81 + v4l/kernel-2.6.22/dvb-usb-ids.h | 155 + v4l/kernel-2.6.22/dvb-usb.h | 408 + v4l/kernel-2.6.22/dvb_demux.h | 140 + v4l/kernel-2.6.22/dvb_frontend.h | 169 + v4l/kernel-2.6.22/dvb_net.h | 47 + v4l/kernel-2.6.22/dvb_ringbuffer.h | 174 + v4l/kernel-2.6.22/dvbdev.h | 128 + v4l/kernel-2.6.23/demux.h | 278 + v4l/kernel-2.6.23/dmxdev.h | 110 + v4l/kernel-2.6.23/dvb-pll.h | 60 + v4l/kernel-2.6.23/dvb-usb-ids.h | 161 + v4l/kernel-2.6.23/dvb-usb.h | 397 + v4l/kernel-2.6.23/dvb_demux.h | 140 + v4l/kernel-2.6.23/dvb_frontend.h | 169 + v4l/kernel-2.6.23/dvb_net.h | 47 + v4l/kernel-2.6.23/dvb_ringbuffer.h | 174 + v4l/kernel-2.6.23/dvbdev.h | 128 + v4l/kernel-2.6.24/demux.h | 278 + v4l/kernel-2.6.24/dmxdev.h | 110 + v4l/kernel-2.6.24/dvb-pll.h | 60 + v4l/kernel-2.6.24/dvb-usb-ids.h | 175 + v4l/kernel-2.6.24/dvb-usb.h | 397 + v4l/kernel-2.6.24/dvb_demux.h | 140 + v4l/kernel-2.6.24/dvb_frontend.h | 180 + v4l/kernel-2.6.24/dvb_net.h | 47 + v4l/kernel-2.6.24/dvb_ringbuffer.h | 174 + v4l/kernel-2.6.24/dvbdev.h | 128 + v4l/kernel-2.6.25/demux.h | 278 + v4l/kernel-2.6.25/dmxdev.h | 110 + v4l/kernel-2.6.25/dvb-pll.h | 60 + v4l/kernel-2.6.25/dvb-usb-ids.h | 197 + v4l/kernel-2.6.25/dvb-usb.h | 397 + v4l/kernel-2.6.25/dvb_demux.h | 140 + v4l/kernel-2.6.25/dvb_frontend.h | 207 + v4l/kernel-2.6.25/dvb_net.h | 47 + v4l/kernel-2.6.25/dvb_ringbuffer.h | 174 + v4l/kernel-2.6.25/dvbdev.h | 128 + v4l/kernel-2.6.26/demux.h | 280 + v4l/kernel-2.6.26/dmxdev.h | 110 + v4l/kernel-2.6.26/dvb-pll.h | 51 + v4l/kernel-2.6.26/dvb-usb-ids.h | 201 + v4l/kernel-2.6.26/dvb-usb.h | 400 + v4l/kernel-2.6.26/dvb_demux.h | 140 + v4l/kernel-2.6.26/dvb_frontend.h | 207 + v4l/kernel-2.6.26/dvb_net.h | 47 + v4l/kernel-2.6.26/dvb_ringbuffer.h | 182 + v4l/kernel-2.6.26/dvbdev.h | 139 + v4l/kernel-2.6.27/demux.h | 280 + v4l/kernel-2.6.27/dmxdev.h | 110 + v4l/kernel-2.6.27/dvb-pll.h | 52 + v4l/kernel-2.6.27/dvb-usb-ids.h | 210 + v4l/kernel-2.6.27/dvb-usb.h | 400 + v4l/kernel-2.6.27/dvb_demux.h | 140 + v4l/kernel-2.6.27/dvb_frontend.h | 207 + v4l/kernel-2.6.27/dvb_net.h | 47 + v4l/kernel-2.6.27/dvb_ringbuffer.h | 186 + v4l/kernel-2.6.27/dvbdev.h | 139 + v4l/kernel-2.6.28/demux.h | 280 + v4l/kernel-2.6.28/dmxdev.h | 110 + v4l/kernel-2.6.28/dvb-pll.h | 52 + v4l/kernel-2.6.28/dvb-usb-ids.h | 237 + v4l/kernel-2.6.28/dvb-usb.h | 400 + v4l/kernel-2.6.28/dvb_demux.h | 140 + v4l/kernel-2.6.28/dvb_frontend.h | 240 + v4l/kernel-2.6.28/dvb_net.h | 47 + v4l/kernel-2.6.28/dvb_ringbuffer.h | 186 + v4l/kernel-2.6.28/dvbdev.h | 143 + v4l/kernel-2.6.29/demux.h | 280 + v4l/kernel-2.6.29/dmxdev.h | 110 + v4l/kernel-2.6.29/dvb-pll.h | 52 + v4l/kernel-2.6.29/dvb-usb-ids.h | 237 + v4l/kernel-2.6.29/dvb-usb.h | 400 + v4l/kernel-2.6.29/dvb_demux.h | 140 + v4l/kernel-2.6.29/dvb_frontend.h | 240 + v4l/kernel-2.6.29/dvb_net.h | 47 + v4l/kernel-2.6.29/dvb_ringbuffer.h | 186 + v4l/kernel-2.6.29/dvbdev.h | 143 + v4l/kernel-2.6.tmp/compat.h | 503 + v4l/kernel-2.6.tmp/demux.h | 278 + v4l/kernel-2.6.tmp/dmxdev.c | 1126 +++ v4l/kernel-2.6.tmp/dmxdev.h | 121 + v4l/kernel-2.6.tmp/dummy_ram.h | 447 + v4l/kernel-2.6.tmp/dvb-pll.c | 874 ++ v4l/kernel-2.6.tmp/dvb-pll.h | 60 + v4l/kernel-2.6.tmp/dvb-usb-common.h | 51 + v4l/kernel-2.6.tmp/dvb-usb-dvb.c | 206 + v4l/kernel-2.6.tmp/dvb-usb-firmware.c | 146 + v4l/kernel-2.6.tmp/dvb-usb-i2c.c | 48 + v4l/kernel-2.6.tmp/dvb-usb-ids.h | 183 + v4l/kernel-2.6.tmp/dvb-usb-init.c | 285 + v4l/kernel-2.6.tmp/dvb-usb-remote.c | 222 + v4l/kernel-2.6.tmp/dvb-usb-urb.c | 95 + v4l/kernel-2.6.tmp/dvb-usb.h | 412 + v4l/kernel-2.6.tmp/dvb_demux.c | 1222 +++ v4l/kernel-2.6.tmp/dvb_demux.h | 147 + v4l/kernel-2.6.tmp/dvb_filter.c | 603 ++ v4l/kernel-2.6.tmp/dvb_filter.h | 246 + v4l/kernel-2.6.tmp/dvb_frontend.c | 1241 +++ v4l/kernel-2.6.tmp/dvb_frontend.h | 214 + v4l/kernel-2.6.tmp/dvb_math.c | 145 + v4l/kernel-2.6.tmp/dvb_math.h | 58 + v4l/kernel-2.6.tmp/dvb_net.c | 1576 +++ v4l/kernel-2.6.tmp/dvb_net.h | 47 + v4l/kernel-2.6.tmp/dvb_ringbuffer.c | 266 + v4l/kernel-2.6.tmp/dvb_ringbuffer.h | 174 + v4l/kernel-2.6.tmp/dvbdev.c | 445 + v4l/kernel-2.6.tmp/dvbdev.h | 128 + v4l/kernel-2.6.tmp/usb-urb.c | 247 + v4l/kernel-2.6.tmp/usb_biu_reg.h | 557 + v4l/kernel-2.6.tmp/usbdma_biu_reg.h | 172 + 310 files changed, 143392 insertions(+) create mode 100644 Makefile create mode 100644 Makefile.release create mode 100644 af35irtbl.bin create mode 100644 api/Afa_AF9007.c create mode 100644 api/Afa_AF9007.h create mode 100644 api/Afa_AF9007_Script.h create mode 100644 api/Afa_PEACOCK.c create mode 100644 api/Afa_PEACOCK.h create mode 100644 api/Afa_Peacock_Script.h create mode 100644 api/Afa_Pictor_Script.h create mode 100644 api/Common.h create mode 100644 api/Elonics_E4000.c create mode 100644 api/Elonics_E4000.h create mode 100644 api/Elonics_E4000_Script.h create mode 100644 api/FCI_FC2580.c create mode 100644 api/FCI_FC2580.h create mode 100644 api/FCI_FC2580_Script.h create mode 100644 api/Fitipower_FC0011.c create mode 100644 api/Fitipower_FC0011.h create mode 100644 api/Fitipower_FC0011_Script.h create mode 100644 api/Fitipower_FC0012.c create mode 100644 api/Fitipower_FC0012.h create mode 100644 api/Fitipower_FC0012_Script.h create mode 100644 api/Freescale_MC44CD02.c create mode 100644 api/Freescale_MC44CD02.h create mode 100644 api/Freescale_MC44CD02_Script.h create mode 100644 api/ITD30x0.c create mode 100644 api/ITD30x0.h create mode 100644 api/Infineon_TUA6039.c create mode 100644 api/Infineon_TUA6039.h create mode 100644 api/Infineon_TUA6039_Script.h create mode 100644 api/Infineon_TUA8010.c create mode 100644 api/Infineon_TUA8010.h create mode 100644 api/Infineon_TUA8010_Script.h create mode 100644 api/Infineon_TUA9001.c create mode 100644 api/Infineon_TUA9001.h create mode 100644 api/Infineon_TUA9001_Script.h create mode 100644 api/Integrant_ITD3020.c create mode 100644 api/Integrant_ITD3020.h create mode 100644 api/Integrant_ITD3020_Script.h create mode 100644 api/MXL5005.c create mode 100644 api/MXL5005.h create mode 100644 api/MXL5005_Initialize.c create mode 100644 api/Maxlinear_MXL5005.c create mode 100644 api/Maxlinear_MXL5005.h create mode 100644 api/Maxlinear_MXL5005_Script.h create mode 100644 api/Microtune_MT2260B0.c create mode 100644 api/Microtune_MT2260B0.h create mode 100644 api/Microtune_MT2260B0_Script.h create mode 100644 api/Microtune_MT2266.c create mode 100644 api/Microtune_MT2266.h create mode 100644 api/Microtune_MT2266_Script.h create mode 100644 api/Microtune_MT2266_TA4029CTC_Script.h create mode 100644 api/Panasonic_ENV77H11D5.c create mode 100644 api/Panasonic_ENV77H11D5.h create mode 100644 api/Panasonic_ENV77H11D5_Script.h create mode 100644 api/Peacock.c create mode 100644 api/Peacock.h create mode 100644 api/Philips_FQD1218ME_MK5.c create mode 100644 api/Philips_FQD1218ME_MK5.h create mode 100644 api/Philips_FQD1218ME_MK5_Script.h create mode 100644 api/Philips_TD1316AFIHP.c create mode 100644 api/Philips_TD1316AFIHP.h create mode 100644 api/Philips_TD1316AFIHP_Script.h create mode 100644 api/Philips_TD1316_Script.h create mode 100644 api/Philips_TDA18271.c create mode 100644 api/Philips_TDA18271.h create mode 100644 api/Philips_TDA18271_C2.c create mode 100644 api/Philips_TDA18271_C2.h create mode 100644 api/Philips_TDA18271_C2_Askey.c create mode 100644 api/Philips_TDA18271_C2_Askey.h create mode 100644 api/Philips_TDA18271_C2_Askey_Script.h create mode 100644 api/Philips_TDA18271_C2_Script.h create mode 100644 api/Philips_TDA18271_Script.h create mode 100644 api/Philips_TDA18291HN.c create mode 100644 api/Philips_TDA18291HN.h create mode 100644 api/Philips_TDA18291HN_Script.h create mode 100644 api/TDA18271.c create mode 100644 api/TDA18271.h create mode 100644 api/TDA18271Local.h create mode 100644 api/TDA18271StaticInstance_C2.h create mode 100644 api/TDA18271StaticInstance_C2_Askey.h create mode 100644 api/TDA18271_C2.c create mode 100644 api/TDA18271_C2.h create mode 100644 api/TDA18271_C2_Askey.c create mode 100644 api/TDA18271_C2_Askey.h create mode 100644 api/TDA18271local_C2.h create mode 100644 api/TDA18271local_C2_Askey.h create mode 100644 api/TDA18291.c create mode 100644 api/TDA18291.h create mode 100644 api/TDA18291local.h create mode 100644 api/Xceive_XC3028L.c create mode 100644 api/Xceive_XC3028L.h create mode 100644 api/Xceive_XC3028L_Script.h create mode 100644 api/Xceive_XC4000.c create mode 100644 api/Xceive_XC4000.h create mode 100644 api/Xceive_XC4000_Script.h create mode 100644 api/cmd.c create mode 100644 api/cmd.h create mode 100644 api/demodulator.c create mode 100644 api/demodulator.h create mode 100644 api/demodulatorextend.c create mode 100644 api/demodulatorextend.h create mode 100644 api/driver_tua8010.c create mode 100644 api/driver_tua8010.h create mode 100644 api/driver_tua8010_NeededFunctions.h create mode 100644 api/driver_tua9001.c create mode 100644 api/driver_tua9001.h create mode 100644 api/driver_tua9001_NeededFunctions.h create mode 100644 api/e4000.c create mode 100644 api/e4000.h create mode 100644 api/error.h create mode 100644 api/fc2580.c create mode 100644 api/fc2580.h create mode 100644 api/firmware.h create mode 100644 api/i2c_driver.c create mode 100644 api/i2c_driver.h create mode 100644 api/inttype.h create mode 100644 api/iocontrol.h create mode 100644 api/mt2260.c create mode 100644 api/mt2260.h create mode 100644 api/mt2260_userdef.c create mode 100644 api/mt2260_userdef.h create mode 100644 api/mt2266.c create mode 100644 api/mt2266.h create mode 100644 api/mt2266_userdef.c create mode 100644 api/mt2266_userdef.h create mode 100644 api/mt_errordef.h create mode 100644 api/register.h create mode 100644 api/standard.c create mode 100644 api/standard.h create mode 100644 api/type.h create mode 100644 api/usb2impl.c create mode 100644 api/usb2impl.h create mode 100644 api/user.c create mode 100644 api/user.h create mode 100644 api/variable.h create mode 100644 api/version.h create mode 100644 api/xc3028_channelmaps.h create mode 100644 api/xc3028_control.c create mode 100644 api/xc3028_control.h create mode 100644 api/xc3028_firmwares.h create mode 100644 api/xc3028_scodes.h create mode 100644 api/xc4000_channelmaps.h create mode 100644 api/xc4000_control.c create mode 100644 api/xc4000_control.h create mode 100644 api/xc4000_firmwares.h create mode 100644 api/xc4000_scodes.h create mode 100644 api/xc4000_standards.h create mode 100644 src/af903x-core.c create mode 100644 src/af903x-devices.c create mode 100644 src/af903x-drv.c create mode 100644 src/af903x-fe.c create mode 100644 src/af903x-ioctl.h create mode 100644 src/af903x-tuner.c create mode 100644 src/af903x.h create mode 100644 src/userdef.h create mode 100644 v4l/kernel-2.6.18/demux.h create mode 100644 v4l/kernel-2.6.18/dmxdev.h create mode 100644 v4l/kernel-2.6.18/dvb-pll.h create mode 100644 v4l/kernel-2.6.18/dvb-usb-ids.h create mode 100644 v4l/kernel-2.6.18/dvb-usb.h create mode 100644 v4l/kernel-2.6.18/dvb_demux.h create mode 100644 v4l/kernel-2.6.18/dvb_frontend.h create mode 100644 v4l/kernel-2.6.18/dvb_net.h create mode 100644 v4l/kernel-2.6.18/dvb_ringbuffer.h create mode 100644 v4l/kernel-2.6.18/dvbdev.h create mode 100644 v4l/kernel-2.6.19/demux.h create mode 100644 v4l/kernel-2.6.19/dmxdev.h create mode 100644 v4l/kernel-2.6.19/dvb-pll.h create mode 100644 v4l/kernel-2.6.19/dvb-usb-ids.h create mode 100644 v4l/kernel-2.6.19/dvb-usb.h create mode 100644 v4l/kernel-2.6.19/dvb_demux.h create mode 100644 v4l/kernel-2.6.19/dvb_frontend.h create mode 100644 v4l/kernel-2.6.19/dvb_net.h create mode 100644 v4l/kernel-2.6.19/dvb_ringbuffer.h create mode 100644 v4l/kernel-2.6.19/dvbdev.h create mode 100644 v4l/kernel-2.6.20/demux.h create mode 100644 v4l/kernel-2.6.20/dmxdev.h create mode 100644 v4l/kernel-2.6.20/dvb-pll.h create mode 100644 v4l/kernel-2.6.20/dvb-usb-ids.h create mode 100644 v4l/kernel-2.6.20/dvb-usb.h create mode 100644 v4l/kernel-2.6.20/dvb_demux.h create mode 100644 v4l/kernel-2.6.20/dvb_frontend.h create mode 100644 v4l/kernel-2.6.20/dvb_net.h create mode 100644 v4l/kernel-2.6.20/dvb_ringbuffer.h create mode 100644 v4l/kernel-2.6.20/dvbdev.h create mode 100644 v4l/kernel-2.6.21/demux.h create mode 100644 v4l/kernel-2.6.21/dmxdev.h create mode 100644 v4l/kernel-2.6.21/dvb-pll.h create mode 100644 v4l/kernel-2.6.21/dvb-usb-ids.h create mode 100644 v4l/kernel-2.6.21/dvb-usb.h create mode 100644 v4l/kernel-2.6.21/dvb_demux.h create mode 100644 v4l/kernel-2.6.21/dvb_frontend.h create mode 100644 v4l/kernel-2.6.21/dvb_net.h create mode 100644 v4l/kernel-2.6.21/dvb_ringbuffer.h create mode 100644 v4l/kernel-2.6.21/dvbdev.h create mode 100644 v4l/kernel-2.6.22/demux.h create mode 100644 v4l/kernel-2.6.22/dmxdev.h create mode 100644 v4l/kernel-2.6.22/dvb-pll.h create mode 100644 v4l/kernel-2.6.22/dvb-usb-ids.h create mode 100644 v4l/kernel-2.6.22/dvb-usb.h create mode 100644 v4l/kernel-2.6.22/dvb_demux.h create mode 100644 v4l/kernel-2.6.22/dvb_frontend.h create mode 100644 v4l/kernel-2.6.22/dvb_net.h create mode 100644 v4l/kernel-2.6.22/dvb_ringbuffer.h create mode 100644 v4l/kernel-2.6.22/dvbdev.h create mode 100644 v4l/kernel-2.6.23/demux.h create mode 100644 v4l/kernel-2.6.23/dmxdev.h create mode 100644 v4l/kernel-2.6.23/dvb-pll.h create mode 100644 v4l/kernel-2.6.23/dvb-usb-ids.h create mode 100644 v4l/kernel-2.6.23/dvb-usb.h create mode 100644 v4l/kernel-2.6.23/dvb_demux.h create mode 100644 v4l/kernel-2.6.23/dvb_frontend.h create mode 100644 v4l/kernel-2.6.23/dvb_net.h create mode 100644 v4l/kernel-2.6.23/dvb_ringbuffer.h create mode 100644 v4l/kernel-2.6.23/dvbdev.h create mode 100644 v4l/kernel-2.6.24/demux.h create mode 100644 v4l/kernel-2.6.24/dmxdev.h create mode 100644 v4l/kernel-2.6.24/dvb-pll.h create mode 100644 v4l/kernel-2.6.24/dvb-usb-ids.h create mode 100644 v4l/kernel-2.6.24/dvb-usb.h create mode 100644 v4l/kernel-2.6.24/dvb_demux.h create mode 100644 v4l/kernel-2.6.24/dvb_frontend.h create mode 100644 v4l/kernel-2.6.24/dvb_net.h create mode 100644 v4l/kernel-2.6.24/dvb_ringbuffer.h create mode 100644 v4l/kernel-2.6.24/dvbdev.h create mode 100644 v4l/kernel-2.6.25/demux.h create mode 100644 v4l/kernel-2.6.25/dmxdev.h create mode 100644 v4l/kernel-2.6.25/dvb-pll.h create mode 100644 v4l/kernel-2.6.25/dvb-usb-ids.h create mode 100644 v4l/kernel-2.6.25/dvb-usb.h create mode 100644 v4l/kernel-2.6.25/dvb_demux.h create mode 100644 v4l/kernel-2.6.25/dvb_frontend.h create mode 100644 v4l/kernel-2.6.25/dvb_net.h create mode 100644 v4l/kernel-2.6.25/dvb_ringbuffer.h create mode 100644 v4l/kernel-2.6.25/dvbdev.h create mode 100644 v4l/kernel-2.6.26/demux.h create mode 100644 v4l/kernel-2.6.26/dmxdev.h create mode 100644 v4l/kernel-2.6.26/dvb-pll.h create mode 100644 v4l/kernel-2.6.26/dvb-usb-ids.h create mode 100644 v4l/kernel-2.6.26/dvb-usb.h create mode 100644 v4l/kernel-2.6.26/dvb_demux.h create mode 100644 v4l/kernel-2.6.26/dvb_frontend.h create mode 100644 v4l/kernel-2.6.26/dvb_net.h create mode 100644 v4l/kernel-2.6.26/dvb_ringbuffer.h create mode 100644 v4l/kernel-2.6.26/dvbdev.h create mode 100644 v4l/kernel-2.6.27/demux.h create mode 100644 v4l/kernel-2.6.27/dmxdev.h create mode 100644 v4l/kernel-2.6.27/dvb-pll.h create mode 100644 v4l/kernel-2.6.27/dvb-usb-ids.h create mode 100644 v4l/kernel-2.6.27/dvb-usb.h create mode 100644 v4l/kernel-2.6.27/dvb_demux.h create mode 100644 v4l/kernel-2.6.27/dvb_frontend.h create mode 100644 v4l/kernel-2.6.27/dvb_net.h create mode 100644 v4l/kernel-2.6.27/dvb_ringbuffer.h create mode 100644 v4l/kernel-2.6.27/dvbdev.h create mode 100644 v4l/kernel-2.6.28/demux.h create mode 100644 v4l/kernel-2.6.28/dmxdev.h create mode 100644 v4l/kernel-2.6.28/dvb-pll.h create mode 100644 v4l/kernel-2.6.28/dvb-usb-ids.h create mode 100644 v4l/kernel-2.6.28/dvb-usb.h create mode 100644 v4l/kernel-2.6.28/dvb_demux.h create mode 100644 v4l/kernel-2.6.28/dvb_frontend.h create mode 100644 v4l/kernel-2.6.28/dvb_net.h create mode 100644 v4l/kernel-2.6.28/dvb_ringbuffer.h create mode 100644 v4l/kernel-2.6.28/dvbdev.h create mode 100644 v4l/kernel-2.6.29/demux.h create mode 100644 v4l/kernel-2.6.29/dmxdev.h create mode 100644 v4l/kernel-2.6.29/dvb-pll.h create mode 100644 v4l/kernel-2.6.29/dvb-usb-ids.h create mode 100644 v4l/kernel-2.6.29/dvb-usb.h create mode 100644 v4l/kernel-2.6.29/dvb_demux.h create mode 100644 v4l/kernel-2.6.29/dvb_frontend.h create mode 100644 v4l/kernel-2.6.29/dvb_net.h create mode 100644 v4l/kernel-2.6.29/dvb_ringbuffer.h create mode 100644 v4l/kernel-2.6.29/dvbdev.h create mode 100644 v4l/kernel-2.6.tmp/compat.h create mode 100644 v4l/kernel-2.6.tmp/demux.h create mode 100644 v4l/kernel-2.6.tmp/dmxdev.c create mode 100644 v4l/kernel-2.6.tmp/dmxdev.h create mode 100644 v4l/kernel-2.6.tmp/dummy_ram.h create mode 100644 v4l/kernel-2.6.tmp/dvb-pll.c create mode 100644 v4l/kernel-2.6.tmp/dvb-pll.h create mode 100644 v4l/kernel-2.6.tmp/dvb-usb-common.h create mode 100644 v4l/kernel-2.6.tmp/dvb-usb-dvb.c create mode 100644 v4l/kernel-2.6.tmp/dvb-usb-firmware.c create mode 100644 v4l/kernel-2.6.tmp/dvb-usb-i2c.c create mode 100644 v4l/kernel-2.6.tmp/dvb-usb-ids.h create mode 100644 v4l/kernel-2.6.tmp/dvb-usb-init.c create mode 100644 v4l/kernel-2.6.tmp/dvb-usb-remote.c create mode 100644 v4l/kernel-2.6.tmp/dvb-usb-urb.c create mode 100644 v4l/kernel-2.6.tmp/dvb-usb.h create mode 100644 v4l/kernel-2.6.tmp/dvb_demux.c create mode 100644 v4l/kernel-2.6.tmp/dvb_demux.h create mode 100644 v4l/kernel-2.6.tmp/dvb_filter.c create mode 100644 v4l/kernel-2.6.tmp/dvb_filter.h create mode 100644 v4l/kernel-2.6.tmp/dvb_frontend.c create mode 100644 v4l/kernel-2.6.tmp/dvb_frontend.h create mode 100644 v4l/kernel-2.6.tmp/dvb_math.c create mode 100644 v4l/kernel-2.6.tmp/dvb_math.h create mode 100644 v4l/kernel-2.6.tmp/dvb_net.c create mode 100644 v4l/kernel-2.6.tmp/dvb_net.h create mode 100644 v4l/kernel-2.6.tmp/dvb_ringbuffer.c create mode 100644 v4l/kernel-2.6.tmp/dvb_ringbuffer.h create mode 100644 v4l/kernel-2.6.tmp/dvbdev.c create mode 100644 v4l/kernel-2.6.tmp/dvbdev.h create mode 100644 v4l/kernel-2.6.tmp/usb-urb.c create mode 100644 v4l/kernel-2.6.tmp/usb_biu_reg.h create mode 100644 v4l/kernel-2.6.tmp/usbdma_biu_reg.h 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 Binary files /dev/null and b/af35irtbl.bin 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 // 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 //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 //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 //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 // for Linux +#include "type.h" +#include "error.h" +#include "user.h" +#include "register.h" +#include "standard.h" +#include "Fitipower_FC0011_Script.h" +//#include // 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; + } + //=========================== end + + + /***********************************************************/ + /****************** initialization *************************/ + /***********************************************************/ + + /**************add by roger****************/ + reg[7] = 0x0f; + reg[8] = 0x3e; + reg[10] = 0xb8; + error = Standard_writeTunerRegisters (demodulator, chip, 7, 1, ®[7]); + if (error) goto exit; + error = Standard_writeTunerRegisters (demodulator, chip, 8, 1, ®[8]); + if (error) goto exit; + error = Standard_writeTunerRegisters (demodulator, chip, 10, 1, ®[10]); + if (error) goto exit; + /**************add by roger****************/ + + reg[11] = 0x80; + reg[13] = 0x04; + error = Standard_writeTunerRegisters (demodulator, chip, 11, 1, ®[11]); + if (error) goto exit; + error = Standard_writeTunerRegisters (demodulator, chip, 13, 1, ®[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; + } + //=========================== 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, ®[1]); + if (error) goto exit; + error = Standard_writeTunerRegisters (demodulator, chip, 2, 1, ®[2]); + if (error) goto exit; + error = Standard_writeTunerRegisters (demodulator, chip, 3, 1, ®[3]); + if (error) goto exit; + error = Standard_writeTunerRegisters (demodulator, chip, 4, 1, ®[4]); + if (error) goto exit; + error = Standard_writeTunerRegisters (demodulator, chip, 5, 1, ®[5]); + if (error) goto exit; + error = Standard_writeTunerRegisters (demodulator, chip, 6, 1, ®[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, ®[1]); + if (error) goto exit; + error = Standard_writeTunerRegisters (demodulator, chip, 2, 1, ®[2]); + if (error) goto exit; + error = Standard_writeTunerRegisters (demodulator, chip, 3, 1, ®[3]); + if (error) goto exit; + error = Standard_writeTunerRegisters (demodulator, chip, 4, 1, ®[4]); + if (error) goto exit; + error = Standard_writeTunerRegisters (demodulator, chip, 5, 1, ®[5]); + if (error) goto exit; + error = Standard_writeTunerRegisters (demodulator, chip, 6, 1, ®[6]); + if (error) goto exit; + error = Standard_writeTunerRegisters (demodulator, chip, 7, 1, ®[7]); + if (error) goto exit; + error = Standard_writeTunerRegisters (demodulator, chip, 8, 1, ®[8]); + if (error) goto exit; + error = Standard_writeTunerRegisters (demodulator, chip, 10, 1, ®[10]); + if (error) goto exit; + error = Standard_writeTunerRegisters (demodulator, chip, 11, 1, ®[11]); + if (error) goto exit; + error = Standard_writeTunerRegisters (demodulator, chip, 13, 1, ®[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, ®[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, ®[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, ®[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, ®[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, ®[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, ®[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, ®[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, ®[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, ®[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 // for Linux +#include "type.h" +#include "error.h" +#include "user.h" +#include "register.h" +#include "standard.h" +#include "Fitipower_FC0012_Script.h" +//#include // 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, ®[7]); + if (error) goto exit; + + error = Standard_writeTunerRegisters (demodulator, chip, 8, 1, ®[8]); + if (error) goto exit; + + error = Standard_writeTunerRegisters (demodulator, chip, 13, 1, ®[13]); + if (error) goto exit; + + error = Standard_writeTunerRegisters (demodulator, chip, 16, 1, ®[16]); + if (error) goto exit; + + error = Standard_writeTunerRegisters (demodulator, chip, 19, 1, ®[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, ®[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, ®[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, ®[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, ®[6]); + if (error) goto exit; + break; + } + + } + + reg[16] = 0x0b; + + User_delay (demodulator, 10); + error = Standard_readTunerRegisters (demodulator, chip, 13, 1, ®[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, ®[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 //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 +* +* \BRIEF +* +* - 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. +* - +******************************************************************************* +*/ + +#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 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 +* +* +* \PARAM +* +* \PARAM +* +* +* \RETURN +* +****************************************************************************** +*/ + +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 +* +* +* \PARAM +* +* \RETURN +* +******************************************************************************* +*/ + +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 +* +* +* \PARAM +* +* \RETURN +* +* +* \NOTE +* +* +* \PARAGRAPH +* <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 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, ®isterAddressLength); + 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, ®isterAddressLength); + 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, ®Data); + 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], + ¶->filter.mask[1], DMX_FILTER_SIZE - 1); + memcpy(&(*secfilter)->filter_mode[3], + ¶->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 -- cgit v0.12