[Tinyos-devel] Interface change proposals for 2.1

Matt Welsh mdw at eecs.harvard.edu
Fri Aug 10 10:38:53 PDT 2007


I vote yes.

On Aug 10, 2007, at 12:55 PM, Philip Levis wrote:

> After using 2.0 for almost a year, the core WG has identified what  
> it thinks are two issues with the current communication interfaces.  
> Fixing both of them would require changing the interfaces in minor  
> ways that would make them incompatible with prior versions. While  
> the code WG currently thinks these changes are a good idea, we  
> wanted to get community feedback and suggestions before deciding on  
> whether to make the changes.
>
> ----
>
> Change 1: The Receive interface.
>
> PROBLEM: Between beta2 and 2.0, utility commands were added to the  
> Receive interface (e.g., getPayload), so that users of the  
> interface do not have to wire to Packet if they need to obtain  
> payload pointers outside the Receive.receive event. This means that  
> components can no longer wire Receive multiple times, as those  
> commands fan-out. Wiring Receive multiple times is useful for  
> snooping code (you wire both Receive and Receive as Snoop to your  
> handler).
>
> PROPOSED SOLUTION: Remove the utility commands from Receive. After  
> looking at all of the source code in the repository, these utility  
> commands are used only a handful of times, and in all cases the  
> component using them also wired other interfaces that provide the  
> same functionality (i.e., Packet).
>
> interface Receive {
>   event message_t* receive(message_t* msg, void* payload, uint8_t  
> len);
>   command void* getPayload(message_t* msg, uint8_t* len);
>   command uint8_t payloadLength(message_t* msg);
> }
>
> becomes
>
> interface Receive {
>   event message_t* receive(message_t* msg, void* payload, uint8_t  
> len);
> }
>
> NOTE: Providing Receive will also be simpler, as the provider does  
> not have to implement the utility commands.
>
> ----
>
> Change 2: The Packet interface (and depending on 1, the Receive  
> interface)
>
> PROBLEM: David Gay and John Regehr have been developing code  
> checking tools that enable lightweight run-time memory access  
> checks. They hope to incorporate these as optional add-ons to the  
> TinyOS build process (i.e., make telosb memcheck). It turns out  
> that the getPayload call is a major source of possible errors yet  
> is very difficult to check efficiently. They have proposed an  
> alternative version of getPayload that these tools will be able to  
> check much more easily. Source code comparisons using the two  
> versions suggest that neither is particularly more or less complex  
> to use, and in terms of coding taste people seem evenly split on  
> which is "prettier."
>
> PROPOSED SOLUTION: The getPayload call will change from
>
>   command void* getPayload(message_t* msg, uint8_t* len);
>
> to
>
>   command void* getPayload(message_t* msg, uint8_t minLen);
>
> such that the caller tells the callee the size it requires. If the  
> callee cannot provide a payload of that size, then it returns NULL.  
> (The memory checking tools handle null pointers, so you don't smash  
> your control registers.)
>
> NOTE: If the old command was sorely needed (e.g., used by a binary  
> component), it is possible to translate the old call into the new one"
>
> command void* OldPacket.getPayload(message_t* msg, uint8_t* len) {
>   if (len != NULL) {
>     *len = call NewPacket.payloadLength(msg);
>   }
>   return call NewPacket.getPayload(msg, 0);
> }
>
> ----
>
> Thoughts and comments are greatly appreciated.
>
> Phil
>
>
> _______________________________________________
> Tinyos-devel mailing list
> Tinyos-devel at Millennium.Berkeley.EDU
> https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/ 
> tinyos-devel



More information about the Tinyos-devel mailing list