MTK电话薄中所用到的数据结构及其在电话薄中的作用
来源:互联网 发布:怎么做淘宝网店 编辑:程序博客网 时间:2024/05/08 16:35
程序就是 数据结构 + 算法。了解了程序的数据结构,那么整个系统就明白一大半了。
下面关于电话薄用到的比较重要的数据结构,看完应该对电话薄有个比较清晰的认识。
第一个问题 MTK系统中怎么存储电话薄的? (PhoneBook[MAX_PB_ENTRIES])
电话薄中最重要的结构MMI_PHB_ENTRY_BCD_STRUCT PhoneBook[MAX_PB_ENTRIES];
其中PhoneBook是存储电话本的数组,大小为手机的容量 + SIM1卡容量 + SIM2卡容量
注意:PhoneBook中的数组的内容并不是连续的。比如手机容量为500,SIM1为250,SIM2为150,则,数组内容分配如下:手机PhoneBook [0:499]+ SIM1[500:749] + SIM2[750:899]
SIM1的数据是从501(非数组序号)个开始是SIM1的电话薄内容,顺序是SIM1的物理顺序(非拼音顺序)。同理,SIM2的数据是从751(非数组序号)个开始的。
如果SIM1没有满,则,501—751之间的内容后面会是有空的。
对此结构的描述:主要存储电话本的数据
typedef struct
{
MMI_PHB_NUMBER_BCD_STRUCT tel;
MMI_PHB_NAME_STRUCT alpha_id;
U8 field; /* Indicate if an entry has the field */
U8 dummy; /* Make sure each phb structure is two-bytes aligned. */
} MMI_PHB_ENTRY_BCD_STRUCT;
typedef struct
{
U8 type; /* 129-default; 145-international, begin with '+' */
U8 length;
U8 number[(MAX_PB_NUMBER_LENGTH + 1) / 2]; /* half space to store BCD format. */
} MMI_PHB_NUMBER_BCD_STRUCT;
typedef struct
{
U8 name_length; /* Name Length */
U8 name_dcs; /* Name Data Coding Scheme */
U8 name[(MAX_PB_NAME_LENGTH + 1) *ENCODING_LENGTH];
} MMI_PHB_NAME_STRUCT;
说明几点:一下没有说明的都是GSM的SIM格式
1. name[xx]存储电话本中的名字。电话薄中存储的名字有两种方式,一种是UCS2,一种是ASCII。其中UCS2每个字符占用2个Byte,可以表示汉字等。ASCII占用1Byte,只可以表示英文字符(256范围)。。name_length是存储电话薄本名字的长度,为字符的个数,注意不是字节数(因为UCS2是一个字符=2Byte)。
name_dcs,说明存储的名字是什么格式的。对应有UCS2,ASCII 有两种MMI_PHB_ASCII = 0x04,
MMI_PHB_UCS2 = 0x08
2. number[] 是存储电话本中的号码。其格式是用BCD来存储的,其优点是1Byte可以存储2个数字。不包含 + 号的。
Length, 是nubmer数组的内容长度的
Type,这个很重要。对于两种格式。其中,MMI_CSMCC_INTERNATIONAL_ADDR(145),MMI_CSMCC_DEFAULT_ADDR_TYPE(129),145代表真正的number实际上是[+] [number的内容],(此时length,还是number的长度,不包含+号的长度)。
比如电话本中有个号码+123456,则对于的存储是
Number[] = 转换到BCD格式(123456);
Length = 6;
Type = 145;
如果号码是123456,则此时存储如下
Number[] = 转换到BCD格式(123456);
Length = 6;
Type = 129;
由于这种格式我们使用不是很方便,所以涉及到的可能用到的函数如下:
U8 mmi_phb_convert_to_bcd(U8 *dest, U8 *source, U8 max_dest_len);
U8 mmi_phb_convert_to_digit(U8 *dest, U8 *source, U8 max_dest_len);
转换BCD的号码格式到ASCII字符。
由于系统要用UCS2显示,而处理由于节省空间,系统中,英文字符都不是UCS2格式的,所以任何显示要保证是UCS2格式的,这时要用到如下函数
U16 AnsiiToUnicodeString(S8 *pOutBuffer, S8 *pInBuffer);
注意大小关系 strlen(pOutBuffer) > 2×strlen(pInBuffer)
EncodingDecoding(mmi_chset_pair_enum Scheme, char *pOutBuffer, char *pInBuffer, kal_int32 dest_size).
字符转换的一个函数。可以GB2312
- MTK电话薄中所用到的数据结构及其在电话薄中的作用
- PhoneBook中所用到的数据结构及其作用(MTK)【转】
- 电话薄
- PhoneBook中所用到的数据结构及其作用【转】
- 读取电话薄内容在TableView中显示
- 电话薄程序的雏型
- 简易电话薄的项目
- Android开发中之删除手机电话薄中的一条数据时之删除不成功的解决办法
- 如何读到手机中的电话薄
- 从电话薄中读取电话
- c++电话薄
- 将电话薄导入到WM手机之中
- 利用J2ME怎样调用手机中的电话薄?
- 从Android手机电话薄中读取电话号码
- ASIMA电话薄管理系统
- 电话薄详细设计书
- 开发电话薄系统心得
- 电话薄----文件读写
- 解决vs2005 不能新建工程及不能打开工程文件的错误!
- C++0x, rvalue reference, move semantics, RVO, NRVO — 我们到底要什么
- 假如我带一个学生
- 使用DCOM组件生成Word或者EXcel需要做的计算机配置
- 【译】10个鲜为人知的C#关键字
- MTK电话薄中所用到的数据结构及其在电话薄中的作用
- poj 1067 取石子游戏
- JSTL简介
- 浅析插到PC上的usb-U盘_生命的开始阶段[软硬]--枚举过程(gliethttp)
- InstallShield12命令行模式编译工程的几点问题总结
- atmel的9G45研发前期
- 李开复:我要找什么样的人一起创业?
- PL/SQL 控制结构
- 对combobox的常用操作