Peek into TinyOS Programs - PowerPoint PPT Presentation

About This Presentation
Title:

Peek into TinyOS Programs

Description:

1. Peek into TinyOS Programs. Vinod Kulathumani. Presentation schedule ... Application consists of one or more components assembled, or wired ... – PowerPoint PPT presentation

Number of Views:95
Avg rating:3.0/5.0
Slides: 39
Provided by: vinodkul
Category:
Tags: tinyos | peek | programs

less

Transcript and Presenter's Notes

Title: Peek into TinyOS Programs


1
Peek into TinyOS Programs
  • Vinod Kulathumani

2
Basics
  • Application consists of one or more components
    assembled, or wired
  • A component provides and uses interfaces.
  • Interfaces are bidirectional
  • they specify a set of commands
  • and a set of events
  • For a component to call the commands in an
    interface, it must implement the events of that
    interface.
  • A single component may use or provide multiple
    interfaces and multiple instances of the same
    interface.
  • Signature - The set of interfaces a component
    provides set of interfaces that a component uses

3
Components
  • Two types of components in nesC
  • modules and configurations
  • Modules provide the implementations of one or
    more interfaces
  • Configurations are used to assemble other
    components together
  • connect interfaces used by components to
    interfaces provided by others
  • Every nesC application described by a top-level
    configuration

4
Convention
  • Header File abc.h
  • Interface abc.nc
  • Configuration abcAppC.nc
  • Module Public abcC.nc
  • Module Private abcP.nc

5
HelloAppC Configuration
  • configuration HelloAppC
  • implementation

6
HelloAppC Configuration
  • configuration HelloAppC
  • implementation
  • components HelloC

7
HelloC Module
  • module HelloC
  • implementation

8
HelloC Module
  • module HelloC
  • uses
  • interface Boot
  • interface Leds
  • implementation

9
HelloC Module
  • module HelloC
  • uses
  • interface Boot
  • interface Leds
  • implementation

10
Boot Interface
  • interface Boot
  • event void booted()

11
HelloC Module
  • module HelloC
  • uses
  • interface Boot
  • interface Leds
  • implementation
  • event void Boot.booted()

USE an interface, CAPTURE all of its events!
12
Leds Interface
  • interface Leds
  • command void led0On()
  • command void led0Off()
  • command void led0Toggle()
  • command void set(uint8_t val)

13
HelloC Module
  • module HelloC
  • uses
  • interface Boot
  • interface Leds
  • implementation
  • event void Boot.booted()
  • call Leds.led0On()

14
HelloAppC Configuration
  • configuration HelloAppC
  • implementation
  • components HelloC,
  • MainC,
  • LedsC
  • // USES -gt PROVIDES
  • HelloC.Boot -gt MainC.Boot
  • HelloC.Leds -gt LedsC

15
Hello Application
16
Example 2 Blink
  • Configuration BlinkAppC.nc
  • Module BlinkC.nc

17
Configuration
  • configuration BlinkAppC
  • implementation

18
Implementation
  • module BlinkC
  • implementation

19
Configuration components list
  • configuration BlinkAppC
  • implementation
  • components MainC, BlinkC, LedsC
  • components new TimerMilliC() as Timer0
  • components new TimerMilliC() as Timer1
  • components new TimerMilliC() as Timer2

20
Module provides / uses
  • Module BlinkC
  • uses interface TimerltTMilligt as Timer0
  • uses interface TimerltTMilligt as Timer1
  • uses interface TimerltTMilligt as Timer2
  • uses interface Leds
  • uses interface Boot
  • implementation
  • // implementation code omitted

21
Module provides / uses
  • Module BlinkC
  • uses interface TimerltTMilligt as Timer0
  • uses interface TimerltTMilligt as Timer1
  • uses interface TimerltTMilligt as Timer2
  • uses interface Leds
  • uses interface Boot
  • implementation
  • event void Boot.booted() call
    Timer0.start() .
  • event Timer0.fired()
  • event Timer1.fired()

22
Configuration wiring
  • configuration BlinkAppC
  • implementation
  • components MainC, BlinkC, LedsC
  • components new TimerMilliC() as Timer0
  • components new TimerMilliC() as Timer1
  • components new TimerMilliC() as Timer2
  • BlinkC.Boot -gt MainC.Boot
  • BlinkC.Timer0 -gt Timer0
  • BlinkC.Timer1 -gt Timer1
  • BlinkC.Timer2 -gt Timer2
  • BlinkC.Leds -gt LedsC

