zoukankan      html  css  js  c++  java
  • (转载) MTK之NVRAM研究[三]

    MTK之NVRAM研究[三]

    Appendix2:

    2009-12-16 下午 05:24:18


    下面来具体看看两个不同的NV项的实现过程,具体的步骤还是和上面的一样的
    这里面实现两中NV项:
      NV项一:_LZQ_TEST_  :他的数据结构比较简单,只是一个数组;
      NV项二:__HL_WEB_PHONE__ :他的数据结构是个结构体,和NV项一相比有些地方实现不一样;
    具体实现如下:


    //--------------------在文件中定义NV项的LID:nvram_user_defs.h----------

    #ifdef _LZQ_TEST_ //__HQ_ADD_BOOKMARK_DEFAULT__
    NVRAM_EF_MY_NEW_DATA_LID,
    #endif


    #ifdef __HL_WEB_PHONE__
    NVRAM_EF_MY_WEB_PHONE_DATA_LID,
    #endif



    //--------------------在文件中定义NV项的大小和个数:nvram_user_defs.h----------

    #ifdef _LZQ_TEST_ //__HQ_ADD_BOOKMARK_DEFAULT__
    #define NVRAM_EF_MY_NEW_DATA_SIZE 10  // 10 byte each record
    #define NVRAM_EF_MY_NEW_DATA_TOTAL 9   //9 records
    #endif


    #ifdef __HL_WEB_PHONE__
    typedef struct
    {
     kal_uint8   status;       //open or close;
     kal_uint32  phone_number[11]; //本机号码;
     kal_uint8   number_exten[10];//号码前缀;
     kal_uint8   number_zone[8]; //本地区号;
    }MY_WEB_PHONE;
    #define NVRAM_EF_MY_WEB_PHONE_DATA_SIZE sizeof(MY_WEB_PHONE)  //MY_WEB_PHONE
    #define NVRAM_EF_MY_WEB_PHONE_DATA_TOTAL 1    //1
    #endif

    //lzq说明:注意这里,新添加的NV项如果用到了数据结构,则一定要和它声明结构体大小的地方一起声明,不然编译时找不到结构体


    //---------------------------在文件中设置NV的默认值:nvram_user_config.c---------

    #ifdef _LZQ_TEST_   //__HQ_ADD_BOOKMARK_DEFAULT__
    static kal_uint8 const NVRAM_EF_MY_NEW_DATA_DEFAULT[90] ={
      0x12,0x34,0x56,0x78,0x90,
      0x12,0x34,0x56,0x78,0x90

           };
    #endif

    //在这里由于NV项二不用默认值,他只要使用平台的默认0值就可以了,所以在这里他不用声明和定义默认值;


    //---------------------------在文件中设置NV的属性:nvram_user_config.c---------
     
    #ifdef _LZQ_TEST_ //__HQ_ADD_BOOKMARK_DEFAULT__
    ,{ 
     NVRAM_EF_MY_NEW_DATA_LID,
     NVRAM_EF_MY_NEW_DATA_SIZE,
     NVRAM_EF_MY_NEW_DATA_TOTAL,
     NVRAM_EF_MY_NEW_DATA_DEFAULT,//lzq:当不好设置默认值时就用默认的0代替;
     NVRAM_ATTR_MULTIPLE,
     NVRAM_CATEGORY_USER,
     "CT52",                                 //lzq:这是做什么的?
     VER(NVRAM_EF_MY_NEW_DATA_LID),          //lzq:这是做什么的?
     "My new data\0",                        //lzq:这是做什么的?
     NVRAM_INVALID_VALUE
    }

    #endif

     
    #ifdef __HL_WEB_PHONE__ //__HQ_ADD_BOOKMARK_DEFAULT__
     ,{ 
      NVRAM_EF_MY_WEB_PHONE_DATA_LID,
      NVRAM_EF_MY_WEB_PHONE_DATA_SIZE,
      NVRAM_EF_MY_WEB_PHONE_DATA_TOTAL,
      NVRAM_EF_ZERO_DEFAULT,//NVRAM_EF_MY_NEW_DATA_DEFAULT,//lzq:当不好设置默认值时就用默认的0代替;
      NVRAM_ATTR_MULTIPLE,
      NVRAM_CATEGORY_USER,
      "CT53",             //lzq:这是做什么的?
      VER(NVRAM_EF_MY_WEB_PHONE_DATA_LID),    //lzq:这是做什么的?
      "My new data2\0",          //lzq:这是做什么的?
      NVRAM_INVALID_VALUE
     }
     
    #endif


    //-----------在文件中设置NV的版本号:custom_nvram_editor_data_item.h---------------

    //lzq: 为新添加的NV项添加版本号;

    #ifdef _LZQ_TEST_ //__HQ_ADD_BOOKMARK_DEFAULT__
    #define NVRAM_EF_MY_NEW_DATA_LID_VERNO "002"
    #endif


    //lzq: 为新添加的NV项添加版本号;

    #ifdef __HL_WEB_PHONE__ //__HQ_ADD_BOOKMARK_DEFAULT__
    #define NVRAM_EF_MY_WEB_PHONE_DATA_LID_VERNO "000"
    #endif


    //-----------在文件中设置meta属性值:custom_nvram_editor_data_item.h---------------
    --------------先添加meta说明的结构体-------------------------------

    //lzq: 为新添加的NV项添加NV META工具中的说明结构体;

    #ifdef  _LZQ_TEST_ //__HQ_ADD_BOOKMARK_DEFAULT__
    typedef struct
    {
       kal_uint8 nvram_ef_my_new_data_field[NVRAM_EF_MY_NEW_DATA_SIZE];
    }nvram_ef_my_new_data_struct;
    #endif


    //lzq: 为新添加的NV项添加NV META工具中的说明结构体;

    #ifdef  __HL_WEB_PHONE__ //__HQ_ADD_BOOKMARK_DEFAULT__
    typedef struct
    {
       MY_WEB_PHONE nvram_ef_my_new_data2_field;
    }nvram_ef_my_new_data2_struct;
    #endif

    //lzq说明:在这里声明nvram_ef_my_new_data2_field时一定要用自己的数据结构来声明,不然在meta工具中看不到自己的数据
    ----------------然后设置meta说明结构体:---------------------------

    //lzq: 为新添加的NV项添加NV META工具中的说明字符串;

    #ifdef _LZQ_TEST_ //__HQ_ADD_BOOKMARK_DEFAULT__
    LID_BIT VER_LID(NVRAM_EF_MY_NEW_DATA_LID) nvram_ef_my_new_data_struct* NVRAM_EF_MY_NEW_DATA_TOTAL
    {

     nvram_ef_my_new_data_field:"my_new_data setting";
     nvram_ef_my_new_data_field[2]
     {
       MynewData:6 "lzq"
      {
      };
     };


    };
    #endif

    //lzq: 为新添加的NV项添加NV META工具中的说明字符串;

    #ifdef __HL_WEB_PHONE__ //__HQ_ADD_BOOKMARK_DEFAULT__
    LID_BIT VER_LID(NVRAM_EF_MY_WEB_PHONE_DATA_LID) nvram_ef_my_new_data2_struct* NVRAM_EF_MY_WEB_PHONE_DATA_TOTAL
    {

    };
    #endif

    具体的结果看下图:


    注意:在步骤六中出现了这样的问题:
    Reading custom_data succeeded.
    Start to parse the custom NVRAM DATA!
    make: *** [.\tst\database_classb\BPLGUInfoCustomAppSrc] Error 1

    因为在结构体中使用了说明字符串:
    LID_BIT VER_LID(NVRAM_EF_MY_WEB_PHONE_DATA_LID) nvram_ef_my_new_data2_struct* NVRAM_EF_MY_WEB_PHONE_DATA_TOTAL
    {

     //-------------------web phone-----------
     nvram_ef_my_new_data2_field:"my_web_phone setting"{};
     status:"open or close switch"{};
     phone_number:"the phone number"{};
     number_exten:"the phone number pre extern"{};
     number_zone:"the zone number"{};

    };

    此时只要将上面的这段红色的代码注释掉就可以了,本来按照文档的解释这样写是没问题的,但不知道为什么会出现问题;高手路过多指教;

    另外附上平台的一个NV的流程,仅作参考:
    //------1---------在文件中定义LID:   nvram_common_defs.h  --------------------------------- 
    NVRAM_EF_WAP_PROFILE_CONTENT_LID,

    //-------2----------在文件中 定义 结构体common_nvram_editor_data_item.h---------------------------------------
    typedef struct
    {
        kal_uint8 editable;
        kal_uint8 empty;
        kal_uint16 proxy_port;
        kal_uint8 homepage_url[NVRAM_WAP_PROFILE_HOMEPAGE_URL_LEN];
        kal_uint8 data_account;
        kal_uint8 conn_type;
        kal_uint8 proxy_ip[4];
        kal_uint8 username[NVRAM_WAP_PROFILE_USERNAME_LEN];
        kal_uint8 password[NVRAM_WAP_PROFILE_PASSWORD_LEN];
    } nvram_wap_profile_content_struct;

    //-------3--------------在文件中定义内存大小:Nvram_common_defs.h------------------------------------------

    #define NVRAM_EF_WAP_PROFILE_CONTENT_SIZE  sizeof(nvram_wap_profile_content_struct)
    #define NVRAM_EF_WAP_PROFILE_CONTENT_TOTAL  10


    //--------4-------------在文件中定义默认值:Nvram_common_config.c--------------------------------------------
    nvram_wap_profile_content_struct const NVRAM_EF_WAP_PROFILE_CONTENT_DEFAULT[NVRAM_WAP_PROFILE_MAX]=
    {
    #ifdef CUSTOM_WAP_PROFILE_CONTENT_DEFAULT
        CUSTOM_WAP_PROFILE_CONTENT_DEFAULT
    #else  
      {
          1,0,80,"http://mobile.fetnet.net",10,1,210,241,199,199,"",""
       },     
       {
          1,0,8080,"http://wap.emome.net",11,1,10,1,1,1,"",""
       },     

    //-----------5----------------在文件中设置属性nvram_common_config.c--------------------------------------------
        ,{
            NVRAM_EF_WAP_PROFILE_CONTENT_LID,
            NVRAM_EF_WAP_PROFILE_CONTENT_SIZE,
            NVRAM_EF_WAP_PROFILE_CONTENT_TOTAL,
            (kal_uint8*)NVRAM_EF_WAP_PROFILE_CONTENT_DEFAULT,
            NVRAM_ATTR_AVERAGE | NVRAM_ATTR_MULTIREC_READ,
            NVRAM_CATEGORY_MULTI_DEFAULT,
            "MP2U",
            VER(NVRAM_EF_WAP_PROFILE_CONTENT_LID),
            "wap profile\0",
            NVRAM_RESERVED_VALUE
        }
    //该nv项的lid为:NVRAM_EF_WAP_PROFILE_CONTENT_LID,


    //------------6-----------在文件中:common_nvram_editor_data_item.h中设置mata属性-----------------------;
    typedef struct
    {
        nvram_wap_profile_content_struct wapProfile1;
        nvram_wap_profile_content_struct wapProfile2;
        nvram_wap_profile_content_struct wapProfile3;
        nvram_wap_profile_content_struct wapProfile4;
        nvram_wap_profile_content_struct wapProfile5;
        nvram_wap_profile_content_struct wapProfile6;
        nvram_wap_profile_content_struct wapProfile7;
        nvram_wap_profile_content_struct wapProfile8;
        nvram_wap_profile_content_struct wapProfile9;
        nvram_wap_profile_content_struct wapProfile10;
    } nvram_meta_wap_profile_content_struct;

         LID_BIT VER_LID(NVRAM_EF_WAP_PROFILE_CONTENT_LID)
         nvram_meta_wap_profile_content_struct *NVRAM_EF_WAP_PROFILE_CONTENT_TOTAL
         {
         };

    lzq2010-4-7 下午 04:28:22 补充
    1,在手机中隐藏了一个盘符:C盘;在modis上我们能看到这个盘符里的文件,都是临时文件和NV文件;这个盘符很重要因为在down软件时半擦不会将这个盘里的文件删除;而如果是全擦的话就会删除这里的全部文件;所以半擦时没有升级版本号的NV不会生效;
    另外,升级了版本号的NV是如何生效的需要另外深入研究;

  • 相关阅读:
    上周热点回顾(5.9-5.15)团队
    上周热点回顾(5.2-5.8)团队
    上周热点回顾(4.25-5.1)团队
    .NET跨平台之旅:升级ASP.NET Core示例站点团队
    上周热点回顾(4.18-4.24)团队
    上周热点回顾(4.11-4.17)团队
    如何在Eclipse中正确安装Jetty插件并初步使用(图文详解)
    Spark Mllib里如何采用保序回归做回归分析(图文详解)
    机器学习概念之梯度下降算法(全量梯度下降算法、随机梯度下降算法、批量梯度下降算法)
    程序代码里出现illegal character 'ufeff' 和 expected class or object definition的解决办法(图文详解)
  • 原文地址:https://www.cnblogs.com/sierllen/p/2486836.html
Copyright © 2011-2022 走看看