所以在 TinyOS 中,界面是由命令和事件组成的。当模块使用接口时,它会调用其命令并提供其事件的实现(提供事件处理程序)。
命令的返回类型的含义很清楚,它与任何编程语言中的任何函数/方法的含义相同,但是事件的返回类型对我来说并不清楚。
举个例子:
interface Counter{
command int64_t getCounter(int64_t destinationId);
event int64_t counterSent(int64_t destinationId);
}
让我们定义一个提供Counter 接口的模块。
module Provider{
provides interface Counter;
}
implementation {
int64_t counter;
counter = 75; //Random number
/**
Returns the value of the counter and signals an event that
someone with id equal to destinationId asked for the counter.
**/
command int64_t getCounter(int64_t destinationId){
int64_t signalReturnedValue;
signalReturnedValue = signal counterSent(destinationId);
return counter;
}
}
现在让我们定义两个使用这个接口的模块。
module EvenIDChecker{
uses interface Counter;
}
implementation{
/**
Returns 1 if the destinationId is even, 0 otherwise
**/
event int64_t counterSent(int64_t destinationId){
if(destinationId % 2 == 0){
return 1;
} else {
return 0;
}
}
}
现在让我们定义另一个使用相同接口但与 EvenIDChecker 模块相反的模块。
module OddIDChecker{
uses interface Counter;
}
implementation{
/**
Returns 1 if the destinationId is odd, 0 otherwise
**/
event int64_t counterSent(int64_t destinationId){
if(destinationId % 2 == 1){
return 1;
} else {
return 0;
}
}
}
最后, var signalReturnedValue的最终值是多少?