sony_result_t sony_demod_isdbt_monitor_PresetInfo(sony_demod_t*                   pDemod,
                                                  sony_demod_isdbt_preset_info_t* pPresetInfo)
{
    sony_result_t result = SONY_RESULT_OK;
    SONY_TRACE_ENTER("sony_demod_isdbt_monitor_PresetInfo");

    if ((!pDemod) || (!pPresetInfo)) {
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_ARG);
    }
    
    if ((pDemod->state != SONY_DEMOD_STATE_ACTIVE) &&
        (pDemod->state != SONY_DEMOD_STATE_EWS)) {
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_SW_STATE);
    }

    result = SLVT_FreezeReg(pDemod);
    if (result != SONY_RESULT_OK) {
        SONY_TRACE_RETURN(result);
    }

    result = isLock(pDemod);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    /* Set SLV-T Bank : 0x60 */
    result = pDemod->pI2c->WriteOneRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x60);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    /*
     *  slave    Bank    Addr    Bit              Name        
     *  --------------------------------------------------------
     *  <SLV-T>   60h     32h    [7:0]          PIR_TMCC_SET_2
     *  <SLV-T>   60h     33h    [7:0]          PIR_TMCC_SET_3
     *  <SLV-T>   60h     34h    [7:0]          PIR_TMCC_SET_4
     *  <SLV-T>   60h     35h    [7:0]          PIR_TMCC_SET_5
     *  <SLV-T>   60h     36h    [7:0]          PIR_TMCC_SET_6
     *  <SLV-T>   60h     37h    [7:0]          PIR_TMCC_SET_7
     *  <SLV-T>   60h     38h    [7:0]          PIR_TMCC_SET_8
     *  <SLV-T>   60h     39h    [7:0]          PIR_TMCC_SET_9
     *  <SLV-T>   60h     3Ah    [7:0]          PIR_TMCC_SET_10
     *  <SLV-T>   60h     3Bh    [7:0]          PIR_TMCC_SET_11
     *  <SLV-T>   60h     3Ch    [7:0]          PIR_TMCC_SET_12
     *  <SLV-T>   60h     3Dh    [7:0]          PIR_TMCC_SET_13
     *  <SLV-T>   60h     3Eh    [7:0]          PIR_TMCC_SET_14
     */
    result = pDemod->pI2c->ReadRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0x32, pPresetInfo->data, 13);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    SLVT_UnFreezeReg(pDemod);

    SONY_TRACE_RETURN(result);
}
bool CActorInstance::CanMove()
{
	if (!CanAct())
		return false;

	if (isLock())
		return false;

	return true;
}
sony_result_t sony_demod_isdbt_monitor_SpectrumSense(sony_demod_t*                 pDemod,
                                                     sony_demod_spectrum_sense_t * pSense)
{
    sony_result_t result = SONY_RESULT_OK;
    uint8_t data = 0;
    SONY_TRACE_ENTER("sony_demod_isdbt_monitor_SpectrumSense");

    if ((!pDemod) || (!pSense)) {
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_ARG);
    }

    if ((pDemod->state != SONY_DEMOD_STATE_ACTIVE) &&
        (pDemod->state != SONY_DEMOD_STATE_EWS)) {
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_SW_STATE);
    }

    result = SLVT_FreezeReg(pDemod);
    if (result != SONY_RESULT_OK) {
        SONY_TRACE_RETURN(result);
    }

    result = isLock(pDemod);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    /* Set SLV-T Bank : 0x60 */
    result = pDemod->pI2c->WriteOneRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x60);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    /*
     * slave    Bank    Addr    Bit          Signal name                Meaning
     * ---------------------------------------------------------------------------------
     * <SLV-T>   60h     3Fh     [0]          IREG_COSNE_SINV    0:Not inverted,  1:Inverted
     */
    result = pDemod->pI2c->ReadRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0x3F, &data, 1);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    SLVT_UnFreezeReg(pDemod);

    if (pDemod->confSense == SONY_DEMOD_SPECTRUM_INV) {
        *pSense = (data & 0x01) ? SONY_DEMOD_SPECTRUM_NORMAL : SONY_DEMOD_SPECTRUM_INV;
    } else {
        *pSense = (data & 0x01) ? SONY_DEMOD_SPECTRUM_INV : SONY_DEMOD_SPECTRUM_NORMAL;
    }

    SONY_TRACE_RETURN(result);
}
void CActorInstance::OnShootDamage()
{
	if (IsStun())
	{
		Die();
	}
	else
	{
		__Shake(100);

		if (!isLock() && !__IsKnockDownMotion() && !__IsStandUpMotion())
		{
			if (InterceptOnceMotion(CRaceMotionData::NAME_DAMAGE))
				PushLoopMotion(CRaceMotionData::NAME_WAIT);
		}
	}
}
Beispiel #5
0
 void unLockofLog() {
   if (isLock()) {
     isLock_ = false;
     mutex.unlock();
   }
 }
