nuttx/drivers/lcd
Gregory Nutt 9568600ab1 Squashed commit of the following:
This commit backs out most of commit b4747286b1.  That change was added because sem_wait() would sometimes cause cancellation points inappropriated.  But with these recent changes, nxsem_wait() is used instead and it is not a cancellation point.

    In the OS, all calls to sem_wait() changed to nxsem_wait().  nxsem_wait() does not return errors via errno so each place where nxsem_wait() is now called must not examine the errno variable.

    In all OS functions (not libraries), change sem_wait() to nxsem_wait().  This will prevent the OS from creating bogus cancellation points and from modifying the per-task errno variable.

    sched/semaphore:  Add the function nxsem_wait().  This is a new internal OS interface.  It is functionally equivalent to sem_wait() except that (1) it is not a cancellation point, and (2) it does not set the per-thread errno value on return.
2017-10-04 15:22:27 -06:00
..
ili9341.c Squashed commit of the following: 2017-09-30 12:59:33 -06:00
Kconfig drivers/lcd: Add suppose for a generic front-end that will convert any LCD driver into a framebuffer driver. 2017-09-17 10:39:23 -06:00
lcd_framebuffer.c Fix some cosmetic stuff in the framebuffer character driver and in the LCD framebuffer driver front-end. 2017-09-17 13:48:10 -06:00
Make.defs drivers/lcd: Add suppose for a generic front-end that will convert any LCD driver into a framebuffer driver. 2017-09-17 10:39:23 -06:00
memlcd.c Add an instance argument to the SPIDEV definitions. 2017-04-29 12:26:52 -06:00
mio283qt2.c Centralize definitions associated with CONFIG_DEBUG_LCD 2016-06-15 11:40:33 -06:00
mio283qt9a.c Centralize definitions associated with CONFIG_DEBUG_LCD 2016-06-15 11:40:33 -06:00
nokia6100.c Add an instance argument to the SPIDEV definitions. 2017-04-29 12:26:52 -06:00
p14201.c Add an instance argument to the SPIDEV definitions. 2017-04-29 12:26:52 -06:00
pcd8544.c Replace the structure initializer with C89 style 2017-05-26 11:36:36 -03:00
pcd8544.h drivers/: Remove dangling space at the end of lines. 2017-06-28 13:17:17 -06:00
pcf8574_lcd_backpack_readme.txt correct logic hazard in latch and load nybble; was transitioning control lines at the same time as enable, causing spurious behaviour on less-tolerant displays 2016-05-29 11:09:00 -05:00
pcf8574_lcd_backpack.c Squashed commit of the following: 2017-10-04 15:22:27 -06:00
pcf8833.h Standardize nameing of the pre-processor definitiongs group header 2015-10-02 14:17:29 -06:00
ra8875.c Centralize definitions associated with CONFIG_DEBUG_LCD 2016-06-15 11:40:33 -06:00
ra8875.h RA8875 LCD driver contributed by Marten Svanfeldt 2015-04-24 07:46:03 -06:00
README.txt Remove all Calypso board configurations 2016-12-13 18:24:49 -06:00
s1d15g10.h Standardize nameing of the pre-processor definitiongs group header 2015-10-02 14:17:29 -06:00
sd1329.h Make some file section headers more consistent with standard 2015-04-08 07:15:32 -06:00
skeleton.c Add _ to the beginning of all debug macros to avoid name collisions 2016-06-16 12:33:32 -06:00
ssd1289.c Centralize definitions associated with CONFIG_DEBUG_LCD 2016-06-15 11:40:33 -06:00
ssd1289.h More trailing whilespace removal 2014-04-13 14:32:20 -06:00
ssd1305.h Email address change in nuttx/ 2012-09-13 18:32:24 +00:00
ssd1306_base.c drivers/lcd: ssd1306: separate lcd_dev_s setup to separate object. g_oleddev takes 1 KiB because framebuffer and was allocated to .data section because of lcd_dev_s function pointer setup. Move lcd_dev_s setup out, so that g_oleddev goes to .bss and avoid wasting ROM. 2017-08-22 08:46:00 -06:00
ssd1306_i2c.c drivers/: Remove dangling space at the end of lines. 2017-06-28 13:17:17 -06:00
ssd1306_spi.c Add an instance argument to the SPIDEV definitions. 2017-04-29 12:26:52 -06:00
ssd1306.h drivers/lcd: ssd1306: add support for board power control. ThingseeOne has regulator for controlling display power on/off. Patch adds support for board based power control to SSD1306 driver. 2017-08-22 08:40:27 -06:00
ssd1351.c Add an instance argument to the SPIDEV definitions. 2017-04-29 12:26:52 -06:00
st7565.c drivers/lcd/st7565.c: Use ST7565_POWERCTRL_INT instead of ST7565_POWERCTRL_BRF 2017-03-22 08:21:22 +09:00
st7565.h drivers/lcd/st7565.c: Use ST7565_POWERCTRL_INT instead of ST7565_POWERCTRL_BRF 2017-03-22 08:21:22 +09:00
st7567.c Add an instance argument to the SPIDEV definitions. 2017-04-29 12:26:52 -06:00
st7567.h More ST5767 LCD files missed in last commit 2013-03-22 14:31:48 +00:00
ug-2864ambag01.c Add an instance argument to the SPIDEV definitions. 2017-04-29 12:26:52 -06:00
ug-9664hswag01.c Add an instance argument to the SPIDEV definitions. 2017-04-29 12:26:52 -06:00

