6 #include "sw/device/examples/teacup_demos/data/bitmaps.h"
8 #include "sw/device/lib/boards/teacup_v1_3_0/leds.h"
12 #include "sw/device/lib/peripherals/ssd1131_screen.h"
15 #include "sw/device/lib/testing/i2c_testutils.h"
16 #include "sw/device/lib/testing/pinmux_testutils.h"
17 #include "sw/device/lib/testing/test_framework/check.h"
22 OTTF_DEFINE_TEST_CONFIG();
28 static dif_gpio_t gpio;
29 static dif_pinmux_t pinmux;
30 static dif_spi_host_t spi_host;
41 kLedNumColorsInCycle = 4,
42 kLedCyclePauseMilliseconds = 500,
43 kLedBrightnessLowPercent = 5,
44 kLedBrightnessHighPercent = 40,
45 kLedBrightnessStepPercent = 5,
48 kScreenSpiDataCommandGpio = 1,
49 kScreenBitmapsInCycle = 1,
82 .flags = kDifPinmuxPadAttrPullResistorEnable |
83 kDifPinmuxPadAttrPullResistorUp,
87 .flags = kDifPinmuxPadAttrPullResistorEnable |
88 kDifPinmuxPadAttrPullResistorUp,
92 .flags = kDifPinmuxPadAttrPullResistorEnable |
93 kDifPinmuxPadAttrPullResistorUp,
104 static status_t peripheral_init(
void) {
143 pinmux_testutils_configure_pads(&pinmux, kPinmuxPadAttrs,
149 static status_t configure_led_i2c_controller(
void) {
152 TRY(leds_i2c_controller_configure(&i2c));
156 static status_t configure_screen_spi_controller(
void) {
180 static status_t setup_screen(
void) {
181 TRY(screen_toggle_power(&
screen,
true));
182 TRY(screen_toggle_pixel_mode(&
screen, kScreenPixelModeNormal));
183 TRY(screen_configure_color_format(&
screen, kScreenColorFormat65k2Byte));
184 TRY(screen_tx_cmd_or_data(&
screen, kScreenDeactivateScrolling,
185 kScreenOpTypeCommand));
186 TRY(screen_set_column_address_range(&
screen, 0, kScreenMaxCols - 1));
187 TRY(screen_set_row_address_range(&
screen, 0, kScreenMaxRows - 1));
193 CHECK_STATUS_OK(peripheral_init());
194 CHECK_STATUS_OK(configure_led_i2c_controller());
195 CHECK_STATUS_OK(configure_screen_spi_controller());
196 CHECK_STATUS_OK(setup_screen());
197 CHECK_STATUS_OK(leds_turn_all_on(&i2c));
200 uint8_t brightness_start =
201 (uint8_t)((
float)0xFF * (float)kLedBrightnessLowPercent / 100.0);
202 uint8_t brightness_end =
203 (uint8_t)((
float)0xFF * (float)kLedBrightnessHighPercent / 100.0);
204 uint8_t brightness_step =
205 (uint8_t)((
float)0xFF * (float)kLedBrightnessStepPercent / 100.0);
206 uint8_t curr_brightness = brightness_start;
215 for (
size_t i = 0; i < kDemoNumCycles; ++i) {
216 for (
size_t j = 0; j < kLedNumColorsInCycle; ++j) {
218 leds_set_color(&i2c, (i + j) % kNumTeacupLeds, kColorCycle[j]));
220 CHECK_STATUS_OK(leds_set_all_brightness(&i2c, curr_brightness));
222 screen_draw_bitmap(&
screen, kScreenBitmaps[i % kScreenBitmapsInCycle]));
223 curr_brightness += brightness_step;
224 if (curr_brightness >= brightness_end ||
225 curr_brightness <= brightness_start) {
226 brightness_step *= -1;
232 CHECK_STATUS_OK(screen_toggle_power(&
screen,
false));
233 CHECK_STATUS_OK(leds_turn_all_off(&i2c));