Commit Graph

9955 Commits

Author SHA1 Message Date
Gregory Nutt 8941446bfb A patch to add previous added font into nxf_getfonthandle function. From Pierre-Noel Bouteville. 2014-12-19 15:43:04 -06:00
Gregory Nutt a3eb245989 Update ChangeLog 2014-12-19 15:40:27 -06:00
Gregory Nutt fa5dffbc18 STM32 LTDC: Move ltdc.h from include/nuttx/video to arch/arm/include/stm32; Trivial updates after general review 2014-12-19 14:52:17 -06:00
Gregory Nutt 31a0e8ac5e Stuff that goes along with the new LTDC README file 2014-12-19 14:14:41 -06:00
Gregory Nutt 1ff469af5f stm32f429i-disco: add default platform configuration to test framebuffer support for the ltdc
Memory configuration:

The heap start address of memory region 3 starts at 0xD0000000.
The allocated framebuffer of the layers is addressed up to the end of the memory
region 3.

If the layer pixel format changes e.g. from RGB565 to RGB24, than the memory
configuration must be configured too. Currently an easy memory calculation
is missing for that in Kconfig.

Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-12-19 14:08:59 -06:00
Gregory Nutt 8d6614b9af stm32f429i-disco: initialize ltdc during bootup
Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-12-19 14:05:19 -06:00
Gregory Nutt 61c927904f stm32f429i-disco: enable configuration of framebuffer support for the ltdc controller
Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-12-19 14:02:26 -06:00
Gregory Nutt 4e5c2b7976 stm32: Add configuration option for ltdc
This adds the following ltdc configuration options:
- dither support
- cmap support, is this the right place for CONFIG_FB_CMAP?
- support for extended ltdc interface

Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-12-19 13:58:39 -06:00
Gregory Nutt d2b7dc0eef stm32f429i-disco: Add support for initializing ltdc framebuffer and the configured lcd display
This adds support for initializing of the ltdc controller and the lcd device connected on the stm32f429i-disco. The following methods are provided for the generic fb interface:

- up_fbinitialize
- up_fbgetvplane
- fb_uninitialize

The following methods are provided for the ltdc interface:

- up_ltdcgetlayer

Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-12-19 13:54:27 -06:00
Gregory Nutt 7a874e5d4c ili9341: update interface control definitions
Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-12-19 13:52:40 -06:00
Gregory Nutt 4ac49f514d stm32: implements ltdc frambuffer and support for ltdc layer operation
This implements the framebuffer support for the generic nuttx framebuffer
interface, (see nuttx/video/fb.h)

This also implements the interface to perform hardware accelerated layer
operation by the ltdc controller and dma2d controller later (see
nuttx/video/ltdc.h).

The following methods are supported by the ltdc interface:

- getvideoinfo
  Get video information of the layer

- getplaneinfo
  Get plane information of the layer

- getlid
  Handle specific layer identifier. This allows to detect to current layer
  state (e.g. important for layer flipping)

- setclut
  Set the layer color lookup table. Up to 256 color entries supported.

- getclut
  Get the layer color lookup table

- setcolor
  Set the default layer color. In the context of the ltdc layer this means set
  the default color outside the active area or if the layer is disabled.

- getcolor
  Get the default layer color

- setcolorkey
  Set the layer colorkey (chromakey). Colorkey is enabled by blendmode
  LTDC_BLEND_COLORKEY

- getcolorkey
  Get the layer colorkey

- setalpha
  Set the constant alpha value. If blend mode LTDC_BLEND_SRCPIXELALPHA or
  LTDC_BLEND_DESTPIXELALPHA is defined than the blended color is calculated
  by the formel:
    Cdest = Pixelalpha * Constalpha * Csrc.
  Otherwise:
    Cest = Constalpha * Csrc

- getalpha
  get the alpha value

- setblendmode
  Set the layer blendmode.
  Supported blendmodes:
    non blendmode (do not perform blend operation independent on the layers
                   alpha and colorkey)
    alpha          alpha blending (transparency)
    destpixelalpha use pixel alpha value for the top layer (Layer2)
    srcpixelalpha  use pixel alpha value for the subjacent layer (Layer1)
    colorkey       enable colorkey

- getblendmode
  Get the layer blendmode

- setarea
  Set the active layer area, the visible rectangle inside the whole layer.
  This also allows to change the position of the whole layer which is visible in
  the selected area independent on the area position.

- getarea
  Get the active layer area

- update
  Reload the layer shadow register and make changes visible. Also supports
  layer flipping.

Note! Dithering and background color are static parameter and can only changed
at build time.

Implementation details:

