/*******************************************************************************
**
** Function:    nfc_hal_post_reset_init
**
** Description: Called by the NFC HAL after controller has been reset.
**              Begin to download firmware patch files.
**
** Returns:     none
**
*******************************************************************************/
void nfc_hal_post_reset_init (UINT32 brcm_hw_id, UINT8 nvm_type)
{
    ALOGD("%s: brcm_hw_id=0x%lx, nvm_type=%d", __FUNCTION__, brcm_hw_id, nvm_type);
    tHAL_NFC_STATUS stat = HAL_NFC_STATUS_FAILED;
    UINT8 max_credits = 1, allow_no_nvm=0;

    p_nfc_hal_cfg->nfc_hal_prm_nvm_required = TRUE; //don't download firmware if controller cannot detect EERPOM

    if (nvm_type == NCI_SPD_NVM_TYPE_NONE)
    {
        GetNumValue(NAME_ALLOW_NO_NVM, &allow_no_nvm, sizeof(allow_no_nvm));
        if (allow_no_nvm == 0)
        {
        ALOGD("%s: No NVM detected, FAIL the init stage to force a retry", __FUNCTION__);
        USERIAL_PowerupDevice (0);
        stat = HAL_NfcReInit ();
            return;
        }

        p_nfc_hal_cfg->nfc_hal_prm_nvm_required = FALSE; //allow download firmware if controller cannot detect EERPOM
    }

        /* Start downloading the patch files */
        StartPatchDownload(brcm_hw_id);

        if (GetNumValue(MAX_RF_DATA_CREDITS, &max_credits, sizeof(max_credits)) && (max_credits > 0))
        {
            ALOGD("%s : max_credits=%d", __FUNCTION__, max_credits);
            HAL_NfcSetMaxRfDataCredits(max_credits);
        }
    }
/*******************************************************************************
**
** Function:    configureCrystalFrequency
**
** Description: Configure controller's crystal frequency by reading values from
**              .conf file.  If .conf file does not define any value, then use
**              default values defined in struct nfc_post_reset_cb.
**
** Returns:     none
**
*******************************************************************************/
void configureCrystalFrequency ()
{
    unsigned long num = 0;
    UINT32 hwId = 0;
    UINT16 xtalFreq = 0;
    UINT8 xtalIndex = 0;
    int actualLen = 0;

    if (GetNumValue (NAME_XTAL_HARDWARE_ID, &num, sizeof(num)))
        hwId = num;

    if (GetNumValue (NAME_XTAL_FREQUENCY, &num, sizeof(num)))
        xtalFreq = (UINT16) num;

    if (GetNumValue (NAME_XTAL_FREQ_INDEX, &num, sizeof(num)))
        xtalIndex = (UINT8) num;

    actualLen = GetStrValue (NAME_XTAL_PARAMS_CFG, (char*)sConfig, sizeof(sConfig));
    if (actualLen && (xtalIndex == NFC_HAL_XTAL_INDEX_SPECIAL)) //whether to use custom crystal frequency
    {
        sXtalCustomParam.append (sConfig, actualLen);
        p_nfc_hal_dm_xtal_params_cfg = const_cast<UINT8*> (sXtalCustomParam.getInternalBuffer ());
    }

    if ((hwId == 0) && (xtalFreq == 0) && (xtalIndex == 0))
        return;

    ALOGD ("%s: hwId=0x%lX; freq=%u; index=%u", __FUNCTION__, hwId, xtalFreq, xtalIndex);
    nfc_post_reset_cb.dev_init_config.xtal_cfg[0].brcm_hw_id = (hwId & BRCM_NFC_GEN_MASK);
    nfc_post_reset_cb.dev_init_config.xtal_cfg[0].xtal_freq  = xtalFreq;
    nfc_post_reset_cb.dev_init_config.xtal_cfg[0].xtal_index = xtalIndex;
    nfc_post_reset_cb.dev_init_config.num_xtal_cfg = 1;
}
示例#3
0
/*=== ValidateNum (PUBLIC) only range validation !=================================================
  Insures that the integer  passed in is valid.  First and
  second  argument are required.
  The first and second argument indicate the required range	for int
  Returns:   TRUE  when int is valid;  FALSE when int is not valid
  ==========================================================================*/
