为了使用显式能量管理模型控制外围设备电源状态的开启与关闭,与TinyOS 1.x类似,TinyOS 2.x中提供了StdControl接口和SplitControl接口。此外,TinyOS 2.x引入了第三个接口:AsyncStdControl接口。如果一个组件需要对硬件设备的能量状态进行开启或关闭操作,则该组件必须提供上述三个接口中的一个。具体使用哪个接口,可根据能量状态切换时延和接口命令中的代码是同步还是异步来决定。
1.基于StdControl接口的能量管理
如果开启或关闭设备所花费的时间可忽略不计,则可使用StdControl接口。
外部组件必须调用StdControl.start()命令来开启设备,调用StdControl.stop()命令来关闭设备。这两个命令都必须返回SUCCESS或FAIL。
成功调用StdControl.start()命令后,设备必须处于完全开启状态,从而允许调用只有在该设备返回成功时才可调用的其他接口命令。成功调用StdControl.stop()后,设备必须处于完全关闭状态,任何基于该设备实现的其他接口命令被调用时,必须返回FAIL或EOFF。如果设备不能完成StdControl.start()命令或StdControl.stop()命令,则必须返回FAIL。
基于上述规范,表6-3描述了设备处于不同能量状态时,调用StdControl接口的合法返回值。
表6-3 StdControl接口的合法返回值表
设备组件中提供的StdControl接口代码如下:
2.基于SplitControl接口的能量管理
当开启或关闭设备所花费时间不可忽略时,应当使用SplitControl接口代替StdControl接口。SplitControl接口的定义如下:
外部设备必须调用SplitControl.start()命令来开启设备,调用SplitControl.stop()命令来关闭设备。调用上述命令将返回SUCCESS、FAIL、EBUSY或者EALREADY。SUCCESS表示正在切换能量状态,随后会触发一个相应的完成事件。EBUSY表示设备正在进行其他操作(如在开启设备时调用stop命令,在关闭设备时调用start命令),随后不会触发事件。EALREADY表示设备已处于该能量状态,该命令的调用是错误的,此时完成事件不会触发。FAIL表示没有成功切换设备的能量状态。
成功的调用SplitControl.start()命令必须触发SplitControl.startDone(SUCCESS)事件或SplitControl.startDone(FAIL)事件。
成功地调用SplitControl.stop()命令必须触发SplitControl.stopDone(SUCCESS)事件或SplitControl.stopDone(FAIL)事件。
在触发SplitControl.startDone(SUCCESS)事件之前,设备必须完全开启,并且调用该设备其他接口命令的操作请求可能会成功。(www.xing528.com)
在触发SplitControl.stopDone(SUCCESS)事件之前,设备必须完全关闭,并且随后调用该设备其他接口命令后一定返回EOFF或FAIL。
如果设备处于开启状态,并在成功的调用SplitControl.stop()命令后触发SplitControl.stopDone(FAIL)事件,设备必须仍然处于完全开启状态,并且调用该设备其他接口命令的操作请求可能会成功。
如果设备处于关闭状态,并在成功地调用SplitControl.start()命令后触发SplitControl.startDone(FAIL)事件,则设备必须仍然处于完全关闭状态,并且调用该设备其他接口命令后一定返回EOFF或FAIL。
如果设备不能完成SplitControl.start()或SplitControl.stop()请求,则必须返回FAIL。
当设备正在开启时调用SplitControl.start()命令或者当设备正在关闭状态时调用SplitControl.stop()命令必须返回SUCCESS,随后会触发相应的SplitControl.startDone()事件或SplitControl.stopDone()事件。
当设备处于开启状态时调用SplitControl.start()命令或者当设备处于关闭状态时调用Split-Control.stop()命令必须返回EALREADY,表示设备已处于该状态。相应的完成事件不能被触发。
当设备正在关闭时调用SplitControl.start()命令或者当设备正在开启时调用SplitControl.stop()命令必须返回EBUSY,表示设备忙于执行一个不同的操作。相应的完成事件不能被触发。
表6-4是在设备处于不同状态时,SplitControl接口命令的返回值:
表6-4 SplitControl接口的合法返回值表
设备组件中提供的SplitControl接口代码如下:
3.基于AsyncStdControl接口的能量管理
StdControl接口和SplitControl接口中的命令和事件都是同步的,不能在异步代码中被调用。当需异步代码控制设备的电源状态时,需要使用AsyncStdControl接口,其定义如下:
所有StdControl设备提供的语义对于AsyncStdControl接口同样适用,设备组件中提供的AsyncStdControl接口代码如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。