Beispiel #6
0
 void lockofLog() {
   if (!isLock()) {
     mutex.lock();
     isLock_ = true;
   }
 }
sony_result_t sony_demod_isdbt_monitor_PacketErrorNumber(sony_demod_t*               pDemod,
                                                         sony_isdbt_monitor_target_t target,
                                                         uint32_t*                   pPacketErrorNum)
{
    sony_result_t result = SONY_RESULT_OK;
    uint8_t data[2];
    SONY_TRACE_ENTER("sony_demod_isdbt_monitor_PacketErrorNumber");

    if ((!pDemod) || (!pPacketErrorNum)) {
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_ARG);
    }

    if (pDemod->state != SONY_DEMOD_STATE_ACTIVE) {
        /* Invalid on EWS mode */
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_SW_STATE);
    }

    result = SLVT_FreezeReg(pDemod);
    if (result != SONY_RESULT_OK) {
        SONY_TRACE_RETURN(result);
    }

    result = isLock(pDemod);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    /* Set SLV-T Bank : 0x60 */
    result = pDemod->pI2c->WriteOneRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x60);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    switch (target) {
    case SONY_ISDBT_MONITOR_TARGET_LAYER_A:
        /*
         * slave    Bank    Addr    Bit           Name
         * ------------------------------------------------------------
         * <SLV-T>   60h     A2h     [7:0]    ICWRJCTCNT_A[15:8]
         * <SLV-T>   60h     A3h     [7:0]    ICWRJCTCNT_A[7:0]
         */
        result = pDemod->pI2c->ReadRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0xA2, data, 2);
        break;
    case SONY_ISDBT_MONITOR_TARGET_LAYER_B:
        /*
         * slave    Bank    Addr    Bit           Name
         * ------------------------------------------------------------
         * <SLV-T>   60h     A4h     [7:0]    ICWRJCTCNT_B[15:8]
         * <SLV-T>   60h     A5h     [7:0]    ICWRJCTCNT_B[7:0]
         */
        result = pDemod->pI2c->ReadRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0xA4, data, 2);
        break;
    case SONY_ISDBT_MONITOR_TARGET_LAYER_C:
        /*
         * slave    Bank    Addr    Bit           Name
         * ------------------------------------------------------------
         * <SLV-T>   60h     A6h     [7:0]    ICWRJCTCNT_C[15:8]
         * <SLV-T>   60h     A7h     [7:0]    ICWRJCTCNT_C[7:0]
         */
        result = pDemod->pI2c->ReadRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0xA6, data, 2);
        break;
    default:
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_ARG);
    }

    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }
    
    SLVT_UnFreezeReg(pDemod);

    *pPacketErrorNum = 0;
    *pPacketErrorNum = data[0];
    *pPacketErrorNum = (*pPacketErrorNum << 8) + data[1];


    SONY_TRACE_RETURN(result);
}
sony_result_t sony_demod_isdbt_monitor_PER(sony_demod_t*                pDemod,
                                           sony_isdbt_monitor_target_t  target,
                                           uint32_t*                    pPER)
{
    sony_result_t result = SONY_RESULT_OK;
    uint8_t tmpPacketNum[2] = {0x00, 0x00};
    uint8_t tmpPacketError[2] = {0x00, 0x00};
    uint16_t packetNum = 0x0000;
    uint32_t packetError = 0x00000000;
    SONY_TRACE_ENTER("sony_demod_isdbt_monitor_PER");

    if ((!pDemod) || (!pPER)) {
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_ARG);
    }

    if (pDemod->state != SONY_DEMOD_STATE_ACTIVE) {
        /* Invalid on EWS mode */
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_SW_STATE);
    }

    result = SLVT_FreezeReg(pDemod);
    if (result != SONY_RESULT_OK) {
        SONY_TRACE_RETURN(result);
    }

    result = isLock(pDemod);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    /* Set SLV-T Bank : 0x60 */
    result = pDemod->pI2c->WriteOneRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x60);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }
    
    /*
     *  slave     Bank   Addr    Bit          Name
     * ------------------------------------------------------------
     * <SLV-T>    60h    5Bh     [6:0]    OBER_CDUR_RSA[14:8]
     * <SLV-T>    60h    5Ch     [7:0]    OBER_CDUR_RSA[7:0]
     */
    result = pDemod->pI2c->ReadRegister(pDemod->pI2c,
                                        pDemod->i2cAddressSLVT,
                                        0x5B,
                                        tmpPacketNum,
                                        2);

    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    switch (target) {
    case SONY_ISDBT_MONITOR_TARGET_LAYER_A:
        /*
         *  slave     Bank   Addr    Bit          Name
         * ------------------------------------------------------------
         * <SLV-T>    60h    1Fh     [6:0]    IBER_PENUM_RSA[14:8]
         * <SLV-T>    60h    20h     [7:0]    IBER_PENUM_RSA[7:0]
         */
        result = pDemod->pI2c->ReadRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0x1F, tmpPacketError, 2);
        break;
    case SONY_ISDBT_MONITOR_TARGET_LAYER_B:
        /*
         *  slave     Bank   Addr    Bit          Name
         * ------------------------------------------------------------
         * <SLV-T>    60h    21h     [6:0]    IBER_PENUM_RSB[14:8]
         * <SLV-T>    60h    22h     [7:0]    IBER_PENUM_RSB[7:0]
         */
        result = pDemod->pI2c->ReadRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0x21, tmpPacketError, 2);
        break;
    case SONY_ISDBT_MONITOR_TARGET_LAYER_C:
        /*
         *  slave     Bank   Addr    Bit          Name
         * ------------------------------------------------------------
         * <SLV-T>    60h    23h     [6:0]    IBER_PENUM_RSC[14:8]
         * <SLV-T>    60h    24h     [7:0]    IBER_PENUM_RSC[7:0]
         */
        result = pDemod->pI2c->ReadRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0x23, tmpPacketError, 2);
        break;
    default:
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_ARG);
    }
    
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    SLVT_UnFreezeReg(pDemod);
    
    packetError = tmpPacketError[0];
    packetError = (packetError << 8) + tmpPacketError[1];
    packetNum = tmpPacketNum[0];
    packetNum = (packetNum << 8) + tmpPacketNum[1];

    if (packetNum == 0) {
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_HW_STATE);
    }
    /*
      PER = packetError * 1000000 / packetNum

      PER = packetError * 1000 * 1000 / packetNum
     */
    {
        uint32_t div = 0;
        uint32_t Q = 0;
        uint32_t R = 0;

        div = packetNum;
        Q = (packetError * 1000) / div;
        R = (packetError * 1000) % div;

        R *= 1000;
        Q = Q * 1000 + R / div;
        R = R % div;

        if ((div != 1) && (R >= (div / 2))) {
            *pPER = Q + 1;
        } else {
            *pPER = Q;
        }
    }
    
    SONY_TRACE_RETURN(result);
}
sony_result_t sony_demod_isdbt_monitor_PreRSBER(sony_demod_t*               pDemod,
                                                sony_isdbt_monitor_target_t target,
                                                uint32_t*                   pBER)
{
    sony_result_t result = SONY_RESULT_OK;
    uint8_t tmpPacketNum[2] = {0x00, 0x00};
    uint8_t tmpBitError[3] = {0x00, 0x00, 0x00};
    uint16_t packetNum = 0x0000;
    uint32_t bitError = 0x00000000;

    SONY_TRACE_ENTER("sony_demod_isdbt_monitor_PreRSBER");

    if ((!pDemod) || (!pBER)) {
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_ARG);
    }

    if (pDemod->state != SONY_DEMOD_STATE_ACTIVE) {
        /* Invalid on EWS mode */
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_SW_STATE);
    }

    result = SLVT_FreezeReg(pDemod);
    if (result != SONY_RESULT_OK) {
        SONY_TRACE_RETURN(result);
    }

    result = isLock(pDemod);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    /* Set SLV-T Bank : 0x60 */
    result = pDemod->pI2c->WriteOneRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x60);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    /*
     *  slave     Bank   Addr    Bit          Name
     * ------------------------------------------------------------
     * <SLV-T>    60h    5Bh     [6:0]    OBER_CDUR_RSA[14:8]
     * <SLV-T>    60h    5Ch     [7:0]    OBER_CDUR_RSA[7:0]
     */
    result = pDemod->pI2c->ReadRegister(pDemod->pI2c,
                                        pDemod->i2cAddressSLVT,
                                        0x5B,
                                        tmpPacketNum,
                                        2);

    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    switch (target) {
    case SONY_ISDBT_MONITOR_TARGET_LAYER_A:
        /*
         *  slave     Bank   Addr    Bit          Name
         * ------------------------------------------------------------
         * <SLV-T>    60h    16h     [5:0]    IBER_BENUM_RSA[21:16]
         * <SLV-T>    60h    17h     [7:0]    IBER_BENUM_RSA[15:8]
         * <SLV-T>    60h    18h     [7:0]    IBER_BENUM_RSA[7:0]
         */
        result = pDemod->pI2c->ReadRegister(pDemod->pI2c,
                                            pDemod->i2cAddressSLVT,
                                            0x16,
                                            tmpBitError,
                                            3);
        break;
    case SONY_ISDBT_MONITOR_TARGET_LAYER_B:
        /*
         *  slave     Bank   Addr    Bit          Name
         * ------------------------------------------------------------
         * <SLV-T>    60h    19h     [5:0]    IBER_BENUM_RSB[21:16]
         * <SLV-T>    60h    1Ah     [7:0]    IBER_BENUM_RSB[15:8]
         * <SLV-T>    60h    1Bh     [7:0]    IBER_BENUM_RSB[7:0]
         */
        result = pDemod->pI2c->ReadRegister(pDemod->pI2c,
                                            pDemod->i2cAddressSLVT,
                                            0x19,
                                            tmpBitError,
                                            3);
        break;
    case SONY_ISDBT_MONITOR_TARGET_LAYER_C:
        /*
         *  slave     Bank   Addr    Bit          Name
         * ------------------------------------------------------------
         * <SLV-T>    60h    1Ch     [5:0]    IBER_BENUM_RSC[21:16]
         * <SLV-T>    60h    1Dh     [7:0]    IBER_BENUM_RSC[15:8]
         * <SLV-T>    60h    1Eh     [7:0]    IBER_BENUM_RSC[7:0]
         */
        result = pDemod->pI2c->ReadRegister(pDemod->pI2c,
                                            pDemod->i2cAddressSLVT,
                                            0x1C,
                                            tmpBitError,
                                            3);
        break;
    default:
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_ARG);
    }
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    SLVT_UnFreezeReg(pDemod);

    packetNum = tmpPacketNum[0];
    packetNum = (packetNum << 8) + tmpPacketNum[1];
    bitError = tmpBitError[0] & 0x7F;
    bitError = (bitError << 8) + tmpBitError[1];
    bitError = (bitError << 8) + tmpBitError[2];

    if (packetNum == 0) {
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_HW_STATE);
    }

    /*
        BER = (bitError * 10000000) / (packetNum * 8 * 204)

        BER = (bitError * 312500) / (packetNum * 51)

        BER = (bitError * 250 * 1250) / (packetNum * 51)

     */

    {
        uint32_t div = 0;
        uint32_t Q = 0;
        uint32_t R = 0;

        div = packetNum * 51;

        Q = (bitError * 250) / div;
        R = (bitError * 250) % div;

        R *= 1250;
        Q = Q * 1250 + R / div;
        R = R % div;

        if (R >= (div/2)) {
            *pBER = Q + 1;
        } else {
            *pBER = Q;
        }
    }

    SONY_TRACE_RETURN(result);
}
sony_result_t sony_demod_isdbt_monitor_ModeGuard(sony_demod_t*       pDemod,
                                                 sony_isdbt_mode_t*  pMode,
                                                 sony_isdbt_guard_t* pGuard)
{
    sony_result_t result = SONY_RESULT_OK;
    uint8_t data = 0x00;
    SONY_TRACE_ENTER("sony_demod_isdbt_monitor_ModeGuard");

    if ((!pDemod) || (!pMode) || (!pGuard)) {
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_ARG);
    }

    if ((pDemod->state != SONY_DEMOD_STATE_ACTIVE) &&
        (pDemod->state != SONY_DEMOD_STATE_EWS)) {
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_SW_STATE);
    }

    result = SLVT_FreezeReg(pDemod);
    if (result != SONY_RESULT_OK) {
        SONY_TRACE_RETURN(result);
    }

    result = isLock(pDemod);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    /* Set SLV-T Bank : 0x60 */
    result = pDemod->pI2c->WriteOneRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x60);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    /*
     *  slave    Bank    Addr    Bit           Name               Meaning
     * ---------------------------------------------------------------------------------
     * <SLV-T>   60h     40h     [3:2]        IREG_MODE[1:0]     0:Mode1, 1:Mode3, 2:Mode2
     * <SLV-T>   60h     40h     [1:0]        IREG_GI[1:0]       0:1/32, 1:1/16, 2:1/8, 3:1/4
     */
    result = pDemod->pI2c->ReadRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0x40, &data, 1);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    SLVT_UnFreezeReg(pDemod);
    
    switch ((data >> 2) & 0x03) {
    case 0:
        *pMode = SONY_ISDBT_MODE_1;
        break;
    case 1:
        *pMode = SONY_ISDBT_MODE_3;
        break;
    case 2:
        *pMode = SONY_ISDBT_MODE_2;
        break;
    default:
        *pMode = SONY_ISDBT_MODE_UNKNOWN;
        break;
    }

    switch (data & 0x03) {
    case 0:
        *pGuard = SONY_ISDBT_GUARD_1_32;
        break;
    case 1:
        *pGuard = SONY_ISDBT_GUARD_1_16;
        break;
    case 2:
        *pGuard = SONY_ISDBT_GUARD_1_8;
        break;
    case 3:
        *pGuard = SONY_ISDBT_GUARD_1_4;
        break;
    default:
        *pGuard = SONY_ISDBT_GUARD_UNKNOWN;
        break;
    }

    SONY_TRACE_RETURN(result);
}
sony_result_t sony_demod_isdbt_monitor_SNR(sony_demod_t* pDemod,
                                           int32_t*      pSNR)
{
    sony_result_t result = SONY_RESULT_OK;
    uint8_t data[2] = {0x00, 0x00};
    uint16_t iregSnmonOd = 0x0000;
    SONY_TRACE_ENTER("sony_demod_isdbt_monitor_SNR");

    if ((!pDemod) || (!pSNR)) {
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_ARG);
    }

    if ((pDemod->state != SONY_DEMOD_STATE_ACTIVE) &&
        (pDemod->state != SONY_DEMOD_STATE_EWS)) {
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_SW_STATE);
    }

    result = SLVT_FreezeReg(pDemod);
    if (result != SONY_RESULT_OK) {
        SONY_TRACE_RETURN(result);
    }

    result = isLock(pDemod);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    /* Set SLV-T Bank : 0x60 */
    result = pDemod->pI2c->WriteOneRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x60);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    /*
     * slave    Bank    Addr    Bit              Name
     * ------------------------------------------------------------
     * <SLV-T>   60h     28h     [7:0]        IREG_SNMON_OD[15:8]
     * <SLV-T>   60h     29h     [7:0]        IREG_SNMON_OD[7:0]
     */
    result = pDemod->pI2c->ReadRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0x28, data, 2);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    SLVT_UnFreezeReg(pDemod);

    iregSnmonOd = data[0];
    iregSnmonOd = (iregSnmonOd << 8) + data[1];

    if (iregSnmonOd == 0) {
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_HW_STATE);
    }

    /* 
     *
     * Xtal = 20.5MHz or 41MHz and
     * BW8MHz:
     *           if IREG_SNMON_OD > 1143
     *           SNR[dB] = 10 * log10 ( 1143 / ( 1200 - 1143 ) ) + 22
     *           else
     *           SNR[dB] = 10 * log10 ( IREG_SNMON_OD / ( 1200 - IREG_SNMON_OD ) ) + 22
     *                   = 10 * (log10(IREG_SNMON_OD) - log10(1200 - IREG_SNMON_OD)) + 22
     *           sony_log10 returns log10(x) * 100
     *           Therefore SNR(dB) * 1000 :
     *                   = 10 * 10 * (sony_log10(IREG_SNMON_OD) - sony_log10(1200 - IREG_SNMON_OD) + 22
     *
     * Others:   SNR[dB] = 10 * log10 (IREG_SNMON_OD / 8 )
     *                   = 10 * (log10(IREG_SNMON_OD) - log10(8))
     *           sony_log10 returns log10(x) * 100
     *           Therefore SNR(dB) * 1000 :
     *                   = 10 * 10 * (sony_log10(IREG_SNMON_OD) - sony_log10(8))
     *                   = 10 * 10 * sony_log10(IREG_SNMON_OD) - 9031
     */

    if ((pDemod->bandwidth == SONY_DEMOD_BW_8_MHZ) &&
        ((pDemod->xtalFreq == SONY_DEMOD_XTAL_20500KHz) ||
        (pDemod->xtalFreq == SONY_DEMOD_XTAL_41000KHz))) {
        if (iregSnmonOd > 1143) {
            iregSnmonOd = 1143;
        }
        *pSNR = 10 * 10 * ((int32_t)sony_math_log10(iregSnmonOd) - (int32_t)sony_math_log10(1200 - iregSnmonOd));
        *pSNR += 22000;
    } else {
        *pSNR = 100 * (int32_t)sony_math_log10(iregSnmonOd) - 9031;
    }

    SONY_TRACE_RETURN(result);
}
sony_result_t sony_demod_isdbt_monitor_CarrierOffset(sony_demod_t* pDemod,
                                                     int32_t*      pOffset)
{
    sony_result_t result = SONY_RESULT_OK;
    uint8_t data[4] = {0x00, 0x00, 0x00, 0x00};
    uint32_t iregCrcgCtrlval = 0;
    SONY_TRACE_ENTER("sony_demod_isdbt_monitor_CarrierOffset");

    if ((!pDemod) || (!pOffset)) {
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_ARG);
    }

    if ((pDemod->state != SONY_DEMOD_STATE_ACTIVE) &&
        (pDemod->state != SONY_DEMOD_STATE_EWS)) {
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_SW_STATE);
    }

    result = SLVT_FreezeReg(pDemod);
    if (result != SONY_RESULT_OK) {
        SONY_TRACE_RETURN(result);
    }

    result = isLock(pDemod);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    /* Set SLV-T Bank : 0x60 */
    result = pDemod->pI2c->WriteOneRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x60);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    /*
     * slave    Bank    Addr    Bit              Signal name
     * ---------------------------------------------------------------
     * <SLV-T>   60h     4Ch     [4:0]      IREG_CRCG_CTLVAL[28:24]
     * <SLV-T>   60h     4Dh     [7:0]      IREG_CRCG_CTLVAL[23:16]
     * <SLV-T>   60h     4Eh     [7:0]      IREG_CRCG_CTLVAL[15:8]
     * <SLV-T>   60h     4Fh     [7:0]      IREG_CRCG_CTLVAL[7:0]
     */
    result = pDemod->pI2c->ReadRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0x4C, data, 4);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    SLVT_UnFreezeReg(pDemod);

    iregCrcgCtrlval = data[0] & 0x1F;
    iregCrcgCtrlval = (iregCrcgCtrlval << 8) + data[1];
    iregCrcgCtrlval = (iregCrcgCtrlval << 8) + data[2];
    iregCrcgCtrlval = (iregCrcgCtrlval << 8) + data[3];

    /*
     * (1)For the tuner which spectrum sense is not same as RF, use these formulas.
     *  (Ordinary tuner, which is single converted and use upper local. also including ASCOT)
     *
     * Carrier Frequency Offset [Hz] = -( ( IREG_CRCG_CTLVAL / 2^28 ) * 8192 ) / ( 1008 * 10^-6 )   ---6MHz BW
     *                               = -( IREG_CRCG_CTLVAL * 8 / (2^18 * 1008 / 10^6) )
     *                               = -( IREG_CRCG_CTLVAL * 8 / 264.241 )
     *
     * Carrier Frequency Offset [Hz] = -( ( IREG_CRCG_CTLVAL / 2^28 ) * 8192 ) / (  882 * 10^-6 )   ---7MHz BW
     *                               = -( IREG_CRCG_CTLVAL * 8 / (2^18 * 882 / 10^6) )
     *                               = -( IREG_CRCG_CTLVAL * 8 / 231.211 )
     *
     * Carrier Frequency Offset [Hz] = -( ( IREG_CRCG_CTLVAL / 2^28 ) * 8192 ) / (  756 * 10^-6 )   ---8MHz BW
     *                               = -( IREG_CRCG_CTLVAL * 8 / (2^18 * 756 / 10^6) )
     *                               = -( IREG_CRCG_CTLVAL * 8 / 198.181 )
     *
     *  (2)For the tuner which spectrum sense is same as RF, use these formulas.
     *
     * Carrier Frequency Offset [Hz] = ( ( IREG_CRCG_CTLVAL / 2^28 ) * 8192 ) / ( 1008 * 10^-6 )   ---6MHz BW
     * Carrier Frequency Offset [Hz] = ( ( IREG_CRCG_CTLVAL / 2^28 ) * 8192 ) / (  882 * 10^-6 )   ---7MHz BW
     * Carrier Frequency Offset [Hz] = ( ( IREG_CRCG_CTLVAL / 2^28 ) * 8192 ) / (  756 * 10^-6 )   ---8MHz BW
     */
    
    *pOffset = sony_Convert2SComplement(iregCrcgCtrlval, 29);
    switch (pDemod->bandwidth) {
    case SONY_DEMOD_BW_6_MHZ:
        *pOffset = -1 * ((*pOffset) * 8 / 264);
        break;
    case SONY_DEMOD_BW_7_MHZ:
        *pOffset = -1 * ((*pOffset) * 8 / 231);
        break;
    case SONY_DEMOD_BW_8_MHZ:
        *pOffset = -1 * ((*pOffset) * 8 / 198);
        break;
    default:
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_SW_STATE);
    }

    if (pDemod->confSense == SONY_DEMOD_SPECTRUM_INV) {
        *pOffset *= -1;
    }
    
    SONY_TRACE_RETURN(result);
}
sony_result_t sony_demod_isdbt_monitor_ACEEWInfo(sony_demod_t*            pDemod,
                                                 uint8_t*                 pIsExist,
                                                 sony_isdbt_aceew_info_t* pACEEWInfo)
{
    sony_result_t result = SONY_RESULT_OK;
    uint8_t data[36];
    
    SONY_TRACE_ENTER("sony_demod_isdbt_monitor_ACEEWInfo");

    if ((!pDemod) || (!pACEEWInfo) || (!pIsExist)) {
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_ARG);
    }

    if ((pDemod->state != SONY_DEMOD_STATE_ACTIVE) &&
        (pDemod->state != SONY_DEMOD_STATE_EWS)) {
        SONY_TRACE_RETURN(SONY_RESULT_ERROR_SW_STATE);
    }

    result = SLVT_FreezeReg(pDemod);
    if (result != SONY_RESULT_OK) {
        SONY_TRACE_RETURN(result);
    }

    result = isLock(pDemod);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    /*
     * slave    Bank    Addr      Bit           Name
     * ------------------------------------------------------------
     * <SLV-T>   61h     21h       [0]      IREG_AC_EMERGENCY_ACTIVATION
     * <SLV-T>   61h     22h       [7:0]    IREG_AC_EMERGENCY_PAGE0ALL1,IREG_AC_EMERGENCY_PAGE0SECOND_EN,IREG_AC_EMERGENCY_DECODE_EN_0,IREG_AC_EMERGENCY_DECODE_EN_1,IREG_AC_EMERGENCY_DECODE_EN_2
     * <SLV-T>   61h     23h - 2eh          IREG_AC_EMERGENCY_DECODE_0_1 - IREG_AC_EMERGENCY_DECODE_0_11
     * <SLV-T>   61h     2fh - 39h          IREG_AC_EMERGENCY_DECODE_1_1 - IREG_AC_EMERGENCY_DECODE_1_11
     * <SLV-T>   61h     3ah - 44h          IREG_AC_EMERGENCY_DECODE_2_1 - IREG_AC_EMERGENCY_DECODE_2_11
     */
    result = pDemod->pI2c->WriteOneRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x61);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    result = pDemod->pI2c->ReadRegister(pDemod->pI2c, pDemod->i2cAddressSLVT, 0x21, data, 36);
    if (result != SONY_RESULT_OK) {
        SLVT_UnFreezeReg(pDemod);
        SONY_TRACE_RETURN(result);
    }

    SLVT_UnFreezeReg(pDemod);
    
    if(data[0] & 0x01) {
        *pIsExist = 1;

        pACEEWInfo->startEndFlag = (uint8_t)((data[1] >> 6) & 0x03);
        pACEEWInfo->updateFlag = (uint8_t)((data[1] >> 4) & 0x03);
        pACEEWInfo->signalId = (uint8_t)((data[1] >> 1) & 0x07);

        pACEEWInfo->isAreaValid = 0;
        pACEEWInfo->isEpicenter1Valid = 0;
        pACEEWInfo->isEpicenter2Valid = 0;
        if(data[2] & 0x04) {
            /* Area data is valid */
            pACEEWInfo->isAreaValid = 1;
            sony_memcpy(pACEEWInfo->areaInfo.data, &data[3], 11);
        }
        if(data[2] & 0x02) {
            /* Epicenter1 data is valid */
            pACEEWInfo->isEpicenter1Valid = 1;
            sony_memcpy(pACEEWInfo->epicenter1Info.data, &data[14], 11);
        }
        if(data[2] & 0x01) {
            /* Epicenter2 data is valid */
            pACEEWInfo->isEpicenter2Valid = 1;
            sony_memcpy(pACEEWInfo->epicenter2Info.data, &data[25], 11);
        }
    } else {