Source code and associated files for the firmware used in the Tiresias project
Welcome to the Tiresias Firmware repository! This repository contains the source code and associated files for the firmware used in the Tiresias Project, a Brazilian research initiative conducted at EESC-USP by MSc students. The goal of the Tiresias Project is to develop a free and open-source national technology for hearing aid applications using off-the-shelf components.
The firmware is designed for the Nordic Semiconductor's nRF5340 SoC, running the Zephyr RTOS, and integrating the Analog Devices' ADAU1787 audio codec.
The Tiresias Project is an innovative effort to create an open-source and accessible hearing aid solution tailored to the needs of the Brazilian population. Our aim is to reduce dependency on expensive proprietary technologies by leveraging widely available components and state-of-the-art design practices.
- Connectivity: Utilizes the Nordic nRF5340 SoC for Bluetooth Low Energy (BLE) communication, ensuring seamless wireless connectivity.
- Audio Processing: Integrates the Analog Devices ADAU1787 Audio Codec for high-quality audio processing, essential for effective hearing aid functionality.
- Open-Source: All code and design files are open-source, allowing for community collaboration and transparency in the development process.
The project uses a nRF5340 SoC from Nordic Semiconductors. It contains an application proccessor for handling the main functions and a dedicated network processor for handling Bluetooth Low Energy (BLE) connectivity.
For digital audio processing, the ADAU1787 Audio Codec from Analog Devices provides speed and efficiency with its SigmaDSP audio processing core and FastDSP audio processing engine.
The ADAU1787 is controlled via I2C by the nRF5340, which also handles BLE connection for wirelles operation.
Controller (Application)
│
├── Audio Codec (Service)
│ ├── adau1787 (Module)
│ │ └── i2c (Zephyr Driver)
│ └── i2s_control (Module)
│ └── i2s (Zephyr Driver)
│
├── Bluetooth (Service)
│ └── ble_profile (Module)
│ └── ble (Zephyr Driver)
│
├── peripheral (Module)
│ └── gpio (Zephyr Driver)
│
└── storage (Module)
└── nvs (Zephyr Driver)
This project is licensed under the MIT License - see the LICENSE file for details.
- EESC-USP: For providing the infrastructure and support for this research.
- Nordic Semiconductor: For providing the nRF5340 Audio Development Kits (DK) used in this project and extensive support.
- Analog Devices: For providing the ADAU1787 codec used in this project and extensive support.
Felipe Pimenta Bernardo |
João Victor Colombari |
Bruno Henriques |
The following tasks show our progress and future development plans:
-
Implement Core Architecture: Set up the foundational system architecture
- Create modular thread-based design
- Implement message passing between modules
- Set up build system and project structure
-
Implement Storage Module: Create persistent storage for user settings
- Implement NVS-based storage service
- Add volume persistence functionality
- Create thread-safe asynchronous API
-
Implement Peripheral Module: Add support for buttons and LEDs
- Create button event handling with callbacks
- Implement LED control functionality
- Add thread-safe API for peripheral access
-
Implement ADAU1787 Driver: Create driver for the audio codec
- Implement I2C communication with the codec
- Add startup (boot) sequence
- Add register read/write functionality
- Implement Safeload write operations
- Implement SigmaDSP parameter loading
-
Implement I2S Control: Set up audio data transfer
- Configure I2S interface for stereo audio
- Implement block-based audio transfer
- Set up proper audio parameters (44.1kHz, 16-bit)
-
Implement Bluetooth Service: Add BLE functionality for wireless control of the hearing aid
- Configure Bluetooth in prj.conf
- Create BLE service module with custom hearing aid profile
- Implement secure pairing and bonding
- Integrate with controller for command routing
-
Complete Audio Codec Functionality: Finish the implementation of core audio features
- Implement volume control via I2C
- Add mute/unmute functionality
- Create different audio processing programs/presets
-
Add Power Management: Optimize for battery-powered operation
- Implement sleep modes when audio processing is not needed
- Add battery monitoring and low-battery alerts
- Optimize BLE connection parameters for power efficiency
-
Enhance User Interaction: Improve the user experience
- Map button functions to hearing aid-specific controls
- Add LED indicators for device status
- Implement user feedback mechanisms
-
Implement Adaptive Features: Add environment-aware functionality
- Develop noise detection and classification
- Create automatic program selection based on environment
- Implement adaptive gain control
This project follows Semantic Versioning with the format MAJOR.MINOR.PATCH
:
- MAJOR: Incremented for incompatible API changes
- MINOR: Incremented for backward-compatible functionality additions
- PATCH: Incremented for backward-compatible bug fixes
For more details on our versioning and release process, see VERSIONING.md.
All notable changes to the project are documented in the CHANGELOG.md file.
Contributions are welcome! Fork the repository, create a feature branch, make your changes, and open a pull request.
Please follow our versioning guidelines when contributing to the project.
For any inquiries or further information, please contact us on LinkedIn by clicking on our profiles above.
Thank you for your interest in the Tiresias project!