分类 Android 下的文章

转自: https://blog.csdn.net/liuyingyanhuo/article/details/81294787

RK3288下tp驱动移植

一、修改DTS,添加新的I2C设备

&i2c4 {
    status = "okay";
    clock-frequency = <400000>;

    gslX680@40 {
        compatible = "gslX680";   
        reg = <0x40>;
        touch-gpio = <&gpio7 6 IRQ_TYPE_LEVEL_LOW>;
        reset-gpio = <&gpio7 5 GPIO_ACTIVE_HIGH>;
        i2c_sda_gpios = <&gpio7 17 IRQ_TYPE_LEVEL_LOW>;
        i2c_scl_gpios = <&gpio7 18 IRQ_TYPE_LEVEL_LOW>;
        status = "okay";
    };
};

1.&i2c4表明该设备挂载在i2c4下,我们添加设备节点时可根据硬件原理图看设备挂载在哪个I2C下,然后再到对应的节点上修改; 2.gslX680@40表示此I2C设备是触摸屏,设备名gsl680,设备地址为0x40; 3.compatible = “gslX680” 用于驱动和设备的绑定,表示特定的设备名(此处一定要正确,否则设备不能绑定);compatible优先匹配驱动中的id.table; 4.reg = <0x40> 表示此设备的地址为0x40,可以根据原理图找出设备地址,如果该地址错误,会导致I2C通讯失败; 5.touch-gpio = <&gpio7 6 IRQ_TYPE_LEVEL_LOW>; 表示中断引脚使用的是GPIO7中的GPIO_A6引脚,低电平触发; reset-gpio = <&gpio7 5 GPIO_ACTIVE_HIGH>; 表示复位引脚使用的是GPIO7中的GPIO_A5,高电平有效; 6.i2c_sda_gpios i2c_scl_gpios这两个分别是数据线和时钟线,看具体情况是否需要添加到代码;

二、修改Makefile,Kconfig

1.在drivers/input/touchscreen/Makefile中添加驱动:

obj-$(CONFIG_TOUCHSCREEN_GSLX680)  += GSL1680F/

注:看具体情况是否需要释掉Makefile里面其他GSLX680的编译信息,以及要看自己具体文件夹来配置,只有配置了CONFIG_TOUCHSCREEN_GSLX680选项,才会去编译GSL1680F文件夹下的文件; 2.修改Kconfigt添加驱动配置描述:

config TOUCHSCREEN_GSLX680
    tristate "GSL touch screen GSL1680 support for rockchip based platform"
    default y
    help
        Say Y here if you have a touchscreen interface using the
        two GSL gsl1680 , and your board-specific initialization
        code includes that in its table of IIC devices.
        If unsure, say N.

config后面的参数需要和驱动对应文件夹相匹配;

3.修改makefile以及Kconfig文件后,若发现还是没有编译驱动,可修改驱动配置文件

kernel/arch/arm/rockchip_defconfig

修改rockchip_defconfig文件使驱动强制编译进内核。

三、驱动移植时遇到的问题

1.驱动已经匹配上,但还是出现i2c读取不到address或device,有可能是硬件上接线有问题; 2.tp驱动移植成功后,发现tp反向,需要修改驱动中上报的x、y坐标,参考代码如下:

if (gtp_x_reverse)
            x = ts->abs_x_max - x;
if (gtp_y_reverse)
            y = ts->abs_y_max - y;

3.屏幕比列不匹配,可能需要原厂进行修改;

四、tp调试时的问题排查

1.当我们调试出现问题时,首先检查电压; 2.在porbe 函数里面加一句打印,确认驱动已经正常注册进系统了; 3.确认中断是否注册上了,可以adb shell cat /proc/interrupters,如果没有就查下打印,一般申请中断失败,都是IO 口被其他驱动或虚拟设备占用; 4.如果注册上了,但是触摸没中断.就用示波器勾下中断脚是否有波形,如果没有就代表触摸屏本身有问题,换一个试一下; 5.如果有波形,但是adb shell cat /proc/interrupters,中断号对应的中断数没有增加,一般都是中断脚被复用为其他作用,比如PWM; 6.一般这时候上层都会有点出来,大致分为三种情况:   1)出现鼠标,或者只有一个圆圈出来,这个是属于input 创建时候的有问题,可以参考正 常的驱动;   2)出现上下或左右反了,这个是要改驱动里面的上报函数;   3)如果上下左右正常了,但是会出现无法画到四个边的情况,这个是属于TP 里面的软 件问题,需要联系TP 厂的FAE,进行修改;

关于tp驱动问题会持续更新··········

