44#define CHIP_NAME "Solomon Systech SSD1306"
45#define MANUFACTURER_NAME "Solomon Systech"
46#define SUPPLY_VOLTAGE_MIN 1.65f
47#define SUPPLY_VOLTAGE_MAX 3.3f
48#define MAX_CURRENT 0.78f
49#define TEMPERATURE_MIN -40.0f
50#define TEMPERATURE_MAX 85.0f
51#define DRIVER_VERSION 2000
62#define SSD1306_CMD_LOWER_COLUMN_START_ADDRESS 0x00
63#define SSD1306_CMD_HIGHER_COLUMN_START_ADDRESS 0x10
64#define SSD1306_CMD_MEMORY_ADDRESSING_MODE 0x20
65#define SSD1306_CMD_SET_COLUMN_ADDRESS 0x21
66#define SSD1306_CMD_SET_PAGE_ADDRESS 0x22
67#define SSD1306_CMD_SET_FADE_OUT_AND_BLINKING 0x23
68#define SSD1306_CMD_RIGHT_HORIZONTAL_SCROLL 0x26
69#define SSD1306_CMD_LEFT_HORIZONTAL_SCROLL 0x27
70#define SSD1306_CMD_VERTICAL_RIGHT_HORIZONTAL_SCROLL 0x29
71#define SSD1306_CMD_VERTICAL_LEFT_HORIZONTAL_SCROLL 0x2A
72#define SSD1306_CMD_DEACTIVATE_SCROLL 0x2E
73#define SSD1306_CMD_ACTIVATE_SCROLL 0x2F
74#define SSD1306_CMD_DISPLAY_START_LINE 0x40
75#define SSD1306_CMD_CONTRAST_CONTROL 0x81
76#define SSD1306_CMD_CHARGE_PUMP_SETTING 0x8D
77#define SSD1306_CMD_COLUMN_0_MAPPED_TO_SEG0 0xA0
78#define SSD1306_CMD_COLUMN_127_MAPPED_TO_SEG0 0xA1
79#define SSD1306_CMD_VERTICAL_SCROLL_AREA 0xA3
80#define SSD1306_CMD_ENTIRE_DISPLAY_OFF 0xA4
81#define SSD1306_CMD_ENTIRE_DISPLAY_ON 0xA5
82#define SSD1306_CMD_NORMAL_DISPLAY 0xA6
83#define SSD1306_CMD_INVERSE_DISPLAY 0xA7
84#define SSD1306_CMD_MULTIPLEX_RATIO 0xA8
85#define SSD1306_CMD_DISPLAY_OFF 0xAE
86#define SSD1306_CMD_DISPLAY_ON 0xAF
87#define SSD1306_CMD_PAGE_ADDR 0xB0
88#define SSD1306_CMD_SCAN_DIRECTION_COM0_START 0xC0
89#define SSD1306_CMD_SCAN_DIRECTION_COMN_1_START 0xC8
90#define SSD1306_CMD_DISPLAY_OFFSET 0xD3
91#define SSD1306_CMD_DISPLAY_CLOCK_DIVIDE 0xD5
92#define SSD1306_CMD_SET_ZOOM_IN 0xD6
93#define SSD1306_CMD_PRE_CHARGE_PERIOD 0xD9
94#define SSD1306_CMD_COM_PINS_CONF 0xDA
95#define SSD1306_CMD_COMH_DESLECT_LEVEL 0xDB
96#define SSD1306_CMD_NOP 0xE3
108static uint8_t a_ssd1306_write_byte(
ssd1306_handle_t *handle, uint8_t data, uint8_t cmd)
171static uint8_t a_ssd1306_multiple_write_byte(
ssd1306_handle_t *handle, uint8_t *data, uint8_t len, uint8_t cmd)
234static uint8_t a_ssd1306_gram_draw_point(
ssd1306_handle_t *handle, uint8_t x, uint8_t y, uint8_t data)
245 handle->
gram[x][pos] |= temp;
249 handle->
gram[x][pos] &= ~temp;
268static uint8_t a_ssd1306_gram_show_char(
ssd1306_handle_t *handle, uint8_t x, uint8_t y, uint8_t chr, uint8_t size, uint8_t mode)
272 uint8_t csize = (size / 8 + ((size % 8) ? 1 : 0)) * (size / 2);
275 for (t = 0; t < csize; t++)
279 temp = gsc_ssd1306_ascii_1206[chr][t];
283 temp = gsc_ssd1306_ascii_1608[chr][t];
287 temp = gsc_ssd1306_ascii_2412[chr][t];
293 for (t1 = 0; t1 < 8; t1++)
295 if ((temp & 0x80) != 0)
297 if (a_ssd1306_gram_draw_point(handle, x, y, mode) != 0)
304 if (a_ssd1306_gram_draw_point(handle, x, y, !mode) != 0)
311 if ((y - y0) == size)
348 for (i = 0; i < 8; i++)
352 handle->
debug_print(
"ssd1306: write byte failed.\n");
358 handle->
debug_print(
"ssd1306: write byte failed.\n");
364 handle->
debug_print(
"ssd1306: write byte failed.\n");
368 for (n = 0; n < 128; n++)
370 handle->
gram[n][i] = 0x00;
373 handle->
debug_print(
"ssd1306: write byte failed.\n");
407 for (i = 0; i < 8; i++)
411 handle->
debug_print(
"ssd1306: write byte failed.\n");
417 handle->
debug_print(
"ssd1306: write byte failed.\n");
423 handle->
debug_print(
"ssd1306: write byte failed.\n");
427 for (n = 0; n < 128; n++)
431 handle->
debug_print(
"ssd1306: write byte failed.\n");
469 if ((x > 127) || (y > 63))
471 handle->
debug_print(
"ssd1306: x or y is invalid.\n");
481 handle->
gram[x][pos] |= temp;
485 handle->
gram[x][pos] &= ~temp;
489 handle->
debug_print(
"ssd1306: write byte failed.\n");
495 handle->
debug_print(
"ssd1306: write byte failed.\n");
501 handle->
debug_print(
"ssd1306: write byte failed.\n");
507 handle->
debug_print(
"ssd1306: write byte failed.\n");
545 if ((x > 127) || (y > 63))
547 handle->
debug_print(
"ssd1306: x or y is invalid.\n");
555 if ((handle->
gram[x][pos] & temp) != 0)
595 if ((x > 127) || (y > 63))
597 handle->
debug_print(
"ssd1306: x or y is invalid.\n");
607 handle->
gram[x][pos] |= temp;
611 handle->
gram[x][pos] &= ~temp;
645 if ((x > 127) || (y > 63))
647 handle->
debug_print(
"ssd1306: x or y is invalid.\n");
655 if ((handle->
gram[x][pos] & temp) != 0)
694 if((x > 127) || (y > 63))
696 handle->
debug_print(
"ssd1306: x or y is invalid.\n");
701 while ((len != 0) && (*str <=
'~') && (*str >=
' '))
703 if (x > (127 - (font / 2)))
712 if (a_ssd1306_gram_show_char(handle, x, y, *str, font, color) != 0)
716 x += (uint8_t)(font / 2);
754 if ((left > 127) || (top > 63))
756 handle->
debug_print(
"ssd1306: left or top is invalid.\n");
760 if ((right > 127) || (bottom > 63))
762 handle->
debug_print(
"ssd1306: right or bottom is invalid.\n");
766 if ((left > right) || (top > bottom))
768 handle->
debug_print(
"ssd1306: left > right or top > bottom.\n");
773 for (x = left; x <= right; x++)
775 for (y = top; y <= bottom; y++)
777 if (a_ssd1306_gram_draw_point(handle, x, y, color) != 0)
817 if ((left > 127) || (top > 63))
819 handle->
debug_print(
"ssd1306: left or top is invalid.\n");
823 if ((right > 127) || (bottom > 63))
825 handle->
debug_print(
"ssd1306: right or bottom is invalid.\n");
829 if ((left > right) || (top > bottom))
831 handle->
debug_print(
"ssd1306: left > right or top > bottom.\n");
836 for (x = left; x <= right; x++)
838 for (y = top; y <= bottom; y++)
840 if (a_ssd1306_gram_draw_point(handle, x, y, *img) != 0)
876 handle->
debug_print(
"ssd1306: iic_init is null.\n");
882 handle->
debug_print(
"ssd1306: iic_deinit is null.\n");
888 handle->
debug_print(
"ssd1306: iic_write is null.\n");
894 handle->
debug_print(
"ssd1306: spi_init is null.\n");
900 handle->
debug_print(
"ssd1306: spi_deinit is null.\n");
906 handle->
debug_print(
"ssd1306: spi_write_cmd is null.\n");
912 handle->
debug_print(
"ssd1306: delay_ms is null.\n");
918 handle->
debug_print(
"ssd1306: spi_cmd_data_gpio_init is null.\n");
924 handle->
debug_print(
"ssd1306: spi_cmd_data_gpio_deinit is null.\n");
930 handle->
debug_print(
"ssd1306: spi_cmd_data_gpio_write is null.\n");
936 handle->
debug_print(
"ssd1306: reset_gpio_init is null.\n");
942 handle->
debug_print(
"ssd1306: reset_gpio_deinit is null.\n");
948 handle->
debug_print(
"ssd1306: reset_gpio_write is null.\n");
955 handle->
debug_print(
"ssd1306: spi cmd data gpio init failed.\n");
961 handle->
debug_print(
"ssd1306: reset gpio init failed.\n");
968 handle->
debug_print(
"ssd1306: reset gpio write failed.\n");
977 handle->
debug_print(
"ssd1306: reset gpio write failed.\n");
987 handle->
debug_print(
"ssd1306: iic init failed.\n");
998 handle->
debug_print(
"ssd1306: spi init failed.\n");
1007 handle->
debug_print(
"ssd1306: interface is invalid.\n");
1046 buf[1] = 0x10 | (0 << 2);
1047 if (a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 2,
SSD1306_CMD) != 0)
1049 handle->
debug_print(
"ssd1306: write command failed.\n");
1055 handle->
debug_print(
"ssd1306: write command failed.\n");
1061 handle->
debug_print(
"ssd1306: reset gpio deinit failed.\n");
1067 handle->
debug_print(
"ssd1306: spi cmd data gpio deinit failed.\n");
1075 handle->
debug_print(
"ssd1306: iic deinit failed.\n");
1084 handle->
debug_print(
"ssd1306: spi deinit failed.\n");
1091 handle->
debug_print(
"ssd1306: interface is invalid.\n");
1116 handle->
iic_spi = (uint8_t)interface;
1158 handle->
iic_addr = (uint8_t)addr_pin;
1208 handle->
debug_print(
"ssd1306: addr is invalid.\n");
1240 handle->
debug_print(
"ssd1306: addr is invalid.\n");
1275 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 2,
SSD1306_CMD);
1304 if (start_addr > 0x7F)
1306 handle->
debug_print(
"ssd1306: start addr is invalid.\n");
1310 if (end_addr > 0x7F)
1312 handle->
debug_print(
"ssd1306: end addr is invalid.\n");
1318 buf[1] = start_addr & 0x7F;
1319 buf[2] = end_addr & 0x7F;
1321 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 3,
SSD1306_CMD);
1350 if (start_addr > 0x07)
1352 handle->
debug_print(
"ssd1306: start addr is invalid.\n");
1356 if (end_addr > 0x07)
1358 handle->
debug_print(
"ssd1306: end addr is invalid.\n");
1364 buf[1] = start_addr & 0x07;
1365 buf[2] = end_addr & 0x07;
1367 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 3,
SSD1306_CMD);
1397 handle->
debug_print(
"ssd1306: frames is invalid.\n");
1403 buf[1] = (uint8_t)((mode << 4) | (frames & 0x0F));
1405 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 2,
SSD1306_CMD);
1436 if (start_page_addr > 0x07)
1438 handle->
debug_print(
"ssd1306: start page addr is invalid.\n");
1442 if (end_page_addr > 0x07)
1444 handle->
debug_print(
"ssd1306: end page addr is invalid.\n");
1451 buf[2] = start_page_addr & 0x07;
1452 buf[3] = frames & 0x07;
1453 buf[4] = end_page_addr & 0x07;
1457 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 7,
SSD1306_CMD);
1488 if (start_page_addr > 0x07)
1490 handle->
debug_print(
"ssd1306: start_page_addr is invalid.\n");
1494 if (end_page_addr > 0x07)
1496 handle->
debug_print(
"ssd1306: end_page_addr is invalid.\n");
1503 buf[2] = start_page_addr & 0x07;
1504 buf[3] = frames & 0x07;
1505 buf[4] = end_page_addr & 0x07;
1509 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 7,
SSD1306_CMD);
1542 if (start_page_addr > 0x07)
1544 handle->
debug_print(
"ssd1306: start_page_addr is invalid.\n");
1548 if (end_page_addr > 0x07)
1550 handle->
debug_print(
"ssd1306: end_page_addr is invalid.\n");
1556 handle->
debug_print(
"ssd1306: rows is invalid.\n");
1563 buf[2] = start_page_addr & 0x07;
1564 buf[3] = frames & 0x07;
1565 buf[4] = end_page_addr & 0x07;
1566 buf[5] = rows & 0x3F;
1568 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 6,
SSD1306_CMD);
1601 if (start_page_addr > 0x07)
1603 handle->
debug_print(
"ssd1306: start_page_addr is invalid.\n");
1607 if (end_page_addr > 0x07)
1609 handle->
debug_print(
"ssd1306: end_page_addr is invalid.\n");
1615 handle->
debug_print(
"ssd1306: rows is invalid.\n");
1622 buf[2] = start_page_addr & 0x07;
1623 buf[3] = frames & 0x07;
1624 buf[4] = end_page_addr & 0x07;
1625 buf[5] = rows & 0x3F;
1627 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 6,
SSD1306_CMD);
1702 handle->
debug_print(
"ssd1306: line is invalid.\n");
1737 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 2,
SSD1306_CMD);
1765 buf[1] = (uint8_t)(0x10 | (enable << 2));
1767 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 2,
SSD1306_CMD);
1829 if (start_row > 0x3F)
1831 handle->
debug_print(
"ssd1306: start_row is invalid.\n");
1837 handle->
debug_print(
"ssd1306: end_row is invalid.\n");
1841 if (end_row > start_row)
1843 handle->
debug_print(
"ssd1306: end_row > start_row.\n");
1852 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 3,
SSD1306_CMD);
1944 if (multiplex < 0x0F)
1946 handle->
debug_print(
"ssd1306: multiplex is too small.\n");
1950 if (multiplex > 0x3F)
1952 handle->
debug_print(
"ssd1306: multiplex is too large.\n");
1960 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 2,
SSD1306_CMD);
2019 handle->
debug_print(
"ssd1306: addr is invalid.\n");
2085 handle->
debug_print(
"ssd1306: offset is invalid.\n");
2093 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 2,
SSD1306_CMD);
2122 if (oscillator_frequency> 0x0F)
2124 handle->
debug_print(
"ssd1306: oscillator frequency is invalid.\n");
2128 if (clock_divide> 0x0F)
2130 handle->
debug_print(
"ssd1306: clock divide is invalid.\n");
2136 buf[1] = (oscillator_frequency<<4) | clock_divide;
2138 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 2,
SSD1306_CMD);
2168 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 2,
SSD1306_CMD);
2197 if (phase1_period> 0x0F)
2199 handle->
debug_print(
"ssd1306: phase1 period is invalid.\n");
2203 if (phase2_period> 0x0F)
2205 handle->
debug_print(
"ssd1306: phase2 period is invalid.\n");
2211 buf[1] = (phase2_period << 4) | phase1_period;
2213 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 2,
SSD1306_CMD);
2242 buf[1] = (uint8_t)((conf<<4) | (remap<<5) |0x02);
2244 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 2,
SSD1306_CMD);
2272 buf[1] = (uint8_t)(level << 4);
2274 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, 2,
SSD1306_CMD);
2300 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, len,
SSD1306_CMD);
2326 return a_ssd1306_multiple_write_byte(handle, (uint8_t *)buf, len,
SSD1306_DATA);
#define SSD1306_CMD_DEACTIVATE_SCROLL
#define SSD1306_CMD_SET_PAGE_ADDRESS
#define SSD1306_CMD_INVERSE_DISPLAY
#define SSD1306_CMD_DISPLAY_OFFSET
#define SSD1306_CMD_DISPLAY_START_LINE
#define SSD1306_CMD_SCAN_DIRECTION_COM0_START
#define SSD1306_CMD_COMH_DESLECT_LEVEL
#define SSD1306_CMD_DISPLAY_CLOCK_DIVIDE
#define SSD1306_CMD_PAGE_ADDR
#define SSD1306_CMD_SCAN_DIRECTION_COMN_1_START
#define SSD1306_CMD_DISPLAY_OFF
#define SUPPLY_VOLTAGE_MAX
#define SSD1306_CMD_DISPLAY_ON
#define SSD1306_CMD_RIGHT_HORIZONTAL_SCROLL
#define SSD1306_CMD_LOWER_COLUMN_START_ADDRESS
chip command definition
#define SSD1306_CMD_MEMORY_ADDRESSING_MODE
#define SSD1306_CMD_HIGHER_COLUMN_START_ADDRESS
#define SSD1306_CMD_LEFT_HORIZONTAL_SCROLL
#define SSD1306_CMD_ENTIRE_DISPLAY_OFF
#define SSD1306_CMD_SET_COLUMN_ADDRESS
#define SSD1306_CMD_NORMAL_DISPLAY
#define SSD1306_CMD_COM_PINS_CONF
#define SSD1306_CMD_ENTIRE_DISPLAY_ON
#define SSD1306_CMD
chip command data definition
#define SSD1306_CMD_MULTIPLEX_RATIO
#define MANUFACTURER_NAME
#define SUPPLY_VOLTAGE_MIN
#define SSD1306_CMD_VERTICAL_LEFT_HORIZONTAL_SCROLL
#define SSD1306_CMD_SET_FADE_OUT_AND_BLINKING
#define SSD1306_CMD_CONTRAST_CONTROL
#define SSD1306_CMD_CHARGE_PUMP_SETTING
#define SSD1306_CMD_ACTIVATE_SCROLL
#define CHIP_NAME
chip information definition
#define SSD1306_CMD_COLUMN_0_MAPPED_TO_SEG0
#define SSD1306_CMD_VERTICAL_RIGHT_HORIZONTAL_SCROLL
#define SSD1306_CMD_SET_ZOOM_IN
#define SSD1306_CMD_COLUMN_127_MAPPED_TO_SEG0
#define SSD1306_CMD_VERTICAL_SCROLL_AREA
#define SSD1306_CMD_PRE_CHARGE_PERIOD
driver ssd1306 header file
driver ssd1306 font header file
uint8_t ssd1306_write_point(ssd1306_handle_t *handle, uint8_t x, uint8_t y, uint8_t data)
write a point
struct ssd1306_info_s ssd1306_info_t
ssd1306 information structure definition
ssd1306_left_right_remap_t
ssd1306 left right remap enumeration definition
uint8_t ssd1306_set_contrast(ssd1306_handle_t *handle, uint8_t contrast)
set the display contrast
uint8_t ssd1306_set_page_address_range(ssd1306_handle_t *handle, uint8_t start_addr, uint8_t end_addr)
set the page address range
uint8_t ssd1306_gram_read_point(ssd1306_handle_t *handle, uint8_t x, uint8_t y, uint8_t *data)
read a point from the gram
uint8_t ssd1306_set_zoom_in(ssd1306_handle_t *handle, ssd1306_zoom_in_t zoom)
set the display zoom in
uint8_t ssd1306_set_scan_direction(ssd1306_handle_t *handle, ssd1306_scan_direction_t dir)
set the scan direction
ssd1306_scan_direction_t
ssd1306 scan direction enumeration definition
uint8_t ssd1306_set_precharge_period(ssd1306_handle_t *handle, uint8_t phase1_period, uint8_t phase2_period)
set the pre charge period
uint8_t ssd1306_gram_write_point(ssd1306_handle_t *handle, uint8_t x, uint8_t y, uint8_t data)
write a point in the gram
uint8_t ssd1306_set_memory_addressing_mode(ssd1306_handle_t *handle, ssd1306_memory_addressing_mode_t mode)
set the memory addressing mode
ssd1306_interface_t
ssd1306 interface enumeration definition
struct ssd1306_handle_s ssd1306_handle_t
ssd1306 handle structure definition
ssd1306_display_t
ssd1306 display enumeration definition
uint8_t ssd1306_set_addr_pin(ssd1306_handle_t *handle, ssd1306_address_t addr_pin)
set the chip iic address
ssd1306_charge_pump_t
ssd1306 charge pump enumeration definition
ssd1306_memory_addressing_mode_t
ssd1306 memory addressing mode enumeration definition
uint8_t ssd1306_gram_draw_picture(ssd1306_handle_t *handle, uint8_t left, uint8_t top, uint8_t right, uint8_t bottom, uint8_t *img)
draw a picture in the gram
ssd1306_entire_display_t
ssd1306 entire display enumeration definition
ssd1306_pin_conf_t
ssd1306 pin conf enumeration definition
uint8_t ssd1306_info(ssd1306_info_t *info)
get chip's information
ssd1306_font_t
ssd1306 font enumeration definition
ssd1306_segment_column_remap_t
ssd1306 segment column remap enumeration definition
uint8_t ssd1306_set_vertical_scroll_area(ssd1306_handle_t *handle, uint8_t start_row, uint8_t end_row)
set the vertical scroll area
uint8_t ssd1306_gram_fill_rect(ssd1306_handle_t *handle, uint8_t left, uint8_t top, uint8_t right, uint8_t bottom, uint8_t color)
fill a rectangle in the gram
uint8_t ssd1306_set_charge_pump(ssd1306_handle_t *handle, ssd1306_charge_pump_t enable)
enable or disable the charge pump
uint8_t ssd1306_set_page_address(ssd1306_handle_t *handle, uint8_t addr)
set the page address
uint8_t ssd1306_get_interface(ssd1306_handle_t *handle, ssd1306_interface_t *interface)
get the chip interface
ssd1306_zoom_in_t
ssd1306 zoom in enumeration definition
uint8_t ssd1306_read_point(ssd1306_handle_t *handle, uint8_t x, uint8_t y, uint8_t *data)
read a point
uint8_t ssd1306_set_display_mode(ssd1306_handle_t *handle, ssd1306_display_mode_t mode)
set the display mode
uint8_t ssd1306_set_display_offset(ssd1306_handle_t *handle, uint8_t offset)
set the display offset
uint8_t ssd1306_set_display(ssd1306_handle_t *handle, ssd1306_display_t on_off)
enable or disable the display
uint8_t ssd1306_activate_scroll(ssd1306_handle_t *handle)
activate the scroll
uint8_t ssd1306_set_multiplex_ratio(ssd1306_handle_t *handle, uint8_t multiplex)
set the multiplex ratio
uint8_t ssd1306_set_display_start_line(ssd1306_handle_t *handle, uint8_t l)
set the display start line
uint8_t ssd1306_deactivate_scroll(ssd1306_handle_t *handle)
deactivate the scroll
ssd1306_address_t
ssd1306 address pin enumeration definition
uint8_t ssd1306_get_addr_pin(ssd1306_handle_t *handle, ssd1306_address_t *addr_pin)
get the chip iic address
uint8_t ssd1306_set_high_column_start_address(ssd1306_handle_t *handle, uint8_t addr)
set the high column start address
uint8_t ssd1306_set_display_clock(ssd1306_handle_t *handle, uint8_t oscillator_frequency, uint8_t clock_divide)
set the display clock
uint8_t ssd1306_deinit(ssd1306_handle_t *handle)
close the chip
ssd1306_display_mode_t
ssd1306 display mode enumeration definition
uint8_t ssd1306_set_segment_remap(ssd1306_handle_t *handle, ssd1306_segment_column_remap_t remap)
set the segment remap
ssd1306_scroll_frame_t
ssd1306 scroll frame enumeration definition
uint8_t ssd1306_set_right_horizontal_scroll(ssd1306_handle_t *handle, uint8_t start_page_addr, uint8_t end_page_addr, ssd1306_scroll_frame_t frames)
set the right horizontal scroll
uint8_t ssd1306_set_com_pins_hardware_conf(ssd1306_handle_t *handle, ssd1306_pin_conf_t conf, ssd1306_left_right_remap_t remap)
set the hardware com pins
uint8_t ssd1306_gram_write_string(ssd1306_handle_t *handle, uint8_t x, uint8_t y, char *str, uint16_t len, uint8_t color, ssd1306_font_t font)
draw a string in the gram
uint8_t ssd1306_set_left_horizontal_scroll(ssd1306_handle_t *handle, uint8_t start_page_addr, uint8_t end_page_addr, ssd1306_scroll_frame_t frames)
set the left horizontal scroll
uint8_t ssd1306_set_fade_blinking_mode(ssd1306_handle_t *handle, ssd1306_fade_blinking_mode_t mode, uint8_t frames)
set the fade blinking mode
uint8_t ssd1306_clear(ssd1306_handle_t *handle)
clear the screen
uint8_t ssd1306_set_deselect_level(ssd1306_handle_t *handle, ssd1306_deselect_level_t level)
set the deselect level
uint8_t ssd1306_set_column_address_range(ssd1306_handle_t *handle, uint8_t start_addr, uint8_t end_addr)
set the column address range
uint8_t ssd1306_set_vertical_left_horizontal_scroll(ssd1306_handle_t *handle, uint8_t start_page_addr, uint8_t end_page_addr, uint8_t rows, ssd1306_scroll_frame_t frames)
set the vertical left horizontal scroll
uint8_t ssd1306_gram_update(ssd1306_handle_t *handle)
update the gram data
uint8_t ssd1306_set_low_column_start_address(ssd1306_handle_t *handle, uint8_t addr)
set the low column start address
ssd1306_fade_blinking_mode_t
ssd1306 fade blinking mode enumeration definition
uint8_t ssd1306_set_entire_display(ssd1306_handle_t *handle, ssd1306_entire_display_t enable)
enable or disable the entire display
ssd1306_deselect_level_t
ssd1306 deselect level enumeration definition
uint8_t ssd1306_set_vertical_right_horizontal_scroll(ssd1306_handle_t *handle, uint8_t start_page_addr, uint8_t end_page_addr, uint8_t rows, ssd1306_scroll_frame_t frames)
set the vertical right horizontal scroll
uint8_t ssd1306_set_interface(ssd1306_handle_t *handle, ssd1306_interface_t interface)
set the chip interface
uint8_t ssd1306_init(ssd1306_handle_t *handle)
initialize the chip
uint8_t ssd1306_write_data(ssd1306_handle_t *handle, uint8_t *buf, uint8_t len)
write the register data
uint8_t ssd1306_write_cmd(ssd1306_handle_t *handle, uint8_t *buf, uint8_t len)
write the register command
uint8_t(* spi_init)(void)
void(* delay_ms)(uint32_t ms)
uint8_t(* spi_cmd_data_gpio_deinit)(void)
uint8_t(* reset_gpio_deinit)(void)
void(* debug_print)(const char *const fmt,...)
uint8_t(* iic_init)(void)
uint8_t(* spi_deinit)(void)
uint8_t(* reset_gpio_init)(void)
uint8_t(* spi_cmd_data_gpio_init)(void)
uint8_t(* spi_write_cmd)(uint8_t *buf, uint16_t len)
uint8_t(* iic_write)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
uint8_t(* spi_cmd_data_gpio_write)(uint8_t value)
uint8_t(* reset_gpio_write)(uint8_t value)
uint8_t(* iic_deinit)(void)
float supply_voltage_max_v
char manufacturer_name[32]
float supply_voltage_min_v