SlideShare uma empresa Scribd logo
1 de 70
Building Connected Devices
With Thingsquare and Contiki
Day 2
Yesterday
• Learned about how to prototype apps
• Learned about the high-level operation of
the protocols
• Got a bit of background
Today
• Deep-dive into the protocols
• More information about Contiki
Contiki
Contiki: an IoT OS
• Helps application programs
– Processes and concurrency
– Timers
– Memory management
– Networking
– Device drivers
Timers
Time in Contiki
• Two system clocks in Contiki
– Coarse-grained, most often 128 Hz
• CLOCK_SECOND

– Fine-grained, most often 32768 Hz
• RTIMER_SECOND

– Platform dependent
– Power of two for simple math
Timers
• struct timer – coarse
– Passive timer, only keeps track of its expiration
time

• struct etimer – coarse
– Active timer, sends an event when it expires

• struct ctimer – coarse
– Active timer, calls a function when it expires

• struct rtimer – fine
– Real-time timer, calls a function at an exact time
Etimer
• Periodically print the time
static struct etimer etim;
PROCESS_THREAD(my_process, ev, data) {
PROCESS_BEGIN();
while(1) {
printf(”Uptime (seconds): %lun", clock_seconds());
etimer_set(&etim, CLOCK_SECOND);
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&etim));
}
PROCESS_END();
}
Ctimer
• Print ”Hello, callback” after 1/8 second.
static struct ctimer callback_timer;
static void
callback(void *data)
{
printf("%sn", (char *) data);
}
void
application(void)
{
ctimer_set(&callback_timer, CLOCK_SECOND / 8, callback,
"Hello, callback!");
return 0;
}
Rtimer
• Sets a hardware interrupt at set time
• Invokes a callback
static struct rtimer rt;
rtimer_set(&rt, /* pointer to rtimer struct */
RTIMER_NOW() + RTIMER_SECOND/100, /* 10ms */
1,
/* duration */
rt_callback, /* callback pointer */
NULL);
/* pointer to data */
Rtimer
• Rtimer callback
static void
rt_callback(struct rtimer *rt, void *data)
{
printf(”callback!n");
}
Hands-on: blink.c
• See the blink.c example on the
Thingsquare cloud
• Uses etimer to blink LEDs
• Note the use of etimer_reset() to provide a
stable timer
Processes and events
Programming concept:
Multithreading
• Threads are given a timeslot to execute
• Paused / continued later by OS scheduler
if not done
• Costly – stack space (RAM), CPU
Programming concept:
Event driven / state machine
• Reactive - events control program flow
– Timers, hardware interrupts, radio, etc

• More kind on resources
• However, callbacks and state variables
makes programming harder
Event driven / state machine
State
machine
• What state?
What event?
Conditions,
transitions,
headaches.
• Event driven is kinder on hw resources..
• Multithreaded is kinder on the programmer..
- can their strengths be combined?
Programming concept:
Protothreads
• Threading without the overhead
– RAM is limited, threads use too much RAM

• Protothreads are event-driven but with a
threaded programming style
• Cooperative scheduling
C-switch expansion
int a_protothread(struct pt *pt) {
PT_BEGIN(pt);

int a_protothread(struct pt *pt) {
switch(pt->lc) { case 0:

PT_WAIT_UNTIL(pt, condition1);

pt->lc = 5; case 5:
if(!condition1) return 0;

if(something) {

if(something) {

PT_WAIT_UNTIL(pt, condition2);

pt->lc = 10; case 10:
if(!condition2) return 0;

}
PT_END(pt);
}

}

Line numbers

}

} return 1;
Six-line implementation
• C compiler pre-processor replaces with switch-case
• very efficient
struct pt { unsigned short lc; };

#define PT_INIT(pt)

pt->lc = 0

#define PT_BEGIN(pt)

switch(pt->lc) { case 0:

#define PT_EXIT(pt)

pt->lc = 0; return 2

#define PT_WAIT_UNTIL(pt, c)

pt->lc = __LINE__; case __LINE__: 
if(!(c)) return 0

#define PT_END(pt)

} pt->lc = 0; return 1
Protothread limitations
• Automatic variables not stored across a
blocking wait
– Workaround: use static local variables instead

• Constraints on the use of switch()
constructs in programs
– Workaround: don’t use switches
Contiki processes
• Contiki processes are very lightweight
– Execution is event-driven
– Can receive events from other processes
– Must not block in busy-wait loop
• while(1) will crash the device

• Contiki processes are protothreads
Contiki processes
#include "contiki.h"
/*---------------------------------------------------*/
PROCESS(hello_world_process, "Hello world process");
AUTOSTART_PROCESSES(&hello_world_process);
/*---------------------------------------------------*/
PROCESS_THREAD(hello_world_process, ev, data)
{
PROCESS_BEGIN();
printf("Hello, worldn");
PROCESS_END();
}
Contiki events
• How to wait for an event
PROCESS_THREAD(first_process, ev, data)
.. ..
PROCESS_WAIT_EVENT_UNTIL(ev == servo_event);
if(data != NULL) {
handle_servo((struct servo_data *) data);
}

• ev contains the event number
• data is a void* to any data
– Can be NULL
Hands-on: blink.c
• See how PROCESS_BEGIN(),
PROCESS_END(),
PROCESS_WAIT_UNTIL() are used
Starvation in Contiki
• Thread scheduling is cooperative
– play nice

• The watchdog is on
– on some platforms unable to turn off

• Don’t hog the CPU
• Long-running, do
– watchdog_periodic();
– PROCESS_WAIT();
Memory management
Contiki memb
struct user_struct {
int a, b;
}
MEMB(block, 10, struct user_struct);
m = memb_alloc(&block);
memb_free(&block, m);
Lists
LIST(a_list);

list_add(a_list, an_element);
an_element = list_pop(a_list):
Networking
Contiki netstacks
• Three network stacks
– IPv6
– IPv4
– Rime
The Contiki netstack
• Four layers
– Network layer

Application
Transport

Network, routing
Adaptation

– MAC layer
– RDC layer
– Radio layer

MAC
Duty cycling
Radio
The Contiki IPv6 netstack
websocket.c, httpsocket.c, coap.c

Application

udp-socket.c, tcpsocket.c

Transport

uip6.c, rpl.c

Network, routing

sicslowpan.c

Adaptation

csma.c

MAC

nullrdc.c, contikimac.c

Duty cycling

cc2538-rf.c

Radio
New Contiki 3.x APIs
• UDP socket
– Send and receive data with UDP
– Callback-based

• TCP socket
– Listen for new connections (server)
– Set up new connections (client)
– Send and receive data
– Callback-based
UDP socket API
int udp_socket_register(struct udp_socket *c,
void *ptr,
udp_socket_input_callback_t receive_callback);
int udp_socket_bind(struct udp_socket *c,
uint16_t local_port);
int udp_socket_connect(struct udp_socket *c,
uip_ipaddr_t *remote_addr,
uint16_t remote_port);
int udp_socket_send(struct udp_socket *c,
const void *data, uint16_t datalen);
int udp_socket_sendto(struct udp_socket *c,
const void *data, uint16_t datalen,
const uip_ipaddr_t *addr, uint16_t port);
UDP socket API
• Connected sockets: only receive data from
the specified host/port
• Receiving data is simple
– Get a pointer along with the callback

• Sending data is simple
– For connected sockets: to the connected
host/port
– Send to any host/port
TCP socket API
• TCP significantly trickier than UDP
– Connections
– Retransmissions
– Buffers
TCP socket API
void tcp_socket_register(struct tcp_socket *s, void *ptr,
uint8_t *input_databuf, int input_databuf_len,
uint8_t *output_databuf, int output_databuf_len,
tcp_socket_input_callback_t input_callback,
tcp_socket_event_callback_t event_callback);
int tcp_socket_connect(struct tcp_socket *s,
uip_ipaddr_t *ipaddr,
uint16_t port);
int tcp_socket_listen(struct tcp_socket *s,
uint16_t port);
int tcp_socket_unlisten(struct tcp_socket *s);

int tcp_socket_send(struct tcp_socket *s,
const uint8_t *dataptr,
int datalen);
int tcp_socket_send_str(struct tcp_socket *s,
const char *strptr);
int tcp_socket_close(struct tcp_socket *s);
TCP socket API
• Caller must provide input and output
buffers
– The caller knows how much data it is going to
be sending and receiving

• Sending data is easy
– Just call the send function

• Receiving data is trickier
– Data may be retained in the buffer
Contiki directories and toolchains
The Contiki directory structure
•

apps/
– Contiki applications

•

core/
– Contiki core code

•

cpu/
– Contiki CPU-specific code

•

doc/
– Contiki documentation

•

examples/
– Contiki examples

•

platform/
– Contiki platform code

•

regression-tests/
– Contiki regression tests

•

tools/
– Contiki tools
Contiki 3.x directories
• dev/
– Device drivers

• More fine-grained control through modules
– New subdirectories under sys/net/
A project directory
• examples/hello-world
– Makefile
• Contains the top-level rules to build the project

– project-conf.h
• Project configuration
• Optional – must be explicitly enabled by Makefile

– hello-world.c
• Project source code file
Toolchain Installation
• Embedded compiler toolchains with built-in
IDE
– IAR

• Gcc
– Compiler
– Linker
– Use external editor (Eclipse, Emacs, vi, …)
Instant Contiki
• Full toolchain installation in a Linux VM
• Runs in VMware Player
• Compile in Instant Contiki, run on the
hardware
Building firmware images
• Use C compiler to compile the full Contiki
source code
• Compile in a project directory
• Need to change something? Re-compile
Contiki firmware images
• In a terminal, go to the project directory

make TARGET=platform file
• This will build the full source code tree for
your project. Eg,
make TARGET=cc2538dk hello-world
Configuration
• Two layers of configuration
– Platform level
• Buffer sizes, radio drivers, etc

– Project level
• RDC mechanisms

• Don’t touch the platform configuration
• Do touch the project configuration
Uploading the firmware
• Some platforms have a convenient way to
upload the firmware
make TARGET=sky hello-world.upload

• Some platforms are significantly trickier
Save target
• If you are using the same target a lot,
make TARGET=cc2538dk savetarget

• Then, simply
make blink.upload
Running as the native target
• Sometimes using the native target is
useful
make TARGET=native hello-world

• Run the program
./hello-world.native
Other commands
• Connect to serial port
make TARGET=exp5438 login
make TARGET=exp5438 COMPORT=COM12 login

• Clean out previous compilation
make TARGET=exp5438 clean

• List available commands
make TARGET=exp5438 help
Cooja
The Cooja Simulator
• Emulation mode
– Run exact same firmware images as run on
hardware
– Slower, more exact

• Native mode
– Run the Contiki code, compiled for the native
system
– Faster, can run (much) larger systems
Building the Internet of Things with Thingsquare and Contiki - day 2 part 1
Running Cooja
• Go to the Cooja directory
– cd tools/cooja
– ant run
Building the Internet of Things with Thingsquare and Contiki - day 2 part 1
Building the Internet of Things with Thingsquare and Contiki - day 2 part 1
Building the Internet of Things with Thingsquare and Contiki - day 2 part 1
Building the Internet of Things with Thingsquare and Contiki - day 2 part 1
Building the Internet of Things with Thingsquare and Contiki - day 2 part 1
Building the Internet of Things with Thingsquare and Contiki - day 2 part 1
Building the Internet of Things with Thingsquare and Contiki - day 2 part 1
Building the Internet of Things with Thingsquare and Contiki - day 2 part 1
Building the Internet of Things with Thingsquare and Contiki - day 2 part 1
Building the Internet of Things with Thingsquare and Contiki - day 2 part 1
The Contiki regression tests
• A great resource for seeing Cooja
simulation setups
• contiki/regression-tests/
More

http://thingsquare.com

Mais conteúdo relacionado

Mais procurados

Automation with ansible
Automation with ansibleAutomation with ansible
Automation with ansibleKhizer Naeem
 
WUG Days 2022 Brno - Networking in .NET 7.0 and YARP -- Karel Zikmund
WUG Days 2022 Brno - Networking in .NET 7.0 and YARP -- Karel ZikmundWUG Days 2022 Brno - Networking in .NET 7.0 and YARP -- Karel Zikmund
WUG Days 2022 Brno - Networking in .NET 7.0 and YARP -- Karel ZikmundKarel Zikmund
 
Linux cgroups and namespaces
Linux cgroups and namespacesLinux cgroups and namespaces
Linux cgroups and namespacesLocaweb
 
A whirlwind tour of the LLVM optimizer
A whirlwind tour of the LLVM optimizerA whirlwind tour of the LLVM optimizer
A whirlwind tour of the LLVM optimizerNikita Popov
 
Geep networking stack-linuxkernel
Geep networking stack-linuxkernelGeep networking stack-linuxkernel
Geep networking stack-linuxkernelKiran Divekar
 
Troubleshooting and Best Practices with WSO2 Enterprise Integrator
Troubleshooting and Best Practices with WSO2 Enterprise IntegratorTroubleshooting and Best Practices with WSO2 Enterprise Integrator
Troubleshooting and Best Practices with WSO2 Enterprise IntegratorWSO2
 
HTTP2 and gRPC
HTTP2 and gRPCHTTP2 and gRPC
HTTP2 and gRPCGuo Jing
 
Linux Basics Knowlage sharing.pptx
Linux Basics Knowlage sharing.pptxLinux Basics Knowlage sharing.pptx
Linux Basics Knowlage sharing.pptxbemnitekalegn
 
Install Redis on Oracle Linux
Install Redis on Oracle LinuxInstall Redis on Oracle Linux
Install Redis on Oracle LinuxJohan Louwers
 
EBPF and Linux Networking
EBPF and Linux NetworkingEBPF and Linux Networking
EBPF and Linux NetworkingPLUMgrid
 
Velocity 2015 linux perf tools
Velocity 2015 linux perf toolsVelocity 2015 linux perf tools
Velocity 2015 linux perf toolsBrendan Gregg
 
Linux User Space Debugging & Profiling
Linux User Space Debugging & ProfilingLinux User Space Debugging & Profiling
Linux User Space Debugging & ProfilingAnil Kumar Pugalia
 
PowerShell 101
PowerShell 101PowerShell 101
PowerShell 101Thomas Lee
 
Xen in Safety-Critical Systems - Critical Summit 2022
Xen in Safety-Critical Systems - Critical Summit 2022Xen in Safety-Critical Systems - Critical Summit 2022
Xen in Safety-Critical Systems - Critical Summit 2022Stefano Stabellini
 
QEMU - Binary Translation
QEMU - Binary Translation QEMU - Binary Translation
QEMU - Binary Translation Jiann-Fuh Liaw
 

Mais procurados (20)

HTTP/3
HTTP/3HTTP/3
HTTP/3
 
Basic Linux Internals
Basic Linux InternalsBasic Linux Internals
Basic Linux Internals
 
Introduction to Ubuntu
Introduction to UbuntuIntroduction to Ubuntu
Introduction to Ubuntu
 
Making Linux do Hard Real-time
Making Linux do Hard Real-timeMaking Linux do Hard Real-time
Making Linux do Hard Real-time
 
Automation with ansible
Automation with ansibleAutomation with ansible
Automation with ansible
 
WUG Days 2022 Brno - Networking in .NET 7.0 and YARP -- Karel Zikmund
WUG Days 2022 Brno - Networking in .NET 7.0 and YARP -- Karel ZikmundWUG Days 2022 Brno - Networking in .NET 7.0 and YARP -- Karel Zikmund
WUG Days 2022 Brno - Networking in .NET 7.0 and YARP -- Karel Zikmund
 
Linux cgroups and namespaces
Linux cgroups and namespacesLinux cgroups and namespaces
Linux cgroups and namespaces
 
A whirlwind tour of the LLVM optimizer
A whirlwind tour of the LLVM optimizerA whirlwind tour of the LLVM optimizer
A whirlwind tour of the LLVM optimizer
 
Geep networking stack-linuxkernel
Geep networking stack-linuxkernelGeep networking stack-linuxkernel
Geep networking stack-linuxkernel
 
Troubleshooting and Best Practices with WSO2 Enterprise Integrator
Troubleshooting and Best Practices with WSO2 Enterprise IntegratorTroubleshooting and Best Practices with WSO2 Enterprise Integrator
Troubleshooting and Best Practices with WSO2 Enterprise Integrator
 
HTTP2 and gRPC
HTTP2 and gRPCHTTP2 and gRPC
HTTP2 and gRPC
 
Linux Basics Knowlage sharing.pptx
Linux Basics Knowlage sharing.pptxLinux Basics Knowlage sharing.pptx
Linux Basics Knowlage sharing.pptx
 
Understanding DPDK
Understanding DPDKUnderstanding DPDK
Understanding DPDK
 
Install Redis on Oracle Linux
Install Redis on Oracle LinuxInstall Redis on Oracle Linux
Install Redis on Oracle Linux
 
EBPF and Linux Networking
EBPF and Linux NetworkingEBPF and Linux Networking
EBPF and Linux Networking
 
Velocity 2015 linux perf tools
Velocity 2015 linux perf toolsVelocity 2015 linux perf tools
Velocity 2015 linux perf tools
 
Linux User Space Debugging & Profiling
Linux User Space Debugging & ProfilingLinux User Space Debugging & Profiling
Linux User Space Debugging & Profiling
 
PowerShell 101
PowerShell 101PowerShell 101
PowerShell 101
 
Xen in Safety-Critical Systems - Critical Summit 2022
Xen in Safety-Critical Systems - Critical Summit 2022Xen in Safety-Critical Systems - Critical Summit 2022
Xen in Safety-Critical Systems - Critical Summit 2022
 
QEMU - Binary Translation
QEMU - Binary Translation QEMU - Binary Translation
QEMU - Binary Translation
 

Destaque

Building the Internet of Things with Thingsquare and Contiki - day 1, part 2
Building the Internet of Things with Thingsquare and Contiki - day 1, part 2Building the Internet of Things with Thingsquare and Contiki - day 1, part 2
Building the Internet of Things with Thingsquare and Contiki - day 1, part 2Adam Dunkels
 
Building day 2 upload Building the Internet of Things with Thingsquare and ...
Building day 2   upload Building the Internet of Things with Thingsquare and ...Building day 2   upload Building the Internet of Things with Thingsquare and ...
Building day 2 upload Building the Internet of Things with Thingsquare and ...Adam Dunkels
 
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...Advanced Internet of Things firmware engineering with Thingsquare and Contiki...
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...Adam Dunkels
 
Building the Internet of Things with Thingsquare and Contiki - day 1, part 3
Building the Internet of Things with Thingsquare and Contiki - day 1, part 3Building the Internet of Things with Thingsquare and Contiki - day 1, part 3
Building the Internet of Things with Thingsquare and Contiki - day 1, part 3Adam Dunkels
 
Building the Internet of Things with Thingsquare and Contiki - day 1, part 1
Building the Internet of Things with Thingsquare and Contiki - day 1, part 1Building the Internet of Things with Thingsquare and Contiki - day 1, part 1
Building the Internet of Things with Thingsquare and Contiki - day 1, part 1Adam Dunkels
 
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...Advanced Internet of Things firmware engineering with Thingsquare and Contiki...
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...Adam Dunkels
 
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...Advanced Internet of Things firmware engineering with Thingsquare and Contiki...
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...Adam Dunkels
 
Building the Internet of Things with Thingsquare and Contiki - day 2 part 2
Building the Internet of Things with Thingsquare and Contiki - day 2 part 2Building the Internet of Things with Thingsquare and Contiki - day 2 part 2
Building the Internet of Things with Thingsquare and Contiki - day 2 part 2Adam Dunkels
 
Contiki Operating system tutorial
Contiki Operating system tutorialContiki Operating system tutorial
Contiki Operating system tutorialSalah Amean
 
Contiki introduction I.
Contiki introduction I.Contiki introduction I.
Contiki introduction I.Dingxin Xu
 
Contiki os timer tutorial
Contiki os timer tutorialContiki os timer tutorial
Contiki os timer tutorialSalah Amean
 
Margary- Comitato Infomobilità
Margary- Comitato InfomobilitàMargary- Comitato Infomobilità
Margary- Comitato InfomobilitàGoWireless
 
Pigni Wlan 2009
Pigni Wlan 2009Pigni Wlan 2009
Pigni Wlan 2009GoWireless
 
CTS Matera - America e caraibi
CTS Matera - America e caraibiCTS Matera - America e caraibi
CTS Matera - America e caraibiGianni Sarra
 
Implementing Lightweight Networking
Implementing Lightweight NetworkingImplementing Lightweight Networking
Implementing Lightweight Networkingguest6972eaf
 
protothread and its usage in contiki OS
protothread and its usage in contiki OSprotothread and its usage in contiki OS
protothread and its usage in contiki OSSalah Amean
 
iBeacon - I vantaggi nel mondo retail
iBeacon - I vantaggi nel mondo retailiBeacon - I vantaggi nel mondo retail
iBeacon - I vantaggi nel mondo retailEmanuele Cucci
 

Destaque (20)

Building the Internet of Things with Thingsquare and Contiki - day 1, part 2
Building the Internet of Things with Thingsquare and Contiki - day 1, part 2Building the Internet of Things with Thingsquare and Contiki - day 1, part 2
Building the Internet of Things with Thingsquare and Contiki - day 1, part 2
 
Building day 2 upload Building the Internet of Things with Thingsquare and ...
Building day 2   upload Building the Internet of Things with Thingsquare and ...Building day 2   upload Building the Internet of Things with Thingsquare and ...
Building day 2 upload Building the Internet of Things with Thingsquare and ...
 
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...Advanced Internet of Things firmware engineering with Thingsquare and Contiki...
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...
 
Building the Internet of Things with Thingsquare and Contiki - day 1, part 3
Building the Internet of Things with Thingsquare and Contiki - day 1, part 3Building the Internet of Things with Thingsquare and Contiki - day 1, part 3
Building the Internet of Things with Thingsquare and Contiki - day 1, part 3
 
Building the Internet of Things with Thingsquare and Contiki - day 1, part 1
Building the Internet of Things with Thingsquare and Contiki - day 1, part 1Building the Internet of Things with Thingsquare and Contiki - day 1, part 1
Building the Internet of Things with Thingsquare and Contiki - day 1, part 1
 
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...Advanced Internet of Things firmware engineering with Thingsquare and Contiki...
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...
 
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...Advanced Internet of Things firmware engineering with Thingsquare and Contiki...
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...
 
Building the Internet of Things with Thingsquare and Contiki - day 2 part 2
Building the Internet of Things with Thingsquare and Contiki - day 2 part 2Building the Internet of Things with Thingsquare and Contiki - day 2 part 2
Building the Internet of Things with Thingsquare and Contiki - day 2 part 2
 
Contiki Operating system tutorial
Contiki Operating system tutorialContiki Operating system tutorial
Contiki Operating system tutorial
 
Contiki Presentation
Contiki PresentationContiki Presentation
Contiki Presentation
 
Contiki introduction I.
Contiki introduction I.Contiki introduction I.
Contiki introduction I.
 
Contiki os timer tutorial
Contiki os timer tutorialContiki os timer tutorial
Contiki os timer tutorial
 
Margary- Comitato Infomobilità
Margary- Comitato InfomobilitàMargary- Comitato Infomobilità
Margary- Comitato Infomobilità
 
Pigni Wlan 2009
Pigni Wlan 2009Pigni Wlan 2009
Pigni Wlan 2009
 
CTS Matera - America e caraibi
CTS Matera - America e caraibiCTS Matera - America e caraibi
CTS Matera - America e caraibi
 
Implementing Lightweight Networking
Implementing Lightweight NetworkingImplementing Lightweight Networking
Implementing Lightweight Networking
 
protothread and its usage in contiki OS
protothread and its usage in contiki OSprotothread and its usage in contiki OS
protothread and its usage in contiki OS
 
iBeacon - I vantaggi nel mondo retail
iBeacon - I vantaggi nel mondo retailiBeacon - I vantaggi nel mondo retail
iBeacon - I vantaggi nel mondo retail
 
Implementing Lightweight Networking
Implementing Lightweight NetworkingImplementing Lightweight Networking
Implementing Lightweight Networking
 
Rpl
Rpl Rpl
Rpl
 

Semelhante a Building the Internet of Things with Thingsquare and Contiki - day 2 part 1

Securing IoT Applications
Securing IoT Applications Securing IoT Applications
Securing IoT Applications WSO2
 
Early Software Development through Palladium Emulation
Early Software Development through Palladium EmulationEarly Software Development through Palladium Emulation
Early Software Development through Palladium EmulationRaghav Nayak
 
Embedded_ PPT_4-5 unit_Dr Monika-edited.pptx
Embedded_ PPT_4-5 unit_Dr Monika-edited.pptxEmbedded_ PPT_4-5 unit_Dr Monika-edited.pptx
Embedded_ PPT_4-5 unit_Dr Monika-edited.pptxProfMonikaJain
 
Debugging Numerical Simulations on Accelerated Architectures - TotalView fo...
 Debugging Numerical Simulations on Accelerated Architectures  - TotalView fo... Debugging Numerical Simulations on Accelerated Architectures  - TotalView fo...
Debugging Numerical Simulations on Accelerated Architectures - TotalView fo...Rogue Wave Software
 
Introduction to embedded System.pptx
Introduction to embedded System.pptxIntroduction to embedded System.pptx
Introduction to embedded System.pptxPratik Gohel
 
SREcon 2016 Performance Checklists for SREs
SREcon 2016 Performance Checklists for SREsSREcon 2016 Performance Checklists for SREs
SREcon 2016 Performance Checklists for SREsBrendan Gregg
 
RINA overview and ongoing research in EC-funded projects, ISO SC6 WG7
RINA overview and ongoing research in EC-funded projects, ISO SC6 WG7RINA overview and ongoing research in EC-funded projects, ISO SC6 WG7
RINA overview and ongoing research in EC-funded projects, ISO SC6 WG7Eleni Trouva
 
Realtime traffic analyser
Realtime traffic analyserRealtime traffic analyser
Realtime traffic analyserAlex Moskvin
 
Monitorama 2015 Netflix Instance Analysis
Monitorama 2015 Netflix Instance AnalysisMonitorama 2015 Netflix Instance Analysis
Monitorama 2015 Netflix Instance AnalysisBrendan Gregg
 
Embedded Intro India05
Embedded Intro India05Embedded Intro India05
Embedded Intro India05Rajesh Gupta
 
”Bare-Metal Container" presented at HPCC2016
”Bare-Metal Container" presented at HPCC2016”Bare-Metal Container" presented at HPCC2016
”Bare-Metal Container" presented at HPCC2016Kuniyasu Suzaki
 
Embedded systems notes
Embedded systems notesEmbedded systems notes
Embedded systems notesShikha Sharma
 
Real-Time Systems Intro.pptx
Real-Time Systems Intro.pptxReal-Time Systems Intro.pptx
Real-Time Systems Intro.pptx20EUEE018DEEPAKM
 
2010 02 instrumentation_and_runtime_measurement
2010 02 instrumentation_and_runtime_measurement2010 02 instrumentation_and_runtime_measurement
2010 02 instrumentation_and_runtime_measurementPTIHPA
 
John adams talk cloudy
John adams   talk cloudyJohn adams   talk cloudy
John adams talk cloudyJohn Adams
 

Semelhante a Building the Internet of Things with Thingsquare and Contiki - day 2 part 1 (20)

Mastering Real-time Linux
Mastering Real-time LinuxMastering Real-time Linux
Mastering Real-time Linux
 
Securing IoT Applications
Securing IoT Applications Securing IoT Applications
Securing IoT Applications
 
Ch3 processes
Ch3   processesCh3   processes
Ch3 processes
 
Early Software Development through Palladium Emulation
Early Software Development through Palladium EmulationEarly Software Development through Palladium Emulation
Early Software Development through Palladium Emulation
 
Embedded_ PPT_4-5 unit_Dr Monika-edited.pptx
Embedded_ PPT_4-5 unit_Dr Monika-edited.pptxEmbedded_ PPT_4-5 unit_Dr Monika-edited.pptx
Embedded_ PPT_4-5 unit_Dr Monika-edited.pptx
 
Debugging Numerical Simulations on Accelerated Architectures - TotalView fo...
 Debugging Numerical Simulations on Accelerated Architectures  - TotalView fo... Debugging Numerical Simulations on Accelerated Architectures  - TotalView fo...
Debugging Numerical Simulations on Accelerated Architectures - TotalView fo...
 
Introduction to embedded System.pptx
Introduction to embedded System.pptxIntroduction to embedded System.pptx
Introduction to embedded System.pptx
 
SREcon 2016 Performance Checklists for SREs
SREcon 2016 Performance Checklists for SREsSREcon 2016 Performance Checklists for SREs
SREcon 2016 Performance Checklists for SREs
 
RINA overview and ongoing research in EC-funded projects, ISO SC6 WG7
RINA overview and ongoing research in EC-funded projects, ISO SC6 WG7RINA overview and ongoing research in EC-funded projects, ISO SC6 WG7
RINA overview and ongoing research in EC-funded projects, ISO SC6 WG7
 
Værktøjer udviklet på AAU til analyse af SCJ programmer
Værktøjer udviklet på AAU til analyse af SCJ programmerVærktøjer udviklet på AAU til analyse af SCJ programmer
Værktøjer udviklet på AAU til analyse af SCJ programmer
 
Realtime traffic analyser
Realtime traffic analyserRealtime traffic analyser
Realtime traffic analyser
 
Monitorama 2015 Netflix Instance Analysis
Monitorama 2015 Netflix Instance AnalysisMonitorama 2015 Netflix Instance Analysis
Monitorama 2015 Netflix Instance Analysis
 
Embedded Intro India05
Embedded Intro India05Embedded Intro India05
Embedded Intro India05
 
Embedded systems
Embedded systemsEmbedded systems
Embedded systems
 
”Bare-Metal Container" presented at HPCC2016
”Bare-Metal Container" presented at HPCC2016”Bare-Metal Container" presented at HPCC2016
”Bare-Metal Container" presented at HPCC2016
 
Embedded systems notes
Embedded systems notesEmbedded systems notes
Embedded systems notes
 
Real-Time Systems Intro.pptx
Real-Time Systems Intro.pptxReal-Time Systems Intro.pptx
Real-Time Systems Intro.pptx
 
Intro to HPC
Intro to HPCIntro to HPC
Intro to HPC
 
2010 02 instrumentation_and_runtime_measurement
2010 02 instrumentation_and_runtime_measurement2010 02 instrumentation_and_runtime_measurement
2010 02 instrumentation_and_runtime_measurement
 
John adams talk cloudy
John adams   talk cloudyJohn adams   talk cloudy
John adams talk cloudy
 

Último

Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxMatsuo Lab
 
Introduction to Quantum Computing
Introduction to Quantum ComputingIntroduction to Quantum Computing
Introduction to Quantum ComputingGDSC PJATK
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureEric D. Schabell
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.YounusS2
 
Spring24-Release Overview - Wellingtion User Group-1.pdf
Spring24-Release Overview - Wellingtion User Group-1.pdfSpring24-Release Overview - Wellingtion User Group-1.pdf
Spring24-Release Overview - Wellingtion User Group-1.pdfAnna Loughnan Colquhoun
 
20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf
20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf
20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdfJamie (Taka) Wang
 
UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7DianaGray10
 
Cloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial DataCloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial DataSafe Software
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdfPedro Manuel
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Adtran
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URLRuncy Oommen
 
Cybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxCybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxGDSC PJATK
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1DianaGray10
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationIES VE
 
Babel Compiler - Transforming JavaScript for All Browsers.pptx
Babel Compiler - Transforming JavaScript for All Browsers.pptxBabel Compiler - Transforming JavaScript for All Browsers.pptx
Babel Compiler - Transforming JavaScript for All Browsers.pptxYounusS2
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostMatt Ray
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding TeamAdam Moalla
 

Último (20)

Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptx
 
Introduction to Quantum Computing
Introduction to Quantum ComputingIntroduction to Quantum Computing
Introduction to Quantum Computing
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability Adventure
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.
 
Spring24-Release Overview - Wellingtion User Group-1.pdf
Spring24-Release Overview - Wellingtion User Group-1.pdfSpring24-Release Overview - Wellingtion User Group-1.pdf
Spring24-Release Overview - Wellingtion User Group-1.pdf
 
20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf
20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf
20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf
 
UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7
 
Cloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial DataCloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial Data
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdf
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URL
 
Cybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxCybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptx
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
 
Babel Compiler - Transforming JavaScript for All Browsers.pptx
Babel Compiler - Transforming JavaScript for All Browsers.pptxBabel Compiler - Transforming JavaScript for All Browsers.pptx
Babel Compiler - Transforming JavaScript for All Browsers.pptx
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team
 

Building the Internet of Things with Thingsquare and Contiki - day 2 part 1

  • 1. Building Connected Devices With Thingsquare and Contiki Day 2
  • 2. Yesterday • Learned about how to prototype apps • Learned about the high-level operation of the protocols • Got a bit of background
  • 3. Today • Deep-dive into the protocols • More information about Contiki
  • 5. Contiki: an IoT OS • Helps application programs – Processes and concurrency – Timers – Memory management – Networking – Device drivers
  • 7. Time in Contiki • Two system clocks in Contiki – Coarse-grained, most often 128 Hz • CLOCK_SECOND – Fine-grained, most often 32768 Hz • RTIMER_SECOND – Platform dependent – Power of two for simple math
  • 8. Timers • struct timer – coarse – Passive timer, only keeps track of its expiration time • struct etimer – coarse – Active timer, sends an event when it expires • struct ctimer – coarse – Active timer, calls a function when it expires • struct rtimer – fine – Real-time timer, calls a function at an exact time
  • 9. Etimer • Periodically print the time static struct etimer etim; PROCESS_THREAD(my_process, ev, data) { PROCESS_BEGIN(); while(1) { printf(”Uptime (seconds): %lun", clock_seconds()); etimer_set(&etim, CLOCK_SECOND); PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&etim)); } PROCESS_END(); }
  • 10. Ctimer • Print ”Hello, callback” after 1/8 second. static struct ctimer callback_timer; static void callback(void *data) { printf("%sn", (char *) data); } void application(void) { ctimer_set(&callback_timer, CLOCK_SECOND / 8, callback, "Hello, callback!"); return 0; }
  • 11. Rtimer • Sets a hardware interrupt at set time • Invokes a callback static struct rtimer rt; rtimer_set(&rt, /* pointer to rtimer struct */ RTIMER_NOW() + RTIMER_SECOND/100, /* 10ms */ 1, /* duration */ rt_callback, /* callback pointer */ NULL); /* pointer to data */
  • 12. Rtimer • Rtimer callback static void rt_callback(struct rtimer *rt, void *data) { printf(”callback!n"); }
  • 13. Hands-on: blink.c • See the blink.c example on the Thingsquare cloud • Uses etimer to blink LEDs • Note the use of etimer_reset() to provide a stable timer
  • 15. Programming concept: Multithreading • Threads are given a timeslot to execute • Paused / continued later by OS scheduler if not done • Costly – stack space (RAM), CPU
  • 16. Programming concept: Event driven / state machine • Reactive - events control program flow – Timers, hardware interrupts, radio, etc • More kind on resources • However, callbacks and state variables makes programming harder
  • 17. Event driven / state machine
  • 18. State machine • What state? What event? Conditions, transitions, headaches.
  • 19. • Event driven is kinder on hw resources.. • Multithreaded is kinder on the programmer.. - can their strengths be combined?
  • 20. Programming concept: Protothreads • Threading without the overhead – RAM is limited, threads use too much RAM • Protothreads are event-driven but with a threaded programming style • Cooperative scheduling
  • 21. C-switch expansion int a_protothread(struct pt *pt) { PT_BEGIN(pt); int a_protothread(struct pt *pt) { switch(pt->lc) { case 0: PT_WAIT_UNTIL(pt, condition1); pt->lc = 5; case 5: if(!condition1) return 0; if(something) { if(something) { PT_WAIT_UNTIL(pt, condition2); pt->lc = 10; case 10: if(!condition2) return 0; } PT_END(pt); } } Line numbers } } return 1;
  • 22. Six-line implementation • C compiler pre-processor replaces with switch-case • very efficient struct pt { unsigned short lc; }; #define PT_INIT(pt) pt->lc = 0 #define PT_BEGIN(pt) switch(pt->lc) { case 0: #define PT_EXIT(pt) pt->lc = 0; return 2 #define PT_WAIT_UNTIL(pt, c) pt->lc = __LINE__; case __LINE__: if(!(c)) return 0 #define PT_END(pt) } pt->lc = 0; return 1
  • 23. Protothread limitations • Automatic variables not stored across a blocking wait – Workaround: use static local variables instead • Constraints on the use of switch() constructs in programs – Workaround: don’t use switches
  • 24. Contiki processes • Contiki processes are very lightweight – Execution is event-driven – Can receive events from other processes – Must not block in busy-wait loop • while(1) will crash the device • Contiki processes are protothreads
  • 25. Contiki processes #include "contiki.h" /*---------------------------------------------------*/ PROCESS(hello_world_process, "Hello world process"); AUTOSTART_PROCESSES(&hello_world_process); /*---------------------------------------------------*/ PROCESS_THREAD(hello_world_process, ev, data) { PROCESS_BEGIN(); printf("Hello, worldn"); PROCESS_END(); }
  • 26. Contiki events • How to wait for an event PROCESS_THREAD(first_process, ev, data) .. .. PROCESS_WAIT_EVENT_UNTIL(ev == servo_event); if(data != NULL) { handle_servo((struct servo_data *) data); } • ev contains the event number • data is a void* to any data – Can be NULL
  • 27. Hands-on: blink.c • See how PROCESS_BEGIN(), PROCESS_END(), PROCESS_WAIT_UNTIL() are used
  • 28. Starvation in Contiki • Thread scheduling is cooperative – play nice • The watchdog is on – on some platforms unable to turn off • Don’t hog the CPU • Long-running, do – watchdog_periodic(); – PROCESS_WAIT();
  • 30. Contiki memb struct user_struct { int a, b; } MEMB(block, 10, struct user_struct); m = memb_alloc(&block); memb_free(&block, m);
  • 33. Contiki netstacks • Three network stacks – IPv6 – IPv4 – Rime
  • 34. The Contiki netstack • Four layers – Network layer Application Transport Network, routing Adaptation – MAC layer – RDC layer – Radio layer MAC Duty cycling Radio
  • 35. The Contiki IPv6 netstack websocket.c, httpsocket.c, coap.c Application udp-socket.c, tcpsocket.c Transport uip6.c, rpl.c Network, routing sicslowpan.c Adaptation csma.c MAC nullrdc.c, contikimac.c Duty cycling cc2538-rf.c Radio
  • 36. New Contiki 3.x APIs • UDP socket – Send and receive data with UDP – Callback-based • TCP socket – Listen for new connections (server) – Set up new connections (client) – Send and receive data – Callback-based
  • 37. UDP socket API int udp_socket_register(struct udp_socket *c, void *ptr, udp_socket_input_callback_t receive_callback); int udp_socket_bind(struct udp_socket *c, uint16_t local_port); int udp_socket_connect(struct udp_socket *c, uip_ipaddr_t *remote_addr, uint16_t remote_port); int udp_socket_send(struct udp_socket *c, const void *data, uint16_t datalen); int udp_socket_sendto(struct udp_socket *c, const void *data, uint16_t datalen, const uip_ipaddr_t *addr, uint16_t port);
  • 38. UDP socket API • Connected sockets: only receive data from the specified host/port • Receiving data is simple – Get a pointer along with the callback • Sending data is simple – For connected sockets: to the connected host/port – Send to any host/port
  • 39. TCP socket API • TCP significantly trickier than UDP – Connections – Retransmissions – Buffers
  • 40. TCP socket API void tcp_socket_register(struct tcp_socket *s, void *ptr, uint8_t *input_databuf, int input_databuf_len, uint8_t *output_databuf, int output_databuf_len, tcp_socket_input_callback_t input_callback, tcp_socket_event_callback_t event_callback); int tcp_socket_connect(struct tcp_socket *s, uip_ipaddr_t *ipaddr, uint16_t port); int tcp_socket_listen(struct tcp_socket *s, uint16_t port); int tcp_socket_unlisten(struct tcp_socket *s); int tcp_socket_send(struct tcp_socket *s, const uint8_t *dataptr, int datalen); int tcp_socket_send_str(struct tcp_socket *s, const char *strptr); int tcp_socket_close(struct tcp_socket *s);
  • 41. TCP socket API • Caller must provide input and output buffers – The caller knows how much data it is going to be sending and receiving • Sending data is easy – Just call the send function • Receiving data is trickier – Data may be retained in the buffer
  • 43. The Contiki directory structure • apps/ – Contiki applications • core/ – Contiki core code • cpu/ – Contiki CPU-specific code • doc/ – Contiki documentation • examples/ – Contiki examples • platform/ – Contiki platform code • regression-tests/ – Contiki regression tests • tools/ – Contiki tools
  • 44. Contiki 3.x directories • dev/ – Device drivers • More fine-grained control through modules – New subdirectories under sys/net/
  • 45. A project directory • examples/hello-world – Makefile • Contains the top-level rules to build the project – project-conf.h • Project configuration • Optional – must be explicitly enabled by Makefile – hello-world.c • Project source code file
  • 46. Toolchain Installation • Embedded compiler toolchains with built-in IDE – IAR • Gcc – Compiler – Linker – Use external editor (Eclipse, Emacs, vi, …)
  • 47. Instant Contiki • Full toolchain installation in a Linux VM • Runs in VMware Player • Compile in Instant Contiki, run on the hardware
  • 48. Building firmware images • Use C compiler to compile the full Contiki source code • Compile in a project directory • Need to change something? Re-compile
  • 49. Contiki firmware images • In a terminal, go to the project directory make TARGET=platform file • This will build the full source code tree for your project. Eg, make TARGET=cc2538dk hello-world
  • 50. Configuration • Two layers of configuration – Platform level • Buffer sizes, radio drivers, etc – Project level • RDC mechanisms • Don’t touch the platform configuration • Do touch the project configuration
  • 51. Uploading the firmware • Some platforms have a convenient way to upload the firmware make TARGET=sky hello-world.upload • Some platforms are significantly trickier
  • 52. Save target • If you are using the same target a lot, make TARGET=cc2538dk savetarget • Then, simply make blink.upload
  • 53. Running as the native target • Sometimes using the native target is useful make TARGET=native hello-world • Run the program ./hello-world.native
  • 54. Other commands • Connect to serial port make TARGET=exp5438 login make TARGET=exp5438 COMPORT=COM12 login • Clean out previous compilation make TARGET=exp5438 clean • List available commands make TARGET=exp5438 help
  • 55. Cooja
  • 56. The Cooja Simulator • Emulation mode – Run exact same firmware images as run on hardware – Slower, more exact • Native mode – Run the Contiki code, compiled for the native system – Faster, can run (much) larger systems
  • 58. Running Cooja • Go to the Cooja directory – cd tools/cooja – ant run
  • 69. The Contiki regression tests • A great resource for seeing Cooja simulation setups • contiki/regression-tests/