XFusion API v1.3.0
载入中...
搜索中...
未找到
xf_iperf

吞吐量测试。 更多...

xf_iperf 的协作图:

结构体

struct  _xf_iperf_cfg_t
 iperf 配置类型。 更多...
 
struct  _xf_iperf_ctx_t
 iperf 上下文. 更多...
 
struct  _xf_ota_t
 xf_ota 对象容器类型。 更多...
 
struct  _xf_ota_partition_t
 xf_ota 分区对象容器类型。 更多...
 
struct  _xf_ota_partition_info_t
 xf_ota 分区信息类型。 更多...
 

宏定义

#define IPERF_IP_TYPE_IPV4   0
 
#define IPERF_IP_TYPE_IPV6   1
 
#define IPERF_TRANS_TYPE_TCP   0
 
#define IPERF_TRANS_TYPE_UDP   1
 
#define IPERF_FLAG_SET(cfg, flag)   ((cfg) |= (flag))
 
#define IPERF_FLAG_CLR(cfg, flag)   ((cfg) &= (~(flag)))
 
#define IPERF_FLAG_CLIENT   (1)
 
#define IPERF_FLAG_SERVER   (1 << 1)
 
#define IPERF_FLAG_TCP   (1 << 2)
 
#define IPERF_FLAG_UDP   (1 << 3)
 
#define IPERF_DEFAULT_PORT   5001
 
#define IPERF_DEFAULT_INTERVAL   1
 
#define IPERF_DEFAULT_TIME   30
 
#define IPERF_DEFAULT_NO_BW_LIMIT   -1
 
#define IPERF_TRAFFIC_TASK_NAME   "iperf_traffic"
 
#define IPERF_TRAFFIC_TASK_PRIORITY   XF_OSAL_PRIORITY_NORMOL
 
#define IPERF_TRAFFIC_TASK_STACK   4096
 
#define IPERF_REPORT_TASK_NAME   "iperf_report"
 
#define IPERF_REPORT_TASK_PRIORITY   XF_OSAL_PRIORITY_NORMOL
 
#define IPERF_REPORT_TASK_STACK   4096
 
#define IPERF_DEFAULT_IPV4_UDP_TX_LEN   (1470)
 
#define IPERF_DEFAULT_IPV6_UDP_TX_LEN   (1450)
 
#define IPERF_DEFAULT_UDP_RX_LEN   (16 << 10)
 
#define IPERF_DEFAULT_TCP_TX_LEN   (16 << 10)
 
#define IPERF_DEFAULT_TCP_RX_LEN   (16 << 10)
 
#define IPERF_MAX_DELAY   64
 
#define IPERF_SOCKET_RX_TIMEOUT_MS   3000
 
#define XF_IPERF_DEFAULT_CONFIG()
 默认 iperf 配置
 
#define XF_OTA_PACKAGE_LEN_UNKNOWN   0xffffffff
 

类型定义

typedef struct _xf_iperf_ctx_txf_iperf_t
 iperf 句柄。
 
typedef enum _xf_iperf_event_code_t xf_iperf_event_code_t
 iperf 事件声明。
 
typedef int32_t xf_iperf_event_id_t
 iperf 事件 id。见 xf_iperf_event_code_t.
 
typedef void(* xf_iperf_cb_t) (xf_iperf_event_id_t event_id, xf_iperf_t hdl, void *user_args)
 iperf 回调函数原型。
 
typedef struct _xf_iperf_cfg_t xf_iperf_cfg_t
 iperf 配置类型。
 
typedef struct _xf_iperf_ctx_t xf_iperf_ctx_t
 iperf 上下文.
 
typedef struct _xf_ota_t xf_ota_t
 xf_ota 对象容器类型。
 
typedef enum xf_ota_partition_id_code_e xf_ota_partition_id_code_t
 xf_ota 分区枚举代码。
 
typedef uint8_t xf_ota_partition_id_t
 xf_ota 分区类型。
 
typedef struct _xf_ota_partition_t xf_ota_partition_t
 xf_ota 分区对象容器类型。
 
