⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 phb_nvram_access.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 3 页
字号:
                    kal_mem_set(&phb_entry->tel_number, 0, sizeof(l4_addr_bcd_struct));
                    phb_entry->tel_number.addr_bcd[L4_ADDR_BCD_TEL_NUM_OFFSET] = 0xff;
                }
                /* Set up phb_entry->cap_cnf_id */
                phb_entry->cap_cnf_id = phb_nvram_ef.mandatory->cap_cnf_id;
            }

            /* Incorrect LENGTH field */
            else
            {
                kal_mem_set(&phb_entry->alpha_id, 0, sizeof(l4_name_struct));
                phb_entry->tel_number.addr_length = 0;
                control_block->data = NULL;
            }

            /* read complete */
            phb_IO_return(control_block, ilm_ptr, KAL_TRUE);
            return;
        }
      /** 
       * Wrong state: currently it is not waiting. 
       * Abnormal, consume message.
       */
        else
        {
            kal_trace(TRACE_ERROR, ERROR_PHB_NVRAM_IO_STATE_READ);
            return;
        }
    }
    /* error occured, call error handler */
    else
    {
        /* Accessing NVRAM is not required to return error cause */
        control_block->IO_stage = IO_NONE;
        phb_IO_return(control_block, ilm_ptr, KAL_FALSE);
        return;
    }
}   /* end of phb_nvram_read_cnf */


/*****************************************************************************
 * FUNCTION
 *  phb_nvram_read_compare_digit_cnf
 * DESCRIPTION
 *  This is phb_nvram_read_compare_digit_cnf function of PHB module.
 * PARAMETERS
 *  ilm_ptr             [IN]        The primitives
 *  control_block       [?]         
 * RETURNS
 *  void
 *****************************************************************************/
static void phb_nvram_read_compare_digit_cnf(ilm_struct *ilm_ptr, control_block_type *control_block)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    nvram_read_cnf_struct *nvram_read_cnf;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_FUNC, FUNC_PHB_SIM_FILE_INFO_CNF);

    ASSERT(control_block != NULL);

    nvram_read_cnf = (nvram_read_cnf_struct*) ilm_ptr->local_para_ptr;

    if (control_block->IO_stage == IO_WAIT &&
        (nvram_read_cnf->result == NVRAM_IO_ERRNO_OK || nvram_read_cnf->result == NVRAM_IO_ERRNO_INIT))
    {
        kal_uint16 length;
        kal_uint8 *pdu_data = (kal_uint8*) get_pdu_ptr(ilm_ptr->peer_buff_ptr, &length);

        phb_ptr->compare_digit = *pdu_data;
        if (control_block->IO_stage == IO_WAIT)
        {
            /* success */
            phb_IO_return(control_block, ilm_ptr, KAL_TRUE);
            return;
        }
    }
    /* error occured, call error handler */
    phb_ptr->compare_digit = 7;
    /* control_block->cause = sim_file_info_cnf->result; */
    phb_IO_return(control_block, ilm_ptr, KAL_FALSE);
    return;
}   /* end of phb_nvram_read_cnf */


/*****************************************************************************
 * FUNCTION
 *  phb_nvram_read_compare_digit
 * DESCRIPTION
 *  This is phb_nvram_read_compare_digit function of PHB module.
 * PARAMETERS
 *  control_block       [?]         
 *  ilm_ptr(?)          [IN]        The primitives
 * RETURNS
 *  void
 *****************************************************************************/
