5 #include "sw/device/lib/peripherals/ssd1131_screen.h"
7 #include "sw/device/examples/teacup_demos/data/bitmaps.h"
8 #include "sw/device/lib/base/status.h"
14 screen_op_type_t op_type) {
28 TRY(screen_tx_cmd_or_data(
screen, kScreenSetDisplayOn,
29 kScreenOpTypeCommand));
31 TRY(screen_tx_cmd_or_data(
screen, kScreenSetDisplayOff,
32 kScreenOpTypeCommand));
38 screen_pixel_mode_t mode) {
39 TRY(screen_tx_cmd_or_data(
screen, (uint8_t)mode, kScreenOpTypeCommand));
44 uint8_t start_address,
45 uint8_t end_address) {
46 if (start_address >= kScreenMaxCols || end_address >= kScreenMaxCols) {
47 return INVALID_ARGUMENT();
50 TRY(screen_tx_cmd_or_data(
screen, kScreenSetColumnAddress,
51 kScreenOpTypeCommand));
52 TRY(screen_tx_cmd_or_data(
screen, start_address, kScreenOpTypeCommand));
53 TRY(screen_tx_cmd_or_data(
screen, end_address, kScreenOpTypeCommand));
59 uint8_t start_address,
60 uint8_t end_address) {
61 if (start_address >= kScreenMaxRows || end_address >= kScreenMaxRows) {
62 return INVALID_ARGUMENT();
65 TRY(screen_tx_cmd_or_data(
screen, kScreenSetRowAddress,
66 kScreenOpTypeCommand));
67 TRY(screen_tx_cmd_or_data(
screen, start_address, kScreenOpTypeCommand));
68 TRY(screen_tx_cmd_or_data(
screen, end_address, kScreenOpTypeCommand));
74 screen_color_format_t format) {
76 uint8_t remap_and_color_format_value = (uint8_t)(format << 6 | 0x20);
77 TRY(screen_tx_cmd_or_data(
screen, kScreenSetRemapAndColorFormat,
78 kScreenOpTypeCommand));
79 TRY(screen_tx_cmd_or_data(
screen, remap_and_color_format_value,
80 kScreenOpTypeCommand));
87 if (bitmap->
num_rows > kScreenMaxRows || bitmap->
num_cols > kScreenMaxCols) {
88 return INVALID_ARGUMENT();
91 uint8_t col_start_address = (uint8_t)(kScreenMaxCols - bitmap->
num_cols) / 2;
92 uint8_t col_end_address = col_start_address + (uint8_t)bitmap->
num_cols - 1;
93 uint8_t row_start_address = (uint8_t)(kScreenMaxRows - bitmap->
num_rows) / 2;
94 uint8_t row_end_address = row_start_address + (uint8_t)bitmap->
num_rows - 1;
96 for (
size_t r = 0; r < kScreenMaxRows; ++r) {
97 for (
size_t c = 0; c < kScreenMaxCols; ++c) {
99 if (c >= col_start_address && c <= col_end_address &&
100 r >= row_start_address && r <= row_end_address) {
101 size_t adjusted_r = r - row_start_address;
102 size_t adjusted_c = c - col_start_address;
106 TRY(screen_tx_cmd_or_data(
screen, (uint8_t)((curr_value & 0xff00) >> 8),
108 TRY(screen_tx_cmd_or_data(
screen, (uint8_t)(curr_value & 0x00ff),