23
Radio Stacks
Your Application
SplitControl
Receive
AMSend
Message Queue
ActiveMessage
CSMA / Acknowledgements
Transmit / Receive / Init
Radio Hardware
24
Main Radio Interfaces
  • SplitControl
  • Provided by ActiveMessageC
  • AMSend
  • Provided by AMSenderC
  • Receive
  • Provided by AMReceiverC

25
Main Serial Interfaces
  • SplitControl
  • Provided by SerialActiveMessageC
  • AMSend
  • Provided by SerialAMSenderC
  • Receive
  • Provided by SerialAMReceiverC

26
Setting up the Radio Configuration
  • configuration MyRadioAppC
  • implementation
  • components MyRadioC,
  • MainC,
  • ActiveMessageC,
  • new AMSenderC(0) as Send0, // send an AM type
    0 message
  • new AMReceiverC(0) as Receive0 // receive an
    AM type 0

27
Setting up the Radio Module
  • module MyRadioC
  • uses
  • interface Boot
  • interface SplitControl
  • interface AMSend
  • interface Receive
  • implementation

28
Turn on the Radio
  • event void Boot.booted()
  • call SplitControl.start()
  • event void SplitControl.startDone(error_t
    error)
  • post sendMsg()
  • event void SplitControl.stopDone(error_t error)

29
Setting up the Radio Configuration
  • configuration MyRadioAppC
  • implementation
  • components MyRadioC,
  • MainC,
  • ActiveMessageC,
  • new AMSenderC(0) as Send0, // send an AM type
    0 message
  • new AMReceiverC(0) as Receive0 // receive an
    AM type 0
  • MyRadioC.Boot -gt MainC
  • MyRadioC.SplitControl -gt ActiveMessageC
  • MyRadioC.AMSend -gt Send0
  • MyRadioC.Receiver -gt Receive0

30
Payloads
  • A message consists of
  • Header
  • Payload
  • Optional Footer

31
message_t
  • typedef nx_struct message_t
  • nx_uint8_t headersizeof(message_header_t)
  • nx_uint8_t dataTOSH_DATA_LENGTH
  • nx_uint8_t footersizeof(message_footer_t)
  • nx_uint8_t metadatasizeof(message_metadata_t)
  • message_t

32
Payloads Use Network Types
  • (MyPayload.h)
  • typedef nx_struct MyPayload
  • nx_uint8_t count
  • MyPayload

33
Send Messages
  • message_t myMsg
  • bool sendingfalse
  • task void sendMsg()
  • MyPayload payload (MyPayload )call
    ASMSend.getPayload(myMsg)
  • payload-gtcount (myCount)
  • if (sendingfalse)
  • error_t p
  • p call AMSend.send(AM_BROADCAST_ADDR,
    myMsg, 0)
  • If (pSUCCESS) sendingtrue
  • else post sendMsg()
  • event void AMSend.sendDone(message_t msg,
  • error_t error)
  • sendingfalse

34
Receive a Message
  • event message_t Receive.receive(message_t msg,
    void
  • payload, uint8_t length)
  • MyPayload pkt (MyPayload )payload
  • uint8_t ct pkt-gtcount
  • call Leds.led0Toggle()
  • return msg

35
RealMainP
  • module RealMainP
  • provides interface Boot
  • uses
  • interface Scheduler
  • interface Init as PlatformInit
  • interface Init as SoftwareInit
  • Implementation
  • // platform initialization stuff
  • call SoftwareInit.init()
  • signal Boot.booted()
  • // call scheduler task loop

36
SoftwareInit in RealMainP
  • Suppose user writes module RandomIntC
  • provides an interface Init
  • should be initialized before use (to generate
    seed)
  • what if application developer forgets
  • Instead write a configuration RandomC around
    RandomIntC
  • Module RandomC
  • provides interface Init
  • Implementation RandomC
  • components MainC, RandomIntC
  • MainC.SoftwareInit -gt RandomIntc.Init

37
SoftwareInit in RealMainP
  • So far we didnt care in our examples
  • All our examples were applications
  • Did not provide interface
  • Interior components that provide interface may
    need Init
  • MainC.SoftwareInit may be wired to many Inits
  • Each will be called in sequence

38
References
  • TinyOS Tutorials www.tinyos.net
  • David Moss TinyOS 2 tutorial
Write a Comment
User Comments (0)
About PowerShow.com