Qualcomm Enhanced SDK (QESDK)API参考 (9)
3.3.4 示例代码
Java
需要导入
import com.qualcomm.qti.qesdk.Modem.ILinkLatencyCBs;
import com.qualcomm.qti.qesdk.Modem.LinkLatencyEnums.level;
import com.qualcomm.qti.qesdk.Modem.LinkLatencyEnums.slotId;
import com.qualcomm.qti.qesdk.Modem.LinkLatencyManager;
import com.qualcomm.qti.qesdk.QesdkStatusException;
声明需要对象
private IQesdk mQesdkManager;
private PP_eDGNSSManager mPpeEdgnssManager;
private PP_RTKManager mPpeRtkManager;
创建 QESDK 管理器实例
mQesdkManager = IQesdk.createInstance(this);
创建数据路径优先级管理器实例
datapathPriorityManager = new DataPathPriorityManager(qesdkManager)
设置回调
// For Registering flow
datapathPriorityManager.registerFlowStatusUpdates(new IDataPathPriorityCBs.IflowStatus() {
@Override
public void onValues(long l, DataPathPriorityEnums.flowStatusEnum flowStatusEnum, String s) {
}
});
添加流程
datapathPriorityManager.addFlow(directionEnum, srcIp, srcPort, dstIp, dstPort, protocolEnum, apptypeEnum, inactivityTimer, dscp, new IDataPathPriorityCBs.IflowStatus() {
@Override
public void onValues(long l, DataPathPriorityEnums.flowStatusEnum flowStatusEnum, String s) {
}
});
从栈获取流程
datapathPriorityManager.getFlows(new IDataPathPriorityCBs.IflowStatus() {
@Override
public void onValues(long l, DataPathPriorityEnums.flowStatusEnum flowStatusEnum, String s) {
}
});
删除单个流程
datapathPriorityManager.deleteFlow(FilterID)
删除所有流程
datapathPriorityManager.deleteAllFlows();
原生
需要包括的内容
#include "qesdk_ndk.h"
#include "qesdk_Modem_LinkLatency.h"
初始化
qesdk_handle_t qesdk_handle = qesdk_init(nativeLicense, len, event_callback_handler);
LinkLatencyManager *llmManager = new LinkLatencyManager();
int ret = llmManager->init(nativeLicense, len, event_callback_handler);
设置回调
void flowStatusCallback(uint32_t id, dpp_flowStatusEnum status, std::string statusString) {
// Handle DPP flow Status callback
}
注册回调
if(dppManager->registerFlowStatusUpdates(flowStatusCallback) != SUCCESS)
添加流程
dppManager->addFlow(directionEnum, reinterpret_cast<const char *>(src_ip), src_port,reinterpret_cast<const char *>(dst_ip), dst_port, protocolEnum, apptypeEnum, inactivity_timer, dscp, flowStatusCallback);
从栈获取流程
dppManager->getFlows(flowStatusCallback);
删除单个流程
dppManager->deleteFlow(flowid);
删除所有流程
dppManager->deleteAllFlows();
4 传感器 API
QESDK 是客户端应用程序的接口,用于通过 QESDK 传感器子系统(Snapdragon 传感器核心)与非 Android 传感器类型进行通信。
QESDK 库提供传感器 API,用来与传感器子系统进行通信,以获取传感器数据。一些 API 用于管理会话,一些 API 用于与传感器子系统中的传感器进行通信。以下小节详细说明了 QESDK 传感器 API。
4.1 传感器函数
4.1.1 传感器会话
传感器会话可简化应用程序与传感器子系统之间的通信。每个应用程序只能创建一个活动的会话。例如,如果第一次调用 create_session 时已创建 sensor_session_id,则第二次调用 create_session API 会返回 -1。如果需要创建新会话,则应先调用 delete_session 以删除现有会话,然后才能创建传感器会话。
4.1.2 create_session
创建会话并返回会话 ID,当前会话中的其他 QESDK 传感器 API 可使用该会话 ID。
int create_session()
返回结果
会话 ID
其值如下:
- > 0 - 有效会话 ID
- -1 - 失败;之前已初始化会话或 QESDK 管理器为 NULL
- -2 - 应用程序权限不足
- < 0 - 所有其他异常
4.1.3 get_sensors_list
返回可用传感器的列表,如果传感器不可用,则返回 NULL。客户端应用程序可以检查返回的列表中是否存在所需的传感器数据类型,并且后续可以使用该列表进行 SUID 查询。有关 SUID 请求,可参见请求消息。此 API 可以在创建传感器会话之前调用。仅支持活动识别
ArrayList<String> get_sensors_list()
返回结果
传感器数据类型的字符串数组
其值如下:
- 传感器数据类型的列表
- NULL - 没有可用传感器时列表为空
- Exception - QESDK 异常
4.1.4 delete_session
从传感器子系统中删除会话。调用此 API 时将终止所有传感器通信。
int delete_session(int sensor_session_id)
参数
sensor_session_id
传感器的会话 ID
返回结果
状态
其值如下:
- 0 - 成功
- 1 - 失败;之前已初始化会话或 QESDK 管理器为 NULL
- 非 0 或 1 - 异常
4.2 传感器接口
4.2.1 发送请求
通过会话向传感器子系统发送请求消息。客户端可发送的消息如编码和解码 protobuf 消息所述。如果客户端尝试向不可用的传感器发送消息,则客户端将获得的返回结果为错误。
int send_request(int sensor_session_id, byte[] data)
参数
sensor_session_id
指定传感器的会话 ID。
data
已编码 protobuf 消息的字节数组
返回结果
状态
其值如下:
- 0 - 成功
- -1 - 失败
- 非 0 或 1 - QESDK 异常
4.2.2 register_event_callback
针对传感器事件注册回调接口 Ievent_callback_type。每当客户端激活的传感器生成传感器事件时,都会调用已注册的回调。
void register_event_callback(
int sensor_session_id,
final Ievent_callback_type cb)
参数
sensor_session_id
指定传感器的会话 ID。
cb
发生事件时将触发的回调函数。
Ievent_callback_type 是 ISensorsCBs 接口中的接口。onValues() 方法由 QESDK 的传感器管理器触发,用于处理来自传感器子系统的传感器事件。
public interface Ievent_callback_type {
void onValues(byte[] bytes,
int sensor_session_id);
}
bytes
已编码的 Protobuf 消息
sensor_session_id
指定传感器的会话 ID。
4.2.3 register_error_callback
针对错误事件注册回调接口 cb。出现错误时将调用已注册的回调,并且必须从传感器子系统向客户端报告错误。
void register_error_callback(int sensor_session_id, final Ierror_callback_type cb)
参数
sensor_session_id
指定传感器的会话 ID。
cb
报告错误时将触发的回调函数。
Ierror_callback_type 是 ISensorsCBs 接口中的接口。onValues() 方法由 QESDK 的传感器管理器触发,用于处理来自传感器子系统的传感器事件和错误。
public interface Ierror_callback_type {
void onValues(int error, int sensor_session_id);
}
error
遇到任何错误时必须重新启动会话。
sensor_session_id
指定传感器的会话 ID。
4.2.4 Ierror_callback_type.onValues
在处理传感器数据时,如果底层模块出现错误,将异步调用此回调。客户端必须停止正在进行的操作并清理资源,然后应从头开始启动传感器会话。
Ierror_callback_type.onValues(int error, int sensor_session_id)
参数
error
错误代码。
sensor_session_id
指定传感器的会话 ID。
4.2.5 Ievent_callback_type.onValues
每当传感器数据可用时,都会调用此回调。在 proto 消息中编码的实际传感器数据通过此回调传递。客户端需要解码 proto_encoded_message 以获取传感器数据。有关详细信息,可参见编码和解码 protobuf 消息。
Ievent_callback_type.onValues(byte[] proto_encoded_message, int sensor_session_id)
参数
proto_encoded_message
proto 编码消息,其中包含传感器数据。
sensor_session_id
指定传感器的会话 ID。
4.3 活动识别 (Activity recognition)
活动识别方法可用于理解用户正在执行的操作,从而使应用程序变得更加智能。应用程序必须具有 android.permission.ACTIVITY_RECOGNITION 运行时权限才能访问 API。只有具备该访问权限,才能跟踪活动。如果没有活动识别权限,QESDK 传感器创建会话将失败,返回结果为 -2 错误。
4.3.1 活动识别枚举
活动识别中定义的所有枚举均由 QESDK 传感器 API 使用。
枚举值 | |
---|---|
S_AR_UNKNOWN = 0 | 当算法无法检测当前活动状态时,报告 UNKNOWN。 |
SNS_AR_STATIONARY = 1; | 用户相对静止。 |
SNS_AR_PED = 2; | 用户分类为行人。 |
SNS_AR_NMV = 3; | 用户在非机动车中。 |
SNS_AR_MV = 4; | 用户在机动车中。 |
SNS_AR_WALK = 5; | 用户在步行 |
SNS_AR_RUN = 6; | 用户在跑步 |
SNS_AR_BICYCLE = 7; | 用户在自行车上 |
SNS_AR_CAR = 8; | 用户在车里 |