Russian Qt Forum

Qt => Qt Embedded => Тема начата: Stlkr_19 от Март 11, 2016, 06:17



Название: Настройка Qt-embedded для работы с фрэймбуфером
Отправлено: Stlkr_19 от Март 11, 2016, 06:17
Всем доброго времени!

Прошу помощи в настройке Qt-embedded для работы с фрэймбуфером.

Собрал простую программку в Qt - Label с текстом "Hello, world!". Запустил ее на фулскрине.
Проблемы:
1. Инвертирован цвет (в программе Qt задан черный – на экране пиксель светится, задан белый – пиксель погашен)
2. Перепутаны попарно пиксели (т.е. тетрады в байтах фреймбуфера)
При этом ядро выводит своего пингвина в верном цвете и пиксели не путает.

Железо:
at91sam9g45 (arm9) + norflash + TFEL-дисплей (160х120 mono, шина 4 бита)

Софт:
linux-2.6.36-rc6
qt-4.8.6 (собран в систему при помощи Buildroot-2015.11.1)
Кросс-компилятор CodeSourcery 2014.05

Фреймбуфер в ядре настроен так (вывод fbset):
Mode “160x120-21”
#D: 0,414 MHz, H: 2,540 kHz, V: 20,991 Hz
geometry 160 120 160 120 4
timings 2415458 1 1 0 0 1 1
accel false
rgba 4/0, 4/0, 4/0
endmode

Т.е. pixel depth = 4bpp (встроенный в проц LCD-контроллер делает 16 оттенков при помощи "ШИМ").


Название: Re: Настройка Qt-embedded для работы с фрэймбуфером
Отправлено: kuzulis от Март 11, 2016, 10:31
Было что-то похожее, когда оранжевый отображался как синий.. вроде проблема была в 16-битном фреймбуффере.. настроили на 24 бита и все стало норм.. как-то так..


Название: Re: Настройка Qt-embedded для работы с фрэймбуфером
Отправлено: Stlkr_19 от Март 15, 2016, 07:53
В-общем, проблему "решил"

В исходниках ядра в файле
arch/arm/mach-at91/board-sam9m10g45ek.c
поправил значение регистра LCD Control Register 2.

/*
#define AT91SAM9G45_DEFAULT_STN_LCDCON2 (ATMEL_LCDC_MEMOR_LITTLE \
| ATMEL_LCDC_DISTYPE_STNMONO \
| ATMEL_LCDC_CLKMOD_ALWAYSACTIVE \
| ATMEL_LCDC_IFWIDTH_4 \
| ATMEL_LCDC_INVVD_INVERTED \
| ATMEL_LCDC_SCANMOD_SINGLE)
*/
#define AT91SAM9G45_DEFAULT_STN_LCDCON2 (ATMEL_LCDC_MEMOR_WINCE \
| ATMEL_LCDC_DISTYPE_STNMONO \
| ATMEL_LCDC_CLKMOD_ACTIVEDISPLAY \
| ATMEL_LCDC_IFWIDTH_4 \
| ATMEL_LCDC_INVVD_NORMAL \
| ATMEL_LCDC_SCANMOD_SINGLE)

Теперь Qt пишет верно и все красиво.

Но в консоли, которая писала в tty0 (на дисплей) всё развалилось - и пингвин, и текст под пингвином (цвет инверсный, пиксели попарно перепутаны).
Консоль мне пока не нужна, поэтому пока так оставлю.

Но если кто-нибудь объяснит, как сделать чтоб и Qt и консоль работали правильно, я буду очень благодарен!