User Tools

Site Tools


gsoc:2023-gsoc-zephyr

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
gsoc:2023-gsoc-zephyr [2023/01/26 13:45]
IulianaProdan
gsoc:2023-gsoc-zephyr [2023/03/27 11:59] (current)
IulianaProdan
Line 32: Line 32:
 **To be updated** **To be updated**
  
-==== Project #1   Arduino module based on Zephyr ​====+==== Project #1   HTTP Server Implementation ​====
  
 1 contributor full-size (350 hours). 1 contributor full-size (350 hours).
  
-Arduino'​s popularity is renowned as a popular framework for providing a simplified interface to program ​embedded ​devicesRecentlyArduino adopted mbed OS as the base RTOS for some of their newer devices. With that work, they separated out [[https://​github.com/​arduino/​ArduinoCore-API|Arduino Core]] as an independent abstraction layer from [[https://​github.com/​arduino/​ArduinoCore-mbed|Arduino Core for mbed]]. This opens up the possibility for leveraging Arduino Core on other OSes.+Zephyr has historically incorporated the [[https://​github.com/​civetweb/​civetweb|CivetWeb]] ​embedded ​HTTP serverHoweverZephyr'​s CivetWeb module was [[https://​github.com/​zephyrproject-rtos/​zephyr/​pull/​46061|deprecated]] and subsequently module ​[[https://​github.com/​zephyrproject-rtos/​zephyr/​pull/​46746|removed]] due to complications of maintaining a fork of a 3rd-party project in an external module.
  
-The project ​idea is to create ​Zephyr module that leverages the Arduino Core so that a developer can use Zephyr as the underlying OS when they use the Arduino framework on Arduino-compatible devices. The benefits ​to the user include:+The project ​has specified many desired features for new, fully-integrated, and in-tree [[https://​github.com/​zephyrproject-rtos/​zephyr/​issues/​46758|replacement for CivetWeb]]. The proposed design will be able to take advantage of Zephyr'​s many existing building blocks.
  
-  * Access to Arduino APIs as well as advanced Zephyr capabilities +  * [[https://​docs.zephyrproject.org/​latest/​develop/​test/​ztest.html|ZTest Framework]] 
-  * Broader set of devices than the standard Arduino ecosystem thanks to Zephyrs'​ device ​support +  * [[https://​docs.zephyrproject.org/​latest/​connectivity/​networking/​api/​http.html|HTTP]],​ [[https://​docs.zephyrproject.org/​latest/​connectivity/​networking/​api/​websocket.html|WebSocket]],​ [[https://​docs.zephyrproject.org/​latest/​services/​misc.html#​json|JSON]],​ and [[https://​github.com/​zephyrproject-rtos/​mbedtls|mbedTLS]] libraries 
-  * Ability ​to re-use Arduino tools like the Arduino IDE and wealth ​of libraries+  * [[https://​docs.zephyrproject.org/​latest/​services/​portability/​posix.html|POSIX API]] support ​for socket, threads, and filesystem operations 
 +  * [[https://​docs.zephyrproject.org/​latest/​build/​kconfig/​index.html|Kconfig]] and [[https://​docs.zephyrproject.org/​latest/​build/​cmake/​index.html|Build System]] ​to fine-tune built-in server options 
 +  * [[https://​docs.zephyrproject.org/​latest/​kernel/​iterable_sections/​index.html|Iterable Section]] support, for flexible specification ​of HTTP services and resources
  
-Note 1Arduino Core is licensed under the GNU Lesser General Public License and Zephyr is licensed under Apache 2. That means this project will most likely need to be developed out of tree and in a separate repo to keep code and license separation.+{{ :gsoc:​gsoc-2023-httpd.png?400 | HTTP Server Layers}}
  
-See [[https://​github.com/​zephyrproject-rtos/​zephyr/​issues/​22247|#​22247]] for a historic discussion & [[https://​github.com/​soburi/​arduino-on-zephyr|soburi/​arduino-on-zephyr]] for an earlier attempt prior to the Arduino Core architecture. 
  
-The contributor's task is thus:+An API layer diagram of the project is above. ​The GSoC contributor is responsible for the items shown in Grey. Please see GitHub links for full details.
  
-  * Implement a bare-bones Module based on Arduino Core that can compile for any target (no functionality,​ possibly in QEMU) +The goal of the GSoC project is the following:
-  * Implement a common peripheral from the Arduino API based on Zephyr such as [[https://​www.arduino.cc/​reference/​en/​language/​functions/​communication/​serial/​|Serial]] +
-  * Target one physical board, such as the Arduino Zero+
  
-DifficultyMedium+  * Prototype the basic HTTP 2.0 server using POSIX APIs (complexity analysis, instrumentation & telemetry, performance benchmarks) 
 +  * Port the basic HTTP server to Zephyr (initial Kconfig, tests, samples, documentation) 
 +  * Test Plan and Tests to demonstrate 3 mandatory featuresREST API, TLS, and Compressed Resources in Memory (CRiMe) 
 +  * Test Plan and Tests to demonstrate 1 feature from: JSON support, Filesystem support, Web-based Dashboard, or OAuth 
 +  * Generate test coverage reports using the [[https://​docs.zephyrproject.org/​latest/​guides/​test/​ztest.html|Zephyr Test Framework]] 
 +  * Demonstrate HTTP server functionality with one of Zephyr'​s many [[https://​docs.zephyrproject.org/​latest/​boards/​index.html|supported boards]] or [[https://​docs.zephyrproject.org/​latest/​guides/​networking/​qemu_user_setup.html|Qemu]]
  
-Skill Required: Zephyr RTOS, C++Arduino+The successful candidate must be able to demonstrate writing a simple socket-based program in that presents a "Helloworld!"​ web page to the user with a WireShark capture of the network traffic between the client and host.
  
-Mentors: Jonathan Beri - CEO of Golioth and Zephyr TSC (jberi AT golioth.io)Alvaro Viebrantz ​founding engineer ​and Google GDE (alvaro AT golioth.io)+Candidates must ensure that they have made a clear choice which feature they have chosen to implement ​(JSON supportFilesystem support, Web-based Dashboard, or OAuth) ​and explain how that feature would benefit the community.
  
-Code License: LGPL +Difficulty: ​High.
- +
- +
- +
- +
-==== Project #2   ​Apache Thrift Module for Zephyr ==== +
- +
-1 contributor full-size (350 hours). +
- +
-[[https://​github.com/​apache/​thrift|Apache Thrift]] is an [[https://​en.wikipedia.org/​wiki/​Interface_description_language|IDL]] specification,​[[https://​en.wikipedia.org/​wiki/​Remote_procedure_call|RPC]] framework, and code generator that abstracts away transport and protocol details to let developers focus on application logic.It works across all major operating systems, supports over 27 programming languages, 7 protocols, and 6 low-level transports. Originally [[https://​thrift.apache.org/​static/​files/​thrift-20070401.pdf|developed at Facebook in 2007]], it was subsequently shared with the Apache Software Foundation. +
- +
-{{thrift-layers.png?​400}} {{hello.thrift.png?​400}} +
- +
-Supporting Thrift in the Zephyr RTOS would benefit the community greatly. It would lead to new software and hardware technologies,​ new products, and additional means for cloud integration. Thrift can be used over virtually any transport as well and for that reason, it is a natural choice for the many different physical communication layers supported by Zephyr. +
- +
-The project idea is to get the proof-of-concept [[https://​github.com/​cfriedt/​thrift-for-zephyr|Thrift for Zephyr Module]] into shape for upstreaming. To achieve that, the contributor must: +
- +
-  * Perform additional integration for Thrift features (protocols, transports) +
-  * Author additional sample applications using [[https://​docs.zephyrproject.org/​latest/​boards/​index.html|supported boards]] or [[https://​docs.zephyrproject.org/​latest/​guides/​networking/​qemu_user_setup.html|Qemu]] +
-  * Author additional tests and generate coverage reports using the [[https://​docs.zephyrproject.org/​latest/​guides/​test/​ztest.html|Zephyr Test Framework]] +
-  * Ensure the module follows appropriate [[https://​docs.zephyrproject.org/​latest/​contribute/​coding_guidelines/​index.html|coding guidelines]] and satisfies [[https://​docs.zephyrproject.org/​latest/​guides/​modules.html|module requirements]] +
-  * Contribute any necessary improvements back to the Apache Thrift Project. +
-  * Contribute any necessary improvements back to the Zephyr Project. +
- +
-Difficulty: ​Medium.+
  
 Mentors: Mentors:
-  * Christopher ​Friedt - SWE / ASIC FW at Meta (cfriedt AT fb.com) +  * Chris Friedt - SWE / ASIC FW at Meta (cfriedt AT meta.com) - POSIX API Maintainer 
-  * Stephanos Ioannidis ​Zephyr CXX Subsystem Maintainer ​(root AT stephanos.io).+  * Robert Lubos SWE at Nordic Semiconductor ​(Robert.lubos ​AT nordicsemi.no- Network Subsystem Maintainer
  
-Skills that are Required: Zephyr RTOS,​C,​CXX,​Python+Skills that are Required: Zephyr RTOS,​C,​CXX,​Python,WireShark
  
 Code License: Apache 2.0. Code License: Apache 2.0.
 +==== Project #2 Implement a driver for Audio NXP Platform Driver in Zephyr ====
  
- +1 contributor full-size (350 hours).
-==== Project #3 Implement a driver for Audio NXP Platform Driver in Zephyr ====+
  
 [[https://​www.sofproject.org/​|Sound Open Firmware (SOF)]] is an open source audio Digital Signal Processing (DSP) firmware infrastructure and SDK. [[https://​www.sofproject.org/​|Sound Open Firmware (SOF)]] is an open source audio Digital Signal Processing (DSP) firmware infrastructure and SDK.
gsoc/2023-gsoc-zephyr.1674740741.txt.gz · Last modified: 2023/01/26 13:45 by IulianaProdan