5.1.5 事务处理
由于本标准主要用于成本极低的、采用电池供电的设备,因此事务是由设备自身,而不是协调器,发起的。话句话说,一方面,当协调器有设备需要处理的消息时,它会在信标中指出;另一方面,设备需要轮询协调器,以判断自己是否有需要处理的消息。这样的传输过程叫做间接传输。
协调器在接收到间接传输请求后会开始处理事务。间接传输请求有两种来源:MCPS-DATA.request 原语;由上层发起的某个原语(例如 MLME-ASSOCIATE.response 原语)引起 MLME 发送某个 MAC 命令的请求。事务完成后,MAC 子层将向上层返回一个状态值。如果是请求原语启动了间接传输,那么将使用相应的确认原语来传递适当的状态值;如果是响应启动的间接传输,那么 MLME-COMM-STATUS.indication 原语将用来传递适当的状态值。通过检查目标地址字段可以将 MLME-COMM-STATUS.indication 原语与它的相应的响应原语进行关联。
包含在间接发送请求中的信息形成一个事务。协调器应该具有最少存储一个事务的能力。如果设备接收到间接传输请求,但是没有足够的容量来存储,其 MAC 子层将使用相应的原语将状态 TRANSACTION_OVERFLOW 传递给上层。
如果协调器有能力存储多个事务,它必须确保同一设备的所有事务以它们到达 MAC 子层的顺序被发送。对于每个被发送的事务,如果还有它所对应的设备的其它事务,则 MAC 子层应当将帧待处理字段设为 1,表示还有待处理的数据。
每个事务在协调器中最多被保存 macTransactionPersistenceTime。如果该事务在这段时间内没有被设备成功提取,那么它将被丢弃。此外,MAC 子层还会通过相应的原语将状态 TRANSACTION_EXPIRED 传递给上层。协调部只有在收到确认帧时才认为该事务被成功提取。
如果事务传输成功,协调器将丢弃该事务的信息。此外,MAC 子层还会通过相应的原语将状态 SUCCESS 传递给上层。
如果协调器发送信标,它将在地址列表字段中列出与每一个事务相关设备的地址,并在信标帧的待处理地址规范字段中给出地址的数量。 如果协调器能够存储多于 7 个的事务,它将在其信标帧中以先到先服务的原则进行表明,以确保信标帧最多含有 7 个地址。对于需要使用 GTS 的事务,PAN 协调器不需要将接收者的地址添加到待处理地址列表中,而是使用为该设备所分配的 GTS 进行传输。
在信标使能的 PAN 中,如果有一个待处理事务的接收者是广播地址,协调器应当将信标帧中帧控制字段的帧待处理字段应该设置为 1,并且在信标传输之后立用 CSMA/CA 算法发送该消息。 如果还有另一个待处理事务的接收者也是广播地址,该事务的传输将被推迟到下一个超帧。每个超帧内只允许发送一个广播消息。
在信标使能的 PAN 中,如果设备接收到一个信标,且该信标的待处理地址列表中包含该设备的地址,那么该设备应当从协调器中提取数据。在非信标使能的 PAN 中,设备只有接收到 MLME-POLL.request 原语时才会尝试从协调器提取数据。从协调器提取数据的过程请参考 5.1.6.3 节。如果设备接收到一个信标,且该信标的帧待处理字段为 1,它应当开启接收器,并使其持续 macMaxFrameTotalWaitTime 以从协调器接收广播数据。