/contiki

a fork of Contiki merged to Contiki-NG. there is a few features and perks about TSCH stack, cc13xx platform, cooja, and core optimisations.

Primary LanguageCBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

Logo

Contiki-NG: The OS for Next Generation IoT Devices

Github Actions Documentation Status license Latest release GitHub Release Date Last commit

Stack Overflow Tag Gitter Twitter

Contiki-NG is an open-source, cross-platform operating system for Next-Generation IoT devices. It focuses on dependable (secure and reliable) low-power communication and standard protocols, such as IPv6/6LoWPAN, 6TiSCH, RPL, and CoAP. Contiki-NG comes with extensive documentation, tutorials, a roadmap, release cycle, and well-defined development flow for smooth integration of community contributions.

Unless explicitly stated otherwise, Contiki-NG sources are distributed under the terms of the 3-clause BSD license. This license gives everyone the right to use and distribute the code, either in binary or source code format, as long as the copyright license is retained in the source code.

Contiki-NG started as a fork of the Contiki OS and retains some of its original features.

Find out more:

Engage with the community:

This fork (brief):

This fork is born in project with TSCH net, star topology.

imported and introduced 6top MSF, and NRSF over it.

Syncronising with net was optimised by listen beacons as rare as possible, depends on estimation of drift by adaptive sync algorithm. This gives much power consumption economy. Therefore in adaptive sync was intoduced hooks on new estimation comes.

For association - provided more control over chanels list, and chanel hoping style.

Also multiple slots can be attached to work with single receiver, and with different protocols on different ports.

Used AES128 encription, but there was myltiple ports - wityhout encription, and different keys. Such work demands some flexibility with encription of links and packets - reailised assigning key per recv/sender adress and port.

Has imroved cc26xx RFcore-prop driver. Most important - provided power control, that use GLDO during receive. Linear LDO have less noise - and gives about 12db for SNR.

And other little work for core library, etimer and rtimer, cc26xx LPM, SPI ...

More branches/tags descriptions see TAGS.md

This fork improves vs Contiki-NG:

contiki core improves

  • [feature/printf-netaddr] - provide ability for printing net/link-adress via pointer. like linux printk do.

  • [contrib/cpu-cc1352] - introduce for cc26x0-cc13x0 target support of cc13/26x2 cpus

  • [speed/inlines] - core optimisation by inlining code

  • [speed/nbr-index-access] - nbr-table inline optimisations

  • rtime:

    • [rtimer_multiple_access] - PR #1290
    • rtime_expired() / RTIME_EXPIRED
  • process_abort() [add-proc-abort]

  • [add-net-addrsize4] - allow use 4byte network adress.

  • [fix-rame802154-addrsize] - fixes MAC adress check when LINKADDR_SIZE != 8

  • CRC16_STYLE [add-crc16-lookup8 ] - core crc16 code provided in variants - full soft calculate, or via faster table lookup

  • core/lib/ringbuf16index - 16bit ringbiffers

  • [fix-assert-cpp ] - fix contiki code vs c++ <assert.h>

  • fixes on make system:

    • ![fix-make-deps] - fix make dependences
    • [alexrayne-make-cpp] - DEBUG symbol pass to compiler
    • [fix-make-loose-objects] - prevent delete project objects that have deps but not included in contiki lib
    • [fix-alexrayne-cc26-srec] - fix srec make routine when build on windows platform
    • [ivan-alekhin/customrules-fix] - Allow to search "customrules" in additional directories.
    • [fix-make-dotpath] - ommits '.' dir in SOURCEDIRS if one alredy provided PROJECTDIRS
    • OBJVARIANT variable builds objects into obj.${OBJVARIANT} dir
    • [ferature/make-extends] - set of make extends
  • [feature/debug-os-unstatic] - code preparetions for better debuging.

  1. Imported PRs

  • PR #2347 [fix-make-dotpath]
  • PR #2338 from tim-ist/bmp_fix
  • [pengi/apps_from_platform] - Load platform before apps
  • PR #1265 [bkozak/optomize_etimer_implementation] - etimer_expired_at, timer_expired
  • PR #1290 [rtimer_multiple_access]
  • PR #2599 [lavr18-add-cc26-i2c] - Add board-i2c library for the launchpad