nuttx/drivers/lcd README
========================

This is the README.txt file for the drivers/lcd/ directory.

Contents
========

  - LCD Header files
    include/nuttx/lcd/lcd.h
    struct lcd_dev_s
  - Binding LCD Drivers
  - Examples: /drivers/lcd/
  - Examples: configs/
  - graphics/

LCD Header files
================

  include/nuttx/lcd/lcd.h

      Structures and APIs needed to work with LCD drivers are provided in
      this header file.  This header file also depends on some of the same
      definitions used for the frame buffer driver as provided in
      include/nuttx/video/fb.h.

  struct lcd_dev_s

      Each LCD device driver must implement an instance of struct lcd_dev_s.
      That structure defines a call table with the following methods:

      - Get information about the LCD video controller configuration and the
        configuration of each LCD color plane.

        int (*getvideoinfo)(FAR struct lcd_dev_s *dev,
                            FAR struct fb_videoinfo_s *vinfo);
        int (*getplaneinfo)(FAR struct lcd_dev_s *dev, unsigned int planeno,
                           FAR struct lcd_planeinfo_s *pinfo);

      - The following are provided only if the video hardware supports RGB
        color mapping:

        int (*getcmap)(FAR struct lcd_dev_s *dev,
                       FAR struct fb_cmap_s *cmap);
        int (*putcmap)(FAR struct lcd_dev_s *dev,
                       FAR const struct fb_cmap_s *cmap);

      - The following are provided only if the video hardware supports a
        hardware cursor:

        int (*getcursor)(FAR struct lcd_dev_s *dev,
                         FAR struct fb_cursorattrib_s *attrib);
        int (*setcursor)(FAR struct lcd_dev_s *dev,
                         FAR struct fb_setcursor_s *settings);

      - Get the LCD panel power status (0: full off - CONFIG_LCD_MAXPOWER:
        full on). On backlit LCDs, this setting may correspond to the
        backlight setting.

        int (*getpower)(struct lcd_dev_s *dev);

      - Enable/disable LCD panel power (0: full off - CONFIG_LCD_MAXPOWER:
        full on). On backlit LCDs, this setting may correspond to the
        backlight setting.

        int (*setpower)(struct lcd_dev_s *dev, int power);

      - Get the current contrast setting (0-CONFIG_LCD_MAXCONTRAST) */

        int (*getcontrast)(struct lcd_dev_s *dev);

     - Set LCD panel contrast (0-CONFIG_LCD_MAXCONTRAST)

        int (*setcontrast)(struct lcd_dev_s *dev, unsigned int contrast);