typedef struct _xf_ota_partition_info_t xf_ota_partition_info_t
 xf_ota 分区信息类型。
 

枚举

enum  _xf_iperf_event_code_t { XF_IPERF_EVENT_START = 0x00 , XF_IPERF_EVENT_REPORT , XF_IPERF_EVENT_END , XF_IPERF_EVENT_MAX }
 iperf 事件声明。 更多...
 
enum  xf_ota_partition_id_code_e {
  XF_OTA_PARTITION_ID_INVALID = 0x00 , XF_OTA_PARTITION_ID_PACKAGE_STORAGE , XF_OTA_PARTITION_ID_OTA_0 = 0x10 , XF_OTA_PARTITION_ID_OTA_1 ,
  XF_OTA_PARTITION_ID_OTA_2 , XF_OTA_PARTITION_ID_OTA_3 , XF_OTA_PARTITION_ID_OTA_4 , XF_OTA_PARTITION_ID_OTA_5 ,
  XF_OTA_PARTITION_ID_OTA_6 , XF_OTA_PARTITION_ID_OTA_8 , XF_OTA_PARTITION_ID_OTA_9 , XF_OTA_PARTITION_ID_OTA_10 ,
  XF_OTA_PARTITION_ID_OTA_11 , XF_OTA_PARTITION_ID_OTA_12 , XF_OTA_PARTITION_ID_OTA_13 , XF_OTA_PARTITION_ID_OTA_14 ,
  XF_OTA_PARTITION_ID_OTA_15 , XF_OTA_PARTITION_ID_MAX
}
 xf_ota 分区枚举代码。 更多...
 

函数

xf_err_t xf_iperf_start (const xf_iperf_cfg_t *p_cfg, xf_iperf_cb_t cb_func, void *user_args)
 启动 iperf.
 
xf_iperf_t xf_iperf_get_handle (void)
 获取 iperf 句柄。
 
bool xf_iperf_is_running (void)
 检查 iperf 是否正在运行。
 
xf_err_t xf_iperf_stop (void)
 停止 iperf.
 
xf_err_t xf_ota_init (void)
 初始化 xf_ota 模块。
 
xf_err_t xf_ota_deinit (void)
 反初始化 xf_ota 模块。
 
xf_err_t xf_ota_get_running_partition (xf_ota_partition_t *p_part_hdl)
 获取当前程序运行分区信息。
 
xf_err_t xf_ota_get_next_update_partition (xf_ota_partition_t *p_start_part_hdl, xf_ota_partition_t *p_next_part_hdl)
 获取下一个固件分区。
 
xf_err_t xf_ota_get_partition_info (const xf_ota_partition_t *p_part_hdl, xf_ota_partition_info_t *p_info)
 获取分区信息。
 
size_t xf_ota_get_platform_app_desc_size (void)
 获取平台 APP 描述块的大小。
 
xf_err_t xf_ota_get_platform_app_desc_block (xf_ota_partition_t *p_part_hdl, void *p_desc_out, size_t buff_size)
 获取平台 APP 描述块。
 
size_t xf_ota_get_platform_app_digest_size (void)
 获取平台 APP 摘要块的大小。
 
xf_err_t xf_ota_get_platform_app_digest_block (xf_ota_partition_t *p_part_hdl, void *p_digest_out, size_t buff_size)
 获取平台 APP 摘要块。
 
xf_err_t xf_ota_start (xf_ota_partition_t *p_part_hdl, uint32_t package_len, bool sequential_write, xf_ota_t *p_hdl)
 开始 OTA 固件写入流程。
 
xf_err_t xf_ota_abort (xf_ota_t *p_hdl)
 中断 OTA 固件写入流程。
 
xf_err_t xf_ota_end (xf_ota_t *p_hdl)
 终止 OTA 固件写入流程。
 
xf_err_t xf_ota_upgrade (xf_ota_partition_t *p_part_hdl, bool reboot)
 更新固件。
 
