OpenHarmony实战:帆移植案例(上)
OpenHarmony实战:帆移植案例(中)
TP
TP驱动模型
主要包含Input模块HDI(Hardware Driver Interface)接口定义及其实现,对上层输入服务提供操作input设备的驱动能力接口,HDI接口主要包括如下三大类:
- InputManager:管理输入设备,包括输入设备的打开、关闭、设备列表信息获取等;
- InputReporter:负责输入事件的上报,包括注册、注销数据上报回调函数等;
- InputController:提供input设备的业务控制接口,包括获取器件信息及设备类型、设置电源状态等。
图 1 INPUT模块HDI接口层框架图
相关目录下源代码目录结构如下所示
/drivers/peripheral/input
├── hal # input模块的hal层代码
│ └── include # input模块hal层内部的头文件
│ └── src # input模块hal层代码的具体实现
├── interfaces # input模块对上层服务提供的驱动能力接口
│ └── include # input模块对外提供的接口定义
├── test # input模块的测试代码
│ └── unittest # input模块的单元测试代码
详细请参考input子系统README
TP HDF驱动适配
配置适配
关闭linux tp驱动开关,在<rockchip_linux_defconfig>文件中关闭TOUCHSCREEN_GT9XX,具体操作如下,将CONFIG_TOUCHSCREEN_GT9XX=y修改为
# CONFIG_TOUCHSCREEN_GT9XX is not set
驱动适配
-
在vendor/rockchip/rk3399/hdf_config/khdf/device_info/device_info.hcs修改或增加如下内容
device_touch_chip :: device { device0 :: deviceNode { policy = 0; priority = 130; preload = 0; permission = 0660; moduleName = "HDF_TOUCH_GT911"; serviceName = "hdf_touch_gt911_service"; deviceMatchAttr = "zsj_gt911_5p5"; } }
-
在vendor/rockchip/rk3399/hdf_config/khdf/input/input_config.hcs修改或增加如下内容
busConfig { // 0:i2c 1:spi busType = 0; // I2C通信方式 busNum = 7; // cpu对应touch芯片的I2C编号 clkGpio = 72; // I2C clk对应的IO引脚编号 dataGpio = 71; // I2C data对应的IO引脚标号 i2cClkIomux = [0xFF77E004, 0x2]; // I2C [clk引脚对应的复用寄存器,配置为I2C7_clk功能] i2cDataIomux = [0xFF77E000, 0x8000]; // I2C [data引脚对应的复用寄存器,配置为I2C7_DATA功能] } pinConfig { rstGpio = 150; // touch芯片rst对应的IO引脚编号 intGpio = 52; // touch芯片int对应的IO引脚编号 rstRegCfg = [0xFF77E028, 0x00000000]; // rst引脚对应的复用功能寄存器,配置为普通io口 intRegCfg = [0xFF770018, 0x00000000]; // int引脚对应的复用功能寄存器,配置为普通io口 }
FAQ问题
解决触屏横竖反转问题
修改drivers/framework/model/input/driver/touchscreen/touch_gt911.c 中的ParsePointData函数,x和y对调即可
InputPinMuxCfg函数修改
static int32_t InputPinMuxCfg(uint32_t regAddr, int32_t regSize, uint32_t regValue)
{
uint8_t *base = NULL;
uint32_t data = 0;
if (regAddr == 0) {
HDF_LOGE("%s: regAddr invalid", __func__);
return HDF_FAILURE;
}
HDF_LOGE("regAddr = 0x%x, regSize = 0x%x", regAddr, regSize);
base = OsalIoRemap(regAddr, regSize);
if (base == NULL) {
HDF_LOGE("%s: ioremap failed", __func__);
return HDF_FAILURE;
}
// 写入寄存器前先读出数据,保存原有的配置,方式修改原有的其他引脚功能配置。
data = OSAL_READL(base);
data |= regValue;
OSAL_WRITEL(data, base);
OsalIoUnmap((void *)base);
return HDF_SUCCESS;
}
RK3399引脚GPIOn_KX 编号号确认方法
num = 32n+(K-A)8+X
# GPIO1_B2 = 1 * 32 + (B-A)*8 + 2 = 32 + 8 + 1 = 42
功能 | IO名称 | IO编号 |
---|---|---|
TP_INT | GPIO1_C4 | 52 |
TP_RST | GPIO4_C6 | 150 |
TP_SDA | GPIO2_A7 | 71 |
TP_SCL | GPIO2_B0 | 72 |
RK3399引脚GPIOn_KX复用功能配置
- GPIO复用功能寄存器基地址FF77_0000
- 找到GPIOn_K复用功能寄存器偏移量
- 确定GPIOn_K复用功能寄存器,基地址+偏移量
- 根据复用功能寄存器介绍,写入对应引脚的复用功能
功能 | IO名称 | 复用寄存器地址 | 控制位 | 对应数值 |
---|---|---|---|---|
TP_INT | GPIO1_C4 | 0xFF770018 | 9:8 | 2'b00:GPIO |
TP_RST | GPIO4_C6 | 0xFF77E028 | 13:12 | 2'b00:GPIO |
TP_SDA | GPIO2_A7 | 0xFF77E000 | 15:14 | 2'b10: i2c7nfc_sda |
TP_SCL | GPIO2_B0 | 0xFF77E004 | 1:0 | 2'b10: i2c7nfc_scl |
最后
有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。
这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了 (ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony **多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)**技术知识点。
希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!
获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料****
鸿蒙(HarmonyOS NEXT)最新学习路线
- HarmonOS基础技能
- HarmonOS就业必备技能
- HarmonOS多媒体技术
- 鸿蒙NaPi组件进阶
- HarmonOS高级技能
- 初识HarmonOS内核
- 实战就业级设备开发
有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页) 与鸿蒙(OpenHarmony )开发入门教学视频 ,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类...等知识点。
获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料****
《鸿蒙 (OpenHarmony)开发入门教学视频》
《鸿蒙生态应用开发V2.0白皮书》
《鸿蒙 (OpenHarmony)开发基础到实战手册》
OpenHarmony北向、南向开发环境搭建
《鸿蒙开发基础》
- ArkTS语言
- 安装DevEco Studio
- 运用你的第一个ArkTS应用
- ArkUI声明式UI开发
- .......
《鸿蒙开发进阶》
- Stage模型入门
- 网络管理
- 数据管理
- 电话服务
- 分布式应用开发
- 通知与窗口管理
- 多媒体技术
- 安全技能
- 任务管理
- WebGL
- 国际化开发
- 应用测试
- DFX面向未来设计
- 鸿蒙系统移植和裁剪定制
- ......
《鸿蒙进阶实战》
- ArkTS实践
- UIAbility应用
- 网络案例
- ......
获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料****
总结
总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。