以下的内容摘自PBAP规范1.2.3
放的是vcard object的集合。
vcard object:包括联系人的具体信息。比如,姓名,住址,电话,邮件等。所使用的字符集是UTF-8.
vcard例子:必须以BEGIN:VCARD开头,以END:VCARD结尾。
BEGIN:VCARD
VERSION:2.1
FN:Jean Dupont
N:Dupont;Jean
ADR;WORK; QUOTED-PRINTABLE:;Paris 75010;91 Rue du Faubourg Saint-Martin
TEL;CELL;PREF:+1234 56789
EMAIL;INTERNET:jean.dupont@example.com
X-BT-SPEEDDIALKEY:F1
END:VCARD
vcard object里有区分MISSED(未接的),RECEIVED(接听的),DIALED(拨出的)
例子:2005年3月20日,上午10点,有一个未接电话。
vCard 2.1的标识形式:
BEGIN:VCARD
...
X-IRMC-CALL-DATETIME;MISSED:20050320T100000
...
END:VCARD
vCard 3.0的标识形式:
BEGIN:VCARD
...
X-IRMC-CALL-DATETIME;TYPE=MISSED:20050320T100000
...
END:VCARD
如果来电的时候,恰巧设备的时间系统出了问题,无法取得时间的话,vcard object如下:
BEGIN:VCARD
...
X-IRMC-CALL-DATETIME;TYPE=MISSED:
...
END:VCARD
快速拨号,怎么标识呢?字符串F1是任意的,推荐使用"5","A","ALT","SPACE","F1"等。
BEGIN:VCARD
...
X-BT-SPEEDDIALKEY:F1
...
END:VCARD
是用虚拟文件夹组织的。
handle.vcf就代表一个vcard objec。handle是不可以被修改的,handle不能重复。handle是4个字节,用16进制标识。比如:0x791A2F23.vcf。handle就是0x791A2F23。
存放在pb里的vcard object是在文件夹:telecom下。
存放在SIM卡1里的vcard object是在文件夹:SIM1/telecom下。
0x00000000.vcf里放的是本手机的号码,如果本手机有号码的话。
除了vcard object外,还有vCard-listing object,它是xml格式的,字符集的UTF-8。规定vCard-listing object格式的DTD如下:
<!DTD for the PBAP vCard-Listing Object-->
<!ELEMENT vcard-listing ( card )* >
<!ATTLIST vcard-listing version CDATA #FIXED “1.0”>
<!ELEMENT card EMPTY>
<!ATTLIST card
handle CDATA #REQUIRED
name CDATA #IMPLIED >
vCard-listing object例子:
<?xml version=“1.0”?>
<!DOCTYPE vcard-listing SYSTEM “vcard-listing.dtd”>
<vCard-listing version=“1.0”>
<card handle = ”0.vcf” name = ”Miyajima;Andy”/>
<card handle = ”1.vcf” name = ”Poujade;Guillaume”/>
<card handle = ”2.vcf” name = ”Hung;Scott”/>
<card handle = ”3.vcf” name = ”Afonso;Arthur”/>
<card handle = ”6.vcf” name = ”McHardy;Jamie”/>
<card handle = ”7.vcf” name = ”Toropov;Dmitri”/>
<card handle = ”10.vcf” name = ”Weinans;Erwin”/>
</vCard-listing>
name属性的格式:“LastName;FirstName;MiddleName;Prefix;Suffix”
对应vcard objec里的N属性。
vCard-listing object可以用于表示未接电话列表等。
如下表:
PBAP协议是使用obex协议的,obex协议里有很多种header(参考obex协议),其中有个header叫做:Application Parameters header。Application Parameters header里面可以放很多tag-length-value triplet。
代表PBAP功能的tagid是:0x10;length是4个字节,有32个bit位,每一个bit位代表一个PBAP的功能。
下载phone book objec里的所有entry。使用function:PullPhonebook
有3个function: SetPhonebook,PullvCardListing,PullvCardEntry
PropertySelector{PropertyMask (64-bit value)}:每个bit位代表一个vcard object里的属性。
如果client想让server返回的vcard objec里包含,生日和地址的话,则需要把bit4和bit5设置为1.
如果想让server返回下表所有的vcard object属性,则全部设置为0.
Format { vCard2.1 | vCard3.0 }
MaxListCount
client告诉server我能处理的最大vcard object的数量。如果值为0,有特殊含义,参考pbap规范说明。
ListStartOffset
假设返回多个vcard object,这些vcard object会被排序,如果能返回10个,而且ListStartOffset为0的话,则10个全部返回;如果ListStartOffset为2,则返回8个?? 第一个和第二个不返回??
vCardSelector
假设server找到了符合条件的100个entry,还可以继续根据vCardSelector指定的筛选条件,来继续筛选,最后可能剩下30个entry返回给client。所谓的筛选条件就是返回的vcard object里的某个属性必须不是空。如果为空,则此vcard object不返回给client。它经常和vCardSelectorOperator一起使用。vCardSelectorOperator是指定复数属性的条件关系是OR 还是 AND,如果没有使用vCardSelectorOperator则是OR。
例子:筛选生日和地址都不为空的vcard object。
则必须指定vCardSelector和vCardSelectorOperator,并且vCardSelectorOperator的值是AND,vCardSelector的生日bit位和地址bit位必须设置为1.具体哪个bit位代表哪个属性,则参考PropertySelector
vCardSelectorOperator{ OR | AND }
不出现在Application Parameters header里,则是OR。
PhonebookSize
如果client没有使用MaxListCount,则server返回PhonebookSize,告诉client,server返回了几个非空的vcard objec。
ResetNewMissedCalls
client发起重新设置server的mch的数量时,设置ResetNewMissedCalls的值为0x01,0x01以外的值都会被server忽略。server收到后,重新设置mch的数量后,并使用NewMissedCalls,设置它的值为上一次mch的数量给client。ResetNewMissedCalls设置只对mch和cch有效。
NewMissedCalls
Folder Version
包含2个,PrimaryFolderVersion和SecondaryFolderVersion。
当response成功时,server必须返回PrimaryFolderVersion和SecondaryFolderVersion。前提是pse和pce的Folder Version Counters的功能bit位都处于打开状态。
Database Identifier
当response成功时,server都会返回Database Identifier。它由server做成,并且唯一,而且server还会存储它。是128bit的值。
需要数据库标识符来检测上一个会话中的Contact X-BT-UIDs或文件夹版本计数器是否仍然可以用于当前数据库。如果由于任何原因必须重置数据库,客户机将能够通过比较当前会话的数据库标识符与前一个会话期间检索到的标识符来检测到这一点。
如果此值为0,则说明server不保存Contact X-BT-UID(蓝牙联系人的唯一标识)和Folder Version Counter,所有client则不要使用Contact X-BT-UID和Folder Version Counter
只有当pce和pse的Database Identifier功能bit被设定后,Database Identifier才有作用。
这个function,检索整个phone book object,一般用户从root目录开始检索。phone book downloading and phone book browsing services都使用此function。也可以从别的目录开始检索。
The request is formatted as follows:
请求pse当前目录下的所有vcf文件(*.vcf);类型是:x-bt/phonebook
主要关注一下Application Parameters header,其他的header可以参考obex规范里的介绍。
The response is formatted as follows:
返回所有vcf文件给pce。
主要关注一下Application Parameters header,其他的header可以参考obex规范里的介绍。
设置pse的当前文件夹
The request is formatted as follows:
The response is formatted as follows:
This function retrieves the PSE’s Phonebook-listing object.
The request is formatted as follows:
要求pse返回name header指定的文件夹下的符合要求的vcard objec 列表文件。
order:指定排序方法。0x00:indexed;0x01:Alphabetical;0x02 =:phonetic
Indexed order:按照handle.vcf的handle部分排序(按文件的名字排序)
Alphabetical order:根据N property排序
phonetic order:根据Sond property排序
SearchProperty {Name | Number | Sound }
由于请求的是vard object列表,所有就要指定你想要哪些vcard object,怎么指定呢,就是通过此属性。如果没有指定,则默认用name属性去搜索了,具体搜索哪些,则由SearchValue 指定。
注意:如果指定的是Sound的话,必须把Sound转化成UTF-8文本格式后,才能做比较。
SearchValue {<text string>}
指定具体的搜索值。比较的字符集必须是UTF-8的
The response is formatted as follows:
This function retrieves a specific vCard from the object exchange server.
The request is formatted as follows:
The response is formatted as follows:
原文:https://www.cnblogs.com/xiaoshiwang/p/13370921.html