Binding LCD Drivers
===================

  LCD drivers are not normally directly accessed by user code, but are
  usually bound to another,  higher level device driver. In general, the
  binding sequence is:

  1. Get an instance of struct lcd_dev_s from the hardware-specific LCD
     device driver, and
  2. Provide that instance to the initialization method of the higher
     level device driver.

Examples: /drivers/lcd/
=======================

Re-usable LCD drivers reside in the drivers/lcd directory:

  LCDs:
  ----
  mio283qt2.c. This is a driver for the MI0283QT-2 LCD from Multi-Inno
    Technology Co., Ltd.  This LCD is based on the Himax HX8347-D LCD
    controller.

  mio283qt9a.c.  This is a driver for the MI0283QT-9A LCD from Multi-Inno
    Technology Co., Ltd.  This LCD is based on the Ilitek ILI9341 LCD
    controller.

  nokia6100.c.  Supports the Nokia 6100 display with either the Philips
    PCF883 or the Epson S1D15G10 display controller.  This LCD is used
    with the Olimex LPC1766-STK (but has not been fully integrated).

  ssd12989.c.  Generic LCD driver for LCDs based on the Solomon Systech
    SSD1289 LCD controller. Think of this as a template for an LCD driver
    that you will probably have to customize for any particular LCD
    hardware. (see also configs/hymini-stm32v/src/ssd1289.c below).

  st7567.c.  LCD Display Module, ST7567, Univision Technology Inc. Used
    with the LPCXpresso and Embedded Artists base board.

  memlcd.c.  Sharp Memory LCD Suite, LS013B7DH01, LS013B7DH03, etc.
    There are some more different models, they are basically controlled
    by similar logics, thus this driver can be extended.  Example usage:

  ra8875.c.  RAiO Technologies RA8875 LCD controller.  Contributed by
    Marten Svanfeldt.

  OLEDs:
  -----
  p14201.c.  Driver for RiT P14201 series display with SD1329 IC
    controller.  Based on the SD1329 controller.  This OLED is used with
    older versions of the TI/Luminary LM3S8962 Evaluation Kit.  Example
    usage

      configs/lm3s6965-ek/src
      configs/lm3s8962-ek/src

  ug-2864ambag01.c.  OLED Display Module, UUG-2864AMBAG01, Univision
    Technology Inc.  Based on the SH1101A controller.  Example usage:

      configs/stm32f4discovery
      configs/zp214xp

  ug-9664hswag01.c.  OLED Display Module, UG-9664HSWAG01, Univision
    Technology Inc.  Based on the SSD1305 controller.  Used with the
    LPC Xpresso and Embedded Artists base board.  Example usage:

      configs/lpcxpresso-lpc1768

  ssd1306.c.  OLED Display Modules based on the SSD1306 controllers.
    This includes the UG-2864HSWEG01 and UG2832HSWEG04, Both from Univision
    Technology Inc.  The latter is used with the OLED1 module that comes
    with the Atmel SAM4l Xplained Pro board.  Example usage:

      configs/stm32f4discovery
      configs/sam4l-xplained

  Segment LCDS (SLCDs):
  ---------------------

  pcf8574_lcd_backpack.c:  See pcf8574_lcd_backpack_readme.txt.

Examples: configs/
==================

