Comments (5)
Ideally it should be possible to implement support for a device through only one device class that could work in both sync and async mode. But it is not clear at all how that could be done.
In the worst case, we would have to provide 2 classes per device (but they should be located in the same source file, then).
from fast-arduino-lib.
Main idea to support asynchronous I2C API is to first introduce the concept of futures (aka promises) in FastArduino.
from fast-arduino-lib.
Unfortunately, after several trials, asynchronous I2C mode will be reserved to ATmega family and will not work on ATtiny (USI is not good enough to work as master in a proper async way).
On the bright side, after several proofs of concept, I start to get very positive results and support should be ready soon (end of June hopefully).
The latest PoC already allows:
- target-agnostic I2C device implementation (asynchronous mode is simulated for ATtiny MCU)
- combining sync and async API in one I2C device class (sync API calls async API and awaits)
Next steps will consist in:
- fine-tuning PoC code
- rework all I2C devices to use new async API
- add API doc to new I2C Handler
- update tutorial on implementing new I2C devices
- remove old API
- merge all to master branch
from fast-arduino-lib.
Quick status (on specific Git branch, not on master):
- PoC code for async I2C finalized
- all I2C devices have been ported to new async I2C library, and tested on UNO
However, I have an issue with generated code size (partly due to Async I2C implementation itself, and also Future implementation). Of course, using asynchronous I2C, you shall accept the extra cost for it.
But this extra cost is also present for I2C devices sync API (which uses async API). I would like to remove this extra cost for programs that exclusively use sync API. But this is not obvious unfortunately. I need to study possible options for that.
What all this means is that, unfortunately, I will have to postpone milestone 1.6 at least one month.
from fast-arduino-lib.
Implemented on master branch at commit 8e39e6d
Will be released in v1.6
from fast-arduino-lib.
Related Issues (20)
- Simplify some FastArduino API/implementation HOT 2
- Improve API documentation by fixing doxygen warnings HOT 1
- Add support for Grove 125KHz RFID reader HOT 1
- Improve software UART for slow rates
- Add support for RC522 (RFID chip) HOT 1
- Add support for Nokia 5110 LCD display HOT 1
- Add support for ILI9340 color display
- The Functor in I2C implementation appears to not working as expected HOT 4
- Allow SPI to work without a CS pin HOT 2
- Add support for Arduino LCD HOT 1
- Add support for Adafruit Bluefruit LE SPI Friend
- Add FastDigialPin as type HOT 3
- Improve APIDOC to properly generate sub-namespace docs HOT 1
- Compatibility with avr libraries HOT 3
- Renaming library... HOT 2
- Allow real Timer suspend/resume and set timer value HOT 3
- Add support for ATmega644 and 1284 HOT 3
- Queue buffer size waste improvement needed (was: Queue full bug) HOT 6
- Remove included streams.h to avoid conflicts with empty_streams.h HOT 1
- Review (replace?) virtual methods in ostreambuf and futures HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fast-arduino-lib.