xf_err_t xf_ota_write (xf_ota_t *p_hdl, const void *src, size_t size)
 顺序写入 OTA 固件。
 
xf_err_t xf_ota_write_to (xf_ota_t *p_hdl, size_t dst_offset, const void *src, size_t size)
 指定偏移地址写入 OTA 固件。
 

详细描述

吞吐量测试。

宏定义说明

◆ IPERF_IP_TYPE_IPV4

#define IPERF_IP_TYPE_IPV4   0

◆ IPERF_IP_TYPE_IPV6

#define IPERF_IP_TYPE_IPV6   1

在文件 xf_iperf.h52 行定义.

◆ IPERF_TRANS_TYPE_TCP

#define IPERF_TRANS_TYPE_TCP   0

在文件 xf_iperf.h53 行定义.

◆ IPERF_TRANS_TYPE_UDP

#define IPERF_TRANS_TYPE_UDP   1

在文件 xf_iperf.h54 行定义.

◆ IPERF_FLAG_SET

#define IPERF_FLAG_SET (   cfg,
  flag 
)    ((cfg) |= (flag))

在文件 xf_iperf.h56 行定义.

◆ IPERF_FLAG_CLR

#define IPERF_FLAG_CLR (   cfg,
  flag 
)    ((cfg) &= (~(flag)))

在文件 xf_iperf.h57 行定义.

◆ IPERF_FLAG_CLIENT

#define IPERF_FLAG_CLIENT   (1)

◆ IPERF_FLAG_SERVER

#define IPERF_FLAG_SERVER   (1 << 1)

◆ IPERF_FLAG_TCP

#define IPERF_FLAG_TCP   (1 << 2)

◆ IPERF_FLAG_UDP

#define IPERF_FLAG_UDP   (1 << 3)

◆ IPERF_DEFAULT_PORT

#define IPERF_DEFAULT_PORT   5001

在文件 xf_iperf.h64 行定义.

◆ IPERF_DEFAULT_INTERVAL

#define IPERF_DEFAULT_INTERVAL   1

在文件 xf_iperf.h65 行定义.

◆ IPERF_DEFAULT_TIME

#define IPERF_DEFAULT_TIME   30

在文件 xf_iperf.h66 行定义.

◆ IPERF_DEFAULT_NO_BW_LIMIT

#define IPERF_DEFAULT_NO_BW_LIMIT   -1

在文件 xf_iperf.h67 行定义.

◆ IPERF_TRAFFIC_TASK_NAME

#define IPERF_TRAFFIC_TASK_NAME   "iperf_traffic"

在文件 xf_iperf.h69 行定义.

◆ IPERF_TRAFFIC_TASK_PRIORITY

#define IPERF_TRAFFIC_TASK_PRIORITY   XF_OSAL_PRIORITY_NORMOL

在文件 xf_iperf.h70 行定义.

◆ IPERF_TRAFFIC_TASK_STACK

#define IPERF_TRAFFIC_TASK_STACK   4096

在文件 xf_iperf.h71 行定义.

◆ IPERF_REPORT_TASK_NAME

#define IPERF_REPORT_TASK_NAME   "iperf_report"

在文件 xf_iperf.h72 行定义.

◆ IPERF_REPORT_TASK_PRIORITY

#define IPERF_REPORT_TASK_PRIORITY   XF_OSAL_PRIORITY_NORMOL

在文件 xf_iperf.h73 行定义.

◆ IPERF_REPORT_TASK_STACK

#define IPERF_REPORT_TASK_STACK   4096

在文件 xf_iperf.h74 行定义.

◆ IPERF_DEFAULT_IPV4_UDP_TX_LEN

#define IPERF_DEFAULT_IPV4_UDP_TX_LEN   (1470)

在文件 xf_iperf.h76 行定义.

◆ IPERF_DEFAULT_IPV6_UDP_TX_LEN

#define IPERF_DEFAULT_IPV6_UDP_TX_LEN   (1450)

在文件 xf_iperf.h77 行定义.

