CovidBraceletPrj / CovidBracelet

Covid Bracelet Code for Zephyr OS
Apache License 2.0
14 stars 6 forks source link
bluetooth-le bluetooth-low-energy coronavirus coronavirus-tracking internet-of-things nrf52 zepyr

TraceBand Actions Status: test Actions Status: build

This project aims to add support the Exposure Notification (EN) protocol for tracing contacts from Apple and Google on low-power wristbands. It maintains full compatibility with smartphone Apps based on the EN protocol.

Note: this is a proof of concept and not ready for production
Contributions Welcome!

Features

Note: as we for now do not use the flash for key storage, this currently only works on nrf52480 or you can just store a very small number of keys. Moving the keys to flash is on the TODO list and will fix this.

Getting Started

This project is based on platformIO for an easy setup process, see: https://platformio.org/platformio-ide.

Testing

To run the tests for the desktop environment select the task test for desktop or run:

platformio test -e desktop

Demo Video

Video Demo

Roadmap

Flash Support

Device Initialization

The devices need to be initialized:

Device Synchronization

Extract Keys from Device

In case of an infection, the keys need to be extracted from the device:

Device Updates Over the Air (OTA)

Securely updating many running devices over the air with signed firmware will greatly improve maintainability. Related feature branch: feature/ota

Logging

Protocol Specifications

Other

Possible Platforms

Possible platforms for real-world deployment many, as many of the cheap fitness trackers base on NRF52 or chips with similar capabilities. However, many would need the firmware to be shipped to manufactures.

Display

A basic visual interface based on LVGL is included. It can be tested on POSIX-compliant platforms by building it with the zephyr/build_native.sh script. SDL must be installed to provide a virtual display.

No risk contacts Low risk High risk

Exposure Key Extraction

Exposure keys can be unpacked from their protocol buffer. The unpacking can be tested, by setting the TEST_UNPACK_KEYS=y and TEST_UNPACK_KEYS_N=n config variables. The test will run first thing at startup and output the time, it took unpacking and iterating over the keys.