콘텐츠로 이동

4.14. Frame Buffer

LCD 화면에 프레임 버퍼의 내용을 출력하거나, 화면의 정보를 얻어오는 함수로 구성되어 있다.

LCD 에 화면 내용을 변경하는 것을 시간을 요하는 작업이므로, Double Buffering 개념을 이용하여 화면 출력 시간을 최소화 한다. MG_fbGetScreenBuffer() 를 사용하면, 시스템에서 사용하는 이미지 버퍼를 얻어 올 수 있다. 얻어온 메모리 이미지 버퍼에 화면에 출력될 내용을 다 그리고 나서 MG_fbFlushLcd() 를 사용하여 이 미지 버퍼의 내용을 LCD 화면에 출력한다.

단말기 기본 소프트웨어의 프레임 버퍼를 사용한다.

관련 자료형

typedef struct _MH_DisplayInfo {
M_Int32 bpp; /* 한 픽셀이 차지하는 비트 수 */
M_Int32 depth; /* 한 픽셀이 차지하는 유효한 비트 수.
예) 24bit인 경우 bpp는 32, depth는 24가 될 수 있다.
2의 depth 승이 실제 화면에서 출력할 수 있는 컬러 색상 수가 된다. */
M_Int32 width; /* 화면의 폭; 픽셀 단위 */
M_Int32 height; /* 화면의 높이; 픽셀 단위 */
M_Int32 bpl; /* 화면의 한 라인이 차지하는 바이트 수.
내부에 PADDING도 포함된다. */
M_Int32 colortype; /* LCD가 GrayScale인지 TRUE COLOR인지를 알려준다. */
M_Int32 redmask; /* TRUE 컬러인 경우, 픽셀 값 내에 red 값이 쓰여지는 부분의 mask */
M_Int32 bluemask; /* TRUE 컬러인 경우, 픽셀 값 내에 blue 값이 쓰여지는 부분의 mask */
M_Int32 greenmask; /* TRUE 컬러인 경우, 픽셀 값 내에 green 값이 쓰여지는 부분의 mask */
} MH_DisplayInfo;
#define MH_FB_MAIN_LCD 1
#define MH_FB_SUB_LCD 2

설명

팔레트를 사용하지 않는 경우의 컬러 타입. (1 << 0)로 정의한다.

프로토타입

#define MH_GRP_DIRECT_COLOR_TYPE

설명

흑백 타입. (1 << 1)로 정의한다.

프로토타입

#define MH_GRP_GRAY_TYPE

설명

컬러 타입. (1 << 2)로 정의한다.

프로토타입

#define MH_GRP_COLOR_TYPE

설명

화면 관련된 정보를 얻어온다.

screen 에 해당하는 화면 정보를 얻어 온다. screen 값은 MH_FB_MAIN_LCDMH_FB_SUB_LCD 둘 중 하나가 될 수 있다. MH_FB_MAIN_LCD 는 모든 단말기에 존재하 는 LCD 이지만, MH_FB_SUB_LCD 는 듀얼 폴더와 같이 부가적인 LCD 로써 단말기에 따라서 존재할 수도 있고 존재 하지 않을 수도 있다.

프로토타입

void MH_fbGetDisplayInfo (M_Int32 screen,MH_DisplayInfo* displayinfo)

매개 변수

  • screen - [in] 스크린 번호: MH_FB_MAIN_LCD, MH_FB_SUB_LCD 둘 중 하나가 될 수 있다.
  • displayinfo - [out] 스크린 정보

반환 값

없음

부작용

없음

참고 항목

없음

설명

LCD 화면에 내부 스크린 프레임 버퍼의 내용을 출력시킨다.

이 함수를 통해서 출력된 내용은 다음 이 함수를 부르기 전까지 그 내용이 계속 화면에 출력된다.

프로토타입

void MH_fbFlushLcd (M_Int32 screen, M_Int32 x, M_Int32 y, M_Int32 w, M_Int32 h)

매개 변수

  • screen - [in] 스크린 번호: MH_FB_MAIN_LCD, MH_FB_SUB_LCD 둘중 하나가 될 수 있다.
  • x - [in] 출력시킬 영역의 x 좌표
  • y - [in] 출력시킬 영역의 y 좌표
  • w - [in] 출력시킬 영역의 폭
  • h - [in] 출력시킬 영역의 높이

반환 값

없음

부작용

없음

참고 항목

없음

설명

지정한 0xRRGGBB 값에 해당하는 픽셀 값을 얻어 온다.

프로토타입

M_Int32 MH_fbMakePixel (M_Int32 color)

매개 변수

  • color - [in] 0xRRGGBB 의 color 값

반환 값

픽셀 값

부작용

없음

참고 항목

없음

설명

지정한 r, g, b 값에 해당하는 픽셀 값을 얻어 온다.

프로토타입

M_Int32 MH_fbGetPixelFromRGB (M_Int32 r, M_Int32 g, M_Int32 b)

매개 변수

  • r - [in] 빨강색(0-255)
  • g - [in] 녹색(0-255)
  • b - [in] 파랑색(0-255)

반환 값

픽셀 값

부작용

없음

참고 항목

없음

설명

지정한 픽셀 값의 빨강, 파랑, 녹색의 값을 얻어 온다.

프로토타입

M_Int32 MH_fbGetRGBFromPixel (M_Int32 pixel, M_Int32 *r, M_Int32 *g, M_Int32 *b)

매개 변수

  • pixel – [in] 픽셀 값
  • r - 빨강색(0-255)
  • g - 녹색(0-255)
  • b - 파랑색(0-255)

반환 값

픽셀 값

부작용

없음

참고 항목

없음

설명

스크린 프레임 버퍼를 돌려준다.

기본적으로 LCD 인터페이스 하는 속도가 현저하게 느리므로 LCD 의 출력되고 있는 내용을 호스트 메모리에 저장해 놓고 있어야 한다. 이러한 시스템에서 사용하는 스크린 프레임 버퍼를 돌려준다. 스크린 프레임 버퍼는 LCD 에 출력할 수 있는 크기 [(bits per pixel * width + padding) / 8 * height] 만큼 잡혀야 하며, 그 위치가 변경 되서는 안된다.

Dual LCD 의 경우에 대부분 주 LCD 와 보조 LCD 의 depth(색상 표현 개수)가 다른 경우가 있지만, 넘겨 주는 타입은 주 LCD 와 같은 형태의 데이타가 넘어가는 것을 가정한다. 만일 보조 LCD 의 데이타 타입이 다르다면, MG_fbFlushLcd 함수 내에서 적절한 변형 과정(가장 근접한 색상을 해당 점에 출력하는 과정)을 거쳐 LCD 에 출력하도록 한다. 데이타는 LCD 화면의 상단 좌측의 점으로 부터 시작하여 좌측으 로 가는 방향의 픽셀 값을 연속적으로 저장한다. 아래 그림을 참조하십시요.

alt text

프로토타입

M_Uint8* MH_fbGetScreenBuffer (M_Int32 lcd_num)

매개 변수

  • lcd_num - [in] 화면 인덱스(0; 주화면 1; 보조 LCD 화면)

반환 값

스크린 프레임 버퍼

부작용

없음

참고 항목

없음