aboutsummaryrefslogtreecommitdiffstats
path: root/oled/ss_oled.h
diff options
context:
space:
mode:
Diffstat (limited to 'oled/ss_oled.h')
-rw-r--r--oled/ss_oled.h211
1 files changed, 211 insertions, 0 deletions
diff --git a/oled/ss_oled.h b/oled/ss_oled.h
new file mode 100644
index 0000000..f7e303c
--- /dev/null
+++ b/oled/ss_oled.h
@@ -0,0 +1,211 @@
+#ifndef __SS_OLED_H__
+#define __SS_OLED_H__
+
+#include "BitBang_I2C.h"
+
+typedef struct ssoleds
+{
+uint8_t oled_addr; // requested address or 0xff for automatic detection
+uint8_t oled_wrap, oled_flip, oled_type;
+uint8_t *ucScreen;
+uint8_t iCursorX, iCursorY;
+uint8_t oled_x, oled_y;
+int iScreenOffset;
+BBI2C bbi2c;
+} SSOLED;
+// Make the Linux library interface C instead of C++
+#if defined(_LINUX_) && defined(__cplusplus)
+extern "C" {
+#endif
+
+// These are defined the same in my SPI_LCD library
+#ifndef SPI_LCD_H
+
+// 4 possible font sizes: 8x8, 16x32, 6x8, 16x16 (stretched from 8x8)
+enum {
+ FONT_6x8 = 0,
+ FONT_8x8,
+ FONT_12x16,
+ FONT_16x16,
+ FONT_16x32
+};
+#define FONT_NORMAL FONT_8x8
+#define FONT_SMALL FONT_6x8
+#define FONT_LARGE FONT_16x32
+#define FONT_STRETCHED FONT_16x16
+#endif
+
+// OLED type for init function
+enum {
+ OLED_128x128 = 1,
+ OLED_128x32,
+ OLED_128x64,
+ OLED_132x64,
+ OLED_64x32,
+ OLED_96x16,
+ OLED_72x40
+};
+
+// Rotation and flip angles to draw tiles
+enum {
+ ANGLE_0=0,
+ ANGLE_90,
+ ANGLE_180,
+ ANGLE_270,
+ ANGLE_FLIPX,
+ ANGLE_FLIPY
+};
+
+// Return value from oledInit()
+enum {
+ OLED_NOT_FOUND = -1, // no display found
+ OLED_SSD1306_3C, // SSD1306 found at 0x3C
+ OLED_SSD1306_3D, // SSD1306 found at 0x3D
+ OLED_SH1106_3C, // SH1106 found at 0x3C
+ OLED_SH1106_3D, // SH1106 found at 0x3D
+ OLED_SH1107_3C, // SH1107
+ OLED_SH1107_3D
+};
+//
+// Initializes the OLED controller into "page mode" on I2C
+// If SDAPin and SCLPin are not -1, then bit bang I2C on those pins
+// Otherwise use the Wire library.
+// If you don't need to use a separate reset pin, set it to -1
+//
+int oledInit(SSOLED *pOLED, int iType, int iAddr, int bFlip, int bInvert, int bWire, int iSDAPin, int iSCLPin, int iResetPin, int32_t iSpeed);
+//
+// Initialize an SPI version of the display
+//
+void oledSPIInit(int iType, int iDC, int iCS, int iReset, int bFlip, int bInvert, int32_t iSpeed);
+
+//
+// Provide or revoke a back buffer for your OLED graphics
+// This allows you to manage the RAM used by ss_oled on tiny
+// embedded platforms like the ATmega series
+// Pass NULL to revoke the buffer. Make sure you provide a buffer
+// large enough for your display (e.g. 128x64 needs 1K - 1024 bytes)
+//
+void oledSetBackBuffer(SSOLED *pOLED, uint8_t *pBuffer);
+//
+// Sets the brightness (0=off, 255=brightest)
+//
+void oledSetContrast(SSOLED *pOLED, unsigned char ucContrast);
+//
+// Load a 128x64 1-bpp Windows bitmap
+// Pass the pointer to the beginning of the BMP file
+// First pass version assumes a full screen bitmap
+//
+int oledLoadBMP(SSOLED *pOLED, uint8_t *pBMP, int bInvert, int bRender);
+//
+// Power up/down the display
+// useful for low power situations
+//
+void oledPower(SSOLED *pOLED, uint8_t bOn);
+//
+// Set the current cursor position
+// The column represents the pixel column (0-127)
+// The row represents the text row (0-7)
+//
+void oledSetCursor(SSOLED *pOLED, int x, int y);
+
+//
+// Turn text wrap on or off for the oldWriteString() function
+//
+void oledSetTextWrap(SSOLED *pOLED, int bWrap);
+//
+// Draw a string of normal (8x8), small (6x8) or large (16x32) characters
+// At the given col+row with the given scroll offset. The scroll offset allows you to
+// horizontally scroll text which does not fit on the width of the display. The offset
+// represents the pixels to skip when drawing the text. An offset of 0 starts at the beginning
+// of the text.
+// The system remembers where the last text was written (the cursor position)
+// To continue writing from the last position, set the x,y values to -1
+// The text can optionally wrap around to the next line by calling oledSetTextWrap(true);
+// otherwise text which would go off the right edge will not be drawn and the cursor will
+// be left "off screen" until set to a new position explicitly
+//
+// Returns 0 for success, -1 for invalid parameter
+//
+int oledWriteString(SSOLED *pOLED, int iScrollX, int x, int y, char *szMsg, int iSize, int bInvert, int bRender);
+//
+// Fill the frame buffer with a byte pattern
+// e.g. all off (0x00) or all on (0xff)
+//
+void oledFill(SSOLED *pOLED, unsigned char ucData, int bRender);
+//
+// Set (or clear) an individual pixel
+// The local copy of the frame buffer is used to avoid
+// reading data from the display controller
+// (which isn't possible in most configurations)
+// This function needs the USE_BACKBUFFER macro to be defined
+// otherwise, new pixels will erase old pixels within the same byte
+//
+int oledSetPixel(SSOLED *pOLED, int x, int y, unsigned char ucColor, int bRender);
+//
+// Dump an entire custom buffer to the display
+// useful for custom animation effects
+//
+void oledDumpBuffer(SSOLED *pOLED, uint8_t *pBuffer);
+//
+// Render a window of pixels from a provided buffer or the library's internal buffer
+// to the display. The row values refer to byte rows, not pixel rows due to the memory
+// layout of OLEDs. Pass a src pointer of NULL to use the internal backing buffer
+// returns 0 for success, -1 for invalid parameter
+//
+int oledDrawGFX(SSOLED *pOLED, uint8_t *pSrc, int iSrcCol, int iSrcRow, int iDestCol, int iDestRow, int iWidth, int iHeight, int iSrcPitch);
+
+//
+// Draw a line between 2 points
+//
+void oledDrawLine(SSOLED *pOLED, int x1, int y1, int x2, int y2, int bRender);
+//
+// Play a frame of animation data
+// The animation data is assumed to be encoded for a full frame of the display
+// Given the pointer to the start of the compressed data,
+// it returns the pointer to the start of the next frame
+// Frame rate control is up to the calling program to manage
+// When it finishes the last frame, it will start again from the beginning
+//
+uint8_t * oledPlayAnimFrame(SSOLED *pOLED, uint8_t *pAnimation, uint8_t *pCurrent, int iLen);
+
+//
+// Scroll the internal buffer by 1 scanline (up/down)
+// width is in pixels, lines is group of 8 rows
+// Returns 0 for success, -1 for invalid parameter
+//
+int oledScrollBuffer(SSOLED *pOLED, int iStartCol, int iEndCol, int iStartRow, int iEndRow, int bUp);
+//
+// Draw a sprite of any size in any position
+// If it goes beyond the left/right or top/bottom edges
+// it's trimmed to show the valid parts
+// This function requires a back buffer to be defined
+// The priority color (0 or 1) determines which color is painted
+// when a 1 is encountered in the source image.
+// e.g. when 0, the input bitmap acts like a mask to clear
+// the destination where bits are set.
+//
+void oledDrawSprite(SSOLED *pOLED, uint8_t *pSprite, int cx, int cy, int iPitch, int x, int y, uint8_t iPriority);
+//
+// Draw a 16x16 tile in any of 4 rotated positions
+// Assumes input image is laid out like "normal" graphics with
+// the MSB on the left and 2 bytes per line
+// On AVR, the source image is assumed to be in FLASH memory
+// The function can draw the tile on byte boundaries, so the x value
+// can be from 0 to 112 and y can be from 0 to 6
+//
+void oledDrawTile(SSOLED *pOLED, const uint8_t *pTile, int x, int y, int iRotation, int bInvert, int bRender);
+//
+// Draw an outline or filled ellipse
+//
+void oledEllipse(SSOLED *pOLED, int iCenterX, int iCenterY, int32_t iRadiusX, int32_t iRadiusY, uint8_t ucColor, uint8_t bFilled);
+//
+// Draw an outline or filled rectangle
+//
+void oledRectangle(SSOLED *pOLED, int x1, int y1, int x2, int y2, uint8_t ucColor, uint8_t bFilled);
+
+#if defined(_LINUX_) && defined(__cplusplus)
+}
+#endif // _LINUX_
+
+#endif // __SS_OLED_H__
+