Merge pull request #1550 from thomas-ha/tsch-cc2538-port
Port of TSCH for CC2538
This commit is contained in:
commit
26bf33c762
7 changed files with 191 additions and 29 deletions
|
@ -36,6 +36,7 @@ It has been tested on the following platforms:
|
|||
* NXP JN516x (`jn516x`, tested on hardware)
|
||||
* Tmote Sky (`sky`, tested on hardware and in cooja)
|
||||
* Zolertia Z1 (`z1`, tested in cooja only)
|
||||
* CC2538DK (`cc2538dk`, tested on hardware)
|
||||
|
||||
This implementation was present at the ETSI Plugtest
|
||||
event in Prague in July 2015, and did successfully inter-operate with all
|
||||
|
@ -76,7 +77,7 @@ Orchestra is implemented in:
|
|||
|
||||
A simple TSCH+RPL example is included under `examples/ipv6/rpl-tsch`.
|
||||
To use TSCH, first make sure your platform supports it.
|
||||
Currently, `jn516x`, `sky` and `z1` are the supported platforms.
|
||||
Currently, `jn516x`, `sky`, `z1` and `cc2538dk` are the supported platforms.
|
||||
To add your own, we refer the reader to the next section.
|
||||
|
||||
To add TSCH to your application, first include the TSCH module from your makefile with:
|
||||
|
@ -162,7 +163,7 @@ Finally, one can also implement his own scheduler, centralized or distributed, b
|
|||
## Porting TSCH to a new platform
|
||||
|
||||
Porting TSCH to a new platform requires a few new features in the radio driver, a number of timing-related configuration paramters.
|
||||
The easiest is probably to start from one of the existing port: `jn516x`, `sky`, `z1`.
|
||||
The easiest is probably to start from one of the existing port: `jn516x`, `sky`, `z1`, `cc2538dk`.
|
||||
|
||||
### Radio features required for TSCH
|
||||
|
||||
|
|
|
@ -175,4 +175,11 @@
|
|||
#define TSCH_ADAPTIVE_TIMESYNC 0
|
||||
#endif
|
||||
|
||||
/* HW frame filtering enabled */
|
||||
#ifdef TSCH_CONF_HW_FRAME_FILTERING
|
||||
#define TSCH_HW_FRAME_FILTERING TSCH_CONF_HW_FRAME_FILTERING
|
||||
#else /* TSCH_CONF_HW_FRAME_FILTERING */
|
||||
#define TSCH_HW_FRAME_FILTERING 1
|
||||
#endif /* TSCH_CONF_HW_FRAME_FILTERING */
|
||||
|
||||
#endif /* __TSCH_CONF_H__ */
|
||||
|
|
|
@ -493,9 +493,11 @@ PT_THREAD(tsch_tx_slot(struct pt *pt, struct rtimer *t))
|
|||
uint8_t ack_hdrlen;
|
||||
frame802154_t frame;
|
||||
|
||||
#if TSCH_HW_FRAME_FILTERING
|
||||
/* Entering promiscuous mode so that the radio accepts the enhanced ACK */
|
||||
NETSTACK_RADIO.get_value(RADIO_PARAM_RX_MODE, &radio_rx_mode);
|
||||
NETSTACK_RADIO.set_value(RADIO_PARAM_RX_MODE, radio_rx_mode & (~RADIO_RX_MODE_ADDRESS_FILTER));
|
||||
#endif /* TSCH_HW_FRAME_FILTERING */
|
||||
/* Unicast: wait for ack after tx: sleep until ack time */
|
||||
TSCH_SCHEDULE_AND_YIELD(pt, t, current_slot_start,
|
||||
tsch_timing[tsch_ts_tx_offset] + tx_duration + tsch_timing[tsch_ts_rx_ack_delay] - RADIO_DELAY_BEFORE_RX, "TxBeforeAck");
|
||||
|
@ -514,9 +516,11 @@ PT_THREAD(tsch_tx_slot(struct pt *pt, struct rtimer *t))
|
|||
TSCH_DEBUG_TX_EVENT();
|
||||
NETSTACK_RADIO.off();
|
||||
|
||||
#if TSCH_HW_FRAME_FILTERING
|
||||
/* Leaving promiscuous mode */
|
||||
NETSTACK_RADIO.get_value(RADIO_PARAM_RX_MODE, &radio_rx_mode);
|
||||
NETSTACK_RADIO.set_value(RADIO_PARAM_RX_MODE, radio_rx_mode | RADIO_RX_MODE_ADDRESS_FILTER);
|
||||
#endif /* TSCH_HW_FRAME_FILTERING */
|
||||
|
||||
/* Read ack frame */
|
||||
ack_len = NETSTACK_RADIO.read((void *)ackbuf, sizeof(ackbuf));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue