文档版本: dev
数据类型¶
适用设备
本文档适用于 OpenZilo Q。
公开数据类型统一通过 import openzilo as sdk 使用。异常类型见异常与问题排查,函数入口见API 索引。
BLE 和协议类型¶
BleDeviceInfo
name: str | None # BLE 广播名称,可能为空。
address: str # BLE MAC 地址。
rssi: int | None # 信号强度;部分 bleak 后端可能不提供。
Packet
command: int # 命令字,例如 0x0605。
body: bytes # 包体,不包含协议头。
version: int # 协议版本,当前通常为 4。
body_crc: int # 包体 CRC16。
OpenZiloClient
# 高层 BLE 协议客户端。负责连接、收包重组、请求响应匹配和事件分发。
NusClient
# 底层 Nordic UART Service BLE 客户端。发送固定按 20 字节分片,
# 通常只在调试或自定义传输时直接使用。
PacketStream
# 将 BLE 分片拼成完整 Packet,适合协议调试。
BinaryReader
# 按网络字节序从 bytes 中读取 u8/u16/u32/i16/string_u16。
BinaryWriter
# 按网络字节序构建 bytes 包体。
系统和日志类型¶
SystemInfo
firmware_version: str # 固件版本。
system_time: int # 设备侧系统时间戳。
audio_storage_total: int # 录音存储总字节数。
audio_storage_available: int # 录音存储剩余字节数。
battery_percent: int # 电量百分比。
battery_charging: bool # 是否正在充电。
sn: str # 设备序列号;设备未写入时可能为 unknown。
cpuid: str # 芯片 ID 字符串。
model: str # 设备型号。
LogStorageInfo
page_size: int # 当前日志文件大小或页大小字段,按设备端返回解释。
total_len: int # 日志最大可读长度。
录音类型¶
AudioFileInfo
file_index: int # 录音索引。
record_time: int # 录音时间戳,由设备端保存。
data_size: int # 录音原始数据字节数。
AudioDataFrame
file_index: int # 录音索引。
frame_offset: int # 本帧在录音数据中的起始偏移。
frame_size: int # 本帧声明的数据长度。
is_end: bool # 是否为最后一帧。
data: bytes # 本帧录音数据。
PcmConfig
sample_rate: int = 16000 # WAV 输出采样率。
channels: int = 1 # WAV 输出声道数。
bit_depth: int = 16 # WAV 输出位深。
SpeexDecodeResult
pcm_bytes: bytes # 解码后的 PCM 数据。
pcm_config: PcmConfig # PCM 参数。
source_type: str # 源数据类型,例如 packet-speex、ogg-speex。
source_extension: str # 源数据建议扩展名。
packet_count: int # Speex 包数量,无法统计时为 0。
PlayableAudio
bytes: bytes # 可播放音频字节,通常是 WAV。
extension: str # 建议扩展名。
mime: str # MIME 类型。
play_mode: str # direct 或 speex-decode。
label: str # 格式标签。
pcm_config: PcmConfig | None
source_type: str
source_extension: str
source_mime: str
description: str
AudioBundle
raw_path: Path # 原始录音保存路径。
raw_file_name: str
play_path: Path # 解码后可播放文件路径。
play_file_name: str
play_mode: str
format_label: str
play_description: str
pcm_summary: str
raw_size: int
play_size: int
source_type: str
source_extension: str
OpusDecodeResult
pcm_bytes: bytes # 解码后的 16 kHz、单声道或双声道、16 bit PCM。
pcm_config: PcmConfig # PCM 参数。
source_type: str # 单声道为 opus-mono,双声道为 opus-stereo。
source_extension: str # 固定为 op2c。
packet_count: int # Opus 包数量。
AudioRecordResult
file_index: int # V2.001.0002.0001 的 0x050A 录音索引。
LiveAudioSubscription
enabled: bool # 设备确认的实时录音订阅状态。
LiveAudioStart
session_id: int # 实时录音会话。
record_time: int # 录音时间戳,单位秒。
sample_rate: int # 固定为 16000。
channels: int # 1 或 2,与设备录音设置一致。
codec: int # 固定为 3,表示 Opus。
LiveAudioData
session_id: int
sequence: int # 包序号,从 0 开始。
byte_offset: int # Opus 数据字节偏移,从 0 开始。
data: bytes # 一个 20 ms Opus 包,声道数与录音开始事件一致。
LivePcmFrame
session_id: int
sample_offset: int # 每声道采样位置,从 0 开始;不是压缩字节偏移。
sample_count: int # 固定为每声道 320 个采样,即 20 ms。
data: bytes # 单声道 640 字节或双声道 1280 字节 s16le PCM,不含 WAV 文件头。
pcm_config: PcmConfig # 16 kHz、16 位,声道数与录音一致。
LiveAudioEnd
error_code: int
session_id: int
produced_bytes: int # 设备编码产生的 Opus 字节数。
sent_bytes: int # 设备已发送的 Opus 字节数。
dropped_frames: int # 设备丢弃的帧数。
LiveAudioRecording
start: LiveAudioStart
end: LiveAudioEnd
data: bytes # 完整 OP2C 文件,可直接解码或保存。
ProgressPrinter
# 可作为 download_audio_file(progress=...) 的进度回调。
六轴和事件类型¶
SensorStartInfo
sample_rate_hz: int # 设备返回的采样率。
accel_range_g: int # 加速度计量程。
gyro_range_dps: int # 陀螺仪量程。
SensorStopInfo
# 停止六轴上报的成功结果;当前没有字段。
SensorDataSample
timestamp_ms: int # 设备侧采样时间戳,单位 ms。
accel_x: int # 加速度 X 轴原始值。
accel_y: int # 加速度 Y 轴原始值。
accel_z: int # 加速度 Z 轴原始值。
gyro_x: int # 陀螺仪 X 轴原始值。
gyro_y: int # 陀螺仪 Y 轴原始值。
gyro_z: int # 陀螺仪 Z 轴原始值。
SensorDataBatch
sequence_start: int # 本批第一个采样点序号。
frame_count: int # 本批采样点数量。
sample_size: int # 单个采样点字节数,当前为 16。
samples: tuple[SensorDataSample, ...] # 批量采样点;第 n 个样本序号为 sequence_start + n。
SensorDoubleTapEvent
timestamp_ms: int # 普通双击事件时间戳。
SensorKeyDoublePressEvent
timestamp_ms: int # 本固件发送秒级设备时间;SDK 保留此历史字段名。
SensorKeySinglePressEvent
timestamp_ms: int # 本固件发送秒级设备时间;SDK 保留此历史字段名。
重连后应重新调用 start_sensor_report()。本地采集是否自动恢复取决于固件实现,不能从连接状态推断。
本机 IMU 软件校准类型¶
ImuCalibration
sensor_type: int # 0 表示未知,不猜测芯片型号
accel_range_g: int
gyro_range_dps: int
accel_bias_ug: tuple[int, int, int]
accel_scale_ppm: tuple[int, int, int] # 单位增益为 (1000000, 1000000, 1000000)
gyro_bias_udps: tuple[int, int, int]
ImuCalibrationProfile
device_key: str # 规范化本机设备标识的 SHA-256
firmware_version: str # 精确匹配完整固件版本,不使用版本范围
model: str
calibration: ImuCalibration
accel_validated: bool
gyro_validated: bool
created_at: str # 带时区的 ISO 8601 时间
CalibratedImuSample
timestamp_ms: int
accel_g: tuple[float, float, float]
gyro_dps: tuple[float, float, float]
CalibratedImuBatch
sequence_start: int
frame_count: int
samples: tuple[CalibratedImuSample, ...]
applied_components: tuple[str, ...] # 例如 ("accel",) 或 ("accel", "gyro")
FirmwareBundle 固件包元数据¶
inspect_firmware_bundle() 验签成功后返回的不可变对象,包含 version、model、board、profile、security_version、source_versions、signing_key_id 和内部 OTA 字节 payload。manifest 属性每次返回完整已验证清单的字典副本,便于展示或输出 JSON;修改副本不会影响升级数据。离线验签不包含设备适配检查。