◆ IPERF_DEFAULT_UDP_RX_LEN

#define IPERF_DEFAULT_UDP_RX_LEN   (16 << 10)

在文件 xf_iperf.h78 行定义.

◆ IPERF_DEFAULT_TCP_TX_LEN

#define IPERF_DEFAULT_TCP_TX_LEN   (16 << 10)

在文件 xf_iperf.h79 行定义.

◆ IPERF_DEFAULT_TCP_RX_LEN

#define IPERF_DEFAULT_TCP_RX_LEN   (16 << 10)

在文件 xf_iperf.h80 行定义.

◆ IPERF_MAX_DELAY

#define IPERF_MAX_DELAY   64

在文件 xf_iperf.h82 行定义.

◆ IPERF_SOCKET_RX_TIMEOUT_MS

#define IPERF_SOCKET_RX_TIMEOUT_MS   3000

◆ XF_IPERF_DEFAULT_CONFIG

#define XF_IPERF_DEFAULT_CONFIG ( )
值:
.flag = 0, \
.dip = {}, \
.sip = {}, \
.type = IPERF_IP_TYPE_IPV4, \
.dport = IPERF_DEFAULT_PORT, \
.sport = IPERF_DEFAULT_PORT, \
.interval = IPERF_DEFAULT_INTERVAL, \
.time = IPERF_DEFAULT_TIME, \
.len_send_buf = 0, \
.traffic_task_stack_size = IPERF_TRAFFIC_TASK_STACK, \
.traffic_task_prio = IPERF_TRAFFIC_TASK_PRIORITY, \
.report_enabled = true, \
.report_task_stack_size = IPERF_REPORT_TASK_STACK, \
.report_task_prio = IPERF_REPORT_TASK_PRIORITY, \
}
#define IPERF_DEFAULT_NO_BW_LIMIT
Definition xf_iperf.h:67
struct _xf_iperf_cfg_t xf_iperf_cfg_t
iperf 配置类型。
#define IPERF_DEFAULT_TIME
Definition xf_iperf.h:66
#define IPERF_TRAFFIC_TASK_PRIORITY
Definition xf_iperf.h:70
#define IPERF_DEFAULT_PORT
Definition xf_iperf.h:64
#define IPERF_REPORT_TASK_STACK
Definition xf_iperf.h:74
#define IPERF_IP_TYPE_IPV4
Definition xf_iperf.h:51
#define IPERF_DEFAULT_INTERVAL
Definition xf_iperf.h:65
#define IPERF_TRAFFIC_TASK_STACK
Definition xf_iperf.h:71
#define IPERF_REPORT_TASK_PRIORITY
Definition xf_iperf.h:73

默认 iperf 配置

示例
examples/protocols/iperf/softap/main/xf_main.c , 以及 examples/protocols/iperf/station/main/xf_main.c.

在文件 xf_iperf.h165 行定义.

◆ XF_OTA_PACKAGE_LEN_UNKNOWN

#define XF_OTA_PACKAGE_LEN_UNKNOWN   0xffffffff

如果固件大小未知

在文件 xf_ota_types.h33 行定义.

类型定义说明

◆ xf_iperf_t

typedef struct _xf_iperf_ctx_t* xf_iperf_t

iperf 句柄。

在文件 xf_iperf.h96 行定义.

◆ xf_iperf_event_code_t

iperf 事件声明。

◆ xf_iperf_event_id_t

typedef int32_t xf_iperf_event_id_t

iperf 事件 id。见 xf_iperf_event_code_t.

在文件 xf_iperf.h120 行定义.

◆ xf_iperf_cb_t

typedef void(* xf_iperf_cb_t) (xf_iperf_event_id_t event_id, xf_iperf_t hdl, void *user_args)

iperf 回调函数原型。

不要在回调内重启 iperf.

参数
event_id事件 id. 根据事件类型, 见 xf_iperf_event_code_t.
hdl事件数据. 见 xf_iperf_t.
user_args用户数据. xf_iperf_new_session() 时传入.

