跳到主要内容

事件

通过 PnSServiceOn* 注册运行态回调。

自动日志

每个事件触发时都会再打 OnLogged(等级跟随源事件),无论是否另订了对应事件。绑 OnLogged 即可收到中文消息。

第一次快照不触发。cbNULL 取消订阅。会话为空返回 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 == falseever_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);

每个事件触发时都会再打这条,等级跟随源事件。

回调参数:

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);