The implementation of ltdc interface was inspired by SDL and DirectFB.
All layer settings are shadowed before they become active (except setclut).
They are still inactive until the layer is updated. This is done by the update
method. Should clut only active after an update or not? Clut is used for drawing
while the other settings usually used for blend or blit operations. So i think
this should be the right way.

The implementation of ltdc interface was inspired by SDL and DirectFB.
All layer settings shadowed before they become active (except clut).
They are still inactive until the layer is updated. This is done by the update
call. Should clut only activated after an update or not? Clut is used for draw
operation while the other settings usually used for blend or blit operations.
So i think this should be the right way.

Deviations from the ltdc hardware implementation:

- Shadow register update of both layer (Layer1 or Layer2) is independent as long
  LTDC_UPDATE_SIM is not set. This flag allows to update both layer simultaneous.
  Otherwise only the desired layer is updated.

Layer operation:

Keep in mind, both layer are allways active (of course if both enabled by the
configuration). First the Layer 1 is blended with the background color and the
result is blended with the Layer2. To avoid blend effects, set the Layer2 in non
blend mode. This is equal to blend with alpha = 255. Enable blending of Layer2
with the background color by enable blending of Layer1 and disable the opacity
by setting the alpha value to 0.

Layer flip:

A layer flip usual mean swapping two framebuffer. So the current inactive buffer
can refreshed with data while the active framebuffer is visible. A flip
operation changes the inactive layer to the active one and vice versa.

The ltdc implementation supports layer flip. This can be done by the update call
and the flag LTDC_UPDATE_FLIP. In this case ltdc makes the inactive layer
invisible. In detail, the inactive layer is disabled and the blendmode reset.
Detection of the current layer state (e.g. active or inactive) is supported
by the getlid method combined with one of the LTDC_LAYER_* flags.
Maybe an additional method "flip" for flip operation should be added to the ltdc
interface? But this make no sence from my view if the layer is a non LTDC layer,
e.g. playing with dma2d only.

Supported and tested nuttx pixel formats:

Single Layer without LTDC interface support:
- FB_FMT_RGB8 (cmap support required)
- FB_FMT_RGB16_565
- FB_FMT_RGB24

Single Layer with LTDC interface support:
- FB_FMT_RGB8 (cmap support required)
- FB_FMT_RGB16_565
- FB_FMT_RGB24

Dual Layer with LTDC interface support:
- FB_FMT_RGB8 (cmap support required)
- FB_FMT_RGB16_565
- FB_FMT_RGB24

Why is FB_FMT_ARGB8888 missing?

Changes:
- Remove unused register debug method.

Todo:
- Add support for backlight, currently not neccessary

Did i forgot something? Take a look in the ltdc example or the interface
description (see nuttx/include/video/ltdc.h).

Thanks to Ken for the base layout. ;)

Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-12-19 13:48:53 -06:00
Gregory Nutt 3ce3b168f8 stm32: Add interface description for ltdc controller. This defines the interface to perform hardware accelerated layer operation by the ltdc controller.
The following methods must be supported by the implementation:

- gevideoinfo
- getplaneinfo
- getlid
- setclut
- getclut
- setcolor
- getcolor
- setcolorkey
- getcolorkey
- setalpha
- getalpha
- setblendmode
- getblendmode
- setarea
- getarea
- update

And if DMA2D is supported:

- blit
- blend

