[media] drx-j: add a driver for Trident drx-j frontend
Add support for the Trident DRX-J driver, including a card profile for the PCTV 80e which uses the chip. Thanks to Trident for allowing the release of this code under a BSD license, and of course Hauppauge/PCTV for pushing for its release to the community. [pdickeybeta@gmail.com: modified to fix compilation errors and also to move the driver files from the drx39xy subdirectory to the frontends directory] [m.chehab@samsung.com: fix merge conflicts, commented drx-j compilation and added EM28XX_R06_I2C_CLK setup also to the board setup] Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
4872b46b73
commit
38b2df95c5
27 changed files with 45627 additions and 0 deletions
|
@ -57,6 +57,7 @@
|
|||
56 -> Pinnacle Hybrid Pro (330e) (em2882) [2304:0226]
|
||||
57 -> Kworld PlusTV HD Hybrid 330 (em2883) [eb1a:a316]
|
||||
58 -> Compro VideoMate ForYou/Stereo (em2820/em2840) [185b:2041]
|
||||
59 -> Pinnacle PCTV HD Mini (em2874) [2304:023f]
|
||||
60 -> Hauppauge WinTV HVR 850 (em2883) [2040:651f]
|
||||
61 -> Pixelview PlayTV Box 4 USB 2.0 (em2820/em2840)
|
||||
62 -> Gadmei TVR200 (em2820/em2840)
|
||||
|
|
|
@ -650,6 +650,8 @@ config DVB_TUNER_DIB0090
|
|||
comment "SEC control devices for DVB-S"
|
||||
depends on DVB_CORE
|
||||
|
||||
source "drivers/media/dvb-frontends/drx39xyj/Kconfig"
|
||||
|
||||
config DVB_LNBP21
|
||||
tristate "LNBP21/LNBH24 SEC controllers"
|
||||
depends on DVB_CORE && I2C
|
||||
|
|
|
@ -92,6 +92,7 @@ obj-$(CONFIG_DVB_HD29L2) += hd29l2.o
|
|||
obj-$(CONFIG_DVB_DS3000) += ds3000.o
|
||||
obj-$(CONFIG_DVB_TS2020) += ts2020.o
|
||||
obj-$(CONFIG_DVB_MB86A16) += mb86a16.o
|
||||
obj-$(CONFIG_DVB_DRX39XYJ) += drx39xyj/
|
||||
obj-$(CONFIG_DVB_MB86A20S) += mb86a20s.o
|
||||
obj-$(CONFIG_DVB_IX2505V) += ix2505v.o
|
||||
obj-$(CONFIG_DVB_STV0367) += stv0367.o
|
||||
|
|
8
drivers/media/dvb-frontends/drx39xyj/Kconfig
Normal file
8
drivers/media/dvb-frontends/drx39xyj/Kconfig
Normal file
|
@ -0,0 +1,8 @@
|
|||
config DVB_DRX39XYJ
|
||||
tristate "Micronas DRX-J demodulator"
|
||||
depends on DVB_CORE && I2C
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
depends on BROKEN
|
||||
help
|
||||
An ATSC 8VSB and QAM64/256 tuner module. Say Y when you want
|
||||
to support this frontend.
|
3
drivers/media/dvb-frontends/drx39xyj/Makefile
Normal file
3
drivers/media/dvb-frontends/drx39xyj/Makefile
Normal file
|
@ -0,0 +1,3 @@
|
|||
drx39xyj-objs := drx39xxj.o drx_driver.o drx39xxj_dummy.o drxj.o drx_dap_fasi.o
|
||||
|
||||
obj-$(CONFIG_DVB_DRX39XYJ) += drx39xyj.o
|
82
drivers/media/dvb-frontends/drx39xyj/bsp_host.h
Normal file
82
drivers/media/dvb-frontends/drx39xyj/bsp_host.h
Normal file
|
@ -0,0 +1,82 @@
|
|||
/**
|
||||
* \file $Id: bsp_host.h,v 1.3 2009/07/07 14:20:30 justin Exp $
|
||||
*
|
||||
* \brief Host and OS dependent type definitions, macro's and functions
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* $(c) 2004-2005,2007-2009 Trident Microsystems, Inc. - All rights reserved.
|
||||
*
|
||||
* This software and related documentation (the 'Software') are intellectual
|
||||
* property owned by Trident and are copyright of Trident, unless specifically
|
||||
* noted otherwise.
|
||||
*
|
||||
* Any use of the Software is permitted only pursuant to the terms of the
|
||||
* license agreement, if any, which accompanies, is included with or applicable
|
||||
* to the Software ('License Agreement') or upon express written consent of
|
||||
* Trident. Any copying, reproduction or redistribution of the Software in
|
||||
* whole or in part by any means not in accordance with the License Agreement
|
||||
* or as agreed in writing by Trident is expressly prohibited.
|
||||
*
|
||||
* THE SOFTWARE IS WARRANTED, IF AT ALL, ONLY ACCORDING TO THE TERMS OF THE
|
||||
* LICENSE AGREEMENT. EXCEPT AS WARRANTED IN THE LICENSE AGREEMENT THE SOFTWARE
|
||||
* IS DELIVERED 'AS IS' AND TRIDENT HEREBY DISCLAIMS ALL WARRANTIES AND
|
||||
* CONDITIONS WITH REGARD TO THE SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
* AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIT
|
||||
* ENJOYMENT, TITLE AND NON-INFRINGEMENT OF ANY THIRD PARTY INTELLECTUAL
|
||||
* PROPERTY OR OTHER RIGHTS WHICH MAY RESULT FROM THE USE OR THE INABILITY
|
||||
* TO USE THE SOFTWARE.
|
||||
*
|
||||
* IN NO EVENT SHALL TRIDENT BE LIABLE FOR INDIRECT, INCIDENTAL, CONSEQUENTIAL,
|
||||
* PUNITIVE, SPECIAL OR OTHER DAMAGES WHATSOEVER INCLUDING WITHOUT LIMITATION,
|
||||
* DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
|
||||
* INFORMATION, AND THE LIKE, ARISING OUT OF OR RELATING TO THE USE OF OR THE
|
||||
* INABILITY TO USE THE SOFTWARE, EVEN IF TRIDENT HAS BEEN ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGES, EXCEPT PERSONAL INJURY OR DEATH RESULTING FROM
|
||||
* TRIDENT'S NEGLIGENCE. $
|
||||
*
|
||||
*/
|
||||
#ifndef __DRXBSP_HOST_H__
|
||||
#define __DRXBSP_HOST_H__
|
||||
/*-------------------------------------------------------------------------
|
||||
INCLUDES
|
||||
-------------------------------------------------------------------------*/
|
||||
#include "bsp_types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
TYPEDEFS
|
||||
-------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
DEFINES
|
||||
-------------------------------------------------------------------------*/
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
Exported FUNCTIONS
|
||||
-------------------------------------------------------------------------*/
|
||||
DRXStatus_t DRXBSP_HST_Init( void );
|
||||
|
||||
DRXStatus_t DRXBSP_HST_Term( void );
|
||||
|
||||
void* DRXBSP_HST_Memcpy( void *to, void *from, u32_t n);
|
||||
|
||||
int DRXBSP_HST_Memcmp( void *s1, void *s2, u32_t n);
|
||||
|
||||
u32_t DRXBSP_HST_Clock( void );
|
||||
|
||||
DRXStatus_t DRXBSP_HST_Sleep( u32_t n );
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
THE END
|
||||
-------------------------------------------------------------------------*/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __DRXBSP_HOST_H__ */
|
219
drivers/media/dvb-frontends/drx39xyj/bsp_i2c.h
Normal file
219
drivers/media/dvb-frontends/drx39xyj/bsp_i2c.h
Normal file
|
@ -0,0 +1,219 @@
|
|||
/**
|
||||
* \file $Id: bsp_i2c.h,v 1.5 2009/07/07 14:20:30 justin Exp $
|
||||
*
|
||||
* \brief I2C API, implementation depends on board specifics
|
||||
*
|
||||
* This module encapsulates I2C access.In some applications several devices
|
||||
* share one I2C bus. If these devices have the same I2C address some kind
|
||||
* off "switch" must be implemented to ensure error free communication with
|
||||
* one device. In case such a "switch" is used, the device ID can be used
|
||||
* to implement control over this "switch".
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* $(c) 2004-2005,2008-2009 Trident Microsystems, Inc. - All rights reserved.
|
||||
*
|
||||
* This software and related documentation (the 'Software') are intellectual
|
||||
* property owned by Trident and are copyright of Trident, unless specifically
|
||||
* noted otherwise.
|
||||
*
|
||||
* Any use of the Software is permitted only pursuant to the terms of the
|
||||
* license agreement, if any, which accompanies, is included with or applicable
|
||||
* to the Software ('License Agreement') or upon express written consent of
|
||||
* Trident. Any copying, reproduction or redistribution of the Software in
|
||||
* whole or in part by any means not in accordance with the License Agreement
|
||||
* or as agreed in writing by Trident is expressly prohibited.
|
||||
*
|
||||
* THE SOFTWARE IS WARRANTED, IF AT ALL, ONLY ACCORDING TO THE TERMS OF THE
|
||||
* LICENSE AGREEMENT. EXCEPT AS WARRANTED IN THE LICENSE AGREEMENT THE SOFTWARE
|
||||
* IS DELIVERED 'AS IS' AND TRIDENT HEREBY DISCLAIMS ALL WARRANTIES AND
|
||||
* CONDITIONS WITH REGARD TO THE SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
* AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIT
|
||||
* ENJOYMENT, TITLE AND NON-INFRINGEMENT OF ANY THIRD PARTY INTELLECTUAL
|
||||
* PROPERTY OR OTHER RIGHTS WHICH MAY RESULT FROM THE USE OR THE INABILITY
|
||||
* TO USE THE SOFTWARE.
|
||||
*
|
||||
* IN NO EVENT SHALL TRIDENT BE LIABLE FOR INDIRECT, INCIDENTAL, CONSEQUENTIAL,
|
||||
* PUNITIVE, SPECIAL OR OTHER DAMAGES WHATSOEVER INCLUDING WITHOUT LIMITATION,
|
||||
* DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
|
||||
* INFORMATION, AND THE LIKE, ARISING OUT OF OR RELATING TO THE USE OF OR THE
|
||||
* INABILITY TO USE THE SOFTWARE, EVEN IF TRIDENT HAS BEEN ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGES, EXCEPT PERSONAL INJURY OR DEATH RESULTING FROM
|
||||
* TRIDENT'S NEGLIGENCE. $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __BSPI2C_H__
|
||||
#define __BSPI2C_H__
|
||||
/*------------------------------------------------------------------------------
|
||||
INCLUDES
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "bsp_types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*------------------------------------------------------------------------------
|
||||
TYPEDEFS
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
* \typedef I2Caddr_t
|
||||
* \brief I2C device address (7-bit or 10-bit)
|
||||
*/
|
||||
typedef u16_t I2Caddr_t;
|
||||
|
||||
/**
|
||||
* \typedef I2CdevId_t
|
||||
* \brief Device identifier.
|
||||
*
|
||||
* The device ID can be useful if several devices share an I2C address,
|
||||
* or if multiple I2C busses are used.
|
||||
* It can be used to control a "switch" selecting the correct device and/or
|
||||
* I2C bus.
|
||||
*
|
||||
*/
|
||||
typedef u16_t I2CdevId_t;
|
||||
|
||||
/**
|
||||
* \struct _I2CDeviceAddr_t
|
||||
* \brief I2C device parameters.
|
||||
*
|
||||
* This structure contains the I2C address, the device ID and a userData pointer.
|
||||
* The userData pointer can be used for application specific purposes.
|
||||
*
|
||||
*/
|
||||
struct _I2CDeviceAddr_t {
|
||||
I2Caddr_t i2cAddr; /**< The I2C address of the device. */
|
||||
I2CdevId_t i2cDevId; /**< The device identifier. */
|
||||
void *userData; /**< User data pointer */
|
||||
};
|
||||
|
||||
/**
|
||||
* \typedef I2CDeviceAddr_t
|
||||
* \brief I2C device parameters.
|
||||
*
|
||||
* This structure contains the I2C address and the device ID.
|
||||
*
|
||||
*/
|
||||
typedef struct _I2CDeviceAddr_t I2CDeviceAddr_t;
|
||||
|
||||
/**
|
||||
* \typedef pI2CDeviceAddr_t
|
||||
* \brief Pointer to I2C device parameters.
|
||||
*/
|
||||
typedef I2CDeviceAddr_t *pI2CDeviceAddr_t;
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
DEFINES
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
MACROS
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* \def IS_I2C_10BIT( addr )
|
||||
* \brief Determine if I2C address 'addr' is a 10 bits address or not.
|
||||
* \param addr The I2C address.
|
||||
* \return int.
|
||||
* \retval 0 if address is not a 10 bits I2C address.
|
||||
* \retval 1 if address is a 10 bits I2C address.
|
||||
*/
|
||||
#define IS_I2C_10BIT(addr) \
|
||||
(((addr) & 0xF8) == 0xF0)
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
ENUM
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
STRUCTS
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Exported FUNCTIONS
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
/**
|
||||
* \fn DRXBSP_I2C_Init()
|
||||
* \brief Initialize I2C communication module.
|
||||
* \return DRXStatus_t Return status.
|
||||
* \retval DRX_STS_OK Initialization successful.
|
||||
* \retval DRX_STS_ERROR Initialization failed.
|
||||
*/
|
||||
DRXStatus_t DRXBSP_I2C_Init( void );
|
||||
|
||||
|
||||
/**
|
||||
* \fn DRXBSP_I2C_Term()
|
||||
* \brief Terminate I2C communication module.
|
||||
* \return DRXStatus_t Return status.
|
||||
* \retval DRX_STS_OK Termination successful.
|
||||
* \retval DRX_STS_ERROR Termination failed.
|
||||
*/
|
||||
DRXStatus_t DRXBSP_I2C_Term( void );
|
||||
|
||||
/**
|
||||
* \fn DRXStatus_t DRXBSP_I2C_WriteRead( pI2CDeviceAddr_t wDevAddr,
|
||||
* u16_t wCount,
|
||||
* pu8_t wData,
|
||||
* pI2CDeviceAddr_t rDevAddr,
|
||||
* u16_t rCount,
|
||||
* pu8_t rData)
|
||||
* \brief Read and/or write count bytes from I2C bus, store them in data[].
|
||||
* \param wDevAddr The device i2c address and the device ID to write to
|
||||
* \param wCount The number of bytes to write
|
||||
* \param wData The array to write the data to
|
||||
* \param rDevAddr The device i2c address and the device ID to read from
|
||||
* \param rCount The number of bytes to read
|
||||
* \param rData The array to read the data from
|
||||
* \return DRXStatus_t Return status.
|
||||
* \retval DRX_STS_OK Succes.
|
||||
* \retval DRX_STS_ERROR Failure.
|
||||
* \retval DRX_STS_INVALID_ARG Parameter 'wcount' is not zero but parameter
|
||||
* 'wdata' contains NULL.
|
||||
* Idem for 'rcount' and 'rdata'.
|
||||
* Both wDevAddr and rDevAddr are NULL.
|
||||
*
|
||||
* This function must implement an atomic write and/or read action on the I2C bus
|
||||
* No other process may use the I2C bus when this function is executing.
|
||||
* The critical section of this function runs from and including the I2C
|
||||
* write, up to and including the I2C read action.
|
||||
*
|
||||
* The device ID can be useful if several devices share an I2C address.
|
||||
* It can be used to control a "switch" on the I2C bus to the correct device.
|
||||
*/
|
||||
DRXStatus_t DRXBSP_I2C_WriteRead( pI2CDeviceAddr_t wDevAddr,
|
||||
u16_t wCount,
|
||||
pu8_t wData,
|
||||
pI2CDeviceAddr_t rDevAddr,
|
||||
u16_t rCount,
|
||||
pu8_t rData);
|
||||
|
||||
|
||||
/**
|
||||
* \fn DRXBSP_I2C_ErrorText()
|
||||
* \brief Returns a human readable error.
|
||||
* Counter part of numerical DRX_I2C_Error_g.
|
||||
*
|
||||
* \return char* Pointer to human readable error text.
|
||||
*/
|
||||
char* DRXBSP_I2C_ErrorText( void );
|
||||
|
||||
/**
|
||||
* \var DRX_I2C_Error_g;
|
||||
* \brief I2C specific error codes, platform dependent.
|
||||
*/
|
||||
extern int DRX_I2C_Error_g;
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
THE END
|
||||
------------------------------------------------------------------------------*/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* __BSPI2C_H__ */
|
218
drivers/media/dvb-frontends/drx39xyj/bsp_tuner.h
Normal file
218
drivers/media/dvb-frontends/drx39xyj/bsp_tuner.h
Normal file
|
@ -0,0 +1,218 @@
|
|||
/**
|
||||
* \file $Id: bsp_tuner.h,v 1.5 2009/10/19 22:15:13 dingtao Exp $
|
||||
*
|
||||
* \brief Tuner dependable type definitions, macro's and functions
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* $(c) 2004-2006,2008-2009 Trident Microsystems, Inc. - All rights reserved.
|
||||
*
|
||||
* This software and related documentation (the 'Software') are intellectual
|
||||
* property owned by Trident and are copyright of Trident, unless specifically
|
||||
* noted otherwise.
|
||||
*
|
||||
* Any use of the Software is permitted only pursuant to the terms of the
|
||||
* license agreement, if any, which accompanies, is included with or applicable
|
||||
* to the Software ('License Agreement') or upon express written consent of
|
||||
* Trident. Any copying, reproduction or redistribution of the Software in
|
||||
* whole or in part by any means not in accordance with the License Agreement
|
||||
* or as agreed in writing by Trident is expressly prohibited.
|
||||
*
|
||||
* THE SOFTWARE IS WARRANTED, IF AT ALL, ONLY ACCORDING TO THE TERMS OF THE
|
||||
* LICENSE AGREEMENT. EXCEPT AS WARRANTED IN THE LICENSE AGREEMENT THE SOFTWARE
|
||||
* IS DELIVERED 'AS IS' AND TRIDENT HEREBY DISCLAIMS ALL WARRANTIES AND
|
||||
* CONDITIONS WITH REGARD TO THE SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
* AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIT
|
||||
* ENJOYMENT, TITLE AND NON-INFRINGEMENT OF ANY THIRD PARTY INTELLECTUAL
|
||||
* PROPERTY OR OTHER RIGHTS WHICH MAY RESULT FROM THE USE OR THE INABILITY
|
||||
* TO USE THE SOFTWARE.
|
||||
*
|
||||
* IN NO EVENT SHALL TRIDENT BE LIABLE FOR INDIRECT, INCIDENTAL, CONSEQUENTIAL,
|
||||
* PUNITIVE, SPECIAL OR OTHER DAMAGES WHATSOEVER INCLUDING WITHOUT LIMITATION,
|
||||
* DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
|
||||
* INFORMATION, AND THE LIKE, ARISING OUT OF OR RELATING TO THE USE OF OR THE
|
||||
* INABILITY TO USE THE SOFTWARE, EVEN IF TRIDENT HAS BEEN ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGES, EXCEPT PERSONAL INJURY OR DEATH RESULTING FROM
|
||||
* TRIDENT'S NEGLIGENCE. $
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __DRXBSP_TUNER_H__
|
||||
#define __DRXBSP_TUNER_H__
|
||||
/*------------------------------------------------------------------------------
|
||||
INCLUDES
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "bsp_types.h"
|
||||
#include "bsp_i2c.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
DEFINES
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
/* Sub-mode bits should be adjacent and incremental */
|
||||
#define TUNER_MODE_SUB0 0x0001 /* for sub-mode (e.g. RF-AGC setting) */
|
||||
#define TUNER_MODE_SUB1 0x0002 /* for sub-mode (e.g. RF-AGC setting) */
|
||||
#define TUNER_MODE_SUB2 0x0004 /* for sub-mode (e.g. RF-AGC setting) */
|
||||
#define TUNER_MODE_SUB3 0x0008 /* for sub-mode (e.g. RF-AGC setting) */
|
||||
#define TUNER_MODE_SUB4 0x0010 /* for sub-mode (e.g. RF-AGC setting) */
|
||||
#define TUNER_MODE_SUB5 0x0020 /* for sub-mode (e.g. RF-AGC setting) */
|
||||
#define TUNER_MODE_SUB6 0x0040 /* for sub-mode (e.g. RF-AGC setting) */
|
||||
#define TUNER_MODE_SUB7 0x0080 /* for sub-mode (e.g. RF-AGC setting) */
|
||||
|
||||
#define TUNER_MODE_DIGITAL 0x0100 /* for digital channel (e.g. DVB-T) */
|
||||
#define TUNER_MODE_ANALOG 0x0200 /* for analog channel (e.g. PAL) */
|
||||
#define TUNER_MODE_SWITCH 0x0400 /* during channel switch & scanning */
|
||||
#define TUNER_MODE_LOCK 0x0800 /* after tuner has locked */
|
||||
#define TUNER_MODE_6MHZ 0x1000 /* for 6MHz bandwidth channels */
|
||||
#define TUNER_MODE_7MHZ 0x2000 /* for 7MHz bandwidth channels */
|
||||
#define TUNER_MODE_8MHZ 0x4000 /* for 8MHz bandwidth channels */
|
||||
|
||||
#define TUNER_MODE_SUB_MAX 8
|
||||
#define TUNER_MODE_SUBALL ( TUNER_MODE_SUB0 | TUNER_MODE_SUB1 | \
|
||||
TUNER_MODE_SUB2 | TUNER_MODE_SUB3 | \
|
||||
TUNER_MODE_SUB4 | TUNER_MODE_SUB5 | \
|
||||
TUNER_MODE_SUB6 | TUNER_MODE_SUB7 )
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
TYPEDEFS
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
typedef u32_t TUNERMode_t;
|
||||
typedef pu32_t pTUNERMode_t;
|
||||
|
||||
typedef char* TUNERSubMode_t; /* description of submode */
|
||||
typedef TUNERSubMode_t *pTUNERSubMode_t;
|
||||
|
||||
|
||||
typedef enum {
|
||||
|
||||
TUNER_LOCKED,
|
||||
TUNER_NOT_LOCKED
|
||||
|
||||
} TUNERLockStatus_t, *pTUNERLockStatus_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
|
||||
char *name; /* Tuner brand & type name */
|
||||
DRXFrequency_t minFreqRF; /* Lowest RF input frequency, in kHz */
|
||||
DRXFrequency_t maxFreqRF; /* Highest RF input frequency, in kHz */
|
||||
|
||||
u8_t subMode; /* Index to sub-mode in use */
|
||||
pTUNERSubMode_t subModeDescriptions; /* Pointer to description of sub-modes*/
|
||||
u8_t subModes; /* Number of available sub-modes */
|
||||
|
||||
/* The following fields will be either 0, NULL or FALSE and do not need
|
||||
initialisation */
|
||||
void *selfCheck; /* gives proof of initialization */
|
||||
Bool_t programmed; /* only valid if selfCheck is OK */
|
||||
DRXFrequency_t RFfrequency; /* only valid if programmed */
|
||||
DRXFrequency_t IFfrequency; /* only valid if programmed */
|
||||
|
||||
void* myUserData; /* pointer to associated demod instance */
|
||||
u16_t myCapabilities; /* value for storing application flags */
|
||||
|
||||
} TUNERCommonAttr_t, *pTUNERCommonAttr_t;
|
||||
|
||||
|
||||
/*
|
||||
* Generic functions for DRX devices.
|
||||
*/
|
||||
typedef struct TUNERInstance_s *pTUNERInstance_t;
|
||||
|
||||
typedef DRXStatus_t (*TUNEROpenFunc_t)( pTUNERInstance_t tuner );
|
||||
typedef DRXStatus_t (*TUNERCloseFunc_t)( pTUNERInstance_t tuner );
|
||||
|
||||
typedef DRXStatus_t (*TUNERSetFrequencyFunc_t)( pTUNERInstance_t tuner,
|
||||
TUNERMode_t mode,
|
||||
DRXFrequency_t frequency );
|
||||
|
||||
typedef DRXStatus_t (*TUNERGetFrequencyFunc_t)( pTUNERInstance_t tuner,
|
||||
TUNERMode_t mode,
|
||||
pDRXFrequency_t RFfrequency,
|
||||
pDRXFrequency_t IFfrequency );
|
||||
|
||||
typedef DRXStatus_t (*TUNERLockStatusFunc_t)( pTUNERInstance_t tuner,
|
||||
pTUNERLockStatus_t lockStat );
|
||||
|
||||
typedef DRXStatus_t (*TUNERi2cWriteReadFunc_t)( pTUNERInstance_t tuner,
|
||||
pI2CDeviceAddr_t wDevAddr,
|
||||
u16_t wCount,
|
||||
pu8_t wData,
|
||||
pI2CDeviceAddr_t rDevAddr,
|
||||
u16_t rCount,
|
||||
pu8_t rData );
|
||||
|
||||
typedef struct
|
||||
{
|
||||
TUNEROpenFunc_t openFunc;
|
||||
TUNERCloseFunc_t closeFunc;
|
||||
TUNERSetFrequencyFunc_t setFrequencyFunc;
|
||||
TUNERGetFrequencyFunc_t getFrequencyFunc;
|
||||
TUNERLockStatusFunc_t lockStatusFunc;
|
||||
TUNERi2cWriteReadFunc_t i2cWriteReadFunc;
|
||||
|
||||
} TUNERFunc_t, *pTUNERFunc_t;
|
||||
|
||||
typedef struct TUNERInstance_s {
|
||||
|
||||
I2CDeviceAddr_t myI2CDevAddr;
|
||||
pTUNERCommonAttr_t myCommonAttr;
|
||||
void* myExtAttr;
|
||||
pTUNERFunc_t myFunct;
|
||||
|
||||
} TUNERInstance_t;
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
ENUM
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
STRUCTS
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Exported FUNCTIONS
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
DRXStatus_t DRXBSP_TUNER_Open( pTUNERInstance_t tuner );
|
||||
|
||||
DRXStatus_t DRXBSP_TUNER_Close( pTUNERInstance_t tuner );
|
||||
|
||||
DRXStatus_t DRXBSP_TUNER_SetFrequency( pTUNERInstance_t tuner,
|
||||
TUNERMode_t mode,
|
||||
DRXFrequency_t frequency );
|
||||
|
||||
DRXStatus_t DRXBSP_TUNER_GetFrequency( pTUNERInstance_t tuner,
|
||||
TUNERMode_t mode,
|
||||
pDRXFrequency_t RFfrequency,
|
||||
pDRXFrequency_t IFfrequency );
|
||||
|
||||
DRXStatus_t DRXBSP_TUNER_LockStatus( pTUNERInstance_t tuner,
|
||||
pTUNERLockStatus_t lockStat );
|
||||
|
||||
DRXStatus_t DRXBSP_TUNER_DefaultI2CWriteRead( pTUNERInstance_t tuner,
|
||||
pI2CDeviceAddr_t wDevAddr,
|
||||
u16_t wCount,
|
||||
pu8_t wData,
|
||||
pI2CDeviceAddr_t rDevAddr,
|
||||
u16_t rCount,
|
||||
pu8_t rData);
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
THE END
|
||||
------------------------------------------------------------------------------*/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* __DRXBSP_TUNER_H__ */
|
||||
|
||||
/* End of file */
|
230
drivers/media/dvb-frontends/drx39xyj/bsp_types.h
Normal file
230
drivers/media/dvb-frontends/drx39xyj/bsp_types.h
Normal file
|
@ -0,0 +1,230 @@
|
|||
/**
|
||||
* \file $Id: bsp_types.h,v 1.5 2009/08/06 12:55:57 carlo Exp $
|
||||
*
|
||||
* \brief General type definitions for board support packages
|
||||
*
|
||||
* This file contains type definitions that are needed for almost any
|
||||
* board support package.
|
||||
* The definitions are host and project independent.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* $(c) 2004-2006,2008-2009 Trident Microsystems, Inc. - All rights reserved.
|
||||
*
|
||||
* This software and related documentation (the 'Software') are intellectual
|
||||
* property owned by Trident and are copyright of Trident, unless specifically
|
||||
* noted otherwise.
|
||||
*
|
||||
* Any use of the Software is permitted only pursuant to the terms of the
|
||||
* license agreement, if any, which accompanies, is included with or applicable
|
||||
* to the Software ('License Agreement') or upon express written consent of
|
||||
* Trident. Any copying, reproduction or redistribution of the Software in
|
||||
* whole or in part by any means not in accordance with the License Agreement
|
||||
* or as agreed in writing by Trident is expressly prohibited.
|
||||
*
|
||||
* THE SOFTWARE IS WARRANTED, IF AT ALL, ONLY ACCORDING TO THE TERMS OF THE
|
||||
* LICENSE AGREEMENT. EXCEPT AS WARRANTED IN THE LICENSE AGREEMENT THE SOFTWARE
|
||||
* IS DELIVERED 'AS IS' AND TRIDENT HEREBY DISCLAIMS ALL WARRANTIES AND
|
||||
* CONDITIONS WITH REGARD TO THE SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
* AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIT
|
||||
* ENJOYMENT, TITLE AND NON-INFRINGEMENT OF ANY THIRD PARTY INTELLECTUAL
|
||||
* PROPERTY OR OTHER RIGHTS WHICH MAY RESULT FROM THE USE OR THE INABILITY
|
||||
* TO USE THE SOFTWARE.
|
||||
*
|
||||
* IN NO EVENT SHALL TRIDENT BE LIABLE FOR INDIRECT, INCIDENTAL, CONSEQUENTIAL,
|
||||
* PUNITIVE, SPECIAL OR OTHER DAMAGES WHATSOEVER INCLUDING WITHOUT LIMITATION,
|
||||
* DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
|
||||
* INFORMATION, AND THE LIKE, ARISING OUT OF OR RELATING TO THE USE OF OR THE
|
||||
* INABILITY TO USE THE SOFTWARE, EVEN IF TRIDENT HAS BEEN ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGES, EXCEPT PERSONAL INJURY OR DEATH RESULTING FROM
|
||||
* TRIDENT'S NEGLIGENCE. $
|
||||
*
|
||||
*/
|
||||
#ifndef __BSP_TYPES_H__
|
||||
#define __BSP_TYPES_H__
|
||||
/*-------------------------------------------------------------------------
|
||||
INCLUDES
|
||||
-------------------------------------------------------------------------*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*-------------------------------------------------------------------------
|
||||
TYPEDEFS
|
||||
-------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* \typedef unsigned char u8_t
|
||||
* \brief type definition of an unsigned 8 bits integer
|
||||
*/
|
||||
typedef unsigned char u8_t;
|
||||
/**
|
||||
* \typedef char s8_t
|
||||
* \brief type definition of a signed 8 bits integer
|
||||
*/
|
||||
typedef char s8_t;
|
||||
/**
|
||||
* \typedef unsigned short u16_t *pu16_t
|
||||
* \brief type definition of an unsigned 16 bits integer
|
||||
*/
|
||||
typedef unsigned short u16_t;
|
||||
/**
|
||||
* \typedef short s16_t
|
||||
* \brief type definition of a signed 16 bits integer
|
||||
*/
|
||||
typedef short s16_t;
|
||||
/**
|
||||
* \typedef unsigned long u32_t
|
||||
* \brief type definition of an unsigned 32 bits integer
|
||||
*/
|
||||
typedef unsigned long u32_t;
|
||||
/**
|
||||
* \typedef long s32_t
|
||||
* \brief type definition of a signed 32 bits integer
|
||||
*/
|
||||
typedef long s32_t;
|
||||
/*
|
||||
* \typedef struct ... u64_t
|
||||
* \brief type definition of an usigned 64 bits integer
|
||||
*/
|
||||
typedef struct {
|
||||
u32_t MSLW;
|
||||
u32_t LSLW;
|
||||
} u64_t;
|
||||
/*
|
||||
* \typedef struct ... i64_t
|
||||
* \brief type definition of a signed 64 bits integer
|
||||
*/
|
||||
typedef struct {
|
||||
s32_t MSLW;
|
||||
u32_t LSLW;
|
||||
} s64_t;
|
||||
|
||||
/**
|
||||
* \typedef u8_t *pu8_t
|
||||
* \brief type definition of pointer to an unsigned 8 bits integer
|
||||
*/
|
||||
typedef u8_t *pu8_t;
|
||||
/**
|
||||
* \typedef s8_t *ps8_t
|
||||
* \brief type definition of pointer to a signed 8 bits integer
|
||||
*/
|
||||
typedef s8_t *ps8_t;
|
||||
/**
|
||||
* \typedef u16_t *pu16_t
|
||||
* \brief type definition of pointer to an unsigned 16 bits integer
|
||||
*/
|
||||
typedef u16_t *pu16_t;
|
||||
/**
|
||||
* \typedef s16_t *ps16_t
|
||||
* \brief type definition of pointer to a signed 16 bits integer
|
||||
*/
|
||||
typedef s16_t *ps16_t;
|
||||
/**
|
||||
* \typedef u32_t *pu32_t
|
||||
* \brief type definition of pointer to an unsigned 32 bits integer
|
||||
*/
|
||||
typedef u32_t *pu32_t;
|
||||
/**
|
||||
* \typedef s32_t *ps32_t
|
||||
* \brief type definition of pointer to a signed 32 bits integer
|
||||
*/
|
||||
typedef s32_t *ps32_t;
|
||||
/**
|
||||
* \typedef u64_t *pu64_t
|
||||
* \brief type definition of pointer to an usigned 64 bits integer
|
||||
*/
|
||||
typedef u64_t *pu64_t;
|
||||
/**
|
||||
* \typedef s64_t *ps64_t
|
||||
* \brief type definition of pointer to a signed 64 bits integer
|
||||
*/
|
||||
typedef s64_t *ps64_t;
|
||||
|
||||
|
||||
/**
|
||||
* \typedef s32_t DRXFrequency_t
|
||||
* \brief type definition of frequency
|
||||
*/
|
||||
typedef s32_t DRXFrequency_t;
|
||||
|
||||
/**
|
||||
* \typedef DRXFrequency_t *pDRXFrequency_t
|
||||
* \brief type definition of a pointer to a frequency
|
||||
*/
|
||||
typedef DRXFrequency_t *pDRXFrequency_t;
|
||||
|
||||
/**
|
||||
* \typedef u32_t DRXSymbolrate_t
|
||||
* \brief type definition of symbol rate
|
||||
*/
|
||||
typedef u32_t DRXSymbolrate_t;
|
||||
|
||||
/**
|
||||
* \typedef DRXSymbolrate_t *pDRXSymbolrate_t
|
||||
* \brief type definition of a pointer to a symbol rate
|
||||
*/
|
||||
typedef DRXSymbolrate_t *pDRXSymbolrate_t;
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
DEFINES
|
||||
-------------------------------------------------------------------------*/
|
||||
/**
|
||||
* \def NULL
|
||||
* \brief Define NULL for target.
|
||||
*/
|
||||
#ifndef NULL
|
||||
#define NULL (0)
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
ENUM
|
||||
-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* Boolean datatype. Only define if not already defined TRUE or FALSE.
|
||||
*/
|
||||
#if defined (TRUE) || defined (FALSE)
|
||||
typedef int Bool_t;
|
||||
#else
|
||||
/**
|
||||
* \enum Bool_t
|
||||
* \brief Boolean type
|
||||
*/
|
||||
typedef enum {
|
||||
FALSE = 0,
|
||||
TRUE
|
||||
} Bool_t;
|
||||
#endif
|
||||
typedef Bool_t *pBool_t;
|
||||
|
||||
/**
|
||||
* \enum DRXStatus_t
|
||||
* \brief Various return statusses
|
||||
*/
|
||||
typedef enum {
|
||||
DRX_STS_READY = 3, /**< device/service is ready */
|
||||
DRX_STS_BUSY = 2, /**< device/service is busy */
|
||||
DRX_STS_OK = 1, /**< everything is OK */
|
||||
DRX_STS_INVALID_ARG = -1, /**< invalid arguments */
|
||||
DRX_STS_ERROR = -2, /**< general error */
|
||||
DRX_STS_FUNC_NOT_AVAILABLE = -3 /**< unavailable functionality */
|
||||
} DRXStatus_t, *pDRXStatus_t;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
STRUCTS
|
||||
-------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
Exported FUNCTIONS
|
||||
-------------------------------------------------------------------------*/
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
THE END
|
||||
-------------------------------------------------------------------------*/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* __BSP_TYPES_H__ */
|
456
drivers/media/dvb-frontends/drx39xyj/drx39xxj.c
Normal file
456
drivers/media/dvb-frontends/drx39xyj/drx39xxj.c
Normal file
|
@ -0,0 +1,456 @@
|
|||
/*
|
||||
* Driver for Micronas DRX39xx family (drx3933j)
|
||||
*
|
||||
* Written by Devin Heitmueller <devin.heitmueller@gmail.com>
|
||||
*
|
||||
* 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/init.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include "dvb_frontend.h"
|
||||
#include "drx39xxj.h"
|
||||
#include "drx_driver.h"
|
||||
#include "bsp_types.h"
|
||||
#include "bsp_tuner.h"
|
||||
#include "drxj_mc.h"
|
||||
#include "drxj.h"
|
||||
|
||||
static int drx39xxj_set_powerstate(struct dvb_frontend* fe, int enable)
|
||||
{
|
||||
struct drx39xxj_state *state = fe->demodulator_priv;
|
||||
DRXDemodInstance_t *demod = state->demod;
|
||||
DRXStatus_t result;
|
||||
DRXPowerMode_t powerMode;
|
||||
|
||||
if (enable)
|
||||
powerMode = DRX_POWER_UP;
|
||||
else
|
||||
powerMode = DRX_POWER_DOWN;
|
||||
|
||||
result = DRX_Ctrl(demod, DRX_CTRL_POWER_MODE, &powerMode);
|
||||
if (result != DRX_STS_OK) {
|
||||
printk("Power state change failed\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
state->powered_up = enable;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int drx39xxj_read_status(struct dvb_frontend* fe, fe_status_t* status)
|
||||
{
|
||||
struct drx39xxj_state* state = fe->demodulator_priv;
|
||||
DRXDemodInstance_t *demod = state->demod;
|
||||
DRXStatus_t result;
|
||||
DRXLockStatus_t lock_status;
|
||||
|
||||
*status = 0;
|
||||
|
||||
result = DRX_Ctrl(demod, DRX_CTRL_LOCK_STATUS, &lock_status);
|
||||
if (result != DRX_STS_OK) {
|
||||
printk("drx39xxj: could not get lock status!\n");
|
||||
*status = 0;
|
||||
}
|
||||
|
||||
switch (lock_status) {
|
||||
case DRX_NEVER_LOCK:
|
||||
*status = 0;
|
||||
printk("drx says NEVER_LOCK\n");
|
||||
break;
|
||||
case DRX_NOT_LOCKED:
|
||||
*status = 0;
|
||||
break;
|
||||
case DRX_LOCK_STATE_1:
|
||||
case DRX_LOCK_STATE_2:
|
||||
case DRX_LOCK_STATE_3:
|
||||
case DRX_LOCK_STATE_4:
|
||||
case DRX_LOCK_STATE_5:
|
||||
case DRX_LOCK_STATE_6:
|
||||
case DRX_LOCK_STATE_7:
|
||||
case DRX_LOCK_STATE_8:
|
||||
case DRX_LOCK_STATE_9:
|
||||
*status = FE_HAS_SIGNAL
|
||||
| FE_HAS_CARRIER
|
||||
| FE_HAS_VITERBI
|
||||
| FE_HAS_SYNC;
|
||||
break;
|
||||
case DRX_LOCKED:
|
||||
*status = FE_HAS_SIGNAL
|
||||
| FE_HAS_CARRIER
|
||||
| FE_HAS_VITERBI
|
||||
| FE_HAS_SYNC
|
||||
| FE_HAS_LOCK;
|
||||
break;
|
||||
default:
|
||||
printk("Lock state unknown %d\n", lock_status);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int drx39xxj_read_ber(struct dvb_frontend* fe, u32* ber)
|
||||
{
|
||||
struct drx39xxj_state* state = fe->demodulator_priv;
|
||||
DRXDemodInstance_t *demod = state->demod;
|
||||
DRXStatus_t result;
|
||||
DRXSigQuality_t sig_quality;
|
||||
|
||||
result = DRX_Ctrl(demod, DRX_CTRL_SIG_QUALITY, &sig_quality);
|
||||
if (result != DRX_STS_OK) {
|
||||
printk("drx39xxj: could not get ber!\n");
|
||||
*ber = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
*ber = sig_quality.postReedSolomonBER;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int drx39xxj_read_signal_strength(struct dvb_frontend* fe, u16* strength)
|
||||
{
|
||||
struct drx39xxj_state* state = fe->demodulator_priv;
|
||||
DRXDemodInstance_t *demod = state->demod;
|
||||
DRXStatus_t result;
|
||||
DRXSigQuality_t sig_quality;
|
||||
|
||||
result = DRX_Ctrl(demod, DRX_CTRL_SIG_QUALITY, &sig_quality);
|
||||
if (result != DRX_STS_OK) {
|
||||
printk("drx39xxj: could not get signal strength!\n");
|
||||
*strength = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 1-100% scaled to 0-65535 */
|
||||
*strength = (sig_quality.indicator * 65535 / 100);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int drx39xxj_read_snr(struct dvb_frontend* fe, u16* snr)
|
||||
{
|
||||
struct drx39xxj_state* state = fe->demodulator_priv;
|
||||
DRXDemodInstance_t *demod = state->demod;
|
||||
DRXStatus_t result;
|
||||
DRXSigQuality_t sig_quality;
|
||||
|
||||
result = DRX_Ctrl(demod, DRX_CTRL_SIG_QUALITY, &sig_quality);
|
||||
if (result != DRX_STS_OK) {
|
||||
printk("drx39xxj: could not read snr!\n");
|
||||
*snr = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
*snr = sig_quality.MER;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int drx39xxj_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
|
||||
{
|
||||
struct drx39xxj_state* state = fe->demodulator_priv;
|
||||
DRXDemodInstance_t *demod = state->demod;
|
||||
DRXStatus_t result;
|
||||
DRXSigQuality_t sig_quality;
|
||||
|
||||
result = DRX_Ctrl(demod, DRX_CTRL_SIG_QUALITY, &sig_quality);
|
||||
if (result != DRX_STS_OK) {
|
||||
printk("drx39xxj: could not get uc blocks!\n");
|
||||
*ucblocks = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
*ucblocks = sig_quality.packetError;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int drx39xxj_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *p)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int drx39xxj_set_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *p)
|
||||
{
|
||||
#ifdef DJH_DEBUG
|
||||
int i;
|
||||
#endif
|
||||
struct drx39xxj_state* state = fe->demodulator_priv;
|
||||
DRXDemodInstance_t *demod = state->demod;
|
||||
DRXStandard_t standard = DRX_STANDARD_8VSB;
|
||||
DRXChannel_t channel;
|
||||
DRXStatus_t result;
|
||||
DRXUIOData_t uioData;
|
||||
DRXChannel_t defChannel = {/* frequency */ 0,
|
||||
/* bandwidth */ DRX_BANDWIDTH_6MHZ,
|
||||
/* mirror */ DRX_MIRROR_NO,
|
||||
/* constellation */ DRX_CONSTELLATION_AUTO,
|
||||
/* hierarchy */ DRX_HIERARCHY_UNKNOWN,
|
||||
/* priority */ DRX_PRIORITY_UNKNOWN,
|
||||
/* coderate */ DRX_CODERATE_UNKNOWN,
|
||||
/* guard */ DRX_GUARD_UNKNOWN,
|
||||
/* fftmode */ DRX_FFTMODE_UNKNOWN,
|
||||
/* classification */ DRX_CLASSIFICATION_AUTO,
|
||||
/* symbolrate */ 5057000,
|
||||
/* interleavemode */ DRX_INTERLEAVEMODE_UNKNOWN,
|
||||
/* ldpc */ DRX_LDPC_UNKNOWN,
|
||||
/* carrier */ DRX_CARRIER_UNKNOWN,
|
||||
/* frame mode */ DRX_FRAMEMODE_UNKNOWN
|
||||
};
|
||||
|
||||
/* Bring the demod out of sleep */
|
||||
drx39xxj_set_powerstate(fe, 1);
|
||||
|
||||
/* Now make the tuner do it's thing... */
|
||||
if (fe->ops.tuner_ops.set_params) {
|
||||
if (fe->ops.i2c_gate_ctrl)
|
||||
fe->ops.i2c_gate_ctrl(fe, 1);
|
||||
fe->ops.tuner_ops.set_params(fe, p);
|
||||
if (fe->ops.i2c_gate_ctrl)
|
||||
fe->ops.i2c_gate_ctrl(fe, 0);
|
||||
}
|
||||
|
||||
if (standard != state->current_standard || state->powered_up == 0) {
|
||||
/* Set the standard (will be powered up if necessary */
|
||||
result = DRX_Ctrl(demod, DRX_CTRL_SET_STANDARD, &standard);
|
||||
if (result != DRX_STS_OK) {
|
||||
printk("Failed to set standard! result=%02x\n", result);
|
||||
return -EINVAL;
|
||||
}
|
||||
state->powered_up = 1;
|
||||
state->current_standard = standard;
|
||||
}
|
||||
|
||||
/* set channel parameters */
|
||||
channel = defChannel;
|
||||
channel.frequency = p->frequency / 1000;
|
||||
channel.bandwidth = DRX_BANDWIDTH_6MHZ;
|
||||
channel.constellation = DRX_CONSTELLATION_AUTO;
|
||||
|
||||
/* program channel */
|
||||
result = DRX_Ctrl(demod, DRX_CTRL_SET_CHANNEL, &channel);
|
||||
if (result != DRX_STS_OK) {
|
||||
printk("Failed to set channel!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
// Just for giggles, let's shut off the LNA again....
|
||||
uioData.uio = DRX_UIO1;
|
||||
uioData.value = FALSE;
|
||||
result = DRX_Ctrl(demod, DRX_CTRL_UIO_WRITE, &uioData);
|
||||
if (result != DRX_STS_OK) {
|
||||
printk("Failed to disable LNA!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef DJH_DEBUG
|
||||
for(i = 0; i < 2000; i++) {
|
||||
fe_status_t status;
|
||||
drx39xxj_read_status(fe, &status);
|
||||
printk("i=%d status=%d\n", i, status);
|
||||
msleep(100);
|
||||
i += 100;
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int drx39xxj_sleep(struct dvb_frontend* fe)
|
||||
{
|
||||
/* power-down the demodulator */
|
||||
return drx39xxj_set_powerstate(fe, 0);
|
||||
}
|
||||
|
||||
static int drx39xxj_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
|
||||
{
|
||||
struct drx39xxj_state *state = fe->demodulator_priv;
|
||||
DRXDemodInstance_t *demod = state->demod;
|
||||
Bool_t i2c_gate_state;
|
||||
DRXStatus_t result;
|
||||
|
||||
#ifdef DJH_DEBUG
|
||||
printk("i2c gate call: enable=%d state=%d\n", enable,
|
||||
state->i2c_gate_open);
|
||||
#endif
|
||||
|
||||
if (enable)
|
||||
i2c_gate_state = TRUE;
|
||||
else
|
||||
i2c_gate_state = FALSE;
|
||||
|
||||
if (state->i2c_gate_open == enable) {
|
||||
/* We're already in the desired state */
|
||||
return 0;
|
||||
}
|
||||
|
||||
result = DRX_Ctrl(demod, DRX_CTRL_I2C_BRIDGE, &i2c_gate_state);
|
||||
if (result != DRX_STS_OK) {
|
||||
printk("drx39xxj: could not open i2c gate [%d]\n", result);
|
||||
dump_stack();
|
||||
} else {
|
||||
state->i2c_gate_open = enable;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int drx39xxj_init(struct dvb_frontend* fe)
|
||||
{
|
||||
/* Bring the demod out of sleep */
|
||||
drx39xxj_set_powerstate(fe, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int drx39xxj_get_tune_settings(struct dvb_frontend *fe,
|
||||
struct dvb_frontend_tune_settings *tune)
|
||||
{
|
||||
tune->min_delay_ms = 1000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void drx39xxj_release(struct dvb_frontend* fe)
|
||||
{
|
||||
struct drx39xxj_state* state = fe->demodulator_priv;
|
||||
kfree(state);
|
||||
}
|
||||
|
||||
static struct dvb_frontend_ops drx39xxj_ops;
|
||||
|
||||
struct dvb_frontend *drx39xxj_attach(struct i2c_adapter *i2c)
|
||||
{
|
||||
struct drx39xxj_state* state = NULL;
|
||||
|
||||
I2CDeviceAddr_t *demodAddr = NULL;
|
||||
DRXCommonAttr_t *demodCommAttr = NULL;
|
||||
DRXJData_t *demodExtAttr = NULL;
|
||||
DRXDemodInstance_t *demod = NULL;
|
||||
DRXUIOCfg_t uioCfg;
|
||||
DRXUIOData_t uioData;
|
||||
DRXStatus_t result;
|
||||
|
||||
/* allocate memory for the internal state */
|
||||
state = kmalloc(sizeof(struct drx39xxj_state), GFP_KERNEL);
|
||||
if (state == NULL) goto error;
|
||||
|
||||
demod = kmalloc(sizeof(DRXDemodInstance_t), GFP_KERNEL);
|
||||
if (demod == NULL) goto error;
|
||||
|
||||
demodAddr = kmalloc(sizeof(I2CDeviceAddr_t), GFP_KERNEL);
|
||||
if (demodAddr == NULL) goto error;
|
||||
|
||||
demodCommAttr = kmalloc(sizeof(DRXCommonAttr_t), GFP_KERNEL);
|
||||
if (demodCommAttr == NULL) goto error;
|
||||
|
||||
demodExtAttr = kmalloc(sizeof(DRXJData_t), GFP_KERNEL);
|
||||
if (demodExtAttr == NULL) goto error;
|
||||
|
||||
/* setup the state */
|
||||
state->i2c = i2c;
|
||||
state->demod = demod;
|
||||
|
||||
memcpy(demod, &DRXJDefaultDemod_g, sizeof(DRXDemodInstance_t));
|
||||
|
||||
demod->myI2CDevAddr = demodAddr;
|
||||
memcpy(demod->myI2CDevAddr, &DRXJDefaultAddr_g,
|
||||
sizeof(I2CDeviceAddr_t));
|
||||
demod->myI2CDevAddr->userData = state;
|
||||
demod->myCommonAttr = demodCommAttr;
|
||||
memcpy(demod->myCommonAttr, &DRXJDefaultCommAttr_g,
|
||||
sizeof(DRXCommonAttr_t));
|
||||
demod->myCommonAttr->microcode = DRXJ_MC_MAIN;
|
||||
// demod->myCommonAttr->verifyMicrocode = FALSE;
|
||||
demod->myCommonAttr->verifyMicrocode = TRUE;
|
||||
demod->myCommonAttr->intermediateFreq = 5000;
|
||||
|
||||
demod->myExtAttr = demodExtAttr;
|
||||
memcpy(demod->myExtAttr, &DRXJData_g, sizeof(DRXJData_t));
|
||||
((DRXJData_t *) demod->myExtAttr)->uioSmaTxMode = DRX_UIO_MODE_READWRITE;
|
||||
|
||||
demod->myTuner = NULL;
|
||||
|
||||
result = DRX_Open(demod);
|
||||
if (result != DRX_STS_OK) {
|
||||
printk("DRX open failed! Aborting\n");
|
||||
kfree(state);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Turn off the LNA */
|
||||
uioCfg.uio = DRX_UIO1;
|
||||
uioCfg.mode = DRX_UIO_MODE_READWRITE;
|
||||
/* Configure user-I/O #3: enable read/write */
|
||||
result = DRX_Ctrl(demod, DRX_CTRL_UIO_CFG, &uioCfg);
|
||||
if (result != DRX_STS_OK) {
|
||||
printk("Failed to setup LNA GPIO!\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
uioData.uio = DRX_UIO1;
|
||||
uioData.value = FALSE;
|
||||
result = DRX_Ctrl(demod, DRX_CTRL_UIO_WRITE, &uioData);
|
||||
if (result != DRX_STS_OK) {
|
||||
printk("Failed to disable LNA!\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* create dvb_frontend */
|
||||
memcpy(&state->frontend.ops, &drx39xxj_ops,
|
||||
sizeof(struct dvb_frontend_ops));
|
||||
|
||||
state->frontend.demodulator_priv = state;
|
||||
return &state->frontend;
|
||||
|
||||
error:
|
||||
if (state != NULL)
|
||||
kfree(state);
|
||||
if (demod != NULL)
|
||||
kfree(demod);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static struct dvb_frontend_ops drx39xxj_ops = {
|
||||
|
||||
.info = {
|
||||
.name = "Micronas DRX39xxj family Frontend",
|
||||
.type = FE_ATSC | FE_QAM,
|
||||
.frequency_stepsize = 62500,
|
||||
.frequency_min = 51000000,
|
||||
.frequency_max = 858000000,
|
||||
.caps = FE_CAN_QAM_64 | FE_CAN_QAM_256 | FE_CAN_8VSB
|
||||
},
|
||||
|
||||
.init = drx39xxj_init,
|
||||
.i2c_gate_ctrl = drx39xxj_i2c_gate_ctrl,
|
||||
.sleep = drx39xxj_sleep,
|
||||
.set_frontend = drx39xxj_set_frontend,
|
||||
.get_frontend = drx39xxj_get_frontend,
|
||||
.get_tune_settings = drx39xxj_get_tune_settings,
|
||||
.read_status = drx39xxj_read_status,
|
||||
.read_ber = drx39xxj_read_ber,
|
||||
.read_signal_strength = drx39xxj_read_signal_strength,
|
||||
.read_snr = drx39xxj_read_snr,
|
||||
.read_ucblocks = drx39xxj_read_ucblocks,
|
||||
.release = drx39xxj_release,
|
||||
};
|
||||
|
||||
MODULE_DESCRIPTION("Micronas DRX39xxj Frontend");
|
||||
MODULE_AUTHOR("Devin Heitmueller");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
EXPORT_SYMBOL(drx39xxj_attach);
|
40
drivers/media/dvb-frontends/drx39xyj/drx39xxj.h
Normal file
40
drivers/media/dvb-frontends/drx39xyj/drx39xxj.h
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* Driver for Micronas DRX39xx family (drx3933j)
|
||||
*
|
||||
* Written by Devin Heitmueller <devin.heitmueller@gmail.com>
|
||||
*
|
||||
* 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.=
|
||||
*/
|
||||
|
||||
#ifndef DRX39XXJ_H
|
||||
#define DRX39XXJ_H
|
||||
|
||||
#include <linux/dvb/frontend.h>
|
||||
#include "dvb_frontend.h"
|
||||
#include "drx_driver.h"
|
||||
|
||||
struct drx39xxj_state {
|
||||
struct i2c_adapter *i2c;
|
||||
DRXDemodInstance_t *demod;
|
||||
DRXStandard_t current_standard;
|
||||
struct dvb_frontend frontend;
|
||||
int powered_up:1;
|
||||
unsigned int i2c_gate_open:1;
|
||||
};
|
||||
|
||||
extern struct dvb_frontend* drx39xxj_attach(struct i2c_adapter *i2c);
|
||||
|
||||
#endif // DVB_DUMMY_FE_H
|
134
drivers/media/dvb-frontends/drx39xyj/drx39xxj_dummy.c
Normal file
134
drivers/media/dvb-frontends/drx39xyj/drx39xxj_dummy.c
Normal file
|
@ -0,0 +1,134 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include "drx_driver.h"
|
||||
#include "bsp_types.h"
|
||||
#include "bsp_tuner.h"
|
||||
#include "drx39xxj.h"
|
||||
|
||||
/* Dummy function to satisfy drxj.c */
|
||||
DRXStatus_t DRXBSP_TUNER_Open( pTUNERInstance_t tuner )
|
||||
{
|
||||
return DRX_STS_OK;
|
||||
}
|
||||
|
||||
DRXStatus_t DRXBSP_TUNER_Close( pTUNERInstance_t tuner )
|
||||
{
|
||||
return DRX_STS_OK;
|
||||
}
|
||||
|
||||
DRXStatus_t DRXBSP_TUNER_SetFrequency( pTUNERInstance_t tuner,
|
||||
TUNERMode_t mode,
|
||||
DRXFrequency_t centerFrequency )
|
||||
{
|
||||
return DRX_STS_OK;
|
||||
}
|
||||
|
||||
DRXStatus_t
|
||||
DRXBSP_TUNER_GetFrequency( pTUNERInstance_t tuner,
|
||||
TUNERMode_t mode,
|
||||
pDRXFrequency_t RFfrequency,
|
||||
pDRXFrequency_t IFfrequency )
|
||||
{
|
||||
return DRX_STS_OK;
|
||||
}
|
||||
|
||||
DRXStatus_t DRXBSP_HST_Sleep( u32_t n )
|
||||
{
|
||||
msleep(n);
|
||||
return DRX_STS_OK;
|
||||
}
|
||||
|
||||
u32_t DRXBSP_HST_Clock( void )
|
||||
{
|
||||
return jiffies_to_msecs(jiffies);
|
||||
}
|
||||
|
||||
int DRXBSP_HST_Memcmp( void *s1, void *s2, u32_t n)
|
||||
{
|
||||
return ( memcmp( s1, s2, (size_t) n) );
|
||||
}
|
||||
|
||||
void* DRXBSP_HST_Memcpy( void *to, void *from, u32_t n)
|
||||
{
|
||||
return ( memcpy( to, from, (size_t) n) );
|
||||
}
|
||||
|
||||
DRXStatus_t DRXBSP_I2C_WriteRead( pI2CDeviceAddr_t wDevAddr,
|
||||
u16_t wCount,
|
||||
pu8_t wData,
|
||||
pI2CDeviceAddr_t rDevAddr,
|
||||
u16_t rCount,
|
||||
pu8_t rData )
|
||||
{
|
||||
struct drx39xxj_state *state;
|
||||
struct i2c_msg msg[2];
|
||||
unsigned int num_msgs;
|
||||
|
||||
if (wDevAddr == NULL) {
|
||||
/* Read only */
|
||||
state = rDevAddr->userData;
|
||||
msg[0].addr = rDevAddr->i2cAddr >> 1;
|
||||
msg[0].flags = I2C_M_RD;
|
||||
msg[0].buf = rData;
|
||||
msg[0].len = rCount;
|
||||
num_msgs = 1;
|
||||
} else if (rDevAddr == NULL) {
|
||||
/* Write only */
|
||||
state = wDevAddr->userData;
|
||||
msg[0].addr = wDevAddr->i2cAddr >> 1;
|
||||
msg[0].flags = 0;
|
||||
msg[0].buf = wData;
|
||||
msg[0].len = wCount;
|
||||
num_msgs = 1;
|
||||
} else {
|
||||
/* Both write and read */
|
||||
state = wDevAddr->userData;
|
||||
msg[0].addr = wDevAddr->i2cAddr >> 1;
|
||||
msg[0].flags = 0;
|
||||
msg[0].buf = wData;
|
||||
msg[0].len = wCount;
|
||||
msg[1].addr = rDevAddr->i2cAddr >> 1;
|
||||
msg[1].flags = I2C_M_RD;
|
||||
msg[1].buf = rData;
|
||||
msg[1].len = rCount;
|
||||
num_msgs = 2;
|
||||
}
|
||||
|
||||
if (state->i2c == NULL) {
|
||||
printk("i2c was zero, aborting\n");
|
||||
return 0;
|
||||
}
|
||||
if (i2c_transfer(state->i2c, msg, num_msgs) != num_msgs) {
|
||||
printk(KERN_WARNING "drx3933: I2C write/read failed\n");
|
||||
return -EREMOTEIO;
|
||||
}
|
||||
|
||||
return DRX_STS_OK;
|
||||
|
||||
#ifdef DJH_DEBUG
|
||||
struct drx39xxj_state *state = wDevAddr->userData;
|
||||
|
||||
struct i2c_msg msg[2] = {
|
||||
{ .addr = wDevAddr->i2cAddr,
|
||||
.flags = 0, .buf = wData, .len = wCount },
|
||||
{ .addr = rDevAddr->i2cAddr,
|
||||
.flags = I2C_M_RD, .buf = rData, .len = rCount },
|
||||
};
|
||||
|
||||
printk("drx3933 i2c operation addr=%x i2c=%p, wc=%x rc=%x\n",
|
||||
wDevAddr->i2cAddr, state->i2c, wCount, rCount);
|
||||
|
||||
if (i2c_transfer(state->i2c, msg, 2) != 2) {
|
||||
printk(KERN_WARNING "drx3933: I2C write/read failed\n");
|
||||
return -EREMOTEIO;
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
674
drivers/media/dvb-frontends/drx39xyj/drx_dap_fasi.c
Normal file
674
drivers/media/dvb-frontends/drx39xyj/drx_dap_fasi.c
Normal file
|
@ -0,0 +1,674 @@
|
|||
/*******************************************************************************
|
||||
* FILENAME: $Id: drx_dap_fasi.c,v 1.7 2009/12/28 14:36:21 carlo Exp $
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Part of DRX driver.
|
||||
* Data access protocol: Fast Access Sequential Interface (fasi)
|
||||
* Fast access, because of short addressing format (16 instead of 32 bits addr)
|
||||
* Sequential, because of I2C.
|
||||
* These functions know how the chip's memory and registers are to be accessed,
|
||||
* but nothing more.
|
||||
*
|
||||
* These functions should not need adapting to a new platform.
|
||||
*
|
||||
* USAGE:
|
||||
* -
|
||||
*
|
||||
* NOTES:
|
||||
* $(c) 2009 Trident Microsystems, Inc. - All rights reserved.
|
||||
*
|
||||
* This software and related documentation (the 'Software') are intellectual
|
||||
* property owned by Trident and are copyright of Trident, unless specifically
|
||||
* noted otherwise.
|
||||
*
|
||||
* Any use of the Software is permitted only pursuant to the terms of the
|
||||
* license agreement, if any, which accompanies, is included with or applicable
|
||||
* to the Software ('License Agreement') or upon express written consent of
|
||||
* Trident. Any copying, reproduction or redistribution of the Software in
|
||||
* whole or in part by any means not in accordance with the License Agreement
|
||||
* or as agreed in writing by Trident is expressly prohibited.
|
||||
*
|
||||
* THE SOFTWARE IS WARRANTED, IF AT ALL, ONLY ACCORDING TO THE TERMS OF THE
|
||||
* LICENSE AGREEMENT. EXCEPT AS WARRANTED IN THE LICENSE AGREEMENT THE SOFTWARE
|
||||
* IS DELIVERED 'AS IS' AND TRIDENT HEREBY DISCLAIMS ALL WARRANTIES AND
|
||||
* CONDITIONS WITH REGARD TO THE SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
* AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIT
|
||||
* ENJOYMENT, TITLE AND NON-INFRINGEMENT OF ANY THIRD PARTY INTELLECTUAL
|
||||
* PROPERTY OR OTHER RIGHTS WHICH MAY RESULT FROM THE USE OR THE INABILITY
|
||||
* TO USE THE SOFTWARE.
|
||||
*
|
||||
* IN NO EVENT SHALL TRIDENT BE LIABLE FOR INDIRECT, INCIDENTAL, CONSEQUENTIAL,
|
||||
* PUNITIVE, SPECIAL OR OTHER DAMAGES WHATSOEVER INCLUDING WITHOUT LIMITATION,
|
||||
* DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
|
||||
* INFORMATION, AND THE LIKE, ARISING OUT OF OR RELATING TO THE USE OF OR THE
|
||||
* INABILITY TO USE THE SOFTWARE, EVEN IF TRIDENT HAS BEEN ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGES, EXCEPT PERSONAL INJURY OR DEATH RESULTING FROM
|
||||
* TRIDENT'S NEGLIGENCE. $
|
||||
*
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#include "drx_dap_fasi.h"
|
||||
#include "bsp_host.h" /* for DRXBSP_HST_Memcpy() */
|
||||
|
||||
/*============================================================================*/
|
||||
|
||||
/* Function prototypes */
|
||||
static DRXStatus_t DRXDAP_FASI_WriteBlock (
|
||||
pI2CDeviceAddr_t devAddr, /* address of I2C device */
|
||||
DRXaddr_t addr, /* address of register/memory */
|
||||
u16_t datasize, /* size of data */
|
||||
pu8_t data, /* data to send */
|
||||
DRXflags_t flags); /* special device flags */
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_ReadBlock (
|
||||
pI2CDeviceAddr_t devAddr, /* address of I2C device */
|
||||
DRXaddr_t addr, /* address of register/memory */
|
||||
u16_t datasize, /* size of data */
|
||||
pu8_t data, /* data to send */
|
||||
DRXflags_t flags); /* special device flags */
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_WriteReg8 (
|
||||
pI2CDeviceAddr_t devAddr, /* address of I2C device */
|
||||
DRXaddr_t addr, /* address of register */
|
||||
u8_t data, /* data to write */
|
||||
DRXflags_t flags); /* special device flags */
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_ReadReg8 (
|
||||
pI2CDeviceAddr_t devAddr, /* address of I2C device */
|
||||
DRXaddr_t addr, /* address of register */
|
||||
pu8_t data, /* buffer to receive data */
|
||||
DRXflags_t flags); /* special device flags */
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_ReadModifyWriteReg8 (
|
||||
pI2CDeviceAddr_t devAddr, /* address of I2C device */
|
||||
DRXaddr_t waddr, /* address of register */
|
||||
DRXaddr_t raddr, /* address to read back from */
|
||||
u8_t datain, /* data to send */
|
||||
pu8_t dataout); /* data to receive back */
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_WriteReg16 (
|
||||
pI2CDeviceAddr_t devAddr, /* address of I2C device */
|
||||
DRXaddr_t addr, /* address of register */
|
||||
u16_t data, /* data to write */
|
||||
DRXflags_t flags); /* special device flags */
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_ReadReg16 (
|
||||
pI2CDeviceAddr_t devAddr, /* address of I2C device */
|
||||
DRXaddr_t addr, /* address of register */
|
||||
pu16_t data, /* buffer to receive data */
|
||||
DRXflags_t flags); /* special device flags */
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_ReadModifyWriteReg16 (
|
||||
pI2CDeviceAddr_t devAddr, /* address of I2C device */
|
||||
DRXaddr_t waddr, /* address of register */
|
||||
DRXaddr_t raddr, /* address to read back from */
|
||||
u16_t datain, /* data to send */
|
||||
pu16_t dataout); /* data to receive back */
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_WriteReg32 (
|
||||
pI2CDeviceAddr_t devAddr, /* address of I2C device */
|
||||
DRXaddr_t addr, /* address of register */
|
||||
u32_t data, /* data to write */
|
||||
DRXflags_t flags); /* special device flags */
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_ReadReg32 (
|
||||
pI2CDeviceAddr_t devAddr, /* address of I2C device */
|
||||
DRXaddr_t addr, /* address of register */
|
||||
pu32_t data, /* buffer to receive data */
|
||||
DRXflags_t flags); /* special device flags */
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_ReadModifyWriteReg32 (
|
||||
pI2CDeviceAddr_t devAddr, /* address of I2C device */
|
||||
DRXaddr_t waddr, /* address of register */
|
||||
DRXaddr_t raddr, /* address to read back from */
|
||||
u32_t datain, /* data to send */
|
||||
pu32_t dataout); /* data to receive back */
|
||||
|
||||
/* The version structure of this protocol implementation */
|
||||
char drxDapFASIModuleName[] = "FASI Data Access Protocol";
|
||||
char drxDapFASIVersionText[] = "";
|
||||
|
||||
DRXVersion_t drxDapFASIVersion =
|
||||
{
|
||||
DRX_MODULE_DAP, /**< type identifier of the module */
|
||||
drxDapFASIModuleName, /**< name or description of module */
|
||||
|
||||
0, /**< major version number */
|
||||
0, /**< minor version number */
|
||||
0, /**< patch version number */
|
||||
drxDapFASIVersionText /**< version as text string */
|
||||
};
|
||||
|
||||
/* The structure containing the protocol interface */
|
||||
DRXAccessFunc_t drxDapFASIFunct_g =
|
||||
{
|
||||
&drxDapFASIVersion,
|
||||
DRXDAP_FASI_WriteBlock, /* Supported */
|
||||
DRXDAP_FASI_ReadBlock, /* Supported */
|
||||
DRXDAP_FASI_WriteReg8, /* Not supported */
|
||||
DRXDAP_FASI_ReadReg8, /* Not supported */
|
||||
DRXDAP_FASI_ReadModifyWriteReg8, /* Not supported */
|
||||
DRXDAP_FASI_WriteReg16, /* Supported */
|
||||
DRXDAP_FASI_ReadReg16, /* Supported */
|
||||
DRXDAP_FASI_ReadModifyWriteReg16, /* Supported */
|
||||
DRXDAP_FASI_WriteReg32, /* Supported */
|
||||
DRXDAP_FASI_ReadReg32, /* Supported */
|
||||
DRXDAP_FASI_ReadModifyWriteReg32 /* Not supported */
|
||||
};
|
||||
|
||||
/*============================================================================*/
|
||||
|
||||
/* Functions not supported by protocol*/
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_WriteReg8 (
|
||||
pI2CDeviceAddr_t devAddr, /* address of I2C device */
|
||||
DRXaddr_t addr, /* address of register */
|
||||
u8_t data, /* data to write */
|
||||
DRXflags_t flags) /* special device flags */
|
||||
{
|
||||
return DRX_STS_ERROR;
|
||||
}
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_ReadReg8 (
|
||||
pI2CDeviceAddr_t devAddr, /* address of I2C device */
|
||||
DRXaddr_t addr, /* address of register */
|
||||
pu8_t data, /* buffer to receive data */
|
||||
DRXflags_t flags) /* special device flags */
|
||||
{
|
||||
return DRX_STS_ERROR;
|
||||
}
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_ReadModifyWriteReg8 (
|
||||
pI2CDeviceAddr_t devAddr, /* address of I2C device */
|
||||
DRXaddr_t waddr, /* address of register */
|
||||
DRXaddr_t raddr, /* address to read back from */
|
||||
u8_t datain, /* data to send */
|
||||
pu8_t dataout) /* data to receive back */
|
||||
{
|
||||
return DRX_STS_ERROR;
|
||||
}
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_ReadModifyWriteReg32 (
|
||||
pI2CDeviceAddr_t devAddr, /* address of I2C device */
|
||||
DRXaddr_t waddr, /* address of register */
|
||||
DRXaddr_t raddr, /* address to read back from */
|
||||
u32_t datain, /* data to send */
|
||||
pu32_t dataout) /* data to receive back */
|
||||
{
|
||||
return DRX_STS_ERROR;
|
||||
}
|
||||
|
||||
/*============================================================================*/
|
||||
|
||||
/******************************
|
||||
*
|
||||
* DRXStatus_t DRXDAP_FASI_ReadBlock (
|
||||
* pI2CDeviceAddr_t devAddr, -- address of I2C device
|
||||
* DRXaddr_t addr, -- address of chip register/memory
|
||||
* u16_t datasize, -- number of bytes to read
|
||||
* pu8_t data, -- data to receive
|
||||
* DRXflags_t flags) -- special device flags
|
||||
*
|
||||
* Read block data from chip address. Because the chip is word oriented,
|
||||
* the number of bytes to read must be even.
|
||||
*
|
||||
* Make sure that the buffer to receive the data is large enough.
|
||||
*
|
||||
* Although this function expects an even number of bytes, it is still byte
|
||||
* oriented, and the data read back is NOT translated to the endianness of
|
||||
* the target platform.
|
||||
*
|
||||
* Output:
|
||||
* - DRX_STS_OK if reading was successful
|
||||
* in that case: data read is in *data.
|
||||
* - DRX_STS_ERROR if anything went wrong
|
||||
*
|
||||
******************************/
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_ReadBlock ( pI2CDeviceAddr_t devAddr,
|
||||
DRXaddr_t addr,
|
||||
u16_t datasize,
|
||||
pu8_t data,
|
||||
DRXflags_t flags )
|
||||
{
|
||||
u8_t buf[4];
|
||||
u16_t bufx;
|
||||
DRXStatus_t rc;
|
||||
u16_t overheadSize = 0;
|
||||
|
||||
/* Check parameters ********************************************************/
|
||||
if ( devAddr == NULL )
|
||||
{
|
||||
return DRX_STS_INVALID_ARG;
|
||||
}
|
||||
|
||||
overheadSize = (IS_I2C_10BIT (devAddr->i2cAddr) ? 2 : 1) +
|
||||
(DRXDAP_FASI_LONG_FORMAT(addr) ? 4 : 2 );
|
||||
|
||||
if ( ( DRXDAP_FASI_OFFSET_TOO_LARGE(addr) ) ||
|
||||
( ( !(DRXDAPFASI_LONG_ADDR_ALLOWED) ) &&
|
||||
DRXDAP_FASI_LONG_FORMAT( addr ) ) ||
|
||||
(overheadSize > (DRXDAP_MAX_WCHUNKSIZE)) ||
|
||||
((datasize!=0) && (data==NULL)) ||
|
||||
((datasize & 1)==1 ) )
|
||||
{
|
||||
return DRX_STS_INVALID_ARG;
|
||||
}
|
||||
|
||||
/* ReadModifyWrite & mode flag bits are not allowed */
|
||||
flags &= (~DRXDAP_FASI_RMW & ~DRXDAP_FASI_MODEFLAGS);
|
||||
#if DRXDAP_SINGLE_MASTER
|
||||
flags |= DRXDAP_FASI_SINGLE_MASTER;
|
||||
#endif
|
||||
|
||||
/* Read block from I2C *****************************************************/
|
||||
do {
|
||||
u16_t todo = ( datasize < DRXDAP_MAX_RCHUNKSIZE ?
|
||||
datasize : DRXDAP_MAX_RCHUNKSIZE);
|
||||
|
||||
bufx = 0;
|
||||
|
||||
addr &= ~DRXDAP_FASI_FLAGS;
|
||||
addr |= flags;
|
||||
|
||||
#if ( ( DRXDAPFASI_LONG_ADDR_ALLOWED==1 ) && \
|
||||
( DRXDAPFASI_SHORT_ADDR_ALLOWED==1 ) )
|
||||
/* short format address preferred but long format otherwise */
|
||||
if ( DRXDAP_FASI_LONG_FORMAT(addr) )
|
||||
{
|
||||
#endif
|
||||
#if ( DRXDAPFASI_LONG_ADDR_ALLOWED==1 )
|
||||
buf[bufx++] = (u8_t) (((addr << 1) & 0xFF)|0x01);
|
||||
buf[bufx++] = (u8_t) ((addr >> 16) & 0xFF);
|
||||
buf[bufx++] = (u8_t) ((addr >> 24) & 0xFF);
|
||||
buf[bufx++] = (u8_t) ((addr >> 7) & 0xFF);
|
||||
#endif
|
||||
#if ( ( DRXDAPFASI_LONG_ADDR_ALLOWED==1 ) && \
|
||||
( DRXDAPFASI_SHORT_ADDR_ALLOWED==1 ) )
|
||||
} else {
|
||||
#endif
|
||||
#if ( DRXDAPFASI_SHORT_ADDR_ALLOWED==1 )
|
||||
buf[bufx++] = (u8_t) ((addr << 1) & 0xFF);
|
||||
buf[bufx++] = (u8_t) ( ((addr >> 16) & 0x0F) | ((addr >> 18) & 0xF0) );
|
||||
#endif
|
||||
#if ( ( DRXDAPFASI_LONG_ADDR_ALLOWED==1 ) && \
|
||||
( DRXDAPFASI_SHORT_ADDR_ALLOWED==1 ) )
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
#if DRXDAP_SINGLE_MASTER
|
||||
/*
|
||||
* In single master mode, split the read and write actions.
|
||||
* No special action is needed for write chunks here.
|
||||
*/
|
||||
rc = DRXBSP_I2C_WriteRead (devAddr, bufx, buf, 0, 0, 0);
|
||||
if (rc == DRX_STS_OK)
|
||||
{
|
||||
rc = DRXBSP_I2C_WriteRead (0, 0, 0, devAddr, todo, data);
|
||||
}
|
||||
#else
|
||||
/* In multi master mode, do everything in one RW action */
|
||||
rc = DRXBSP_I2C_WriteRead (devAddr, bufx, buf, devAddr, todo, data);
|
||||
#endif
|
||||
data += todo;
|
||||
addr += (todo >> 1);
|
||||
datasize -= todo;
|
||||
} while (datasize && rc == DRX_STS_OK);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/******************************
|
||||
*
|
||||
* DRXStatus_t DRXDAP_FASI_ReadModifyWriteReg16 (
|
||||
* pI2CDeviceAddr_t devAddr, -- address of I2C device
|
||||
* DRXaddr_t waddr, -- address of chip register/memory
|
||||
* DRXaddr_t raddr, -- chip address to read back from
|
||||
* u16_t wdata, -- data to send
|
||||
* pu16_t rdata) -- data to receive back
|
||||
*
|
||||
* Write 16-bit data, then read back the original contents of that location.
|
||||
* Requires long addressing format to be allowed.
|
||||
*
|
||||
* Before sending data, the data is converted to little endian. The
|
||||
* data received back is converted back to the target platform's endianness.
|
||||
*
|
||||
* WARNING: This function is only guaranteed to work if there is one
|
||||
* master on the I2C bus.
|
||||
*
|
||||
* Output:
|
||||
* - DRX_STS_OK if reading was successful
|
||||
* in that case: read back data is at *rdata
|
||||
* - DRX_STS_ERROR if anything went wrong
|
||||
*
|
||||
******************************/
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_ReadModifyWriteReg16 ( pI2CDeviceAddr_t devAddr,
|
||||
DRXaddr_t waddr,
|
||||
DRXaddr_t raddr,
|
||||
u16_t wdata,
|
||||
pu16_t rdata )
|
||||
{
|
||||
DRXStatus_t rc=DRX_STS_ERROR;
|
||||
|
||||
#if ( DRXDAPFASI_LONG_ADDR_ALLOWED==1 )
|
||||
if (rdata == NULL)
|
||||
{
|
||||
return DRX_STS_INVALID_ARG;
|
||||
}
|
||||
|
||||
rc = DRXDAP_FASI_WriteReg16 (devAddr, waddr, wdata, DRXDAP_FASI_RMW);
|
||||
if (rc == DRX_STS_OK)
|
||||
{
|
||||
rc = DRXDAP_FASI_ReadReg16 (devAddr, raddr, rdata, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/******************************
|
||||
*
|
||||
* DRXStatus_t DRXDAP_FASI_ReadReg16 (
|
||||
* pI2CDeviceAddr_t devAddr, -- address of I2C device
|
||||
* DRXaddr_t addr, -- address of chip register/memory
|
||||
* pu16_t data, -- data to receive
|
||||
* DRXflags_t flags) -- special device flags
|
||||
*
|
||||
* Read one 16-bit register or memory location. The data received back is
|
||||
* converted back to the target platform's endianness.
|
||||
*
|
||||
* Output:
|
||||
* - DRX_STS_OK if reading was successful
|
||||
* in that case: read data is at *data
|
||||
* - DRX_STS_ERROR if anything went wrong
|
||||
*
|
||||
******************************/
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_ReadReg16 ( pI2CDeviceAddr_t devAddr,
|
||||
DRXaddr_t addr,
|
||||
pu16_t data,
|
||||
DRXflags_t flags )
|
||||
{
|
||||
u8_t buf[sizeof (*data)];
|
||||
DRXStatus_t rc;
|
||||
|
||||
if (!data)
|
||||
{
|
||||
return DRX_STS_INVALID_ARG;
|
||||
}
|
||||
rc = DRXDAP_FASI_ReadBlock (devAddr, addr, sizeof (*data), buf, flags);
|
||||
*data = buf[0] + (((u16_t) buf[1]) << 8);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/******************************
|
||||
*
|
||||
* DRXStatus_t DRXDAP_FASI_ReadReg32 (
|
||||
* pI2CDeviceAddr_t devAddr, -- address of I2C device
|
||||
* DRXaddr_t addr, -- address of chip register/memory
|
||||
* pu32_t data, -- data to receive
|
||||
* DRXflags_t flags) -- special device flags
|
||||
*
|
||||
* Read one 32-bit register or memory location. The data received back is
|
||||
* converted back to the target platform's endianness.
|
||||
*
|
||||
* Output:
|
||||
* - DRX_STS_OK if reading was successful
|
||||
* in that case: read data is at *data
|
||||
* - DRX_STS_ERROR if anything went wrong
|
||||
*
|
||||
******************************/
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_ReadReg32 ( pI2CDeviceAddr_t devAddr,
|
||||
DRXaddr_t addr,
|
||||
pu32_t data,
|
||||
DRXflags_t flags )
|
||||
{
|
||||
u8_t buf[sizeof (*data)];
|
||||
DRXStatus_t rc;
|
||||
|
||||
if (!data)
|
||||
{
|
||||
return DRX_STS_INVALID_ARG;
|
||||
}
|
||||
rc = DRXDAP_FASI_ReadBlock (devAddr, addr, sizeof (*data), buf, flags);
|
||||
*data = (((u32_t) buf[0]) << 0) +
|
||||
(((u32_t) buf[1]) << 8) +
|
||||
(((u32_t) buf[2]) << 16) +
|
||||
(((u32_t) buf[3]) << 24);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/******************************
|
||||
*
|
||||
* DRXStatus_t DRXDAP_FASI_WriteBlock (
|
||||
* pI2CDeviceAddr_t devAddr, -- address of I2C device
|
||||
* DRXaddr_t addr, -- address of chip register/memory
|
||||
* u16_t datasize, -- number of bytes to read
|
||||
* pu8_t data, -- data to receive
|
||||
* DRXflags_t flags) -- special device flags
|
||||
*
|
||||
* Write block data to chip address. Because the chip is word oriented,
|
||||
* the number of bytes to write must be even.
|
||||
*
|
||||
* Although this function expects an even number of bytes, it is still byte
|
||||
* oriented, and the data being written is NOT translated from the endianness of
|
||||
* the target platform.
|
||||
*
|
||||
* Output:
|
||||
* - DRX_STS_OK if writing was successful
|
||||
* - DRX_STS_ERROR if anything went wrong
|
||||
*
|
||||
******************************/
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_WriteBlock ( pI2CDeviceAddr_t devAddr,
|
||||
DRXaddr_t addr,
|
||||
u16_t datasize,
|
||||
pu8_t data,
|
||||
DRXflags_t flags )
|
||||
{
|
||||
u8_t buf[ DRXDAP_MAX_WCHUNKSIZE ];
|
||||
DRXStatus_t st = DRX_STS_ERROR;
|
||||
DRXStatus_t firstErr = DRX_STS_OK;
|
||||
u16_t overheadSize = 0;
|
||||
u16_t blockSize = 0;
|
||||
|
||||
/* Check parameters ********************************************************/
|
||||
if ( devAddr == NULL )
|
||||
{
|
||||
return DRX_STS_INVALID_ARG;
|
||||
}
|
||||
|
||||
overheadSize = (IS_I2C_10BIT (devAddr->i2cAddr) ? 2 : 1) +
|
||||
(DRXDAP_FASI_LONG_FORMAT(addr) ? 4 : 2 );
|
||||
|
||||
if ( ( DRXDAP_FASI_OFFSET_TOO_LARGE(addr) ) ||
|
||||
( ( !(DRXDAPFASI_LONG_ADDR_ALLOWED) ) &&
|
||||
DRXDAP_FASI_LONG_FORMAT( addr ) ) ||
|
||||
(overheadSize > (DRXDAP_MAX_WCHUNKSIZE)) ||
|
||||
((datasize!=0) && (data==NULL)) ||
|
||||
((datasize & 1)==1 ) )
|
||||
{
|
||||
return DRX_STS_INVALID_ARG;
|
||||
}
|
||||
|
||||
flags &= DRXDAP_FASI_FLAGS;
|
||||
flags &= ~DRXDAP_FASI_MODEFLAGS;
|
||||
#if DRXDAP_SINGLE_MASTER
|
||||
flags |= DRXDAP_FASI_SINGLE_MASTER;
|
||||
#endif
|
||||
|
||||
/* Write block to I2C ******************************************************/
|
||||
blockSize = ( (DRXDAP_MAX_WCHUNKSIZE) - overheadSize) & ~1;
|
||||
do
|
||||
{
|
||||
u16_t todo = 0;
|
||||
u16_t bufx = 0;
|
||||
|
||||
/* Buffer device address */
|
||||
addr &= ~DRXDAP_FASI_FLAGS;
|
||||
addr |= flags;
|
||||
#if ( ( (DRXDAPFASI_LONG_ADDR_ALLOWED)==1 ) && \
|
||||
( (DRXDAPFASI_SHORT_ADDR_ALLOWED)==1 ) )
|
||||
/* short format address preferred but long format otherwise */
|
||||
if ( DRXDAP_FASI_LONG_FORMAT(addr) )
|
||||
{
|
||||
#endif
|
||||
#if ( (DRXDAPFASI_LONG_ADDR_ALLOWED)==1 )
|
||||
buf[bufx++] = (u8_t) (((addr << 1) & 0xFF)|0x01);
|
||||
buf[bufx++] = (u8_t) ((addr >> 16) & 0xFF);
|
||||
buf[bufx++] = (u8_t) ((addr >> 24) & 0xFF);
|
||||
buf[bufx++] = (u8_t) ((addr >> 7) & 0xFF);
|
||||
#endif
|
||||
#if ( ( (DRXDAPFASI_LONG_ADDR_ALLOWED)==1 ) && \
|
||||
( (DRXDAPFASI_SHORT_ADDR_ALLOWED)==1 ) )
|
||||
} else {
|
||||
#endif
|
||||
#if ( (DRXDAPFASI_SHORT_ADDR_ALLOWED)==1 )
|
||||
buf[bufx++] = (u8_t) ((addr << 1) & 0xFF);
|
||||
buf[bufx++] = (u8_t) ( ((addr >> 16) & 0x0F) | ((addr >> 18) & 0xF0) );
|
||||
#endif
|
||||
#if ( ( (DRXDAPFASI_LONG_ADDR_ALLOWED)==1 ) && \
|
||||
( (DRXDAPFASI_SHORT_ADDR_ALLOWED)==1 ) )
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
In single master mode blockSize can be 0. In such a case this I2C
|
||||
sequense will be visible: (1) write address {i2c addr,
|
||||
4 bytes chip address} (2) write data {i2c addr, 4 bytes data }
|
||||
(3) write address (4) write data etc...
|
||||
Addres must be rewriten because HI is reset after data transport and
|
||||
expects an address.
|
||||
*/
|
||||
todo = (blockSize < datasize ? blockSize : datasize);
|
||||
if (todo==0)
|
||||
{
|
||||
u16_t overheadSizeI2cAddr = 0;
|
||||
u16_t dataBlockSize = 0;
|
||||
|
||||
overheadSizeI2cAddr = (IS_I2C_10BIT (devAddr->i2cAddr) ? 2 : 1);
|
||||
dataBlockSize = ( DRXDAP_MAX_WCHUNKSIZE - overheadSizeI2cAddr) & ~1;
|
||||
|
||||
/* write device address */
|
||||
st = DRXBSP_I2C_WriteRead( devAddr,
|
||||
(u16_t) (bufx),
|
||||
buf,
|
||||
(pI2CDeviceAddr_t)(NULL),
|
||||
0,
|
||||
(pu8_t)(NULL) );
|
||||
|
||||
if ( ( st != DRX_STS_OK ) && ( firstErr == DRX_STS_OK ) )
|
||||
{
|
||||
/* at the end, return the first error encountered */
|
||||
firstErr = st;
|
||||
}
|
||||
bufx = 0;
|
||||
todo = (dataBlockSize < datasize ? dataBlockSize : datasize);
|
||||
}
|
||||
DRXBSP_HST_Memcpy (&buf[bufx], data, todo);
|
||||
/* write (address if can do and) data */
|
||||
st = DRXBSP_I2C_WriteRead( devAddr,
|
||||
(u16_t)(bufx + todo),
|
||||
buf,
|
||||
(pI2CDeviceAddr_t)(NULL),
|
||||
0,
|
||||
(pu8_t)(NULL) );
|
||||
|
||||
if ( ( st != DRX_STS_OK ) && ( firstErr == DRX_STS_OK ) )
|
||||
{
|
||||
/* at the end, return the first error encountered */
|
||||
firstErr = st;
|
||||
}
|
||||
datasize -= todo;
|
||||
data += todo;
|
||||
addr += (todo >> 1);
|
||||
} while (datasize);
|
||||
|
||||
return firstErr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/******************************
|
||||
*
|
||||
* DRXStatus_t DRXDAP_FASI_WriteReg16 (
|
||||
* pI2CDeviceAddr_t devAddr, -- address of I2C device
|
||||
* DRXaddr_t addr, -- address of chip register/memory
|
||||
* u16_t data, -- data to send
|
||||
* DRXflags_t flags) -- special device flags
|
||||
*
|
||||
* Write one 16-bit register or memory location. The data being written is
|
||||
* converted from the target platform's endianness to little endian.
|
||||
*
|
||||
* Output:
|
||||
* - DRX_STS_OK if writing was successful
|
||||
* - DRX_STS_ERROR if anything went wrong
|
||||
*
|
||||
******************************/
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_WriteReg16 ( pI2CDeviceAddr_t devAddr,
|
||||
DRXaddr_t addr,
|
||||
u16_t data,
|
||||
DRXflags_t flags )
|
||||
{
|
||||
u8_t buf[sizeof (data)];
|
||||
|
||||
buf[0] = (u8_t) ( (data >> 0 ) & 0xFF );
|
||||
buf[1] = (u8_t) ( (data >> 8 ) & 0xFF );
|
||||
|
||||
return DRXDAP_FASI_WriteBlock (devAddr, addr, sizeof (data), buf, flags);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/******************************
|
||||
*
|
||||
* DRXStatus_t DRXDAP_FASI_WriteReg32 (
|
||||
* pI2CDeviceAddr_t devAddr, -- address of I2C device
|
||||
* DRXaddr_t addr, -- address of chip register/memory
|
||||
* u32_t data, -- data to send
|
||||
* DRXflags_t flags) -- special device flags
|
||||
*
|
||||
* Write one 32-bit register or memory location. The data being written is
|
||||
* converted from the target platform's endianness to little endian.
|
||||
*
|
||||
* Output:
|
||||
* - DRX_STS_OK if writing was successful
|
||||
* - DRX_STS_ERROR if anything went wrong
|
||||
*
|
||||
******************************/
|
||||
|
||||
static DRXStatus_t DRXDAP_FASI_WriteReg32 ( pI2CDeviceAddr_t devAddr,
|
||||
DRXaddr_t addr,
|
||||
u32_t data,
|
||||
DRXflags_t flags )
|
||||
{
|
||||
u8_t buf[sizeof (data)];
|
||||
|
||||
buf[0] = (u8_t) ( (data >> 0 ) & 0xFF );
|
||||
buf[1] = (u8_t) ( (data >> 8 ) & 0xFF );
|
||||
buf[2] = (u8_t) ( (data >> 16) & 0xFF );
|
||||
buf[3] = (u8_t) ( (data >> 24) & 0xFF );
|
||||
|
||||
return DRXDAP_FASI_WriteBlock (devAddr, addr, sizeof (data), buf, flags);
|
||||
}
|
267
drivers/media/dvb-frontends/drx39xyj/drx_dap_fasi.h
Normal file
267
drivers/media/dvb-frontends/drx39xyj/drx_dap_fasi.h
Normal file
|
@ -0,0 +1,267 @@
|
|||
/*******************************************************************************
|
||||
* FILENAME: $Id: drx_dap_fasi.h,v 1.5 2009/07/07 14:21:40 justin Exp $
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Part of DRX driver.
|
||||
* Data access protocol: Fast Access Sequential Interface (fasi)
|
||||
* Fast access, because of short addressing format (16 instead of 32 bits addr)
|
||||
* Sequential, because of I2C.
|
||||
*
|
||||
* USAGE:
|
||||
* Include.
|
||||
*
|
||||
* NOTES:
|
||||
* $(c) 2008-2009 Trident Microsystems, Inc. - All rights reserved.
|
||||
*
|
||||
* This software and related documentation (the 'Software') are intellectual
|
||||
* property owned by Trident and are copyright of Trident, unless specifically
|
||||
* noted otherwise.
|
||||
*
|
||||
* Any use of the Software is permitted only pursuant to the terms of the
|
||||
* license agreement, if any, which accompanies, is included with or applicable
|
||||
* to the Software ('License Agreement') or upon express written consent of
|
||||
* Trident. Any copying, reproduction or redistribution of the Software in
|
||||
* whole or in part by any means not in accordance with the License Agreement
|
||||
* or as agreed in writing by Trident is expressly prohibited.
|
||||
*
|
||||
* THE SOFTWARE IS WARRANTED, IF AT ALL, ONLY ACCORDING TO THE TERMS OF THE
|
||||
* LICENSE AGREEMENT. EXCEPT AS WARRANTED IN THE LICENSE AGREEMENT THE SOFTWARE
|
||||
* IS DELIVERED 'AS IS' AND TRIDENT HEREBY DISCLAIMS ALL WARRANTIES AND
|
||||
* CONDITIONS WITH REGARD TO THE SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
* AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIT
|
||||
* ENJOYMENT, TITLE AND NON-INFRINGEMENT OF ANY THIRD PARTY INTELLECTUAL
|
||||
* PROPERTY OR OTHER RIGHTS WHICH MAY RESULT FROM THE USE OR THE INABILITY
|
||||
* TO USE THE SOFTWARE.
|
||||
*
|
||||
* IN NO EVENT SHALL TRIDENT BE LIABLE FOR INDIRECT, INCIDENTAL, CONSEQUENTIAL,
|
||||
* PUNITIVE, SPECIAL OR OTHER DAMAGES WHATSOEVER INCLUDING WITHOUT LIMITATION,
|
||||
* DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
|
||||
* INFORMATION, AND THE LIKE, ARISING OUT OF OR RELATING TO THE USE OF OR THE
|
||||
* INABILITY TO USE THE SOFTWARE, EVEN IF TRIDENT HAS BEEN ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGES, EXCEPT PERSONAL INJURY OR DEATH RESULTING FROM
|
||||
* TRIDENT'S NEGLIGENCE. $
|
||||
*
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/*-------- compilation control switches --------------------------------------*/
|
||||
|
||||
#ifndef __DRX_DAP_FASI_H__
|
||||
#define __DRX_DAP_FASI_H__
|
||||
|
||||
/*-------- Required includes -------------------------------------------------*/
|
||||
|
||||
#include "drx_driver.h"
|
||||
|
||||
/*-------- Defines, configuring the API --------------------------------------*/
|
||||
|
||||
/********************************************
|
||||
* Allowed address formats
|
||||
********************************************/
|
||||
|
||||
/*
|
||||
* Comments about short/long addressing format:
|
||||
*
|
||||
* The DAP FASI offers long address format (4 bytes) and short address format
|
||||
* (2 bytes). The DAP can operate in 3 modes:
|
||||
* (1) only short
|
||||
* (2) only long
|
||||
* (3) both long and short but short preferred and long only when necesarry
|
||||
*
|
||||
* These modes must be selected compile time via compile switches.
|
||||
* Compile switch settings for the diffrent modes:
|
||||
* (1) DRXDAPFASI_LONG_ADDR_ALLOWED=0, DRXDAPFASI_SHORT_ADDR_ALLOWED=1
|
||||
* (2) DRXDAPFASI_LONG_ADDR_ALLOWED=1, DRXDAPFASI_SHORT_ADDR_ALLOWED=0
|
||||
* (3) DRXDAPFASI_LONG_ADDR_ALLOWED=1, DRXDAPFASI_SHORT_ADDR_ALLOWED=1
|
||||
*
|
||||
* The default setting will be (3) both long and short.
|
||||
* The default setting will need no compile switches.
|
||||
* The default setting must be overridden if compile switches are already
|
||||
* defined.
|
||||
*
|
||||
*/
|
||||
|
||||
/* set default */
|
||||
#if !defined( DRXDAPFASI_LONG_ADDR_ALLOWED )
|
||||
#define DRXDAPFASI_LONG_ADDR_ALLOWED 1
|
||||
#endif
|
||||
|
||||
/* set default */
|
||||
#if !defined( DRXDAPFASI_SHORT_ADDR_ALLOWED )
|
||||
#define DRXDAPFASI_SHORT_ADDR_ALLOWED 1
|
||||
#endif
|
||||
|
||||
/* check */
|
||||
#if ( ( DRXDAPFASI_LONG_ADDR_ALLOWED==0 ) && \
|
||||
( DRXDAPFASI_SHORT_ADDR_ALLOWED==0 ) )
|
||||
#error At least one of short- or long-addressing format must be allowed.
|
||||
*; /* illegal statement to force compiler error */
|
||||
#endif
|
||||
|
||||
|
||||
/********************************************
|
||||
* Single/master multi master setting
|
||||
********************************************/
|
||||
/*
|
||||
* Comments about SINGLE MASTER/MULTI MASTER modes:
|
||||
*
|
||||
* Consider the two sides:1) the master and 2)the slave.
|
||||
*
|
||||
* Master:
|
||||
* Single/multimaster operation set via DRXDAP_SINGLE_MASTER compile switch
|
||||
* + single master mode means no use of repeated starts
|
||||
* + multi master mode means use of repeated starts
|
||||
* Default is single master.
|
||||
* Default can be overriden by setting the compile switch DRXDAP_SINGLE_MASTER.
|
||||
*
|
||||
* Slave:
|
||||
* Single/multi master selected via the flags in the FASI protocol.
|
||||
* + single master means remember memory address between i2c packets
|
||||
* + multimaster means flush memory address between i2c packets
|
||||
* Default is single master, DAP FASI changes multi-master setting silently
|
||||
* into single master setting. This cannot be overrriden.
|
||||
*
|
||||
*/
|
||||
/* set default */
|
||||
#ifndef DRXDAP_SINGLE_MASTER
|
||||
#define DRXDAP_SINGLE_MASTER 0
|
||||
#endif
|
||||
|
||||
/********************************************
|
||||
* Chunk/mode checking
|
||||
********************************************/
|
||||
/*
|
||||
* Comments about DRXDAP_MAX_WCHUNKSIZE in single or multi master mode and
|
||||
* in combination with short and long addressing format. All text below
|
||||
* assumes long addressing format. The table also includes information
|
||||
* for short ADDRessing format.
|
||||
*
|
||||
* In single master mode, data can be written by sending the register address
|
||||
* first, then two or four bytes of data in the next packet.
|
||||
* Because the device address plus a register address equals five bytes,
|
||||
* the mimimum chunk size must be five.
|
||||
* If ten-bit I2C device addresses are used, the minimum chunk size must be six,
|
||||
* because the I2C device address will then occupy two bytes when writing.
|
||||
*
|
||||
* Data in single master mode is transferred as follows:
|
||||
* <S> <devW> a0 a1 a2 a3 <P>
|
||||
* <S> <devW> d0 d1 [d2 d3] <P>
|
||||
* ..
|
||||
* or
|
||||
* ..
|
||||
* <S> <devW> a0 a1 a2 a3 <P>
|
||||
* <S> <devR> --- <P>
|
||||
*
|
||||
* In multi-master mode, the data must immediately follow the address (an I2C
|
||||
* stop resets the internal address), and hence the minimum chunk size is
|
||||
* 1 <I2C address> + 4 (register address) + 2 (data to send) = 7 bytes (8 if
|
||||
* 10-bit I2C device addresses are used).
|
||||
*
|
||||
* The 7-bit or 10-bit i2c address parameters is a runtime parameter.
|
||||
* The other parameters can be limited via compile time switches.
|
||||
*
|
||||
*-------------------------------------------------------------------------------
|
||||
*
|
||||
* Minimum chunk size table (in bytes):
|
||||
*
|
||||
* +----------------+----------------+
|
||||
* | 7b i2c addr | 10b i2c addr |
|
||||
* +----------------+----------------+
|
||||
* | single | multi | single | multi |
|
||||
* ------+--------+-------+--------+-------+
|
||||
* short | 3 | 5 | 4 | 6 |
|
||||
* long | 5 | 7 | 6 | 8 |
|
||||
* ------+--------+-------+--------+-------+
|
||||
*
|
||||
*/
|
||||
|
||||
/* set default */
|
||||
#if !defined( DRXDAP_MAX_WCHUNKSIZE)
|
||||
#define DRXDAP_MAX_WCHUNKSIZE 254
|
||||
#endif
|
||||
|
||||
/* check */
|
||||
#if ( (DRXDAPFASI_LONG_ADDR_ALLOWED==0)&&(DRXDAPFASI_SHORT_ADDR_ALLOWED==1) )
|
||||
#if DRXDAP_SINGLE_MASTER
|
||||
#define DRXDAP_MAX_WCHUNKSIZE_MIN 3
|
||||
#else
|
||||
#define DRXDAP_MAX_WCHUNKSIZE_MIN 5
|
||||
#endif
|
||||
#else
|
||||
#if DRXDAP_SINGLE_MASTER
|
||||
#define DRXDAP_MAX_WCHUNKSIZE_MIN 5
|
||||
#else
|
||||
#define DRXDAP_MAX_WCHUNKSIZE_MIN 7
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if DRXDAP_MAX_WCHUNKSIZE < DRXDAP_MAX_WCHUNKSIZE_MIN
|
||||
#if ( (DRXDAPFASI_LONG_ADDR_ALLOWED==0)&&(DRXDAPFASI_SHORT_ADDR_ALLOWED==1) )
|
||||
#if DRXDAP_SINGLE_MASTER
|
||||
#error DRXDAP_MAX_WCHUNKSIZE must be at least 3 in single master mode
|
||||
*; /* illegal statement to force compiler error */
|
||||
#else
|
||||
#error DRXDAP_MAX_WCHUNKSIZE must be at least 5 in multi master mode
|
||||
*; /* illegal statement to force compiler error */
|
||||
#endif
|
||||
#else
|
||||
#if DRXDAP_SINGLE_MASTER
|
||||
#error DRXDAP_MAX_WCHUNKSIZE must be at least 5 in single master mode
|
||||
*; /* illegal statement to force compiler error */
|
||||
#else
|
||||
#error DRXDAP_MAX_WCHUNKSIZE must be at least 7 in multi master mode
|
||||
*; /* illegal statement to force compiler error */
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* set default */
|
||||
#if !defined( DRXDAP_MAX_RCHUNKSIZE)
|
||||
#define DRXDAP_MAX_RCHUNKSIZE 254
|
||||
#endif
|
||||
|
||||
/* check */
|
||||
#if DRXDAP_MAX_RCHUNKSIZE < 2
|
||||
#error DRXDAP_MAX_RCHUNKSIZE must be at least 2
|
||||
*; /* illegal statement to force compiler error */
|
||||
#endif
|
||||
|
||||
/* check */
|
||||
#if DRXDAP_MAX_RCHUNKSIZE & 1
|
||||
#error DRXDAP_MAX_RCHUNKSIZE must be even
|
||||
*; /* illegal statement to force compiler error */
|
||||
#endif
|
||||
|
||||
/*-------- Public API functions ----------------------------------------------*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
extern DRXAccessFunc_t drxDapFASIFunct_g;
|
||||
|
||||
#define DRXDAP_FASI_RMW 0x10000000
|
||||
#define DRXDAP_FASI_BROADCAST 0x20000000
|
||||
#define DRXDAP_FASI_CLEARCRC 0x80000000
|
||||
#define DRXDAP_FASI_SINGLE_MASTER 0xC0000000
|
||||
#define DRXDAP_FASI_MULTI_MASTER 0x40000000
|
||||
#define DRXDAP_FASI_SMM_SWITCH 0x40000000 /* single/multi master switch */
|
||||
#define DRXDAP_FASI_MODEFLAGS 0xC0000000
|
||||
#define DRXDAP_FASI_FLAGS 0xF0000000
|
||||
|
||||
#define DRXDAP_FASI_ADDR2BLOCK( addr ) (((addr)>>22)&0x3F)
|
||||
#define DRXDAP_FASI_ADDR2BANK( addr ) (((addr)>>16)&0x3F)
|
||||
#define DRXDAP_FASI_ADDR2OFFSET( addr ) ((addr)&0x7FFF)
|
||||
|
||||
#define DRXDAP_FASI_SHORT_FORMAT( addr ) (((addr)& 0xFC30FF80)==0)
|
||||
#define DRXDAP_FASI_LONG_FORMAT( addr ) (((addr)& 0xFC30FF80)!=0)
|
||||
#define DRXDAP_FASI_OFFSET_TOO_LARGE( addr ) (((addr)& 0x00008000)!=0)
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* __DRX_DAP_FASI_H__ */
|
1600
drivers/media/dvb-frontends/drx39xyj/drx_driver.c
Normal file
1600
drivers/media/dvb-frontends/drx39xyj/drx_driver.c
Normal file
File diff suppressed because it is too large
Load diff
2588
drivers/media/dvb-frontends/drx39xyj/drx_driver.h
Normal file
2588
drivers/media/dvb-frontends/drx39xyj/drx_driver.h
Normal file
File diff suppressed because it is too large
Load diff
83
drivers/media/dvb-frontends/drx39xyj/drx_driver_version.h
Normal file
83
drivers/media/dvb-frontends/drx39xyj/drx_driver_version.h
Normal file
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
* WARNING - THIS FILE HAS BEEN GENERATED - DO NOT CHANGE
|
||||
*
|
||||
* Filename: drx_driver_version.h
|
||||
* Generated on: Mon Jan 18 12:09:23 2010
|
||||
* Generated by: IDF:x 1.3.0
|
||||
* Generated from: ../../../device/drxj/version
|
||||
* Output start: [entry point]
|
||||
*
|
||||
* filename last modified re-use
|
||||
* -----------------------------------------------------
|
||||
* version.idf Mon Jan 18 11:56:10 2010 -
|
||||
*
|
||||
* $(c) 2010 Trident Microsystems, Inc. - All rights reserved.
|
||||
*
|
||||
* This software and related documentation (the 'Software') are intellectual
|
||||
* property owned by Trident and are copyright of Trident, unless specifically
|
||||
* noted otherwise.
|
||||
*
|
||||
* Any use of the Software is permitted only pursuant to the terms of the
|
||||
* license agreement, if any, which accompanies, is included with or applicable
|
||||
* to the Software ('License Agreement') or upon express written consent of
|
||||
* Trident. Any copying, reproduction or redistribution of the Software in
|
||||
* whole or in part by any means not in accordance with the License Agreement
|
||||
* or as agreed in writing by Trident is expressly prohibited.
|
||||
*
|
||||
* THE SOFTWARE IS WARRANTED, IF AT ALL, ONLY ACCORDING TO THE TERMS OF THE
|
||||
* LICENSE AGREEMENT. EXCEPT AS WARRANTED IN THE LICENSE AGREEMENT THE SOFTWARE
|
||||
* IS DELIVERED 'AS IS' AND TRIDENT HEREBY DISCLAIMS ALL WARRANTIES AND
|
||||
* CONDITIONS WITH REGARD TO THE SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES AND
|
||||
* CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIT
|
||||
* ENJOYMENT, TITLE AND NON-INFRINGEMENT OF ANY THIRD PARTY INTELLECTUAL
|
||||
* PROPERTY OR OTHER RIGHTS WHICH MAY RESULT FROM THE USE OR THE INABILITY TO
|
||||
* USE THE SOFTWARE.
|
||||
*
|
||||
* IN NO EVENT SHALL TRIDENT BE LIABLE FOR INDIRECT, INCIDENTAL, CONSEQUENTIAL,
|
||||
* PUNITIVE, SPECIAL OR OTHER DAMAGES WHATSOEVER INCLUDING WITHOUT LIMITATION,
|
||||
* DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF
|
||||
* BUSINESS INFORMATION, AND THE LIKE, ARISING OUT OF OR RELATING TO THE USE OF
|
||||
* OR THE INABILITY TO USE THE SOFTWARE, EVEN IF TRIDENT HAS BEEN ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGES, EXCEPT PERSONAL INJURY OR DEATH RESULTING
|
||||
* FROM TRIDENT'S NEGLIGENCE. $
|
||||
*
|
||||
*******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef __DRX_DRIVER_VERSION__H__
|
||||
#define __DRX_DRIVER_VERSION__H__ INCLUDED
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef _REGISTERTABLE_
|
||||
#include <registertable.h>
|
||||
extern RegisterTable_t drx_driver_version[];
|
||||
extern RegisterTableInfo_t drx_driver_version_info[];
|
||||
#endif /* _REGISTERTABLE_ */
|
||||
|
||||
|
||||
/*
|
||||
*==============================================================================
|
||||
* VERSION
|
||||
* version@/var/cvs/projects/drxj.cvsroot/hostcode/drxdriver/device/drxj
|
||||
*==============================================================================
|
||||
*/
|
||||
|
||||
#define VERSION__A 0x0
|
||||
#define VERSION_MAJOR 1
|
||||
#define VERSION_MINOR 0
|
||||
#define VERSION_PATCH 56
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __DRX_DRIVER_VERSION__H__ */
|
||||
|
||||
/*
|
||||
* End of file (drx_driver_version.h)
|
||||
*******************************************************************************
|
||||
*/
|
16680
drivers/media/dvb-frontends/drx39xyj/drxj.c
Normal file
16680
drivers/media/dvb-frontends/drx39xyj/drxj.c
Normal file
File diff suppressed because it is too large
Load diff
732
drivers/media/dvb-frontends/drx39xyj/drxj.h
Normal file
732
drivers/media/dvb-frontends/drx39xyj/drxj.h
Normal file
|
@ -0,0 +1,732 @@
|
|||
/**
|
||||
* \file $Id: drxj.h,v 1.132 2009/12/22 12:13:48 danielg Exp $
|
||||
*
|
||||
* \brief DRXJ specific header file
|
||||
*
|
||||
* \author Dragan Savic, Milos Nikolic, Mihajlo Katona, Tao Ding, Paul Janssen
|
||||
*/
|
||||
|
||||
/*
|
||||
* $(c) 2006-2009 Trident Microsystems, Inc. - All rights reserved.
|
||||
*
|
||||
* This software and related documentation (the 'Software') are intellectual
|
||||
* property owned by Trident and are copyright of Trident, unless specifically
|
||||
* noted otherwise.
|
||||
*
|
||||
* Any use of the Software is permitted only pursuant to the terms of the
|
||||
* license agreement, if any, which accompanies, is included with or applicable
|
||||
* to the Software ('License Agreement') or upon express written consent of
|
||||
* Trident. Any copying, reproduction or redistribution of the Software in
|
||||
* whole or in part by any means not in accordance with the License Agreement
|
||||
* or as agreed in writing by Trident is expressly prohibited.
|
||||
*
|
||||
* THE SOFTWARE IS WARRANTED, IF AT ALL, ONLY ACCORDING TO THE TERMS OF THE
|
||||
* LICENSE AGREEMENT. EXCEPT AS WARRANTED IN THE LICENSE AGREEMENT THE SOFTWARE
|
||||
* IS DELIVERED 'AS IS' AND TRIDENT HEREBY DISCLAIMS ALL WARRANTIES AND
|
||||
* CONDITIONS WITH REGARD TO THE SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
* AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIT
|
||||
* ENJOYMENT, TITLE AND NON-INFRINGEMENT OF ANY THIRD PARTY INTELLECTUAL
|
||||
* PROPERTY OR OTHER RIGHTS WHICH MAY RESULT FROM THE USE OR THE INABILITY
|
||||
* TO USE THE SOFTWARE.
|
||||
*
|
||||
* IN NO EVENT SHALL TRIDENT BE LIABLE FOR INDIRECT, INCIDENTAL, CONSEQUENTIAL,
|
||||
* PUNITIVE, SPECIAL OR OTHER DAMAGES WHATSOEVER INCLUDING WITHOUT LIMITATION,
|
||||
* DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
|
||||
* INFORMATION, AND THE LIKE, ARISING OUT OF OR RELATING TO THE USE OF OR THE
|
||||
* INABILITY TO USE THE SOFTWARE, EVEN IF TRIDENT HAS BEEN ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGES, EXCEPT PERSONAL INJURY OR DEATH RESULTING FROM
|
||||
* TRIDENT'S NEGLIGENCE. $
|
||||
*
|
||||
*/
|
||||
#ifndef __DRXJ_H__
|
||||
#define __DRXJ_H__
|
||||
/*-------------------------------------------------------------------------
|
||||
INCLUDES
|
||||
-------------------------------------------------------------------------*/
|
||||
|
||||
#include "drx_driver.h"
|
||||
#include "drx_dap_fasi.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Check DRX-J specific dap condition */
|
||||
/* Multi master mode and short addr format only will not work.
|
||||
RMW, CRC reset, broadcast and switching back to single master mode
|
||||
cannot be done with short addr only in multi master mode. */
|
||||
#if ((DRXDAP_SINGLE_MASTER==0)&&(DRXDAPFASI_LONG_ADDR_ALLOWED==0))
|
||||
#error "Multi master mode and short addressing only is an illegal combination"
|
||||
*; /* Generate a fatal compiler error to make sure it stops here,
|
||||
this is necesarry because not all compilers stop after a #error. */
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
TYPEDEFS
|
||||
-------------------------------------------------------------------------*/
|
||||
/*============================================================================*/
|
||||
/*============================================================================*/
|
||||
/*== code support ============================================================*/
|
||||
/*============================================================================*/
|
||||
/*============================================================================*/
|
||||
|
||||
/*============================================================================*/
|
||||
/*============================================================================*/
|
||||
/*== SCU cmd if =============================================================*/
|
||||
/*============================================================================*/
|
||||
/*============================================================================*/
|
||||
|
||||
typedef struct {
|
||||
u16_t command; /**< Command number */
|
||||
u16_t parameterLen; /**< Data length in byte */
|
||||
u16_t resultLen; /**< result length in byte */
|
||||
u16_t *parameter; /**< General purpous param */
|
||||
u16_t *result; /**< General purpous param */
|
||||
} DRXJSCUCmd_t, *pDRXJSCUCmd_t;
|
||||
|
||||
|
||||
/*============================================================================*/
|
||||
/*============================================================================*/
|
||||
/*== CTRL CFG related data structures ========================================*/
|
||||
/*============================================================================*/
|
||||
/*============================================================================*/
|
||||
|
||||
/* extra intermediate lock state for VSB,QAM,NTSC */
|
||||
#define DRXJ_DEMOD_LOCK (DRX_LOCK_STATE_1)
|
||||
|
||||
/* OOB lock states */
|
||||
#define DRXJ_OOB_AGC_LOCK (DRX_LOCK_STATE_1) /* analog gain control lock */
|
||||
#define DRXJ_OOB_SYNC_LOCK (DRX_LOCK_STATE_2) /* digital gain control lock */
|
||||
|
||||
/* Intermediate powermodes for DRXJ */
|
||||
#define DRXJ_POWER_DOWN_MAIN_PATH DRX_POWER_MODE_8
|
||||
#define DRXJ_POWER_DOWN_CORE DRX_POWER_MODE_9
|
||||
#define DRXJ_POWER_DOWN_PLL DRX_POWER_MODE_10
|
||||
|
||||
/* supstition for GPIO FNC mux */
|
||||
#define APP_O (0x0000)
|
||||
|
||||
/*#define DRX_CTRL_BASE (0x0000)*/
|
||||
|
||||
#define DRXJ_CTRL_CFG_BASE (0x1000)
|
||||
typedef enum {
|
||||
DRXJ_CFG_AGC_RF = DRXJ_CTRL_CFG_BASE,
|
||||
DRXJ_CFG_AGC_IF,
|
||||
DRXJ_CFG_AGC_INTERNAL,
|
||||
DRXJ_CFG_PRE_SAW,
|
||||
DRXJ_CFG_AFE_GAIN,
|
||||
DRXJ_CFG_SYMBOL_CLK_OFFSET,
|
||||
DRXJ_CFG_ACCUM_CR_RS_CW_ERR,
|
||||
DRXJ_CFG_FEC_MERS_SEQ_COUNT,
|
||||
DRXJ_CFG_OOB_MISC,
|
||||
DRXJ_CFG_SMART_ANT,
|
||||
DRXJ_CFG_OOB_PRE_SAW,
|
||||
DRXJ_CFG_VSB_MISC,
|
||||
DRXJ_CFG_RESET_PACKET_ERR,
|
||||
|
||||
/* ATV (FM) */
|
||||
DRXJ_CFG_ATV_OUTPUT, /* also for FM (SIF control) but not likely */
|
||||
DRXJ_CFG_ATV_MISC,
|
||||
DRXJ_CFG_ATV_EQU_COEF,
|
||||
DRXJ_CFG_ATV_AGC_STATUS, /* also for FM ( IF,RF, audioAGC ) */
|
||||
|
||||
DRXJ_CFG_MPEG_OUTPUT_MISC,
|
||||
DRXJ_CFG_HW_CFG,
|
||||
DRXJ_CFG_OOB_LO_POW,
|
||||
|
||||
DRXJ_CFG_MAX /* dummy, never to be used */
|
||||
|
||||
} DRXJCfgType_t, *pDRXJCfgType_t;
|
||||
|
||||
/**
|
||||
* /struct DRXJCfgSmartAntIO_t
|
||||
* smart antenna i/o.
|
||||
*/
|
||||
typedef enum DRXJCfgSmartAntIO_t {
|
||||
DRXJ_SMT_ANT_OUTPUT = 0,
|
||||
DRXJ_SMT_ANT_INPUT
|
||||
} DRXJCfgSmartAntIO_t, *pDRXJCfgSmartAntIO_t;
|
||||
|
||||
/**
|
||||
* /struct DRXJCfgSmartAnt_t
|
||||
* Set smart antenna.
|
||||
*/
|
||||
typedef struct {
|
||||
DRXJCfgSmartAntIO_t io;
|
||||
u16_t ctrlData;
|
||||
} DRXJCfgSmartAnt_t, *pDRXJCfgSmartAnt_t;
|
||||
|
||||
/**
|
||||
* /struct DRXJAGCSTATUS_t
|
||||
* AGC status information from the DRXJ-IQM-AF.
|
||||
*/
|
||||
typedef struct {
|
||||
u16_t IFAGC;
|
||||
u16_t RFAGC;
|
||||
u16_t DigitalAGC;
|
||||
}DRXJAgcStatus_t, *pDRXJAgcStatus_t;
|
||||
|
||||
/* DRXJ_CFG_AGC_RF, DRXJ_CFG_AGC_IF */
|
||||
|
||||
/**
|
||||
* /struct DRXJAgcCtrlMode_t
|
||||
* Available AGCs modes in the DRXJ.
|
||||
*/
|
||||
typedef enum {
|
||||
DRX_AGC_CTRL_AUTO = 0,
|
||||
DRX_AGC_CTRL_USER,
|
||||
DRX_AGC_CTRL_OFF
|
||||
} DRXJAgcCtrlMode_t, *pDRXJAgcCtrlMode_t;
|
||||
|
||||
/**
|
||||
* /struct DRXJCfgAgc_t
|
||||
* Generic interface for all AGCs present on the DRXJ.
|
||||
*/
|
||||
typedef struct {
|
||||
DRXStandard_t standard; /* standard for which these settings apply */
|
||||
DRXJAgcCtrlMode_t ctrlMode; /* off, user, auto */
|
||||
u16_t outputLevel; /* range dependent on AGC */
|
||||
u16_t minOutputLevel; /* range dependent on AGC */
|
||||
u16_t maxOutputLevel; /* range dependent on AGC */
|
||||
u16_t speed; /* range dependent on AGC */
|
||||
u16_t top; /* rf-agc take over point */
|
||||
u16_t cutOffCurrent; /* rf-agc is accelerated if output current
|
||||
is below cut-off current */
|
||||
}DRXJCfgAgc_t, *pDRXJCfgAgc_t;
|
||||
|
||||
/* DRXJ_CFG_PRE_SAW */
|
||||
|
||||
/**
|
||||
* /struct DRXJCfgPreSaw_t
|
||||
* Interface to configure pre SAW sense.
|
||||
*/
|
||||
typedef struct {
|
||||
DRXStandard_t standard; /* standard to which these settings apply */
|
||||
u16_t reference; /* pre SAW reference value, range 0 .. 31 */
|
||||
Bool_t usePreSaw; /* TRUE algorithms must use pre SAW sense */
|
||||
} DRXJCfgPreSaw_t, *pDRXJCfgPreSaw_t;
|
||||
|
||||
/* DRXJ_CFG_AFE_GAIN */
|
||||
|
||||
/**
|
||||
* /struct DRXJCfgAfeGain_t
|
||||
* Interface to configure gain of AFE (LNA + PGA).
|
||||
*/
|
||||
typedef struct {
|
||||
DRXStandard_t standard; /* standard to which these settings apply */
|
||||
u16_t gain; /* gain in 0.1 dB steps, DRXJ range 140 .. 335 */
|
||||
} DRXJCfgAfeGain_t, *pDRXJCfgAfeGain_t;
|
||||
|
||||
/**
|
||||
* /struct DRXJRSErrors_t
|
||||
* Available failure information in DRXJ_FEC_RS.
|
||||
*
|
||||
* Container for errors that are received in the most recently finished measurment period
|
||||
*
|
||||
*/
|
||||
typedef struct {
|
||||
u16_t nrBitErrors; /**< no of pre RS bit errors */
|
||||
u16_t nrSymbolErrors; /**< no of pre RS symbol errors */
|
||||
u16_t nrPacketErrors; /**< no of pre RS packet errors */
|
||||
u16_t nrFailures; /**< no of post RS failures to decode */
|
||||
u16_t nrSncParFailCount; /**< no of post RS bit erros */
|
||||
} DRXJRSErrors_t, *pDRXJRSErrors_t;
|
||||
|
||||
/**
|
||||
* /struct DRXJCfgVSBMisc_t
|
||||
* symbol error rate
|
||||
*/
|
||||
typedef struct{
|
||||
u32_t symbError; /**< symbol error rate sps */
|
||||
}DRXJCfgVSBMisc_t, *pDRXJCfgVSBMisc_t;
|
||||
|
||||
/**
|
||||
* /enum DRXJMpegOutputClockRate_t
|
||||
* Mpeg output clock rate.
|
||||
*
|
||||
*/
|
||||
typedef enum {
|
||||
DRXJ_MPEG_START_WIDTH_1CLKCYC,
|
||||
DRXJ_MPEG_START_WIDTH_8CLKCYC
|
||||
} DRXJMpegStartWidth_t, *pDRXJMpegStartWidth_t;
|
||||
|
||||
/**
|
||||
* /enum DRXJMpegOutputClockRate_t
|
||||
* Mpeg output clock rate.
|
||||
*
|
||||
*/
|
||||
typedef enum {
|
||||
DRXJ_MPEGOUTPUT_CLOCK_RATE_AUTO,
|
||||
DRXJ_MPEGOUTPUT_CLOCK_RATE_75973K,
|
||||
DRXJ_MPEGOUTPUT_CLOCK_RATE_50625K,
|
||||
DRXJ_MPEGOUTPUT_CLOCK_RATE_37968K,
|
||||
DRXJ_MPEGOUTPUT_CLOCK_RATE_30375K,
|
||||
DRXJ_MPEGOUTPUT_CLOCK_RATE_25313K,
|
||||
DRXJ_MPEGOUTPUT_CLOCK_RATE_21696K
|
||||
} DRXJMpegOutputClockRate_t, *pDRXJMpegOutputClockRate_t;
|
||||
|
||||
/**
|
||||
* /struct DRXJCfgMisc_t
|
||||
* Change TEI bit of MPEG output
|
||||
* reverse MPEG output bit order
|
||||
* set MPEG output clock rate
|
||||
*/
|
||||
typedef struct{
|
||||
Bool_t disableTEIHandling; /**< if TRUE pass (not change) TEI bit */
|
||||
Bool_t bitReverseMpegOutout; /**< if TRUE, parallel: msb on MD0; serial: lsb out first */
|
||||
DRXJMpegOutputClockRate_t mpegOutputClockRate; /**< set MPEG output clock rate that overwirtes the derived one from symbol rate */
|
||||
DRXJMpegStartWidth_t mpegStartWidth; /**< set MPEG output start width */
|
||||
}DRXJCfgMpegOutputMisc_t, *pDRXJCfgMpegOutputMisc_t;
|
||||
|
||||
/**
|
||||
* /enum DRXJXtalFreq_t
|
||||
* Supported external crystal reference frequency.
|
||||
*/
|
||||
typedef enum{
|
||||
DRXJ_XTAL_FREQ_RSVD,
|
||||
DRXJ_XTAL_FREQ_27MHZ,
|
||||
DRXJ_XTAL_FREQ_20P25MHZ,
|
||||
DRXJ_XTAL_FREQ_4MHZ
|
||||
}DRXJXtalFreq_t, *pDRXJXtalFreq_t;
|
||||
|
||||
/**
|
||||
* /enum DRXJXtalFreq_t
|
||||
* Supported external crystal reference frequency.
|
||||
*/
|
||||
typedef enum{
|
||||
DRXJ_I2C_SPEED_400KBPS,
|
||||
DRXJ_I2C_SPEED_100KBPS
|
||||
}DRXJI2CSpeed_t, *pDRXJI2CSpeed_t;
|
||||
|
||||
/**
|
||||
* /struct DRXJCfgHwCfg_t
|
||||
* Get hw configuration, such as crystal reference frequency, I2C speed, etc...
|
||||
*/
|
||||
typedef struct{
|
||||
DRXJXtalFreq_t xtalFreq; /**< crystal reference frequency */
|
||||
DRXJI2CSpeed_t i2cSpeed; /**< 100 or 400 kbps */
|
||||
}DRXJCfgHwCfg_t, *pDRXJCfgHwCfg_t;
|
||||
|
||||
/*
|
||||
* DRXJ_CFG_ATV_MISC
|
||||
*/
|
||||
typedef struct{
|
||||
s16_t peakFilter; /* -8 .. 15 */
|
||||
u16_t noiseFilter; /* 0 .. 15 */
|
||||
}DRXJCfgAtvMisc_t, *pDRXJCfgAtvMisc_t;
|
||||
|
||||
/*
|
||||
* DRXJCfgOOBMisc_t
|
||||
*/
|
||||
#define DRXJ_OOB_STATE_RESET 0x0
|
||||
#define DRXJ_OOB_STATE_AGN_HUNT 0x1
|
||||
#define DRXJ_OOB_STATE_DGN_HUNT 0x2
|
||||
#define DRXJ_OOB_STATE_AGC_HUNT 0x3
|
||||
#define DRXJ_OOB_STATE_FRQ_HUNT 0x4
|
||||
#define DRXJ_OOB_STATE_PHA_HUNT 0x8
|
||||
#define DRXJ_OOB_STATE_TIM_HUNT 0x10
|
||||
#define DRXJ_OOB_STATE_EQU_HUNT 0x20
|
||||
#define DRXJ_OOB_STATE_EQT_HUNT 0x30
|
||||
#define DRXJ_OOB_STATE_SYNC 0x40
|
||||
|
||||
typedef struct{
|
||||
DRXJAgcStatus_t agc;
|
||||
Bool_t eqLock;
|
||||
Bool_t symTimingLock;
|
||||
Bool_t phaseLock;
|
||||
Bool_t freqLock;
|
||||
Bool_t digGainLock;
|
||||
Bool_t anaGainLock;
|
||||
u8_t state;
|
||||
}DRXJCfgOOBMisc_t, *pDRXJCfgOOBMisc_t;
|
||||
|
||||
/*
|
||||
* Index of in array of coef
|
||||
*/
|
||||
typedef enum {
|
||||
DRXJ_OOB_LO_POW_MINUS0DB = 0,
|
||||
DRXJ_OOB_LO_POW_MINUS5DB,
|
||||
DRXJ_OOB_LO_POW_MINUS10DB,
|
||||
DRXJ_OOB_LO_POW_MINUS15DB,
|
||||
DRXJ_OOB_LO_POW_MAX
|
||||
} DRXJCfgOobLoPower_t, *pDRXJCfgOobLoPower_t;
|
||||
|
||||
/*
|
||||
* DRXJ_CFG_ATV_EQU_COEF
|
||||
*/
|
||||
typedef struct {
|
||||
s16_t coef0; /* -256 .. 255 */
|
||||
s16_t coef1; /* -256 .. 255 */
|
||||
s16_t coef2; /* -256 .. 255 */
|
||||
s16_t coef3; /* -256 .. 255 */
|
||||
} DRXJCfgAtvEquCoef_t, *pDRXJCfgAtvEquCoef_t;
|
||||
|
||||
/*
|
||||
* Index of in array of coef
|
||||
*/
|
||||
typedef enum {
|
||||
DRXJ_COEF_IDX_MN = 0,
|
||||
DRXJ_COEF_IDX_FM ,
|
||||
DRXJ_COEF_IDX_L ,
|
||||
DRXJ_COEF_IDX_LP ,
|
||||
DRXJ_COEF_IDX_BG ,
|
||||
DRXJ_COEF_IDX_DK ,
|
||||
DRXJ_COEF_IDX_I ,
|
||||
DRXJ_COEF_IDX_MAX
|
||||
} DRXJCoefArrayIndex_t, *pDRXJCoefArrayIndex_t;
|
||||
|
||||
/*
|
||||
* DRXJ_CFG_ATV_OUTPUT
|
||||
*/
|
||||
|
||||
/**
|
||||
* /enum DRXJAttenuation_t
|
||||
* Attenuation setting for SIF AGC.
|
||||
*
|
||||
*/
|
||||
typedef enum {
|
||||
DRXJ_SIF_ATTENUATION_0DB,
|
||||
DRXJ_SIF_ATTENUATION_3DB,
|
||||
DRXJ_SIF_ATTENUATION_6DB,
|
||||
DRXJ_SIF_ATTENUATION_9DB
|
||||
} DRXJSIFAttenuation_t, *pDRXJSIFAttenuation_t;
|
||||
|
||||
/**
|
||||
* /struct DRXJCfgAtvOutput_t
|
||||
* SIF attenuation setting.
|
||||
*
|
||||
*/
|
||||
typedef struct {
|
||||
Bool_t enableCVBSOutput; /* TRUE= enabled */
|
||||
Bool_t enableSIFOutput; /* TRUE= enabled */
|
||||
DRXJSIFAttenuation_t sifAttenuation;
|
||||
} DRXJCfgAtvOutput_t, *pDRXJCfgAtvOutput_t;
|
||||
|
||||
/*
|
||||
DRXJ_CFG_ATV_AGC_STATUS (get only)
|
||||
*/
|
||||
/* TODO : AFE interface not yet finished, subject to change */
|
||||
typedef struct {
|
||||
u16_t rfAgcGain ; /* 0 .. 877 uA */
|
||||
u16_t ifAgcGain ; /* 0 .. 877 uA */
|
||||
s16_t videoAgcGain ; /* -75 .. 1972 in 0.1 dB steps */
|
||||
s16_t audioAgcGain ; /* -4 .. 1020 in 0.1 dB steps */
|
||||
u16_t rfAgcLoopGain ; /* 0 .. 7 */
|
||||
u16_t ifAgcLoopGain ; /* 0 .. 7 */
|
||||
u16_t videoAgcLoopGain; /* 0 .. 7 */
|
||||
} DRXJCfgAtvAgcStatus_t, *pDRXJCfgAtvAgcStatus_t;
|
||||
|
||||
/*============================================================================*/
|
||||
/*============================================================================*/
|
||||
/*== CTRL related data structures ============================================*/
|
||||
/*============================================================================*/
|
||||
/*============================================================================*/
|
||||
|
||||
/* NONE */
|
||||
|
||||
/*============================================================================*/
|
||||
/*============================================================================*/
|
||||
|
||||
/*========================================*/
|
||||
/**
|
||||
* /struct DRXJData_t
|
||||
* DRXJ specific attributes.
|
||||
*
|
||||
* Global data container for DRXJ specific data.
|
||||
*
|
||||
*/
|
||||
typedef struct {
|
||||
/* device capabilties (determined during DRX_Open()) */
|
||||
Bool_t hasLNA; /**< TRUE if LNA (aka PGA) present */
|
||||
Bool_t hasOOB; /**< TRUE if OOB supported */
|
||||
Bool_t hasNTSC; /**< TRUE if NTSC supported */
|
||||
Bool_t hasBTSC; /**< TRUE if BTSC supported */
|
||||
Bool_t hasSMATX; /**< TRUE if mat_tx is available */
|
||||
Bool_t hasSMARX; /**< TRUE if mat_rx is available */
|
||||
Bool_t hasGPIO; /**< TRUE if GPIO is available */
|
||||
Bool_t hasIRQN; /**< TRUE if IRQN is available */
|
||||
/* A1/A2/A... */
|
||||
u8_t mfx; /**< metal fix */
|
||||
|
||||
/* tuner settings */
|
||||
Bool_t mirrorFreqSpectOOB; /**< tuner inversion (TRUE = tuner mirrors the signal */
|
||||
|
||||
/* standard/channel settings */
|
||||
DRXStandard_t standard; /**< current standard information */
|
||||
DRXConstellation_t constellation; /**< current constellation */
|
||||
DRXFrequency_t frequency; /**< center signal frequency in KHz */
|
||||
DRXBandwidth_t currBandwidth; /**< current channel bandwidth */
|
||||
DRXMirror_t mirror; /**< current channel mirror */
|
||||
|
||||
/* signal quality information */
|
||||
u32_t fecBitsDesired; /**< BER accounting period */
|
||||
u16_t fecVdPlen; /**< no of trellis symbols: VD SER measurement period */
|
||||
u16_t qamVdPrescale; /**< Viterbi Measurement Prescale */
|
||||
u16_t qamVdPeriod; /**< Viterbi Measurement period */
|
||||
u16_t fecRsPlen; /**< defines RS BER measurement period */
|
||||
u16_t fecRsPrescale; /**< ReedSolomon Measurement Prescale */
|
||||
u16_t fecRsPeriod; /**< ReedSolomon Measurement period */
|
||||
Bool_t resetPktErrAcc; /**< Set a flag to reset accumulated packet error */
|
||||
u16_t pktErrAccStart; /**< Set a flag to reset accumulated packet error */
|
||||
|
||||
/* HI configuration */
|
||||
u16_t HICfgTimingDiv; /**< HI Configure() parameter 2 */
|
||||
u16_t HICfgBridgeDelay; /**< HI Configure() parameter 3 */
|
||||
u16_t HICfgWakeUpKey; /**< HI Configure() parameter 4 */
|
||||
u16_t HICfgCtrl; /**< HI Configure() parameter 5 */
|
||||
u16_t HICfgTransmit; /**< HI Configure() parameter 6 */
|
||||
|
||||
/* UIO configuartion */
|
||||
DRXUIOMode_t uioSmaRxMode; /**< current mode of SmaRx pin */
|
||||
DRXUIOMode_t uioSmaTxMode; /**< current mode of SmaTx pin */
|
||||
DRXUIOMode_t uioGPIOMode; /**< current mode of ASEL pin */
|
||||
DRXUIOMode_t uioIRQNMode; /**< current mode of IRQN pin */
|
||||
|
||||
/* IQM fs frequecy shift and inversion */
|
||||
u32_t iqmFsRateOfs; /**< frequency shifter setting after setchannel */
|
||||
Bool_t posImage; /**< Ture: positive image */
|
||||
/* IQM RC frequecy shift */
|
||||
u32_t iqmRcRateOfs; /**< frequency shifter setting after setchannel */
|
||||
|
||||
/* ATV configuartion */
|
||||
u32_t atvCfgChangedFlags; /**< flag: flags cfg changes */
|
||||
s16_t atvTopEqu0[DRXJ_COEF_IDX_MAX]; /**< shadow of ATV_TOP_EQU0__A */
|
||||
s16_t atvTopEqu1[DRXJ_COEF_IDX_MAX]; /**< shadow of ATV_TOP_EQU1__A */
|
||||
s16_t atvTopEqu2[DRXJ_COEF_IDX_MAX]; /**< shadow of ATV_TOP_EQU2__A */
|
||||
s16_t atvTopEqu3[DRXJ_COEF_IDX_MAX]; /**< shadow of ATV_TOP_EQU3__A */
|
||||
Bool_t phaseCorrectionBypass; /**< flag: TRUE=bypass */
|
||||
s16_t atvTopVidPeak; /**< shadow of ATV_TOP_VID_PEAK__A */
|
||||
u16_t atvTopNoiseTh; /**< shadow of ATV_TOP_NOISE_TH__A */
|
||||
Bool_t enableCVBSOutput; /**< flag CVBS ouput enable */
|
||||
Bool_t enableSIFOutput; /**< flag SIF ouput enable */
|
||||
DRXJSIFAttenuation_t
|
||||
sifAttenuation; /**< current SIF att setting */
|
||||
/* Agc configuration for QAM and VSB */
|
||||
DRXJCfgAgc_t qamRfAgcCfg; /**< qam RF AGC config */
|
||||
DRXJCfgAgc_t qamIfAgcCfg; /**< qam IF AGC config */
|
||||
DRXJCfgAgc_t vsbRfAgcCfg; /**< vsb RF AGC config */
|
||||
DRXJCfgAgc_t vsbIfAgcCfg; /**< vsb IF AGC config */
|
||||
|
||||
/* PGA gain configuration for QAM and VSB */
|
||||
u16_t qamPgaCfg; /**< qam PGA config */
|
||||
u16_t vsbPgaCfg; /**< vsb PGA config */
|
||||
|
||||
/* Pre SAW configuration for QAM and VSB */
|
||||
DRXJCfgPreSaw_t qamPreSawCfg; /**< qam pre SAW config */
|
||||
DRXJCfgPreSaw_t vsbPreSawCfg; /**< qam pre SAW config */
|
||||
|
||||
/* Version information */
|
||||
char vText[2][12]; /**< allocated text versions */
|
||||
DRXVersion_t vVersion[2]; /**< allocated versions structs */
|
||||
DRXVersionList_t vListElements[2]; /**< allocated version list */
|
||||
|
||||
/* smart antenna configuration */
|
||||
Bool_t smartAntInverted;
|
||||
|
||||
/* Tracking filter setting for OOB */
|
||||
u16_t oobTrkFilterCfg[8];
|
||||
Bool_t oobPowerOn;
|
||||
|
||||
/* MPEG static bitrate setting */
|
||||
u32_t mpegTsStaticBitrate; /**< bitrate static MPEG output */
|
||||
Bool_t disableTEIhandling; /**< MPEG TS TEI handling */
|
||||
Bool_t bitReverseMpegOutout; /**< MPEG output bit order */
|
||||
DRXJMpegOutputClockRate_t
|
||||
mpegOutputClockRate; /**< MPEG output clock rate */
|
||||
DRXJMpegStartWidth_t
|
||||
mpegStartWidth; /**< MPEG Start width */
|
||||
|
||||
/* Pre SAW & Agc configuration for ATV */
|
||||
DRXJCfgPreSaw_t atvPreSawCfg; /**< atv pre SAW config */
|
||||
DRXJCfgAgc_t atvRfAgcCfg; /**< atv RF AGC config */
|
||||
DRXJCfgAgc_t atvIfAgcCfg; /**< atv IF AGC config */
|
||||
u16_t atvPgaCfg; /**< atv pga config */
|
||||
|
||||
u32_t currSymbolRate;
|
||||
|
||||
/* pin-safe mode */
|
||||
Bool_t pdrSafeMode; /**< PDR safe mode activated */
|
||||
u16_t pdrSafeRestoreValGpio;
|
||||
u16_t pdrSafeRestoreValVSync;
|
||||
u16_t pdrSafeRestoreValSmaRx;
|
||||
u16_t pdrSafeRestoreValSmaTx;
|
||||
|
||||
/* OOB pre-saw value */
|
||||
u16_t oobPreSaw;
|
||||
DRXJCfgOobLoPower_t oobLoPow;
|
||||
|
||||
DRXAudData_t audData; /**< audio storage */
|
||||
|
||||
} DRXJData_t, *pDRXJData_t;
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
Access MACROS
|
||||
-------------------------------------------------------------------------*/
|
||||
/**
|
||||
* \brief Compilable references to attributes
|
||||
* \param d pointer to demod instance
|
||||
*
|
||||
* Used as main reference to an attribute field.
|
||||
* Can be used by both macro implementation and function implementation.
|
||||
* These macros are defined to avoid duplication of code in macro and function
|
||||
* definitions that handle access of demod common or extended attributes.
|
||||
*
|
||||
*/
|
||||
|
||||
#define DRXJ_ATTR_BTSC_DETECT( d ) \
|
||||
(((pDRXJData_t)(d)->myExtAttr)->audData.btscDetect)
|
||||
|
||||
/**
|
||||
* \brief Actual access macros
|
||||
* \param d pointer to demod instance
|
||||
* \param x value to set or to get
|
||||
*
|
||||
* SET macros must be used to set the value of an attribute.
|
||||
* GET macros must be used to retrieve the value of an attribute.
|
||||
* Depending on the value of DRX_USE_ACCESS_FUNCTIONS the macro's will be
|
||||
* substituted by "direct-access-inline-code" or a function call.
|
||||
*
|
||||
*/
|
||||
#define DRXJ_GET_BTSC_DETECT( d, x ) \
|
||||
do { \
|
||||
(x) = DRXJ_ATTR_BTSC_DETECT(( d ); \
|
||||
} while(0)
|
||||
|
||||
#define DRXJ_SET_BTSC_DETECT( d, x ) \
|
||||
do { \
|
||||
DRXJ_ATTR_BTSC_DETECT( d ) = (x); \
|
||||
} while(0)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
DEFINES
|
||||
-------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* \def DRXJ_NTSC_CARRIER_FREQ_OFFSET
|
||||
* \brief Offset from picture carrier to centre frequency in kHz, in RF domain
|
||||
*
|
||||
* For NTSC standard.
|
||||
* NTSC channels are listed by their picture carrier frequency (Fpc).
|
||||
* The function DRX_CTRL_SET_CHANNEL requires the centre frequency as input.
|
||||
* In case the tuner module is not used the DRX-J requires that the tuner is
|
||||
* tuned to the centre frequency of the channel:
|
||||
*
|
||||
* Fcentre = Fpc + DRXJ_NTSC_CARRIER_FREQ_OFFSET
|
||||
*
|
||||
*/
|
||||
#define DRXJ_NTSC_CARRIER_FREQ_OFFSET ((DRXFrequency_t)(1750))
|
||||
|
||||
/**
|
||||
* \def DRXJ_PAL_SECAM_BG_CARRIER_FREQ_OFFSET
|
||||
* \brief Offset from picture carrier to centre frequency in kHz, in RF domain
|
||||
*
|
||||
* For PAL/SECAM - BG standard. This define is needed in case the tuner module
|
||||
* is NOT used. PAL/SECAM channels are listed by their picture carrier frequency (Fpc).
|
||||
* The DRX-J requires that the tuner is tuned to:
|
||||
* Fpc + DRXJ_PAL_SECAM_BG_CARRIER_FREQ_OFFSET
|
||||
*
|
||||
* In case the tuner module is used the drxdriver takes care of this.
|
||||
* In case the tuner module is NOT used the application programmer must take
|
||||
* care of this.
|
||||
*
|
||||
*/
|
||||
#define DRXJ_PAL_SECAM_BG_CARRIER_FREQ_OFFSET ((DRXFrequency_t)(2375))
|
||||
|
||||
/**
|
||||
* \def DRXJ_PAL_SECAM_DKIL_CARRIER_FREQ_OFFSET
|
||||
* \brief Offset from picture carrier to centre frequency in kHz, in RF domain
|
||||
*
|
||||
* For PAL/SECAM - DK, I, L standards. This define is needed in case the tuner module
|
||||
* is NOT used. PAL/SECAM channels are listed by their picture carrier frequency (Fpc).
|
||||
* The DRX-J requires that the tuner is tuned to:
|
||||
* Fpc + DRXJ_PAL_SECAM_DKIL_CARRIER_FREQ_OFFSET
|
||||
*
|
||||
* In case the tuner module is used the drxdriver takes care of this.
|
||||
* In case the tuner module is NOT used the application programmer must take
|
||||
* care of this.
|
||||
*
|
||||
*/
|
||||
#define DRXJ_PAL_SECAM_DKIL_CARRIER_FREQ_OFFSET ((DRXFrequency_t)(2775))
|
||||
|
||||
/**
|
||||
* \def DRXJ_PAL_SECAM_LP_CARRIER_FREQ_OFFSET
|
||||
* \brief Offset from picture carrier to centre frequency in kHz, in RF domain
|
||||
*
|
||||
* For PAL/SECAM - LP standard. This define is needed in case the tuner module
|
||||
* is NOT used. PAL/SECAM channels are listed by their picture carrier frequency (Fpc).
|
||||
* The DRX-J requires that the tuner is tuned to:
|
||||
* Fpc + DRXJ_PAL_SECAM_LP_CARRIER_FREQ_OFFSET
|
||||
*
|
||||
* In case the tuner module is used the drxdriver takes care of this.
|
||||
* In case the tuner module is NOT used the application programmer must take
|
||||
* care of this.
|
||||
*/
|
||||
#define DRXJ_PAL_SECAM_LP_CARRIER_FREQ_OFFSET ((DRXFrequency_t)(-3255))
|
||||
|
||||
/**
|
||||
* \def DRXJ_FM_CARRIER_FREQ_OFFSET
|
||||
* \brief Offset from sound carrier to centre frequency in kHz, in RF domain
|
||||
*
|
||||
* For FM standard.
|
||||
* FM channels are listed by their sound carrier frequency (Fsc).
|
||||
* The function DRX_CTRL_SET_CHANNEL requires the Ffm frequency (see below) as
|
||||
* input.
|
||||
* In case the tuner module is not used the DRX-J requires that the tuner is
|
||||
* tuned to the Ffm frequency of the channel.
|
||||
*
|
||||
* Ffm = Fsc + DRXJ_FM_CARRIER_FREQ_OFFSET
|
||||
*
|
||||
*/
|
||||
#define DRXJ_FM_CARRIER_FREQ_OFFSET ((DRXFrequency_t)(-3000))
|
||||
|
||||
/* Revision types -------------------------------------------------------*/
|
||||
|
||||
#define DRXJ_TYPE_ID (0x3946000DUL)
|
||||
|
||||
/* Macros ---------------------------------------------------------------*/
|
||||
|
||||
/* Convert OOB lock status to string */
|
||||
#define DRXJ_STR_OOB_LOCKSTATUS(x) ( \
|
||||
( x == DRX_NEVER_LOCK ) ? "Never" : \
|
||||
( x == DRX_NOT_LOCKED ) ? "No" : \
|
||||
( x == DRX_LOCKED ) ? "Locked" : \
|
||||
( x == DRX_LOCK_STATE_1 ) ? "AGC lock" : \
|
||||
( x == DRX_LOCK_STATE_2 ) ? "sync lock" : \
|
||||
"(Invalid)" )
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
ENUM
|
||||
-------------------------------------------------------------------------*/
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
STRUCTS
|
||||
-------------------------------------------------------------------------*/
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
Exported FUNCTIONS
|
||||
-------------------------------------------------------------------------*/
|
||||
|
||||
extern DRXStatus_t DRXJ_Open(pDRXDemodInstance_t demod);
|
||||
extern DRXStatus_t DRXJ_Close(pDRXDemodInstance_t demod);
|
||||
extern DRXStatus_t DRXJ_Ctrl(pDRXDemodInstance_t demod,
|
||||
DRXCtrlIndex_t ctrl,
|
||||
void *ctrlData);
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
Exported GLOBAL VARIABLES
|
||||
-------------------------------------------------------------------------*/
|
||||
extern DRXAccessFunc_t drxDapDRXJFunct_g;
|
||||
extern DRXDemodFunc_t DRXJFunctions_g;
|
||||
extern DRXJData_t DRXJData_g;
|
||||
extern I2CDeviceAddr_t DRXJDefaultAddr_g;
|
||||
extern DRXCommonAttr_t DRXJDefaultCommAttr_g;
|
||||
extern DRXDemodInstance_t DRXJDefaultDemod_g;
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
THE END
|
||||
-------------------------------------------------------------------------*/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* __DRXJ_H__ */
|
15350
drivers/media/dvb-frontends/drx39xyj/drxj_map.h
Normal file
15350
drivers/media/dvb-frontends/drx39xyj/drxj_map.h
Normal file
File diff suppressed because it is too large
Load diff
3947
drivers/media/dvb-frontends/drx39xyj/drxj_mc.h
Normal file
3947
drivers/media/dvb-frontends/drx39xyj/drxj_mc.h
Normal file
File diff suppressed because it is too large
Load diff
752
drivers/media/dvb-frontends/drx39xyj/drxj_mc_vsb.h
Normal file
752
drivers/media/dvb-frontends/drx39xyj/drxj_mc_vsb.h
Normal file
|
@ -0,0 +1,752 @@
|
|||
/*-----------------------------------------------------------------------------
|
||||
* DESCRIPTION:
|
||||
* Contains firmware version: 1.0.8
|
||||
*
|
||||
* USAGE:
|
||||
* Include.
|
||||
*
|
||||
* NOTES:
|
||||
* (c) 2009 Trident Microsystems, Inc. - All rights reserved.
|
||||
*
|
||||
* This software and related documentation (the 'Software') are intellectual
|
||||
* property owned by Trident and are copyright of Trident, unless specifically
|
||||
* noted otherwise.
|
||||
*
|
||||
* Any use of the Software is permitted only pursuant to the terms of the
|
||||
* license agreement, if any, which accompanies, is included with or applicable
|
||||
* to the Software ('License Agreement') or upon express written consent of
|
||||
* Trident. Any copying, reproduction or redistribution of the Software in
|
||||
* whole or in part by any means not in accordance with the License Agreement
|
||||
* or as agreed in writing by Trident is expressly prohibited.
|
||||
*
|
||||
* THE SOFTWARE IS WARRANTED, IF AT ALL, ONLY ACCORDING TO THE TERMS OF THE
|
||||
* LICENSE AGREEMENT. EXCEPT AS WARRANTED IN THE LICENSE AGREEMENT THE SOFTWARE
|
||||
* IS DELIVERED 'AS IS' AND TRIDENT HEREBY DISCLAIMS ALL WARRANTIES AND
|
||||
* CONDITIONS WITH REGARD TO THE SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
* AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIT
|
||||
* ENJOYMENT, TITLE AND NON-INFRINGEMENT OF ANY THIRD PARTY INTELLECTUAL
|
||||
* PROPERTY OR OTHER RIGHTS WHICH MAY RESULT FROM THE USE OR THE INABILITY
|
||||
* TO USE THE SOFTWARE.
|
||||
*
|
||||
* IN NO EVENT SHALL TRIDENT BE LIABLE FOR INDIRECT, INCIDENTAL, CONSEQUENTIAL,
|
||||
* PUNITIVE, SPECIAL OR OTHER DAMAGES WHATSOEVER INCLUDING WITHOUT LIMITATION,
|
||||
* DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
|
||||
* INFORMATION, AND THE LIKE, ARISING OUT OF OR RELATING TO THE USE OF OR THE
|
||||
* INABILITY TO USE THE SOFTWARE, EVEN IF TRIDENT HAS BEEN ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGES, EXCEPT PERSONAL INJURY OR DEATH RESULTING FROM
|
||||
* TRIDENT'S NEGLIGENCE.
|
||||
*
|
||||
* IN NO EVENT SHALL MICRONAS BE LIABLE FOR INDIRECT, INCIDENTAL, CONSEQUENTIAL,
|
||||
* PUNITIVE, SPECIAL OR OTHER DAMAGES WHATSOEVER INCLUDING WITHOUT LIMITATION,
|
||||
* DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
|
||||
* INFORMATION, AND THE LIKE, ARISING OUT OF OR RELATING TO THE USE OF OR THE
|
||||
* INABILITY TO USE THE SOFTWARE, EVEN IF MICRONAS HAS BEEN ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGES, EXCEPT PERSONAL INJURY OR DEATH RESULTING FROM
|
||||
* MICRONAS' NEGLIGENCE.
|
||||
*
|
||||
----------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef __DRXJ_MC_VSB_H__
|
||||
#define __DRXJ_MC_VSB_H__
|
||||
|
||||
#define DRXJ_MC_VSB ((pu8_t) drxj_mc_vsb_g)
|
||||
|
||||
const u8_t drxj_mc_vsb_g[] = {
|
||||
0x48, 0x4c, 0x00, 0x03, 0x00, 0x00, 0x2b, 0x62, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x82,
|
||||
0x00, 0x00, 0x15, 0x9e, 0x00, 0x01, 0x92, 0x3b, 0x2a, 0x02, 0xe4, 0xf8, 0x7f, 0x90, 0xf0, 0xf8,
|
||||
0xf0, 0xa3, 0x02, 0x22, 0xa6, 0x15, 0x23, 0x7f, 0x71, 0x7e, 0x29, 0x12, 0x90, 0x61, 0x19, 0x7b,
|
||||
0xf0, 0xef, 0xd0, 0xc0, 0xaf, 0xa2, 0xd1, 0x92, 0xaf, 0xc2, 0x28, 0x12, 0x90, 0xb6, 0x19, 0x7b,
|
||||
0xfd, 0xe0, 0x4d, 0xef, 0x90, 0xff, 0xf6, 0x7f, 0xf0, 0xee, 0xef, 0xa3, 0xa2, 0xf0, 0x92, 0xd1,
|
||||
0xd0, 0xaf, 0xe4, 0xd0, 0x7f, 0x90, 0xf0, 0xf8, 0xf0, 0xa3, 0xe4, 0x22, 0x7f, 0x90, 0xf0, 0xf8,
|
||||
0xf0, 0xa3, 0x02, 0x22, 0x70, 0x09, 0x00, 0x22, 0x00, 0x00, 0x02, 0x00, 0x00, 0x28, 0x7a, 0x90,
|
||||
0xe0, 0xfa, 0xa3, 0xfe, 0xff, 0xe0, 0x30, 0x7d, 0x94, 0x7c, 0x29, 0x12, 0x90, 0xa5, 0xfc, 0x7a,
|
||||
0xfe, 0xe0, 0xe0, 0xa3, 0x7d, 0xff, 0x7c, 0x31, 0x12, 0x94, 0xa5, 0x29, 0x7b, 0x90, 0xe0, 0x01,
|
||||
0x7e, 0xff, 0x7d, 0x00, 0x7c, 0x2e, 0x12, 0x94, 0xa5, 0x29, 0x7b, 0x90, 0xe0, 0x02, 0x7e, 0xff,
|
||||
0x7d, 0x00, 0x7c, 0x22, 0x12, 0x94, 0xa5, 0x29, 0x7b, 0x90, 0xe0, 0x03, 0x7e, 0xff, 0x7d, 0x00,
|
||||
0x7c, 0x23, 0x02, 0x94, 0xa5, 0x29, 0x62, 0x30, 0x12, 0x06, 0xb5, 0x2a, 0x04, 0x7f, 0x7f, 0x22,
|
||||
0x22, 0x00, 0x02, 0x00, 0x41, 0x28, 0x40, 0x30, 0xc2, 0xfd, 0x8e, 0x40, 0x8f, 0xd3, 0xed, 0xd2,
|
||||
0xff, 0x24, 0xec, 0xff, 0xff, 0x34, 0xda, 0xf5, 0xd9, 0x8f, 0x02, 0x22, 0x82, 0x28, 0x7d, 0x90,
|
||||
0xe0, 0x3b, 0xf0, 0x54, 0x03, 0x70, 0x80, 0xd3, 0xc3, 0x01, 0x92, 0xb3, 0x90, 0x05, 0x3a, 0x7d,
|
||||
0xa3, 0xe0, 0xe4, 0xa2, 0x92, 0xb3, 0xe0, 0x02, 0x0f, 0x54, 0x03, 0x70, 0x80, 0xd3, 0xc3, 0x01,
|
||||
0x92, 0xb3, 0x90, 0x06, 0x91, 0x7d, 0x30, 0xe0, 0x03, 0xe1, 0x02, 0x02, 0x90, 0x65, 0x5a, 0x7d,
|
||||
0x70, 0xe0, 0xa3, 0x02, 0x70, 0xe0, 0x30, 0x31, 0x2e, 0x02, 0x7d, 0x90, 0xe0, 0x78, 0xa3, 0xfe,
|
||||
0xff, 0xe0, 0x90, 0xc3, 0x75, 0x7d, 0x9f, 0xe0, 0x7d, 0x90, 0xe0, 0x74, 0x50, 0x9e, 0x90, 0x19,
|
||||
0x65, 0x7d, 0x64, 0xe0, 0x94, 0x80, 0x40, 0x7f, 0x74, 0x03, 0xf0, 0xff, 0x5b, 0x20, 0xd2, 0x09,
|
||||
0xe4, 0x5b, 0x7d, 0x90, 0xf0, 0x60, 0xf0, 0xa3, 0x7d, 0x90, 0xe0, 0x4a, 0x02, 0x70, 0xe0, 0xa3,
|
||||
0x03, 0x70, 0x02, 0x20, 0x90, 0x17, 0x4a, 0x7d, 0x70, 0xe0, 0xa3, 0x02, 0x70, 0xe0, 0x90, 0x3c,
|
||||
0x5a, 0x7d, 0x70, 0xe0, 0xa3, 0x02, 0x70, 0xe0, 0x20, 0x32, 0x2f, 0x02, 0x7d, 0x90, 0xe0, 0x6c,
|
||||
0xa3, 0xfe, 0xff, 0xe0, 0x90, 0xd3, 0x6b, 0x7d, 0x9f, 0xe0, 0x7d, 0x90, 0xe0, 0x6a, 0x40, 0x9e,
|
||||
0x90, 0x1a, 0x57, 0x7d, 0xd3, 0xe0, 0x80, 0x64, 0x7f, 0x94, 0x03, 0x40, 0xff, 0x74, 0x20, 0xf0,
|
||||
0x09, 0x07, 0x07, 0xd2, 0x90, 0xe4, 0x52, 0x7d, 0xa3, 0xf0, 0x7f, 0xf0, 0x7e, 0x22, 0x12, 0x67,
|
||||
0x61, 0x29, 0x14, 0x8e, 0x15, 0x8f, 0x27, 0x7f, 0x67, 0x7e, 0x29, 0x12, 0x8e, 0x61, 0x8f, 0x16,
|
||||
0x90, 0x17, 0x5e, 0x7d, 0xfe, 0xe0, 0xe0, 0xa3, 0x03, 0x78, 0x33, 0xc3, 0x33, 0xce, 0xd8, 0xce,
|
||||
0xff, 0xf9, 0xe5, 0xd3, 0x9f, 0x17, 0x16, 0xe5, 0x40, 0x9e, 0x20, 0x54, 0x0c, 0x02, 0x7d, 0x90,
|
||||
0xe0, 0x57, 0x80, 0x64, 0x81, 0x94, 0x10, 0x50, 0x0b, 0x80, 0x7d, 0x90, 0xe0, 0x65, 0x64, 0xc3,
|
||||
0x94, 0x80, 0x50, 0x81, 0x74, 0x03, 0xf0, 0x01, 0x5b, 0x20, 0xd2, 0x34, 0xe4, 0x5b, 0x7d, 0x90,
|
||||
0xf0, 0x60, 0xf0, 0xa3, 0x7d, 0x90, 0xe0, 0x68, 0xa3, 0xfe, 0xff, 0xe0, 0x90, 0xc3, 0x6b, 0x7d,
|
||||
0x9f, 0xe0, 0x7d, 0x90, 0xe0, 0x6a, 0x50, 0x9e, 0x90, 0x16, 0x91, 0x7d, 0x30, 0xe0, 0x0f, 0xe0,
|
||||
0x7d, 0x90, 0xe0, 0x68, 0xa3, 0xff, 0x90, 0xe0, 0x6a, 0x7d, 0xf0, 0xcf, 0xef, 0xa3, 0x90, 0xf0,
|
||||
0x4e, 0x7d, 0xfe, 0xe0, 0xe0, 0xa3, 0x03, 0x78, 0x33, 0xc3, 0x33, 0xce, 0xd8, 0xce, 0xff, 0xf9,
|
||||
0xe5, 0xd3, 0x9f, 0x15, 0x14, 0xe5, 0x40, 0x9e, 0x90, 0x44, 0x57, 0x7d, 0x64, 0xe0, 0x94, 0x80,
|
||||
0x50, 0x81, 0x74, 0x03, 0xf0, 0x01, 0x07, 0x20, 0xd2, 0x34, 0xe4, 0x07, 0x7d, 0x90, 0xf0, 0x52,
|
||||
0xf0, 0xa3, 0x7d, 0x90, 0xe0, 0x68, 0xa3, 0xfe, 0xff, 0xe0, 0x90, 0xc3, 0x6b, 0x7d, 0x9f, 0xe0,
|
||||
0x7d, 0x90, 0xe0, 0x6a, 0x50, 0x9e, 0x90, 0x16, 0x91, 0x7d, 0x30, 0xe0, 0x0f, 0xe0, 0x7d, 0x90,
|
||||
0xe0, 0x68, 0xa3, 0xff, 0x90, 0xe0, 0x6a, 0x7d, 0xf0, 0xcf, 0xef, 0xa3, 0x90, 0xf0, 0x34, 0x7d,
|
||||
0xf5, 0xe0, 0xa3, 0x16, 0xf5, 0xe0, 0x90, 0x17, 0x60, 0x7d, 0xf5, 0xe0, 0xa3, 0x1c, 0xf5, 0xe0,
|
||||
0x05, 0x1d, 0xe5, 0x1d, 0x70, 0x1d, 0x05, 0x02, 0x90, 0x1c, 0x60, 0x7d, 0x1c, 0xe5, 0xa3, 0xf0,
|
||||
0x1d, 0xe5, 0x30, 0xf0, 0x2f, 0x5b, 0x7d, 0x90, 0xe0, 0x7e, 0xa3, 0xfe, 0xff, 0xe0, 0x74, 0xc3,
|
||||
0x9f, 0xf8, 0x74, 0xff, 0x9e, 0x2a, 0xd3, 0xfe, 0x7d, 0x90, 0xe0, 0x7b, 0x90, 0x9f, 0x7a, 0x7d,
|
||||
0x9e, 0xe0, 0x07, 0x50, 0x70, 0xe0, 0xa3, 0x02, 0x70, 0xe0, 0x90, 0x0a, 0x2e, 0x7d, 0xf5, 0xe0,
|
||||
0xa3, 0x16, 0xf5, 0xe0, 0xc3, 0x17, 0x1d, 0xe5, 0x17, 0x95, 0x1c, 0xe5, 0x16, 0x95, 0x03, 0x40,
|
||||
0x80, 0xd3, 0xc3, 0x01, 0x04, 0x92, 0x7d, 0x90, 0xe0, 0x50, 0x16, 0xf5, 0xe0, 0xa3, 0x17, 0xf5,
|
||||
0x7d, 0x90, 0xe0, 0x52, 0x1c, 0xf5, 0xe0, 0xa3, 0x1d, 0xf5, 0x1d, 0x05, 0x1d, 0xe5, 0x02, 0x70,
|
||||
0x1c, 0x05, 0x7d, 0x90, 0xe5, 0x52, 0xf0, 0x1c, 0xe5, 0xa3, 0xf0, 0x1d, 0x07, 0x30, 0x90, 0x0a,
|
||||
0x82, 0x7d, 0xf5, 0xe0, 0xa3, 0x16, 0xf5, 0xe0, 0x20, 0x17, 0x11, 0x04, 0xe5, 0xc3, 0x95, 0x1d,
|
||||
0xe5, 0x17, 0x95, 0x1c, 0x40, 0x16, 0xd3, 0x03, 0x01, 0x80, 0x92, 0xc3, 0x20, 0x03, 0x03, 0x04,
|
||||
0x03, 0x02, 0xc0, 0xfc, 0xa2, 0xd0, 0x92, 0xaf, 0xc2, 0xd1, 0xe4, 0xaf, 0x7d, 0x90, 0xf0, 0xa4,
|
||||
0xf0, 0xa3, 0x7d, 0x7e, 0xa4, 0x7f, 0x01, 0x7d, 0x12, 0xfc, 0xae, 0x00, 0x27, 0x7b, 0x00, 0x7a,
|
||||
0x07, 0x7d, 0x06, 0x7f, 0x2a, 0x12, 0x30, 0x38, 0xfd, 0x40, 0x7d, 0x90, 0xe0, 0xa4, 0xa3, 0xff,
|
||||
0x90, 0xe0, 0x5a, 0x7d, 0xf0, 0xcf, 0xef, 0xa3, 0xa2, 0xf0, 0x92, 0xd1, 0xd0, 0xaf, 0xe4, 0xd0,
|
||||
0x7d, 0x90, 0xf0, 0x60, 0xf0, 0xa3, 0x5b, 0xc2, 0x7d, 0x90, 0xe0, 0x63, 0x18, 0xf5, 0x7d, 0x90,
|
||||
0xe0, 0x5a, 0x12, 0xf5, 0xe0, 0xa3, 0x13, 0xf5, 0x7d, 0x90, 0xe0, 0x5c, 0x1a, 0xf5, 0xe0, 0xa3,
|
||||
0x1b, 0xf5, 0x7d, 0x90, 0xe0, 0x5e, 0x16, 0xf5, 0xe0, 0xa3, 0x17, 0xf5, 0x7d, 0x90, 0xe0, 0x66,
|
||||
0x14, 0xf5, 0xe0, 0xa3, 0x15, 0xf5, 0x7d, 0x90, 0xe0, 0x65, 0x19, 0xf5, 0x7d, 0x90, 0xe0, 0x74,
|
||||
0xa3, 0xfe, 0xff, 0xe0, 0x74, 0xc3, 0x9f, 0xff, 0x1d, 0xf5, 0x7f, 0x74, 0xf5, 0x9e, 0x90, 0x1c,
|
||||
0x6e, 0x7d, 0xfe, 0xe0, 0xe0, 0xa3, 0x90, 0xff, 0x6a, 0x7d, 0xb5, 0xe0, 0x1e, 0x06, 0xe0, 0xa3,
|
||||
0x07, 0xb5, 0xd3, 0x19, 0x7d, 0x90, 0xe0, 0x4b, 0x13, 0x95, 0x7d, 0x90, 0xe0, 0x4a, 0x12, 0x95,
|
||||
0x0a, 0x40, 0x58, 0x20, 0xe0, 0x07, 0x12, 0xf5, 0xe0, 0xa3, 0x13, 0xf5, 0x90, 0xd3, 0x7b, 0x7d,
|
||||
0x94, 0xe0, 0x90, 0xfe, 0x7a, 0x7d, 0x94, 0xe0, 0x40, 0x77, 0xd3, 0x0d, 0x13, 0xe5, 0x17, 0x95,
|
||||
0x12, 0xe5, 0x16, 0x95, 0x02, 0x40, 0x04, 0xc2, 0x02, 0x30, 0x20, 0x03, 0x02, 0x05, 0x04, 0xc2,
|
||||
0x04, 0xa2, 0x5a, 0x92, 0x03, 0x20, 0x02, 0x03, 0xa7, 0x04, 0xd0, 0xc0, 0xaf, 0xa2, 0xd1, 0x92,
|
||||
0xaf, 0xc2, 0x90, 0xe4, 0xa4, 0x7d, 0xa3, 0xf0, 0x7e, 0xf0, 0x7f, 0x7d, 0x7d, 0xa4, 0xfc, 0x01,
|
||||
0x00, 0x12, 0x7b, 0xae, 0x7a, 0x22, 0x7d, 0x00, 0x7f, 0x07, 0x12, 0x06, 0x38, 0x2a, 0x40, 0x30,
|
||||
0x90, 0xfd, 0xa4, 0x7d, 0xff, 0xe0, 0xe0, 0xa3, 0x7d, 0x90, 0xcf, 0x4a, 0xa3, 0xf0, 0xf0, 0xef,
|
||||
0xd1, 0xa2, 0xaf, 0x92, 0xd0, 0xd0, 0x90, 0xe4, 0x52, 0x7d, 0xa3, 0xf0, 0xc2, 0xf0, 0x90, 0x07,
|
||||
0x55, 0x7d, 0xf5, 0xe0, 0x90, 0x18, 0x4a, 0x7d, 0xf5, 0xe0, 0xa3, 0x12, 0xf5, 0xe0, 0x90, 0x13,
|
||||
0x4c, 0x7d, 0xf5, 0xe0, 0xa3, 0x1a, 0xf5, 0xe0, 0x90, 0x1b, 0x4e, 0x7d, 0xf5, 0xe0, 0xa3, 0x16,
|
||||
0xf5, 0xe0, 0x90, 0x17, 0x58, 0x7d, 0xf5, 0xe0, 0xa3, 0x14, 0xf5, 0xe0, 0x90, 0x15, 0x57, 0x7d,
|
||||
0xf5, 0xe0, 0x90, 0x19, 0x6a, 0x7d, 0xf5, 0xe0, 0xa3, 0x1c, 0xf5, 0xe0, 0x20, 0x1d, 0x16, 0x02,
|
||||
0x90, 0xd3, 0x5b, 0x7d, 0x95, 0xe0, 0x90, 0x13, 0x5a, 0x7d, 0x95, 0xe0, 0x40, 0x12, 0xe0, 0x07,
|
||||
0x12, 0xf5, 0xe0, 0xa3, 0x13, 0xf5, 0x06, 0x20, 0xc2, 0x02, 0xa2, 0x03, 0x92, 0x03, 0x20, 0x59,
|
||||
0x0b, 0x05, 0x02, 0x20, 0xc2, 0x08, 0xc2, 0x03, 0xc2, 0x04, 0xc2, 0x59, 0x20, 0x5a, 0x06, 0x04,
|
||||
0x03, 0x20, 0x02, 0x03, 0x8b, 0x06, 0xe5, 0xc3, 0x95, 0x13, 0xe5, 0x1b, 0x95, 0x12, 0x50, 0x1a,
|
||||
0xe5, 0x57, 0x64, 0x19, 0x94, 0x80, 0x50, 0x80, 0x15, 0x4a, 0xc3, 0x19, 0x18, 0xe5, 0x80, 0x64,
|
||||
0xe5, 0xf8, 0x64, 0x19, 0x98, 0x80, 0x0e, 0x50, 0x15, 0xe5, 0xe0, 0x25, 0x15, 0xf5, 0x14, 0xe5,
|
||||
0xf5, 0x33, 0x75, 0x14, 0xff, 0x19, 0x15, 0xe5, 0xf8, 0xc4, 0x0f, 0x54, 0x68, 0xc8, 0xe5, 0xff,
|
||||
0xc4, 0x14, 0xf0, 0x54, 0xfe, 0x48, 0xe5, 0xc3, 0x9f, 0x1d, 0x11, 0xf5, 0x1c, 0xe5, 0xf5, 0x9e,
|
||||
0xc3, 0x10, 0x80, 0x64, 0x80, 0x94, 0x02, 0x50, 0x6d, 0x80, 0x10, 0x85, 0x85, 0x1c, 0x1d, 0x11,
|
||||
0x05, 0x02, 0x75, 0xa6, 0xff, 0x19, 0x6c, 0x80, 0x74, 0xc3, 0x95, 0x01, 0xa2, 0x18, 0x13, 0xe7,
|
||||
0x18, 0xf5, 0xe5, 0xd3, 0x95, 0x13, 0xe5, 0x17, 0x95, 0x12, 0x40, 0x16, 0xe5, 0x5f, 0x64, 0x19,
|
||||
0x94, 0x80, 0x40, 0x80, 0x05, 0x4c, 0xd3, 0x19, 0x18, 0xe5, 0x80, 0x64, 0xe5, 0xf8, 0x64, 0x19,
|
||||
0x98, 0x80, 0x0e, 0x40, 0x15, 0xe5, 0xe0, 0x25, 0x15, 0xf5, 0x14, 0xe5, 0xf5, 0x33, 0x75, 0x14,
|
||||
0x01, 0x19, 0x15, 0xe5, 0xf8, 0xc4, 0x0f, 0x54, 0x68, 0xc8, 0xe5, 0xff, 0xc4, 0x14, 0xf0, 0x54,
|
||||
0xfe, 0x48, 0x1d, 0xe5, 0xf5, 0x2f, 0xe5, 0x11, 0x3e, 0x1c, 0x10, 0xf5, 0xe5, 0xd3, 0x94, 0x11,
|
||||
0xe5, 0xff, 0x94, 0x10, 0x40, 0x7f, 0x80, 0x02, 0x85, 0x0b, 0x1c, 0x10, 0x11, 0x85, 0x80, 0x1d,
|
||||
0x75, 0x1d, 0x01, 0x19, 0x14, 0x75, 0x75, 0x00, 0x01, 0x15, 0x12, 0x80, 0xf5, 0xe4, 0xf5, 0x19,
|
||||
0x75, 0x14, 0x01, 0x15, 0x03, 0x30, 0xc2, 0x02, 0x30, 0x59, 0x02, 0x04, 0x5a, 0xc2, 0x03, 0x30,
|
||||
0x90, 0x72, 0x6e, 0x7d, 0xf5, 0xe0, 0xa3, 0x10, 0xf5, 0xe0, 0x90, 0x11, 0x6c, 0x7d, 0xf5, 0xe0,
|
||||
0xa3, 0x16, 0xf5, 0xe0, 0xc3, 0x17, 0x1d, 0xe5, 0x17, 0x95, 0x1c, 0xe5, 0x16, 0x95, 0x0e, 0x50,
|
||||
0x16, 0x85, 0x85, 0x1c, 0x1d, 0x17, 0x14, 0x75, 0x75, 0x00, 0x01, 0x15, 0x59, 0xc2, 0xe5, 0xd3,
|
||||
0x95, 0x1d, 0xe5, 0x11, 0x95, 0x1c, 0x40, 0x10, 0x85, 0x0e, 0x1c, 0x10, 0x11, 0x85, 0x75, 0x1d,
|
||||
0x00, 0x14, 0x15, 0x75, 0xc2, 0x01, 0x90, 0x59, 0x57, 0x7d, 0x19, 0xe5, 0x90, 0xf0, 0x58, 0x7d,
|
||||
0x14, 0xe5, 0xa3, 0xf0, 0x15, 0xe5, 0x90, 0xf0, 0x6a, 0x7d, 0x1c, 0xe5, 0xa3, 0xf0, 0x1d, 0xe5,
|
||||
0x20, 0xf0, 0x0f, 0x02, 0x7d, 0x90, 0xe0, 0x78, 0xa3, 0xff, 0x90, 0xe0, 0x74, 0x7d, 0xf0, 0xcf,
|
||||
0xef, 0xa3, 0x30, 0xf0, 0x6d, 0x04, 0x7d, 0x90, 0xe0, 0x78, 0x10, 0xf5, 0xe0, 0xa3, 0x11, 0xf5,
|
||||
0x7d, 0x90, 0xe0, 0x76, 0x16, 0xf5, 0xe0, 0xa3, 0x17, 0xf5, 0x74, 0xc3, 0x95, 0xff, 0xf5, 0x1d,
|
||||
0x74, 0x1d, 0x95, 0x7f, 0xf5, 0x1c, 0xc3, 0x1c, 0x1d, 0xe5, 0x17, 0x95, 0x1c, 0xe5, 0x16, 0x95,
|
||||
0x0e, 0x50, 0x16, 0x85, 0x85, 0x1c, 0x1d, 0x17, 0x14, 0x75, 0x75, 0x00, 0x01, 0x15, 0x5a, 0xc2,
|
||||
0xe5, 0xd3, 0x95, 0x1d, 0xe5, 0x11, 0x95, 0x1c, 0x40, 0x10, 0x85, 0x0e, 0x1c, 0x10, 0x11, 0x85,
|
||||
0x75, 0x1d, 0x00, 0x14, 0x15, 0x75, 0xc2, 0x01, 0x90, 0x5a, 0x65, 0x7d, 0x19, 0xe5, 0x90, 0xf0,
|
||||
0x66, 0x7d, 0x14, 0xe5, 0xa3, 0xf0, 0x15, 0xe5, 0x90, 0xf0, 0x74, 0x7d, 0x1c, 0xe5, 0xa3, 0xf0,
|
||||
0x1d, 0xe5, 0x90, 0xf0, 0x30, 0x7d, 0xf5, 0xe0, 0xa3, 0x1c, 0xf5, 0xe0, 0x05, 0x1d, 0xe5, 0x1d,
|
||||
0x70, 0x1d, 0x05, 0x02, 0x90, 0x1c, 0x30, 0x7d, 0x1c, 0xe5, 0xa3, 0xf0, 0x1d, 0xe5, 0x90, 0xf0,
|
||||
0x44, 0x7d, 0xf5, 0xe0, 0xa3, 0x1a, 0xf5, 0xe0, 0x45, 0x1b, 0x70, 0x1a, 0x02, 0x03, 0x33, 0x09,
|
||||
0x59, 0x20, 0x30, 0x03, 0x0d, 0x5a, 0x7d, 0x90, 0xe0, 0x48, 0x14, 0xf5, 0xe0, 0xa3, 0x15, 0xf5,
|
||||
0x08, 0x02, 0xd3, 0xff, 0x7d, 0x90, 0xe0, 0x33, 0x1d, 0x95, 0x7d, 0x90, 0xe0, 0x32, 0x1c, 0x95,
|
||||
0x03, 0x40, 0x09, 0x02, 0x90, 0x6f, 0x40, 0x7d, 0xf5, 0xe0, 0xa3, 0x10, 0xf5, 0xe0, 0x90, 0x11,
|
||||
0x42, 0x7d, 0xf5, 0xe0, 0xa3, 0x12, 0xf5, 0xe0, 0xc3, 0x13, 0x7d, 0x90, 0xe0, 0x3f, 0x13, 0x95,
|
||||
0x12, 0xe5, 0x80, 0x64, 0x90, 0xf8, 0x3e, 0x7d, 0x64, 0xe0, 0x98, 0x80, 0x24, 0x40, 0x11, 0xe5,
|
||||
0x13, 0xb5, 0xe5, 0x1f, 0xb5, 0x10, 0x1a, 0x12, 0x1b, 0xe5, 0xf8, 0xc4, 0x0f, 0x54, 0x68, 0xc8,
|
||||
0xe5, 0xff, 0xc4, 0x1a, 0xf0, 0x54, 0xfe, 0x48, 0x25, 0xef, 0xf5, 0x13, 0xee, 0x13, 0x12, 0x35,
|
||||
0x12, 0xf5, 0xe5, 0xc3, 0x95, 0x13, 0xff, 0x11, 0x12, 0xe5, 0x10, 0x95, 0xf8, 0xc4, 0xf0, 0x54,
|
||||
0x68, 0xc8, 0x1c, 0xf5, 0xc4, 0xef, 0x0f, 0x54, 0xf5, 0x48, 0x90, 0x1d, 0x84, 0x7d, 0xf5, 0xe0,
|
||||
0xa3, 0x10, 0xf5, 0xe0, 0x90, 0x11, 0x86, 0x7d, 0xf5, 0xe0, 0xa3, 0x12, 0xf5, 0xe0, 0xc3, 0x13,
|
||||
0x11, 0x95, 0xe5, 0xff, 0x95, 0x12, 0xc4, 0x10, 0x54, 0xf8, 0xc8, 0xf0, 0xf5, 0x68, 0xef, 0x14,
|
||||
0x54, 0xc4, 0x48, 0x0f, 0x15, 0xf5, 0x95, 0xd3, 0xe5, 0x1d, 0x95, 0x14, 0x40, 0x1c, 0x85, 0x06,
|
||||
0x1c, 0x14, 0x15, 0x85, 0x90, 0x1d, 0x92, 0x7d, 0xf5, 0xe0, 0xa3, 0x10, 0xf5, 0xe0, 0x90, 0x11,
|
||||
0x94, 0x7d, 0xf5, 0xe0, 0xa3, 0x12, 0xf5, 0xe0, 0xc3, 0x13, 0x11, 0x95, 0xe5, 0xff, 0x95, 0x12,
|
||||
0xc4, 0x10, 0x54, 0xf8, 0xc8, 0xf0, 0xf5, 0x68, 0xef, 0x14, 0x54, 0xc4, 0x48, 0x0f, 0x15, 0xf5,
|
||||
0x95, 0xd3, 0xe5, 0x1d, 0x95, 0x14, 0x40, 0x1c, 0x85, 0x06, 0x1c, 0x14, 0x15, 0x85, 0x90, 0x1d,
|
||||
0x3a, 0x7d, 0x54, 0xe0, 0xf5, 0x0f, 0xa3, 0x14, 0xf5, 0xe0, 0x90, 0x15, 0x48, 0x7d, 0xf5, 0xe0,
|
||||
0xa3, 0x16, 0xf5, 0xe0, 0x90, 0x17, 0x46, 0x7d, 0xf5, 0xe0, 0xa3, 0x12, 0xf5, 0xe0, 0xc3, 0x13,
|
||||
0x1d, 0xe5, 0x1b, 0x95, 0x1c, 0xe5, 0x1a, 0x95, 0x03, 0x40, 0x08, 0x02, 0xe5, 0x6c, 0x54, 0x12,
|
||||
0xf5, 0x0f, 0x75, 0x10, 0x00, 0x11, 0x14, 0xe5, 0x0f, 0x54, 0xe4, 0xfe, 0x11, 0x95, 0x95, 0xee,
|
||||
0x40, 0x10, 0xe4, 0x0d, 0x15, 0x25, 0x15, 0xf5, 0xff, 0x74, 0x14, 0x35, 0x14, 0xf5, 0x0e, 0x80,
|
||||
0x14, 0xe5, 0xf0, 0x54, 0x10, 0x45, 0x14, 0xf5, 0x11, 0xe5, 0x15, 0x45, 0x15, 0xf5, 0x10, 0x75,
|
||||
0xe5, 0x00, 0x54, 0x13, 0xf5, 0xf0, 0xe5, 0x11, 0x54, 0x15, 0xd3, 0xf0, 0x11, 0x95, 0x95, 0xe4,
|
||||
0x40, 0x10, 0x74, 0x0e, 0x25, 0xf0, 0xf5, 0x15, 0x74, 0x15, 0x35, 0xff, 0xf5, 0x14, 0x80, 0x14,
|
||||
0xe5, 0x10, 0x54, 0x15, 0xff, 0x0f, 0x10, 0xe5, 0x14, 0x45, 0x14, 0xf5, 0x11, 0xe5, 0xf5, 0x4f,
|
||||
0x75, 0x15, 0x00, 0x10, 0x13, 0xe5, 0x0f, 0x54, 0x11, 0xf5, 0x15, 0xe5, 0x0f, 0x54, 0x95, 0xd3,
|
||||
0xe4, 0x11, 0x10, 0x95, 0x03, 0x50, 0x08, 0x02, 0xe5, 0xef, 0x15, 0x15, 0x70, 0x15, 0x15, 0x02,
|
||||
0x02, 0x14, 0xff, 0x08, 0x16, 0xe5, 0x0f, 0x54, 0x10, 0xf5, 0x11, 0x75, 0xe5, 0x00, 0x54, 0x14,
|
||||
0xfe, 0x0f, 0xe4, 0xc3, 0x11, 0x95, 0x95, 0xee, 0x50, 0x10, 0xe4, 0x0d, 0x15, 0x25, 0x15, 0xf5,
|
||||
0x01, 0x74, 0x14, 0x35, 0x14, 0xf5, 0x0e, 0x80, 0x14, 0xe5, 0xf0, 0x54, 0x10, 0x45, 0x14, 0xf5,
|
||||
0x11, 0xe5, 0x15, 0x45, 0x15, 0xf5, 0x10, 0x75, 0xe5, 0x00, 0x54, 0x17, 0xf5, 0xf0, 0xe5, 0x11,
|
||||
0x54, 0x15, 0xc3, 0xf0, 0x11, 0x95, 0x95, 0xe4, 0x50, 0x10, 0x74, 0x0d, 0x25, 0x10, 0xf5, 0x15,
|
||||
0xe4, 0x15, 0x14, 0x35, 0x14, 0xf5, 0x10, 0x80, 0x15, 0xe5, 0x0f, 0x54, 0xe5, 0xff, 0x45, 0x10,
|
||||
0xf5, 0x14, 0xe5, 0x14, 0x4f, 0x11, 0x15, 0xf5, 0x10, 0x75, 0xe5, 0x00, 0x54, 0x17, 0xf5, 0x0f,
|
||||
0xe5, 0x11, 0x54, 0x15, 0xc3, 0x0f, 0x11, 0x95, 0x95, 0xe4, 0x50, 0x10, 0x05, 0x0a, 0xe5, 0x15,
|
||||
0x70, 0x15, 0x05, 0x02, 0x80, 0x14, 0xe5, 0x10, 0x54, 0x15, 0xff, 0xf0, 0x10, 0xe5, 0x14, 0x45,
|
||||
0x14, 0xf5, 0x11, 0xe5, 0xf5, 0x4f, 0x90, 0x15, 0x3a, 0x7d, 0xf5, 0xe0, 0xa3, 0x16, 0xf5, 0xe0,
|
||||
0x54, 0x17, 0x70, 0xf0, 0x53, 0x03, 0x0f, 0x15, 0x16, 0xe5, 0x0f, 0x54, 0x03, 0x70, 0x14, 0x53,
|
||||
0xe5, 0xf0, 0x54, 0x17, 0x70, 0x0f, 0x53, 0x03, 0xf0, 0x15, 0x16, 0xe5, 0xf0, 0x54, 0x14, 0x45,
|
||||
0xe5, 0xff, 0x90, 0x15, 0x3a, 0x7d, 0xf0, 0xcf, 0xef, 0xa3, 0xe4, 0xf0, 0x7d, 0x90, 0xf0, 0x30,
|
||||
0xf0, 0xa3, 0x7d, 0x90, 0x74, 0x42, 0xf0, 0x80, 0xe4, 0xa3, 0x90, 0xf0, 0x40, 0x7d, 0x7f, 0x74,
|
||||
0xa3, 0xf0, 0xff, 0x74, 0xe4, 0xf0, 0x7d, 0x90, 0xf0, 0x86, 0xf0, 0xa3, 0x7d, 0x90, 0x74, 0x84,
|
||||
0xf0, 0x7f, 0x74, 0xa3, 0xf0, 0xff, 0x90, 0xe4, 0x94, 0x7d, 0xa3, 0xf0, 0x90, 0xf0, 0x92, 0x7d,
|
||||
0x7f, 0x74, 0xa3, 0xf0, 0xff, 0x74, 0x22, 0xf0, 0xe0, 0xc0, 0xf0, 0xc0, 0x83, 0xc0, 0x82, 0xc0,
|
||||
0xd0, 0xc0, 0xd0, 0x75, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x01, 0xc0, 0x02, 0xc0, 0x03, 0xc0, 0x04,
|
||||
0xc0, 0x05, 0xc0, 0x06, 0x7f, 0x07, 0x7e, 0x07, 0x12, 0x71, 0x61, 0x29, 0x7a, 0x90, 0xef, 0xc0,
|
||||
0xf4, 0xf0, 0x7e, 0xff, 0x7d, 0x00, 0x7c, 0x05, 0x12, 0x71, 0xa5, 0x29, 0x7a, 0x90, 0xe0, 0xc0,
|
||||
0x70, 0xff, 0x02, 0x03, 0x40, 0x0e, 0x20, 0xef, 0x03, 0xe4, 0x0c, 0x02, 0x7f, 0x58, 0x7e, 0x23,
|
||||
0x12, 0x71, 0x61, 0x29, 0x7b, 0x90, 0xef, 0x19, 0x90, 0xf0, 0xd4, 0x7f, 0x75, 0xe4, 0x01, 0xf0,
|
||||
0x18, 0x12, 0xc3, 0x7d, 0x7f, 0x90, 0xe0, 0xd5, 0x39, 0x94, 0x7f, 0x90, 0xe0, 0xd4, 0x01, 0x94,
|
||||
0x0d, 0x40, 0xf0, 0xe4, 0xf0, 0xa3, 0x7f, 0x90, 0x75, 0xd2, 0x01, 0xf0, 0x18, 0x12, 0x7f, 0x7d,
|
||||
0x7e, 0x74, 0x12, 0x71, 0x61, 0x29, 0x7a, 0x90, 0xee, 0xd6, 0xa3, 0xf0, 0xf0, 0xef, 0xee, 0xc3,
|
||||
0x80, 0x64, 0x80, 0x94, 0x09, 0x50, 0xe4, 0xc3, 0xff, 0x9f, 0x9e, 0xe4, 0x80, 0xfe, 0x90, 0x08,
|
||||
0xd6, 0x7a, 0xfe, 0xe0, 0xe0, 0xa3, 0x90, 0xff, 0xd6, 0x7a, 0xf0, 0xee, 0xef, 0xa3, 0x7f, 0xf0,
|
||||
0x7e, 0x75, 0x12, 0x71, 0x61, 0x29, 0x7a, 0x90, 0xee, 0xd8, 0xa3, 0xf0, 0xf0, 0xef, 0xee, 0xc3,
|
||||
0x80, 0x64, 0x80, 0x94, 0x09, 0x50, 0xe4, 0xc3, 0xff, 0x9f, 0x9e, 0xe4, 0x80, 0xfe, 0x90, 0x08,
|
||||
0xd8, 0x7a, 0xfe, 0xe0, 0xe0, 0xa3, 0x90, 0xff, 0xd8, 0x7a, 0xf0, 0xee, 0xef, 0xa3, 0x90, 0xf0,
|
||||
0xd8, 0x7a, 0xfc, 0xe0, 0xe0, 0xa3, 0xff, 0xfd, 0x04, 0xae, 0x18, 0x12, 0xaa, 0x6b, 0xab, 0x06,
|
||||
0x90, 0x07, 0xd6, 0x7a, 0xfc, 0xe0, 0xe0, 0xa3, 0xff, 0xfd, 0x04, 0xae, 0x18, 0x12, 0xef, 0x6b,
|
||||
0xff, 0x2b, 0x3a, 0xee, 0x7a, 0x90, 0xf0, 0xda, 0xef, 0xa3, 0x90, 0xf0, 0xc1, 0x7a, 0x19, 0x12,
|
||||
0x90, 0x6f, 0xc5, 0x7a, 0x19, 0x12, 0x7f, 0xa7, 0x7e, 0x12, 0x12, 0x62, 0x61, 0x29, 0xfc, 0xe4,
|
||||
0x90, 0xfd, 0xc1, 0x7a, 0x19, 0x12, 0x90, 0xa7, 0xc5, 0x7a, 0x19, 0x12, 0xab, 0x6f, 0xaa, 0x07,
|
||||
0xa9, 0x06, 0xa8, 0x05, 0x90, 0x04, 0xc1, 0x7a, 0x19, 0x12, 0x12, 0x6f, 0xb6, 0x18, 0x7a, 0x90,
|
||||
0x12, 0xd2, 0xa7, 0x19, 0x00, 0x7f, 0x80, 0x7e, 0xff, 0x7d, 0xff, 0x7c, 0x7a, 0x90, 0x12, 0xd2,
|
||||
0x8b, 0x19, 0x12, 0xc3, 0x21, 0x19, 0x14, 0x50, 0x7a, 0x90, 0x12, 0xd2, 0x6f, 0x19, 0x2f, 0xe4,
|
||||
0xe4, 0xff, 0xfe, 0x3e, 0x34, 0xed, 0xfd, 0x01, 0x3c, 0xe4, 0x29, 0x80, 0x7f, 0xe4, 0x7e, 0xff,
|
||||
0xfd, 0x7f, 0x90, 0xfc, 0xd2, 0x7a, 0x19, 0x12, 0xd3, 0x8b, 0x19, 0x12, 0x40, 0x21, 0x90, 0x1d,
|
||||
0xd2, 0x7a, 0x19, 0x12, 0xc3, 0x6f, 0x94, 0xef, 0xff, 0x00, 0x94, 0xee, 0xfe, 0x00, 0x94, 0xed,
|
||||
0xfd, 0x01, 0x94, 0xec, 0xfc, 0x00, 0x7a, 0x90, 0x12, 0xd2, 0xa7, 0x19, 0x7f, 0xe4, 0xfe, 0x0f,
|
||||
0xfc, 0xfd, 0x7a, 0x90, 0x12, 0xc9, 0x8b, 0x19, 0x18, 0x12, 0xe4, 0xc4, 0x10, 0x7b, 0xf9, 0xfa,
|
||||
0x12, 0xf8, 0xbc, 0x27, 0x7a, 0x90, 0x12, 0xd2, 0x8b, 0x19, 0x18, 0x12, 0x90, 0xa9, 0xc9, 0x7a,
|
||||
0x19, 0x12, 0x90, 0xa7, 0xcf, 0x7a, 0xf9, 0xe0, 0x03, 0x54, 0x68, 0x70, 0x7a, 0x90, 0x12, 0xc9,
|
||||
0x6f, 0x19, 0x07, 0x78, 0x19, 0x12, 0x90, 0x48, 0xd0, 0x7a, 0xf0, 0xee, 0xef, 0xa3, 0xc3, 0xf0,
|
||||
0x64, 0xee, 0x94, 0x80, 0x50, 0x80, 0x90, 0x15, 0xd0, 0x7a, 0xfe, 0xe0, 0xe0, 0xa3, 0xc3, 0xff,
|
||||
0x9f, 0xe4, 0xe4, 0xff, 0x90, 0x9e, 0xd0, 0x7a, 0xa3, 0xf0, 0xf0, 0xef, 0x7a, 0x90, 0xe0, 0xd0,
|
||||
0xa3, 0xfe, 0xff, 0xe0, 0x90, 0xc3, 0xce, 0x7a, 0x9f, 0xe0, 0x7a, 0x90, 0xe0, 0xcd, 0x50, 0x9e,
|
||||
0xee, 0x05, 0xa3, 0xf0, 0xf0, 0xef, 0xc3, 0xe9, 0x80, 0x94, 0x18, 0x40, 0x7a, 0x90, 0xe0, 0xcd,
|
||||
0xa3, 0xff, 0x90, 0xe0, 0xdc, 0x7a, 0xf0, 0xcf, 0xef, 0xa3, 0x90, 0xf0, 0xcd, 0x7a, 0xf0, 0xe4,
|
||||
0xf0, 0xa3, 0xf0, 0xa3, 0x7a, 0x90, 0xe0, 0xcf, 0xf0, 0x04, 0x7b, 0x90, 0xe0, 0x19, 0x17, 0x64,
|
||||
0x4c, 0x70, 0x6c, 0x7d, 0x71, 0x7c, 0xfe, 0xff, 0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x16, 0x7f, 0x71,
|
||||
0x7e, 0x04, 0x12, 0x00, 0xa5, 0x29, 0x18, 0x7d, 0x71, 0x7c, 0x03, 0x7f, 0x00, 0x7e, 0x29, 0x12,
|
||||
0x7d, 0xa5, 0x7c, 0x57, 0x7f, 0x71, 0x7e, 0x01, 0x12, 0x00, 0xa5, 0x29, 0x90, 0xc3, 0xdb, 0x7a,
|
||||
0x94, 0xe0, 0x90, 0x78, 0xda, 0x7a, 0x94, 0xe0, 0x40, 0x00, 0x7d, 0x75, 0x7c, 0x3d, 0x7f, 0x71,
|
||||
0x7e, 0x50, 0x12, 0x00, 0xa5, 0x29, 0x70, 0x7d, 0x71, 0x7c, 0x08, 0x7f, 0x5d, 0x80, 0x7b, 0x90,
|
||||
0xe0, 0x19, 0x74, 0xff, 0xc3, 0x17, 0x50, 0x9f, 0xef, 0x57, 0x57, 0x94, 0x52, 0x50, 0x7a, 0x90,
|
||||
0xe0, 0xdd, 0x64, 0x94, 0x7a, 0x90, 0xe0, 0xdc, 0x00, 0x94, 0x0f, 0x40, 0x90, 0xd3, 0xdb, 0x7a,
|
||||
0x94, 0xe0, 0x90, 0x78, 0xda, 0x7a, 0x94, 0xe0, 0x50, 0x00, 0x7d, 0x35, 0x7c, 0x16, 0x7f, 0x71,
|
||||
0x7e, 0x01, 0x12, 0x00, 0xa5, 0x29, 0x18, 0x7d, 0x71, 0x7c, 0x03, 0x7f, 0x00, 0x7e, 0x29, 0x12,
|
||||
0x7d, 0xa5, 0x7c, 0x70, 0xe4, 0x71, 0xfe, 0xff, 0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x57, 0xe4, 0x71,
|
||||
0xfe, 0xff, 0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x6c, 0x7f, 0x71, 0x7e, 0x5a, 0x12, 0x00, 0xa5, 0x29,
|
||||
0x7a, 0x90, 0xe0, 0xc0, 0xe0, 0x20, 0x02, 0x03, 0xc6, 0x0d, 0x7f, 0x90, 0xe4, 0xd2, 0xf0, 0x75,
|
||||
0x12, 0x01, 0x7d, 0x18, 0x7f, 0x90, 0xe4, 0xd4, 0xa3, 0xf0, 0x7f, 0xf0, 0x7e, 0x29, 0x12, 0x71,
|
||||
0x61, 0x29, 0x7b, 0x90, 0xee, 0x1a, 0xa3, 0xf0, 0xf0, 0xef, 0x94, 0xc3, 0xee, 0xff, 0x3f, 0x94,
|
||||
0x73, 0x40, 0x7b, 0x90, 0xe0, 0x1c, 0x0a, 0x94, 0x63, 0x40, 0x1b, 0x7d, 0x71, 0x7c, 0xff, 0xe4,
|
||||
0x12, 0xfe, 0xa5, 0x29, 0x1d, 0x7d, 0x71, 0x7c, 0x03, 0x7f, 0x00, 0x7e, 0x29, 0x12, 0x7d, 0xa5,
|
||||
0x7c, 0x1d, 0x7f, 0x71, 0x7e, 0x02, 0x12, 0x00, 0xa5, 0x29, 0x1d, 0x7d, 0x71, 0x7c, 0x0c, 0x7f,
|
||||
0x00, 0x7e, 0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x1d, 0x7f, 0x71, 0x7e, 0x08, 0x12, 0x00, 0xa5, 0x29,
|
||||
0x1d, 0x7d, 0x71, 0x7c, 0x30, 0x7f, 0x00, 0x7e, 0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x1d, 0x7f, 0x71,
|
||||
0x7e, 0x20, 0x12, 0x00, 0xa5, 0x29, 0x1d, 0x7d, 0x71, 0x7c, 0xff, 0xe4, 0x12, 0xfe, 0xa5, 0x29,
|
||||
0x1b, 0x7d, 0x71, 0x7c, 0xff, 0x7f, 0x00, 0x7e, 0x29, 0x12, 0x80, 0xa5, 0x90, 0x08, 0x1c, 0x7b,
|
||||
0x04, 0xe0, 0x80, 0xf0, 0x90, 0x05, 0x1c, 0x7b, 0xf0, 0xe4, 0x7f, 0x90, 0xe0, 0xaf, 0xe1, 0x20,
|
||||
0x7f, 0x3c, 0x7e, 0x45, 0x12, 0x71, 0x61, 0x29, 0x7b, 0x90, 0xee, 0x0f, 0xa3, 0xf0, 0xf0, 0xef,
|
||||
0x46, 0x7f, 0x71, 0x7e, 0x29, 0x12, 0x90, 0x61, 0x11, 0x7b, 0xf0, 0xee, 0xef, 0xa3, 0x7f, 0xf0,
|
||||
0x7e, 0x47, 0x12, 0x71, 0x61, 0x29, 0x7b, 0x90, 0xee, 0x13, 0xa3, 0xf0, 0xf0, 0xef, 0x48, 0x7f,
|
||||
0x71, 0x7e, 0x29, 0x12, 0x90, 0x61, 0x15, 0x7b, 0xf0, 0xee, 0xef, 0xa3, 0x7f, 0xf0, 0x12, 0x04,
|
||||
0xe5, 0x17, 0x7b, 0x90, 0xe0, 0x19, 0x94, 0xc3, 0x7d, 0x57, 0x7c, 0x22, 0x40, 0x71, 0x7f, 0x48,
|
||||
0x7e, 0xd0, 0x12, 0x00, 0xa5, 0x29, 0x00, 0x7d, 0x92, 0x7c, 0x01, 0x7f, 0x00, 0x7e, 0x29, 0x12,
|
||||
0x7d, 0xa5, 0x7c, 0x2c, 0x7f, 0x94, 0x7e, 0x1f, 0x12, 0x00, 0xa5, 0x29, 0x6d, 0x7d, 0x71, 0x7c,
|
||||
0xff, 0x7f, 0x7f, 0x7e, 0x29, 0x12, 0x90, 0xa5, 0x1d, 0x7b, 0xff, 0xe0, 0xe0, 0xa3, 0x7b, 0x90,
|
||||
0xcf, 0x1f, 0xa3, 0xf0, 0xf0, 0xef, 0x6f, 0x7f, 0x71, 0x7e, 0x29, 0x12, 0x90, 0x61, 0x1d, 0x7b,
|
||||
0xf0, 0xee, 0xef, 0xa3, 0x80, 0xf0, 0x7f, 0x27, 0x7e, 0xd2, 0x12, 0x00, 0xa5, 0x29, 0x2c, 0x7d,
|
||||
0x94, 0x7c, 0x0f, 0x7f, 0x00, 0x7e, 0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x00, 0xe4, 0x92, 0xfe, 0xff,
|
||||
0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x6d, 0x7f, 0x71, 0x7e, 0xad, 0x12, 0x01, 0xa5, 0x29, 0x7a, 0x90,
|
||||
0xe0, 0xc0, 0xe2, 0x30, 0x7f, 0x73, 0x7e, 0x23, 0x12, 0x71, 0x61, 0x29, 0x7b, 0x90, 0xef, 0x19,
|
||||
0x7f, 0xf0, 0x7e, 0x29, 0x12, 0x71, 0x61, 0x29, 0x7b, 0x90, 0xee, 0x1a, 0xa3, 0xf0, 0xf0, 0xef,
|
||||
0x22, 0x7d, 0x71, 0x7c, 0xd2, 0x7f, 0x00, 0x7e, 0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x00, 0xe4, 0x92,
|
||||
0xfe, 0xff, 0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x2c, 0x7f, 0x94, 0x7e, 0x0f, 0x12, 0x00, 0xa5, 0x29,
|
||||
0x6d, 0x7d, 0x71, 0x7c, 0xad, 0x7f, 0x01, 0x7e, 0x29, 0x12, 0x90, 0xa5, 0xd2, 0x7f, 0xf0, 0xe4,
|
||||
0xf0, 0xa3, 0x7f, 0x90, 0xf0, 0xd4, 0xf0, 0xa3, 0x57, 0x7d, 0x71, 0x7c, 0x01, 0x7f, 0x12, 0xfe,
|
||||
0xa5, 0x29, 0x16, 0x7d, 0x71, 0x7c, 0x04, 0x7f, 0x00, 0x7e, 0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x18,
|
||||
0x7f, 0x71, 0x7e, 0x03, 0x12, 0x00, 0xa5, 0x29, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0x04, 0xd0,
|
||||
0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xf0, 0xd0,
|
||||
0xe0, 0xd0, 0xe4, 0x32, 0x23, 0xf5, 0x7d, 0x90, 0xe0, 0x68, 0x12, 0xf5, 0xe0, 0xa3, 0x13, 0xf5,
|
||||
0x90, 0xc3, 0x43, 0x7d, 0x95, 0xe0, 0xe5, 0x13, 0x64, 0x12, 0xf8, 0x80, 0x7d, 0x90, 0xe0, 0x42,
|
||||
0x80, 0x64, 0x50, 0x98, 0xe5, 0x07, 0xf0, 0x12, 0xe5, 0xa3, 0xf0, 0x13, 0x90, 0xd3, 0x41, 0x7d,
|
||||
0x95, 0xe0, 0xe5, 0x13, 0x64, 0x12, 0xf8, 0x80, 0x7d, 0x90, 0xe0, 0x40, 0x80, 0x64, 0x40, 0x98,
|
||||
0xe5, 0x07, 0xf0, 0x12, 0xe5, 0xa3, 0xf0, 0x13, 0x7d, 0x90, 0xe0, 0x6a, 0x1a, 0xf5, 0xe0, 0xa3,
|
||||
0x1b, 0xf5, 0x95, 0xc3, 0xf5, 0x13, 0xe5, 0x11, 0x95, 0x1a, 0xf5, 0x12, 0xc3, 0x10, 0x80, 0x64,
|
||||
0x80, 0x94, 0x14, 0x50, 0xff, 0x74, 0x12, 0xf5, 0x13, 0xf5, 0xe5, 0xc3, 0x64, 0x10, 0x94, 0x80,
|
||||
0x50, 0x60, 0x75, 0x1d, 0xe0, 0x10, 0x15, 0x80, 0xf5, 0xe4, 0xf5, 0x12, 0xd3, 0x13, 0x11, 0xe5,
|
||||
0x00, 0x94, 0x10, 0xe5, 0x80, 0x64, 0xa0, 0x94, 0x06, 0x40, 0x10, 0x75, 0x75, 0x20, 0x00, 0x11,
|
||||
0x02, 0x20, 0x02, 0x03, 0x42, 0x10, 0x58, 0x30, 0x02, 0x03, 0x42, 0x10, 0x7d, 0x90, 0xe0, 0x3a,
|
||||
0x0f, 0x54, 0x19, 0xf5, 0x0d, 0x70, 0x7d, 0x90, 0xe0, 0x70, 0x12, 0xf5, 0xe0, 0xa3, 0x13, 0xf5,
|
||||
0x0f, 0x02, 0x74, 0xed, 0x25, 0x08, 0xf5, 0x19, 0xe5, 0x19, 0xd3, 0x19, 0x00, 0x94, 0x25, 0x40,
|
||||
0x11, 0xe5, 0xe0, 0x25, 0x11, 0xf5, 0x10, 0xe5, 0xf5, 0x33, 0x92, 0x10, 0xe5, 0x18, 0x25, 0x13,
|
||||
0xff, 0xe0, 0x12, 0xe5, 0xfe, 0x33, 0x00, 0x7c, 0x25, 0xef, 0xf5, 0x23, 0xec, 0x13, 0xf5, 0x3e,
|
||||
0x15, 0x12, 0x80, 0x19, 0xc2, 0xd4, 0xe5, 0x18, 0xff, 0x10, 0x18, 0x8f, 0x7d, 0x90, 0xe0, 0x3d,
|
||||
0xe4, 0x30, 0xe5, 0x16, 0xa2, 0x12, 0x13, 0xe7, 0x12, 0xf5, 0x13, 0xe5, 0xf5, 0x13, 0x92, 0x13,
|
||||
0xe5, 0x1f, 0xc3, 0x18, 0x45, 0x13, 0xf5, 0x23, 0x90, 0x18, 0x3d, 0x7d, 0x30, 0xe0, 0x26, 0xe5,
|
||||
0x12, 0xe5, 0xe7, 0xa2, 0xf5, 0x13, 0xe5, 0x12, 0x13, 0x13, 0x13, 0xf5, 0x1e, 0x92, 0x12, 0xe5,
|
||||
0xe7, 0xa2, 0xf5, 0x13, 0xe5, 0x12, 0x13, 0x13, 0x13, 0xf5, 0x1f, 0x92, 0x18, 0xe5, 0x13, 0x13,
|
||||
0x3f, 0x54, 0x23, 0x45, 0x18, 0xf5, 0xf5, 0xe4, 0x90, 0x23, 0x73, 0x7d, 0x25, 0xe0, 0xf5, 0x18,
|
||||
0x92, 0x18, 0xe5, 0x18, 0x25, 0x23, 0xf5, 0x13, 0xe4, 0x13, 0x12, 0x35, 0x12, 0xf5, 0xd2, 0xa2,
|
||||
0x18, 0x92, 0x18, 0x20, 0x90, 0x14, 0x71, 0x7d, 0x25, 0xe0, 0xf5, 0x13, 0x90, 0x13, 0x70, 0x7d,
|
||||
0x35, 0xe0, 0xf5, 0x12, 0xa2, 0x12, 0x92, 0xd2, 0x30, 0x18, 0x09, 0x18, 0x12, 0x75, 0x75, 0x7f,
|
||||
0xff, 0x13, 0x18, 0x75, 0xc3, 0xff, 0x12, 0xe5, 0x80, 0x64, 0x80, 0x94, 0x07, 0x50, 0xf5, 0xe4,
|
||||
0xf5, 0x12, 0xf5, 0x13, 0x90, 0x18, 0x73, 0x7d, 0x18, 0xe5, 0x90, 0xf0, 0x70, 0x7d, 0x12, 0xe5,
|
||||
0xa3, 0xf0, 0x13, 0xe5, 0x90, 0xf0, 0x74, 0x7d, 0xf5, 0xe0, 0xa3, 0x1a, 0xf5, 0xe0, 0xc3, 0x1b,
|
||||
0x13, 0xe5, 0x1b, 0x95, 0x11, 0xf5, 0x12, 0xe5, 0x1a, 0x95, 0x10, 0xf5, 0x12, 0x85, 0x85, 0x14,
|
||||
0x15, 0x13, 0x64, 0xc3, 0x94, 0x80, 0x50, 0x80, 0x74, 0x14, 0xf5, 0xff, 0xf5, 0x12, 0xc3, 0x13,
|
||||
0x10, 0xe5, 0x80, 0x64, 0x60, 0x94, 0x1d, 0x50, 0x10, 0x75, 0x80, 0xe0, 0xe4, 0x15, 0x12, 0xf5,
|
||||
0x13, 0xf5, 0xe5, 0xd3, 0x94, 0x11, 0xe5, 0x00, 0x64, 0x10, 0x94, 0x80, 0x40, 0xa0, 0x75, 0x06,
|
||||
0x20, 0x10, 0x11, 0x75, 0xe4, 0x00, 0x23, 0xf5, 0x1c, 0x80, 0x02, 0x20, 0x90, 0x05, 0x78, 0x7d,
|
||||
0x03, 0x80, 0x7d, 0x90, 0xe0, 0x74, 0x14, 0xf5, 0xe0, 0xa3, 0x15, 0xf5, 0x7d, 0x90, 0xe5, 0x70,
|
||||
0xf0, 0x14, 0xe5, 0xa3, 0xf0, 0x15, 0x90, 0xc3, 0x87, 0x7d, 0x95, 0xe0, 0x90, 0x15, 0x86, 0x7d,
|
||||
0x95, 0xe0, 0x50, 0x14, 0xe5, 0x07, 0xf0, 0x14, 0xe5, 0xa3, 0xf0, 0x15, 0x90, 0xd3, 0x85, 0x7d,
|
||||
0x95, 0xe0, 0x90, 0x15, 0x84, 0x7d, 0x95, 0xe0, 0x40, 0x14, 0xe5, 0x07, 0xf0, 0x14, 0xe5, 0xa3,
|
||||
0xf0, 0x15, 0xd0, 0xc0, 0xaf, 0xa2, 0xd1, 0x92, 0xaf, 0xc2, 0x25, 0xe4, 0xf5, 0x15, 0x74, 0x15,
|
||||
0x35, 0x08, 0xf5, 0x14, 0xa2, 0x14, 0x92, 0xd2, 0x30, 0x18, 0xfd, 0x40, 0x7d, 0x90, 0x30, 0xa0,
|
||||
0x09, 0x18, 0x7f, 0x74, 0xa3, 0xf0, 0xff, 0x74, 0x80, 0xf0, 0xe5, 0x07, 0xf0, 0x14, 0xe5, 0xa3,
|
||||
0xf0, 0x15, 0x7d, 0x90, 0xe0, 0x3a, 0x30, 0xa3, 0x17, 0xe5, 0x7d, 0x90, 0xe0, 0xa0, 0xa3, 0xfe,
|
||||
0xff, 0xe0, 0x74, 0xc3, 0x9f, 0xff, 0x7d, 0x90, 0xf0, 0xa1, 0x87, 0x74, 0x90, 0x9e, 0xa0, 0x7d,
|
||||
0x7e, 0xf0, 0x7f, 0x7d, 0x7d, 0xa0, 0x7c, 0x28, 0x12, 0x67, 0xea, 0x2a, 0xd1, 0xa2, 0xaf, 0x92,
|
||||
0xd0, 0xd0, 0x7d, 0x90, 0xe0, 0x3b, 0xe4, 0xff, 0xf8, 0xc4, 0xf0, 0x54, 0xef, 0xc8, 0x54, 0xc4,
|
||||
0x48, 0x0f, 0x0f, 0x54, 0x19, 0xf5, 0x0d, 0x70, 0x7d, 0x90, 0xe0, 0x7a, 0x12, 0xf5, 0xe0, 0xa3,
|
||||
0x13, 0xf5, 0x12, 0x02, 0x74, 0x0c, 0x25, 0x07, 0xf5, 0x19, 0xe5, 0x19, 0xd3, 0x19, 0x00, 0x94,
|
||||
0x25, 0x40, 0x11, 0xe5, 0xe0, 0x25, 0x11, 0xf5, 0x10, 0xe5, 0xf5, 0x33, 0x92, 0x10, 0xe5, 0x18,
|
||||
0x25, 0x13, 0xff, 0xe0, 0x12, 0xe5, 0xfe, 0x33, 0x00, 0x7c, 0x25, 0xef, 0xf5, 0x23, 0xec, 0x13,
|
||||
0xf5, 0x3e, 0x15, 0x12, 0x80, 0x19, 0xc2, 0xd4, 0xe5, 0x18, 0xff, 0x10, 0x18, 0x8f, 0x7d, 0x90,
|
||||
0xe0, 0x3d, 0xe2, 0x30, 0xe5, 0x16, 0xa2, 0x12, 0x13, 0xe7, 0x12, 0xf5, 0x13, 0xe5, 0xf5, 0x13,
|
||||
0x92, 0x13, 0xe5, 0x1f, 0xc3, 0x18, 0x45, 0x13, 0xf5, 0x23, 0x90, 0x18, 0x3d, 0x7d, 0x30, 0xe0,
|
||||
0x26, 0xe3, 0x12, 0xe5, 0xe7, 0xa2, 0xf5, 0x13, 0xe5, 0x12, 0x13, 0x13, 0x13, 0xf5, 0x1e, 0x92,
|
||||
0x12, 0xe5, 0xe7, 0xa2, 0xf5, 0x13, 0xe5, 0x12, 0x13, 0x13, 0x13, 0xf5, 0x1f, 0x92, 0x18, 0xe5,
|
||||
0x13, 0x13, 0x3f, 0x54, 0x23, 0x45, 0x18, 0xf5, 0xf5, 0xe4, 0xc2, 0x23, 0x90, 0x19, 0x7d, 0x7d,
|
||||
0x25, 0xe0, 0xf5, 0x18, 0x92, 0x18, 0xe5, 0x18, 0x25, 0x23, 0xf5, 0x13, 0xe4, 0x13, 0x12, 0x35,
|
||||
0x12, 0xf5, 0xd2, 0xa2, 0x18, 0x92, 0x18, 0x20, 0x90, 0x14, 0x7b, 0x7d, 0x25, 0xe0, 0xf5, 0x13,
|
||||
0x90, 0x13, 0x7a, 0x7d, 0x35, 0xe0, 0xf5, 0x12, 0xa2, 0x12, 0x92, 0xd2, 0x20, 0x18, 0x17, 0x18,
|
||||
0x7d, 0x90, 0xe0, 0x2c, 0xa3, 0xfe, 0xff, 0xe0, 0xe5, 0xd3, 0x9f, 0x13, 0x64, 0xee, 0xf8, 0x80,
|
||||
0x12, 0xe5, 0x80, 0x64, 0x40, 0x98, 0x90, 0x0d, 0x2c, 0x7d, 0xf5, 0xe0, 0xa3, 0x12, 0xf5, 0xe0,
|
||||
0x75, 0x13, 0xff, 0x18, 0xe5, 0xc3, 0x64, 0x12, 0x94, 0x80, 0x50, 0x80, 0xe4, 0x07, 0x12, 0xf5,
|
||||
0x13, 0xf5, 0x18, 0xf5, 0x7d, 0x90, 0xe5, 0x7d, 0xf0, 0x18, 0x7d, 0x90, 0xe5, 0x7a, 0xf0, 0x12,
|
||||
0xe5, 0xa3, 0xf0, 0x13, 0x90, 0xc3, 0x95, 0x7d, 0x95, 0xe0, 0x90, 0x13, 0x94, 0x7d, 0x95, 0xe0,
|
||||
0x50, 0x12, 0xe5, 0x07, 0xf0, 0x12, 0xe5, 0xa3, 0xf0, 0x13, 0x90, 0xd3, 0x93, 0x7d, 0x95, 0xe0,
|
||||
0x90, 0x13, 0x92, 0x7d, 0x95, 0xe0, 0x40, 0x12, 0xe5, 0x07, 0xf0, 0x12, 0xe5, 0xa3, 0xf0, 0x13,
|
||||
0xd0, 0xc0, 0xaf, 0xa2, 0xd1, 0x92, 0xaf, 0xc2, 0x25, 0xe4, 0xf5, 0x13, 0x74, 0x13, 0x35, 0x08,
|
||||
0xf5, 0x12, 0xa2, 0x12, 0x92, 0xd2, 0x20, 0x18, 0x14, 0x18, 0x7d, 0x90, 0xe0, 0x7e, 0xa3, 0xfe,
|
||||
0x25, 0xe0, 0xf5, 0x13, 0xee, 0x13, 0x12, 0x35, 0x12, 0xf5, 0xd2, 0xa2, 0x18, 0x92, 0x40, 0x30,
|
||||
0x90, 0xfd, 0xa0, 0x7d, 0x18, 0x30, 0x74, 0x09, 0xf0, 0x7f, 0x74, 0xa3, 0xf0, 0xff, 0x07, 0x80,
|
||||
0x12, 0xe5, 0xa3, 0xf0, 0x13, 0xe5, 0x90, 0xf0, 0x3a, 0x7d, 0xa3, 0xe0, 0xe6, 0x30, 0x90, 0x17,
|
||||
0xa0, 0x7d, 0xfe, 0xe0, 0xe0, 0xa3, 0xc3, 0xff, 0xff, 0x74, 0x90, 0x9f, 0xa1, 0x7d, 0x74, 0xf0,
|
||||
0x9e, 0x87, 0x7d, 0x90, 0xf0, 0xa0, 0x7d, 0x7e, 0xa0, 0x7f, 0x29, 0x7d, 0x67, 0x7c, 0x2a, 0x12,
|
||||
0xa2, 0xea, 0x92, 0xd1, 0xd0, 0xaf, 0xc2, 0xd0, 0x22, 0x18, 0xf5, 0xe4, 0xd2, 0x2c, 0xc2, 0x40,
|
||||
0x7b, 0x00, 0x7a, 0xff, 0x79, 0x25, 0x90, 0xc1, 0x31, 0x7b, 0x19, 0x12, 0x7b, 0xed, 0x7a, 0x00,
|
||||
0x79, 0x00, 0x90, 0x00, 0x34, 0x7b, 0x19, 0x12, 0x90, 0xed, 0x37, 0x7b, 0x19, 0x12, 0x90, 0xed,
|
||||
0x3a, 0x7b, 0x19, 0x12, 0x90, 0xed, 0x3d, 0x7b, 0x19, 0x12, 0x74, 0xed, 0x90, 0xff, 0xfa, 0x7f,
|
||||
0xa3, 0xf0, 0x90, 0xf0, 0x80, 0x7d, 0xf0, 0xe4, 0x74, 0xa3, 0xf0, 0xff, 0xb8, 0x75, 0x75, 0x38,
|
||||
0x01, 0xf8, 0xa8, 0x75, 0xe4, 0x82, 0xa9, 0xf5, 0xaa, 0xf5, 0xab, 0xf5, 0xff, 0x7b, 0x2b, 0x7a,
|
||||
0x23, 0x79, 0x7b, 0x90, 0x12, 0x5a, 0xed, 0x19, 0x7b, 0x90, 0x12, 0x5d, 0xed, 0x19, 0xd1, 0xd2,
|
||||
0x00, 0x00, 0x90, 0x00, 0xfa, 0x7f, 0x70, 0xe0, 0xa3, 0x02, 0x70, 0xe0, 0x02, 0x03, 0x9b, 0x15,
|
||||
0x7f, 0x90, 0xe0, 0xfa, 0xa3, 0xfe, 0x70, 0xe4, 0xee, 0x02, 0x60, 0xf4, 0x02, 0x03, 0x7c, 0x15,
|
||||
0xf4, 0xe0, 0x03, 0x70, 0x15, 0x02, 0x90, 0x74, 0xfb, 0x7f, 0x64, 0xe0, 0x70, 0xfe, 0x90, 0x23,
|
||||
0xf8, 0x7f, 0xa3, 0xf0, 0x90, 0xf0, 0xfe, 0x7f, 0xff, 0xe0, 0xe0, 0xa3, 0x7f, 0x90, 0xcf, 0xf6,
|
||||
0xa3, 0xf0, 0xf0, 0xef, 0x7f, 0x90, 0xe0, 0xfc, 0xa3, 0xff, 0x90, 0xe0, 0xf4, 0x7f, 0x02, 0xcf,
|
||||
0x39, 0x15, 0x7f, 0x90, 0xe0, 0xfb, 0xfd, 0x64, 0x2a, 0x70, 0xd0, 0xc0, 0xaf, 0xa2, 0xd1, 0x92,
|
||||
0xaf, 0xc2, 0x7f, 0x90, 0xf0, 0xf8, 0xf0, 0xa3, 0x7f, 0x7e, 0xf6, 0x7f, 0x12, 0x7d, 0x11, 0x7c,
|
||||
0x2a, 0x12, 0x7e, 0xca, 0x7f, 0x7f, 0x7d, 0xf4, 0x7c, 0x13, 0x12, 0x11, 0xca, 0x2a, 0x40, 0x30,
|
||||
0x02, 0xfd, 0x5b, 0x14, 0x7f, 0x90, 0xe0, 0xfb, 0xc0, 0x64, 0x03, 0x60, 0x14, 0x02, 0xc0, 0x64,
|
||||
0xa2, 0xd0, 0x92, 0xaf, 0xc2, 0xd1, 0x90, 0xaf, 0xf8, 0x7f, 0xa3, 0xe0, 0x54, 0xe0, 0x90, 0x7f,
|
||||
0x57, 0x7b, 0xe0, 0xf0, 0xd3, 0xff, 0x1c, 0x94, 0x0d, 0x40, 0x7f, 0x90, 0x74, 0xf8, 0xf0, 0xff,
|
||||
0x74, 0xa3, 0xf0, 0xfc, 0x14, 0x02, 0x90, 0x5b, 0xf9, 0x7f, 0x30, 0xe0, 0x25, 0xe7, 0x7f, 0x7c,
|
||||
0xf6, 0x7d, 0x74, 0xc3, 0x9f, 0xf6, 0x74, 0xfe, 0x94, 0x7f, 0x90, 0x00, 0x53, 0x7b, 0xa3, 0xf0,
|
||||
0xf0, 0xce, 0x7f, 0x90, 0xe0, 0xf6, 0xa3, 0xff, 0x90, 0xe0, 0x55, 0x7b, 0xf0, 0xcf, 0xef, 0xa3,
|
||||
0x80, 0xf0, 0x90, 0x26, 0xf6, 0x7f, 0xff, 0xe0, 0xe0, 0xa3, 0x7b, 0x90, 0xcf, 0x53, 0xa3, 0xf0,
|
||||
0xf0, 0xef, 0xf6, 0x7f, 0x7b, 0x90, 0xe0, 0x57, 0xc3, 0xfd, 0xf6, 0x74, 0xfe, 0x9d, 0x7f, 0x74,
|
||||
0x00, 0x94, 0x7b, 0x90, 0xf0, 0x55, 0xce, 0xa3, 0x90, 0xf0, 0x57, 0x7b, 0xd3, 0xe0, 0x00, 0x94,
|
||||
0x2a, 0x40, 0x7b, 0x90, 0xe4, 0x53, 0xf0, 0x75, 0x12, 0x01, 0x93, 0x18, 0xf0, 0x85, 0xf5, 0x82,
|
||||
0xe0, 0x83, 0x90, 0xff, 0x55, 0x7b, 0x75, 0xe4, 0x01, 0xf0, 0x18, 0x12, 0x85, 0x93, 0x82, 0xf0,
|
||||
0x83, 0xf5, 0xf0, 0xef, 0x7b, 0x90, 0xe0, 0x57, 0xf0, 0x14, 0xcd, 0x80, 0x90, 0xe4, 0xf8, 0x7f,
|
||||
0xa3, 0xf0, 0xa2, 0xf0, 0x92, 0xd1, 0xd0, 0xaf, 0x02, 0xd0, 0x94, 0x15, 0x7f, 0x90, 0xe0, 0xfb,
|
||||
0x80, 0x64, 0x5b, 0x70, 0x7f, 0x90, 0xf0, 0xf8, 0xf0, 0xa3, 0xa8, 0xaf, 0x7f, 0x90, 0xf0, 0xf6,
|
||||
0xef, 0xa3, 0xaf, 0xf0, 0x90, 0xa9, 0xf4, 0x7f, 0xf0, 0xe4, 0xef, 0xa3, 0xaf, 0xf0, 0x90, 0xaa,
|
||||
0xf2, 0x7f, 0xf0, 0xe4, 0xef, 0xa3, 0xaf, 0xf0, 0x90, 0xab, 0xf0, 0x7f, 0xf0, 0xe4, 0xef, 0xa3,
|
||||
0xaf, 0xf0, 0x90, 0xb8, 0xee, 0x7f, 0xf0, 0xe4, 0xef, 0xa3, 0xaf, 0xf0, 0x90, 0xf8, 0xec, 0x7f,
|
||||
0xf0, 0xe4, 0xef, 0xa3, 0xaf, 0xf0, 0x90, 0xd0, 0xea, 0x7f, 0xf0, 0xe4, 0xef, 0xa3, 0xa2, 0xf0,
|
||||
0xe4, 0x40, 0x33, 0xff, 0x7f, 0x90, 0xcf, 0xe8, 0xa3, 0xf0, 0xf0, 0xef, 0x15, 0x02, 0x90, 0x94,
|
||||
0xfb, 0x7f, 0x64, 0xe0, 0x70, 0x88, 0x90, 0x49, 0xf6, 0x7f, 0xa3, 0xe0, 0xf5, 0xe0, 0x90, 0xa8,
|
||||
0xf4, 0x7f, 0xa3, 0xe0, 0xf5, 0xe0, 0x90, 0xa9, 0xf2, 0x7f, 0xa3, 0xe0, 0xf5, 0xe0, 0x90, 0xaa,
|
||||
0xf0, 0x7f, 0xa3, 0xe0, 0xf5, 0xe0, 0x90, 0xab, 0xee, 0x7f, 0xa3, 0xe0, 0xf5, 0xe0, 0x90, 0xb8,
|
||||
0xec, 0x7f, 0xa3, 0xe0, 0xf5, 0xe0, 0x90, 0xf8, 0xea, 0x7f, 0xa3, 0xe0, 0xf5, 0xe0, 0x90, 0xd0,
|
||||
0xe8, 0x7f, 0xfe, 0xe0, 0xe0, 0xa3, 0xee, 0xff, 0x24, 0x4f, 0x92, 0xff, 0xe4, 0x40, 0x5c, 0x80,
|
||||
0x7f, 0x90, 0xe0, 0xfb, 0x89, 0x64, 0x06, 0x70, 0x29, 0x12, 0xe4, 0x3a, 0x4e, 0x80, 0x7f, 0x90,
|
||||
0xe0, 0xfb, 0x82, 0x64, 0x11, 0x70, 0x7f, 0x90, 0xf0, 0xf8, 0xf0, 0xa3, 0x81, 0xaf, 0x7f, 0x90,
|
||||
0xf0, 0xf6, 0xef, 0xa3, 0x80, 0xf0, 0x90, 0x55, 0xfb, 0x7f, 0x64, 0xe0, 0x70, 0x83, 0x90, 0x10,
|
||||
0x80, 0x7d, 0xa3, 0xf0, 0x90, 0xf0, 0xf8, 0x7f, 0xa3, 0xf0, 0xd2, 0xf0, 0x80, 0x00, 0x90, 0x3d,
|
||||
0xfb, 0x7f, 0x64, 0xe0, 0x70, 0x84, 0x90, 0x13, 0x80, 0x7d, 0xa3, 0xf0, 0xff, 0x74, 0xe4, 0xf0,
|
||||
0x7f, 0x90, 0xf0, 0xf8, 0xf0, 0xa3, 0x00, 0xc2, 0x22, 0x80, 0xff, 0x74, 0x7f, 0x90, 0xf0, 0xf8,
|
||||
0xf0, 0xa3, 0x18, 0x80, 0x7b, 0x90, 0x12, 0x31, 0xe4, 0x19, 0x4a, 0xe9, 0x05, 0x60, 0x1a, 0x12,
|
||||
0x80, 0x1c, 0x90, 0x09, 0xf8, 0x7f, 0xff, 0x74, 0xa3, 0xf0, 0xf0, 0x14, 0x90, 0xe4, 0xfa, 0x7f,
|
||||
0xa3, 0xf0, 0x12, 0xf0, 0xff, 0x15, 0x13, 0x02, 0xc2, 0x1b, 0x80, 0xaf, 0x32, 0xfe, 0xe0, 0xc0,
|
||||
0xd0, 0xe5, 0x18, 0x54, 0x08, 0x64, 0x03, 0x70, 0xe0, 0xd0, 0xd0, 0x32, 0x12, 0xe0, 0xa5, 0x15,
|
||||
0xd0, 0x85, 0x75, 0x0b, 0x08, 0xd0, 0xe0, 0xaa, 0x8c, 0xc2, 0x8a, 0xe5, 0xf7, 0x24, 0x8a, 0xf5,
|
||||
0x8c, 0xe5, 0xd8, 0x34, 0x8c, 0xf5, 0x8c, 0xd2, 0x24, 0xec, 0xf8, 0x38, 0xbc, 0xe6, 0x02, 0x04,
|
||||
0x7f, 0x74, 0x95, 0xc3, 0xb4, 0x81, 0x00, 0x01, 0xbf, 0x40, 0x05, 0x79, 0x2d, 0x78, 0xe6, 0x16,
|
||||
0x70, 0x08, 0xc2, 0x0b, 0xe6, 0xaf, 0xe1, 0x30, 0x44, 0x03, 0xf6, 0x18, 0xaf, 0xd2, 0xd9, 0x08,
|
||||
0xea, 0xed, 0xd0, 0x8b, 0x08, 0xd2, 0xe5, 0x22, 0xff, 0x0c, 0x24, 0x23, 0xf8, 0x2e, 0x08, 0x0f,
|
||||
0xef, 0x08, 0x0c, 0xb5, 0x10, 0x06, 0x03, 0x08, 0x87, 0x43, 0xbf, 0x01, 0x04, 0x05, 0x00, 0x7f,
|
||||
0x2e, 0x78, 0x30, 0xe6, 0xe8, 0xe4, 0xe5, 0x00, 0xc3, 0x0c, 0x50, 0x9f, 0x05, 0x20, 0x74, 0x0c,
|
||||
0x25, 0x37, 0xf8, 0x0c, 0xfd, 0xe6, 0x81, 0xa6, 0xe6, 0x08, 0x0c, 0xae, 0x04, 0xbe, 0x74, 0x02,
|
||||
0xcd, 0x7f, 0xe8, 0xf8, 0x60, 0x6d, 0x08, 0xe0, 0xc0, 0xe6, 0x80, 0xe0, 0xe5, 0xf6, 0xd3, 0x0c,
|
||||
0x40, 0x9f, 0xe5, 0x27, 0x24, 0x0c, 0xf8, 0x38, 0xae, 0xe6, 0xbe, 0x0c, 0x02, 0x04, 0x7f, 0x74,
|
||||
0x18, 0xfd, 0xcd, 0xe6, 0xe5, 0xf8, 0x6d, 0x81, 0x06, 0x60, 0xe0, 0xd0, 0x18, 0xf6, 0xf5, 0x80,
|
||||
0x0c, 0xe5, 0x37, 0x24, 0xf6, 0xc8, 0x0c, 0x15, 0xd3, 0x80, 0x0c, 0xe5, 0x24, 0x23, 0xf8, 0x2e,
|
||||
0x04, 0x7f, 0xaf, 0xc2, 0x30, 0xe6, 0x03, 0xe0, 0xe2, 0x10, 0x7f, 0x0c, 0x30, 0x00, 0x07, 0xe1,
|
||||
0xe3, 0x30, 0x7f, 0x04, 0x54, 0x08, 0x54, 0xf4, 0xc6, 0x7c, 0xaf, 0xd2, 0x80, 0x54, 0x07, 0x42,
|
||||
0x78, 0x22, 0xa6, 0x37, 0x74, 0x81, 0x60, 0x04, 0xff, 0x06, 0x76, 0x08, 0xdf, 0x7f, 0x7f, 0xfb,
|
||||
0xe4, 0x05, 0x2d, 0x78, 0x08, 0xf6, 0x08, 0xf6, 0xfa, 0xdf, 0x2e, 0x78, 0x30, 0x76, 0x2b, 0x90,
|
||||
0x74, 0x19, 0x93, 0x01, 0xe0, 0xc0, 0x93, 0xe4, 0xe0, 0xc0, 0x89, 0x43, 0x75, 0x01, 0xf0, 0x8a,
|
||||
0x8c, 0x75, 0xd2, 0xd8, 0xd2, 0x8c, 0xd2, 0xaf, 0x22, 0xa9, 0xef, 0x04, 0x94, 0xd3, 0x40, 0x04,
|
||||
0x7f, 0x03, 0x22, 0xff, 0x2e, 0x74, 0x2f, 0x2f, 0xe6, 0xf8, 0xe5, 0x20, 0xc2, 0xf4, 0xe6, 0xaf,
|
||||
0x30, 0x44, 0xd2, 0xf6, 0xae, 0xaf, 0xee, 0x0c, 0x9f, 0xc3, 0x21, 0x50, 0x74, 0x0e, 0x2e, 0x37,
|
||||
0xe6, 0xf8, 0x08, 0xf9, 0x18, 0xe6, 0x04, 0xbe, 0x74, 0x02, 0xfd, 0x7f, 0x69, 0xed, 0x09, 0x60,
|
||||
0xe7, 0x09, 0x19, 0x19, 0x09, 0xf7, 0x80, 0x09, 0x16, 0xf3, 0x80, 0x16, 0xee, 0xda, 0x9f, 0xd3,
|
||||
0x04, 0x40, 0x81, 0x05, 0x81, 0x05, 0xd3, 0xee, 0x40, 0x9f, 0x74, 0x22, 0x2e, 0x37, 0x08, 0xf8,
|
||||
0xf9, 0xe6, 0xb5, 0xee, 0x02, 0x0c, 0x81, 0xa9, 0x06, 0x18, 0xe6, 0x06, 0xed, 0xfd, 0x60, 0x69,
|
||||
0x19, 0x09, 0xe7, 0x19, 0x09, 0x09, 0x19, 0xf7, 0xf3, 0x80, 0x80, 0x1e, 0xef, 0xd9, 0x37, 0x24,
|
||||
0xe6, 0xf8, 0xf8, 0x04, 0x2f, 0xef, 0x90, 0x04, 0x19, 0x2b, 0xf6, 0x93, 0xef, 0x08, 0x93, 0x2f,
|
||||
0x7f, 0xf6, 0x22, 0x00, 0xd3, 0xef, 0x04, 0x94, 0x03, 0x40, 0xff, 0x7f, 0xef, 0x22, 0x24, 0x23,
|
||||
0xf8, 0x2e, 0x30, 0xe6, 0xf4, 0xe5, 0xaf, 0xc2, 0x54, 0xe6, 0xf6, 0x8c, 0xaf, 0xd2, 0x0c, 0xe5,
|
||||
0x07, 0xb5, 0x74, 0x0a, 0x2f, 0x37, 0xe6, 0xf8, 0x81, 0xf5, 0x15, 0x02, 0x50, 0xff, 0x74, 0x2e,
|
||||
0x2f, 0x38, 0xe6, 0xf8, 0x04, 0xbf, 0x74, 0x02, 0xfd, 0x7f, 0xe6, 0x18, 0x74, 0xf9, 0x2f, 0x37,
|
||||
0xfb, 0xf8, 0xfc, 0xe6, 0x6c, 0xe9, 0x08, 0x60, 0x05, 0xa8, 0xf6, 0xe7, 0x19, 0x1d, 0xf4, 0x80,
|
||||
0x03, 0xa8, 0x05, 0xa6, 0xe5, 0x1f, 0xb5, 0x0c, 0xe3, 0x07, 0x00, 0x7f, 0x74, 0x22, 0x2f, 0x38,
|
||||
0xe6, 0xf8, 0x18, 0xfd, 0x01, 0x86, 0x74, 0x0f, 0x2f, 0x37, 0xa6, 0xf8, 0x08, 0x01, 0x04, 0x86,
|
||||
0x0c, 0xe5, 0x07, 0xb5, 0xac, 0x02, 0xed, 0x81, 0x60, 0x6c, 0x0d, 0x08, 0xa8, 0x09, 0xe6, 0x05,
|
||||
0x80, 0xf7, 0xe5, 0xf4, 0xb5, 0x0c, 0xde, 0x07, 0x81, 0x89, 0x00, 0x7f, 0xef, 0x22, 0x94, 0xd3,
|
||||
0x40, 0x04, 0x7f, 0x03, 0x22, 0xff, 0x23, 0xef, 0x2e, 0x24, 0xc2, 0xf8, 0xe6, 0xaf, 0xe5, 0x30,
|
||||
0x30, 0x05, 0x02, 0xe0, 0xe4, 0xd2, 0xe2, 0xd2, 0xd2, 0xc6, 0x7f, 0xaf, 0x30, 0x00, 0x01, 0xe2,
|
||||
0x02, 0x0f, 0xfc, 0x15, 0xf0, 0x8f, 0xff, 0xe4, 0xe5, 0xfe, 0x23, 0x0c, 0x2d, 0x24, 0xc2, 0xf8,
|
||||
0x30, 0xa9, 0x0d, 0xf7, 0x08, 0x7f, 0x60, 0xe6, 0x2d, 0x0b, 0x60, 0xf6, 0x50, 0x32, 0x80, 0x30,
|
||||
0x30, 0x07, 0x06, 0xf1, 0xf6, 0xed, 0x27, 0x60, 0x02, 0x7e, 0x30, 0x08, 0x10, 0xf0, 0xaf, 0xc2,
|
||||
0x10, 0xe6, 0x25, 0xe7, 0x30, 0x0e, 0x0c, 0xe2, 0xaf, 0xd2, 0x04, 0x7f, 0x14, 0x80, 0xaf, 0xc2,
|
||||
0x10, 0xe6, 0x15, 0xe7, 0xec, 0x54, 0xf6, 0x4e, 0xaf, 0xd2, 0xa9, 0xd2, 0x15, 0x02, 0x7f, 0xff,
|
||||
0x08, 0x08, 0x44, 0xef, 0xf4, 0x83, 0xaf, 0xc2, 0xc6, 0x56, 0xaf, 0xd2, 0xa9, 0xd2, 0x80, 0x54,
|
||||
0xff, 0x4f, 0xef, 0x22, 0xf0, 0x8d, 0xa8, 0xa4, 0xcf, 0xf0, 0xf0, 0x8c, 0x28, 0xa4, 0x8d, 0xce,
|
||||
0xa4, 0xf0, 0xfe, 0x2e, 0xc5, 0x22, 0xf8, 0xf0, 0xe0, 0xa3, 0xf0, 0x28, 0xf0, 0xc5, 0xe5, 0xf8,
|
||||
0x15, 0x82, 0x70, 0x82, 0x15, 0x02, 0xe0, 0x83, 0xf0, 0x38, 0xa3, 0x22, 0xe0, 0xf8, 0xf0, 0xc5,
|
||||
0xf0, 0x25, 0xe5, 0xf0, 0x15, 0x82, 0x70, 0x82, 0x15, 0x02, 0xe0, 0x83, 0x38, 0xc8, 0xe8, 0xf0,
|
||||
0xef, 0x22, 0xff, 0x2b, 0x3a, 0xee, 0xed, 0xfe, 0xfd, 0x39, 0x38, 0xec, 0x22, 0xfc, 0xef, 0xc3,
|
||||
0xff, 0x9b, 0x9a, 0xee, 0xed, 0xfe, 0xfd, 0x99, 0x98, 0xec, 0x22, 0xfc, 0x8f, 0xe8, 0xa4, 0xf0,
|
||||
0x8b, 0xcc, 0xa4, 0xf0, 0xfc, 0x2c, 0x8e, 0xe9, 0xa4, 0xf0, 0xfc, 0x2c, 0xf0, 0x8a, 0xa4, 0xed,
|
||||
0xfc, 0x2c, 0x8e, 0xea, 0xa4, 0xf0, 0xa8, 0xcd, 0x8b, 0xf0, 0xa4, 0xf0, 0xcc, 0x2d, 0x25, 0x38,
|
||||
0xfd, 0xf0, 0x8f, 0xe9, 0xa4, 0xf0, 0xcd, 0x2c, 0xf0, 0x35, 0xeb, 0xfc, 0xf0, 0x8e, 0xfe, 0xa4,
|
||||
0xf0, 0xa9, 0x8f, 0xeb, 0xa4, 0xf0, 0xc5, 0xcf, 0x2e, 0xf0, 0x39, 0xcd, 0xe4, 0xfe, 0xfc, 0x3c,
|
||||
0xa4, 0xea, 0xce, 0x2d, 0xf0, 0x35, 0xe4, 0xfd, 0xfc, 0x3c, 0xc3, 0x22, 0x9f, 0xe4, 0xe4, 0xff,
|
||||
0xfe, 0x9e, 0x9d, 0xe4, 0xe4, 0xfd, 0xfc, 0x9c, 0xeb, 0x22, 0xf5, 0x9f, 0xea, 0xf0, 0x42, 0x9e,
|
||||
0xe9, 0xf0, 0x42, 0x9d, 0xec, 0xf0, 0x80, 0x64, 0x64, 0xc8, 0x98, 0x80, 0xf0, 0x45, 0xeb, 0x22,
|
||||
0xf5, 0x9f, 0xea, 0xf0, 0x42, 0x9e, 0xe9, 0xf0, 0x42, 0x9d, 0xe8, 0xf0, 0x45, 0x9c, 0x22, 0xf0,
|
||||
0x60, 0xe8, 0xec, 0x10, 0xe7, 0xa2, 0xfc, 0x13, 0x13, 0xed, 0xee, 0xfd, 0xfe, 0x13, 0x13, 0xef,
|
||||
0xd8, 0xff, 0x22, 0xf0, 0x60, 0xe8, 0xef, 0x0f, 0x33, 0xc3, 0xee, 0xff, 0xfe, 0x33, 0x33, 0xed,
|
||||
0xec, 0xfd, 0xfc, 0x33, 0xf1, 0xd8, 0xe0, 0x22, 0xa3, 0xfc, 0xfd, 0xe0, 0xe0, 0xa3, 0xa3, 0xfe,
|
||||
0xff, 0xe0, 0xe4, 0x22, 0xfc, 0x93, 0x01, 0x74, 0xfd, 0x93, 0x02, 0x74, 0xfe, 0x93, 0x03, 0x74,
|
||||
0xff, 0x93, 0xe0, 0x22, 0xa3, 0xf8, 0xf9, 0xe0, 0xe0, 0xa3, 0xa3, 0xfa, 0xfb, 0xe0, 0xe4, 0x22,
|
||||
0xf8, 0x93, 0x01, 0x74, 0xf9, 0x93, 0x02, 0x74, 0xfa, 0x93, 0x03, 0x74, 0xfb, 0x93, 0xec, 0x22,
|
||||
0xa3, 0xf0, 0xf0, 0xed, 0xee, 0xa3, 0xa3, 0xf0, 0xf0, 0xef, 0xa8, 0x22, 0x85, 0x82, 0xf0, 0x83,
|
||||
0x83, 0xd0, 0x82, 0xd0, 0x19, 0x12, 0x12, 0xca, 0xca, 0x19, 0x19, 0x12, 0x12, 0xca, 0xca, 0x19,
|
||||
0x73, 0xe4, 0x93, 0xe4, 0xc5, 0xa3, 0xc5, 0x83, 0xc5, 0xf0, 0xc8, 0x83, 0x82, 0xc5, 0xf0, 0xc8,
|
||||
0xc5, 0xa3, 0xc5, 0x83, 0xc5, 0xf0, 0xc8, 0x83, 0x82, 0xc5, 0x22, 0xc8, 0xfb, 0xe0, 0xe0, 0xa3,
|
||||
0xa3, 0xfa, 0xf9, 0xe0, 0xeb, 0x22, 0xa3, 0xf0, 0xf0, 0xea, 0xe9, 0xa3, 0x22, 0xf0, 0x83, 0xd0,
|
||||
0x82, 0xd0, 0xe4, 0xf8, 0x70, 0x93, 0x74, 0x12, 0x93, 0x01, 0x0d, 0x70, 0xa3, 0xa3, 0xf8, 0x93,
|
||||
0x01, 0x74, 0xf5, 0x93, 0x88, 0x82, 0xe4, 0x83, 0x74, 0x73, 0x93, 0x02, 0x60, 0x68, 0xa3, 0xef,
|
||||
0xa3, 0xa3, 0xdf, 0x80, 0x83, 0x8a, 0x82, 0x89, 0x73, 0xe4, 0xf0, 0x75, 0x75, 0x08, 0x00, 0x82,
|
||||
0x2f, 0xef, 0xee, 0xff, 0xfe, 0x33, 0x33, 0xcd, 0xcc, 0xcd, 0xcc, 0x33, 0x82, 0xc5, 0xc5, 0x33,
|
||||
0x9b, 0x82, 0x9a, 0xed, 0x99, 0xec, 0x82, 0xe5, 0x40, 0x98, 0xf5, 0x0c, 0xee, 0x82, 0xfe, 0x9b,
|
||||
0x9a, 0xed, 0xec, 0xfd, 0xfc, 0x99, 0xd5, 0x0f, 0xd6, 0xf0, 0xce, 0xe4, 0xe4, 0xfb, 0xfa, 0xcd,
|
||||
0xcc, 0xe4, 0xa8, 0xf9, 0x22, 0x82, 0x00, 0xb8, 0xb9, 0xc1, 0x59, 0x00, 0x00, 0xba, 0xec, 0x2d,
|
||||
0xf0, 0x8b, 0xcf, 0x84, 0xcd, 0xce, 0xe5, 0xfc, 0xcb, 0xf0, 0x78, 0xf9, 0xef, 0x18, 0xff, 0x2f,
|
||||
0x33, 0xee, 0xed, 0xfe, 0xfd, 0x33, 0x33, 0xec, 0xeb, 0xfc, 0xfb, 0x33, 0xd7, 0x10, 0x99, 0x03,
|
||||
0x04, 0x40, 0x99, 0xeb, 0x0f, 0xfb, 0xe5, 0xd8, 0xf9, 0xe4, 0x22, 0xfa, 0x18, 0x78, 0x2f, 0xef,
|
||||
0xee, 0xff, 0xfe, 0x33, 0x33, 0xed, 0xec, 0xfd, 0xfc, 0x33, 0x33, 0xc9, 0x10, 0xc9, 0x05, 0xd7,
|
||||
0xe9, 0x9b, 0x40, 0x9a, 0xec, 0x07, 0xfc, 0x9b, 0x9a, 0xe9, 0x0f, 0xf9, 0xe0, 0xd8, 0xc9, 0xe4,
|
||||
0xe4, 0xfa, 0xfb, 0xcc, 0x75, 0x22, 0x10, 0xf0, 0x2f, 0xef, 0xee, 0xff, 0xfe, 0x33, 0x33, 0xed,
|
||||
0xcc, 0xfd, 0xcc, 0x33, 0x33, 0xc8, 0x10, 0xc8, 0x07, 0xd7, 0xec, 0x9b, 0xe8, 0x9a, 0x40, 0x99,
|
||||
0xed, 0x0a, 0xfd, 0x9b, 0x9a, 0xec, 0xe8, 0xfc, 0xf8, 0x99, 0xd5, 0x0f, 0xda, 0xf0, 0xcd, 0xe4,
|
||||
0xe4, 0xfb, 0xfa, 0xcc, 0xc8, 0xe4, 0x22, 0xf9, 0x7b, 0x90, 0xee, 0x21, 0xa3, 0xf0, 0xf0, 0xef,
|
||||
0x7b, 0x90, 0xe0, 0x0d, 0x55, 0x64, 0x04, 0x70, 0xe0, 0xa3, 0xaa, 0x64, 0x16, 0x60, 0x7b, 0x90,
|
||||
0x74, 0x0d, 0xf0, 0x55, 0x74, 0xa3, 0xf0, 0xaa, 0x7b, 0x90, 0x74, 0x0c, 0xf0, 0xae, 0x7b, 0x90,
|
||||
0x74, 0x0a, 0xf0, 0x3c, 0x3b, 0x7f, 0x94, 0x7e, 0x29, 0x12, 0x90, 0x61, 0x2d, 0x7b, 0xf0, 0xee,
|
||||
0xef, 0xa3, 0x7f, 0xf0, 0x7e, 0x3a, 0x12, 0x94, 0x61, 0x29, 0x7b, 0x90, 0xee, 0x2f, 0xa3, 0xf0,
|
||||
0xf0, 0xef, 0x7b, 0x90, 0xe0, 0x21, 0xa3, 0xfa, 0xfb, 0xe0, 0x01, 0x64, 0x70, 0x4a, 0x90, 0x13,
|
||||
0x2d, 0x7b, 0x19, 0x12, 0xef, 0x6f, 0x68, 0x24, 0xee, 0xff, 0x14, 0x34, 0xed, 0xfe, 0xa5, 0x34,
|
||||
0x27, 0x80, 0x64, 0xeb, 0x4a, 0x02, 0x7b, 0x90, 0x70, 0x2d, 0x12, 0x10, 0x6f, 0x19, 0x24, 0xef,
|
||||
0xff, 0x18, 0x34, 0xee, 0xfe, 0x2a, 0x34, 0xed, 0x80, 0x7d, 0x12, 0x0e, 0x6f, 0x19, 0x24, 0xef,
|
||||
0xff, 0x68, 0x34, 0xee, 0xfe, 0x14, 0x34, 0xed, 0xfd, 0xa5, 0x34, 0xec, 0xfc, 0xff, 0x7b, 0x90,
|
||||
0x12, 0x25, 0xa7, 0x19, 0x7b, 0x90, 0x12, 0x2d, 0x6f, 0x19, 0x7b, 0x90, 0x12, 0x04, 0xa7, 0x19,
|
||||
0x7b, 0x90, 0xe0, 0x0a, 0xf0, 0x14, 0xd3, 0xe0, 0x3c, 0x94, 0x03, 0x40, 0x3c, 0x74, 0x90, 0xf0,
|
||||
0x0a, 0x7b, 0x60, 0xe0, 0x02, 0x03, 0x67, 0x1d, 0x3c, 0x74, 0xe4, 0xf0, 0xfe, 0xff, 0xfc, 0xfd,
|
||||
0x7b, 0x90, 0x12, 0x25, 0x8b, 0x19, 0x12, 0xd3, 0x21, 0x19, 0x08, 0x40, 0x7b, 0x90, 0x12, 0x25,
|
||||
0x6f, 0x19, 0x09, 0x80, 0x7b, 0x90, 0x12, 0x25, 0x6f, 0x19, 0x19, 0x12, 0x90, 0x13, 0x2d, 0x7b,
|
||||
0x19, 0x12, 0xe4, 0xa7, 0xfe, 0xff, 0x01, 0x7d, 0x90, 0xfc, 0x2d, 0x7b, 0x19, 0x12, 0xd3, 0x8b,
|
||||
0x19, 0x12, 0x40, 0x37, 0xe4, 0x09, 0x7b, 0x90, 0xf0, 0x23, 0xf0, 0xa3, 0x0f, 0x80, 0x7b, 0x90,
|
||||
0xe0, 0x2f, 0xa3, 0xff, 0x90, 0xe0, 0x23, 0x7b, 0xf0, 0xcf, 0xef, 0xa3, 0x90, 0xf0, 0x0c, 0x7b,
|
||||
0x60, 0xe0, 0x24, 0x20, 0x70, 0xef, 0xc3, 0x33, 0x7b, 0x90, 0xe0, 0x24, 0xf4, 0x94, 0x7b, 0x90,
|
||||
0xe0, 0x23, 0x01, 0x94, 0x1c, 0x50, 0x7b, 0x90, 0xe0, 0x0b, 0xf0, 0x14, 0x70, 0xe0, 0xa3, 0x4c,
|
||||
0x80, 0xf0, 0xd3, 0x48, 0x7b, 0x90, 0xe0, 0x24, 0xf4, 0x94, 0x7b, 0x90, 0xe0, 0x23, 0x01, 0x94,
|
||||
0x39, 0x40, 0x7b, 0x90, 0x74, 0x0c, 0xf0, 0xae, 0x31, 0x80, 0x22, 0x7d, 0x94, 0x7c, 0x06, 0x7f,
|
||||
0x00, 0x7e, 0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x2e, 0x7f, 0x94, 0x7e, 0x0a, 0x12, 0x00, 0xa5, 0x29,
|
||||
0x7b, 0x90, 0x74, 0x0b, 0xf0, 0x0c, 0x90, 0xc3, 0x24, 0x7b, 0x94, 0xe0, 0x90, 0xf4, 0x23, 0x7b,
|
||||
0x94, 0xe0, 0x50, 0x01, 0x90, 0x06, 0x0c, 0x7b, 0x11, 0x74, 0x90, 0xf0, 0x0b, 0x7b, 0x64, 0xe0,
|
||||
0x60, 0x0c, 0x02, 0x03, 0x67, 0x1d, 0xe0, 0xa3, 0x11, 0x64, 0x03, 0x60, 0x1d, 0x02, 0x7d, 0x67,
|
||||
0x7c, 0x2c, 0xff, 0x94, 0x12, 0xfe, 0xa5, 0x29, 0x22, 0x7f, 0x94, 0x7e, 0x29, 0x12, 0x90, 0x61,
|
||||
0x23, 0x7b, 0xf0, 0xee, 0xef, 0xa3, 0x64, 0xf0, 0x4e, 0x08, 0x0a, 0x60, 0x7b, 0x90, 0xe4, 0x23,
|
||||
0xf0, 0x75, 0x12, 0x01, 0x7d, 0x18, 0x7b, 0x90, 0xe0, 0x23, 0xa3, 0xfe, 0xff, 0xe0, 0x22, 0x7d,
|
||||
0x94, 0x7c, 0x29, 0x12, 0x7f, 0xa5, 0x7e, 0x2e, 0x12, 0x94, 0x61, 0x29, 0x7b, 0x90, 0xee, 0x23,
|
||||
0xa3, 0xf0, 0xf0, 0xef, 0x08, 0x64, 0x70, 0x4e, 0x02, 0x03, 0x5c, 0x1d, 0x7b, 0x90, 0x74, 0x23,
|
||||
0xf5, 0xff, 0x12, 0xf0, 0x7d, 0x18, 0x7b, 0x90, 0xe0, 0x23, 0xa3, 0xfe, 0xff, 0xe0, 0x2e, 0x7d,
|
||||
0x94, 0x7c, 0x29, 0x12, 0x7f, 0xa5, 0x7e, 0x3b, 0x12, 0x94, 0x61, 0x29, 0x7b, 0x90, 0xee, 0x29,
|
||||
0xa3, 0xf0, 0xf0, 0xef, 0x3a, 0x7f, 0x94, 0x7e, 0x29, 0x12, 0x90, 0x61, 0x2b, 0x7b, 0xf0, 0xee,
|
||||
0xef, 0xa3, 0x7f, 0xf0, 0x7e, 0x35, 0x12, 0x94, 0x61, 0x29, 0x7b, 0x90, 0xee, 0x2d, 0xa3, 0xf0,
|
||||
0xf0, 0xef, 0x34, 0x7f, 0x94, 0x7e, 0x29, 0x12, 0x90, 0x61, 0x2f, 0x7b, 0xf0, 0xee, 0xef, 0xa3,
|
||||
0x90, 0xf0, 0x29, 0x7b, 0x19, 0x12, 0x90, 0x6f, 0x2d, 0x7b, 0x19, 0x12, 0x12, 0x8b, 0xb6, 0x18,
|
||||
0x7b, 0x90, 0x12, 0x29, 0xa7, 0x19, 0x7b, 0x90, 0xe0, 0x29, 0xa3, 0xfe, 0xff, 0xe0, 0x31, 0x7d,
|
||||
0x94, 0x7c, 0x29, 0x12, 0x90, 0xa5, 0x2b, 0x7b, 0xfe, 0xe0, 0xe0, 0xa3, 0x7d, 0xff, 0x7c, 0x30,
|
||||
0x12, 0x94, 0xa5, 0x29, 0x2c, 0x7d, 0x94, 0x7c, 0x1f, 0x7f, 0x00, 0x7e, 0x29, 0x12, 0x90, 0xa5,
|
||||
0x0c, 0x7b, 0xff, 0xe0, 0x90, 0x22, 0x3a, 0x7d, 0xa3, 0xe0, 0x54, 0xe0, 0xf5, 0x0f, 0x70, 0x19,
|
||||
0x02, 0x03, 0x23, 0x1f, 0x18, 0x7f, 0x66, 0x7e, 0x29, 0x12, 0x8e, 0x61, 0x8f, 0x1a, 0xe5, 0x1b,
|
||||
0x45, 0x1b, 0x60, 0x1a, 0x12, 0x15, 0x2b, 0x22, 0x25, 0xef, 0xff, 0xe0, 0x33, 0xee, 0xef, 0xfe,
|
||||
0xff, 0x24, 0xee, 0xff, 0x47, 0x34, 0x1a, 0xf5, 0x1b, 0x8f, 0x90, 0xc3, 0xcf, 0x7f, 0x95, 0xe0,
|
||||
0xf5, 0x1b, 0x90, 0x11, 0xce, 0x7f, 0x95, 0xe0, 0xf5, 0x1a, 0xe4, 0x10, 0x18, 0xf5, 0x74, 0xc3,
|
||||
0x95, 0x0f, 0xf5, 0x19, 0xe4, 0x19, 0x23, 0xf5, 0x16, 0x75, 0xe5, 0x01, 0xd3, 0x16, 0x19, 0x95,
|
||||
0x1a, 0x50, 0x10, 0xe5, 0xe7, 0xa2, 0xf5, 0x13, 0xe5, 0x10, 0x13, 0x11, 0x11, 0xf5, 0x1f, 0x92,
|
||||
0x18, 0xe5, 0x13, 0xc3, 0x23, 0x45, 0x18, 0xf5, 0x16, 0x05, 0xdf, 0x80, 0x7d, 0x90, 0xe0, 0x3d,
|
||||
0xe0, 0x30, 0xe5, 0x16, 0xa2, 0x10, 0x13, 0xe7, 0x10, 0xf5, 0x11, 0xe5, 0xf5, 0x13, 0x92, 0x11,
|
||||
0xe5, 0x1f, 0xc3, 0x18, 0x45, 0x13, 0xf5, 0x23, 0x90, 0x18, 0x3d, 0x7d, 0x30, 0xe0, 0x26, 0xe1,
|
||||
0x10, 0xe5, 0xe7, 0xa2, 0xf5, 0x13, 0xe5, 0x10, 0x13, 0x11, 0x11, 0xf5, 0x1e, 0x92, 0x10, 0xe5,
|
||||
0xe7, 0xa2, 0xf5, 0x13, 0xe5, 0x10, 0x13, 0x11, 0x11, 0xf5, 0x1f, 0x92, 0x18, 0xe5, 0x13, 0x13,
|
||||
0x3f, 0x54, 0x23, 0x45, 0x18, 0xf5, 0xf5, 0xe4, 0x90, 0x23, 0x66, 0x7b, 0x25, 0xe0, 0xf0, 0x18,
|
||||
0x18, 0x92, 0x23, 0xe5, 0x11, 0x25, 0x11, 0xf5, 0x35, 0xe4, 0xf5, 0x10, 0xc2, 0x10, 0xd3, 0x18,
|
||||
0x11, 0xe5, 0x00, 0x94, 0x10, 0xe5, 0x80, 0x64, 0x80, 0x94, 0x2b, 0x40, 0x7b, 0x90, 0xe0, 0x65,
|
||||
0x11, 0x25, 0x13, 0xf5, 0x7b, 0x90, 0xe0, 0x64, 0x10, 0x35, 0x12, 0xf5, 0xe5, 0xd3, 0x94, 0x13,
|
||||
0xe5, 0xff, 0x94, 0x12, 0x40, 0x7f, 0x75, 0x08, 0x7f, 0x10, 0x11, 0x75, 0x80, 0xff, 0x85, 0x18,
|
||||
0x10, 0x12, 0x13, 0x85, 0x80, 0x11, 0x90, 0x10, 0x64, 0x7b, 0xfe, 0xe0, 0xe0, 0xa3, 0x11, 0x25,
|
||||
0x11, 0xf5, 0x10, 0xe5, 0xf5, 0x3e, 0x90, 0x10, 0x68, 0x7d, 0x10, 0xe5, 0xa3, 0xf0, 0x11, 0xe5,
|
||||
0xc3, 0xf0, 0x10, 0xe5, 0x80, 0x64, 0x80, 0x94, 0x05, 0x50, 0xf5, 0xe4, 0xf5, 0x10, 0x90, 0x11,
|
||||
0x64, 0x7b, 0x10, 0xe5, 0xa3, 0xf0, 0x11, 0xe5, 0xe4, 0xf0, 0x14, 0xf5, 0xe5, 0xd3, 0x94, 0x11,
|
||||
0xe5, 0xff, 0x64, 0x10, 0x94, 0x80, 0x40, 0xcf, 0xe5, 0x15, 0x94, 0x14, 0x50, 0x03, 0xe4, 0x0f,
|
||||
0x11, 0x25, 0x11, 0xf5, 0xf0, 0x74, 0x10, 0x35, 0x10, 0xf5, 0x14, 0x05, 0xde, 0x80, 0x25, 0xe4,
|
||||
0xff, 0x11, 0x10, 0xe5, 0xd8, 0x34, 0xe7, 0xa2, 0xfe, 0x13, 0x13, 0xef, 0x12, 0xff, 0xfe, 0x22,
|
||||
0x1a, 0x8e, 0x1b, 0x8f, 0xd0, 0xc0, 0xaf, 0xa2, 0xd1, 0x92, 0xaf, 0xc2, 0x7d, 0x90, 0xe5, 0xa4,
|
||||
0xf0, 0x1a, 0xe5, 0xa3, 0xf0, 0x1b, 0x7d, 0x90, 0xe4, 0xa6, 0xa3, 0xf0, 0x14, 0xe5, 0x7e, 0xf0,
|
||||
0x7f, 0x7d, 0x7d, 0xa4, 0x7c, 0x02, 0x12, 0x00, 0xae, 0x00, 0x14, 0x7b, 0x00, 0x7a, 0x06, 0x7d,
|
||||
0x06, 0x7f, 0x2a, 0x12, 0xa2, 0x1c, 0x92, 0xd1, 0xd0, 0xaf, 0x22, 0xd0, 0x03, 0x7f, 0x60, 0x7e,
|
||||
0x29, 0x12, 0x90, 0x61, 0x4c, 0x7b, 0xf0, 0xef, 0xe1, 0x20, 0x02, 0x03, 0x37, 0x20, 0x07, 0x7f,
|
||||
0x66, 0x7e, 0x29, 0x12, 0x90, 0x61, 0x4d, 0x7b, 0xf0, 0xef, 0xff, 0xf4, 0x00, 0x7e, 0x05, 0x7d,
|
||||
0x66, 0x7c, 0x29, 0x12, 0x90, 0xa5, 0x4d, 0x7b, 0x20, 0xe0, 0x03, 0xe0, 0x20, 0x02, 0x7f, 0x37,
|
||||
0x7e, 0x23, 0x12, 0x71, 0x61, 0x29, 0x7b, 0x90, 0xef, 0x19, 0xd3, 0xf0, 0x17, 0x94, 0x03, 0x40,
|
||||
0x20, 0x02, 0xc3, 0x27, 0x7b, 0x90, 0xe0, 0x51, 0x40, 0x94, 0x03, 0x50, 0x20, 0x02, 0x7d, 0x1b,
|
||||
0x7c, 0x70, 0xe4, 0x71, 0xfe, 0xff, 0x29, 0x12, 0x7f, 0xa5, 0x7e, 0x3d, 0x12, 0x71, 0x61, 0x29,
|
||||
0x01, 0xbe, 0xbf, 0x0b, 0x08, 0x42, 0x3d, 0x7d, 0x71, 0x7c, 0x52, 0x7f, 0x1d, 0x80, 0x3d, 0x7f,
|
||||
0x71, 0x7e, 0x29, 0x12, 0xbe, 0x61, 0x0d, 0x01, 0x52, 0xbf, 0x7d, 0x0a, 0x7c, 0x3d, 0x7f, 0x71,
|
||||
0x7e, 0x42, 0x80, 0x00, 0x7d, 0x08, 0x7c, 0x3d, 0x7f, 0x71, 0x7e, 0x42, 0x12, 0x01, 0xa5, 0x29,
|
||||
0x1b, 0x7d, 0x71, 0x7c, 0xff, 0xe4, 0x12, 0xfe, 0xa5, 0x29, 0x1d, 0x7d, 0x71, 0x7c, 0x03, 0x7f,
|
||||
0x00, 0x7e, 0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x1d, 0x7f, 0x71, 0x7e, 0x02, 0x12, 0x00, 0xa5, 0x29,
|
||||
0x1d, 0x7d, 0x71, 0x7c, 0x0c, 0x7f, 0x00, 0x7e, 0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x1d, 0x7f, 0x71,
|
||||
0x7e, 0x08, 0x12, 0x00, 0xa5, 0x29, 0x1d, 0x7d, 0x71, 0x7c, 0x30, 0x7f, 0x00, 0x7e, 0x29, 0x12,
|
||||
0x7d, 0xa5, 0x7c, 0x1d, 0x7f, 0x71, 0x7e, 0x20, 0x12, 0x00, 0xa5, 0x29, 0x1d, 0x7d, 0x71, 0x7c,
|
||||
0xff, 0xe4, 0x12, 0xfe, 0xa5, 0x29, 0x1b, 0x7d, 0x71, 0x7c, 0xff, 0x7f, 0x00, 0x7e, 0x29, 0x12,
|
||||
0x80, 0xa5, 0x90, 0x0c, 0x51, 0x7b, 0x75, 0xe4, 0x01, 0xf0, 0x18, 0x12, 0x80, 0x7d, 0xe4, 0x07,
|
||||
0x7b, 0x90, 0xf0, 0x51, 0xf0, 0xa3, 0x00, 0x12, 0x12, 0xc6, 0x6d, 0x1d, 0x0e, 0x12, 0x22, 0x5b,
|
||||
0x61, 0x20, 0x7f, 0xfd, 0x12, 0x01, 0x0c, 0x18, 0x7f, 0x90, 0xe0, 0xaf, 0xe1, 0x20, 0x90, 0xf1,
|
||||
0xb0, 0x7f, 0xfe, 0xe0, 0xe0, 0xa3, 0x90, 0xff, 0x11, 0x7b, 0xfc, 0xe0, 0xe0, 0xa3, 0xd3, 0xfd,
|
||||
0xec, 0x9f, 0x40, 0x9e, 0x7f, 0x04, 0x80, 0x01, 0x7f, 0x02, 0xef, 0x00, 0xe0, 0x25, 0x33, 0xff,
|
||||
0xe0, 0x95, 0xe4, 0xfe, 0xff, 0x2f, 0x34, 0xee, 0xfe, 0x40, 0x7b, 0x90, 0xe0, 0x0f, 0xa3, 0xfa,
|
||||
0xfb, 0xe0, 0xb3, 0x64, 0x60, 0x4a, 0xeb, 0x0c, 0xb2, 0x64, 0x60, 0x4a, 0xeb, 0x06, 0xb4, 0x64,
|
||||
0x70, 0x4a, 0x7a, 0x06, 0x7b, 0x00, 0x80, 0x01, 0x7a, 0x04, 0x7b, 0x00, 0xef, 0x00, 0xff, 0x2b,
|
||||
0x3a, 0xee, 0x7f, 0x90, 0xf0, 0xe2, 0xef, 0xa3, 0x90, 0xf0, 0xb0, 0x7f, 0xfe, 0xe0, 0xe0, 0xa3,
|
||||
0xd3, 0xff, 0x9f, 0xed, 0x9e, 0xec, 0x6a, 0x40, 0x7b, 0x90, 0xe0, 0x18, 0x80, 0x94, 0x7b, 0x90,
|
||||
0xe0, 0x17, 0x02, 0x94, 0x06, 0x50, 0x75, 0xe4, 0x80, 0xf0, 0x69, 0x80, 0x7b, 0x90, 0x74, 0x17,
|
||||
0xf0, 0x02, 0x74, 0xa3, 0xf0, 0x80, 0x7b, 0x90, 0xe0, 0x0f, 0xa3, 0xfe, 0xff, 0xe0, 0x40, 0x7d,
|
||||
0x71, 0x7c, 0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x24, 0x7f, 0x71, 0x7e, 0x03, 0x12, 0x00, 0xa5, 0x29,
|
||||
0x7b, 0x90, 0xe0, 0x0f, 0xa3, 0xfe, 0xff, 0xe0, 0x94, 0xc3, 0xee, 0xdc, 0x80, 0x64, 0x80, 0x94,
|
||||
0x03, 0x40, 0x20, 0x02, 0xef, 0x38, 0x58, 0x24, 0xee, 0xff, 0x03, 0x34, 0x7d, 0xfe, 0x7c, 0x41,
|
||||
0x12, 0x71, 0xa5, 0x29, 0x24, 0x7d, 0x71, 0x7c, 0x07, 0x7f, 0x00, 0x7e, 0x29, 0x12, 0x02, 0xa5,
|
||||
0x38, 0x20, 0x90, 0xd3, 0x18, 0x7b, 0x94, 0xe0, 0x90, 0x00, 0x17, 0x7b, 0x94, 0xe0, 0x40, 0x00,
|
||||
0x74, 0x0a, 0xf5, 0xff, 0x12, 0xf0, 0x7d, 0x18, 0x20, 0x02, 0x7d, 0x38, 0x7c, 0x24, 0x7f, 0x71,
|
||||
0x7e, 0x01, 0x12, 0x00, 0xa5, 0x29, 0x20, 0x02, 0x90, 0x38, 0x88, 0x7d, 0x75, 0xe4, 0x01, 0xf0,
|
||||
0x18, 0x12, 0x7f, 0x7d, 0x7e, 0x17, 0x12, 0x93, 0x61, 0x29, 0x7a, 0x90, 0xee, 0xde, 0xa3, 0xf0,
|
||||
0xf0, 0xef, 0x7a, 0x90, 0xe0, 0xde, 0x54, 0xc4, 0xff, 0x0f, 0x00, 0x7e, 0x7b, 0x90, 0xee, 0x58,
|
||||
0xa3, 0xf0, 0xf0, 0xef, 0x90, 0xfd, 0xde, 0x7a, 0x54, 0xe0, 0xf0, 0x0f, 0xed, 0xd3, 0x04, 0x94,
|
||||
0x94, 0xe4, 0x50, 0x00, 0x90, 0x21, 0x58, 0x7b, 0xe0, 0xa3, 0x90, 0xff, 0xde, 0x7a, 0xfe, 0xe0,
|
||||
0xe0, 0xa3, 0x07, 0xa8, 0x80, 0x08, 0xc3, 0x05, 0xce, 0x33, 0xce, 0x33, 0xf9, 0xd8, 0xee, 0xf0,
|
||||
0x7a, 0x90, 0xf0, 0xde, 0x08, 0x80, 0xff, 0x74, 0x7a, 0x90, 0xf0, 0xde, 0xf0, 0xa3, 0x16, 0x7f,
|
||||
0x93, 0x7e, 0x29, 0x12, 0x90, 0x61, 0xf4, 0x7a, 0xf0, 0xee, 0xef, 0xa3, 0x90, 0xf0, 0xf4, 0x7a,
|
||||
0xc4, 0xe0, 0x0f, 0x54, 0x7e, 0xff, 0x90, 0x00, 0x58, 0x7b, 0xf0, 0xee, 0xef, 0xa3, 0xfd, 0xf0,
|
||||
0x7a, 0x90, 0xe0, 0xf4, 0x0f, 0x54, 0xd3, 0xf0, 0x94, 0xed, 0xe4, 0x04, 0x00, 0x94, 0x21, 0x50,
|
||||
0x7b, 0x90, 0xa3, 0x58, 0xff, 0xe0, 0x7a, 0x90, 0xe0, 0xf4, 0xa3, 0xfe, 0xa8, 0xe0, 0x08, 0x07,
|
||||
0x05, 0x80, 0x33, 0xc3, 0x33, 0xce, 0xd8, 0xce, 0xf0, 0xf9, 0x90, 0xee, 0xf4, 0x7a, 0x80, 0xf0,
|
||||
0x74, 0x08, 0x90, 0xff, 0xf4, 0x7a, 0xa3, 0xf0, 0x90, 0xf0, 0xde, 0x7a, 0xfe, 0xe0, 0xe0, 0xa3,
|
||||
0xc3, 0xff, 0x7a, 0x90, 0xe0, 0xf5, 0xff, 0x9f, 0x7a, 0x90, 0xe0, 0xf4, 0x90, 0x9e, 0x8a, 0x7d,
|
||||
0xf0, 0x8f, 0x18, 0x12, 0x30, 0x7d, 0x0a, 0xd7, 0x7d, 0x90, 0xe4, 0x8c, 0xf0, 0x75, 0x12, 0x01,
|
||||
0x7d, 0x18, 0x8e, 0x22, 0x8f, 0x0d, 0xe5, 0x0e, 0x45, 0x0e, 0x70, 0x0d, 0x7e, 0x05, 0x7f, 0xff,
|
||||
0x22, 0xff, 0xd0, 0xc0, 0xaf, 0xa2, 0xd1, 0x92, 0xaf, 0xc2, 0x7b, 0x90, 0x74, 0x4a, 0xf0, 0x06,
|
||||
0x0d, 0xae, 0x0e, 0xaf, 0xfc, 0xe4, 0xfb, 0xfd, 0x40, 0x7a, 0xf8, 0xf9, 0x12, 0xd3, 0x21, 0x19,
|
||||
0x13, 0x40, 0x0e, 0xe5, 0xe0, 0x25, 0x0e, 0xf5, 0x0d, 0xe5, 0xf5, 0x33, 0x90, 0x0d, 0x4a, 0x7b,
|
||||
0x14, 0xe0, 0x80, 0xf0, 0xae, 0xdb, 0xaf, 0x0d, 0xe4, 0x0e, 0xfd, 0xfc, 0x7a, 0xfb, 0xf9, 0x80,
|
||||
0xd3, 0xf8, 0x19, 0x12, 0x50, 0x21, 0xe5, 0x13, 0xc3, 0x0d, 0xf5, 0x13, 0xe5, 0x0d, 0x13, 0x0e,
|
||||
0x0e, 0xf5, 0x7b, 0x90, 0xe0, 0x4a, 0xf0, 0x04, 0xdb, 0x80, 0x0d, 0xae, 0x0e, 0xaf, 0xfc, 0xe4,
|
||||
0x90, 0xfd, 0x40, 0x7b, 0x19, 0x12, 0x90, 0xa7, 0x40, 0x7b, 0x19, 0x12, 0x78, 0x6f, 0x12, 0x02,
|
||||
0x5c, 0x19, 0x2f, 0xe4, 0xee, 0xff, 0x80, 0x34, 0xed, 0xfe, 0xfe, 0x34, 0xec, 0xfd, 0xff, 0x34,
|
||||
0x90, 0xfc, 0x40, 0x7b, 0x19, 0x12, 0x90, 0xa7, 0x48, 0x7b, 0x2a, 0x74, 0xa3, 0xf0, 0x93, 0x74,
|
||||
0x12, 0xf0, 0x50, 0x25, 0x7b, 0x90, 0xe0, 0x4a, 0x33, 0xff, 0xe0, 0x95, 0xfd, 0xfe, 0x78, 0xfc,
|
||||
0x12, 0x0f, 0x5c, 0x19, 0x7b, 0x90, 0x12, 0x44, 0x8b, 0x19, 0x18, 0x12, 0xef, 0xa9, 0x10, 0x24,
|
||||
0xe4, 0xff, 0xfe, 0x3e, 0x3d, 0xe4, 0xe4, 0xfd, 0xfc, 0x3c, 0x05, 0x78, 0x19, 0x12, 0xa2, 0x48,
|
||||
0x92, 0xd1, 0xd0, 0xaf, 0x22, 0xd0, 0xd0, 0xc0, 0xaf, 0xa2, 0xd1, 0x92, 0xaf, 0xc2, 0x33, 0xee,
|
||||
0xe0, 0x95, 0xfc, 0xfd, 0x05, 0x78, 0x19, 0x12, 0x90, 0x5c, 0x40, 0x7b, 0x19, 0x12, 0x90, 0xa7,
|
||||
0x40, 0x7b, 0x19, 0x12, 0x78, 0x6f, 0x12, 0x0f, 0x48, 0x19, 0x24, 0xef, 0x90, 0x09, 0x4a, 0x7b,
|
||||
0x90, 0xf0, 0x40, 0x7b, 0x19, 0x12, 0xee, 0x6f, 0x7f, 0x54, 0xe4, 0xfe, 0xfc, 0xfd, 0x01, 0x78,
|
||||
0x19, 0x12, 0xe4, 0x5c, 0xff, 0x2f, 0x34, 0xee, 0xfe, 0x80, 0x34, 0xed, 0xfd, 0xff, 0x34, 0xec,
|
||||
0xfc, 0xff, 0x7b, 0x90, 0x12, 0x40, 0xa7, 0x19, 0x7b, 0x90, 0x74, 0x48, 0xf0, 0x2a, 0x74, 0xa3,
|
||||
0xf0, 0x87, 0x25, 0x12, 0x90, 0x50, 0x4a, 0x7b, 0xfb, 0xe0, 0x64, 0xc3, 0x94, 0x80, 0x90, 0x80,
|
||||
0x44, 0x7b, 0x0d, 0x50, 0x19, 0x12, 0xeb, 0x6f, 0x04, 0xf4, 0xf8, 0xf9, 0x19, 0x12, 0x80, 0x48,
|
||||
0x12, 0x0c, 0x6f, 0x19, 0x7b, 0x90, 0xe0, 0x4a, 0xf8, 0xf9, 0x19, 0x12, 0x90, 0x5c, 0x44, 0x7b,
|
||||
0x19, 0x12, 0x90, 0xa7, 0x44, 0x7b, 0x19, 0x12, 0xe4, 0x6f, 0xff, 0x2f, 0x34, 0xee, 0xfe, 0x40,
|
||||
0x3d, 0xe4, 0xe4, 0xfd, 0xfc, 0x3c, 0x0f, 0x78, 0x19, 0x12, 0xa2, 0x48, 0x92, 0xd1, 0xd0, 0xaf,
|
||||
0x22, 0xd0, 0x03, 0x7f, 0x90, 0x7e, 0x29, 0x12, 0x90, 0x61, 0xe2, 0x7a, 0xf0, 0xee, 0xef, 0xa3,
|
||||
0x4e, 0xf0, 0x03, 0x70, 0x24, 0x02, 0x90, 0x4f, 0xe3, 0x7a, 0x30, 0xe0, 0x22, 0xe0, 0x07, 0x7f,
|
||||
0x94, 0x7e, 0x29, 0x12, 0x90, 0x61, 0xe8, 0x7a, 0xf0, 0xee, 0xef, 0xa3, 0xf4, 0xf0, 0xee, 0xff,
|
||||
0xfe, 0xf4, 0x7a, 0x90, 0xf0, 0xe4, 0xef, 0xa3, 0x7d, 0xf0, 0x7c, 0x05, 0x12, 0x94, 0xa5, 0x29,
|
||||
0x7a, 0x90, 0xe0, 0xe3, 0xe1, 0x30, 0x7f, 0x37, 0x7e, 0x07, 0x12, 0x93, 0x61, 0x29, 0x7a, 0x90,
|
||||
0xee, 0xec, 0xa3, 0xf0, 0xf0, 0xef, 0xff, 0xf4, 0xf4, 0xee, 0x90, 0xfe, 0xe0, 0x7a, 0xa3, 0xf0,
|
||||
0xf0, 0xef, 0x05, 0x7d, 0x93, 0x7c, 0x29, 0x12, 0x90, 0xa5, 0xec, 0x7a, 0xfe, 0xe0, 0xe0, 0xa3,
|
||||
0x4e, 0xff, 0x0a, 0x60, 0x30, 0xef, 0x06, 0xe1, 0x26, 0x12, 0x12, 0x2d, 0x41, 0x21, 0x7a, 0x90,
|
||||
0xe0, 0xe3, 0xe2, 0x30, 0x7f, 0x22, 0x7e, 0x07, 0x12, 0x92, 0x61, 0x29, 0x7a, 0x90, 0xee, 0xf2,
|
||||
0xa3, 0xf0, 0xf0, 0xef, 0xff, 0xf4, 0xf4, 0xee, 0x90, 0xfe, 0xee, 0x7a, 0xa3, 0xf0, 0xf0, 0xef,
|
||||
0x05, 0x7d, 0x92, 0x7c, 0x29, 0x12, 0x22, 0xa5, 0x90, 0xe4, 0x19, 0x7b, 0xa3, 0xf0, 0xa3, 0xf0,
|
||||
0xa3, 0xf0, 0x90, 0xf0, 0x17, 0x7b, 0xa3, 0xf0, 0x7d, 0xf0, 0x7c, 0x24, 0x7f, 0x71, 0xfe, 0x81,
|
||||
0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x24, 0x7f, 0x71, 0x7e, 0x01, 0x12, 0x00, 0xa5, 0x29, 0x90, 0xe4,
|
||||
0x1d, 0x7b, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0x7f, 0xf0, 0x7e, 0x12, 0x12, 0x62, 0x61, 0x29,
|
||||
0xfc, 0xe4, 0x90, 0xfd, 0xc1, 0x7a, 0x19, 0x12, 0x90, 0xa7, 0xc1, 0x7a, 0x19, 0x12, 0x90, 0x6f,
|
||||
0xc5, 0x7a, 0x19, 0x12, 0x90, 0xa7, 0xc9, 0x7a, 0x19, 0x12, 0x00, 0xb3, 0x00, 0x00, 0xe4, 0x00,
|
||||
0x7a, 0x90, 0xf0, 0xcd, 0xf0, 0xa3, 0x7a, 0x90, 0xf0, 0xcf, 0x06, 0x7d, 0x71, 0x7c, 0x17, 0x7f,
|
||||
0x12, 0xfe, 0xa5, 0x29, 0x90, 0xe4, 0x8f, 0x7d, 0x90, 0xf0, 0x6a, 0x7d, 0xff, 0xe0, 0xe0, 0xa3,
|
||||
0x7b, 0x90, 0xcf, 0x64, 0xa3, 0xf0, 0xf0, 0xef, 0x90, 0xe4, 0x66, 0x7b, 0xc2, 0xf0, 0x22, 0x58,
|
||||
0x06, 0x7d, 0x66, 0x7c, 0x01, 0x7f, 0x00, 0x7e, 0x29, 0x12, 0xe4, 0xa5, 0x7d, 0x90, 0xf0, 0x4a,
|
||||
0xf0, 0xa3, 0x7d, 0x90, 0xf0, 0x5a, 0xf0, 0xa3, 0x7d, 0x90, 0xf0, 0x52, 0xf0, 0xa3, 0x7d, 0x90,
|
||||
0xf0, 0x60, 0xf0, 0xa3, 0x7d, 0x90, 0xf0, 0x57, 0x7d, 0x90, 0xf0, 0x65, 0x7d, 0x90, 0xf0, 0x58,
|
||||
0x04, 0xa3, 0x90, 0xf0, 0x66, 0x7d, 0xf0, 0xe4, 0x04, 0xa3, 0x90, 0xf0, 0x42, 0x7d, 0x80, 0x74,
|
||||
0xa3, 0xf0, 0xf0, 0xe4, 0x7d, 0x90, 0x74, 0x40, 0xf0, 0x7f, 0x74, 0xa3, 0xf0, 0xff, 0x90, 0xe4,
|
||||
0x86, 0x7d, 0xa3, 0xf0, 0x90, 0xf0, 0x84, 0x7d, 0x7f, 0x74, 0xa3, 0xf0, 0xff, 0x74, 0xe4, 0xf0,
|
||||
0x7d, 0x90, 0xf0, 0x94, 0xf0, 0xa3, 0x7d, 0x90, 0x74, 0x92, 0xf0, 0x7f, 0x74, 0xa3, 0xf0, 0xff,
|
||||
0x90, 0xe4, 0x30, 0x7d, 0xa3, 0xf0, 0x22, 0xf0, 0x7b, 0x90, 0xe4, 0x48, 0xf0, 0x75, 0x12, 0x04,
|
||||
0x93, 0x18, 0xf0, 0x85, 0xf5, 0x82, 0x12, 0x83, 0x7b, 0x19, 0x7b, 0x90, 0x12, 0x44, 0xa7, 0x19,
|
||||
0x7b, 0x90, 0x74, 0x4b, 0xf0, 0x01, 0x7b, 0x90, 0x12, 0x44, 0x6f, 0x19, 0x7b, 0x90, 0x12, 0x40,
|
||||
0x8b, 0x19, 0x18, 0x12, 0x90, 0xc4, 0x44, 0x7b, 0x19, 0x12, 0x90, 0xa7, 0x44, 0x7b, 0x19, 0x12,
|
||||
0xe4, 0x6f, 0xff, 0x2f, 0x34, 0xee, 0xfe, 0x40, 0x3d, 0xe4, 0xe4, 0xfd, 0xfc, 0x3c, 0x0f, 0x78,
|
||||
0x19, 0x12, 0x90, 0x48, 0x48, 0x7b, 0x75, 0xe4, 0x04, 0xf0, 0x18, 0x12, 0x85, 0x93, 0x82, 0xf0,
|
||||
0x83, 0xf5, 0x19, 0x12, 0x12, 0x97, 0xa9, 0x18, 0x7b, 0x90, 0x12, 0x44, 0xa7, 0x19, 0x7b, 0x90,
|
||||
0xe0, 0x4b, 0xf0, 0x04, 0xb4, 0xe0, 0xae, 0x03, 0x90, 0x22, 0xfa, 0x7f, 0xfe, 0xe0, 0xe4, 0xa3,
|
||||
0x03, 0x70, 0x64, 0xee, 0x70, 0x03, 0xe0, 0x47, 0x19, 0x12, 0x25, 0xf6, 0x01, 0xf2, 0xf5, 0x25,
|
||||
0x25, 0x02, 0x03, 0xf8, 0xfb, 0x25, 0x25, 0x04, 0x05, 0xfe, 0x01, 0x26, 0x26, 0x06, 0x07, 0x04,
|
||||
0x07, 0x26, 0x26, 0x08, 0x09, 0x0a, 0x00, 0x00, 0x0d, 0x26, 0x29, 0x02, 0x02, 0x84, 0x03, 0x00,
|
||||
0x2a, 0x02, 0x02, 0x54, 0xe8, 0x28, 0x00, 0x02, 0x02, 0x0e, 0x43, 0x00, 0x2b, 0x02, 0x02, 0x2c,
|
||||
0x34, 0x2b, 0x2a, 0x02, 0x74, 0xb5, 0x90, 0xff, 0xf8, 0x7f, 0xa3, 0xf0, 0x22, 0xf0, 0x7b, 0x90,
|
||||
0x12, 0x3a, 0xe4, 0x19, 0x4a, 0xe9, 0x03, 0x60, 0x1a, 0x02, 0x90, 0x1c, 0xf8, 0x7f, 0xff, 0x74,
|
||||
0xa3, 0xf0, 0xf0, 0x14, 0x7f, 0x22, 0x7e, 0x17, 0x12, 0x93, 0x61, 0x29, 0x7a, 0x90, 0xee, 0xde,
|
||||
0xa3, 0xf0, 0xf0, 0xef, 0x7a, 0x90, 0xe0, 0xde, 0x54, 0xc4, 0xff, 0x0f, 0x00, 0x7e, 0x7b, 0x90,
|
||||
0xee, 0x58, 0xa3, 0xf0, 0xf0, 0xef, 0x90, 0xfd, 0xde, 0x7a, 0x54, 0xe0, 0xf0, 0x0f, 0xed, 0xd3,
|
||||
0x04, 0x94, 0x94, 0xe4, 0x50, 0x00, 0x90, 0x21, 0x58, 0x7b, 0xe0, 0xa3, 0x90, 0xff, 0xde, 0x7a,
|
||||
0xfe, 0xe0, 0xe0, 0xa3, 0x07, 0xa8, 0x80, 0x08, 0xc3, 0x05, 0xce, 0x33, 0xce, 0x33, 0xf9, 0xd8,
|
||||
0xee, 0xf0, 0x7a, 0x90, 0xf0, 0xde, 0x08, 0x80, 0xff, 0x74, 0x7a, 0x90, 0xf0, 0xde, 0xf0, 0xa3,
|
||||
0x7a, 0x90, 0xe0, 0xde, 0xa3, 0xfe, 0xff, 0xe0, 0x7d, 0x90, 0xee, 0x96, 0xf0, 0x8f, 0x18, 0x02,
|
||||
0x7d, 0x7d, 0x7c, 0x1e, 0x7f, 0x94, 0x7e, 0x01, 0x12, 0x00, 0xa5, 0x29, 0x1f, 0x7d, 0x94, 0x7c,
|
||||
0xff, 0x7f, 0x03, 0x7e, 0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x21, 0x7f, 0x94, 0x7e, 0xea, 0x12, 0x01,
|
||||
0xa5, 0x29, 0x20, 0x7d, 0x94, 0x7c, 0x16, 0x7f, 0x01, 0x7e, 0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x2e,
|
||||
0x7f, 0x94, 0x7e, 0x0a, 0x12, 0x00, 0xa5, 0x29, 0x22, 0x7d, 0x94, 0x7c, 0x0a, 0x7f, 0x00, 0x7e,
|
||||
0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x23, 0x7f, 0x94, 0x7e, 0x0a, 0x12, 0x00, 0xa5, 0x29, 0x26, 0x7d,
|
||||
0x94, 0x7c, 0x05, 0x7f, 0x00, 0x7e, 0x29, 0x12, 0x7d, 0xa5, 0x7c, 0x27, 0x7f, 0x94, 0x7e, 0x07,
|
||||
0x02, 0x00, 0xa5, 0x29, 0x30, 0x7f, 0x94, 0x7e, 0x29, 0x12, 0x90, 0x61, 0xfa, 0x7a, 0xf0, 0xee,
|
||||
0xef, 0xa3, 0x7f, 0xf0, 0x7e, 0x31, 0x12, 0x94, 0x61, 0x29, 0x7a, 0x90, 0xee, 0xfc, 0xa3, 0xf0,
|
||||
0xf0, 0xef, 0x2e, 0x7f, 0x94, 0x7e, 0x29, 0x12, 0x90, 0x61, 0x01, 0x7b, 0xf0, 0xef, 0x22, 0x7f,
|
||||
0x94, 0x7e, 0x29, 0x12, 0x90, 0x61, 0x02, 0x7b, 0xf0, 0xef, 0x23, 0x7f, 0x94, 0x7e, 0x29, 0x12,
|
||||
0x90, 0x61, 0x03, 0x7b, 0xf0, 0xef, 0x3b, 0x7f, 0x94, 0x7e, 0x29, 0x12, 0x90, 0x61, 0x04, 0x7b,
|
||||
0xf0, 0xee, 0xef, 0xa3, 0x7f, 0xf0, 0x7e, 0x3a, 0x12, 0x94, 0x61, 0x29, 0x7b, 0x90, 0xee, 0x06,
|
||||
0xa3, 0xf0, 0xf0, 0xef, 0x7f, 0x22, 0x7e, 0x14, 0x12, 0x93, 0x61, 0x29, 0x7b, 0x90, 0xee, 0x60,
|
||||
0xa3, 0xf0, 0xf0, 0xef, 0x7b, 0x90, 0xe0, 0x60, 0xa3, 0xfa, 0xfb, 0xe0, 0xc4, 0xea, 0x0f, 0x54,
|
||||
0x7e, 0xff, 0x90, 0x00, 0x62, 0x7b, 0xf0, 0xee, 0xef, 0xa3, 0xfd, 0xf0, 0x7a, 0x90, 0xe0, 0xde,
|
||||
0x0f, 0x54, 0xd3, 0xf0, 0x94, 0xed, 0xe4, 0x04, 0x00, 0x94, 0x1f, 0x50, 0x7b, 0x90, 0xa3, 0x62,
|
||||
0xff, 0xe0, 0xae, 0xeb, 0xa8, 0x02, 0x08, 0x07, 0x05, 0x80, 0x33, 0xc3, 0x33, 0xce, 0xd8, 0xce,
|
||||
0xff, 0xf9, 0x7b, 0x90, 0xee, 0x60, 0xa3, 0xf0, 0xf0, 0xef, 0x74, 0x22, 0x90, 0xff, 0x60, 0x7b,
|
||||
0xa3, 0xf0, 0x22, 0xf0, 0xd5, 0xc2, 0x30, 0xe8, 0x0f, 0xe7, 0xd5, 0xb2, 0xc3, 0xe4, 0xfb, 0x9b,
|
||||
0x9a, 0xe4, 0xe4, 0xfa, 0xf9, 0x99, 0x98, 0xe4, 0xec, 0xf8, 0xe7, 0x30, 0xb2, 0x17, 0x12, 0xd5,
|
||||
0xf2, 0x27, 0x1a, 0x12, 0xe4, 0x5e, 0x9b, 0xc3, 0xe4, 0xfb, 0xfa, 0x9a, 0x99, 0xe4, 0xe4, 0xf9,
|
||||
0xf8, 0x98, 0x03, 0x80, 0x1a, 0x12, 0x30, 0x5e, 0x0d, 0xd5, 0xc3, 0xe4, 0xff, 0x9f, 0x9e, 0xe4,
|
||||
0xe4, 0xfe, 0xfd, 0x9d, 0x9c, 0xe4, 0x22, 0xfc, 0xe0, 0xc0, 0xf0, 0xc0, 0x83, 0xc0, 0x82, 0xc0,
|
||||
0xd0, 0xc0, 0xd0, 0x75, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x01, 0xc0, 0x02, 0xc0, 0x03, 0xc0, 0x04,
|
||||
0xc0, 0x05, 0xc0, 0x06, 0x90, 0x07, 0x5a, 0x7b, 0x19, 0x12, 0x12, 0xe4, 0x1c, 0x1a, 0x07, 0xd0,
|
||||
0x06, 0xd0, 0x05, 0xd0, 0x04, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0xd0, 0xd0, 0xd0,
|
||||
0x82, 0xd0, 0x83, 0xd0, 0xf0, 0xd0, 0xe0, 0xd0, 0xc0, 0x32, 0xc0, 0xe0, 0xc0, 0xf0, 0xc0, 0x83,
|
||||
0xc0, 0x82, 0x75, 0xd0, 0x00, 0xd0, 0x00, 0xc0, 0x01, 0xc0, 0x02, 0xc0, 0x03, 0xc0, 0x04, 0xc0,
|
||||
0x05, 0xc0, 0x06, 0xc0, 0x07, 0xc0, 0x7b, 0x90, 0x12, 0x5d, 0xe4, 0x19, 0x1a, 0x12, 0xd0, 0x1c,
|
||||
0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0x04, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00,
|
||||
0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xf0, 0x32, 0xe0, 0x40, 0xd2, 0x00, 0x30, 0xc0, 0x2e,
|
||||
0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x75, 0xd0, 0x00, 0xd0, 0x07, 0xc0, 0x81, 0xaf, 0x90, 0xc3,
|
||||
0x81, 0x7d, 0x9f, 0xe0, 0x7d, 0x90, 0xe0, 0x80, 0x00, 0x94, 0x07, 0x50, 0x81, 0xaf, 0xf0, 0xe4,
|
||||
0xef, 0xa3, 0xd0, 0xf0, 0xd0, 0x07, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0x32, 0xe0, 0x7b, 0x90,
|
||||
0xe0, 0x19, 0xc3, 0xff, 0x57, 0x94, 0x07, 0x40, 0x7b, 0x90, 0x74, 0x58, 0x80, 0x80, 0xef, 0x0b,
|
||||
0x94, 0xc3, 0x40, 0x06, 0x90, 0x0b, 0x58, 0x7b, 0x40, 0x74, 0xa3, 0xf0, 0xf0, 0xe4, 0x07, 0x80,
|
||||
0x90, 0xe4, 0x58, 0x7b, 0xa3, 0xf0, 0x90, 0xf0, 0x58, 0x7b, 0xfe, 0xe0, 0xe0, 0xa3, 0x22, 0xff,
|
||||
0x62, 0xd2, 0x04, 0x7f, 0x16, 0x12, 0x7b, 0xd3, 0x7a, 0xff, 0x79, 0x1f, 0x90, 0x24, 0x5a, 0x7b,
|
||||
0x19, 0x12, 0x7a, 0xed, 0x79, 0x23, 0x90, 0xaa, 0x5d, 0x7b, 0x19, 0x12, 0x43, 0xed, 0x18, 0xa9,
|
||||
0xab, 0x43, 0xe4, 0x08, 0x7f, 0x90, 0xf0, 0xf8, 0xf0, 0xa3, 0xef, 0x22, 0xc4, 0x04, 0xf0, 0x54,
|
||||
0x24, 0x14, 0xf5, 0x80, 0xe4, 0x82, 0x7a, 0x34, 0x83, 0xf5, 0x01, 0xd0, 0x07, 0xd0, 0x0f, 0x7e,
|
||||
0x82, 0xe5, 0x02, 0x70, 0x83, 0x15, 0x82, 0x15, 0xe0, 0xd0, 0xde, 0xf0, 0xc0, 0xf3, 0xc0, 0x07,
|
||||
0x22, 0x01, 0xa8, 0xc0, 0xd0, 0xc0, 0xd0, 0x75, 0x92, 0x00, 0xc0, 0xaf, 0x75, 0xf0, 0x05, 0xf0,
|
||||
0xe0, 0xc0, 0xe0, 0x75, 0xc0, 0x55, 0x75, 0xe0, 0x29, 0xe0, 0xe0, 0xc0, 0xd5, 0x32, 0xf2, 0xf0,
|
||||
0xe0, 0xd0, 0xf0, 0xd0, 0xd0, 0xd0, 0xa8, 0xd0, 0xc0, 0x22, 0xc2, 0xa8, 0x10, 0xaf, 0x04, 0x40,
|
||||
0xa8, 0xd0, 0xf5, 0x80, 0xc2, 0x75, 0x75, 0x7d, 0xa0, 0xc1, 0xc3, 0x8e, 0xc5, 0x8f, 0x40, 0x30,
|
||||
0x90, 0xfd, 0xa0, 0x7d, 0xfe, 0xe0, 0xe0, 0xa3, 0xd0, 0xff, 0x22, 0xa8, 0x00, 0x12, 0x90, 0x9e,
|
||||
0xf6, 0x7f, 0xf0, 0xe4, 0xef, 0xa3, 0x53, 0xf0, 0xe7, 0xa9, 0xab, 0x53, 0x7f, 0xf7, 0x12, 0x04,
|
||||
0x5c, 0x17, 0x29, 0x12, 0xe4, 0xe3, 0x7f, 0x90, 0xf0, 0xf8, 0xf0, 0xa3, 0xc0, 0x22, 0xc2, 0xa8,
|
||||
0x10, 0xaf, 0x04, 0x40, 0xa8, 0xd0, 0xf5, 0x80, 0x7d, 0x90, 0xee, 0xa0, 0xa3, 0xf0, 0xf0, 0xef,
|
||||
0xc2, 0x75, 0x75, 0x7d, 0xa0, 0xc1, 0xc3, 0x8c, 0xc4, 0x8d, 0xa8, 0xd0, 0xef, 0x22, 0x54, 0xc4,
|
||||
0x24, 0xf0, 0xf5, 0x80, 0xe4, 0x82, 0x7a, 0x34, 0x83, 0xf5, 0x01, 0xd0, 0x07, 0xd0, 0x0f, 0x7e,
|
||||
0xc0, 0xe0, 0xa3, 0xe0, 0xfa, 0xde, 0x07, 0xc0, 0x01, 0xc0, 0xe4, 0x22, 0x7f, 0x90, 0xf0, 0xae,
|
||||
0xf0, 0xa3, 0x7f, 0x90, 0x74, 0xb0, 0xf0, 0x10, 0xe4, 0xa3, 0x90, 0xf0, 0xd2, 0x7f, 0xa3, 0xf0,
|
||||
0x90, 0xf0, 0xd4, 0x7f, 0xa3, 0xf0, 0x22, 0xf0, 0xf0, 0x8f, 0xf7, 0x30, 0x63, 0x03, 0xff, 0x07,
|
||||
0xd4, 0x8f, 0xd5, 0x8d, 0xd7, 0x8a, 0xd6, 0x8b, 0xf7, 0x30, 0x7f, 0x04, 0x80, 0x06, 0x7f, 0x02,
|
||||
0x8f, 0x02, 0x22, 0xdb, 0xf0, 0x8f, 0xf7, 0x30, 0x63, 0x03, 0xff, 0x07, 0xd4, 0x8f, 0xd5, 0x8d,
|
||||
0xd7, 0x8a, 0xd6, 0x8b, 0xf7, 0x30, 0x7f, 0x04, 0x80, 0x05, 0x7f, 0x02, 0x8f, 0x01, 0x22, 0xdb,
|
||||
0xf0, 0x8f, 0xf7, 0x30, 0x63, 0x03, 0xff, 0x07, 0xd4, 0x8f, 0xd5, 0x8d, 0xd7, 0x8a, 0xd6, 0x8b,
|
||||
0xf7, 0x30, 0x7f, 0x04, 0x80, 0x07, 0x7f, 0x02, 0x8f, 0x03, 0x22, 0xdb, 0x7f, 0x90, 0xe0, 0xf8,
|
||||
0xa3, 0xff, 0x90, 0xe0, 0xae, 0x7f, 0xf0, 0xcf, 0xef, 0xa3, 0x12, 0xf0, 0xdb, 0x2a, 0x90, 0xe4,
|
||||
0xf8, 0x7f, 0xa3, 0xf0, 0x22, 0xf0, 0x6d, 0xef, 0x02, 0x70, 0x6c, 0xee, 0x10, 0x60, 0xef, 0x0f,
|
||||
0x06, 0xaa, 0x01, 0x70, 0x14, 0x0e, 0x82, 0xf5, 0x83, 0x8a, 0xf0, 0xe4, 0xe8, 0x80, 0x00, 0x22,
|
||||
0x0a, 0x00, 0x00, 0xf4, 0x3f, 0x00, 0x00, 0xaf, 0xb5, 0x00, 0xff, 0x05, 0xf5, 0xff, 0x00, 0x4a,
|
||||
0x3f, 0x00, 0xff, 0x5b, 0xca, 0xff, 0x7d, 0xe0, 0x7c, 0x16, 0x7f, 0x71, 0x7e, 0x04, 0x12, 0x00,
|
||||
0xa5, 0x29, 0x18, 0x7d, 0x71, 0x7c, 0x03, 0x7f, 0x00, 0x7e, 0x29, 0x02, 0x53, 0xa5, 0xe7, 0xa9,
|
||||
0xab, 0x53, 0x7f, 0xf7, 0x12, 0x04, 0x5c, 0x17, 0x62, 0xc2, 0x90, 0xe4, 0xf8, 0x7f, 0xa3, 0xf0,
|
||||
0x22, 0xf0, 0x40, 0x30, 0xc2, 0xfd, 0xef, 0x40, 0xfe, 0x54, 0xc2, 0x8e, 0xc1, 0xf5, 0xc3, 0x8c,
|
||||
0xc5, 0x8d, 0x12, 0x22, 0x4e, 0x00, 0x2a, 0x12, 0x12, 0x9f, 0x04, 0x2b, 0x24, 0x12, 0x02, 0xd8,
|
||||
0x50, 0x24, 0x40, 0xc2, 0x54, 0xef, 0x8e, 0xfe, 0xf5, 0xc2, 0x8c, 0xc1, 0x8d, 0xc3, 0x22, 0xc4,
|
||||
0x7f, 0x78, 0xf6, 0xe4, 0xfd, 0xd8, 0x81, 0x75, 0x02, 0x3b, 0x99, 0x16, 0x06, 0x7d, 0x90, 0x7c,
|
||||
0x02, 0x7f, 0x00, 0x7e, 0x29, 0x02, 0x8e, 0xa5, 0x8f, 0x82, 0xa3, 0x83, 0x82, 0xae, 0x83, 0xaf,
|
||||
0x12, 0x22, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x74, 0x38, 0x90, 0xff, 0xf8, 0x7f,
|
||||
0xa3, 0xf0, 0x22, 0xf0, 0x90, 0xe4, 0xf8, 0x7f, 0xa3, 0xf0, 0x22, 0xf0, 0x90, 0xe4, 0xf8, 0x7f,
|
||||
0xa3, 0xf0, 0x22, 0xf0, 0x00, 0x83, 0x1f, 0xfe, 0x00, 0x02, 0x00, 0x01, 0xe8, 0x03, 0x10, 0x00,
|
||||
0x08, 0x00, 0x80, 0x00, 0x03, 0x94, 0x00, 0xd9, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
#endif /* __DRXJ_MC_VSB_H__ */
|
1444
drivers/media/dvb-frontends/drx39xyj/drxj_mc_vsbqam.h
Normal file
1444
drivers/media/dvb-frontends/drx39xyj/drxj_mc_vsbqam.h
Normal file
File diff suppressed because it is too large
Load diff
68
drivers/media/dvb-frontends/drx39xyj/drxj_options.h
Normal file
68
drivers/media/dvb-frontends/drx39xyj/drxj_options.h
Normal file
|
@ -0,0 +1,68 @@
|
|||
/**
|
||||
* \file $Id: drxj_options.h,v 1.5 2009/10/05 21:32:49 dingtao Exp $
|
||||
*
|
||||
* \brief DRXJ optional settings
|
||||
*
|
||||
* \author Tao Ding
|
||||
*/
|
||||
|
||||
/*
|
||||
* $(c) 2006-2007,2009 Trident Microsystems, Inc. - All rights reserved.
|
||||
*
|
||||
* This software and related documentation (the 'Software') are intellectual
|
||||
* property owned by Trident and are copyright of Trident, unless specifically
|
||||
* noted otherwise.
|
||||
*
|
||||
* Any use of the Software is permitted only pursuant to the terms of the
|
||||
* license agreement, if any, which accompanies, is included with or applicable
|
||||
* to the Software ('License Agreement') or upon express written consent of
|
||||
* Trident. Any copying, reproduction or redistribution of the Software in
|
||||
* whole or in part by any means not in accordance with the License Agreement
|
||||
* or as agreed in writing by Trident is expressly prohibited.
|
||||
*
|
||||
* THE SOFTWARE IS WARRANTED, IF AT ALL, ONLY ACCORDING TO THE TERMS OF THE
|
||||
* LICENSE AGREEMENT. EXCEPT AS WARRANTED IN THE LICENSE AGREEMENT THE SOFTWARE
|
||||
* IS DELIVERED 'AS IS' AND TRIDENT HEREBY DISCLAIMS ALL WARRANTIES AND
|
||||
* CONDITIONS WITH REGARD TO THE SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
* AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIT
|
||||
* ENJOYMENT, TITLE AND NON-INFRINGEMENT OF ANY THIRD PARTY INTELLECTUAL
|
||||
* PROPERTY OR OTHER RIGHTS WHICH MAY RESULT FROM THE USE OR THE INABILITY
|
||||
* TO USE THE SOFTWARE.
|
||||
*
|
||||
* IN NO EVENT SHALL TRIDENT BE LIABLE FOR INDIRECT, INCIDENTAL, CONSEQUENTIAL,
|
||||
* PUNITIVE, SPECIAL OR OTHER DAMAGES WHATSOEVER INCLUDING WITHOUT LIMITATION,
|
||||
* DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
|
||||
* INFORMATION, AND THE LIKE, ARISING OUT OF OR RELATING TO THE USE OF OR THE
|
||||
* INABILITY TO USE THE SOFTWARE, EVEN IF TRIDENT HAS BEEN ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGES, EXCEPT PERSONAL INJURY OR DEATH RESULTING FROM
|
||||
* TRIDENT'S NEGLIGENCE. $
|
||||
*
|
||||
*/
|
||||
|
||||
/* Note: Please add preprocessor DRXJ_OPTIONS_H for drxj.c to include this file */
|
||||
#ifndef __DRXJ_OPTIONS_H__
|
||||
#define __DRXJ_OPTIONS_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* #define DRXJ_DIGITAL_ONLY */
|
||||
/* #define DRXJ_VSB_ONLY */
|
||||
/* #define DRXJ_SIGNAL_ACCUM_ERR */
|
||||
/* #define MPEG_SERIAL_OUTPUT_PIN_DRIVE_STRENGTH 0x03 */
|
||||
/* #define MPEG_PARALLEL_OUTPUT_PIN_DRIVE_STRENGTH 0x04 */
|
||||
/* #define MPEG_OUTPUT_CLK_DRIVE_STRENGTH 0x05 */
|
||||
/* #define OOB_CRX_DRIVE_STRENGTH 0x04 */
|
||||
/* #define OOB_DRX_DRIVE_STRENGTH 0x05 */
|
||||
/* #define DRXJ_QAM_MAX_WAITTIME 1000 */
|
||||
/* #define DRXJ_QAM_FEC_LOCK_WAITTIME 200 */
|
||||
/* #define DRXJ_QAM_DEMOD_LOCK_EXT_WAITTIME 250 */
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
THE END
|
||||
-------------------------------------------------------------------------*/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* __DRXJ_OPTIONS_H__ */
|
|
@ -214,6 +214,17 @@ static struct em28xx_reg_seq terratec_cinergy_USB_XS_FR_digital[] = {
|
|||
{ -1, -1, -1, -1},
|
||||
};
|
||||
|
||||
/* PCTV HD Mini (80e) GPIOs
|
||||
0-5: not used
|
||||
6: demod reset, active low
|
||||
7: LED on, active high */
|
||||
static struct em28xx_reg_seq em2874_pctv_80e_digital[] = {
|
||||
{EM28XX_R06_I2C_CLK, 0x45, 0xff, 10}, /*400 KHz*/
|
||||
{EM2874_R80_GPIO_P0_CTRL, 0x80, 0xff, 100},/*Demod reset*/
|
||||
{EM2874_R80_GPIO_P0_CTRL, 0xc0, 0xff, 10},
|
||||
{ -1, -1, -1, -1},
|
||||
};
|
||||
|
||||
/* eb1a:2868 Reddo DVB-C USB TV Box
|
||||
GPIO4 - CU1216L NIM
|
||||
Other GPIOs seems to be don't care. */
|
||||
|
@ -2128,6 +2139,13 @@ struct em28xx_board em28xx_boards[] = {
|
|||
.tuner_gpio = default_tuner_gpio,
|
||||
.def_i2c_bus = 1,
|
||||
},
|
||||
[EM2874_BOARD_PCTV_HD_MINI_80E] = {
|
||||
.name = "Pinnacle PCTV HD Mini",
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.has_dvb = 1,
|
||||
.dvb_gpio = em2874_pctv_80e_digital,
|
||||
.decoder = EM28XX_NODECODER,
|
||||
},
|
||||
/* 1ae7:9003/9004 SpeedLink Vicious And Devine Laplace webcam
|
||||
* Empia EM2765 + OmniVision OV2640 */
|
||||
[EM2765_BOARD_SPEEDLINK_VAD_LAPLACE] = {
|
||||
|
@ -2290,6 +2308,8 @@ struct usb_device_id em28xx_id_table[] = {
|
|||
.driver_info = EM2882_BOARD_PINNACLE_HYBRID_PRO_330E },
|
||||
{ USB_DEVICE(0x2304, 0x0227),
|
||||
.driver_info = EM2880_BOARD_PINNACLE_PCTV_HD_PRO },
|
||||
{ USB_DEVICE(0x2304, 0x023f),
|
||||
.driver_info = EM2874_BOARD_PCTV_HD_MINI_80E },
|
||||
{ USB_DEVICE(0x0413, 0x6023),
|
||||
.driver_info = EM2800_BOARD_LEADTEK_WINFAST_USBII },
|
||||
{ USB_DEVICE(0x093b, 0xa003),
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
#include "mt352.h"
|
||||
#include "mt352_priv.h" /* FIXME */
|
||||
#include "tda1002x.h"
|
||||
#include "drx39xyj/drx39xxj.h"
|
||||
#include "tda18271.h"
|
||||
#include "s921.h"
|
||||
#include "drxd.h"
|
||||
|
@ -821,6 +822,20 @@ static const struct m88ds3103_config pctv_461e_m88ds3103_config = {
|
|||
.agc = 0x99,
|
||||
};
|
||||
|
||||
|
||||
static struct tda18271_std_map drx_j_std_map = {
|
||||
.atsc_6 = { .if_freq = 5000, .agc_mode = 3, .std = 0, .if_lvl = 1,
|
||||
.rfagc_top = 0x37, },
|
||||
.qam_6 = { .if_freq = 5380, .agc_mode = 3, .std = 3, .if_lvl = 1,
|
||||
.rfagc_top = 0x37, },
|
||||
};
|
||||
|
||||
static struct tda18271_config pinnacle_80e_dvb_config = {
|
||||
.std_map = &drx_j_std_map,
|
||||
.gate = TDA18271_GATE_DIGITAL,
|
||||
.role = TDA18271_MASTER,
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
static int em28xx_attach_xc3028(u8 addr, struct em28xx *dev)
|
||||
|
@ -1374,6 +1389,18 @@ static int em28xx_dvb_init(struct em28xx *dev)
|
|||
goto out_free;
|
||||
}
|
||||
break;
|
||||
case EM2874_BOARD_PCTV_HD_MINI_80E:
|
||||
dvb->fe[0] = dvb_attach(drx39xxj_attach, &dev->i2c_adap[dev->def_i2c_bus]);
|
||||
if (dvb->fe[0] != NULL) {
|
||||
dvb->fe[0] = dvb_attach(tda18271_attach, dvb->fe[0], 0x60,
|
||||
&dev->i2c_adap[dev->def_i2c_bus],
|
||||
&pinnacle_80e_dvb_config);
|
||||
if (!dvb->fe[0]) {
|
||||
result = -EINVAL;
|
||||
goto out_free;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EM28178_BOARD_PCTV_461E:
|
||||
{
|
||||
/* demod I2C adapter */
|
||||
|
|
|
@ -104,6 +104,7 @@
|
|||
#define EM2882_BOARD_PINNACLE_HYBRID_PRO_330E 56
|
||||
#define EM2883_BOARD_KWORLD_HYBRID_330U 57
|
||||
#define EM2820_BOARD_COMPRO_VIDEOMATE_FORYOU 58
|
||||
#define EM2874_BOARD_PCTV_HD_MINI_80E 59
|
||||
#define EM2883_BOARD_HAUPPAUGE_WINTV_HVR_850 60
|
||||
#define EM2820_BOARD_PROLINK_PLAYTV_BOX4_USB2 61
|
||||
#define EM2820_BOARD_GADMEI_TVR200 62
|
||||
|
|
Loading…
Reference in a new issue