/*******************************************************************************
 * FUNCTION
 *   Custom_META_IsAllowedLimitedStateOperation
 *
 * DESCRIPTION
 *   Customizable limited state META mode operation check function
 *
 * CALLS
 *   INT_GetMetaModeSrc
 *
 * PARAMETERS
 *   ptrMsg the ilm_struct of the request message
 *
 * RETURNS
 *   The indicator of the operation is allowed or denied
 *
 *******************************************************************************/
kal_bool Custom_META_IsAllowedLimitedStateOperation(ilm_struct* ptrMsg)
{
#ifdef __TOOL_ACCESS_CTRL__
    // default allowed
    kal_bool allowed = KAL_TRUE;
    FT_H * ft_header = NULL;
    MODE_ENTRY_SRC mode = INT_GetMetaModeSrc();
    /*********************************
     * define more limited state below
     **********************************/
    if(E_BLSUSB == mode)
    {
        ft_header=(FT_H *)(ptrMsg->local_para_ptr);
        // check the operation is basic operation or not
        // non-basic operations can be customized
        if(KAL_FALSE == FT_META_IsBasicOperation(ft_header->ft_msg_id))
        {
            switch (ft_header->ft_msg_id)
            {
                /*******************************************************
                 * Add more allowed operations below for E_BLSUSB state
                 * message type id defined in interface\meta\ft_msg.h
                 * enum type FT_MESSAGE_ID
                 *******************************************************/
                case FT_FAT_OPERATION_ID:
                    allowed = KAL_TRUE;
                    break;
                default:
                    // if the state is limited state, default denied
                    allowed = KAL_FALSE;
                    break;
            }
        }
    }
    /*********************************
     * define more limited state below
     **********************************/
    // else if(...)
    // {
    // }
    return allowed;
#else // #ifdef __TOOL_ACCESS_CTRL__
    return KAL_TRUE;
#endif
}
예제 #2
0
void FT_UtilityCommand(ilm_struct *ptrMsg) {

    FT_UTILITY_COMMAND_REQ  *p_req=(FT_UTILITY_COMMAND_REQ *)ptrMsg->local_para_ptr;
    FT_UTILITY_COMMAND_CNF  cnf;
    peer_buff_struct        *peer_buff_ret = NULL;

    kal_mem_set(&cnf, '\0', sizeof(cnf));
    cnf.type = p_req->type;
    cnf.status = FT_CNF_FAIL;
    peer_buff_ret = NULL;

    switch(p_req->type) {
        case FT_UTILCMD_CHECK_IF_FUNC_EXIST:
            ft_util_check_if_func_exist(p_req, &cnf);
            break;
        case FT_UTILCMD_CHECK_IF_ISP_SUPPORT:
            ft_util_check_if_isp_support(&cnf);
            break;
        case FT_UTILCMD_QUERY_BT_MODULE_ID:
            ft_util_query_bt_module_id(&cnf);
            break;
        case FT_UTILCMD_ENABLE_WATCHDOG_TIMER:
            ft_util_watch_dog_start(p_req, &cnf,peer_buff_ret);
            break;
        case FT_UTILCMD_CHECK_IF_ACOUSTIC16_SUPPORT:
            cnf.status = FT_CNF_OK;
            break;
        case FT_UTILCMD_CHECK_IF_AUDIOPARAM45_SUPPORT:
            cnf.status = FT_CNF_OK;
            break;
        case FT_UTILCMD_CHECK_IF_LOW_COST_SINGLE_BANK_FLASH:
#ifdef _LOW_COST_SINGLE_BANK_FLASH_
            cnf.status = FT_CNF_OK;
#endif
            break;
        case FT_UTILCMD_QUERY_PMIC_ID:
            ft_util_query_pmic_id(&cnf);
            break;
        case FT_UTILCMD_LED_LIGHT_LEVEL:
            ft_util_set_led_light_level(p_req,&cnf);
            break;
        case FT_UTILCMD_VIBRATOR_ONOFF:
            ft_util_set_vibrator_onoff(p_req,&cnf);
            break;
        case FT_UTILCMD_QUERY_LOCAL_TIME:
            ft_util_query_rtc(&cnf);
            break;
        case FT_UTILCMD_RF_ITC_PCL:
            ft_util_query_itc_pcl(&cnf);
            break;
        case FT_UTILCMD_CHECK_IF_WIFI_ALC_SUPPORT:
#if defined(__WIFI_SUPPORT__)
            if(wndrv_get_ALC_enable() && WiFi_Feature_Exist() == KAL_TRUE)
                cnf.status = FT_CNF_OK;
#endif // #if defined(__WIFI_SUPPORT__)
            break;
        case FT_UTILCMD_CHECK_IF_DRC_SUPPORT:
#if defined(DRC_ENABLED)
            cnf.status = FT_CNF_OK;
#endif
            break;
        case FT_UTILCMD_MAIN_SUB_LCD_LIGHT_LEVEL:
            ft_util_set_lcd_light_level(p_req, &cnf);
            break;
        case FT_UTILCMD_CHECK_IF_BT_POWERON:
#ifdef __BTMTK__
            cnf.status=!Custom_BTQueryPowerOnState();// 0 implies not ready, 1 implies ready
            //cnf.status = FT_CNF_OK;
#endif
            break;
        case FT_UTILCMD_CHECK_IF_ULC_FAT_SUPPORT:
            ft_util_check_if_ulc_support(&cnf);
            break;
        case FT_UTILCMD_CHECK_IF_SMART_PHONE_MODEM_SUPPORT:
            ft_util_check_if_smart_phone_modem_supported(&cnf);
            break;
        case FT_UTILCMD_CHECK_TARGET_META_REQUIRED_VERS:
            ft_util_check_vers(p_req,&cnf,&peer_buff_ret);
            break;
        case FT_UTILCMD_SET_TARGET_CHECK_PARAS:
            ft_util_set_check_paras(p_req,&cnf);
            break;
        case FT_UTILCMD_CHECK_IF_TARGET_NV_SEC_ON:
#ifdef __NVRAM_SECRET_DATA__
            ft_util_get_target_nv_sec_on_flag(&cnf);
#else
            cnf.result.m_bNVSecOn = false;
            cnf.status = FT_CNF_OK;
#endif
            break;
        case FT_UTILCMD_REBOOT_TO_NORMAL_MODE:
            ft_util_reboot_to_normal_mode(p_req, &cnf);
            break;
#if defined(__WIFI_BT_SINGLE_ANTENNA_SUPPORT__)
        case FT_UTILCMD_QUERY_BT_WIFI_SINGLE_ANTENNA_CAP:
            cnf.status = FT_CNF_OK;
            cnf.result.m_bBTWiFiSingleAntenna = bwcs_query_single_antenna_capability();
            break;
        case FT_UTILCMD_SET_ANTENNA_PATH_TO_BT:
            if(bwcs_query_single_antenna_capability() == KAL_TRUE)
                bwcs_set_antenna_path( KAL_TRUE );
            cnf.status = FT_CNF_OK;
            break;
        case FT_UTILCMD_SET_ANTENNA_PATH_TO_WIFI:
            if(bwcs_query_single_antenna_capability() == KAL_TRUE)
                bwcs_set_antenna_path( KAL_FALSE );
            cnf.status = FT_CNF_OK;
            break;
#endif
        case FT_UTILCMD_QUERY_TARGET_OPTION_INFO:
        {
            cnf.result.m_u4TargetOptionInfo = 0; // reset to 0
#ifdef LIPTON_BB
            cnf.result.m_u4TargetOptionInfo |= META_LIPTON_OPTION_ON;  // 0x00000001
#endif // #ifdef LIPTON_BB
#ifdef __TC01__
/* under construction !*/
#endif // #ifdef __TC01__
#if defined(__UMTS_TDD128_MODE__) && defined(__AST_TL1_TDD__)
            cnf.result.m_u4TargetOptionInfo |= META_AST_TD_OPTION_ON;  // 0x00000004
#endif // #if defined(__UMTS_TDD128_MODE__) && defined(__AST_TL1_TDD__)
            cnf.status = FT_CNF_OK;

            break;
        }
#ifdef __TOOL_ACCESS_CTRL__
        case FT_UTILCMD_QUERY_LIMITED_STATE:
        {
            // query the limited state indicator
            cnf.result.m_u4LimitedStateIndicator = INT_GetMetaModeSrc();
            cnf.status = FT_CNF_OK;
            break;
        }
#endif // #ifdef __TOOL_ACCESS_CTRL__
        case FT_UTILCMD_QUERY_VPA_VOLTAGE_LIST:
        {
            ft_util_get_vpa_voltage_list(p_req, &cnf, &peer_buff_ret);
            break;
        }
        case FT_UTILCMD_QUERY_DRIVE_AVAILABLE_FOR_FILE_SIZE:
        {
            cnf.status = FT_CNF_OK;
            cnf.result.driveLetter = FT_GetAvailableDrive(p_req->cmd.requestedFileSize);
            break;
        }
        case FT_UTILCMD_QUERY_MAX_CTRL_BUFFER_SIZE:
        {
            cnf.status = FT_CNF_OK;
            /*
             * prevent from customization error
             */
            if(ft_get_ctrlbuf_max_size() <= Custom_META_ControlBufferSize())
            {
                cnf.result.maxControlBufferSize = ft_get_ctrlbuf_max_size();
            }
            else
            {
                /*
                 * Keep the original performance
                 */
                if(Custom_META_ControlBufferSize() < 2048)
                {
                    cnf.result.maxControlBufferSize = 2048;
                }
                else
                {
                    cnf.result.maxControlBufferSize = Custom_META_ControlBufferSize();
                }
            }
            break;
        }
        case FT_UTILCMD_QUERY_ADC_MODULE_SUPPORT:
        {
            cnf.status = FT_CNF_OK;
#if defined(DRV_ADC_NOT_EXIST)||defined(DRV_ADC_OFF)
            cnf.result.module_support = KAL_FALSE;
#else
            cnf.result.module_support = KAL_TRUE;
#endif // #if defined(DRV_ADC_NOT_EXIST)||defined(DRV_ADC_OFF)
            break;
        }
        case FT_UTILCMD_QUERY_RTC_MODULE_SUPPORT:
        {
            cnf.status = FT_CNF_OK;
#if defined(DRV_RTC_OFF)||defined(DRV_RTC_NOT_EXIST)
            cnf.result.module_support = KAL_FALSE;
#else
            cnf.result.module_support = KAL_TRUE;
#endif // #if defined(DRV_RTC_NOT_EXIST)||defined(DRV_RTC_OFF)
            break;
        }
        case FT_UTILCMD_QUERY_META_MODE_TRACE:
        {
#if defined(__TST_META_MODE_TRACE_ENABLE__)
            cnf.result.trace_mode = tst_get_meta_mode_trace_enable();
            cnf.status = FT_CNF_OK;
#else
            cnf.status = FT_CNF_FAIL;
#endif // #if defined(__TST_META_MODE_TRACE_ENABLE__)           
            break;
        }
        case FT_UTILCMD_ENABLE_META_MODE_TRACE:
        {
#if defined(__TST_META_MODE_TRACE_ENABLE__)
            if(tst_set_meta_mode_trace_enable(p_req->cmd.trace_mode))
            {            	
                cnf.status = FT_CNF_OK;
            }
            else
#endif // #if defined(__TST_META_MODE_TRACE_ENABLE__)            	
            {
                cnf.status = FT_CNF_FAIL;
            }
            break;
        }
        default:
            break;
    }
    FT_UTIL_SendCnf(&cnf, peer_buff_ret);
}