// 三青鸟SDK通信协议——定义

syntax = "proto3";

// 包名
package sanqingniaopb;

// 引入公共消息定义
import "message_common.proto";

// 生成的go文件包名
option go_package = ".;sanqingniaopb";
// 生成的C#文件命名空间
option csharp_namespace = "Sixelp.SanQingNiaoPb";
// 生成Java文件的包名
option java_multiple_files = true;
option java_package = "com.sixelp.sanqingniaopb";

/******************************** 公共响应相关定义 ****************************************/

// StatusCode 状态码定义
enum StatusCode {
	// 未知异常
	ErrUnknow = 0;
	// 成功
	Success = 1;

	// 设备PCI网卡已被禁用
	ErrPciNetCardDisabled = 1000;
	// 设备相机异常
	ErrCamera = 1001;
	// 图像解码失败
	ErrImageDecode = 1002;
	// 图像编码失败
	ErrImageEncode = 1003;
	// 网络异常，请联网
	ErrNetwork = 1004;
	// 云服务器异常
	ErrCloudServer = 1005;
	// 输入参数异常
	ErrInputParam = 1006;
	// 导出学习数据为空
	ErrExportLearnDataEmpty = 1007;

	// 设备未激活
	ErrDeviceNotActivate = 1500;
	// 设备激活状态已过期
	ErrDeviceActivateExpire = 1501;
	// 设备系统时间异常
	ErrDeviceSystemTime = 1503;
	// 设备禁止重复试用
	ErrDeviceRepeatFreeTrial = 1504;

	// 二郎神算法异常
	ErrErLangShenAlgo = 2000;

	// 白泽算法异常
	ErrBaiZeAlgo = 2500;
}

/******************************** 版本信息相关接口 ****************************************/

// GetVersionReply 获取版本信息
message GetVersionReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// GetVersionReply_Data 声明响应数据结构
	message Data {
		// 版本信息列表
		repeated VersionInfo versionList = 1;
	}
	// 响应数据
	Data data = 3;
}

// GetLatestVersionReply 获取最新版本
message GetLatestVersionReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// GetLatestVersionReply_Data 声明响应数据结构
	message Data {
		// 版本更新类型
		VersionUpdateType updateType = 1;
		// 更新内容
		string updateContent = 2;
		// 版本列表
		repeated VersionDownloadInfo versionList = 3;
	}
	// 响应数据
	Data data = 3;
}

/******************************** 高级配置相关接口 ****************************************/

// AdvancedConfigGetReply 高级配置-获取
message AdvancedConfigGetReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// AdvancedConfigGetReply_Data 声明响应数据结构
	message Data {
		// 配置项键名
		AdvancedConfigKey key = 1;
		// 值字段
		oneof value {
			// 双精度浮点型值
			double doubleVal = 2;
			// 单精度浮点型值
			float floatVal = 3;
			// 有符号32位整型值
			int32 int32Val = 4;
			// 有符号64位整型值
			int64 int64Val = 5;
			// 无符号32位整型值
			uint32 uint32Val = 6;
			// 无符号64位整型值
			uint64 uint64Val = 7;
			// 布尔型值
			bool boolVal = 8;
			// 字符串型值
			string stringVal = 9;
			// 字节切片/字节数组型值
			bytes bytesVal = 10;
		}
	}
	// 响应数据
	Data data = 3;
}

// AdvancedConfigSetReply 高级配置-修改
message AdvancedConfigSetReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

/******************************** 相机管理相关接口 ****************************************/

// CameraEnumReply 相机-枚举
message CameraEnumReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// CameraEnumReply_Data 声明响应数据结构
	message Data {
		// 相机列表
		repeated CameraInfo cameraList = 1;
		// 当前使用的相机ID
		string id = 2;
		// 当前使用的相机图像分辨率
		CameraResolutionInfo resolutionInfo = 3;
	}
	// 响应数据
	Data data = 3;
}

// CameraChangeReply 相机-切换
message CameraChangeReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

// CameraFrameReply 相机-图像帧
message CameraFrameReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// CameraFrameReply_Data 声明响应数据结构
	message Data {
		// 图像数据
		bytes imageData = 1;
		// 图像原始宽度
		uint32 imageWidth = 2;
		// 图像原始高度
		uint32 imageHeight = 3;
	}
	// 响应数据
	Data data = 3;
}

