package m9z import ( "fmt" ) // 版本信息结构体(类似SunRiseSet的设计) type VersionInfo struct { Version string // 版本号,如"v4.5" RawByte byte // 原始字节值,如0x45 } // ReadVersion 读取设备固件版本号(风格与SunRiseSetRead保持一致) func ReadVersion(deviceId string) (*VersionInfo, error) { var versionReadCmd = []byte{0xEE, 0x0E, 0x01, 0x00, 0x06, 0x00, 0x50, 0x01, 0x01, 0x08, 0x20, 0x00, 0xC2, 0xFF} cmdRespData, err := pushCommand(deviceId, versionReadCmd, "读取设备版本号") if err != nil { return nil, err } frame, err := ParseFrame(cmdRespData) if err != nil { return nil, err } response := frame.(*ReadResponse) data := response.Data // 校验数据长度(版本号应为1字节,参考协议中"数据项"格式) if len(data) < 1 { return nil, fmt.Errorf("版本数据长度不足,期望至少1字节,实际%v字节", len(data)) } // 解析版本字节(核心逻辑:高4位为主版本,低4位为次版本) versionByte := data[23] mainVersion := (versionByte >> 4) & 0x0F // 提取高4位 subVersion := versionByte & 0x0F // 提取低4位 // 构造版本信息结构体 versionInfo := &VersionInfo{ Version: fmt.Sprintf("v%d.%d", mainVersion, subVersion), RawByte: versionByte, } return versionInfo, nil }