OTS——Object Transfer Service
OTP——Object Transfer Profile
OTS提供了管理和控制传输大块数据——通过一个单独的L2CAP connection oriented channel——的功能。这些功能包括让Client在运行OTS的Server上创建、删除、写入、读取Object以及运行一个Object(和PC上的鼠标双击操作一样)。OTP定义了让Client可以在Server上执行这些功能所需要的基本要求。
OTS和OTP都依赖于Generic Attribute Profile(GATT)。OTS运行的Object Server是GATT Server,Object Client是GATT Client。但是OTS/OTP并不要求Transport必须是LE Transport,它们也可以承载在BR/EDR Transport上;然而从OTS/OTP多数的应用场景来看,Server经常都是单模BLE设备:只支持LE Transport。
OTS/OTP使用L2CAP connection oriented channel作为Object content的transfer channel。这种L2CAP channel适合用于传输大块数据,Core spec 4.0定义承载在BR/EDR Transport上的该种channel,Core spec 4.1定义了承载在LE Transport上的该种channel。
Object除了content之外还有一些属性,比如名字、类型、大小、创建时间等,Object Server是通过GATT Characteristics来把这些属性暴露给Object Client的。OTS模型如下图所示:
A. GPS运动手表与手机APP之间同步数据。
a) 手机APP把规划好的路线(route)传输到运动手表上。
b) 手机APP把运动手表上保存的运动轨迹(track)读取到手机上。
B. 两只运动手表之间(无需手机APP做中介)共享运动路线(route or track)。
C. 用手机APP来更新手环的firmware。一些手环没有合适的人机界面来执行更新firmware的操作,我们可以通过手机APP把新的firmware传输到手环上然后在手环上执行update firmware。
D. 从公共健身房的跑步机上获得自己的运动数据然后把数据从跑步机上删除。
总结上面的应用场景,可以得到role/Service关系模型,如下图所示。
一般OTS是作为Server上的Secondary Service存在,比如一只GPS运动手表作为Server role,在上面运行的Primary Service是Location Service,该Service使用OTS来把保存下来的track传输给手机。需要注意的是,OTS也可以作为Primary Service。
OTS支持的Object Characteristics包括Name、Type、Size、First-Created、Last-Modified、ID、Properties。这些Characteristics被统称为Object Metadata Characteristics,它们并不是所有的都必须实现,其中有些Characteristics的现实是可选的。其中Object Properties Characteristic比较特别,它是用于告诉Client哪些操作可以在Current Object上执行,比如是否允许删除操作。
OTS还支持Client通过写Object Action Control Point(OACP)来对Object进行操作,比如Create、Delete、Read、Write、Execute等,但是其中部分操作的实现是可选的。
如果Server上有不止一个Object,那么Client还可以通过写Object List Control Point(OLCP)来进行List操作,比如First、Last、Previous、Next、Go To、Order等。此外,OTS还可以支持Object List Filter Characteristic来只让符合特定条件的Objects出现在Object List中。List相关features的实现也是可选的,或者在特定条件下需要被支持。
如果OTS支持Object Changed Characteristic的话,当Object的content或者metadata发生了改变——这种改变可能来自Server或其他Clients,Server会通知Client。需要注意的是,只有当Client和Server是连接状态,Client才能收到这个通知。
大家注意到,上面提到的一些OST features的实现是可选的,一个Server上的stack可能不支持部分OTS features。那么Client怎么知道Server支持哪些可选的features呢?OTS Feature Characteristic就把Server实现了哪些可选features暴露给了Client。该Characteristic包含了两个fields:OACP Features和OLCP Features。前者指明了Server支持哪些Object操作,而后者指明了Server支持哪些List操作。
OTS/OTP发布于2015年11月。这是一个很新的BT spec,其中的Object Type甚至还没有分配正式的UUID,所以目前还没有公开的Embedded Device或Mobile BT stack支持OTS/OTP。芯片厂商在BBS上的回复均表示没有sample code可以提供,甚至当前没有手机支持L2CAP CoC。OTP被设计用于其它更高层的Profiles来传输Object,所以在Android上现实一个OTP是很有价值的,这个OTP可以被多个更高层的Profiles复用。