Contiki 3.x
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
platform
openmote-cc2538
contiki-conf.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2014, OpenMote Technologies, S.L.
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* 3. Neither the name of the Institute nor the names of its contributors
14
* may be used to endorse or promote products derived from this software
15
* without specific prior written permission.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
18
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
21
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27
* SUCH DAMAGE.
28
*
29
* This file is part of the Contiki operating system.
30
*
31
*/
32
/*---------------------------------------------------------------------------*/
33
/**
34
* \addtogroup openmote-cc2538
35
* @{
36
*
37
* \defgroup openmote-cc2538-platforms OpenMote-CC2538 platform
38
*
39
* The OpenMote-CC2538 platform was designed at UC Berkeley in 2013 and
40
* is comercialized by OpenMote Technologies since 2014. It is the first
41
* commercial platform based on the powerful TI CC2538 SoC. It uses a
42
* XBee form-factor to ease prototyping.
43
*
44
* \file
45
* Configuration for the OpenMote-CC2538 platform
46
*/
47
#ifndef CONTIKI_CONF_H_
48
#define CONTIKI_CONF_H_
49
50
#include <stdint.h>
51
#include <string.h>
52
/*---------------------------------------------------------------------------*/
53
/* Include Project Specific conf */
54
#ifdef PROJECT_CONF_H
55
#include PROJECT_CONF_H
56
#endif
/* PROJECT_CONF_H */
57
/*---------------------------------------------------------------------------*/
58
/**
59
* \name Compiler configuration and platform-specific type definitions
60
*
61
* Those values are not meant to be modified by the user
62
* @{
63
*/
64
#define CLOCK_CONF_SECOND 128
65
66
/* Compiler configurations */
67
#define CCIF
68
#define CLIF
69
70
/* Platform typedefs */
71
typedef
uint32_t clock_time_t;
72
typedef
uint32_t uip_stats_t;
73
74
/*
75
* rtimer.h typedefs rtimer_clock_t as unsigned short. We need to define
76
* RTIMER_CLOCK_DIFF to override this
77
*/
78
typedef
uint32_t rtimer_clock_t;
79
#define RTIMER_CLOCK_DIFF(a, b) ((int32_t)((a) - (b)))
80
/** @} */
81
/*---------------------------------------------------------------------------*/
82
/**
83
* \name Serial Boot Loader Backdoor configuration
84
*
85
* @{
86
*/
87
#ifndef FLASH_CCA_CONF_BOOTLDR_BACKDOOR
88
#define FLASH_CCA_CONF_BOOTLDR_BACKDOOR 1
/**<Enable the boot loader backdoor */
89
#endif
90
91
#ifndef FLASH_CCA_CONF_BOOTLDR_BACKDOOR_PORT_A_PIN
92
#define FLASH_CCA_CONF_BOOTLDR_BACKDOOR_PORT_A_PIN 6
/**< Pin PA6 (ON/SLEEP on the OpenBase), activates the boot loader */
93
#endif
94
95
#ifndef FLASH_CCA_CONF_BOOTLDR_BACKDOOR_ACTIVE_HIGH
96
#define FLASH_CCA_CONF_BOOTLDR_BACKDOOR_ACTIVE_HIGH 0
/**< A logic low level activates the boot loader */
97
#endif
98
/** @} */
99
100
/*---------------------------------------------------------------------------*/
101
/**
102
* \name CFS configuration
103
*
104
* @{
105
*/
106
#ifndef COFFEE_CONF_SIZE
107
#define COFFEE_CONF_SIZE (4 * COFFEE_SECTOR_SIZE)
108
#endif
109
/** @} */
110
/*---------------------------------------------------------------------------*/
111
/**
112
* \name Watchdog Timer configuration
113
*
114
* @{
115
*/
116
#ifndef WATCHDOG_CONF_ENABLE
117
#define WATCHDOG_CONF_ENABLE 1
/**< Enable the watchdog timer */
118
#endif
119
/** @} */
120
/*---------------------------------------------------------------------------*/
121
/**
122
* \name USB 'core' configuration
123
*
124
* Those values are not meant to be modified by the user, except where stated
125
* otherwise
126
* @{
127
*/
128
#define CTRL_EP_SIZE 8
129
#define USB_EP1_SIZE 32
130
#define USB_EP2_SIZE 64
131
#define USB_EP3_SIZE 64
132
#define USB_ARCH_WRITE_NOTIFY 0
133
134
#ifndef USB_ARCH_CONF_DMA
135
#define USB_ARCH_CONF_DMA 1
/**< Change to Enable/Disable USB DMA */
136
137
#endif
138
/** @} */
139
/*---------------------------------------------------------------------------*/
140
/**
141
* \name Generic Configuration directives
142
*
143
* @{
144
*/
145
#ifndef ENERGEST_CONF_ON
146
#define ENERGEST_CONF_ON 0
/**< Energest Module */
147
#endif
148
149
#ifndef STARTUP_CONF_VERBOSE
150
#define STARTUP_CONF_VERBOSE 1
/**< Set to 0 to decrease startup verbosity */
151
#endif
152
/** @} */
153
/*---------------------------------------------------------------------------*/
154
/**
155
* \name uDMA Configuration and channel allocations
156
*
157
* @{
158
*/
159
#define USB_ARCH_CONF_RX_DMA_CHAN 0
/**< USB -> RAM DMA channel */
160
#define USB_ARCH_CONF_TX_DMA_CHAN 1
/**< RAM -> USB DMA channel */
161
#define CC2538_RF_CONF_TX_DMA_CHAN 2
/**< RF -> RAM DMA channel */
162
#define CC2538_RF_CONF_RX_DMA_CHAN 3
/**< RAM -> RF DMA channel */
163
#define UDMA_CONF_MAX_CHANNEL CC2538_RF_CONF_RX_DMA_CHAN
164
/** @} */
165
/*---------------------------------------------------------------------------*/
166
/**
167
* \name Character I/O Configuration
168
*
169
* @{
170
*/
171
#ifndef UART_CONF_ENABLE
172
#define UART_CONF_ENABLE 1
/**< Enable/Disable UART I/O */
173
#endif
174
175
#ifndef UART0_CONF_BAUD_RATE
176
#define UART0_CONF_BAUD_RATE 115200
/**< Default UART0 baud rate */
177
#endif
178
179
#ifndef UART1_CONF_BAUD_RATE
180
#define UART1_CONF_BAUD_RATE 115200
/**< Default UART1 baud rate */
181
#endif
182
183
#ifndef SLIP_ARCH_CONF_USB
184
#define SLIP_ARCH_CONF_USB 0
/**< SLIP over UART by default */
185
#endif
186
187
#ifndef CC2538_RF_CONF_SNIFFER_USB
188
#define CC2538_RF_CONF_SNIFFER_USB 0
/**< Sniffer out over UART by default */
189
#endif
190
191
#ifndef DBG_CONF_USB
192
#define DBG_CONF_USB 0
/**< All debugging over UART by default */
193
#endif
194
195
#ifndef SERIAL_LINE_CONF_UART
196
#define SERIAL_LINE_CONF_UART 0
/**< UART to use with serial line */
197
#endif
198
199
#if !SLIP_ARCH_CONF_USB
200
#ifndef SLIP_ARCH_CONF_UART
201
#define SLIP_ARCH_CONF_UART 0
/**< UART to use with SLIP */
202
#endif
203
#endif
204
205
#if !CC2538_RF_CONF_SNIFFER_USB
206
#ifndef CC2538_RF_CONF_SNIFFER_UART
207
#define CC2538_RF_CONF_SNIFFER_UART 0
/**< UART to use with sniffer */
208
#endif
209
#endif
210
211
#if !DBG_CONF_USB
212
#ifndef DBG_CONF_UART
213
#define DBG_CONF_UART 0
/**< UART to use for debugging */
214
#endif
215
#endif
216
217
#ifndef UART1_CONF_UART
218
#define UART1_CONF_UART 0
/**< UART to use for examples relying on
219
the uart1_* API */
220
#endif
221
222
/* Turn off example-provided putchars */
223
#define SLIP_BRIDGE_CONF_NO_PUTCHAR 1
224
#define SLIP_RADIO_CONF_NO_PUTCHAR 1
225
226
#ifndef SLIP_ARCH_CONF_ENABLED
227
/*
228
* Determine whether we need SLIP
229
* This will keep working while UIP_FALLBACK_INTERFACE and CMD_CONF_OUTPUT
230
* keep using SLIP
231
*/
232
#if defined(UIP_FALLBACK_INTERFACE) || defined(CMD_CONF_OUTPUT)
233
#define SLIP_ARCH_CONF_ENABLED 1
234
#endif
235
#endif
236
237
/*
238
* When set, the radio turns off address filtering and sends all captured
239
* frames down a peripheral (UART or USB, depending on the value of
240
* CC2538_RF_CONF_SNIFFER_USB)
241
*/
242
#ifndef CC2538_RF_CONF_SNIFFER
243
#define CC2538_RF_CONF_SNIFFER 0
244
#endif
245
246
/**
247
* \brief Define this as 1 to build a headless node.
248
*
249
* The UART will not be initialised its clock will be gated, offering some
250
* energy savings. The USB will not be initialised either
251
*/
252
#ifndef CC2538_CONF_QUIET
253
#define CC2538_CONF_QUIET 0
254
#endif
255
256
/* CC2538_CONF_QUIET is hard and overrides all other related defines */
257
#if CC2538_CONF_QUIET
258
#undef USB_SERIAL_CONF_ENABLE
259
#define USB_SERIAL_CONF_ENABLE 0
260
261
#undef UART_CONF_ENABLE
262
#define UART_CONF_ENABLE 0
263
264
#undef STARTUP_CONF_VERBOSE
265
#define STARTUP_CONF_VERBOSE 0
266
267
/* Little sanity check: We can't have quiet sniffers */
268
#if CC2538_RF_CONF_SNIFFER
269
#error "CC2538_RF_CONF_SNIFFER == 1 and CC2538_CONF_QUIET == 1"
270
#error "These values are conflicting. Please set either to 0"
271
#endif
272
#endif
/* CC2538_CONF_QUIET */
273
274
/**
275
* \brief Enable the USB core only if we need it
276
*/
277
#ifndef USB_SERIAL_CONF_ENABLE
278
#define USB_SERIAL_CONF_ENABLE \
279
((SLIP_ARCH_CONF_USB & SLIP_ARCH_CONF_ENABLED) | \
280
DBG_CONF_USB | \
281
(CC2538_RF_CONF_SNIFFER & CC2538_RF_CONF_SNIFFER_USB))
282
#endif
283
284
/*
285
* If debugging and SLIP use the same peripheral, this will be 1. Don't modify
286
* this
287
*/
288
#if SLIP_ARCH_CONF_ENABLED
289
#define DBG_CONF_SLIP_MUX (SLIP_ARCH_CONF_USB == DBG_CONF_USB && \
290
(SLIP_ARCH_CONF_USB || \
291
SLIP_ARCH_CONF_UART == DBG_CONF_UART))
292
#endif
293
294
/*
295
* Automatic detection of whether a specific UART is in use
296
*/
297
#define UART_IN_USE_BY_SERIAL_LINE(u) (SERIAL_LINE_CONF_UART == (u))
298
#define UART_IN_USE_BY_SLIP(u) (SLIP_ARCH_CONF_ENABLED && \
299
!SLIP_ARCH_CONF_USB && \
300
SLIP_ARCH_CONF_UART == (u))
301
#define UART_IN_USE_BY_RF_SNIFFER(u) (CC2538_RF_CONF_SNIFFER && \
302
!CC2538_RF_CONF_SNIFFER_USB && \
303
CC2538_RF_CONF_SNIFFER_UART == (u))
304
#define UART_IN_USE_BY_DBG(u) (!DBG_CONF_USB && DBG_CONF_UART == (u))
305
#define UART_IN_USE_BY_UART1(u) (UART1_CONF_UART == (u))
306
307
#define UART_IN_USE(u) ( \
308
UART_CONF_ENABLE && \
309
(UART_IN_USE_BY_SERIAL_LINE(u) || \
310
UART_IN_USE_BY_SLIP(u) || \
311
UART_IN_USE_BY_RF_SNIFFER(u) || \
312
UART_IN_USE_BY_DBG(u) || \
313
UART_IN_USE_BY_UART1(u)) \
314
)
315
/** @} */
316
/*---------------------------------------------------------------------------*/
317
/* board.h assumes that basic configuration is done */
318
#include "
board.h
"
319
/*---------------------------------------------------------------------------*/
320
/**
321
* \name Network Stack Configuration
322
*
323
* @{
324
*/
325
#ifndef NETSTACK_CONF_NETWORK
326
#if NETSTACK_CONF_WITH_IPV6
327
#define NETSTACK_CONF_NETWORK sicslowpan_driver
328
#else
329
#define NETSTACK_CONF_NETWORK rime_driver
330
#endif
/* NETSTACK_CONF_WITH_IPV6 */
331
#endif
/* NETSTACK_CONF_NETWORK */
332
333
#ifndef NETSTACK_CONF_MAC
334
#define NETSTACK_CONF_MAC csma_driver
335
#endif
336
337
#ifndef NETSTACK_CONF_RDC
338
#define NETSTACK_CONF_RDC contikimac_driver
339
#endif
340
341
/* Configure NullRDC for when it's selected */
342
#define NULLRDC_802154_AUTOACK 1
343
#define NULLRDC_802154_AUTOACK_HW 1
344
345
/* Configure ContikiMAC for when it's selected */
346
#define CONTIKIMAC_CONF_WITH_PHASE_OPTIMIZATION 0
347
#define WITH_FAST_SLEEP 1
348
349
#ifndef NETSTACK_CONF_RDC_CHANNEL_CHECK_RATE
350
#define NETSTACK_CONF_RDC_CHANNEL_CHECK_RATE 8
351
#endif
352
353
#ifndef NETSTACK_CONF_FRAMER
354
#if NETSTACK_CONF_WITH_IPV6
355
#define NETSTACK_CONF_FRAMER framer_802154
356
#else
/* NETSTACK_CONF_WITH_IPV6 */
357
#define NETSTACK_CONF_FRAMER contikimac_framer
358
#endif
/* NETSTACK_CONF_WITH_IPV6 */
359
#endif
/* NETSTACK_CONF_FRAMER */
360
361
#ifndef NETSTACK_CONF_RADIO
362
#define NETSTACK_CONF_RADIO cc2538_rf_driver
363
#endif
364
365
/** @} */
366
/*---------------------------------------------------------------------------*/
367
/**
368
* \name LPM configuration
369
* @{
370
*/
371
#ifndef LPM_CONF_ENABLE
372
#define LPM_CONF_ENABLE 1
/**< Set to 0 to disable LPM entirely */
373
#endif
374
375
/**
376
* \brief Maximum PM
377
*
378
* The SoC will never drop to a Power Mode deeper than the one specified here.
379
* 0 for PM0, 1 for PM1 and 2 for PM2
380
*/
381
#ifndef LPM_CONF_MAX_PM
382
#define LPM_CONF_MAX_PM 1
383
#endif
384
385
#ifndef LPM_CONF_STATS
386
#define LPM_CONF_STATS 0
/**< Set to 1 to enable LPM-related stats */
387
#endif
388
/** @} */
389
/*---------------------------------------------------------------------------*/
390
/**
391
* \name IEEE address configuration
392
*
393
* Used to generate our RIME & IPv6 address
394
* @{
395
*/
396
/**
397
* \brief Location of the IEEE address
398
* 0 => Read from InfoPage,
399
* 1 => Use a hardcoded address, configured by IEEE_ADDR_CONF_ADDRESS
400
*/
401
#ifndef IEEE_ADDR_CONF_HARDCODED
402
#define IEEE_ADDR_CONF_HARDCODED 0
403
#endif
404
405
/**
406
* \brief The hardcoded IEEE address to be used when IEEE_ADDR_CONF_HARDCODED
407
* is defined as 1
408
*/
409
#ifndef IEEE_ADDR_CONF_ADDRESS
410
#define IEEE_ADDR_CONF_ADDRESS { 0x00, 0x12, 0x4B, 0x00, 0x89, 0xAB, 0xCD, 0xEF }
411
#endif
412
413
/**
414
* \brief Location of the IEEE address in the InfoPage when
415
* IEEE_ADDR_CONF_HARDCODED is defined as 0
416
* 0 => Use the primary address location
417
* 1 => Use the secondary address location
418
*/
419
#ifndef IEEE_ADDR_CONF_USE_SECONDARY_LOCATION
420
#define IEEE_ADDR_CONF_USE_SECONDARY_LOCATION 0
421
#endif
422
/** @} */
423
/*---------------------------------------------------------------------------*/
424
/**
425
* \name RF configuration
426
*
427
* @{
428
*/
429
/* RF Config */
430
#ifndef IEEE802154_CONF_PANID
431
#define IEEE802154_CONF_PANID 0xABCD
432
#endif
433
434
#ifndef CC2538_RF_CONF_CHANNEL
435
#define CC2538_RF_CONF_CHANNEL 26
436
#endif
/* CC2538_RF_CONF_CHANNEL */
437
438
#ifndef CC2538_RF_CONF_AUTOACK
439
#define CC2538_RF_CONF_AUTOACK 1
/**< RF H/W generates ACKs */
440
#endif
/* CC2538_CONF_AUTOACK */
441
442
#ifndef CC2538_RF_CONF_TX_USE_DMA
443
#define CC2538_RF_CONF_TX_USE_DMA 1
/**< RF TX over DMA */
444
#endif
445
446
#ifndef CC2538_RF_CONF_RX_USE_DMA
447
#define CC2538_RF_CONF_RX_USE_DMA 1
/**< RF RX over DMA */
448
#endif
449
/** @} */
450
/*---------------------------------------------------------------------------*/
451
/**
452
* \name IPv6, RIME and network buffer configuration
453
*
454
* @{
455
*/
456
457
/* Don't let contiki-default-conf.h decide if we are an IPv6 build */
458
#ifndef NETSTACK_CONF_WITH_IPV6
459
#define NETSTACK_CONF_WITH_IPV6 0
460
#endif
461
462
#if NETSTACK_CONF_WITH_IPV6
463
/* Addresses, Sizes and Interfaces */
464
/* 8-byte addresses here, 2 otherwise */
465
#define LINKADDR_CONF_SIZE 8
466
#define UIP_CONF_LL_802154 1
467
#define UIP_CONF_LLH_LEN 0
468
#define UIP_CONF_NETIF_MAX_ADDRESSES 3
469
470
/* TCP, UDP, ICMP */
471
#ifndef UIP_CONF_TCP
472
#define UIP_CONF_TCP 1
473
#endif
474
#ifndef UIP_CONF_TCP_MSS
475
#define UIP_CONF_TCP_MSS 64
476
#endif
477
#define UIP_CONF_UDP 1
478
#define UIP_CONF_UDP_CHECKSUMS 1
479
#define UIP_CONF_ICMP6 1
480
481
/* ND and Routing */
482
#ifndef UIP_CONF_ROUTER
483
#define UIP_CONF_ROUTER 1
484
#endif
485
486
#define UIP_CONF_ND6_SEND_RA 0
487
#define UIP_CONF_IP_FORWARD 0
488
#define RPL_CONF_STATS 0
489
490
#ifndef RPL_CONF_OF
491
#define RPL_CONF_OF rpl_mrhof
492
#endif
493
494
#define UIP_CONF_ND6_REACHABLE_TIME 600000
495
#define UIP_CONF_ND6_RETRANS_TIMER 10000
496
497
#ifndef NBR_TABLE_CONF_MAX_NEIGHBORS
498
#define NBR_TABLE_CONF_MAX_NEIGHBORS 20
499
#endif
500
#ifndef UIP_CONF_MAX_ROUTES
501
#define UIP_CONF_MAX_ROUTES 20
502
#endif
503
504
/* uIP */
505
#ifndef UIP_CONF_BUFFER_SIZE
506
#define UIP_CONF_BUFFER_SIZE 1300
507
#endif
508
509
#define UIP_CONF_IPV6_QUEUE_PKT 0
510
#define UIP_CONF_IPV6_CHECKS 1
511
#define UIP_CONF_IPV6_REASSEMBLY 0
512
#define UIP_CONF_MAX_LISTENPORTS 8
513
514
/* 6lowpan */
515
#define SICSLOWPAN_CONF_COMPRESSION SICSLOWPAN_COMPRESSION_HC06
516
#ifndef SICSLOWPAN_CONF_COMPRESSION_THRESHOLD
517
#define SICSLOWPAN_CONF_COMPRESSION_THRESHOLD 63
518
#endif
519
#ifndef SICSLOWPAN_CONF_FRAG
520
#define SICSLOWPAN_CONF_FRAG 1
521
#endif
522
#define SICSLOWPAN_CONF_MAXAGE 8
523
524
/* Define our IPv6 prefixes/contexts here */
525
#define SICSLOWPAN_CONF_MAX_ADDR_CONTEXTS 1
526
#ifndef SICSLOWPAN_CONF_ADDR_CONTEXT_0
527
#define SICSLOWPAN_CONF_ADDR_CONTEXT_0 { \
528
addr_contexts[0].prefix[0] = UIP_DS6_DEFAULT_PREFIX_0; \
529
addr_contexts[0].prefix[1] = UIP_DS6_DEFAULT_PREFIX_1; \
530
}
531
#endif
532
533
#define MAC_CONF_CHANNEL_CHECK_RATE 8
534
535
#ifndef QUEUEBUF_CONF_NUM
536
#define QUEUEBUF_CONF_NUM 8
537
#endif
538
/*---------------------------------------------------------------------------*/
539
#else
/* NETSTACK_CONF_WITH_IPV6 */
540
/* Network setup for non-IPv6 (rime). */
541
#define UIP_CONF_IP_FORWARD 1
542
543
#ifndef UIP_CONF_BUFFER_SIZE
544
#define UIP_CONF_BUFFER_SIZE 108
545
#endif
546
547
#define RIME_CONF_NO_POLITE_ANNOUCEMENTS 0
548
549
#ifndef QUEUEBUF_CONF_NUM
550
#define QUEUEBUF_CONF_NUM 8
551
#endif
552
553
#endif
/* NETSTACK_CONF_WITH_IPV6 */
554
/** @} */
555
/*---------------------------------------------------------------------------*/
556
/**
557
* \name Security
558
*
559
* @{
560
*/
561
#ifndef CRYPTO_CONF_INIT
562
#define CRYPTO_CONF_INIT 1
/**< Whether to init cryptoprocessor */
563
#endif
564
565
#ifndef AES_128_CONF
566
#define AES_128_CONF cc2538_aes_128_driver
/**< AES-128 driver */
567
#endif
568
569
#ifndef CCM_STAR_CONF
570
#define CCM_STAR_CONF cc2538_ccm_star_driver
/**< AES-CCM* driver */
571
#endif
572
573
/*---------------------------------------------------------------------------*/
574
#endif
/* CONTIKI_CONF_H_ */
575
/*---------------------------------------------------------------------------*/
576
/**
577
* @}
578
* @}
579
*/
board.h
This file provides connectivity information on LEDs, Buttons, UART and other OpenMote-CC2538 peripher...
Generated on Thu Jul 6 2017 20:52:51 for Contiki 3.x by
1.8.6