SDKRuntime/i2s: more fixups

- make the record bounce buffer 2x the size of max collect buffer;
  this effectively enables double-buffering of rx'd data
- in audio_reset only stop record/play if rx/tx are enabled
- RMW registers when we want to set specific fields
- reset the RX/TX FIFO's when stopping record/play; this stops data
  from slopping over between record/play sessions
- make audio_record_collect (optionally) block and fill the entire
  recording buffer
- remove over-conservative audio_stop_playing call when starting a
  new play session; this may need to be revisited when, for example,
  a client issues back-to-back audio_play_start calls w/o first
  stopping play
- make audio_play_stop drain the TX FIFO; this is suboptimal because
  the tx_watermark irq (currently) posts on the TX_EMPTY semaphore
  using a nonsense condition

Change-Id: I49137b08afdce012858ba6efd09912372ba90d0c
2 files changed
tree: aed752ab3e13dea933e71b0bfd038fdcd21dc38d
  1. apps/
  2. docs/
  3. .gitignore
  4. CMakeDetermineRustCompiler.cmake
  5. CMakeRustCompiler.cmake.in
  6. CMakeRustInformation.cmake
  7. CMakeTestRustCompiler.cmake
  8. CONTRIBUTING.md
  9. easy-settings.cmake
  10. LICENSE
  11. preupload-clippy.sh
  12. PREUPLOAD.cfg
  13. README.md
  14. rustfmt.toml
  15. settings.cmake
README.md

Project Shodan: CantripOS

Shodan is a project to build a low-power secure embedded platform for Ambient ML applications. The target platform leverages RISC-V and OpenTitan.

The Shodan software includes a home-grown operating system named CantripOS, that runs on top of seL4 and (ignoring the seL4 kernel) is written almost entirely in Rust. CantripOS is comprised of a set of system services that are assembled using CAmkES and applications that are dynamically loaded into a constrained seL4 thread context and communicate with system services through an SDK runtime environment.

The CAmkES project that assembles the CantripOS system services is found in this git repository. It exists outside the seL4 source trees since it contains code not intended to go to upstream seL4.

The target-platform-dependent CAmkES assembly description is found in apps/system/platforms. It is built using the standard CAmkES build system and requires the CAmkES dependencies already be installed. Top-level configuration is found in easy-settings.cmake and settings.cmake with build-related configuration in build/kata.mk and nearby makefiles.

The following sections provide more in-depth documentation:

Getting started

CantripOS software organization

Target architecture dependencies

Target platform dependencies

Testing

Memory footprint

CantripOS capDL rootserver application

Depending on CantripOS Rust crates

Source Code Headers

Every file containing source code includes copyright and license information. For dependent / non-Google code these are inherited from the upstream repositories. If there are Google modifications you may find the Google Apache license found below.

Apache header:

Copyright 2022 Google LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.