There are additional LCD drivers in the configs/<board>/src directory
that support additional LCDs.  LCD drivers in the configuration directory
if they support some differ LCD interface (such as a parallel interface)
that makes then less re-usable:

  SSD1289 Drivers:

    configs/hymini-stm32v/src/ssd1289.c.  See also drivers/lcd/ssd1298.c
      above.
    configs/stm32f4discovery/src/stm32_ssd1289.c.  This examples is the
      bottom half for the SSD1289 driver at drivers/lcd/ssd1289.c
    configs/hymini-stm32v/src/ssd1289.c.  See also drivers/lcd/ssd1298.c
      above.
    configs/shenzhou/src/stm32_ssd1289.c

  kwikstik-k40:

    configs/kwikstik-k40/src/k40_lcd.c.  Don't waste your time.  This is
      just a stub.

  Nokia LCD Drivers:

    configs/olimex-lpc1766stk/src/lpc17_lcd.c.  This examples is the
      bottom half for the driver at drivers/lcd/nokia6100.c.
      This was never completely debugged ... there are probably issues
      with that nasty 9-bit SPI interfaces.

  HX8346:

    configs/sam3u-ek/src/sam_lcd.c.  The SAM3U-EK development board features
      a TFT/Transmissive color LCD module with touch-screen, FTM280C12D,
      with integrated driver IC HX8346.

  HX8347:

    configs/pic32mx7mmb/src/pic32_mio283qt2.c.  This driver is for the MI0283QT-2
      LCD from Multi-Inno Technology Co., Ltd. This LCD is based on the Himax
      HX8347-D LCD controller.

  ILI93xx and Similar:

    configs/stm3210e-eval/src/stm32_lcd.c. This driver supports the following
      LCDs:

      1. Ampire AM-240320LTNQW00H
      2. Orise Tech SPFD5408B
      3. RenesasSP R61580

    configs/stm3220g-eval/src/stm32_lcd.c and configs/stm3240g-eval/src/smt32_lcd.c.
      AM-240320L8TNQW00H (LCD_ILI9320 or LCD_ILI9321) and
      AM-240320D5TOQW01H (LCD_ILI9325)

    configs/shenzhou/src/stm32_ili93xx.c. Another ILI93xx driver.
    config/sam4e-ek/src/sam_ili9325.c. ILI9325 driver
    config/sam4e-ek/src/sam_ili9341.c. ILI9341 driver

  ILI9488

    configs/samv71-xult/src/sam_ili9488.c
    include/nuttx/lcd/ili9488.h

  R61505U

    configs/hymini-stm32v/src/stm32_r61505u.c

  Sharp Memory LCD:

    configs/maple/src/stm32_lcd.c

  OLEDs:

    configs/stm32f4discovery/src/stm32_ug2864ambag01.c
    configs/stm32f4discovery/src/stm32_ug2864hsweg01.c
    configs/sam4l-xplained/src/sa,_ug2832hsweg04.c
    configs/zp214xpa/src/lpc2148_ug2864ambag01.c

  LCD controllers built-into the MCU:

    arch/arm/src/lpc17xx/lpc17_lcd.c and configs/open1788/src/lpc17_lcd.c.
      RGB LCD display panel.
    configs/stm32ldiscovery/src/stm32_lcd.c.  1x6 segment LCD with bars
      using the segment LCD controller built-into the STM32L15X.

  Alphnumeric/segment LCD Displays:

    configs/skp16c26/src/m16c_lcd.c.  Untested alphanumeric LCD driver.
    configs/pcblogic-pic32mx/src/pic32mx_lcd1602.c. LCD1602 is based on the
      Hitachi HD44780U LCD controller.  This version of the driver
      uses the PIC32MX PMP interface to control the LCD.  As of this
      writing, has *NOT* been verified (mostly because I get bewildered
      by all of the jumper wires).  See include/nuttx/lcd/hd4478ou.h
      for more information about LCD1602.
    configs/sure-pic32mx/src/pic32_lcd1602.c. Another LCD1602 segment
      LCD.  This is a bit-bang version of the driver and appears to
      be fully functional.  This version of the LCD1602 driver has
      been verified and is working fine.
    configs/stm32ldiscovery/src/stm32_lcd.c.  1x6 segment LCD with bars
      using the segment LCD controller built-into the STM32L15X.

  TFT Panel Drivers:

    configs/open1788/src/lpc17_lcd.c and arch/arm/src/lpc17xx/lpc17_lcd.c
    configs/sama5d3x-ek/src and configs/sama5d4-ek/src: Use
      arch/arm/src/sama5/sam_lcd.c

graphics/
=========

  See also the usage of the LCD driver in the graphics/ directory.