// CameraDetectRangeGetReply 相机-识别区域获取
message CameraDetectRangeGetReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// CameraDetectRangeGetReply_Data 声明响应数据结构
	message Data {
		// 实际渲染宽度（单位：像素）
		uint32 renderWidth = 1;
		// 实际渲染高度（单位：像素）
		uint32 renderHeight = 2;
		// 识别区域坐标列表（原点为图像左上角，坐标均为换算后的实际渲染值）
		repeated PlanePositionInfo dotList = 3;
	}
	// 响应数据
	Data data = 3;
}

// CameraDetectRangeSetReply 相机-识别区域修改
message CameraDetectRangeSetReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

/******************************** 设备管理相关接口 ****************************************/

// DeviceGetInfoReply 设备-获取信息
message DeviceGetInfoReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// DeviceGetInfoReply_Data 声明响应数据结构
	message Data {
		// 设备信息
		DeviceInfo deviceInfo = 1;
	}
	// 响应数据
	Data data = 3;
}

// DeviceFreeTrialReply 设备-免费试用
message DeviceFreeTrialReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

// DeviceActivateReply 设备-激活
message DeviceActivateReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// DeviceActivateReply_Data 声明响应数据结构
	message Data {
		// 设备信息
		DeviceInfo deviceInfo = 1;
	}
	// 响应数据
	Data data = 3;
}

// DeviceShopChangeReply 设备-门店修改
message DeviceShopChangeReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

/******************************** 智能识别相关接口 ****************************************/

// AiPushWeightReply 智能识别-推送重量信息
message AiPushWeightReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

// AiImageDetectIgnoreSetReply 智能识别-图像检测过滤设置
message AiImageDetectIgnoreSetReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// AiImageDetectIgnoreSetReply_Data 声明响应数据结构
	message Data {
		// 图片HTTP访问路径
		string path = 1;
	}
	// 响应数据
	Data data = 3;
}

// AiListenResultReply 智能识别-监听识别结果
message AiListenResultReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// AiListenResultReply_Data 声明响应数据结构
	message Data {
		// 识别ID
		int64 id = 1;
		// 识别结果列表
		repeated SkuInfo skuList = 2;
		// 透传数据，该数据来源于重量推送接口
		string transparentData = 3;
	}
	// 响应数据
	Data data = 3;
}

// AiRegisterResultCallbackReply 智能识别-注册识别结果回调
message AiRegisterResultCallbackReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

// AiLearningReply 智能识别-学习
message AiLearningReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

// AiFastLearningReply 智能识别-快速学习
message AiFastLearningReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// AiFastLearningReply_Data 声明响应数据结构
	message Data {
		// 商品特征图像信息
		SkuFeatImageInfo featImg = 1;
	}
	// 响应数据
	Data data = 3;
}

/******************************** 商品特征相关接口 ****************************************/

// SkuFeatQueryImageReply 商品特征-查询图像
message SkuFeatQueryImageReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// SkuFeatQueryImageReply_Data 声明响应数据结构
	message Data {
		// 商品特征图像列表
		repeated SkuFeatImageInfo featImgList = 1;
	}
	// 响应数据
	Data data = 3;
}

// SkuFeatQueryReply 商品特征-批量查询特征信息
message SkuFeatQueryReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// SkuFeatQueryReply_Data 声明响应数据结构
	message Data {
		// 商品特征数量列表
		repeated SkuFeatNumberInfo featNumList = 1;
	}
	// 响应数据
	Data data = 3;
}

// SkuFeatRemoveReply 商品特征-移除指定商品的指定特征
message SkuFeatRemoveReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

// SkuFeatClearReply 商品特征-清除指定商品的所有特征
message SkuFeatClearReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

/******************************** 学习数据相关接口 ****************************************/

// LearnDataImportReply 学习数据-导入
message LearnDataImportReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// LearnDataImportReply_Data 声明响应数据结构
	message Data {
		// 成功导入数量
		int64 successCount = 1;
	}
	// 响应数据
	Data data = 3;
}

