最近在学习SIM Phonebook,有一些心得,也有一些思考,分享出来,希望对大家有些帮助。
了解SIM卡存储contact的一些限制,对于了解SIM phone book spec有很大的帮助。SIM卡的特点:小,慢,通用。存储内存小,读取速度慢,并且SIM卡存储和读取要有通用性,在不同设备上都能正常工作。
Phonebook的基本内容如下表,包含name,number,Email等(下面只是例子)。
从APP或者上层来看,存储phone book最简单的方法就是按照结构体存储,这样APP处理最快最方便,SIM也按照这种方式存储,这样的话APP和SIM driver进行交流就非常简单了。
typedef struct {
char *name;
char *number;
char *email;
char * additional_number;
char *additional_number_alpha_string;
} Phone_Book
但是受限于SIM的特性,存储比较小,在有限的存储空间下要存储更多的内容,要更快的读取和更新,另外要有通用性。SIM卡随着时代的发展,内容会发生变化,会增加一些项,并且每个项的长度不同卡可能不同,如果使用结构体不能满足这些要求,如果动态分配,可能会出现碎片化,如果静态分配的话,固定长度,那么通用性会比较差,长度定的太长,那么势必浪费存储空间。所以SIM使用结构体不是上选(上面纯属瞎想)。那就选择列存储,每一列存储一个phone book的项。当然选择列存储也是SIM的必然选择,因为SIM的其他内容也都是这种存储方式。
我们看一下header的内容,首先要给文件起一个名字,也就是Identifier(FID)。这个标识了存储的类型,存储的到底是什么。
我们先阐明一下SIM文件存储的类型,基本文件Elementary Files在SIM卡有三种方式:Transparent EF,Linear fixed EF,Cyclic EF。
由于phonebook都是Liner fixed EF,Linear fixed EF :The max record number is 254,the record max length is 255 bytes。
Header 结构体中也需要记录文件的类型,每一个record的长度。SIM卡本身还有一些权限的问题