За последние несколько дней я взломал устройство на базе ARM (ADS Freescale i.MX27) со встроенным экраном. Устройство работает под управлением модифицированной минимальной системы GNU / Linux, без оконного управления или графического сервера. По умолчанию устройство должно запускать только одно приложение, которое поставляется с ним.
Я никогда раньше не занимался графическим программированием, поэтому для меня это опыт обучения. Я попытался написать простую SDL-программу для запуска на устройстве, которая считывала бы растровое изображение и отображала изображение на экране встроенного устройства.
У меня проблема в том, что независимо от того, какое разрешение, глубину или флаги я пытаюсь использовать, режим видео всегда не срабатывает, и я ничего не получаю.
Я знаю, что мой код не проблема, но я все равно опубликую его.
#include "SDL/SDL.h"
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
#define SCREEN_DEPTH 24
int main(int argc, char *argv[])
{
SDL_Surface *screen;
if(!SDL_Init(SDL_INIT_VIDEO))
{
printf("Unable to initialize SDL.\n");
return 1;
}
// It always fails right here
screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_DEPTH, SDL_SWSURFACE);
if(screen == NULL)
{
printf("Unable to set video mode.\n");
return 1;
}
SDL_Surface* image;
SDL_Surface* temp;
temp = SDL_LoadBMP("hello.bmp");
if(temp == NULL)
{
printf("Unable to load bitmap.\n");
return 1;
}
image = SDL_DisplayFormat(temp);
SDL_FreeSurface(temp);
SDL_Rect src, dest;
src.x = 0;
src.y = 0;
src.w = image->w;
src.h = image->h;
dest.x = 100;
dest.y = 100;
dest.w = image->w;
dest.h = image->h;
SDL_BlitSurface(image, &src, screen, &dest);
printf("Program finished.\n\n");
return 0;
}
Из того, что я могу сказать, приложение, которое должно работать на этом устройстве, использует Qtopia. Опять же, я новичок в графическом программировании, поэтому не знаю, как управлять графическим выводом во встроенной среде, подобной этой.
Есть идеи?