1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#include <framebuffer.h>
#include <mailbox.h>
#include <stdint.h>
#define WIDTH 640
#define HEIGHT 480
#define DEPTH 32
bool framebuffer_init(uint32_t* error) {
volatile const Mail* mail;
volatile __attribute__((aligned(MAIL_ALIGN))) uint32_t InitFramebuffer[] = {
80, // Size in bytes aligned to MAIL_ALIGN(16).
MAILBOX_REQUEST,
TAG_FRAMEBUFFER_SET_PHYSICAL_SCREEN_SIZE, 8, MAILBOX_REQUEST, WIDTH, HEIGHT,
TAG_FRAMEBUFFER_SET_VIRTUAL_SCREEN_SIZE, 8, MAILBOX_REQUEST, WIDTH, HEIGHT,
TAG_FRAMEBUFFER_SET_DEPTH, 4, MAILBOX_REQUEST, DEPTH,
TAG_END,
0, 0, 0 // Pad.
};
mbox_write(PROPERTY_CHANNEL, InitFramebuffer);
while ((mail = mbox_read(PROPERTY_CHANNEL)) != (volatile Mail*)(InitFramebuffer));
*error = mail->code;
return mail->code == MAILBOX_SUCCESS;
}
|