// LearnDataExportReply 学习数据-导出
message LearnDataExportReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// LearnDataExportReply_Data 声明响应数据结构
	message Data {
		// 成功导出数量
		int64 successCount = 1;
		// 本次导出的时间节点
		int64 nodeTimestamp = 2;
		// 学习数据
		bytes data = 3;
	}
	// 响应数据
	Data data = 3;
}

// LearnDataUploadReply 学习数据-上传
message LearnDataUploadReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

// LearnDataClearReply 学习数据-清空
message LearnDataClearReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

/******************************** 算法模型相关接口 ****************************************/

// AlgoModelEnumReply 算法模型-枚举
message AlgoModelEnumReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// AlgoModelEnumReply_Data 声明响应数据结构
	message Data {
		// 模型列表
		repeated AlgoModelInfo modelList = 1;
		// 当前使用的模型
		AlgoModelInfo model = 2;
	}
	// 响应数据
	Data data = 3;
}

// AlgoModelChangeReply 算法模型-切换
message AlgoModelChangeReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

/******************************** 商品数据相关接口 ****************************************/

// SkuDataImportReply 商品数据-导入
message SkuDataImportReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

// SkuDataDeleteReply 商品数据-删除
message SkuDataDeleteReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

// SkuDataIconMatchReply 商品数据-主图匹配
message SkuDataIconMatchReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// SkuDataIconMatchReply_Data 声明响应数据结构
	message Data {
		// ICON下载路径前缀
		string downloadUrlPrefix = 1;
		// 商品ICON信息列表
		repeated SkuIconInfo skuIconList = 2;
	}
	// 响应数据
	Data data = 3;
}

/******************************** 自动同步相关接口 ****************************************/

// AutoSyncGetSelfInfoParams 自动同步-获取本机信息
message AutoSyncGetSelfInfoReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// AutoSyncGetSelfInfoReply_Data 声明响应数据结构
	message Data {
		// 本机SN
		string deviceSN = 1;
		// 本机主机名
		string hostName = 2;
		// 本机系统类型
		SystemType systemType = 3;
		// 本机使用的算法模型代号
		uint32 algoModelCode = 4;
		// 本机所属分组ID
		string groupID = 5;
		// 本机所属分组名称
		string groupName = 6;
		// 本机数据同步规则
		AutoSyncDataSyncRule dataSyncRule = 7;
		// 本机数据拉取规则
		LearnDataExportMode dataPullRule = 8;
		// 本机数据导入规则
		LearnDataImportMode dataImportRule = 9;
		// 分组信息最新更新时间(毫秒时间戳)
		uint64 groupUpdateAt = 10;
		// 本机广播时间间隔（秒）
		uint32 broadcastInterval = 11;
		// 本机数据拉取间隔（分）
		uint32 pullInterval = 12;
	}
	// 响应数据
	Data data = 3;
}

// AutoSyncGetGroupsInfoParams 自动同步-获取分组表信息
message AutoSyncGetGroupsInfoReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
	// AutoSyncGetGroupsInfoReply_Data 声明响应数据结构
	message Data {
		// 分组表
		repeated AutoSyncGroupInfo groups = 1;
	}
	// 响应数据
	Data data = 3;
}

// AutoSyncRemoveDeviceParams 自动同步-移除设备
message AutoSyncRemoveDeviceReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

// AutoSyncJoinGroupParams 自动同步-加入分组
message AutoSyncJoinGroupReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

// AutoSyncExitGroupParams 自动同步-退出分组
message AutoSyncExitGroupReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

// AutoSyncSetIntervalTimeParams 自动同步-设置同步时间间隔
message AutoSyncSetIntervalTimeReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

// AutoSyncUpdateDataSyncRuleParams 自动同步-更新数据同步规则
message AutoSyncUpdateDataSyncRuleReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

// AutoSyncCreateGroupParams 自动同步-创建分组
message AutoSyncCreateGroupReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

// AutoSyncUpdateGroupNameParams 自动同步-更新分组名称
message AutoSyncUpdateGroupNameReply {
	// 状态码
	StatusCode code = 1;
	// 状态描述
	string msg = 2;
}