在文件 xf_iperf.h131 行定义.

◆ xf_iperf_cfg_t

iperf 配置类型。

◆ xf_iperf_ctx_t

iperf 上下文.

注意
只有 public: 部分是在回调中可读的, 用户 禁止 修改其中任何内容。

◆ xf_ota_t

typedef struct _xf_ota_t xf_ota_t

xf_ota 对象容器类型。

注解
用户禁止访问 xf_ota_t.platform_data, 它供给底层使用,不一定是指针。
用户禁止修改其中内容。
此结构体未来可能扩充。

◆ xf_ota_partition_id_code_t

xf_ota 分区枚举代码。

注解
不一定所有平台都支持此类型。需要根据具体对接确定。 如 1. 只支持双 OTA 分区,或者 2. 只有一个固件分区,只支持差分升级。

◆ xf_ota_partition_id_t

typedef uint8_t xf_ota_partition_id_t

xf_ota 分区类型。

在文件 xf_ota_types.h77 行定义.

◆ xf_ota_partition_t

xf_ota 分区对象容器类型。

注解
用户禁止访问 xf_ota_t.platform_data, 它提供给底层使用,不一定是指针。
用户禁止修改其中内容。
此结构体未来可能扩充。

◆ xf_ota_partition_info_t

xf_ota 分区信息类型。

注解
用户禁止修改其中内容。

枚举类型说明

◆ _xf_iperf_event_code_t

iperf 事件声明。

枚举值
XF_IPERF_EVENT_START 

iperf 开始。

XF_IPERF_EVENT_REPORT 

iperf 报告带宽。 事件数据见 xf_iperf_t::curr_time, xf_iperf_t::actual_len, 和 xf_iperf_t::actual_bandwidth.

XF_IPERF_EVENT_END 

iperf 完成。 事件数据见 xf_iperf_t::average_bandwidth. 不要在回调内重启 iperf.

XF_IPERF_EVENT_MAX 

iperf 事件 ID 最大值,无效 ID。

在文件 xf_iperf.h101 行定义.

◆ xf_ota_partition_id_code_e

xf_ota 分区枚举代码。

注解
不一定所有平台都支持此类型。需要根据具体对接确定。 如 1. 只支持双 OTA 分区,或者 2. 只有一个固件分区,只支持差分升级。
枚举值
XF_OTA_PARTITION_ID_INVALID 
XF_OTA_PARTITION_ID_PACKAGE_STORAGE 

区别于 OTA 分区存储固件,此分区只存储升级包

XF_OTA_PARTITION_ID_OTA_0 
XF_OTA_PARTITION_ID_OTA_1 
XF_OTA_PARTITION_ID_OTA_2 
XF_OTA_PARTITION_ID_OTA_3 
XF_OTA_PARTITION_ID_OTA_4 
XF_OTA_PARTITION_ID_OTA_5 
XF_OTA_PARTITION_ID_OTA_6 
XF_OTA_PARTITION_ID_OTA_8 
XF_OTA_PARTITION_ID_OTA_9 
XF_OTA_PARTITION_ID_OTA_10 
XF_OTA_PARTITION_ID_OTA_11 
XF_OTA_PARTITION_ID_OTA_12 
XF_OTA_PARTITION_ID_OTA_13 
XF_OTA_PARTITION_ID_OTA_14 
XF_OTA_PARTITION_ID_OTA_15 
XF_OTA_PARTITION_ID_MAX 

在文件 xf_ota_types.h53 行定义.

函数说明

◆ xf_iperf_start()

xf_err_t xf_iperf_start ( const xf_iperf_cfg_t p_cfg,
xf_iperf_cb_t  cb_func,
void *  user_args 
)

启动 iperf.

注解
iperf 通常用于测试网络极限性能,因此不打算支持多实例。
参数
p_cfgiperf 配置。
cb_funciperf 回调函数。
user_argsiperf 回调函数用户参数。
返回
xf_err_t
  • XF_ERR_INVALID_ARG 无效参数(例如配置为空等)
  • XF_ERR_NO_MEM 内存不足
  • XF_FAIL 其他内部错误(例如套接字错误)
  • XF_OK 成功