void phb_nvram_read_compare_digit(control_block_type *control_block)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    /* kal_bool result = KAL_FALSE; */

    /* kal_trace(TRACE_FUNC, FUNC_PHB_NVRAM_READ); */
    nvram_read_req_struct *nvram_read_req;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    ASSERT(control_block != NULL);

    /* if (control_block->IO_stage == IO_NONE) */

    control_block->IO_stage = IO_WAIT;
    control_block->IO_cnf_receive = phb_nvram_read_compare_digit_cnf;
    nvram_read_req = (nvram_read_req_struct*) construct_local_para(sizeof(nvram_read_req_struct), TD_CTRL);
    nvram_read_req->file_idx = NVRAM_EF_PHB_COMPARE_DIGIT_LID;
    nvram_read_req->para = 1;
    nvram_read_req->access_id = control_block->ID;
    nvram_read_req->rec_amount = 1;
    phb_send_ilm(MOD_NVRAM, MSG_ID_NVRAM_READ_REQ, nvram_read_req, NULL);
    /* result = KAL_TRUE; */
    /* Abnormal, return false */
    /* else */
}   /* end of phb_nvram_read */


/*****************************************************************************
 * FUNCTION
 *  phb_nvram_write_record
 * DESCRIPTION
 *  This function issues NVRAM_WRITE_REQ to nvram.
 * PARAMETERS
 *  file_idx            [IN]        
 *  record_index        [IN]        
 *  access_id           [IN]        
 *  peer_buf_ptr        [?]         
 *  ilm_ptr(?)          [IN]        The primitives
 * RETURNS
 *  void
 *****************************************************************************/
static void phb_nvram_write_record(
                kal_uint16 file_idx,
                kal_uint16 record_index,
                kal_uint8 access_id,
                peer_buff_struct *peer_buf_ptr)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    nvram_write_req_struct *nvram_write_req;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_FUNC, FUNC_PHB_NVRAM_WRITE_RECORD);

    nvram_write_req = (nvram_write_req_struct*) construct_local_para(sizeof(nvram_write_req_struct), TD_CTRL);
    nvram_write_req->file_idx = (kal_uint8) file_idx;
    nvram_write_req->para = record_index;
    nvram_write_req->access_id = access_id;

    phb_send_ilm(MOD_NVRAM, MSG_ID_NVRAM_WRITE_REQ, nvram_write_req, peer_buf_ptr);
}   /* end of phb_nvram_write_record */


/*****************************************************************************
 * FUNCTION
 *  phb_nvram_write
 * DESCRIPTION
 *  This function issues NVRAM_WRITE_REQ to sim.
 *  
 *  Prerequisite:
 *  control_block must be constructed, phb_control_block_set_IO(), and phb_se_set_control_block().
 *  So that primary_ID, secondary_ID, index and record_index are all set.
 * PARAMETERS
 *  control_block       [?]         
 *  ilm_ptr(?)          [IN]        The primitives
 * RETURNS
 *  void
 *****************************************************************************/
kal_bool phb_nvram_write(control_block_type *control_block)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_bool result = KAL_FALSE;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_FUNC, FUNC_PHB_NVRAM_WRITE);

    ASSERT(control_block != NULL);

    if (control_block->IO_stage == IO_NONE)
    {
        data_desc_enum type;
        phb_entry_struct *phb_entry;

        /* Nothing to write? error! */
        if ((phb_entry = (phb_entry_struct*) control_block->data) == NULL)
        {
            result = KAL_FALSE;
        }

        else if ((control_block->primary_ID != (kal_uint16) PHB_INVALID_VALUE) &&
                 ((type = phb_data_desc_get_desc_by_ID(control_block->primary_ID)) !=
                  (data_desc_enum) PHB_INVALID_VALUE))
        {
            peer_buff_struct *peer_buf_ptr;
            kal_uint8 *pdu_ptr;
            kal_uint16 pdu_length;

            control_block->IO_stage = IO_WAIT;
            control_block->IO_cnf_receive = phb_nvram_write_cnf;

         /**
          * Find the Number of bits that has to be used by the packed 
          * structure. Since the lenght is in number of bits, we have 
          * to convert that into number of octets 
          */
            pdu_length = control_block->length;

            /* Construct peer buffer */
            peer_buf_ptr = construct_peer_buff(pdu_length, 0, 0, TD_CTRL);
            pdu_ptr = get_pdu_ptr(peer_buf_ptr, &pdu_length);

         /**
          * Truncate bytes exceeds maximum capacity!!
          *
          * addr_length needs not to be restored, since it just reflects 
          * what is written actually. 
          */
            if (phb_entry->tel_number.addr_length > NVRAM_PHB_EF_MAX_TON_NPI_TEL_NUMBER_LEN)
            {
                phb_entry->tel_number.addr_length = NVRAM_PHB_EF_MAX_TON_NPI_TEL_NUMBER_LEN;
            }

            control_block->seg_total = 0;

            if (phb_nvram_prepare_data_to_write(control_block, pdu_ptr) == KAL_FALSE)
            {
                return KAL_FALSE;
            }

            /* Preparation of data content complete! */

            phb_nvram_write_record(
                control_block->primary_ID,
                control_block->record_index,
                control_block->ID,
                peer_buf_ptr);

            result = KAL_TRUE;
        }
        /* Error */
        else
        {
            result = KAL_FALSE;
        }

    }
    /* Abnormal, return false */
    else
    {
        result = KAL_FALSE;
    }

    return result;
}   /* end of phb_nvram_write */


