Hisport 接口文档
更新时间: 2026/03/04
在Gitcode上查看源码Hisport接口文档
init函数
函数形式
void Hisport::init(const HISPORT_INIT_S &init_data, std::string bus_name)
描述
- 初始化Hisport设备。该函数用于配置Hisport设备的参数,并创建共享内存互斥锁。
参数
| 参数 | 类型 | 描述 |
|---|---|---|
| init_data | HISPORT_INIT_S& | 包含初始化参数的结构体。 |
| bus_name | string | 总线名称,用于创建互斥锁,进行多进程并发管理。 |
HISPORT_INIT_S结构体介绍如下:
c++
struct tag_hisport_init_s {
uint32_t bus_num; //I2C通道数量(范围为[1, 128])
uint32_t reg_num; //send寄存器和recv寄存器使用的字节数(范围为[1, 10])
uint32_t flag_num; //flag寄存器使用的字节数(范围为[1, 2])
uint32_t send_reg_addr; //send寄存器起始地址, 寄存器的最大使用地址不能超过64K
uint32_t recv_reg_addr; //recv寄存器起始地址, 寄存器的最大使用地址不能超过64K
uint32_t flag_reg_addr; //flag寄存器起始地址, 寄存器的最大使用地址不能超过64K
uint32_t max_batch_len; //单帧读写最大字节数(范围为[1, 2])
uint32_t max_data_len; //单次读写请求的最大字节数(范围为[1, 1024])
uint32_t max_offset_width; //最大偏移宽度(范围为[1, 2])
uint32_t max_length_width; //最大数据长度宽度(范围为[1, 2])
};返回
- 初始化成功时无返回值,失败时通过错误引擎抛错,需要调用方进行异常捕获
示例
c++
HISPORT_INIT_S init_config = {0};
init_config.bus_num = 128;
init_config.reg_num = 10;
init_config.flag_num = 2;
init_config.max_batch_len = 2;
init_config.max_data_len = 1024;
init_config.max_offset_width = 2;
init_config.max_length_width = 2;
init_config.send_reg_addr = 0x00;
init_config.recv_reg_addr = 0x10;
init_config.flag_reg_addr = 0x1A;
Hisport hisport;
try {
hisport.init(init_config, "hisport_bus");
std::cout << "HISPORT 初始化成功" << std::endl;
} catch (const std::runtime_error& e) {
std::cout << "异常:" << e.what() << std::endl;
}相关日志介绍(linux_kernel_log)
- 入参
init_data校验失败时记录日志:init parameter error: bus_num=%d, reg_num=%d, flag_num=%d, max_batch_len=%d, max_data_len=%d, max_offset_width=%d, max_length_width=%d - 初始化成功记录日志:
hisport init success
read函数
函数形式
std::string Hisport::read(HISPORT_DATA_S &read_data)
描述
- 从Hisport设备读取数据,该函数支持重试机制,确保数据读取的可靠性。
参数
| 参数 | 类型 | 描述 |
|---|---|---|
| read_data | HISPORT_DATA_S& | 包含读请求参数的结构体 |
HISPORT_DATA_S结构体介绍如下:
c++
typedef struct tag_hisport_s {
uint32_t bus_id; /* I2C控制器的编号,取值范围为0~127 */
uint32_t addr; /* 器件地址 */
uint32_t offset; /* 偏移地址 */
const uint8_t *tx_buffer; /* 写操作发送的数据 */
uint32_t tx_len; /* 发送命令中数据长度 */
uint8_t *rx_buffer; /* 回传数据缓存 */
uint32_t rx_len; /* 回传数据长度 */
uint8_t offset_width; /* 偏移位宽 */
uint8_t data_width; /* 数据位宽,写入字节数或待读取的字节数 */
uint8_t rw_flag; /* 读写请求标志,写请求为0,读请求为1 */
int32_t re_read_cnt; /* 重读次数,>=1 */
int32_t re_write_cnt; /* 重写次数,>=1 */
uint8_t write_delay; /* 写操作后是否进行延时,单位:ms */
} HISPORT_DATA_S;返回
- 读取到的数据,类型为string
示例
c++
HISPORT_DATA_S read_config = {0};
read_config.addr = 174;
read_config.offset = 12;
read_config.bus_id = 0;
read_config.offset_width = 2;
read_config.re_write_cnt = 10;
read_config.re_read_cnt = 10;
read_config.rw_flag = 1; // 读操作
read_config.rx_buffer = new uint8_t[10];
read_config.rx_len = 10;
read_config.data_width = 10;
Hisport hisport;
try {
std::string read_result = hisport.read(read_config);
std::cout << "读取到的数据:" << read_result << std::endl;
delete[] read_config.rx_buffer;
} catch (const std::runtime_error& e) {
delete[] read_config.rx_buffer;
std::cout << "异常:" << e.what() << std::endl;
}相关日志介绍(linux_kernel_log)
- 执行读请求前需等待初始化完成,如未完成初始化会记录日志:
wait init - 如果存储数据的
rx_buffer为空,则记录错误日志:read request need respond data - 如果读请求的数据长度超过限制长度,则记录错误日志:
need read data is too long, rx_len:%d, max_data_len:%d - 如果执行读请求,但
tx_buffer不为空,则记录错误日志:read request don't need write data - 如果请求结构体中设置的
rw_flag既不为0,也不为1,则记录错误日志:request type error, rw_flag=%d
write函数
函数形式
void Hisport::write(HISPORT_DATA_S &write_data, const std::string_view &tx)
描述
- 向Hisport设备写入数据,该函数支持重试机制,确保数据写入的可靠性
参数
| 参数 | 类型 | 描述 |
|---|---|---|
| write_data | HISPORT_DATA_S& | 包含写请求参数的结构体 |
| tx | string_view& | 待写入的数据 |
HISPORT_DATA_S结构体介绍如下:
c++
typedef struct tag_hisport_s {
uint32_t bus_id; /* I2C控制器的编号,取值范围为0~127 */
uint32_t addr; /* 器件地址 */
uint32_t offset; /* 偏移地址 */
const uint8_t *tx_buffer; /* 写操作发送的数据 */
uint32_t tx_len; /* 发送命令中数据长度 */
uint8_t *rx_buffer; /* 回传数据缓存 */
uint32_t rx_len; /* 回传数据长度 */
uint8_t offset_width; /* 偏移位宽 */
uint8_t data_width; /* 数据位宽,写入字节数或待读取的字节数 */
uint8_t rw_flag; /* 读写请求标志,写请求为0,读请求为1 */
int32_t re_read_cnt; /* 重读次数,>=1 */
int32_t re_write_cnt; /* 重写次数,>=1 */
uint8_t write_delay; /* 写操作后是否进行延时,单位:ms */
} HISPORT_DATA_S;返回
- 空
示例
c++
HISPORT_DATA_S write_config = {0};
write_config.bus_id = 0;
write_config.addr = 174;
write_config.offset = 12;
write_config.offset_width = 2;
write_config.re_write_cnt = 10;
write_config.re_read_cnt = 10;
write_config.rw_flag = 0; // 写操作
Hisport hisport;
try {
hisport.write(write_config, "hello");
std::cout << "写入成功" << std::endl;
} catch (const std::runtime_error& e) {
std::cout << "异常:" << e.what() << std::endl;
}相关日志介绍(linux_kernel_log)
- 执行写请求前需等待初始化完成,如未完成初始化,则记录日志:
wait init - 如果写请求的
tx_buffer为空,记录日志:write request need send data - 如果写请求的数据长度超过限制长度,则记录日志:
need send data is too long, tx_len:%d, max_data_len:%d - 如果执行写请求,但
rx_buffer不为空,则记录日志:write request don't need respond data - 如果请求结构体中设置的
rw_flag既不为0,也不为1,则记录日志:request type error, rw_flag=%d