FAE疑难问题总结
{上报第三个按键坐标;}
}
有的项目在调试时遇到AA区Y方向坐标无法调到最大时,即开了拉边函数依然与最大像素差10个像素左右,则有可能是因为按键范围过大造成,同样可以采用此方法限制按键范围,改善此问题;
2、ESD跳点问题调试;
(1)、打开ESD宏定义;
(2)、调试大面积宏定义;
3、同侧画线不同甩尾效果调试;
APK不能升级的情况有:
(1)、驱动只添加t5x0x_ts.c、ft5x0x_ts.h两个文件,完成电容屏的基本功能,无APK升级功能,需添加其他四个文件。
(2)、未打开FTS_CTL_IIC, SYSFS_DEBUG这两个宏。
(3)、ft_rw_iic_drv节点未打开读写权限。
(4)、系统IIC驱动有问题导致升级失败,通过打印信息可以看到IIC读写出错的信息,修改系统软件。
/*
* AFE Scan data mode
* 0: Raw data (Only for testing, do NOT use for release code)
* 1: Filter 3 data
* 2: Filter 5 data
* 3: ACC data
*/
#define AFE_DATA_MODE 2
{上报第一个按键坐标;}
if(pstructTraceVar->sCapDiff[TP_CHANNEL_NUM+1]>VIRTUAL_KEY_THRESHOLD)
{上报第二个按键坐标;}
if(pstructTraceVar->sCapDiff[TP_CHANNEL_NUM+2]>VIRTUAL_KEY_THRESHOLD)
{if (0 == G_structTouchStatusVar.ucCurrentPointNum)
{#if (0 < TP_KEY_NUM)
if((G_structTraceVar.sCapDiff[TP_CHANNEL_NUM]+G_structTraceVar.sCapDiff[TP_CHANNEL_NUM + 1]) < VIRTUAL_KEY_THRESHOLD)
此时需针对不同的甩尾效果,采用不同的甩尾修正参数;
参考代码如下:Margin_process.c中BorderShiftManualHandle函数;
以4列竖三角分辨率为800的项目为例
ShiftVal = (cLeftManualCoeff[(MARGIN_LX1 - Xnow) - 1])//定义修正甩尾的数组
*/
#define AFE_FILTER_MODE_THRES 5
五、驱动
1、APK升级的注意事项;
APK功能需根据“4_Focaltech Android平台Driver介绍_v1.0.pdf”增加驱动后,打开FTS_CTL_IIC, SYSFS_DEBUG这两个宏。驱动中打开 FTS_CTL_IIC宏后,在/dev目录下创建一个ft_rw_iic_drv的结点,通过adb shell chmod 777 /dev/ft_rw_iic_drv打开读写权限。
{
//if (G_ucTouchedCnter<= pstructTouchStatus->ucFilterPointCnt)
if (G_ucTouchedCnter< 2)//pstructTouchStatus->ucFilterPointCnt)
{//G_ucTouchedCnter ++;
G_ucTouchedCnter =G_ucTouchedCnter -1;
{G_ucTouchedCnter ++;
pstructTouchStatus->ucCurrentPointNum = pstructTouchStatus->ucLastPointNum;
else
{G_ucTouchedCnter = 0; }
if (pstructTouchStatus->ucCurrentPointNum == 0)
structAppTouchStatusVar.structPointStatusArray[i].usPosX= \
structTouchKeyStatus.aucTouchKeyOutput[j][0];
structAppTouchStatusVar.structPointStatusArray[i].usPosY= \
(4)、前级针滤波算法;可很大程度上改善严重跳点问题,但会影响整体体验;
3、ESD跳点调试步骤;
(1)、打开ESD宏定义;
(2)、滤针;参见以下代码;
DateProcessPost.c中PointFilterProcess函数:
230行:
voidPointFilterProcess(STRUCTAPPTOUCHSTATUS *pstructTouchStatus)
6、电源干扰(表现为快速点击时乱跳点)
修改代码如下:
voidPointFilterProcess(STRUCTAPPTOUCHSTATUS *pstructTouchStatus)
{if (pstructTouchStatus->ucLastPointNum> 0)
{return; }
if (pstructTouchStatus->ucCurrentPointNum>pstructTouchStatus->ucLastPointNum)
如果是高通,三星的平台,可以不加此驱动,在编译系统时选中i2c interface,这样在/dev目录就会有i2c-*的读写结点。用adb shell chmod 777 /dev/i2c-*打开读写权限来使用工具。
APK是通过ft_rw_iic_drv节点与芯片通信,如无节点或节点无读写权限都会导致APK升级失败。
pstructTouchStatus->ucCurrentPointNum = pstructTouchStatus->ucLastPointNum;
}}
7、大尺寸整机(5506、5606),在应用中出现边缘区域问题处理;
最新FW“config.h”中:
#define TRACE_STABLE_OFFSET 210//180 //a bit smaller than biggest touch diff-data
疑难问题总结
一、传统互容1(06、16系列)
1、06系列项目,在下边缘画线,容易画出超出AA区的折线(尤其在分辨率特别大时)
此时需修改flowwork.c中void FlowWork(void)函数中参数:
3220行:
#ifdef TOUCHKEY_EN
structFrameInfoVar.ucFrameRow += 1;
#if ((1 == AFE_DATA_MODE) || (2 == AFE_DATA_MODE))
/*
* AFE filter (Filter 3 or Filter 5) scan mode threshold
* Range 0~1023
* The smaller the value is, the more efficient for the filter function
参考代码如下:
if(pstructTraceVar->sCapDiff[TP_CHANNEL_NUM-1]+pstructTraceVar->sCapDiff[TP_CHANNEL_NUM-2]<VIRTUAL_KEY_THRESHOLD_1)
{
if(pstructTraceVar->sCapDiff[TP_CHANNEL_NUM]>VIRTUAL_KEY_THRESHOLD)
if (Ynew<=20) //当Y坐标小于20时,不修正
{ShiftVal =0}
else if ( (Ynew>380)&&(Ynew<420) )//坐标在380~420之间,按数组参数修正
{ShiftVal = ShiftVal; }
else //其余情况,按数组的4/5来进行修正
{ShiftVal = ShiftVal * 4 /5; }
structTouchKeyStatus.aucTouchKeyOutput[j][1];
//break; }
#endif //TOUCHKEY_EN
2、电源干扰调试步骤;
(1)、增大CAP值;一般调试到最大,即160/80;
(2)、选择最佳频率;可通过频谱仪选择干扰最小的频率;
(3)、ID滤针算法;针对偶尔出现的干扰跳点问题,改善较明显;
if (structTouchKeyStatus.ucTouchKeyFlg == 1)
{for(i = 0; i<structTouchKeyStatus.ucTouchKeyNum;i ++)
{structTouchStatusVar.structPointStatusArrayOriginal[structTouchStatusVar.ucCurrentPointNum + i].usPosX = \
Ynew += ShiftVal;
4、6x06系列3个通道实现3个按键划线飞线问题处理办法;
6x06系列的IC,在用3个通道实现3个按键的项目中,当从AA区往处划线时,当手指划到按键上会触发功能造成折线,针对此问题需修改flowwork.c中ResetGlobleVars函数:
static void ResetGlobleVars(void)
structTouchKeyStatus.ucTouchKeyIndex[i];