The method up_ltdcgetlayer provides access to a reference of a specific ltdc
layer.

Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-12-19 13:45:18 -06:00
Gregory Nutt 10934fb6a2 stm32: Add infrastructure for dma2d support
Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-12-19 13:41:08 -06:00
Gregory Nutt 7edfddfc96 stm32: Add common stm32 layer description. This defines a common layer description for the ltdc and dma2d controller.
Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-12-19 13:37:08 -06:00
Gregory Nutt dd51c8db2d stm32f429i-disco: update board definition for the ili9341 LCD display. This configures all LCD settings for the RGB interface. Also adds a customer LCD display template.
Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-12-19 13:34:37 -06:00
Gregory Nutt 24a2f8a0a4 stm32: configure PLLSAI clock to enable ltdc register access
Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-12-19 13:30:58 -06:00
Gregory Nutt 7999e7519c stm32: Add missing clut register definition
Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-12-19 13:28:42 -06:00
Gregory Nutt 3e640a37d2 stm32: rename CFBLR register name to the name used in the reference manual
Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-12-19 13:26:04 -06:00
Gregory Nutt a34208d698 stm32: rename PLLSAI register name to this one in the reference manual
Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
2014-12-19 13:21:39 -06:00
Gregory Nutt 93bcd3e03e TM4C129X: Add custom system control header file (incomplete) 2014-12-19 12:12:52 -06:00
Gregory Nutt 67e6b760e8 Add some OpenOCD scripts for some TI Tiva boards 2014-12-18 16:54:48 -06:00
Gregory Nutt 64ce7563f2 CC3000: Fix yet another typo in last two commitsgit diff I should not be doing this when I have the flugit diff 2014-12-18 16:27:46 -06:00
Gregory Nutt 0f7d028c4f Updata ChangeLog 2014-12-18 15:35:26 -06:00
Gregory Nutt 6cc9716d55 Tiva: Fix configuration logic for IRQ interrupts. The various parts support varying numbers of GPIO blocks and with varying capabilities to support interrupts on the pins of different GPIO blocks 2014-12-18 15:33:52 -06:00
Gregory Nutt 8e1020e8eb Update ChangeLog 2014-12-18 15:20:51 -06:00
Gregory Nutt a5fcd71af0 Tiva: Change negative logic CONFIG_TIVA_DISABLE_GPIOx_IRQS to positive logic CONFIG_TIVA_GPIOx_IRQS 2014-12-18 15:19:16 -06:00
Gregory Nutt e3487f4298 Fix a couple of spelling errors in comments 2014-12-18 13:56:15 -06:00
Gregory Nutt b54d19b1d3 Update ChangeLog 2014-12-18 13:53:29 -06:00
Gregory Nutt a1a2e53c3e Freedom KL25Z: Update the CC3000 support to use the current CC300 interfaces. From Alan Carvalho de Assis 2014-12-18 13:52:01 -06:00
Gregory Nutt ddad16a7b7 Tiva: Add GPIO interrupt support for the TMS4C129X 2014-12-18 11:52:06 -06:00
Gregory Nutt 0c698a7121 DK-TM4C129X: Add support for buttons 2014-12-18 11:51:30 -06:00
Gregory Nutt c79bc06988 DK-TM4C129X: Add LED support 2014-12-18 10:20:34 -06:00
Gregory Nutt 55a3c57399 DK-TM4C129X: Fixes to get clean build. Logic is still not complete, however 2014-12-18 08:24:24 -06:00
Gregory Nutt 49a22f1ccb CC3000: Oops. Fix an error in the last commit 2014-12-18 07:39:55 -06:00
Gregory Nutt 2f1a30c403 Update ChangeLog 2014-12-18 07:29:12 -06:00
Gregory Nutt 93a21d2872 Freedom-KL25Z: Add pin configuration for add-on ADXL345 board. From Alan Carvalho de Assis 2014-12-18 07:27:49 -06:00
Gregory Nutt c59b9967ba Update documentation 2014-12-18 07:18:43 -06:00
Gregory Nutt 2fe506d70c CC3000 Fix: Data can be unaligned. When dereferences as an input ntosh(), a bad value is returned. Reported by Alan Carvalho de Assis 2014-12-18 07:18:00 -06:00
Gregory Nutt a775933afa Update ChangeLog 2014-12-17 12:34:15 -06:00
Gregory Nutt d286c0f32f A previous change increased the task name size allocation by one to hold a NUL terminator. This changes reduces the configured name size by one so that no additional memory is used 2014-12-17 12:30:26 -06:00
Gregory Nutt 937f9f23f1 strncpy will not copy the terminating \0 into the destination if the source is larger than the size of the destination. Ensure that the last byte is always zero and let strncpy only copy CONFIG_TASK_NAME_SIZE bytes. The issue of unterminated names can be observed in ps when creating a pthread while CONFIG_TASK_NAME_SIZE is set to 8. 2014-12-17 12:24:02 -06:00
Gregory Nutt 8e4f7230f9 ADXL345: Don't select device if only change SPI settings 2014-12-17 12:01:18 -06:00
Gregory Nutt d27fb63862 TM4C129X: Add pin multiplexing 2014-12-17 11:55:45 -06:00
Gregory Nutt c1851296b2 Tiva TM4C129X: Fix some errors in memory map 2014-12-17 09:42:37 -06:00
Gregory Nutt 2990c913b4 Add memory map for the TM4C129X 2014-12-17 09:40:56 -06:00
Gregory Nutt 3c6616f86a Add interrupt definitions for the TM4C129X 2014-12-17 08:19:23 -06:00
Gregory Nutt 2554b5c89a DK-TM4C129X: Switch to Windows/Cygwin + CodeSourcery 2014-12-17 07:00:22 -06:00
Gregory Nutt dfed763f4e Tiva: Better distinguish features of the TM4C1294xx and the TM4C129Xxx 2014-12-16 18:02:59 -06:00
Gregory Nutt 34609141b0 ADXL345: Free allocations on failure 2014-12-16 17:27:09 -06:00
Gregory Nutt 09b16e3819 Remove packaging indications for TM4C129 configuration variables 2014-12-16 16:22:52 -06:00