[Tinyos-beta-commits]
CVS: tinyos-1.x/beta/teps/txt tep102.txt, 1.2,
1.3 tep103.txt, 1.2, 1.3 tep105.txt, 1.2, 1.3
Ion Yannopoulos
ion- at users.sourceforge.net
Mon Jan 31 15:10:05 PST 2005
Update of /cvsroot/tinyos/tinyos-1.x/beta/teps/txt
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26485/txt
Modified Files:
tep102.txt tep103.txt tep105.txt
Log Message:
Clean up RST so HTML will generate properly.
Index: tep102.txt
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/beta/teps/txt/tep102.txt,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** tep102.txt 24 Jan 2005 10:00:59 -0000 1.2
--- tep102.txt 31 Jan 2005 23:09:56 -0000 1.3
***************
*** 1,3 ****
! <===========================
Timers
============================
--- 1,3 ----
! ============================
Timers
============================
***************
*** 38,44 ****
* Low frequency alarms, synchronous, periodic and oneshot, for
! user/app timers
* High frequency alarms, asynchronous, periodic and oneshot, for adc
! sampling
* Stop watches, timing information
* Local time, time origin
--- 38,44 ----
* Low frequency alarms, synchronous, periodic and oneshot, for
! user/app timers
* High frequency alarms, asynchronous, periodic and oneshot, for adc
! sampling
* Stop watches, timing information
* Local time, time origin
***************
*** 54,58 ****
* All exposed timer values should be unsigned 32-bit integers (uint32_t)
! regardless of precision
A single timer interface common across all precisions would enable subtle
--- 54,58 ----
* All exposed timer values should be unsigned 32-bit integers (uint32_t)
! regardless of precision
A single timer interface common across all precisions would enable subtle
***************
*** 165,169 ****
i. Get current time as a uint32_t in whatever units are specified by
! the interface tag frequency_tag
ii. Manage overflows
--- 165,169 ----
i. Get current time as a uint32_t in whatever units are specified by
! the interface tag frequency_tag
ii. Manage overflows
***************
*** 172,182 ****
iii. Interface::
! interface Counter<frequency_tag>
! {
! async command uint32_t get();
! async command bool isOverflowPending();
! async command bool clearOverflow();
! async event void overflow();
! }
e. Alarm<frequency_tag>
--- 172,182 ----
iii. Interface::
! interface Counter<frequency_tag>
! {
! async command uint32_t get();
! async command bool isOverflowPending();
! async command bool clearOverflow();
! async event void overflow();
! }
e. Alarm<frequency_tag>
***************
*** 192,203 ****
iv. Interface::
! interface Alarm<frequency_tag>
! {
! async command uint32_t get();
! async command bool isSet();
! async command void cancel();
! async command void set( uint32_t t0, uint32_t dt );
! async event void fired();
! }
v. The AlarmC configuration exposes a distinct set of alarms
--- 192,203 ----
iv. Interface::
! interface Alarm<frequency_tag>
! {
! async command uint32_t get();
! async command bool isSet();
! async command void cancel();
! async command void set( uint32_t t0, uint32_t dt );
! async event void fired();
! }
v. The AlarmC configuration exposes a distinct set of alarms
***************
*** 208,225 ****
configuration AlarmC
{
! // alarms required by standard tinyos components
! provides interface Alarm<TMilli> as AlarmTimerMilli;
! provides interface Alarm<T32khz> as AlarmTimer32khz;
! provides interface AlarmAsync<T32khz> as AlarmTimerAsync32khz;
! // extra alarms to be used by applications
! provides interface Alarm<T32khz> as Alarm32khz1;
! provides interface Alarm<T32khz> as Alarm32khz2;
! //...
! provides interface Alarm<TMicro> as AlarmMicro1;
! provides interface Alarm<TMicro> as AlarmMicro2;
! provides interface Alarm<TMicro> as AlarmMicro3;
! //...
}
--- 208,225 ----
configuration AlarmC
{
! // alarms required by standard tinyos components
! provides interface Alarm<TMilli> as AlarmTimerMilli;
! provides interface Alarm<T32khz> as AlarmTimer32khz;
! provides interface AlarmAsync<T32khz> as AlarmTimerAsync32khz;
! // extra alarms to be used by applications
! provides interface Alarm<T32khz> as Alarm32khz1;
! provides interface Alarm<T32khz> as Alarm32khz2;
! //...
! provides interface Alarm<TMicro> as AlarmMicro1;
! provides interface Alarm<TMicro> as AlarmMicro2;
! provides interface Alarm<TMicro> as AlarmMicro3;
! //...
}
***************
*** 255,278 ****
c. Timer interface
! i. Synchronous
! ii. Parameterized by time precision
iii. Provides periodic and one shot timers
! iv. May have moderate computational overhead, probably all Timers for
! a given timer precision are multiplexed from a single hardware
! resource
v. Interface::
! interface Timer<frequency_tag>
! {
! command result_t setPeriodic( uint32_t dt );
! command result_t setOneShot( uint32_t dt );
! command result_t stop();
! command bool isSet();
! command bool isPeriodic();
! command bool isOneShot();
! command uint32_t getPeriod();
! event void fired();
! }
d. TimerAsync interface
--- 255,278 ----
c. Timer interface
! i. Synchronous
! ii. Parameterized by time precision
iii. Provides periodic and one shot timers
! iv. May have moderate computational overhead, probably all Timers for
! a given timer precision are multiplexed from a single hardware
! resource
v. Interface::
! interface Timer<frequency_tag>
! {
! command result_t setPeriodic( uint32_t dt );
! command result_t setOneShot( uint32_t dt );
! command result_t stop();
! command bool isSet();
! command bool isPeriodic();
! command bool isOneShot();
! command uint32_t getPeriod();
! event void fired();
! }
d. TimerAsync interface
***************
*** 282,300 ****
iii. Provides periodic and one shot timers
iv. Should have minimal computational overhead, probably each
! TimerAsync is based on a single hardware resource
v. Interface::
! interface TimerAsync<frequency_tag>
! {
! async command result_t setPeriodic( uint32_t dt );
! async command result_t setOneShot( uint32_t dt );
! async command result_t stop();
! async command bool isSet();
! async command bool isPeriodic();
! async command bool isOneShot();
! async command uint32_t getPeriod();
! async event void fired();
! }
e. Stopwatch interface
--- 282,300 ----
iii. Provides periodic and one shot timers
iv. Should have minimal computational overhead, probably each
! TimerAsync is based on a single hardware resource
v. Interface::
! interface TimerAsync<frequency_tag>
! {
! async command result_t setPeriodic( uint32_t dt );
! async command result_t setOneShot( uint32_t dt );
! async command result_t stop();
! async command bool isSet();
! async command bool isPeriodic();
! async command bool isOneShot();
! async command uint32_t getPeriod();
! async event void fired();
! }
e. Stopwatch interface
***************
*** 305,323 ****
iv. Indicates if an overflow occurred for the returned value
v. Stopwatches only depend on measurements from an appropriate
! Counter.
! v. Interface::
! typedef struct
! {
! uint32_t value;
! bool overflow;
! } stopwatch_t;
! interface Stopwatch<frequency_tag>
! {
! async command void start();
! async command stopwatch_t read();
! async command stopwatch_t stop();
! }
--- 305,323 ----
iv. Indicates if an overflow occurred for the returned value
v. Stopwatches only depend on measurements from an appropriate
! Counter.
! vi. Interface::
! typedef struct
! {
! uint32_t value;
! bool overflow;
! } stopwatch_t;
! interface Stopwatch<frequency_tag>
! {
! async command void start();
! async command stopwatch_t read();
! async command stopwatch_t stop();
! }
Index: tep103.txt
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/beta/teps/txt/tep103.txt,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** tep103.txt 26 Jan 2005 19:29:02 -0000 1.2
--- tep103.txt 31 Jan 2005 23:09:57 -0000 1.3
***************
*** 49,53 ****
A common restriction of flash technology is that each bit can only be
written once between erases. The table below summarizes the differences
! between the various flash technologies:
--- 49,53 ----
A common restriction of flash technology is that each bit can only be
written once between erases. The table below summarizes the differences
! between the various flash technologies::
***************
*** 106,112 ****
Writes: random (minimum block size?), each block written once
Failure model: no fault tolerance (crash before commit leads to
! object loss)
Other: a commit operation terminates writes, a validate operation
! checks the object.
b. Small objects (Deluge metadata, many other apps):
--- 106,112 ----
Writes: random (minimum block size?), each block written once
Failure model: no fault tolerance (crash before commit leads to
! object loss)
Other: a commit operation terminates writes, a validate operation
! checks the object.
b. Small objects (Deluge metadata, many other apps):
***************
*** 119,123 ****
Writes: random, no minimum block size, rewrite ok
Failure model: writes are atomic, failure during/between writes
! does not lead to object loss
c. Large sequential objects (Logs)
--- 119,123 ----
Writes: random, no minimum block size, rewrite ok
Failure model: writes are atomic, failure during/between writes
! does not lead to object loss
c. Large sequential objects (Logs)
***************
*** 131,139 ****
Writes: sequential, object is linear or circular
Failure model: writes are atomic, failure during/between writes
! does not lead to whole object loss, but may lead to loss of
! some entries (but see sync)
! Note: failure during write may lead to (minor) capacity reduction
Other: sync: guarantees already written data will not be lost to
! (crash-style) failure
These interfaces will be offered on top of a uniform method of sharing
--- 131,139 ----
Writes: sequential, object is linear or circular
Failure model: writes are atomic, failure during/between writes
! does not lead to whole object loss, but may lead to loss of
! some entries (but see sync)
! Note: failure during write may lead to (minor) capacity reduction
Other: sync: guarantees already written data will not be lost to
! (crash-style) failure
These interfaces will be offered on top of a uniform method of sharing
***************
*** 184,188 ****
iii. automatic buffer management (+ sync, flush)
iv. see tos/platform/mica/PageEEPROM|PageEEPROMM.nc
! d. Intel Strataflash (should extend to other memory-mapped NOR flashes)
interface HALStrata { /* In flux until higher level stuff written */
--- 184,188 ----
iii. automatic buffer management (+ sync, flush)
iv. see tos/platform/mica/PageEEPROM|PageEEPROMM.nc
! d. Intel Strataflash (should extend to other memory-mapped NOR flashes)::
interface HALStrata { /* In flux until higher level stuff written */
***************
*** 201,205 ****
}
! e. M25P:
interface {
--- 201,205 ----
}
! e. M25P::
interface {
***************
*** 225,231 ****
c. Space allocation
! This is similar to fdisk. Allocation of volumes can only occur
! between calls to init() and commit(). init() wipes the volume
! table clean and commit() writes out the volume table.
interface FStorage {
--- 225,231 ----
c. Space allocation
! This is similar to fdisk. Allocation of volumes can only occur
! between calls to init() and commit(). init() wipes the volume
! table clean and commit() writes out the volume table::
interface FStorage {
***************
*** 237,242 ****
}
! The mount interface is used to setup access to a specific
! volume.
interface Mount {
--- 237,242 ----
}
! The mount interface is used to setup access to a specific
! volume::
interface Mount {
***************
*** 245,254 ****
}
! This interface is provided by the components implementing
! BlockRead/Write, ConfigStorage, and LogRead/Write. This
! interface is necessary for components to setup any required
! metadata. For example, ConfigRead may need to know where to
! read a specific configuration. LogWrite may need to search for
! the current offset.
interface VolumeInit {
--- 245,254 ----
}
! This interface is provided by the components implementing
! BlockRead/Write, ConfigStorage, and LogRead/Write. This
! interface is necessary for components to setup any required
! metadata. For example, ConfigRead may need to know where to
! read a specific configuration. LogWrite may need to search for
! the current offset::
interface VolumeInit {
***************
*** 257,261 ****
}
! d. Large object
interface BlockWrite {
--- 257,261 ----
}
! d. Large object::
interface BlockWrite {
***************
*** 281,285 ****
! e. Small object
interface ConfigStorage {
--- 281,285 ----
! e. Small object::
interface ConfigStorage {
***************
*** 294,298 ****
}
! f. Large sequential object
interface LogWrite {
--- 294,298 ----
}
! f. Large sequential object::
interface LogWrite {
Index: tep105.txt
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/beta/teps/txt/tep105.txt,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** tep105.txt 24 Jan 2005 07:13:06 -0000 1.2
--- tep105.txt 31 Jan 2005 23:09:57 -0000 1.3
***************
*** 1,5 ****
! ============================
Link Layer Primitives in TinyOS
! ============================
:TEP: 105
:Group: Core Working Group
--- 1,5 ----
! ===============================
Link Layer Primitives in TinyOS
! ===============================
:TEP: 105
:Group: Core Working Group
***************
*** 48,89 ****
conditions in event-driven operations and buffer swapping
! d. HPL for control
! Chipcon CC1000 register-based radios:
! read/write registers
! interrupts and timer capture events (general I/O)
! Chipcon CC2420 buffer-based radios:
! read/write registers
! read/write RAM
! interrupts and timer capture events (general I/O)
! | interface HPLCC2420 {
! | async command uint8_t cmd(uint8_t addr);
! | async command uint8_t write(uint8_t addr, uint16_t data);
! | async command uint16_t read(uint8_t addr);
! | }
! |
! | // a subset of the capture provided by the hardware
! | interface HPLCC2420Capture {
! | async command result_t enableCapture(bool low_to_high);
! | async event result_t captured(uint16_t val);
! | async command result_t disable();
! | }
e. HPL for data
! Chipcon CC1000 register-based radios:
! read/write byte
! Chipcon CC2420 buffer-based radios:
! read/write 128-byte FIFO
! | interface HPLCC2420FIFO {
! | async command cc2420_result_t readRXFIFO(uint8_t length, uint8_t *data);
! | async command cc2420_result_t writeTXFIFO(uint8_t length, uint8_t *data);
! | async event result_t RXFIFODone(uint8_t length, uint8_t *data, cc2420_result_t success);
! | async event result_t TXFIFODone(uint8_t length, uint8_t *data, cc2420_result_t success);
! | }
f. The HPL interfaces reside in the radio's "chips" directory while
! the underlying HPL implementations (*C, *M) reside in
a microcontroller or platform directory.
--- 48,96 ----
conditions in event-driven operations and buffer swapping
! d. HPL for control:
! - Chipcon CC1000 register-based radios:
! - read/write registers
! - interrupts and timer capture events (general I/O)
! - Chipcon CC2420 buffer-based radios:
! - read/write registers
! - read/write RAM
! - interrupts and timer capture events (general I/O)
! ::
!
! interface HPLCC2420
! {
! async command uint8_t cmd(uint8_t addr);
! async command uint8_t write(uint8_t addr, uint16_t data);
! async command uint16_t read(uint8_t addr);
! }
!
! // a subset of the capture provided by the hardware
! interface HPLCC2420Capture
! {
! async command result_t enableCapture(bool low_to_high);
! async event result_t captured(uint16_t val);
! async command result_t disable();
! }
e. HPL for data
! - Chipcon CC1000 register-based radios:
! - read/write byte
! - Chipcon CC2420 buffer-based radios:
! - read/write 128-byte FIFO
! ::
!
! interface HPLCC2420FIFO
! {
! async command cc2420_result_t readRXFIFO(uint8_t length, uint8_t *data);
! async command cc2420_result_t writeTXFIFO(uint8_t length, uint8_t *data);
! async event result_t RXFIFODone(uint8_t length, uint8_t *data, cc2420_result_t success);
! async event result_t TXFIFODone(uint8_t length, uint8_t *data, cc2420_result_t success);
! }
f. The HPL interfaces reside in the radio's "chips" directory while
! the underlying HPL implementations (\*C, \*M) reside in
a microcontroller or platform directory.
***************
*** 99,103 ****
(whether it be bit, byte, or packet), translations may occur
on the data--coding, cryptography etc.
! (see Figure 2 of RadioActive networks paper)
This PHY/MAC split currently exists in TinyOS with
--- 106,110 ----
(whether it be bit, byte, or packet), translations may occur
on the data--coding, cryptography etc.
! (see Figure 2 of RadioActive networks paper)
This PHY/MAC split currently exists in TinyOS with
***************
*** 117,140 ****
Additionally, the MAC provides control interfaces similar to B-MAC,
including the ability to turn on or off CSMA, acks, and low power
! listening.
! | interface CSMAControl
! | {
! | async command result_t enableCCA();
! | async command result_t disableCCA();
! | async command result_t enableAck();
! | async command result_t disableAck();
! | async command TOSMsg* HaltTx();
! | }
The units of the CSMA Backoff are *SYMBOL PERIODS* of the radio.
See the RadioControl interface below to convert symbol periods into
! normal time units.
! | interface CSMABackoff
! | {
! | async event int16_t initial(TOSMsg* m);
! | async event int16_t congestion(TOSMsg* m);
! | }
Low Power Listening provides additional challenges as the notation
--- 124,147 ----
Additionally, the MAC provides control interfaces similar to B-MAC,
including the ability to turn on or off CSMA, acks, and low power
! listening::
! interface CSMAControl
! {
! async command result_t enableCCA();
! async command result_t disableCCA();
! async command result_t enableAck();
! async command result_t disableAck();
! async command TOSMsg* HaltTx();
! }
The units of the CSMA Backoff are *SYMBOL PERIODS* of the radio.
See the RadioControl interface below to convert symbol periods into
! normal time units::
! interface CSMABackoff
! {
! async event int16_t initial(TOSMsg* m);
! async event int16_t congestion(TOSMsg* m);
! }
Low Power Listening provides additional challenges as the notation
***************
*** 143,157 ****
preamble is used for LPL. On the CC2420, cyclical packets must be
used for LPL (due to the HW constraints, long preambles are not an
! option). A proposal:
! | interface LowPowerListening
! | {
! | async command result_t SetMode(lpl_mode_t mode);
! | async command lpl_mode_t GetMode();
! | async command result_t SetListeningMode(lpl_mode_t mode);
! | async command lpl_mode_t GetListeningMode();
! | async command result_t SetTransmitMode(lpl_mode_t mode);
! | async command lpl_mode_t GetTransmitMode();
! | }
The lpl_mode_t values are mapped by the specific radio implementation
--- 150,164 ----
preamble is used for LPL. On the CC2420, cyclical packets must be
used for LPL (due to the HW constraints, long preambles are not an
! option). A proposal::
! interface LowPowerListening
! {
! async command result_t SetMode(lpl_mode_t mode);
! async command lpl_mode_t GetMode();
! async command result_t SetListeningMode(lpl_mode_t mode);
! async command lpl_mode_t GetListeningMode();
! async command result_t SetTransmitMode(lpl_mode_t mode);
! async command lpl_mode_t GetTransmitMode();
! }
The lpl_mode_t values are mapped by the specific radio implementation
***************
*** 161,173 ****
Additional HAL-level interface for Low Power Listening in a radio
! dependent manner
! | interface CC1000LowPowerListening
! | {
! | async command result_t SetPreambleLength(uint16_t bytes);
! | async command uint16_t GetPreambleLength();
! | async command result_t SetCheckInterval(uint16_t ms);
! | async command uint16_t GetCheckInterval();
! | }
The "mode" options provide a level of abstraction above the
--- 168,180 ----
Additional HAL-level interface for Low Power Listening in a radio
! dependent manner::
! interface CC1000LowPowerListening
! {
! async command result_t SetPreambleLength(uint16_t bytes);
! async command uint16_t GetPreambleLength();
! async command result_t SetCheckInterval(uint16_t ms);
! async command uint16_t GetCheckInterval();
! }
The "mode" options provide a level of abstraction above the
***************
*** 183,203 ****
delimiter. The time value is always a 32768Hz 16-bit value .
CC1000RadioTimeStamping is an example of an expanded time HAL interface
! specific to the CC1000 radio.
! | interface RadioTimeStamping
! | {
! | async event void SFD(uint16_t time, TOSMsg* msgBuff);
! | }
Each platform may be able to provide more information than just the
SFD timestamp. These platforms will have their own HAL interfaces
! with additional time information.
! | interface CC1000RadioTimeStamping
! | {
! | async event void startSymbol(uint8_t bitsPerBlock, uint8_t offset, TOSMsg* msgBuff);
! | async event void byte(TOSMsg* msg, uint8_t byteCount);
! | async event void blockTimer();
! | }
The 16-bit "time" field of TOSMsg is the 16-bit 32768Hz timer value
--- 190,210 ----
delimiter. The time value is always a 32768Hz 16-bit value .
CC1000RadioTimeStamping is an example of an expanded time HAL interface
! specific to the CC1000 radio::
! interface RadioTimeStamping
! {
! async event void SFD(uint16_t time, TOSMsg* msgBuff);
! }
Each platform may be able to provide more information than just the
SFD timestamp. These platforms will have their own HAL interfaces
! with additional time information::
! interface CC1000RadioTimeStamping
! {
! async event void startSymbol(uint8_t bitsPerBlock, uint8_t offset, TOSMsg* msgBuff);
! async event void byte(TOSMsg* msg, uint8_t byteCount);
! async event void blockTimer();
! }
The 16-bit "time" field of TOSMsg is the 16-bit 32768Hz timer value
***************
*** 217,238 ****
Radio timing information, such as bit, byte, and symbol times are
provided through the RadioControl interface. See the RadioControl
! interface defintion in tinyos-2.x/tos/interfaces
! | interface RadioControl
! | {
! | command result_t SetRFChannel(uint8_t channel);
! | command uint8_t GetRFChannel();
! | command uint8_t GetMaxChannels();
! |
! | command result_t SetRFPower(uint8_t power);
! | command uint8_t GetRFPower();
! |
! | command uint8_t RFtoDB(uint8_t power);
! | command uint8_t DBtoRF(int8_t dbm);
! |
! | command uint16_t getTimeBit();
! | command uint16_t getTimeByte();
! | command uint16_t getTimeSymbol();
! | }
The TOSMsg structure is created such that each radio implementation
--- 224,245 ----
Radio timing information, such as bit, byte, and symbol times are
provided through the RadioControl interface. See the RadioControl
! interface defintion in tinyos-2.x/tos/interfaces::
! interface RadioControl
! {
! command result_t SetRFChannel(uint8_t channel);
! command uint8_t GetRFChannel();
! command uint8_t GetMaxChannels();
!
! command result_t SetRFPower(uint8_t power);
! command uint8_t GetRFPower();
!
! command uint8_t RFtoDB(uint8_t power);
! command uint8_t DBtoRF(int8_t dbm);
!
! command uint16_t getTimeBit();
! command uint16_t getTimeByte();
! command uint16_t getTimeSymbol();
! }
The TOSMsg structure is created such that each radio implementation
***************
*** 242,264 ****
Platform indpendent services use RadioPacket to access common
message fields; whereas platform dependent services directly
! access the TOSMsg fields as defined by that radio implementation.
! | interface RadioPacket
! | {
! | command uint8_t getLength(TOSMsg* msg);
! | command result_t setLength(TOSMsg* msg, uint8_t length);
! |
! | command uint8_t* getData(TOSMsg* msg);
! |
! | command uint16_t getAddress(TOSMsg* msg);
! | command result_t setAddress(TOSMsg* msg, uint16_t addr);
! |
! | command uint16_t getGroup(TOSMsg* msg);
! | command result_t setGroup(TOSMsg* msg, uint16_t group);
! |
! | command uint16_t getTime(TOSMsg* msg);
! |
! | command bool isAck(TOSMsg* msg);
! | }
The radio interfaces come together in the new RadioC module.
--- 249,271 ----
Platform indpendent services use RadioPacket to access common
message fields; whereas platform dependent services directly
! access the TOSMsg fields as defined by that radio implementation::
! interface RadioPacket
! {
! command uint8_t getLength(TOSMsg* msg);
! command result_t setLength(TOSMsg* msg, uint8_t length);
!
! command uint8_t* getData(TOSMsg* msg);
!
! command uint16_t getAddress(TOSMsg* msg);
! command result_t setAddress(TOSMsg* msg, uint16_t addr);
!
! command uint16_t getGroup(TOSMsg* msg);
! command result_t setGroup(TOSMsg* msg, uint16_t group);
!
! command uint16_t getTime(TOSMsg* msg);
!
! command bool isAck(TOSMsg* msg);
! }
The radio interfaces come together in the new RadioC module.
***************
*** 269,295 ****
fallback for cross-platform application development.
The configurations look like the following, such as
! in tos/chips/CC2420:
! | configuration RadioC {
! | provides {
! | // split phase startup and shutdown of the radio
! | interface SplitControl;
! | // change frequency, power, etc.
! | interface RadioControl;
! | // send a message
! | interface Send;
! | // receive a message
! | interface Receive;
! | }
! | }
! | implementation
! | {
! | components CSMARadioC as CC2420RadioC;
! |
! | SplitControl = CC2420RadioC;
! | RadioControl = CC2420RadioC;
! | Send = CC2420RadioC;
! | Receive = CC2420RadioC;
! | }
Then, if the radio supports CSMA, it also provides a
--- 276,304 ----
fallback for cross-platform application development.
The configurations look like the following, such as
! in tos/chips/CC2420::
! configuration RadioC
! {
! provides
! {
! // split phase startup and shutdown of the radio
! interface SplitControl;
! // change frequency, power, etc.
! interface RadioControl;
! // send a message
! interface Send;
! // receive a message
! interface Receive;
! }
! }
! implementation
! {
! components CSMARadioC as CC2420RadioC;
!
! SplitControl = CC2420RadioC;
! RadioControl = CC2420RadioC;
! Send = CC2420RadioC;
! Receive = CC2420RadioC;
! }
Then, if the radio supports CSMA, it also provides a
***************
*** 297,324 ****
radio-agnostic, and CSMARadioC if they wish to use the CSMA
control functionality but restrict their service's portability
! to CSMA radios.
! | configuration CSMARadioC {
! | provides {
! | // split phase startup and shutdown of the radio
! | interface SplitControl;
! | // change frequency, power, etc.
! | interface RadioControl;
! | // send a message
! | interface Send;
! | // receive a message
! | interface ReceiveMsg as Receive;
! |
! | // enable/disable csma, acks
! | interface CSMAControl;
! | // change the backoff on a per-packet basis
! | interface CSMABackoff;
! | // duty cycle the radio with preamble sampling
! | interface LowPowerListening;
! | }
! | }
! | implementation {
! | components CC2420RadioM ...
! | }
FUTURE WORK:
--- 306,335 ----
radio-agnostic, and CSMARadioC if they wish to use the CSMA
control functionality but restrict their service's portability
! to CSMA radios::
! configuration CSMARadioC
! {
! provides
! {
! // split phase startup and shutdown of the radio
! interface SplitControl;
! // change frequency, power, etc.
! interface RadioControl;
! // send a message
! interface Send;
! // receive a message
! interface ReceiveMsg as Receive;
!
! // enable/disable csma, acks
! interface CSMAControl;
! // change the backoff on a per-packet basis
! interface CSMABackoff;
! // duty cycle the radio with preamble sampling
! interface LowPowerListening;
! }
! }
! implementation {
! components CC2420RadioM ...
! }
FUTURE WORK:
More information about the Tinyos-beta-commits
mailing list