Linux: vc_dispmanx_display_open возвращает недопустимый дескриптор

#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 никогда не является допустимым дескриптором для чего-либо, он не работает, даже с вашим условием проверки.