BOOL 
CArborEdit::ValidateNum ( int min_val, int max_val ) 
{
	if(  EditStyleIs(EDIT_NUMERIC) )
	{  // ok!
		CString ControlText, sMaxInt;
		GetWindowText(ControlText);
		 // if empty valid by default...
		sMaxInt.Format("%d", INT_MAX);

		if(strlen(ControlText) >= strlen(sMaxInt))
		{
			if(strcmp(ControlText, sMaxInt) > 0)	// string comparison for int overflow
			{
				return FALSE;
			}
		}
		// if the function has been called without params, set the values to the range values
		// if they were set....
		if( m_bIntRangeSet && min_val == 0 && max_val == 0.0 )
		{
			min_val = m_iMinValue;
			max_val = m_iMaxValue;
		}

		if(	min_val >= INT_MIN       && max_val <= INT_MAX       &&		 // validate range user specified
			min_val <= GetNumValue() && max_val >= GetNumValue()     )
			return TRUE;
		else
			return FALSE;
	}
	else
		// you don't have permision to use ValidateInt function to validate Letter string
		return FALSE;
}
/*******************************************************************************
**
** Function:    NfcAdaptation::Initialize()
**
** Description: class initializer
**
** Returns:     none
**
*******************************************************************************/
void NfcAdaptation::Initialize ()
{
    const char* func = "NfcAdaptation::Initialize";
    ALOGD("%s: enter", func);
    ALOGE("%s: ver=%s nfa=%s", func, nfca_version_string, nfa_version_string);
    unsigned long num;

    if ( !GetStrValue ( NAME_NFA_STORAGE, bcm_nfc_location, sizeof ( bcm_nfc_location ) ) )
    {
        memset (bcm_nfc_location, 0, sizeof(bcm_nfc_location));
        strncpy (bcm_nfc_location, "/data/nfc", 9);
    }
    if ( GetNumValue ( NAME_PROTOCOL_TRACE_LEVEL, &num, sizeof ( num ) ) )
        ScrProtocolTraceFlag = num;

    if ( GetStrValue ( NAME_NFA_DM_CFG, (char*)nfa_dm_cfg, sizeof ( nfa_dm_cfg ) ) )
        p_nfa_dm_cfg = ( tNFA_DM_CFG * ) &nfa_dm_cfg[0];

    if ( GetNumValue ( NAME_NFA_MAX_EE_SUPPORTED, &num, sizeof ( num ) ) )
    {
        nfa_ee_max_ee_cfg = num;
        ALOGD("%s: Overriding NFA_EE_MAX_EE_SUPPORTED to use %d", func, nfa_ee_max_ee_cfg);
    }

    initializeGlobalAppLogLevel ();

    verify_stack_non_volatile_store ();
    if ( GetNumValue ( NAME_PRESERVE_STORAGE, (char*)&num, sizeof ( num ) ) &&
            (num == 1) )
        ALOGD ("%s: preserve stack NV store", __FUNCTION__);
    else
    {
        delete_stack_non_volatile_store (FALSE);
    }

    GKI_init ();
    GKI_enable ();
    GKI_create_task ((TASKPTR)NFCA_TASK, BTU_TASK, (INT8*)"NFCA_TASK", 0, 0, (pthread_cond_t*)NULL, NULL);
    {
        AutoThreadMutex guard(mCondVar);
        GKI_create_task ((TASKPTR)Thread, MMI_TASK, (INT8*)"NFCA_THREAD", 0, 0, (pthread_cond_t*)NULL, NULL);
        mCondVar.wait();
    }

    mHalDeviceContext = NULL;
    mHalCallback =  NULL;
    memset (&mHalEntryFuncs, 0, sizeof(mHalEntryFuncs));
    InitializeHalDeviceContext ();
    ALOGD ("%s: exit", func);
}
示例#5
0
// Conversion from CArborEdit to int.
CArborEdit::operator int()
{
   if( EditStyleIs(EDIT_NUMERIC) )
		return(GetNumValue());
	else		// you don't have permition to use this function 
		return 0;
}
/*******************************************************************************
**
** Function:        initialize
**
** Description:     Initialize member variables.
**
** Returns:         None
**
*******************************************************************************/
void PowerSwitch::initialize (PowerLevel level)
{
    static const char fn [] = "PowerSwitch::initialize";
    unsigned long num = 0;

    mMutex.lock ();

    ALOGD ("%s: level=%s (%u)", fn, powerLevelToString(level), level);
    if (GetNumValue (NAME_SCREEN_OFF_POWER_STATE, &num, sizeof(num)))
        mDesiredScreenOffPowerState = (int) num;
    ALOGD ("%s: desired screen-off state=%d", fn, mDesiredScreenOffPowerState);

    switch (level)
    {
    case FULL_POWER:
        mCurrDeviceMgtPowerState = NFA_DM_PWR_MODE_FULL;
        mCurrLevel = level;
        break;

    case UNKNOWN_LEVEL:
        mCurrDeviceMgtPowerState = NFA_DM_PWR_STATE_UNKNOWN;
        mCurrLevel = level;
        break;

    default:
        ALOGE ("%s: not handled", fn);
        break;
    }
    mMutex.unlock ();
}
/*******************************************************************************
**
** Function:        InitializeGlobalAppLogLevel
**
** Description:     Initialize and get global logging level from
**                  Android property nfc.app_log_level.
**
** Returns:         Global log level:
**                  BT_TRACE_LEVEL_NONE    0        * No trace messages to be generated
**                  BT_TRACE_LEVEL_ERROR   1        * Error condition trace messages
**                  BT_TRACE_LEVEL_WARNING 2        * Warning condition trace messages
**                  BT_TRACE_LEVEL_API     3        * API traces
**                  BT_TRACE_LEVEL_EVENT   4        * Debug messages for events
**                  BT_TRACE_LEVEL_DEBUG   5        * Debug messages (general)
**
*******************************************************************************/
unsigned char InitializeGlobalAppLogLevel ()
{
    unsigned long num = 0;
    char valueStr [PROPERTY_VALUE_MAX] = {0};

    num = 1;
    if (GetNumValue (NAME_APPL_TRACE_LEVEL, &num, sizeof(num)))
        appl_trace_level = (unsigned char) num;

    int len = property_get ("nfc.app_log_level", valueStr, "");
    if (len > 0)
    {
        //let Android property override default value
        sscanf (valueStr, "%lu", &num);
        appl_trace_level = (unsigned char) num;
    }

    //0xFF is a special value used by the stack to query the current
    //trace level; it does not change any trace level
    if (appl_trace_level == 0xFF)
        appl_trace_level = BT_TRACE_LEVEL_DEBUG;
    ALOGD ("%s: level=%u", __FUNCTION__, appl_trace_level);

    if (appl_trace_level < BT_TRACE_LEVEL_DEBUG)
    {
        //display protocol traces in raw format
        ProtoDispAdapterUseRawOutput (TRUE);
    }
    return appl_trace_level;
}
bool RoutingManager::initialize ()
{
    unsigned long tech = 0;
    UINT8 mActualNumEe = 0;
    tNFA_EE_INFO mEeInfo [mActualNumEe];

    if ((GetNumValue(NAME_NXP_FWD_FUNCTIONALITY_ENABLE, &tech, sizeof(tech))))
    {
        mFwdFuntnEnable = tech;
        NXPLOG_API_E ("%s:NXP_FWD_FUNCTIONALITY_ENABLE=%d;", __FUNCTION__, mFwdFuntnEnable);
    }

    tNFA_STATUS nfaStat;
    {
        SyncEventGuard guard (mEeRegisterEvent);
        NXPLOG_API_D ("%s: try ee register", "RoutingManager::initialize()");
        nfaStat = NFA_EeRegister (nfaEeCallback);
        if (nfaStat != NFA_STATUS_OK)
        {
            NXPLOG_API_E ("%s: fail ee register; error=0x%X",
                          "RoutingManager::initialize()", nfaStat);
            return false;
        }
        mEeRegisterEvent.wait ();
    }
    if(mHostListnEnable)
    {
        // Tell the host-routing to only listen on Nfc-A/Nfc-B
        nfaStat = NFA_CeRegisterAidOnDH (NULL, 0, stackCallback);
        if (nfaStat != NFA_STATUS_OK)
        {
            NXPLOG_API_E ("Failed to register wildcard AID for DH");
        }
        // Tell the host-routing to only listen on Nfc-A/Nfc-B
        nfaStat = NFA_CeSetIsoDepListenTech(NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_B);
        if (nfaStat != NFA_STATUS_OK)
        {
            NXPLOG_API_E ("Failed to configure CE IsoDep technologies");
        }
    }
    memset(mRxDataBuffer, 0, MAX_CE_RX_BUFFER_SIZE);

    if ((nfaStat = NFA_AllEeGetInfo (&mActualNumEe, mEeInfo)) != NFA_STATUS_OK)
    {
        NXPLOG_API_E ("%s: fail get info; error=0x%X",
                      "RoutingManager::initialize()", nfaStat);
        mActualNumEe = 0;
    }
    return true;
}
RoutingManager::RoutingManager ()
{
    static const char fn [] = "RoutingManager::RoutingManager()";
    unsigned long num = 0;

    // Get the active SE
    if (GetNumValue("ACTIVE_SE", &num, sizeof(num)))
        mActiveSe = num;
    else
        mActiveSe = 0x00;

    // Get the "default" route
    if (GetNumValue("DEFAULT_ISODEP_ROUTE", &num, sizeof(num)))
        mDefaultEe = num;
    else
        mDefaultEe = 0x00;
    ALOGD("%s: default route is 0x%02X", fn, mDefaultEe);

    // Get the default "off-host" route.  This is hard-coded at the Java layer
    // but we can override it here to avoid forcing Java changes.
    if (GetNumValue("DEFAULT_OFFHOST_ROUTE", &num, sizeof(num)))
        mOffHostEe = num;
    else
        mOffHostEe = 0xf4;

    if (GetNumValue("AID_MATCHING_MODE", &num, sizeof(num)))
        mAidMatchingMode = num;
    else
        mAidMatchingMode = AID_MATCHING_EXACT_ONLY;

    ALOGD("%s: mOffHostEe=0x%02X", fn, mOffHostEe);

    memset (&mEeInfo, 0, sizeof(mEeInfo));
    mReceivedEeInfo = false;
    mSeTechMask = 0x00;
}
/*******************************************************************************
**
** Function         getNfaValues
**
** Description      Get configuration values needed by NFA layer
**
** Returns:         None
**
*******************************************************************************/
static void getNfaValues (UINT32 chipid)
{
    unsigned long num = 0;
    int actualLen = 0;

    sStartupConfig.initialize ();
    sLptdConfig.initialize ();
    sPreDiscoveryConfig.initialize();

    actualLen = GetStrValue (NAME_NFA_DM_START_UP_CFG, (char*)sConfig, sizeof(sConfig));
    if (actualLen)
        sStartupConfig.append (sConfig, actualLen);

    // Set antenna tuning configuration if configured.
    actualLen = GetStrValue(NAME_PREINIT_DSP_CFG, (char*)sConfig, sizeof(sConfig));
    if (actualLen)
        sStartupConfig.append (sConfig, actualLen);

    if ( GetStrValue ( NAME_NFA_DM_START_UP_VSC_CFG, (char*)nfa_dm_start_up_vsc_cfg, sizeof (nfa_dm_start_up_vsc_cfg) ) )
    {
        p_nfc_hal_dm_start_up_vsc_cfg = &nfa_dm_start_up_vsc_cfg[0];
        ALOGD ( "START_UP_VSC_CFG[0] = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",
                                                                            nfa_dm_start_up_vsc_cfg[0],
                                                                            nfa_dm_start_up_vsc_cfg[1],
                                                                            nfa_dm_start_up_vsc_cfg[2],
                                                                            nfa_dm_start_up_vsc_cfg[3],
                                                                            nfa_dm_start_up_vsc_cfg[4],
                                                                            nfa_dm_start_up_vsc_cfg[5],
                                                                            nfa_dm_start_up_vsc_cfg[6],
                                                                            nfa_dm_start_up_vsc_cfg[7] );
    }

    actualLen = GetStrValue(NAME_LPTD_CFG, (char*)sConfig, sizeof(sConfig));
    if (actualLen)
    {
        sLptdConfig.append (sConfig, actualLen);
        p_nfc_hal_dm_lptd_cfg = const_cast<UINT8*> (sLptdConfig.getInternalBuffer ());
    }
    else
    {
        // Default to not sending any LPTD setting.
        p_nfc_hal_dm_lptd_cfg = sDontSendLptd;
    }

    mayDisableSecureElement (sStartupConfig);
    p_nfc_hal_dm_start_up_cfg = const_cast<UINT8*> (sStartupConfig.getInternalBuffer ());

    actualLen = GetStrValue(NAME_NFA_DM_PRE_DISCOVERY_CFG, (char*)sConfig, sizeof(sConfig));
    if (actualLen)
    {
        sPreDiscoveryConfig.append (sConfig, actualLen);
        mayDisableSecureElement (sPreDiscoveryConfig);
        p_nfc_hal_pre_discover_cfg = const_cast<UINT8*> (sPreDiscoveryConfig.getInternalBuffer ());
    }

    //configure how many secure elements are available for each type of chip
    if (p_nfc_hal_cfg->nfc_hal_hci_uicc_support > 0)
    {
        if ((chipid & BRCM_NFC_GEN_MASK) == BRCM_NFC_20791_GEN)
        {
            nfc_hal_cb.max_ee = BRCM_NFC_20791_GEN_MAX_EE;
            p_nfc_hal_cfg->nfc_hal_hci_uicc_support = HAL_NFC_HCI_UICC0_HOST | HAL_NFC_HCI_UICC1_HOST;
        }
        else if ((chipid & BRCM_NFC_GEN_MASK) == BRCM_NFC_43341_GEN)
        {
            nfc_hal_cb.max_ee = BRCM_NFC_43341_GEN_MAX_EE;
            p_nfc_hal_cfg->nfc_hal_hci_uicc_support = HAL_NFC_HCI_UICC0_HOST | HAL_NFC_HCI_UICC1_HOST;
        }
        else if ((chipid & BRCM_NFC_GEN_MASK) == BRCM_NFC_20795_GEN)
        {
            nfc_hal_cb.max_ee = BRCM_NFC_20795_GEN_MAX_EE;
            p_nfc_hal_cfg->nfc_hal_hci_uicc_support = HAL_NFC_HCI_UICC0_HOST | HAL_NFC_HCI_UICC1_HOST | HAL_NFC_HCI_UICC2_HOST;
        }

        //let .conf variable determine how many EE's to discover
        if (GetNumValue(NAME_NFA_MAX_EE_SUPPORTED, &num, sizeof(num)))
            nfc_hal_cb.max_ee = num;
    }
}
/*****************************************************************************************
**
** Function         nfc_task_get_nfcc_info
**
** Description      Recieves nfcc information coming from nfcc and forward it further to
**                  to nfc service.
**
** Returns          nothing
**
*****************************************************************************************/
void nfc_task_get_nfcc_info(BT_HDR *p_msg)
{
    UINT8 *p = NULL;
    tNFC_RESPONSE   *nfcc_res = NULL;
    UINT32 nfcc_version;

    NFC_TRACE_DEBUG0 ("nfc_task_get_nfcc_info()");

    if(p_msg == NULL)
    {
        NFC_TRACE_DEBUG0 ("NFCC info null");
        return;
    }

    NFC_TRACE_DEBUG0 ("Sending NFCC info");

    p = (UINT8 *) (p_msg + 1) + p_msg->offset;

    nfa_dm_cb.nfcc_version = p[NFCC_CHIP_VERSION_OFFSET];

    switch(nfa_dm_cb.nfcc_version)
    {
        case NFCC_V_20:
           break;
        case NFCC_V_21:
           break;
        case NFCC_V_24:
           break;
        case NFCC_V_30:
           break;
        default:
           NFC_TRACE_DEBUG0 ("Wrong nfcc version.Read from conf file");
           GetNumValue("NFCC_VERSION", &nfcc_version, sizeof(nfcc_version));
           if(nfcc_version)
           {
               nfa_dm_cb.nfcc_version = nfcc_version;
           }
           else
           {
               /*default 3.0*/
               nfa_dm_cb.nfcc_version = NFCC_V_30;
           }
           break;
    }

    NFC_TRACE_DEBUG1 ("nfa_dm_cb.nfcc_version = %d",nfa_dm_cb.nfcc_version);

    nfcc_res = (tNFC_RESPONSE*)malloc(sizeof(tNFC_RESPONSE));
    if(nfcc_res != NULL)
    {
        nfcc_res->nfcc_info_data.len = p_msg->len;
        nfcc_res->nfcc_info_data.value = (UINT8*)malloc( nfcc_res->nfcc_info_data.len);
        if(nfcc_res->nfcc_info_data.value != NULL)
        {
            if(nfcc_res->nfcc_info_data.len != 0)
            {
                memcpy(nfcc_res->nfcc_info_data.value,p,nfcc_res->nfcc_info_data.len);
                if (nfc_cb.p_resp_cback)
                {
                    (*nfc_cb.p_resp_cback) (NFC_NFCC_INFO_REVT, nfcc_res);
                }
            }
            /*free acquired mem*/
            free(nfcc_res->nfcc_info_data.value);
            nfcc_res->nfcc_info_data.value = NULL;
        }
        else
        {
            NFC_TRACE_DEBUG0 ("Memory allocation failed");
        }
        /*free acquired mem*/
        free(nfcc_res);
        nfcc_res = NULL;
    }
    else
    {
        NFC_TRACE_DEBUG0 ("Memory allocation failed for nfcc_res");
    }
}