Work fo Launchpad cc26xx platform:

  • fix SPI driver for LPM system

  • [fix-cc26xx-launchpad-spiclose] allowssome SPI pins maybe assigned as unused

  • fix UART driver for LPM system

  • cc1310 RF core:

    • power mode controls allow linear DC for receive [cc26-rf-prop-gldo]
    • fix power on with bad quartz [add-cc26xx-rfosc-timeout]
    • RF RAT improved for less cpu usage.
    • RF cores features TSCH_HW_FEATURE_xxx:
      • RF_CORE_CONF_PENDING - a bit styles over pending receiving frames. Introduced RF_CORE_PENDING_READS style - for more relyable pending receiver.
  • RTC CH2 isr hander [cc26xx-add-rtc-isr-ch2]

  • RTIMER_CONF_ARCH_SECOND - provide RTC resolution setup. now tick of RTC can be setup

  • [bkozak/add_rtimer_multiple_access] - import PR for rtimer safer work

  • [pr/tsch-rx_relaxcpu-prefetch] - deployed RADIO_DELAY_SFD_RX constant from RADIO_DELAY_BEFORE_TX, to correct values, that makes drift estimation happy.
  1. just a bit fine code:

  • [tsch-fine-alexraynes], [fine-tsch-sfhandle]

  • [cc26xx-lpm-fines]

    • improve LPM with WAKE_UP_FROM_DEEP_SCHEDULE
  • [fine-cc26-lpm]

    • RF_CORE_PENDING_READSANY - provide protection vs buggy RFcore leaves slots pending state.
  • process_post_pause() [process-pause-codesize] - for less code size

  • [cc26xx-rtc-fastercode]

Work over TSCH net stack

introduces to 6top

  • MSF - imported MSF service, developed and debuged
  • 6top - some rework on 6top protocol:
    • provide concurent transactions by rx/tx, sf IDs
    • fixed some bugs
    • provide less extensive API sixp-pkt-ex

slot strategy

  • [pr/tsch-rx_relaxcpu-prefetch] - provides polling radio when receive. This releases cpu to application between polls. TSCH_[CONF_]TIMING_POLL_RX_US enable this mode.

    • also provides control for slot timing styles by prefetching tx. It sufficient when tx timing of PHY header (RADIO_DELAY_SFD_RX) for radio-packet is big, comparable with RX-guard window. TSCH_RADIODELAY_PREFETCH_TX configures prefetching strategy.

configurations:

  • TSCH_CONF_POLLING_STYLE - TSCH_POLLING_STRONG/RELAXED [tsch-pending-smart]

  • TSCH_RADIO_ON_DURING_TIMESLOT when smarter RF core power off/on between slots, allows RF well be powered on close slots [tsch_prognose_rf_off]

  • TSCH_CONF_TIMESYNC_EB_LOOSES - allow denote how much EB beacons can be loose, before net loose sync

  • TSCH_CONF_RTIMER_GUARD - turning for RTIMER_GUARD feature

  • tsch_timeslot_timing_elements:tsch_ts_netwide_count - denotes timings that assigns for network by EB. Allow to fix local network timings, ignoring ones from network EB. (handy for debug)

  • TSCH_SECURITY_CONF_STRICT - better confiigurable net sequrity:

    • _PAN_RELAX - allow unsecured packets in secured PAN or secured packets in unsecured PAN

    • _KEYID_RELAX - allow use any key_id for secured frames, regards frame-type

  • TSCH_CONF_WITH_PHANTOM_NBR [tsch-pantom_addr] - phantom TSCH adress (if != eb_adress) binds width adress declared in links. This allows use different queues on same receiver adress, denoted to different links. i.e. - different links can have theirs own packet queue, even if them works on same receiver adress.

