### QNX系统中LCD与TP开发详解
#### 一、LCD开发
在QNX系统中进行LCD(液晶显示器)的开发是一项重要的任务,特别是在需要调整显示分辨率以匹配硬件设备的实际需求时更是如此。
##### 1.1 分辨率设置
在QNX系统中,LCD的分辨率设置通常涉及到两个关键部分:配置文件的修改与库文件的定制。
**配置文件修改**
配置文件中通常包含了关于显示器的基本信息,包括分辨率等。以常见的QNX系统为例,相关的配置信息可能位于`begindisplayinternal`与`enddisplay`之间,例如:
```
begindisplayinternal
video-mode=800x480@60
enddisplay
```
如果需要将分辨率更改为1920x1080(即1080p),则需要修改`video-mode`参数:
```
begindisplayinternal
video-mode=1920x1080@60
enddisplay
```
**库文件修改**
除了配置文件外,还需要对特定的库文件进行修改,以确保新设置的分辨率能够被系统正确识别和应用。通常情况下,需要修改的库文件为`libwfdcfg-imx6x-qnx-car.so`。为了实现这一点,首先需要获取QNX的源码,并定位到`wfdcfg.c`文件,在其中添加新的分辨率设置。接着,按照以下步骤编译该文件:
```
sh stage.sh
make clean
make
make install
```
编译完成后,会生成一个新的库文件`libwfdcfg-sample.so`,它位于`src/lib/wfdcfg-imx6x-foryou-2015-03-09-660-B328/stage/armle-v7/lib/dll`目录下。接下来,需要将此文件替换原有的`libwfdcfg-imx6x-qnx-car.so`:
```
mount -u /base
slay screen
cp /dos/libwfdcfg-sample.so /base/user/lib/graphics/libwfdcfg-imx6x-qnx-car.so
sync
reboot
```
重启系统后,新的分辨率设置即可生效。
**验证设置**
为了验证分辨率设置是否正确生效,可以通过抓取FRAMEBUFF并检查图片文件的分辨率来确认。例如,可以使用`screenshot`命令抓取当前屏幕的快照:
```
screenshot display=internal file=/dos/2.bmp
```
如果生成的`2.bmp`文件的分辨率与设置的分辨率一致,则表示设置成功。
#### 二、TP(触摸屏)驱动开发
QNX系统对于TP的支持通常需要自行开发驱动程序,因为官方提供的文档并未包含完整的源码。
**TP驱动接口**
文档链接:[http://www.qnx.com/developers/docs/660/topic/com.qnx.doc.inputevents/topic/manual/cmtouch_writing_driver.html?cp=1_1_4_0](http://www.qnx.com/developers/docs/660/topic/com.qnx.doc.inputevents/topic/manual/cmtouch_writing_driver.html?cp=1_1_4_0)
在编写TP驱动程序时,需要实现一系列的回调函数,这些函数定义了触摸事件处理的核心逻辑。文档详细介绍了`mtouch`驱动接口及其使用方法。
**中断设置**
中断向量号的设置非常重要,通常在`init_intrinfo.c`文件中进行配置。值得注意的是,GPIO中断向量号是从160开始的。
**关键函数实现**
在驱动回调函数中,有一个重要的函数需要注意:
```c
int get_contact_id(void *packet, _Uint8 t digit_idx, _Uint32 t *contact_id, void *arg)
{
*contact_id = digit_idx;
// printf("digit_idx=%d\r\n", digit_idx);
return 0;
}
```
`digit_idx`是由上层系统传递下来的,不应在函数内部赋值,否则在输入模块中可能会导致错误。
**编译与替换**
需要将TP驱动程序编译成动态链接库的形式,例如`libmtouch-mx1664.so`,并替换原有的`libmtouch-dev.so.1`文件:
```
cp /dos/libmtouch-mx1664.so /base/lib/libmtouch-dev.so.1
```
通过以上步骤,可以在QNX系统中成功实现LCD和TP的开发与调试,确保系统的显示效果与交互体验达到预期目标。