/*****************************************************************************
 * FUNCTION
 *  phb_nvram_write_cnf
 * DESCRIPTION
 *  This function issues NVRAM_READ_REQ to sim.
 * PARAMETERS
 *  ilm_ptr             [IN]        The primitives
 *  control_block       [?]         
 * RETURNS
 *  void
 *****************************************************************************/
static void phb_nvram_write_cnf(ilm_struct *ilm_ptr, control_block_type *control_block)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    nvram_write_cnf_struct *nvram_write_cnf;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_FUNC, FUNC_PHB_NVRAM_WRITE_CNF);

    ASSERT(control_block != NULL);

    nvram_write_cnf = (nvram_write_cnf_struct*) ilm_ptr->local_para_ptr;

    if ((nvram_write_cnf->result == NVRAM_IO_ERRNO_OK) || (nvram_write_cnf->result == NVRAM_IO_ERRNO_INIT))
    {
        if (control_block->IO_stage == IO_WAIT)
        {
            /* Write complete */
            phb_IO_return(control_block, ilm_ptr, KAL_TRUE);
            return;
        }
      /** 
       * Wrong state: currently it is not waiting. 
       * Abnormal, consume message.
       */
        else
        {
            kal_trace(TRACE_ERROR, ERROR_PHB_NVRAM_IO_STATE_WRITE);
            return;
        }
    }
    /* error occured, call error handler */
    else
    {
        /* Accessing NVRAM is not required to return error cause */

        phb_IO_return(control_block, ilm_ptr, KAL_FALSE);
        return;
    }
}   /* end of phb_nvram_write_cnf */


/*****************************************************************************
 * FUNCTION
 *  phb_nvram_delete
 * DESCRIPTION
 *  This function issues NVRAM_WRITE_REQ to sim.
 *  
 *  Prerequisite:
 *  control_block must be constructed, phb_control_block_set_IO(), and phb_se_set_control_block().
 *  So that primary_ID, secondary_ID, index and record_index are all set.
 * PARAMETERS
 *  control_block       [?]         
 *  ilm_ptr(?)          [IN]        The primitives
 * RETURNS
 *  void
 *****************************************************************************/
kal_bool phb_nvram_delete(control_block_type *control_block)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_bool result = KAL_FALSE;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_FUNC, FUNC_PHB_NVRAM_DELETE);

    ASSERT(control_block != NULL);

    if (control_block->IO_stage == IO_NONE)
    {
        data_desc_enum type;
        phb_entry_struct *phb_entry;

        phb_entry = (phb_entry_struct*) control_block->data;

        if ((control_block->primary_ID != (kal_uint16) PHB_INVALID_VALUE) &&
            ((type = phb_data_desc_get_desc_by_ID(control_block->primary_ID)) != (data_desc_enum) PHB_INVALID_VALUE))
        {
            peer_buff_struct *peer_buf_ptr;
            kal_uint8 *pdu_ptr;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -