1,NVid和数据结构定义
(1)数据结构id定义
typedef enum
{
MMINV_HELLO_FLAG = MMI_MODULE_SAMPLE << 16, //MMI_MODULE_SAMPLE这个是模块id
MMINV_HELLO_STRUCT_PART,
MMINV_HELLO_MAX_ITEM_NUM
}HELLO_NV_ITEM_E;
(2)数据结构定义
typedef struct MMI_HELLO_T
{
BOOLEAN is_set;
wchar w_str[32];
uint32 str_len;
}MMI_HELLO_T; //要存储的结构体
(3)数据结构长度计算
const uint16 hello_nv_len[] =
{
sizeof(BOOLEAN), // MMINV_HELLO_FLAG 对应bool数据类型对应的大小
sizeof(MMI_HELLO_T), // size of MMI_HELLO_T 对应MMI_HELLO_T的数据结构大小
}; //注册前需要先将要存储的数据计算大小保存到uint16一维数组中
常量数组 hello_nv_len 中每个元素的定义必须同 NV 枚举类型的顺序保持一致,这是约定
2、注册 NV
(1)【函数原形】:
PUBLIC void MMI_RegModuleNv(uint16 module_id /*模块的 ID*/,
const uint16 nv_len[]/*数组的地址*/,
uint16 nv_max_item /*数组的长度*/);
(2)本例子
MMI_RegModuleNv(MMI_MODULE_SAMPLE, // 注册 NV,模块 ID:MMI_MODULE_SAMPLE;
hello_nv_len,
sizeof(hello_nv_len)/sizeof(uint16));
小结:NV 是一段不可变的存储空间,就像读写文件一样,只不过读写文件时传入的是文件路径,而读写
NV 时传入的是 NV 的 ID 而已。
3、读NV数据
【函数原型】
PUBLIC MN_RETURN_RESULT_E MMI_ReadNVItem(
uint32 item_id, /*NV 项的 ID*/
void * buffer_ptr /*存放数据的地址空间*/);
4、写NV数据
【函数原型】
PUBLIC void MMI_WriteNVItem(
uint32 item_id, /*NV 项的 ID*/
void buffer_ptr【20】 /*写入的数据*/
);
int num;-》id
char x;
5、使用
case MSG_APP_UP:
{
BOOLEAN flag = FALSE;
nv_return = MMI_ReadNVItem(MMINV_HELLO_FLAG, &flag); //将注册过的NV数据读取出来保存大falg中
if (!flag)
{
flag = FALSE;
}
else
{
flag = TRUE;
);
MMI_WriteNVItem(MMINV_HELLO_FLAG, &flag); //将flag中的内容写入注册的NV
}
break
typedef struct MMI_HELLO_T
{
BOOLEAN is_set;
wchar w_str[32];
uint32 str_len;
}MMI_HELLO_T;
typedef struct MMI_HELLO_T
{
BOOLEAN is_set;
wchar w_str[32];
uint32 str_len;
int callnum; //从1.0->2.0新增加的数据,注册时候根据id即已经注册,再次读取时候按照新的数据结构解析就可以了
}MMI_HELLO_T;