转自: https://blog.csdn.net/VERBOR/article/details/115128511?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242

Qualcomm&MTK平台lcd/tp调试及问题总结

LCD原理结构
        LCD背光板
        下偏光板
        薄膜基板(TFT)
        液晶
        彩色滤光片
        上偏光片
        原理
视图如下
高通平台
    lk启动方式下(主要安卓8之前)
    kernel移植
            .dtsi中
背光的软件流程如下
    1.bootloader部分
    2.kernel部分
    主要背光功耗控制方法

LCD原理结构

目前主要使用的显示屏有TFT-LCD,OLED

LCD背光板

  • 为屏显提供基本光源

下偏光板

  • 使背光传出光线方向一致传向

薄膜基板(TFT)

  • 控制液晶扭转,电压变化控制扭转度数由主要有driver ic控制

液晶

  • 液晶分子受TFT控制,扭转角度影响光线透过率从而控制像素的亮度,影响灰阶(常用8位控制器)256级灰度控制,RGB三原色就是256X256X256 = 1677216种色彩,国际主要10位控制器

彩色滤光片

  • 红蓝绿三基色上色作用

上偏光片

  • 和下偏光片共同配合呈垂直角度

原理

背光发出光源,通过下偏光片进入,我们通过tft基板控制液晶分子扭转电压和扭转角度相关,从而控制单个像素的明暗强度,再透过滤光片从而实现多种色彩,不同强弱产生不同的画面,对待屏幕常见参数有 gamma 值,对比度,饱和度.可以通过高通QDCM 工具进行在线调试.

- 阅读剩余部分 -

需要重复字符串 n 次,如果 java 版本高,可以直接使用 String.repeat()

        String str = "Abc";
        System.out.println( str.repeat(3) );

如果版本低,那就使用 regex

        String str = "Abc";
        String repeated = new String(new char[3]).replace("\0", str);
        System.out.println(repeated);

可以直接创建一个重复字符串的函数:

    private String repeatString(String str, int times) {
        return new String(new char[times]).replace("\0", str);
    }

参考:

https://www.learnfk.com/article-java11-repeat-string-n-times

textview 滑动条一直显示,

<TextView 
    android:id="@+id/textview" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:singleLine="false" 
    android:maxLines="5" 
    android:scrollbars="vertical" 
    />
TextView textView = (TextView)findViewById(R.id.text_view);  
textView.setMovementMethod(ScrollingMovementMethod.getInstance());
textView.setScrollbarFadingEnabled(false);

textview 换行

android:singleLine="false"
android:text="123\n321"

参考:

https://blog.csdn.net/zhangjikuan/article/details/25139789
https://blog.csdn.net/lplj717/article/details/71192024
https://blog.csdn.net/weixin_39646628/article/details/111509646#:~:text=textView%E5%A6%82%E6%9E%9C%E6%83%B3%E8%A6%81%E5%BC%BA%E5%88%B6%E6%8D%A2%E8%A1%8C%E7%9A%84%E8%AF%9D%EF%BC%8C%E5%BF%85%E9%A1%BB%E5%85%88%E6%8A%8ATextView%E6%98%BE%E7%A4%BA%E6%96%B9%E5%BC%8F%E4%BF%AE%E6%94%B9%E4%B8%BA%E5%A4%9A%E8%A1%8C%28android%3AsingleLine%3D%22false%22%29%EF%BC%8C%E7%84%B6%E5%90%8E%E6%89%8D%E8%83%BD%E6%8D%A2%E8%A1%8C%E3%80%82,%E6%96%B9%E6%B3%95%E4%B8%80%E8%88%AC%E7%94%A8%E4%B8%A4%E7%A7%8D%EF%BC%9A1%E3%80%81%E5%9C%A8%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%87%8C%E5%8A%A0%E5%85%A5%E2%80%9Cn%E2%80%9D%EF%BC%8C%E5%A6%82%22abcnrc%22%3B2%E3%80%81%E6%8A%8ATextView%E8%AE%BE%E7%BD%AE%E4%B8%BA%E5%9B%BA%E5%AE%9A%E5%AE%BD%E5%BA%A6%EF%BC%8C%E7%84%B6%E5%90%8E%E8%AE%A9%E7%B3%BB%E7%BB%9F%E8%87%AA%E5%8A%A8%E6%8D%A2%E8%A1%8C%E3%80%82

边框 xml 文件 semi_circle_layout_border.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- background color -->
    <solid android:color="@color/white" />

    <!-- boder width and color -->
    <stroke
        android:width="0.03dp"
        android:color="@color/gray" />

    <padding
        android:bottom="1dp"
        android:left="1dp"
        android:right="1dp"
        android:top="1dp" />

    <!-- corner -->
    <corners android:radius="10dp" />

