[VC, sq] pixel order stuff works on pi

This commit is contained in:
Berkus Decker 2018-11-17 15:16:59 +02:00
parent 37c942626f
commit 26652f30dc
1 changed files with 33 additions and 11 deletions

View File

@ -19,16 +19,38 @@ impl VC {
// write!(uart, "inited fb_info: {}\n", fb_info);
// let mut pixel_order = Mailbox::new();
//
// pixel_order.buffer[0] = 24;
// pixel_order.buffer[1] = mailbox::REQUEST;
// pixel_order.buffer[2] = tag::SetPixelOrder;
// pixel_order.buffer[3] = 4;
// pixel_order.buffer[4] = 4;
// pixel_order.buffer[5] = 0; // 0 - BGR, 1 - RGB
//
// pixel_order.call(channel::PropertyTagsArmToVc).map_err(|_| ());
let mut mbox = Mailbox::new();
mbox.buffer[0] = 11 * 4;
mbox.buffer[1] = mailbox::REQUEST;
mbox.buffer[2] = tag::GetDepth;
mbox.buffer[3] = 4;
mbox.buffer[4] = 0;
mbox.buffer[5] = 0; // GpuFb.depth
// SetPixelOrder doesn't work in QEMU, however TestPixelOrder does.
mbox.buffer[6] = tag::TestPixelOrder;
mbox.buffer[7] = 4;
mbox.buffer[8] = 4;
mbox.buffer[9] = 1; // PixelOrder
mbox.buffer[10] = tag::End;
mbox.call(channel::PropertyTagsArmToVc)
.map_err(|_| ());
if (mbox.buffer[4] & VAL_LEN_FLAG) == 0
|| (mbox.buffer[8] & VAL_LEN_FLAG) == 0
{
return None;
}
let order = match mbox.buffer[9] {
0 => PixelOrder::BGR,
1 => PixelOrder::RGB,
_ => return None,
};
/* Need to set up max_x/max_y before using Display::write */
let max_x = fb_info.vwidth / CHARSIZE_X;
@ -44,7 +66,7 @@ impl VC {
max_y,
fb_info.vwidth,
fb_info.vheight,
PixelOrder::BGR,
order,
))
}
/*