PES4 / Mbed OS Queue_02
Committer:
demayer
Date:
Sat Mar 28 15:28:19 2020 +0000
Revision:
0:6bf0743ece18
IMU Thread with an event-queue running parallel to handle tasks like a 5 times blinking LED. Button with interrupt detected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
demayer 0:6bf0743ece18 1 API Introduction
demayer 0:6bf0743ece18 2 ============
demayer 0:6bf0743ece18 3
demayer 0:6bf0743ece18 4 Thread protocol is a wrapping around the IPv6/6LoWPAN stack, and it is capable to work stand-alone in bare-metal implementations. In subsequent chapters of this manual, we walk through the base of the networking stack that is IPv6/6LoWPAN and proceed further to Thread.
demayer 0:6bf0743ece18 5
demayer 0:6bf0743ece18 6 **Figure 3-1 High level API interfaces over Networking stack**
demayer 0:6bf0743ece18 7
demayer 0:6bf0743ece18 8 ![High level design Architecture](img/arch_general.png)
demayer 0:6bf0743ece18 9
demayer 0:6bf0743ece18 10
demayer 0:6bf0743ece18 11
demayer 0:6bf0743ece18 12 This chapter is an introduction to the 6LoWPAN stack, modules and API interfaces. It contains the following sections:
demayer 0:6bf0743ece18 13
demayer 0:6bf0743ece18 14 - [_About the 6LoWPAN stack_](#about-the-6lowpan-stack)
demayer 0:6bf0743ece18 15 - [_Eventing system_](#eventing-system)
demayer 0:6bf0743ece18 16
demayer 0:6bf0743ece18 17
demayer 0:6bf0743ece18 18 ## About the 6LoWPAN stack
demayer 0:6bf0743ece18 19
demayer 0:6bf0743ece18 20 The 6LoWPAN stack is designed to be portable for various platforms and radio drivers. It uses a lightweight eventing system that allows to run on minimal design on the smallest microcontrollers even without operating systems. The application programming interfaces are designed to allow porting for new platforms. _Figure 3-2_ shows the high level APIs on the 6LoWPAN stack.
demayer 0:6bf0743ece18 21
demayer 0:6bf0743ece18 22 **Figure 3-2 High level API interfaces over 6LoWPAN stack**
demayer 0:6bf0743ece18 23
demayer 0:6bf0743ece18 24 ![Bare metal 6LoWPAN](img/high_level_stack_API_interfaces.png)
demayer 0:6bf0743ece18 25
demayer 0:6bf0743ece18 26 The 6LoWPAN stack provides application designers with interfaces for sending and receiving packets, configuring the network and running the event base system in the form of tasklets. For more information on the interfaces, see chapters [_An Event-driven Scheduling Model_](08_API_events.md), [_Network API Definitions_](09_API_network_def.md) and [_Sockets Use and Available APIs_](11_API_sockets.md).
demayer 0:6bf0743ece18 27
demayer 0:6bf0743ece18 28 The 6LoWPAN stack relies on two interfaces that must be ported to run it on a specific platform. Platform API defines an abstraction layer of the underlying microcontrollers or operating system. For more information on the Platform API, see section _Platform API_ in chapter [_Porting 6LoWPAN Stack_](16_API_porting.md).
demayer 0:6bf0743ece18 29
demayer 0:6bf0743ece18 30 PHY driver API is an abstraction between the driver and the 6LoWPAN stack and allows 6LoWPAN network to be formed on any 802.15.4 compatible or similar radio chip. The PHY driver API is not limited to only radio chips, even serial communication may be used. For more information on the PHY driver API, see [_Device Driver API_](driver_api.md).
demayer 0:6bf0743ece18 31
demayer 0:6bf0743ece18 32 For more information on the 6LoWPAN stack architecture, and the protocol and application modules used by the 6LoWPAN stack, see [_ARM mbed 6LoWPAN Stack Overview_](01_overview.md).
demayer 0:6bf0743ece18 33
demayer 0:6bf0743ece18 34 ## Eventing system
demayer 0:6bf0743ece18 35
demayer 0:6bf0743ece18 36 6LoWPAN stack eventing system is designed to be minimal and portable. Its main focus is on running in small embedded devices without any help of operating systems. The event-based approach allows 6LoWPAN stack based applications to be designed for extremely low power use cases where thread (not to be confused with Thread, the stack) based systems may consume too much battery life. The eventing system is designed to rely entirely on the Platform API so it is possible to port it to run on any operating system when the thread based approach is favored.
demayer 0:6bf0743ece18 37
demayer 0:6bf0743ece18 38 The eventing system specifies event handlers (tasklets) that form the application logic. The 6LoWPAN stack allows developers to define multiple tasklets to ease the task of writing complex applications. Each of these tasklets can then have full access to the network stack and its features through Socket, Eventing and NET APIs.
demayer 0:6bf0743ece18 39
demayer 0:6bf0743ece18 40 The following example shows the usage of a simple tasklet:
demayer 0:6bf0743ece18 41
demayer 0:6bf0743ece18 42 ```
demayer 0:6bf0743ece18 43 /* Main event handler */
demayer 0:6bf0743ece18 44 void tasklet_main(arm_event_s *event)
demayer 0:6bf0743ece18 45 {
demayer 0:6bf0743ece18 46 switch(event->event_type) {
demayer 0:6bf0743ece18 47 case ARM_LIB_TASKLET_INIT_EVENT:
demayer 0:6bf0743ece18 48 // Initialzation event is given when tasklet is created.
demayer 0:6bf0743ece18 49 // It will be called after a tasklet is registered to event OS.
demayer 0:6bf0743ece18 50
demayer 0:6bf0743ece18 51 // Launch timer event to fire after a second
demayer 0:6bf0743ece18 52 timer_sys_event(MY_TX_TIMER, T_1000_MS);
demayer 0:6bf0743ece18 53 break;
demayer 0:6bf0743ece18 54 case ARM_LIB_SYSTEM_TIMER_EVENT:
demayer 0:6bf0743ece18 55 // Timer events are received in tasklet
demayer 0:6bf0743ece18 56 // Using a event type TIMER_EVENT
demayer 0:6bf0743ece18 57 // They receive 8bit identifier that
demayer 0:6bf0743ece18 58 // was passed to timer_sys_event().
demayer 0:6bf0743ece18 59 switch(event->event_id) {
demayer 0:6bf0743ece18 60 case MY_TX_TIMER:
demayer 0:6bf0743ece18 61 send_sensor_info();
demayer 0:6bf0743ece18 62 timer_sys_event(MY_TX_TIMER, T_1000_MS); //Relaunch
demayer 0:6bf0743ece18 63 break;
demayer 0:6bf0743ece18 64 }
demayer 0:6bf0743ece18 65 break;
demayer 0:6bf0743ece18 66 }
demayer 0:6bf0743ece18 67 }
demayer 0:6bf0743ece18 68
demayer 0:6bf0743ece18 69 void main(void)
demayer 0:6bf0743ece18 70 {
demayer 0:6bf0743ece18 71 int8_t tasklet_id;
demayer 0:6bf0743ece18 72 eventOS_scheduler_init();
demayer 0:6bf0743ece18 73 eventOS_event_handler_create(&tasklet_main, ARM_LIB_TASKLET_INIT_EVENT);
demayer 0:6bf0743ece18 74 eventOS_scheduler_run(); // Enter the event loop
demayer 0:6bf0743ece18 75 }
demayer 0:6bf0743ece18 76 ```
demayer 0:6bf0743ece18 77
demayer 0:6bf0743ece18 78 In this code example, the main application registers an event handler called `tasklet_main`. This event handler is then used to send and receive timed events in one-second intervals. For a description of the functions and their parameters, see chapter [_An Event-driven Scheduling Model_](08_API_events.md).
demayer 0:6bf0743ece18 79