Files
MSE-SoftwEng/pico-sensor/McuLib/src/McuSSD1306.h
2025-05-06 13:07:01 +00:00

572 lines
24 KiB
C

/* ###################################################################
** This component module is generated by Processor Expert. Do not modify it.
** Filename : McuSSD1306.h
** Project : FRDM-K64F_Generator
** Processor : MK64FN1M0VLL12
** Component : SSD1306
** Version : Component 01.051, Driver 01.00, CPU db: 3.00.000
** Compiler : GNU C Compiler
** Date/Time : 2024-07-29, 14:57, # CodeGen: 841
** Abstract :
** Display driver for the SSD1306 OLED module
** Settings :
** Component name : McuSSD1306
** Type : 128x64
** Driver : SSD1306
** Orientation : landscape
** Width : 128
** Height : 64
** Bytes in rows : no
** Bytes in x direction : yes
** MSB first : no
** Bits per pixel : 1
** Window capability : no
** Display Memory Write : no
** Display Memory Read : no
** Use RAM Buffer : yes
** Clear display in init : no
** Initialize on Init : yes
** Init Delay (ms) : 100
** HW :
** I2C Device Address : 0x3C
** I2C Transaction Delay (us) : 0
** Bock Transfer : yes
** I2C : McuGenericI2C
** Reset : Disabled
** System :
** Wait : McuWait
** SDK : McuLib
** Contents :
** GetWidth - McuSSD1306_PixelDim McuSSD1306_GetWidth(void);
** GetHeight - McuSSD1306_PixelDim McuSSD1306_GetHeight(void);
** GetLongerSide - McuSSD1306_PixelDim McuSSD1306_GetLongerSide(void);
** GetShorterSide - McuSSD1306_PixelDim McuSSD1306_GetShorterSide(void);
** SetDisplayOrientation - void McuSSD1306_SetDisplayOrientation(McuSSD1306_DisplayOrientation...
** GetDisplayOrientation - McuSSD1306_DisplayOrientation McuSSD1306_GetDisplayOrientation(void);
** ClearBuffer - void McuSSD1306_ClearBuffer(McuSSD1306_PixelColor color);
** PutPixel - void McuSSD1306_PutPixel(McuSSD1306_PixelDim x, McuSSD1306_PixelDim y,...
** Clear - void McuSSD1306_Clear(void);
** UpdateFull - void McuSSD1306_UpdateFull(void);
** UpdateRegion - void McuSSD1306_UpdateRegion(McuSSD1306_PixelDim x, McuSSD1306_PixelDim y,...
** InitCommChannel - void McuSSD1306_InitCommChannel(void);
** SetContrast - uint8_t McuSSD1306_SetContrast(uint8_t contrast);
** SetDisplayClockDiv - uint8_t McuSSD1306_SetDisplayClockDiv(uint8_t clockDiv);
** DisplayOn - uint8_t McuSSD1306_DisplayOn(bool on);
** DisplayInvert - uint8_t McuSSD1306_DisplayInvert(bool invert);
** GetLCD - void McuSSD1306_GetLCD(void);
** GiveLCD - void McuSSD1306_GiveLCD(void);
** SetRowCol - uint8_t McuSSD1306_SetRowCol(uint8_t row, uint8_t col);
** PrintString - void McuSSD1306_PrintString(uint8_t line, uint8_t col, uint8_t *str);
** ClearLine - void McuSSD1306_ClearLine(uint8_t line);
** Deinit - void McuSSD1306_Deinit(void);
** Init - void McuSSD1306_Init(void);
**
** * Copyright (c) 2017-2022, Erich Styger
** * Web: https://mcuoneclipse.com
** * SourceForge: https://sourceforge.net/projects/mcuoneclipse
** * Git: https://github.com/ErichStyger/McuOnEclipse_PEx
** * All rights reserved.
** *
** * Redistribution and use in source and binary forms, with or without modification,
** * are permitted provided that the following conditions are met:
** *
** * - Redistributions of source code must retain the above copyright notice, this list
** * of conditions and the following disclaimer.
** *
** * - Redistributions in binary form must reproduce the above copyright notice, this
** * list of conditions and the following disclaimer in the documentation and/or
** * other materials provided with the distribution.
** *
** * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
** * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
** * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
** * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
** * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
** * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
** * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
** * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
** * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
** ###################################################################*/
/*!
** @file McuSSD1306.h
** @version 01.00
** @brief
** Display driver for the SSD1306 OLED module
*/
/*!
** @addtogroup McuSSD1306_module McuSSD1306 module documentation
** @{
*/
#ifndef __McuSSD1306_H
#define __McuSSD1306_H
/* MODULE McuSSD1306. */
#include "McuLib.h" /* SDK and API used */
#include "McuSSD1306config.h" /* configuration */
#include <stddef.h> /* for size_t */
#if McuSSD1306_CONFIG_SSD1306_SIZE_TYPE==12864
#define McuSSD1306_DISPLAY_HW_NOF_COLUMNS 128u /* number of columns in hardware */
#define McuSSD1306_DISPLAY_HW_NOF_ROWS 64u /* number of rows in hardware */
#define McuSSD1306_DISPLAY_HW_NOF_PAGES 8u /* number of pages in hardware */
#elif McuSSD1306_CONFIG_SSD1306_SIZE_TYPE==12832
#define McuSSD1306_DISPLAY_HW_NOF_COLUMNS 128u /* number of columns in hardware */
#define McuSSD1306_DISPLAY_HW_NOF_ROWS 32u /* number of rows in hardware */
#define McuSSD1306_DISPLAY_HW_NOF_PAGES 4u /* number of pages in hardware */
#else
#error "unknown display type, must be 128x64 or 128x32"
#endif
typedef bool McuSSD1306_PixelColor; /* type to hold color information */
typedef uint8_t McuSSD1306_PixelDim; /* one byte is enough to describe the x/y position */
typedef uint16_t McuSSD1306_PixelCount; /* needed type to hold the number of pixels on the display. */
extern uint8_t McuSSD1306_DisplayBuf[((McuSSD1306_DISPLAY_HW_NOF_ROWS-1)/8)+1][McuSSD1306_DISPLAY_HW_NOF_COLUMNS]; /* buffer for the display */
#define McuSSD1306_PIXEL_BLACK 0 /* 0 is a black pixel */
#define McuSSD1306_PIXEL_WHITE 1 /* 1 is a color/white pixel */
#define McuSSD1306_COLOR_PIXEL_SET McuSSD1306_PIXEL_WHITE /* color for a pixel set */
#define McuSSD1306_COLOR_PIXEL_CLR McuSSD1306_PIXEL_BLACK /* color for a pixel cleared */
#define McuSSD1306_COLOR_BLACK McuSSD1306_PIXEL_BLACK
#define McuSSD1306_COLOR_WHITE McuSSD1306_PIXEL_WHITE
#define McuSSD1306_COLOR_RED McuSSD1306_PIXEL_WHITE
#define McuSSD1306_COLOR_BRIGHT_RED McuSSD1306_COLOR_WHITE
#define McuSSD1306_COLOR_DARK_RED McuSSD1306_PIXEL_WHITE
#define McuSSD1306_COLOR_GREEN McuSSD1306_PIXEL_WHITE
#define McuSSD1306_COLOR_BRIGHT_GREEN McuSSD1306_PIXEL_WHITE
#define McuSSD1306_COLOR_DARK_GREEN McuSSD1306_PIXEL_WHITE
#define McuSSD1306_COLOR_BLUE McuSSD1306_PIXEL_WHITE
#define McuSSD1306_COLOR_BRIGHT_BLUE McuSSD1306_PIXEL_WHITE
#define McuSSD1306_COLOR_DARK_BLUE McuSSD1306_PIXEL_WHITE
#define McuSSD1306_COLOR_YELLOW McuSSD1306_PIXEL_WHITE
#define McuSSD1306_COLOR_BRIGHT_YELLOW McuSSD1306_PIXEL_WHITE
#define McuSSD1306_COLOR_ORANGE McuSSD1306_PIXEL_WHITE
#define McuSSD1306_COLOR_GREY McuSSD1306_PIXEL_WHITE
#define McuSSD1306_COLOR_BRIGHT_GREY McuSSD1306_PIXEL_WHITE
#define McuSSD1306_PIXEL_ON McuSSD1306_COLOR_WHITE /* value of a pixel if it is 'on' */
#define McuSSD1306_PIXEL_OFF McuSSD1306_COLOR_BLACK /* value of a pixel if it is 'off' */
#define McuSSD1306_HW_LONGER_SIDE McuSSD1306_DISPLAY_HW_NOF_COLUMNS /* Hardware display longer side in pixels */
#define McuSSD1306_HW_SHORTER_SIDE McuSSD1306_DISPLAY_HW_NOF_ROWS /* Hardware display shorter side in pixels */
typedef enum {
McuSSD1306_ORIENTATION_PORTRAIT = 0,
McuSSD1306_ORIENTATION_PORTRAIT180 = 1,
McuSSD1306_ORIENTATION_LANDSCAPE = 2,
McuSSD1306_ORIENTATION_LANDSCAPE180= 3
} McuSSD1306_DisplayOrientation;
#define McuSSD1306_WritePixel(data) \
McuSSD1306_WriteDataWord(data)
#define McuSSD1306_ReadPixel(data) \
0 /* with the I2C interface it is NOT possible to read from display memory */
void McuSSD1306_Clear(void);
/*
** ===================================================================
** Method : Clear (component SSD1306)
**
** Description :
** Clears the whole display memory.
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
void McuSSD1306_Init(void);
/*
** ===================================================================
** Method : Init (component SSD1306)
**
** Description :
** Display driver initialization
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
void McuSSD1306_UpdateFull(void);
/*
** ===================================================================
** Method : UpdateFull (component SSD1306)
**
** Description :
** Updates the whole display from the microcontroller RAM
** display buffer.
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
void McuSSD1306_UpdateRegion(McuSSD1306_PixelDim x, McuSSD1306_PixelDim y, McuSSD1306_PixelDim w, McuSSD1306_PixelDim h);
/*
** ===================================================================
** Method : UpdateRegion (component SSD1306)
**
** Description :
** Updates a region of the display. This is only a stub for
** this display as we are using windowing.
** Parameters :
** NAME - DESCRIPTION
** x - x coordinate
** y - y coordinate
** w - width of the region
** h - Height of the region
** Returns : Nothing
** ===================================================================
*/
void McuSSD1306_OpenWindow(McuSSD1306_PixelDim x0, McuSSD1306_PixelDim y0, McuSSD1306_PixelDim x1, McuSSD1306_PixelDim y1);
/*
** ===================================================================
** Method : McuSSD1306_OpenWindow (component SSD1306)
**
** Description :
** This method is internal. It is used by Processor Expert only.
** ===================================================================
*/
void McuSSD1306_CloseWindow(void);
/*
** ===================================================================
** Method : McuSSD1306_CloseWindow (component SSD1306)
**
** Description :
** This method is internal. It is used by Processor Expert only.
** ===================================================================
*/
void McuSSD1306_WriteData(uint8_t data);
/*
** ===================================================================
** Method : McuSSD1306_WriteData (component SSD1306)
**
** Description :
** This method is internal. It is used by Processor Expert only.
** ===================================================================
*/
McuSSD1306_DisplayOrientation McuSSD1306_GetDisplayOrientation(void);
/*
** ===================================================================
** Method : GetDisplayOrientation (component SSD1306)
**
** Description :
** Returns the current display orientation
** Parameters : None
** Returns :
** --- - current display orientation
** ===================================================================
*/
void McuSSD1306_SetDisplayOrientation(McuSSD1306_DisplayOrientation newOrientation);
/*
** ===================================================================
** Method : SetDisplayOrientation (component SSD1306)
**
** Description :
** Sets the display orientation. If you enable this method,
** then the orientation of the display can be changed at
** runtime. However, this requires additional resources.
** Parameters :
** NAME - DESCRIPTION
** newOrientation - new orientation to
** be used
** Returns : Nothing
** ===================================================================
*/
#if McuSSD1306_CONFIG_DYNAMIC_DISPLAY_ORIENTATION
McuSSD1306_PixelDim McuSSD1306_GetWidth(void);
#elif McuSSD1306_CONFIG_FIXED_DISPLAY_ORIENTATION==McuSSD1306_CONFIG_ORIENTATION_PORTRAIT
#define McuSSD1306_GetWidth() McuSSD1306_HW_SHORTER_SIDE
#elif McuSSD1306_CONFIG_FIXED_DISPLAY_ORIENTATION==McuSSD1306_CONFIG_ORIENTATION_PORTRAIT180
#define McuSSD1306_GetWidth() McuSSD1306_HW_SHORTER_SIDE
#elif McuSSD1306_CONFIG_FIXED_DISPLAY_ORIENTATION==McuSSD1306_CONFIG_ORIENTATION_LANDSCAPE
#define McuSSD1306_GetWidth() McuSSD1306_HW_LONGER_SIDE
#elif McuSSD1306_CONFIG_FIXED_DISPLAY_ORIENTATION==McuSSD1306_CONFIG_ORIENTATION_LANDSCAPE180
#define McuSSD1306_GetWidth() McuSSD1306_HW_LONGER_SIDE
#endif
/*
** ===================================================================
** Method : GetWidth (component SSD1306)
**
** Description :
** Returns the width of the display in pixels (in x direction)
** Parameters : None
** Returns :
** --- - Width of display
** ===================================================================
*/
#if McuSSD1306_CONFIG_DYNAMIC_DISPLAY_ORIENTATION
McuSSD1306_PixelDim McuSSD1306_GetHeight(void);
#elif McuSSD1306_CONFIG_FIXED_DISPLAY_ORIENTATION==McuSSD1306_CONFIG_ORIENTATION_PORTRAIT
#define McuSSD1306_GetHeight() McuSSD1306_HW_LONGER_SIDE
#elif McuSSD1306_CONFIG_FIXED_DISPLAY_ORIENTATION==McuSSD1306_CONFIG_ORIENTATION_PORTRAIT180
#define McuSSD1306_GetHeight() McuSSD1306_HW_LONGER_SIDE
#elif McuSSD1306_CONFIG_FIXED_DISPLAY_ORIENTATION==McuSSD1306_CONFIG_ORIENTATION_LANDSCAPE
#define McuSSD1306_GetHeight() McuSSD1306_HW_SHORTER_SIDE
#elif McuSSD1306_CONFIG_FIXED_DISPLAY_ORIENTATION==McuSSD1306_CONFIG_ORIENTATION_LANDSCAPE180
#define McuSSD1306_GetHeight() McuSSD1306_HW_SHORTER_SIDE
#endif
/*
** ===================================================================
** Method : GetHeight (component SSD1306)
**
** Description :
** Returns the height of the display in pixels (in y direction)
** Parameters : None
** Returns :
** --- - Height of display
** ===================================================================
*/
#define McuSSD1306_GetLongerSide() \
McuSSD1306_HW_LONGER_SIDE
/*
** ===================================================================
** Method : GetLongerSide (component SSD1306)
**
** Description :
** Returns the size of the longer side of the display
** Parameters : None
** Returns :
** --- - number of pixels
** ===================================================================
*/
#define McuSSD1306_GetShorterSide() \
McuSSD1306_HW_SHORTER_SIDE
/*
** ===================================================================
** Method : GetShorterSide (component SSD1306)
**
** Description :
** Returns the size of the shorter side of the display
** Parameters : None
** Returns :
** --- - number of pixels
** ===================================================================
*/
uint16_t McuSSD1306_ReadDataWord(void);
/*
** ===================================================================
** Method : McuSSD1306_ReadDataWord (component SSD1306)
**
** Description :
** This method is internal. It is used by Processor Expert only.
** ===================================================================
*/
void McuSSD1306_GetLCD(void);
/*
** ===================================================================
** Method : GetLCD (component SSD1306)
**
** Description :
** Method to be called for mutual exclusive access to the LCD
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
void McuSSD1306_GiveLCD(void);
/*
** ===================================================================
** Method : GiveLCD (component SSD1306)
**
** Description :
** Method to be called for mutual exclusive access to the LCD
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
void McuSSD1306_InitCommChannel(void);
/*
** ===================================================================
** Method : InitCommChannel (component SSD1306)
**
** Description :
** Method to initialize communication to the LCD. Needed if the
** bus to the LCD is shared with other components and settings
** are different.
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
uint8_t McuSSD1306_SetContrast(uint8_t contrast);
/*
** ===================================================================
** Method : SetContrast (component SSD1306)
**
** Description :
** Sets the display contrast level (default:0x7F)
** Parameters :
** NAME - DESCRIPTION
** contrast - Contrast level (default 0x7F).
** Contrast increases as the value increases.
** Returns :
** --- - Error code
** ===================================================================
*/
uint8_t McuSSD1306_DisplayOn(bool on);
/*
** ===================================================================
** Method : DisplayOn (component SSD1306)
**
** Description :
** Turns the display on or off (sleep)
** Parameters :
** NAME - DESCRIPTION
** on - turns the display on or off
** Returns :
** --- - Error code
** ===================================================================
*/
uint8_t McuSSD1306_DisplayInvert(bool invert);
/*
** ===================================================================
** Method : DisplayInvert (component SSD1306)
**
** Description :
** Used to inverse the display. In normal mode, 1 one in the
** display RAM is a pixel set and a 0 means pixel clear.
** Parameters :
** NAME - DESCRIPTION
** invert - if TRUE, a 1 is pixel clear and a 0
** is a pixel set.
** Returns :
** --- - Error code
** ===================================================================
*/
void McuSSD1306_PrintString(uint8_t line, uint8_t col, uint8_t *str);
/*
** ===================================================================
** Method : PrintString (component SSD1306)
**
** Description :
** Simple low level method printing text to the display.
** Newline is supported.
** Parameters :
** NAME - DESCRIPTION
** line - line number, starting with 0
** col - column number, starting with 0
** * str - Pointer to string to be printed on display
** Returns : Nothing
** ===================================================================
*/
void McuSSD1306_PutPixel(McuSSD1306_PixelDim x, McuSSD1306_PixelDim y, McuSSD1306_PixelColor color);
/*
** ===================================================================
** Method : PutPixel (component SSD1306)
**
** Description :
** Draws a pixel into the display buffer (not on the display).
** Parameters :
** NAME - DESCRIPTION
** x - x position of the pixel
** y - y position of the pixel
** color - color value of the pixel
** Returns : Nothing
** ===================================================================
*/
void McuSSD1306_Deinit(void);
/*
** ===================================================================
** Method : Deinit (component SSD1306)
**
** Description :
** Driver de-initialization
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
uint8_t McuSSD1306_SetRowCol(uint8_t row, uint8_t col);
/*
** ===================================================================
** Method : SetRowCol (component SSD1306)
**
** Description :
** Sets the column and row position, useful for start writing
** text with PrintString()
** Parameters :
** NAME - DESCRIPTION
** row - row (or line) number, starting with 0
** col - column number, starting with 0
** Returns :
** --- - Error code
** ===================================================================
*/
void McuSSD1306_ClearLine(uint8_t line);
/*
** ===================================================================
** Method : ClearLine (component SSD1306)
**
** Description :
** Clear a text line on the display
** Parameters :
** NAME - DESCRIPTION
** line - Line number, starting with zero
** Returns : Nothing
** ===================================================================
*/
uint8_t McuSSD1306_SetDisplayClockDiv(uint8_t clockDiv);
/*
** ===================================================================
** Method : SetDisplayClockDiv (component SSD1306)
**
** Description :
** Sets the display clock divider (default 0x80). This can be
** used to affect display refresh rate or to reduce audible
** noise.
** Parameters :
** NAME - DESCRIPTION
** clockDiv - Clock Divider (default 0x80).
** Returns :
** --- - Error code
** ===================================================================
*/
void McuSSD1306_ClearBuffer(McuSSD1306_PixelColor color);
/*
** ===================================================================
** Method : ClearBuffer (component SSD1306)
**
** Description :
** Writes a color to the full display buffer and clears it.
** Parameters :
** NAME - DESCRIPTION
** color - color value of the pixel
** Returns : Nothing
** ===================================================================
*/
/* END McuSSD1306. */
#endif
/* ifndef __McuSSD1306_H */
/*!
** @}
*/