</shape>

引用边框文件

android:background="@drawable/semi_circle_layout_border"

参考:

https://blog.csdn.net/qq_34589749/article/details/53482659
https://blog.csdn.net/yuxiaohui78/article/details/8274067

button 背景色无效

修改 themes.xml 把 parent 中的 "Theme.MaterialComponents.DayNight.DarkActionBar" 修改为 "Theme.MaterialComponents.DayNight.DarkActionBar.Bridge" 即可。

参考: https://blog.csdn.net/try17875864815/article/details/110409078
https://blog.csdn.net/weixin_50679163/article/details/115279933

button 添加图片

可以直接使用 android:drawableLeft 这样的,但是如果需要按钮的尺寸比较大的话,会发生图片和文字分离比较开的情况,所以建议在外面套一层 layout,这个 layout 作为需要触摸的尺寸,并且使用和按钮同样的背景色,button 本身使用 wrap_content即可,这样就不容易出现图片文字分离的情况了。

参考: https://blog.csdn.net/actual_/article/details/6910529
https://blog.csdn.net/qq_41218412/article/details/88422058
https://www.cnblogs.com/dolphin0520/p/3383804.html

按钮设置了背景色后,按下就没什么效果了。

参考: https://blog.csdn.net/muyang_ren/article/details/46523027

添加 maven { url "https://jitpack.io" }

  • 旧版本在 project 的 build.gradle 中增加:
    allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
    }
    }
  • 新版本在 project 的 settings.gradle 中增加:
    dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven { url "https://jitpack.io" }
        jcenter() // Warning: this repository is going to shut down soon
    }
    }

添加 implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'

在 app 中的 build.gradle 中增加: implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0-alpha'

在 xml 中增加:

<com.github.mikephil.charting.charts.LineChart
    android:id="@+id/mvDetailLineChart"
    android:layout_width="match_parent"
    android:layout_height="@dimen/dp200"/>

参考:

https://blog.csdn.net/briblue/article/details/77305697
https://blog.csdn.net/jinmie0193/article/details/90239935
https://www.cnblogs.com/leshen/p/12606161.html
MPAndroidChart个人使用总结(一)
https://www.jianshu.com/p/9746e2dd2fbe
MPAndroid 中文文档(转)
https://www.jianshu.com/p/fc31df1e8679
笑谈Android图表-MPAndroidChart
https://www.imooc.com/article/71442

转自: https://blog.csdn.net/jkzrc/article/details/18549957

1. 添加I2C 设备

TP 一般采用的是I2C 作为数据和命令接口,所以TP 驱动也可以归类为I2C 驱动。TP驱动的主要逻辑不在这里,但是了解了Linux 的I2C 体系架构,就可以对整个驱动流程有了

更加清晰的认识,但这里不详细展开讨论I2C 的体系架构,只围绕怎么移植开发TP 驱动展开讨论。

在板级文件中,也就是瑞星微的代码文件board-rk30-sdk.c 中,实例化一个i2c_board_info结构体,该结构抽象描述一个具体的i2c 设备,然后将该实例添加到__i2c_board_list 全局链表中。举个实例:

- 阅读剩余部分 -

转自: https://blog.csdn.net/ctx_ubuntu/article/details/80053694

TP驱动芯片厂商主要有:Goodix(汇顶),FocalTech(敦泰科技),cypress(赛普拉斯),synaptics(新思)。 TP驱动的调试主要是将接口调通。 从TP厂商获取驱动和配置资料。

4.2.1. 集成或者使用系统自带的TP驱动

查找 kernel/drivers/input/touchscreen,看是否有对应的驱动。如果没有,可以从高通的网站下载驱动或者找厂商要驱动

由于TP通过I2C与处理器通信,所以只要调通I2C,TP调试工作基本就完成了。 通过kernel log 查看类似这些probe函数:goodix_ts_probe(), cyttsp5_probe(), synaptics_rmi4_probe() 的执行情况,看看问题出在哪。 I2C主要看地址是否正确。还要用示波器量一下I2C线上的波形。I2C是不用时拉高,传输数据时才会有拉低的信号。如果log里说I2C忙,那就有可能I2C没有拉高。

TP触摸屏,应该是驱动开发中比较简单并且适合新手入手的模块。不过虽然简单,但涉及到的内容还是比较多的,其中linux相关主要的机制:

  1. input 机制
  2. 中断、定时器
  3. I2C

- 阅读剩余部分 -