注
epl259x的驱动可以用于
epl2590
MN66213
MN26233TKDN - id = 0x91
MN25713EKDN - id = 0x81
8975 // 4个手势方向 - 4颗sensor排列
2219 // 4个手势方向
als 室内光照下应该为700左右
ps 底噪值应该为700左右 - *#*#3646633#*#* *#*#889988#*#* -> Hardware Testing ->Sensor ->Light/Proximity Sensor ->Ps Calibration ->Ps Calibration -> Calibration
阈值如果是(500,800),底噪700
靠近1500
远离1200
epl_sensor.ps.integration_time = EPL_PS_INTT_144; // 272 - qk
dynk_low_offset = 500; // 100 - qk
dynk_high_offset = 800; // 300 - qk
一、新增驱动方法一_适用androidO(示例: msensor mmc5603x)
1.添加kernel-4.4\drivers\misc\mediatek\sensors-1.0\magnetometer\mmc5603x文件夹(mmc5603x.c、mmc5603x.h、Kconfig、Makefile四个文件)
st480.c
st480.h
Kconfig 建宏--MTK_MMC5603X
Makefile
2.kernel-4.4\drivers\misc\mediatek\sensors-1.0\magnetometer\Kconfig 添加:
+ source "drivers/misc/mediatek/sensors-1.0/magnetometer/mmc5603x/Kconfig"
3.kernel-4.4\drivers\misc\mediatek\sensors-1.0\magnetometer\Makefile 添加:
+ obj-$(CONFIG_MTK_MMC5603X) += mmc5603x/
4.kernel-4.4\arch\arm\configs\k39tv1_bsp_1g_debug_defconfig、k39tv1_bsp_1g_defconfig 修改
+ CONFIG_CUSTOM_KERNEL_MAGNETOMETER=y
+ CONFIG_MTK_MMC5603X=y
5.添加vendor\microhand\msensor\mmc5603x_32bit文件夹(libmemsicd5603x.so一个文件,供应商提供)
6.device\mediateksample\k39tv1_bsp_1g\device.mk 添加,将算法库拷贝到指定目录
+ #add by msensor mmc5603x
+ PRODUCT_COPY_FILES += vendor/microhand/msensor/mmc5603x_32bit/libmemsicd5603x.so:vendor/lib/libmemsicd5603x.so
7.device\mediateksample\k39tv1_bsp_1g\ProjectConfig.mk
+ CUSTOM_KERNEL_MAGNETOMETER=yes
二、新增驱动方法二_适用androidM/N(示例: msensor st480)
1.添加kernel-3.18\drivers\misc\mediatek\magnetometer\st480文件夹(包含st480.c、st480.h、Kconfig、Makefile四个文件)
st480.c
st480.h
Kconfig 建宏--MTK_ST480
Makefile
2.kernel-3.18\drivers\misc\mediatek\magnetometer\Kconfig 添加:
+ source "drivers/misc/mediatek/magnetometer/st480/Kconfig"
3.kernel-3.18\drivers\misc\mediatek\magnetometer\Makefile 添加:
+ obj-$(CONFIG_MTK_ST480) += st480/
4.kernel-3.18\arch\arm\boot\dts\len6737m_35_m0.dts 添加:
注:这一段没有的话(或名字不对应),会导致开机重启
cust_mag@0 {
compatible = "mediatek,st480";
i2c_num = <2>; // i2c控制器2(即i2c总线2),sensor都接在控制器2上--即i2c总线2
i2c_addr = <0x0C 0 0 0>; // dws也写了一个i2c地址,到底用哪个看驱动,通常写在dws
direction = <1>; // 方向 –> 唯一用到的
power_id = <0xffff>;
power_vol = <0>;
is_batch_supported = <0>;
};
4.1 修改dws: i2c总线数与i2c地址,驱动中会用到
I2C:
MSENSOR I2C_CHANNEL_2 0x30
5.kernel-3.18\arch\arm\configs\len6737m_35_m0_debug_defconfig、len6737m_35_m0_defconfig 修改
- #CONFIG_CUSTOM_KERNEL_MAGNETOMETER=y
+ CONFIG_CUSTOM_KERNEL_MAGNETOMETER=y
+ CONFIG_MTK_ST480=y
6.添加vendor\lentek\libs\mt6737m\st480文件夹(包含st480、Android.mk、README、NOTICE)
st480 是一个可执行文件---init.xxx.rc中运行的daemon进程
Android.mk 是干嘛的?
README 解释信息
NOTICE 解释信息
7.device\lentek\len6737m_35_m0\ProjectConfig.mk 修改:
- CUSTOM_KERNEL_MAGNETOMETER = no
+ CUSTOM_KERNEL_MAGNETOMETER = yes
8.device\mediatek\mt6735\init.mt6735.rc 添加:
service st480 /system/bin/st480 // 这是一个服务,服务的路径
disabled
user system
group system
class main // 归属于main这个service,main启动时启动st480
9.device\lentek\len6737m_35_m0\factory_init.project.rc 添加:
service st480 /system/bin/st480 // 这是一个服务,服务的路径--应该是工厂模式用到的
disabled
user system
group system
10.device\mediatek\common\sepolicy\file_contexts 添加:
+ /system/bin/st480 u:object_r:st480_exec:s0 // 当我们添加跑一个服务的时候就需要对其添加(开放)权限?哪些进程可以访问它
11.添加device\mediatek\common\sepolicy\st480.te文件
12.device\mediatek\mt6735\device.mk 添加:
+ PRODUCT_PACKAGES += st480 // 复制st480,从…到/system/bin/
三、查看log:
1.查看上报数据
cat /proc/kmsg | grep "***"
2.查看开机串口log
从串口测试点(TXD)接线出来,用usb转串口线,配合xshell抓串口log(波特率:912600)
3.查看sensor型号:
eng 版可以通过 命令查看: cat /sys/bus/platform/drivers/gsensor/chipinfo
user版可以通过 命令查看: dmesg | grep "gsensor" -i // 按power键灭屏or亮屏时,会打开or关闭sensor,会有内核缓冲器会有log打出
[ 1099.329303] (0)[934:android.ui]qma6981_enable_nodata 1964 : Gsensor not in suspend gsensor_SetPowerMode!, enable_status = 1
[ 1102.168146] (0)[946:PowerManagerSer]qma6981_enable_nodata 1964 : Gsensor not in suspend gsensor_SetPowerMode!, enable_status = 0
user版可以通过 命令查看: dmesg | grep "als" -i
user版可以通过 命令查看: dmesg | grep "msensor" -i
user版可以通过 命令查看: dmesg | grep "gyro" -i
四、根据input子系统的调试方法:
getevent -i 查看所有的input设备
getevent -t /dev/input/event4 获取gsensor往上层上报的包(封装过,加入time等信息,以16进制方式打印)
1. ps
靠近:
[ 2208.288534] 0002 0002 00000001
[ 2208.288534] 0002 0001 00000003
[ 2208.288534] 0000 0000 00000000
远离:
[ 2212.838044] 0002 0002 00000002
[ 2212.838044] 0002 0001 00000003
[ 2212.838044] 0000 0000 00000000
2. cat /proc/kmsg | grep "liuzhigou"
<4>[ 564.973691]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0xa
<4>[ 564.973725]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status epl_sensor.ps.compare_low = 0x8
<4>[ 565.168562]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0xa
<4>[ 565.168588]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status epl_sensor.ps.compare_low = 0x8
<4>[ 565.368485]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0xa
<4>[ 565.368527]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status epl_sensor.ps.compare_low = 0x8
<4>[ 565.568808]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0xa
<4>[ 565.568851]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status epl_sensor.ps.compare_low = 0x8
<4>[ 565.599273]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0x17
<4>[ 565.599314]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status epl_sensor.ps.compare_low = 0x0
<4>[ 565.599982]<0> (0)[2935:kworker/0:3]liuzhigou [epl_sensor_report_ps_status]: epl_sensor.ps.data.data=18642, ps_status=0 // 靠近
<4>[ 565.630511]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0xf
<4>[ 565.630547]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status epl_sensor.ps.compare_low = 0x8
<4>[ 565.631129]<0> (0)[2935:kworker/0:3]liuzhigou [epl_sensor_report_ps_status]: epl_sensor.ps.data.data=17031, ps_status=1 // 远离
<4>[ 565.735292]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0x17
<4>[ 565.735316]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status epl_sensor.ps.compare_low = 0x0
<4>[ 565.735765]<0> (0)[2935:kworker/0:3]liuzhigou [epl_sensor_report_ps_status]: epl_sensor.ps.data.data=17468, ps_status=0 // 靠近
<4>[ 565.757034]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0xf
<4>[ 565.757054]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status epl_sensor.ps.compare_low = 0x8
<4>[ 565.757495]<0> (0)[2935:kworker/0:3]liuzhigou [epl_sen