滑动和旋转角度的侦测由命令CMD_TRACK和寄存器REG_TRACKER实现的。
命令CMD_TRACK可以定义一个用户指定的区域内检测触摸的行为,协处理器会将结果保存到REG_TRACKER中。
#define ftCoCmdTrack(x, y, w, h, tag)\
{\
ftWrDispCmd(CMD_TRACK);\
ftWrDispCmd(((uint32_t)(y) << 16) | ((x) & 0xffff));\
ftWrDispCmd(((uint32_t)(h) << 16) | (w));\
ftWrDispCmd(tag);\
}
参数w,h决定检测触摸的行为,当w,h都为1时表示是当前检测的是旋转,当w,h都为0则关闭检测,否则是检测滑动。如果w > h则是检测横向滑动,w < h是检测竖向滑动。
寄存器REG_TRACKER的低16位对应CMD_TRACK的参数tag,高16位对应检测触摸的值。对应旋转的检测是角度值,而对滑动的检测是移动的像素点的个数。
例1实现如下图的拨码盘
显示指令如下:
ftWrDispCmd(TAG_MASK(1));
ftWrDispCmd(TAG(2));
ftCoCmdTrack((PANEL_WIDTH / 2), (PANEL_HEIGHT / 2), 1, 1, 2);
ftCoCmdDial((PANEL_WIDTH / 2), (PANEL_HEIGHT / 2), 60, 0, gDialAngle * 65535 / 360);
检测指令如下:
track = ft8xxRdMem32(REG_TRACKER);
switch (track & 0xffff)
{
case 2:
gDialAngle = (uint16_t)(((track >> 16) & 0xffff) * 360 / 65535);
break;
}
例2实现如下图的Slider
显示指令如下
ftWrDispCmd(TAG(3));
ftCoCmdTrack((PANEL_WIDTH / 2 - 60), (PANEL_HEIGHT / 2 - 90), 120, 12, 3);
ftCoCmdSlider((PANEL_WIDTH / 2 - 60), (PANEL_HEIGHT / 2 - 90), 120, 12, 0, gSlideH, 100);
检测指令如下:
track = ft8xxRdMem32(REG_TRACKER);
switch (track & 0xffff)
{
case 3:
gSlideH = (uint8_t)(((track >> 16) & 0xffff) * 100 / 65535); break;
}
例3实现如下图的Slider
显示指令如下
ftWrDispCmd(TAG(4));
ftCoCmdTrack((PANEL_WIDTH / 2 + 120), (PANEL_HEIGHT / 2 - 60), 12, 120, 4);
ftCoCmdSlider((PANEL_WIDTH / 2 + 120), (PANEL_HEIGHT / 2 - 60), 12, 120, 0, gSlideV, 100);
检测指令如下:
track = ft8xxRdMem32(REG_TRACKER);
switch (track & 0xffff)
{
case 4:
gSlideV = (uint8_t)(((track >> 16) & 0xffff) * 100 / 65535);
break;
}