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));