在文件 xf_iperf.c81 行定义.

◆ xf_iperf_get_handle()

xf_iperf_t xf_iperf_get_handle ( void  )

获取 iperf 句柄。

返回
xf_iperf_t
  • NULL 失败
  • (OTHER) 成功

◆ xf_iperf_is_running()

bool xf_iperf_is_running ( void  )

检查 iperf 是否正在运行。

返回
  • true 是
  • false 否

在文件 xf_iperf.c140 行定义.

◆ xf_iperf_stop()

xf_err_t xf_iperf_stop ( void  )

停止 iperf.

返回
  • XF_OK 成功
  • XF_FAIL 其他内部错误(例如套接字错误)

在文件 xf_iperf.c126 行定义.

◆ xf_ota_init()

xf_err_t xf_ota_init ( void  )

初始化 xf_ota 模块。

返回
xf_err_t
  • XF_OK 成功
  • XF_FAIL 失败

◆ xf_ota_deinit()

xf_err_t xf_ota_deinit ( void  )

反初始化 xf_ota 模块。

返回
xf_err_t
  • XF_OK 成功
  • XF_FAIL 失败

◆ xf_ota_get_running_partition()

xf_err_t xf_ota_get_running_partition ( xf_ota_partition_t p_part_hdl)

获取当前程序运行分区信息。

参数
[out]p_part_hdl传出当前运行分区句柄信息。
返回
xf_err_t
  • XF_OK 成功
  • XF_FAIL 失败
  • XF_ERR_INVALID_ARG 无效参数
xf_ota_partition_t running_partition = {0};
xf_ota_get_running_partition(&running_partition);
xf_err_t xf_ota_get_running_partition(xf_ota_partition_t *p_part_hdl)
获取当前程序运行分区信息。
xf_ota 分区对象容器类型。

◆ xf_ota_get_next_update_partition()

xf_err_t xf_ota_get_next_update_partition ( xf_ota_partition_t p_start_part_hdl,
xf_ota_partition_t p_next_part_hdl 
)

获取下一个固件分区。

参数
p_start_part_hdl传入起始的分区,可以为 NULL.
[out]p_next_part_hdl传出下一个可用于固件升级的分区句柄。 禁止与 p_start_part_hdl 相同。
返回
xf_err_t
  • XF_OK 成功
  • XF_FAIL 失败,或者没有下一个升级分区了
  • XF_ERR_INVALID_ARG 无效参数
xf_ota_partition_t running_partition = {0};
xf_ota_partition_t update_partition = {0};
xf_ota_get_running_partition(&running_partition);
xf_err_t xf_ret = xf_ota_get_next_update_partition(&running_partition, &update_partition);
// 或 `xf_ota_get_next_update_partition(NULL, &update_partition);`
if (xf_ret == XF_OK) {
// 可以用 update_partition 进行后续升级
}
xf_err_t xf_ota_get_next_update_partition(xf_ota_partition_t *p_start_part_hdl, xf_ota_partition_t *p_next_part_hdl)
获取下一个固件分区。
int32_t xf_err_t
整形错误类型。 错误码具体值见 xf_err_code_t.
Definition xf_err.h:69
@ XF_OK
Definition xf_err.h:43

◆ xf_ota_get_partition_info()

xf_err_t xf_ota_get_partition_info ( const xf_ota_partition_t p_part_hdl,
xf_ota_partition_info_t p_info 
)

获取分区信息。

参数
p_part_hdl需要查询的分区. 可以从 xf_ota_get_running_partition()xf_ota_get_next_update_partition() 获取。
[out]p_info传出分区信息。
返回
xf_err_t
  • XF_OK 成功
  • XF_ERR_NOT_SUPPORTED 传入的分区不支持查询;或者接口未实现
  • XF_FAIL 失败

◆ xf_ota_get_platform_app_desc_size()

size_t xf_ota_get_platform_app_desc_size ( void  )

