事件
通过 PnSServiceOn* 注册运行态回调。
自动日志
每个事件触发时都会再打 OnLogged(等级跟随源事件),无论是否另订了对应事件。绑 OnLogged 即可收到中文消息。
第一次快照不触发。cb 传 NULL 取消订阅。会话为空返回 PNS_ERR_INVALID_PARAM。
功能概览
| 类别 | 注册函数 | 说明 | 自动日志 |
|---|---|---|---|
| 连接 | PnSServiceOnConnectedChanged | 与 IO 控制器的周期交换通断 | ✓ |
| 运行态 | PnSServiceOnStateChanged | 运行态变化 | ✓ |
| 运行错误 | PnSServiceOnErrorOccurred | 运行错误 | ✓ |
| 日志 | PnSServiceOnLogged | 上面每条事件都会再打这条 | — |
连接
PnSServiceOnConnectedChanged
pns_result_t PnSServiceOnConnectedChanged(
pns_service_handle_t session,
pns_connected_changed_fn cb,
void * ctx);
周期数据交换通断时触发(connected == false 且 ever_connected == true = 掉线;ever_connected == false = 从未连上)。
回调参数:
typedef void (*pns_connected_changed_fn)(
void * ctx,
bool connected, /* 当前是否在换周期数据 */
bool ever_connected, /* 是否曾经连上过 */
pns_event_level_t level); /* 连接 = Info;掉线 / 从未连上 = Warn */
示例:
static void on_connected(void * ctx, bool connected, bool ever_connected,
pns_event_level_t level)
{
(void)ctx;
(void)level;
if (!connected && ever_connected)
printf("掉线\n");
}
PnSServiceOnConnectedChanged(session, on_connected, NULL);
运行态
PnSServiceOnStateChanged
pns_result_t PnSServiceOnStateChanged(
pns_service_handle_t session,
pns_state_changed_fn cb,
void * ctx);
运行态变化时触发(SDK 只观测,不主动切状态)。
回调参数:
typedef void (*pns_state_changed_fn)(
void * ctx,
pns_device_state_t old_state, /* 变化前,见 [pns_device_state_t](./api#pns_device_state_t) */
pns_device_state_t new_state, /* 变化后 */
pns_event_level_t level); /* Info */
示例:
static void on_state(void * ctx,
pns_device_state_t old_state, pns_device_state_t new_state,
pns_event_level_t level)
{
(void)ctx;
(void)level;
printf("%d → %d\n", (int)old_state, (int)new_state);
}
PnSServiceOnStateChanged(session, on_state, NULL);
PnSServiceOnErrorOccurred
pns_result_t PnSServiceOnErrorOccurred(
pns_service_handle_t session,
pns_error_occurred_fn cb,
void * ctx);
运行错误出现时触发;error_code 是 int 原值,中文请用 PnSServiceGetErrorMessage。
回调参数:
typedef void (*pns_error_occurred_fn)(
void * ctx,
int error_code, /* 运行错误原值(不是枚举) */
const char * message, /* 中文消息 */
pns_event_level_t level); /* Warn */
示例:
static void on_error(void * ctx, int error_code, const char * message,
pns_event_level_t level)
{
(void)ctx;
(void)level;
printf("%d: %s\n", error_code, message);
}
PnSServiceOnErrorOccurred(session, on_error, NULL);
日志
PnSServiceOnLogged
pns_result_t PnSServiceOnLogged(
pns_service_handle_t session,
pns_logged_fn cb,
void * ctx);
每个事件触发时都会再打这条,等级跟随源事件。
回调参数:
level(pns_event_level_t) — 日志级别message(const char *) — 日志正文
pns_event_level_t
事件日志等级。取值见 枚举参考。
示例:
static void on_log(void * ctx, pns_event_level_t level, const char * message)
{
(void)ctx;
printf("[%d] %s\n", (int)level, message);
}
PnSServiceOnLogged(session, on_log, NULL);
完整示例
PnSServiceOnConnectedChanged(session, on_connected, NULL);
PnSServiceOnStateChanged(session, on_state, NULL);
PnSServiceOnErrorOccurred(session, on_error, NULL);
PnSServiceOnLogged(session, on_log, NULL);