高通qrd方案一站式服务,蓝牙模块配合好相关主板配电即可以正常工作了。
不过由于之前工厂测试模式是之前项目架构好的,工厂测试模式需要满足jni调用相关的要求。
按照fae提供的函数,调用后无法进行工厂测试。主要是权限问题。与framework相关人员确认了下,是andorid系统安全,避免第三方应用调用到system中内核驱动权限。
因此,只能jni中启动服务,服务执行进入工厂模式的相关操作。
1. 服务
主要是在system目录外的文件夹中启动相关的服务项。选择在vendor目录下新立项目。
新文件夹下,android.mk控制模块生成。
LOCAL_SHARED_LIBRARIES:=libbluedroid
LOCAL_C_INCLUDES: =\
$(LOCAL_PATH)/system/bluedroid/include \
System/bluedtooth/bluez-clean-headers
LOCAL_C_INCLUDES +=\
$(call include-path-for, bluedroid)
由于我的服务中需要用到system里面生成的库。这里就选择了libbluedroid.
之前我选择包含头文件时,有时候总是要写很长一个绝对路径,这里注意包括库的头文件LOCAL_C_INCLUDES +=$(call include-path-for, bluedroid)
系统能够自动找到服务中的include头文件。
然后介绍服务,就是调用bluedroid中的函数。
#includ <bluedroid/Bluetooth.h>
Int main()
{
Bt_disable();
}
2. 启动服务
系统提供了property_set(“ctl.start”,bttest_enable)启动服务。
或者采用触发条件
on property:persist.sys.ls_dmsg=1
start bttest_enable
启动服务中需要注意服务的option
oneshot
在服务退出后不重启。
disabled
这个服务的级别将不会自动启动,它必须被依照服务名指定启动才可以启动。
作为受控的测试服务,新加的服务属性需要加上这两项。