Files
2026-08-13 16:50:52 +08:00

227 lines
4.9 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* Copyright (c) 2023, LISTENAI
*
* SPDX-License-Identifier: Apache-2.0
*/
#pragma once
#include <stdint.h>
#include <stdbool.h>
#include "lisa/ultis.h"
#ifdef __cplusplus
extern "C" {
#endif
/* clang-format off */
#define STRINGS_LSC_EVT(evt) \
((evt == LSC_CONNECTED) ? "lsc connected" \
: (evt == LSC_CONNECTING) ? "lsc connecting" \
: (evt == LSC_DISCONNECTED) ? "lsc disconnected" \
: (evt == LSC_CLOUD_AUTH_FAILD) ? "lsc cloud auth faild" \
: (evt == LSC_GOT_TOKEN) ? "lsc got token" \
: "faild evt")
/* clang-format on */
/**
* @addtogroup lsc_connect 平台连接以及音乐服务调用方法
* @{
*/
/**
* @brief 发起云端连接请求后,下发的事件结果
*/
typedef enum {
/** 连接已成功 */
LSC_CONNECTED = BIT(0),
/** 连接中 */
LSC_CONNECTING = BIT(1),
/** 连接已断开 */
LSC_DISCONNECTED = BIT(2),
/** 鉴权失败 */
LSC_CLOUD_AUTH_FAILD = BIT(3),
/** 鉴权成功并获取到token */
LSC_GOT_TOKEN = BIT(4),
/** 数据接收 */
LSC_DATA_RECEIVED = BIT(5),
/** 无效事件 */
LSC_NONE = BIT(31),
} lsc_event_e;
/**
* @brief 设备运行环境模式
*/
typedef enum {
LSC_DEVICE_MODE_PROD = 0,
LSC_DEVICE_MODE_STAGING = 1,
LSC_DEVICE_MODE_INTEGRATION = 2,
} lsc_device_mode_t;
/**
* @typedef lsc_event_cb_t
* @brief 定义回调函数类型
*
* @param evt 事件类型
* @param data 事件数据
* @param size 事件数据长度
* @param usr 用户参数
*/
typedef void (*lsc_event_cb_t)(lsc_event_e evt, void *data, uint32_t size, void *usr);
/**
* @brief 服务器地址配置结构体
*
* 用于配置LSC服务器地址和端口信息。
* 如果设置为NULL将使用默认值。
*/
typedef struct {
/** 生产环境Host */
char *host;
/** 测试环境Host */
char *host_staging;
/** 研发环境Host */
char *host_integration;
/** 生产环境Token URL */
char *token_url;
/** 测试环境Token URL */
char *token_url_staging;
/** 研发环境Token URL */
char *token_url_integration;
/** 音乐激活URL */
char *music_active_url;
/** 音乐转换链接URL */
char *music_tranlink_url;
/** 端口号 */
char *port;
/** WebSocket协议scheme */
char *scheme;
} lsc_server_config_t;
/**
* @brief 定义lsf组件的配置参数类型
*
* 发起连接之前,需提前配置相关参数。
*
* @note token用于指定特定token进行连接如果没有指定token那么将使用product_idsecret_id进行云端鉴权并获取token。
*/
typedef struct {
/** 是否自动重连 */
bool if_auto_reconn;
/** 重连间隔时间 */
uint32_t reconn_interval_ms;
char *device_id;
char *product_id;
char *secret_id;
/** 额外参数,用于鉴权时传递给服务器 */
char *extra_param;
/** 指定token */
char *token;
/** 设备运行环境模式 */
lsc_device_mode_t device_mode;
/** 服务器配置如果为NULL则使用默认配置 */
lsc_server_config_t *server_config;
} lsc_config_t;
/**
* @brief 初始化lsp组件
*
* @param cfg 配置参数
*
* @retval 0 成功
*/
int lsc_init(lsc_config_t *cfg);
/**
* @brief 添加事件回调函数
* 支持多次添加回调函数,每个回调函数都会收到事件通知。
*
* @param cb 回调函数
* @param evt 监听的事件,参考@see lsc_event_e
* @param usr 用户参数
*
* @retval 0 成功
*/
int lsc_add_callback(lsc_event_e evt, lsc_event_cb_t cb, void *usr);
/**
* @brief 移除已注册的回调函数
*
* @param cb 回调函数
*
* @retval 0 成功
*/
int lsc_remove_callback(lsc_event_cb_t cb);
/**
* @brief 发起连接
*
* @retval 0 成功
*/
int lsc_connect(void);
/**
* @brief 断开连接
*
* @retval 0 成功
*/
int lsc_disconnect(void);
/**
* @brief LSP组件逆初始化
*
* @retval 0 成功
*/
int lsc_deinit(void);
/**
* @brief 激活云端音乐服务
* 调用该接口后,会执行音乐激活流程,并同步返回结果
*
* @retval 0 成功
*/
int lsc_music_active(void);
/**
* @brief 获取指定音乐id的url
* 该接口可通过云端下发的音乐ID来请求实际音乐文件的URL
*
* @param music_item_id 待获取的音乐id
* @param[out] music_url 返回音乐的url
*
* @retval 0 成功
*/
int lsc_music_request_url(const char *music_item_id, char music_url[256]);
/**
* @brief 设置lsc的配置参数
*
* @param cfg 配置参数,参照@see lsc_config_t
*
* @retval 0 成功
*/
int lsc_set_config(lsc_config_t *cfg);
/**
* @brief 设置接入环境,默认为生产环境
*
* @param device_mode 0:生产环境 1:测试环境 2:研发环境
*
* @retval 0 成功
*/
int lsc_set_device_mode(lsc_device_mode_t device_mode);
/**
* @brief 获取lschat模块当前的JWT令牌
*
* @return 当前的JWT令牌如果未认证则返回NULL
*/
const char *get_lsc_jwt_token(void);
/**
* @}
*/
#ifdef __cplusplus
}
#endif