Guiliani  Version 2.6 revision 7293 (documentation build 12)
GfxEnvDRM.h
1/*
2* Copyright (C) TES Electronic Solutions GmbH,
3* All Rights Reserved.
4* Contact: info@guiliani.de
5*
6* This file is part of the Guiliani HMI framework
7* for the development of graphical user interfaces on embedded systems.
8*/
9
10#ifndef __GFXENV_DRM_H__
11#define __GFXENV_DRM_H__
12
13#include "GfxEnv.h"
14#include "GUICommonEnums.h"
15
16#include "eC_TArray.h"
17
18#include <gbm.h>
19
20#include <xf86drm.h>
21#include <xf86drmMode.h>
22
24
26class CGfxEnvDRM : public CGfxEnv
27{
28public:
30 struct gbmData
31 {
32 struct gbm_device *dev;
33 struct gbm_surface *surface;
34 };
35
38 {
39 struct gbm_bo* bufferObject;
40 uint32_t fb_id;
41 };
42
44 struct drmData
45 {
46 int fd;
47 drmModeModeInfo *mode;
48 uint32_t crtc_id;
49 uint32_t connector_id;
50 };
51
52public:
65 static eC_Bool CreateInstance(
66 const char* pcInterface,
67 const SurfaceMode_t& eSurfaceMode,
68 const CGUICommonEnums::ImageType_t& eScreenFormat,
69 const eC_UInt& uiWidth,
70 const eC_UInt& uiHeight,
71 const eC_Bool& bUseOverlayPlane,
72 const eC_UInt& uiOverlayPlaneID,
73 const eC_UInt& uiXPosition,
74 const eC_UInt& uiYPosition);
75
86 static eC_Bool CreateInstance(
87 const char* pcInterface,
88 const SurfaceMode_t& eSurfaceMode,
89 const CGUICommonEnums::ImageType_t& eScreenFormat,
90 const eC_UInt& uiWidth,
91 const eC_UInt& uiHeight,
92 const eC_Bool& bAutoDetect,
93 const eC_UInt& uiMaxVRefresh);
94
109 const char* pcInterface,
110 const SurfaceMode_t& eSurfaceMode,
111 const CGUICommonEnums::ImageType_t& eScreenFormat,
112 const eC_UInt& uiWidth,
113 const eC_UInt& uiHeight,
114 const eC_Bool& bUseOverlayPlane,
115 const eC_UInt& uiOverlayPlaneID,
116 const eC_UInt& uiXPosition,
117 const eC_UInt& uiYPosition,
118 const eC_Bool& bAutoDetect,
119 const eC_UInt& uiMaxVRefresh);
120
122 virtual ~CGfxEnvDRM();
123
124 virtual void* GetDisplayHandle() const;
125
126 virtual void* GetWindowHandle() const;
127
128 virtual void** GetFrameBuffers() const;
129
130 virtual eC_Bool SwapBuffers();
131
132 virtual void InitLayer(const LayerConfiguration_t& kLayerConfig);
133
134 virtual eC_Bool UpdateLayerBuffers(
135 const eC_UInt& uiLayerID,
136 void* pkRenderBuffer,
137 void* pkDisplayBuffer,
138 const eC_UInt& uiWidth,
139 const eC_UInt& uiHeight);
140
141 virtual void UpdateLayer(const LayerConfiguration_t& rkLayerConfig, const LayerUpdate_t& eUpdateReason);
142
143 virtual void EndOfRefresh();
144 virtual eC_Bool RefreshScreen(const CGUIRect& rkInvalidatedArea);
145
146private:
147 typedef struct
148 {
149 uint32_t BufferHandle;
150 uint32_t FrameBufferID;
151 uint32_t Stride;
152 uint32_t Size;
153 uint32_t BytesPerPixel;
154 eC_UByte* Buffer;
155 } FrameBufferData;
156
157 typedef struct
158 {
159 eC_UInt NumBuffers;
160 eC_UInt DrawBuffer;
161 FrameBufferData** Buffers;
162 } LayerData;
163
164 typedef struct
165 {
166 uint32_t ID;
167 uint32_t Type;
168 uint32_t Alpha;
169 uint32_t ZPos;
170 } OverlayPlane;
171
172private:
175 CGfxEnvDRM();
176
180 eC_Bool Init(const char* pcInterface);
181
182 eC_Bool SetupKMS();
183
184 void GetOverlayPlanes(int32_t crtc_index, eC_TArray<OverlayPlane>& kLayerIDs);
185
186 FrameBufferData* CreateFrameBuffer(
187 const eC_UInt& uiWidth,
188 const eC_UInt& uiHeight,
189 const CGUICommonEnums::ImageType_t& eFormat);
190 void DeleteFrameBuffer(FrameBufferData* pkData);
191
192 eC_Bool MapFrameBuffer(FrameBufferData* pkData);
193 void UnmapFrameBuffer(FrameBufferData* pkData);
194
195 DRMFrameBuffer* GetFrameBufferFromBO(struct gbm_bo* bufferObject);
196
197 void CopyBuffer(int iX1, int iY1, int iRectWidth, int iRectHeight);
198
199 int Flip(uint32_t fb_id);
200
201 eC_Bool UpdatePlanePosition(
202 uint32_t plane_id, uint32_t fb_id,
203 int32_t crt_x, int32_t crt_y,
204 uint32_t crt_w, uint32_t crt_h,
205 uint32_t src_x, uint32_t src_y,
206 uint32_t src_w, uint32_t src_h);
207
208 eC_Bool UpdatePlaneAlpha(
209 uint32_t plane_id,
210 uint32_t alpha_id,
211 uint8_t alpha);
212
213 void RefreshLayer(eC_UInt uiLayerIndex);
214
215 void RefreshLayers();
216
217 uint32_t GetBPP(const CGUICommonEnums::ImageType_t& eFormat);
218 uint32_t GetDRMFormat(const CGUICommonEnums::ImageType_t& eFormat);
219
220private:
221 eC_Bool m_bUseOverlayPlane;
222 uint32_t m_uiOverlayPlaneID;
223 eC_UInt m_uiOverlayXPosition;
224 eC_UInt m_uiOverlayYPosition;
225
226 eC_Bool m_bAutoDetect;
227 eC_UInt m_uiMaxVRefresh;
228
229 struct gbm_bo* m_pkBufferObject;
230 DRMFrameBuffer* m_pkFrameBuffer;
231
232 gbmData m_kGBMData;
233
234 eC_TArray<OverlayPlane> m_kOverlayPlanes;
235
236 FrameBufferData* m_pkMainFBData;
237
238 eC_UByte* m_pubMappedFB;
239 eC_UByte* m_pubDrawBuffer;
240
241 LayerData* m_pkLayers;
242};
243
244#endif
ImageType_t
Definition: GUICommonEnums.h:80
Helper class to supply a platform independent rectangle implementation.
Definition: GUIRect.h:63
Wrapper class for the DRM interface.
Definition: GfxEnvDRM.h:27
CGfxEnvDRM(const char *pcInterface, const SurfaceMode_t &eSurfaceMode, const CGUICommonEnums::ImageType_t &eScreenFormat, const eC_UInt &uiWidth, const eC_UInt &uiHeight, const eC_Bool &bUseOverlayPlane, const eC_UInt &uiOverlayPlaneID, const eC_UInt &uiXPosition, const eC_UInt &uiYPosition, const eC_Bool &bAutoDetect, const eC_UInt &uiMaxVRefresh)
virtual void UpdateLayer(const LayerConfiguration_t &rkLayerConfig, const LayerUpdate_t &eUpdateReason)
virtual void * GetDisplayHandle() const
virtual void * GetWindowHandle() const
static eC_Bool CreateInstance(const char *pcInterface, const SurfaceMode_t &eSurfaceMode, const CGUICommonEnums::ImageType_t &eScreenFormat, const eC_UInt &uiWidth, const eC_UInt &uiHeight, const eC_Bool &bAutoDetect, const eC_UInt &uiMaxVRefresh)
virtual ~CGfxEnvDRM()
virtual eC_Bool SwapBuffers()
virtual void InitLayer(const LayerConfiguration_t &kLayerConfig)
virtual eC_Bool UpdateLayerBuffers(const eC_UInt &uiLayerID, void *pkRenderBuffer, void *pkDisplayBuffer, const eC_UInt &uiWidth, const eC_UInt &uiHeight)
static eC_Bool CreateInstance(const char *pcInterface, const SurfaceMode_t &eSurfaceMode, const CGUICommonEnums::ImageType_t &eScreenFormat, const eC_UInt &uiWidth, const eC_UInt &uiHeight, const eC_Bool &bUseOverlayPlane, const eC_UInt &uiOverlayPlaneID, const eC_UInt &uiXPosition, const eC_UInt &uiYPosition)
virtual eC_Bool RefreshScreen(const CGUIRect &rkInvalidatedArea)
virtual void ** GetFrameBuffers() const
virtual void EndOfRefresh()
Definition: GfxEnv.h:53
SurfaceMode_t
Definition: GfxEnv.h:60
virtual eC_UByte GetBPP() const
Definition: GfxEnvDRM.h:38
uint32_t fb_id
fb id
Definition: GfxEnvDRM.h:40
struct gbm_bo * bufferObject
bo
Definition: GfxEnvDRM.h:39
Definition: GfxEnvDRM.h:45
uint32_t connector_id
connector
Definition: GfxEnvDRM.h:49
drmModeModeInfo * mode
mode
Definition: GfxEnvDRM.h:47
uint32_t crtc_id
crtc
Definition: GfxEnvDRM.h:48
int fd
descriptor
Definition: GfxEnvDRM.h:46
Definition: GfxEnvDRM.h:31
struct gbm_surface * surface
surface
Definition: GfxEnvDRM.h:33
struct gbm_device * dev
device
Definition: GfxEnvDRM.h:32
Definition: GUILayerConfig.h:37