Create `print_u8()` helper function to print `u8` primitives to
lcd. Refactor contrast and backlight variables to also keep them in a
global `AtomicU8`.
To reduce length of `main.rs` and therefor improve readability create
source files for:
- Assets (`assets.rs`): Contains all graphical assets such as the
splash screen assets, symbols and the symbol table.
- LCD (`lcd.rs`): Contains all lower level things regarding the LCD
such as the `Lcd` struct and its implementations.
- Screen (`screen/mod.rs`):
- Splash (`screen/splash.rs`)
- Home (`screen/home.rs`)
- Setup (`screen/setup.rs`)
In the future it would probably make sense to move the LCD module into
the screen module.
To create a setup screen more symbols are created and added to the
symbol table. Helper functions are added to draw homogenous areas onto
the display. Add two new fields `Click` and `Back` to the `Input`
enum. Adapt functions already handling input to those new kinds of
input. Add the setup screen construct. Add global atomics to handle
the button and the timer for handling the back input when the button
is pressed until the timer one overflows. Button press and the timer
are handled via interrupts.
Add several symbols and a symbol table in an ascii order. Add the
`print()` and `print_inverted()` functions to be able to draw strings,
"black on white" as well as "white on black" onto the display. Add a
`HomeScreen` which also saves the state of which selection is
active. To save the screen state and also make it accessible globally
use a `RefCell` contained in a `Mutex`.
Also update the build dependencies.
It has to be decided what kind of tooling should be used, for now
cargo-make is used. This will probably be changed to use the tools
provided by [probe.rs](https://probe.rs).
- Add registers where PLL_A (MSNA) and PLL_B (MSNB) start.
- Create screens to edit the PLLs and add their entries to the home
screen.
- Use a struct for keeping the PLL configs.
- For editing such big numbers make the digits selctable.
- Create utility function for calculating 10 to the power of `n`.
The "demo" from Adafruits Si5351 library is used to produce a working
proof of concept which sets PLLA to 720MHz, PLLB to 705MHz and then
Multisynth0, Multisynth1 and Multisynth2 to 120MHz, 12MHz and 13.56MHz
respectively.
Add `TODO` comment to optimize waiting times, fix capitalization in
comments, add blank line and break up long lines. To improve code
semantics `lcd_home()` and `lcd_setup()` were renamed to `draw_home()`
and `draw_setup()` respectively. Improve ordering of function calls in
`main()`.
To support basic TWI support some defines are created to keep track of
port, pins and address. Fundamental procedures such as:
- `twi_error()`
- `twi_start()`
- `twi_transmit()`
- `twi_receive()`
- `twi_stop()`
are created. Those procedures are used in `twi_read_register()` and
`twi_write_register()` which read and write data from and to registers
respectively. Lastly the TWI bit rate is set to 200kHz.
Configure fuses for the `fuses` target in Makefile to disable
`CKDIV8`. Adapt PWM generation in `lcd_update_backlight()` to new
clock division factor, as well as interrupt handling, debouncing and
dechattering.
This also enables partially lower PWM frequencies (between off and
former lowest PWM setting) for a dimmer lcd backlight.