blob: ca9335c9c959d372e16eca8322b33d7ab4ceb2bf [file] [log] [blame]
/* grove_lcd.h - Public API for the Grove RGB LCD device */
/*
* Copyright (c) 2015 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_INCLUDE_DISPLAY_GROVE_LCD_H_
#define ZEPHYR_INCLUDE_DISPLAY_GROVE_LCD_H_
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Display Drivers
* @defgroup display_interfaces Display Drivers
* @{
* @}
*/
/**
* @brief Grove display APIs
* @defgroup grove_display Grove display APIs
* @ingroup display_interfaces
* @{
*/
#define GROVE_LCD_NAME "GLCD"
/**
* @brief Send text to the screen
*
* @param port Pointer to device structure for driver instance.
* @param data the ASCII text to display
* @param size the length of the text in bytes
*/
void glcd_print(struct device *port, char *data, u32_t size);
/**
* @brief Set text cursor position for next additions
*
* @param port Pointer to device structure for driver instance.
* @param col the column for the cursor to be moved to (0-15)
* @param row the row it should be moved to (0 or 1)
*/
void glcd_cursor_pos_set(struct device *port, u8_t col, u8_t row);
/**
* @brief Clear the current display
*
* @param port Pointer to device structure for driver instance.
*/
void glcd_clear(struct device *port);
/* Defines for the GLCD_CMD_DISPLAY_SWITCH options */
#define GLCD_DS_DISPLAY_ON (1 << 2)
#define GLCD_DS_DISPLAY_OFF (0 << 2)
#define GLCD_DS_CURSOR_ON (1 << 1)
#define GLCD_DS_CURSOR_OFF (0 << 1)
#define GLCD_DS_BLINK_ON (1 << 0)
#define GLCD_DS_BLINK_OFF (0 << 0)
/**
* @brief Function to change the display state.
* @details This function provides the user the ability to change the state
* of the display as per needed. Controlling things like powering on or off
* the screen, the option to display the cursor or not, and the ability to
* blink the cursor.
*
* @param port Pointer to device structure for driver instance.
* @param opt An 8bit bitmask of GLCD_DS_* options.
*
*/
void glcd_display_state_set(struct device *port, u8_t opt);
/**
* @brief return the display feature set associated with the device
*
* @param port the Grove LCD to get the display features set
*
* @return the display feature set associated with the device.
*/
u8_t glcd_display_state_get(struct device *port);
/* Defines for the GLCD_CMD_INPUT_SET to change text direction */
#define GLCD_IS_SHIFT_INCREMENT (1 << 1)
#define GLCD_IS_SHIFT_DECREMENT (0 << 1)
#define GLCD_IS_ENTRY_LEFT (1 << 0)
#define GLCD_IS_ENTRY_RIGHT (0 << 0)
/**
* @brief Function to change the input state.
* @details This function provides the user the ability to change the state
* of the text input. Controlling things like text entry from the left or
* right side, and how far to increment on new text
*
* @param port Pointer to device structure for driver instance.
* @param opt A bitmask of GLCD_IS_* options
*
*/
void glcd_input_state_set(struct device *port, u8_t opt);
/**
* @brief return the input set associated with the device
*
* @param port the Grove LCD to get the input features set
*
* @return the input set associated with the device.
*/
u8_t glcd_input_state_get(struct device *port);
/* Defines for the LCD_FUNCTION_SET */
#define GLCD_FS_8BIT_MODE (1 << 4)
#define GLCD_FS_ROWS_2 (1 << 3)
#define GLCD_FS_ROWS_1 (0 << 3)
#define GLCD_FS_DOT_SIZE_BIG (1 << 2)
#define GLCD_FS_DOT_SIZE_LITTLE (0 << 2)
/* Bits 0, 1 are not defined for this register */
/**
* @brief Function to set the functional state of the display.
* @param port Pointer to device structure for driver instance.
* @param opt A bitmask of GLCD_FS_* options
*
* @details This function provides the user the ability to change the state
* of the display as per needed. Controlling things like the number of rows,
* dot size, and text display quality.
*/
void glcd_function_set(struct device *port, u8_t opt);
/**
* @brief return the function set associated with the device
*
* @param port the Grove LCD to get the functions set
*
* @return the function features set associated with the device.
*/
u8_t glcd_function_get(struct device *port);
/* Available color selections */
#define GROVE_RGB_WHITE 0
#define GROVE_RGB_RED 1
#define GROVE_RGB_GREEN 2
#define GROVE_RGB_BLUE 3
/**
* @brief Set LCD background to a predefined color
* @param port Pointer to device structure for driver instance.
* @param color One of the predefined color options
*/
void glcd_color_select(struct device *port, u8_t color);
/**
* @brief Set LCD background to custom RGB color value
*
* @param port Pointer to device structure for driver instance.
* @param r A numeric value for the red color (max is 255)
* @param g A numeric value for the green color (max is 255)
* @param b A numeric value for the blue color (max is 255)
*/
void glcd_color_set(struct device *port, u8_t r, u8_t g, u8_t b);
/**
* @brief Initialize the Grove LCD panel
*
* @param port Pointer to device structure for driver instance.
*
* @return Returns 0 if all passes
*/
int glcd_initialize(struct device *port);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* ZEPHYR_INCLUDE_DISPLAY_GROVE_LCD_H_ */