221 lines
6.4 KiB
C++
221 lines
6.4 KiB
C++
/*
|
|
* Copyright (c) 2014-2017 Cesanta Software Limited
|
|
* All rights reserved
|
|
*
|
|
* Arduino Adafruit_SSD1306 library API wrapper
|
|
*/
|
|
|
|
#include "mgos_ssd1306dj.h"
|
|
|
|
static Adafruit_SSD1306::Resolution mgos_ssd1306_get_res(int res) {
|
|
Adafruit_SSD1306::Resolution r;
|
|
switch (res) {
|
|
case 0: r = Adafruit_SSD1306::RES_96_16; break;
|
|
case 1: r = Adafruit_SSD1306::RES_128_32; break;
|
|
case 2: r = Adafruit_SSD1306::RES_128_64; break;
|
|
case 3: r = Adafruit_SSD1306::RES_64_48; break;
|
|
default: r = SSD1306_DEFAULT_RES;
|
|
}
|
|
return r;
|
|
}
|
|
|
|
Adafruit_SSD1306 *mgos_ssd1306_create_i2c(int rst, int res) {
|
|
return new Adafruit_SSD1306(rst, mgos_ssd1306_get_res(res));
|
|
}
|
|
|
|
Adafruit_SSD1306 *mgos_ssd1306_create_spi(int dc, int rst, int cs, int res) {
|
|
return new Adafruit_SSD1306(dc, rst, cs, mgos_ssd1306_get_res(res));
|
|
}
|
|
|
|
void mgos_ssd1306_close(Adafruit_SSD1306 *ssd) {
|
|
if (ssd != nullptr) {
|
|
delete ssd;
|
|
ssd = nullptr;
|
|
}
|
|
}
|
|
|
|
void mgos_ssd1306_begin(Adafruit_SSD1306 *ssd, int vccstate, int i2caddr, bool reset) {
|
|
if (ssd == nullptr) return;
|
|
ssd->begin(vccstate, i2caddr, reset);
|
|
}
|
|
|
|
void mgos_ssd1306_command(Adafruit_SSD1306 *ssd, int c) {
|
|
if (ssd == nullptr) return;
|
|
ssd->ssd1306_command(c);
|
|
}
|
|
|
|
void mgos_ssd1306_clear_display(Adafruit_SSD1306 *ssd) {
|
|
if (ssd == nullptr) return;
|
|
ssd->clearDisplay();
|
|
}
|
|
|
|
void mgos_ssd1306_invert_display(Adafruit_SSD1306 *ssd, int i) {
|
|
if (ssd == nullptr) return;
|
|
ssd->invertDisplay(i);
|
|
}
|
|
|
|
void mgos_ssd1306_display(Adafruit_SSD1306 *ssd) {
|
|
if (ssd == nullptr) return;
|
|
ssd->display();
|
|
}
|
|
|
|
void mgos_ssd1306_start_scroll_right(Adafruit_SSD1306 *ssd, int start, int stop) {
|
|
if (ssd == nullptr) return;
|
|
ssd->startscrollright(start, stop);
|
|
}
|
|
|
|
void mgos_ssd1306_start_scroll_left(Adafruit_SSD1306 *ssd, int start, int stop) {
|
|
if (ssd == nullptr) return;
|
|
ssd->startscrollleft(start, stop);
|
|
}
|
|
|
|
void mgos_ssd1306_start_scroll_diag_right(Adafruit_SSD1306 *ssd, int start, int stop) {
|
|
if (ssd == nullptr) return;
|
|
ssd->startscrolldiagright(start, stop);
|
|
}
|
|
|
|
void mgos_ssd1306_start_scroll_diag_left(Adafruit_SSD1306 *ssd, int start, int stop) {
|
|
if (ssd == nullptr) return;
|
|
ssd->startscrolldiagleft(start, stop);
|
|
}
|
|
|
|
void mgos_ssd1306_stop_scroll(Adafruit_SSD1306 *ssd) {
|
|
if (ssd == nullptr) return;
|
|
ssd->stopscroll();
|
|
}
|
|
|
|
void mgos_ssd1306_dim(Adafruit_SSD1306 *ssd, int dim) {
|
|
if (ssd == nullptr) return;
|
|
ssd->dim(dim);
|
|
}
|
|
|
|
void mgos_ssd1306_draw_pixel(Adafruit_SSD1306 *ssd, int x, int y, int color) {
|
|
if (ssd == nullptr) return;
|
|
ssd->drawPixel(x, y, color);
|
|
}
|
|
|
|
void mgos_ssd1306_draw_fast_vline(Adafruit_SSD1306 *ssd, int x, int y, int h, int color) {
|
|
if (ssd == nullptr) return;
|
|
ssd->drawFastVLine(x, y, h, color);
|
|
}
|
|
|
|
void mgos_ssd1306_draw_fast_hline(Adafruit_SSD1306 *ssd, int x, int y, int w, int color) {
|
|
if (ssd == nullptr) return;
|
|
ssd->drawFastHLine(x, y, w, color);
|
|
}
|
|
|
|
//Adafruit_GFX
|
|
int mgos_ssd1306_make_xy_pair(int x, int y) {
|
|
return ((int)x << 16) + y;
|
|
}
|
|
|
|
void mgos_ssd1306_draw_circle(Adafruit_SSD1306 *ssd,
|
|
int x0y0, int r, int color) {
|
|
if (ssd == nullptr) return;
|
|
ssd->drawCircle((x0y0 >> 16), x0y0, r, color);
|
|
}
|
|
|
|
void mgos_ssd1306_draw_circle_helper(Adafruit_SSD1306 *ssd,
|
|
int x0y0, int r, int cornername, int color) {
|
|
if (ssd == nullptr) return;
|
|
ssd->drawCircleHelper((x0y0 >> 16), x0y0, r, cornername, color);
|
|
}
|
|
|
|
void mgos_ssd1306_fill_circle(Adafruit_SSD1306 *ssd,
|
|
int x0y0, int r, int color) {
|
|
if (ssd == nullptr) return;
|
|
ssd->fillCircle((x0y0 >> 16), x0y0, r, color);
|
|
}
|
|
|
|
void mgos_ssd1306_fill_circle_helper(Adafruit_SSD1306 *ssd,
|
|
int x0y0, int r, int cornername, int delta, int color) {
|
|
if (ssd == nullptr) return;
|
|
ssd->fillCircleHelper((x0y0 >> 16), x0y0, r, cornername, delta, color);
|
|
}
|
|
|
|
void mgos_ssd1306_draw_triangle(Adafruit_SSD1306 *ssd,
|
|
int x0y0, int x1y1, int x2y2, int color) {
|
|
if (ssd == nullptr) return;
|
|
ssd->drawTriangle((x0y0 >> 16), x0y0, (x1y1 >> 16), x1y1, (x2y2 >> 16), x2y2, color);
|
|
}
|
|
|
|
void mgos_ssd1306_fill_triangle(Adafruit_SSD1306 *ssd,
|
|
int x0y0, int x1y1, int x2y2, int color) {
|
|
if (ssd == nullptr) return;
|
|
ssd->fillTriangle((x0y0 >> 16), x0y0, (x1y1 >> 16), x1y1, (x2y2 >> 16), x2y2, color);
|
|
}
|
|
|
|
void mgos_ssd1306_draw_round_rect(Adafruit_SSD1306 *ssd,
|
|
int x0y0, int w, int h, int radius, int color) {
|
|
if (ssd == nullptr) return;
|
|
ssd-> drawRoundRect((x0y0 >> 16), x0y0, w, h, radius, color);
|
|
}
|
|
|
|
void mgos_ssd1306_fill_round_rect(Adafruit_SSD1306 *ssd,
|
|
int x0y0, int w, int h, int radius, int color) {
|
|
if (ssd == nullptr) return;
|
|
ssd->fillRoundRect((x0y0 >> 16), x0y0, w, h, radius, color);
|
|
}
|
|
|
|
void mgos_ssd1306_draw_char(Adafruit_SSD1306 *ssd,
|
|
int xy, int c, int color, int bg, int size) {
|
|
if (ssd == nullptr) return;
|
|
ssd->drawChar((xy >> 16), xy, c, color, bg, size);
|
|
}
|
|
|
|
void mgos_ssd1306_set_cursor(Adafruit_SSD1306 *ssd, int x, int y) {
|
|
if (ssd == nullptr) return;
|
|
ssd->setCursor(x, y);
|
|
}
|
|
|
|
void mgos_ssd1306_set_text_color(Adafruit_SSD1306 *ssd, int c) {
|
|
if (ssd == nullptr) return;
|
|
ssd->setTextColor(c);
|
|
}
|
|
|
|
void mgos_ssd1306_set_text_color_bg(Adafruit_SSD1306 *ssd, int c, int bg) {
|
|
if (ssd == nullptr) return;
|
|
ssd->setTextColor(c, bg);
|
|
}
|
|
|
|
void mgos_ssd1306_set_text_size(Adafruit_SSD1306 *ssd, int s) {
|
|
if (ssd == nullptr) return;
|
|
ssd->setTextSize(s);
|
|
}
|
|
|
|
void mgos_ssd1306_set_text_wrap(Adafruit_SSD1306 *ssd, boolean w) {
|
|
if (ssd == nullptr) return;
|
|
ssd->setTextWrap(w);
|
|
}
|
|
|
|
int mgos_ssd1306_write(Adafruit_SSD1306 *ssd, const char *buffer, int size) {
|
|
if (ssd == nullptr) return 0;
|
|
return ssd->Print::write(buffer, size);
|
|
}
|
|
|
|
int mgos_ssd1306_height(Adafruit_SSD1306 *ssd) {
|
|
if (ssd == nullptr) return 0;
|
|
return ssd->height();
|
|
}
|
|
|
|
int mgos_ssd1306_width(Adafruit_SSD1306 *ssd) {
|
|
if (ssd == nullptr) return 0;
|
|
return ssd->width();
|
|
}
|
|
|
|
int mgos_ssd1306_get_rotation(Adafruit_SSD1306 *ssd) {
|
|
if (ssd == nullptr) return 0;
|
|
return ssd->getRotation();
|
|
}
|
|
|
|
// get current cursor position (get rotation safe maximum values, using: width() for x, height() for y)
|
|
int mgos_ssd1306_get_cursor_x(Adafruit_SSD1306 *ssd) {
|
|
if (ssd == nullptr) return 0;
|
|
return ssd->getCursorX();
|
|
}
|
|
|
|
int mgos_ssd1306_get_cursor_y(Adafruit_SSD1306 *ssd) {
|
|
if (ssd == nullptr) return 0;
|
|
return ssd->getCursorY();
|
|
}
|