获取平台 APP 描述块的大小。

返回
size_t 平台 APP 描述块的大小。

◆ xf_ota_get_platform_app_desc_block()

xf_err_t xf_ota_get_platform_app_desc_block ( xf_ota_partition_t p_part_hdl,
void *  p_desc_out,
size_t  buff_size 
)

获取平台 APP 描述块。

注解
不同平台的 APP 描述及所含信息不同, xfusion 无法兼容。 获取描述块主要用来发给固件服务器。
APP 描述块可能有编译时间日期、版本号、SDK 版本号等信息,由具体平台决定。
参数
p_part_hdl需要查询的分区。 可以从 xf_ota_get_running_partition()xf_ota_get_next_update_partition() 获取。
[out]p_desc_out描述块缓冲区。
buff_size缓冲区大小,单位字节。可以从 xf_ota_get_platform_app_desc_size() 获取。
返回
xf_err_t
  • XF_OK 成功
  • XF_ERR_NOT_SUPPORTED 传入的分区不支持查询;或者接口未实现
  • XF_FAIL 失败
  • XF_ERR_INVALID_ARG 参数无效,或者 p_part_hdl 内不含可读取的固件信息

◆ xf_ota_get_platform_app_digest_size()

size_t xf_ota_get_platform_app_digest_size ( void  )

获取平台 APP 摘要块的大小。

返回
size_t 平台 APP 摘要块的大小。

◆ xf_ota_get_platform_app_digest_block()

xf_err_t xf_ota_get_platform_app_digest_block ( xf_ota_partition_t p_part_hdl,
void *  p_digest_out,
size_t  buff_size 
)

获取平台 APP 摘要块。

注解
不同平台的 APP 摘要算法不同,输出格式也不一定相同, xfusion 无法兼容。 获取摘要块主要用来发给固件服务器。
APP 摘要块可能是 SHA256 或 MD5 的计算结果,由具体平台决定。
参数
p_part_hdl需要查询的分区。 可以从 xf_ota_get_running_partition()xf_ota_get_next_update_partition() 获取。
[out]p_digest_out摘要块缓冲区。
buff_size缓冲区大小,单位字节。可以从 xf_ota_get_platform_app_digest_size() 获取。
返回
xf_err_t
  • XF_OK 成功
  • XF_ERR_NOT_SUPPORTED 传入的分区不支持查询;或者接口未实现
  • XF_FAIL 失败
  • XF_ERR_INVALID_ARG 参数无效,或者 p_part_hdl 内不含可读取的固件信息

◆ xf_ota_start()

xf_err_t xf_ota_start ( xf_ota_partition_t p_part_hdl,
uint32_t  package_len,
bool  sequential_write,
xf_ota_t p_hdl 
)

开始 OTA 固件写入流程。

参数
p_part_hdl需要升级的分区。 可以从 xf_ota_get_next_update_partition() 获取。
package_len固件包长。不同平台对此参数要求不同,通常需要填入此信息。 如果确认平台支持不指定固件包长,可填入 XF_OTA_PACKAGE_LEN_UNKNOWN.
sequential_write是否顺序写入。不同平台对能否随机写入的支持程度不同。 顺序写入是最低要求。
[out]p_hdl传出 OTA 句柄。
返回
xf_err_t
  • XF_OK 成功
  • XF_ERR_INVALID_ARG 无效参数
  • XF_ERR_NOT_SUPPORTED 不支持随机写入
  • XF_FAIL 失败
