#c #linux #raspberry-pi #framebuffer #raspbian
#c #linux #raspberry-pi #фреймбуфер #raspbian
Вопрос:
Я хочу скопировать буфер кадров на ЖК-дисплей на моем Raspberry pi под управлением raspbian. Для этого я использую следующий код:
#include <stdio.h>
#include <stdlib.h>
#include "RAIO8870.h"
#include <bcm_host.h>
int main(int argc, char **argv)
{
DISPMANX_DISPLAY_HANDLE_T main_display_handle;
DISPMANX_RESOURCE_HANDLE_T screen_resource_handle;
VC_RECT_T rectangle;
int ret;
uint32_t image_prt;
uint16_t image[ PICTURE_PIXELS ];
bcm_host_init();
if ( !bcm2835_init() )
return ( -1 );
TFT_init_board();
TFT_hard_reset();
RAIO_init();
RAIO_SetBacklightPWMValue( 255 );
uint32_t screen=0;
printf("Open display[%i]...n", screen );
// open main framebuffer device
main_display_handle = vc_dispmanx_display_open( screen );
if ( !main_display_handle )
{
printf("n Unable to open display %i Handle: %i",screen,main_display_handle);
return( -1 );
}
Программа всегда завершается в условии if, как vc_dispmanx_display_open
и возвращает 0. Я не смог найти никакой документации об этой функции.
Итак, почему он возвращает недопустимый дескриптор и как этого избежать?
Комментарии:
1.В соответствии с этим
-1
также возможно возвращаемое значение при ошибке, что означает, что ваша проверка неверна. Это должно быть, напримерif (main_display_handle <= 0) { /* error */ }
2. Возвращаемый дескриптор всегда равен 0. Поскольку 0 никогда не является допустимым дескриптором для чего-либо, он не работает, даже с вашим условием проверки.