/**
 * \file
 * \brief Application configuration file for SSD1306 display driver
 * Copyright (c) 2020, Erich Styger
 * SPDX-License-Identifier: BSD-3-Clause
 *
 * This header file is a configuration header file to configure the module McuSSD1306 (SSD1306).
 * You can configure the defines directly in this file or with the compiler -D option.
 */

#ifndef __McuSSD1306_CONFIG_H
#define __McuSSD1306_CONFIG_H

#ifndef McuSSD1306_CONFIG_I2C_HEADER_FILE
  #define McuSSD1306_CONFIG_I2C_HEADER_FILE "McuGenericI2C.h"
    /*!< Header file to be included for the SPI driver */
#endif

/* Which display is used: only one of the two options below can be enabled: */
#define McuSSD1306_CONFIG_SSD1306_SIZE_TYPE (12864)
  /*!< either 12864 (128x64) or 12832 (128x32) */

#ifndef McuSSD1306_CONFIG_SSD1306_HAS_RST
  #define McuSSD1306_CONFIG_SSD1306_HAS_RST         (0)
  #define McuSSD1306_CONFIG_SSD1306_RESET_LOW()     Reset_ClrVal() /* RESET signal low (reset is low active) */
  #define McuSSD1306_CONFIG_SSD1306_RESET_HIGH()    Reset_SetVal() /* RESET signal high */
  #define McuSSD1306_CONFIG_RESET_HEADER_FILE       "ResetPin.h"
#endif
#if McuSSD1306_CONFIG_SSD1306_HAS_RST
  #include McuSSD1306_CONFIG_RESET_HEADER_FILE  /* reset pin interface */
#endif

#ifndef McuSSD1306_CONFIG_SSD1306_EXTERNAL
  #define McuSSD1306_CONFIG_SSD1306_EXTERNAL        (0)
    /*!< set to 1 if external vcc is connected, otherwise 0 if internal dc/dc converter is used */
#endif
#ifndef McuSSD1306_CONFIG_SSD1306_I2C_ADDR
  #define McuSSD1306_CONFIG_SSD1306_I2C_ADDR        (60)
    /*!< I2C 7bit (unshifted) device address, usually 0x3C (60) (0b11'1100) or 0x3D (61) (0b11'1101) */
#endif

#ifndef McuSSD1306_CONFIG_SSD1306_DRIVER_TYPE
  #define McuSSD1306_CONFIG_SSD1306_DRIVER_TYPE        (1306)
    /*!< Either 1306 for SSD1306 or 1106 for SH1106 */
#endif

#ifndef McuSSD1306_CONFIG_SSD1306_START_COLUMN_OFFSET
  #define McuSSD1306_CONFIG_SSD1306_START_COLUMN_OFFSET  (0)
    /*!< Some SH1106 displays need a start column of 2 instead of the default 0 */
#endif

#ifndef McuSSD1306_CONFIG_SSD1306_I2C_DELAY_US
  #define McuSSD1306_CONFIG_SSD1306_I2C_DELAY_US    (100)
    /*!< I2C transaction delay in us */
#endif

#ifndef McuSSD1306_CONFIG_DYNAMIC_DISPLAY_ORIENTATION
  #define McuSSD1306_CONFIG_DYNAMIC_DISPLAY_ORIENTATION (1)
  /*!< 1: Use SetDisplayOrientation() to change display orientation at runtime; 0: fixed display orientation */
#endif

/* display orientation types used in macro below: */
#define McuSSD1306_CONFIG_ORIENTATION_PORTRAIT      0
#define McuSSD1306_CONFIG_ORIENTATION_PORTRAIT180   1
#define McuSSD1306_CONFIG_ORIENTATION_LANDSCAPE     2
#define McuSSD1306_CONFIG_ORIENTATION_LANDSCAPE180  3

#ifndef McuSSD1306_CONFIG_FIXED_DISPLAY_ORIENTATION
  #define McuSSD1306_CONFIG_FIXED_DISPLAY_ORIENTATION    McuSSD1306_CONFIG_ORIENTATION_LANDSCAPE
  /*!< Fixed display orientation setting, one of:
    McuSSD1306_CONFIG_ORIENTATION_PORTRAIT
    McuSSD1306_CONFIG_ORIENTATION_PORTRAIT180
    McuSSD1306_CONFIG_ORIENTATION_LANDSCAPE
    McuSSD1306_CONFIG_ORIENTATION_LANDSCAPE180
  */
#endif

#ifndef McuSSD1306_CONFIG_INITIALIZE_IN_INIT
  #define McuSSD1306_CONFIG_INITIALIZE_IN_INIT (1)
  /*!< 1: Initialize LCD during PE_low_level_init(); 0: Do not initialize during PE_low_level_init() */
#endif

#ifndef McuSSD1306_CONFIG_CLEAR_DISPLAY_IN_INIT
  #define McuSSD1306_CONFIG_CLEAR_DISPLAY_IN_INIT (0)
  /*!< 1: Clear display at the end of Init(); 0: Do not clear display at the end of Init() */
#endif

#ifndef McuSSD1306_CONFIG_INIT_DELAY_MS
  #define McuSSD1306_CONFIG_INIT_DELAY_MS (5)
  /*!< Additional delay (milliseconds) in Init(). Use zero for no delay. */
#endif

#ifndef McuSSD1306_CONFIG_USE_I2C_BLOCK_TRANSFER
  #define McuSSD1306_CONFIG_USE_I2C_BLOCK_TRANSFER (1)
  /*!< 1: use I2C Block transfer for better performance. 0: disabled, e.g. for slower displays */
#endif

#ifndef McuSSD1306_CONFIG_USE_RAM_BUFFER
  #define McuSSD1306_CONFIG_USE_RAM_BUFFER (1)
  /*!< 1: Use RAM Buffer for display memory; 0: Do not use RAM buffer (write directly to display) */
#endif

#endif /* __McuSSD1306_CONFIG_H */