xf_ota_partition_t update_partition = {0};
xf_ota_get_next_update_partition(NULL, &update_partition);`
xf_ota_t ota = {0};
xf_ret = xf_ota_start(&update_partition, PACKAGE_LEN, true, &ota);
if (xf_ret != XF_OK) {
// 错误处理
}
while (1) {
// 收包到 p_buf, 并且更新数据包大小 buf_size
xf_ret = xf_ota_write(&ota, p_buf, buf_size); XF_ERROR_CHECK(xf_ret);
// 收包完毕后 break;
}
// 结束 OTA 写入流程
xf_ret = xf_ota_end(p_ota); XF_ERROR_CHECK(xf_ret);
// 更新,并设置下一次开机启动更新流程,或在新分区启动
xf_ret = xf_ota_upgrade(p_update_part, false); XF_ERROR_CHECK(xf_ret);
xf_err_t xf_ota_start(xf_ota_partition_t *p_part_hdl, uint32_t package_len, bool sequential_write, xf_ota_t *p_hdl)
开始 OTA 固件写入流程。
xf_err_t xf_ota_end(xf_ota_t *p_hdl)
终止 OTA 固件写入流程。
xf_err_t xf_ota_write(xf_ota_t *p_hdl, const void *src, size_t size)
顺序写入 OTA 固件。
xf_err_t xf_ota_upgrade(xf_ota_partition_t *p_part_hdl, bool reboot)
更新固件。
#define XF_ERROR_CHECK(expression)
xfusion 错误检查宏(表达式 不等于 XF_OK 时则调用 XF_CHECK_ERROR_HANDLER)。
Definition xf_check.h:182
xf_ota 对象容器类型。

◆ xf_ota_abort()

xf_err_t xf_ota_abort ( xf_ota_t p_hdl)

中断 OTA 固件写入流程。

参数
p_hdlxf_ota_start() 传出的 OTA 句柄。 调用 xf_ota_abort() 后句柄内容无效。
返回
xf_err_t
  • XF_OK 成功
  • XF_ERR_INVALID_ARG 无效参数
  • XF_ERR_NOT_SUPPORTED 不支持非顺序写入
  • XF_FAIL 失败

◆ xf_ota_end()

xf_err_t xf_ota_end ( xf_ota_t p_hdl)

终止 OTA 固件写入流程。

注解
可能会此函数调用后校验写入的固件数据。
参数
p_hdlxf_ota_start() 传出的 OTA 句柄。 调用 xf_ota_end() 后句柄内容无效。
返回
xf_err_t
  • XF_OK 成功
  • XF_ERR_INVALID_ARG 无效参数
  • XF_ERR_INVALID_CHECK 写入的固件无效
  • XF_FAIL 其他错误情况

◆ xf_ota_upgrade()

xf_err_t xf_ota_upgrade ( xf_ota_partition_t p_part_hdl,
bool  reboot 
)

更新固件。

参数
p_part_hdl需要升级的分区。 从 xf_ota_get_next_update_partition() 获取,并且程序写入完毕。
reboot如果内部检测成功,是否重启。
返回
xf_err_t
  • XF_OK 成功
  • XF_ERR_INVALID_ARG 无效参数
  • XF_FAIL 失败

◆ xf_ota_write()

xf_err_t xf_ota_write ( xf_ota_t p_hdl,
const void *  src,
size_t  size 
)

顺序写入 OTA 固件。

注解
不能与 xf_ota_write_to() 一起使用。
参数
p_hdlOTA 句柄,从 xf_ota_start() 获取。
srcOTA 固件数据。
size本次 OTA 固件数据大小。 必须以 xf_ota_partition_info_t.unit_size 为单位写入。
返回
xf_err_t
  • XF_OK 成功
  • XF_ERR_INVALID_ARG 无效参数
  • XF_FAIL 失败

◆ xf_ota_write_to()

xf_err_t xf_ota_write_to ( xf_ota_t p_hdl,
size_t  dst_offset,
const void *  src,
size_t  size 
)

指定偏移地址写入 OTA 固件。

注解
xf_ota_write_to() 不一定所有平台都支持。
参数
p_hdlOTA 句柄,从 xf_ota_start() 获取。
dst_offset偏移量,单位字节。
srcOTA 固件数据。
size本次 OTA 固件数据大小。 必须以 xf_ota_partition_info_t.unit_size 为单位写入。
返回
xf_err_t
  • XF_OK 成功
  • XF_ERR_INVALID_ARG 无效参数
  • XF_FAIL 失败