TSCH association control [tsch-scan-flex]:

  • TSCH_CONF_ASSOCIATION_SINGLE - single or cycling associating retryes

  • TSCH_JOIN_STYLE - HOPPING_RANDOM/STEPPING - style of frequences scaning when associating

  • TSCH_JOIN_HOPPING_SEQUENCE - sequensce for frequency scaning

  • TSCH_CONF_JOIN_HOPPING_START(action) macro - provides user specified action on net join

  • [tsch-scan-handle-radiofail] - fix association hung when radio failes

  • TSCH_CONF_SEQ_FROMRT - provides initialisation packet seq from RTC [tsch-seq-from-rt]

  • fixes on assosianiton proc:

    • [alexrayne-tsch-scan-yelds]
  • add events JOINING/LEAVING_NETWORK callbacks invoke on coordinator start, disassociate [fix-tsch-cb-leave]

  • TSCH_CONF_SEQ_FROMRT - provides initialisation packet seq from RTC [tsch-seq-from-rt]

more control on scheduler: [tsch-sched-disables]:

  • LINK_OPTION_PLANPOINT - allow rescheduling on link packet
  • LINK_OPTION_DISABLE - allow turn off link softly, without rebuild frames structule
  • LINK_OPTION_IDLED_AUTOOFF - provide autoset disable option when link inactive. for TX slots/
  • TSCH_SCHEDULE_OMMIT_NOXFER - allows to skip slots that have no RX or TX links activity
  • tsch_slot_operation_break_before/invalidate [tsch-sched-invalidate] - allows to force reschedule next slot by demant
  • tsch_slot_operation_stop -
  • tsch_schedule_link_change_option/addr - link option change on fly< no need to debulf frames
  • TSCH_WITH_LINK_SELECTOR - allows to pass desired frame*timeslot in packet attributes PACKETBUF_ATTR_TSCH_SLOTFRAME/TIMESLOT
  • TSCH_LINK_SELECTOR_ENABLED[RX] [tsch-linksel-app] -
  • TSCH_ON_SLOT_TX/RX() [tsch-slot-hooks ] - user hooks on scheduler slots events - after slot completes

introduce log system:

  • TSCH_LOGF configurable macro like PRINTF
  • TSCH_DBG configurable macro to alternative LOG_DBG
  • TSCH_PUTS/PRINTF/ANNOTATE - provide instead global PRINTF

tsch_queue improves:

  • tsch_queue_free_neighbors(tsch_free_UNLINKED) [tsch-add-clenupques] - allows to cleanup from loosed links
  • tsch_queue_flush_nbr_queue/_remove_nbr [tsch-link-adr_change] - more control on neighbours

more clever tsch_activate vs turnoff/sleep/poweroff [fix-tsch-activity_onoff]

improve adaptive TSCH frame period estimation via sync drift [tsch-adaptive_sync-estimate]

  • TSCH_DRIFT_SYNC_ESTIMATE - allow rarely listen EB beacons for sync, for lower power consumption.
  • TSCH_TIMESYNC_ON_DRIFT(...) - provides user handle on drift sync extimation
  • [alexrayne-tsch-drift_fail_protect] - when RF RAT timer unsync with core clock, measured sync drift may be disaster. this is detects it, and resync RAT.

security keys:

  • [tsch-log-sec-keyid]
  • TSCH_SEC_KEY [tsch-sec-user] - provide user specified keys for packets encription
  • better sequrity error handling via tsch_security_secure_packet - it provides errors tschERR_UNSECURED/NOKEY, mac provide error MAC_TX_ERR_SEC
  • [fix-tsch-sec-nonce]

fixes:

+! [tsch-fix-slots-stop] - a bit fixes over planing rtimer, when disassociate.

some code optimisations:

  • [opt-tsch-frame802154_has_panid]
  • [tsch-rtime-optimise]
  • [tsch-scan-share_eb_parse ] - code size optimise
  • +TSCH_CONF_H - introduced for lightweight code rebuild on tsch parameters change
  • tsch_queue_get_time_source [tsch-fast-gettimesrc] - fast implementation, not use search over nbr list