ioctl заблокировать операцию - PullRequest
0 голосов
/ 02 января 2012

Я использую функцию ioctl для доступа к кадровому буферу
Проблема в том, что для каждого кадра я пишу кадровый буфер три раза
Например, в каждом кадре я сначала заполняю кадр красным цветом, выполняю некоторые вычисления, заполняю зеленый, затем выполняю другое вычисление, затем заполняю синий.
Другими словами, в каждом кадре у меня есть три слоя: красный как нижний, зеленый, затем синий как верхний. Поэтому красный и зеленый невидимы, и все, что я вижу, это синий.
Теперь мой вопрос заключается в том, что когда я использую ioctl call, кажется, что он не может распознать красный и зеленый, а только синий.
Для каждого кадра я делал что-то вроде:

Red(); //Frame buffer will be all Red
getFrameBuffer(); // ioctl call
Green();
Blue();

А мой getFrameBuffer () выглядит примерно так:

int fd = open("/dev/fb0",O_RDWR);
if (fd == -1)
   printf("Could not open framebuffer\n");
struct fb_var_screeninfo screen_info;
struct fb_fix_screeninfo fixed_info;
if (ioctl(fd, FBIOGET_FSCREENINFO, &fixed_info))
   printf("Error reading fixed information.\n");
if (ioctl(fd, FBIOGET_VSCREENINFO, &screen_info))
   printf("Could not read variable screen info.\n");
size_t screensize = fixed_info.line_length*screen_info.yres;
unsigned char *fbp = (unsigned char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if ((int)fbp == -1)
   printf("Cannot mapped\n");
munmap(fbp,screensize);

Пока, когда я вызываю getFrameBuffer (), он возвращает весь синий цвет. Есть ли возможность заблокировать запись кадрового буфера или чего-то в этом роде, чтобы при вызове getFrameBuffer () я получал красный цвет?

...