更新proto
This commit is contained in:
@@ -8,13 +8,13 @@ http://git.huangwc.com/pig/pig-farm-controller/issues/71
|
||||
|
||||
# 开发计划
|
||||
|
||||
## Lora 监听逻辑重构
|
||||
|
||||
- [x] [Lora逻辑重构](design/ota-upgrade-and-log-monitoring/lora_refactoring_plan.md)
|
||||
|
||||
## OTA 升级
|
||||
|
||||
- [x] 增加一个proto对象, 用于封装ota升级包
|
||||
- [x] 区域主控增加版本号
|
||||
- [x] 增加ping指令并获取带版本号的响应
|
||||
- [ ] [实现ota升级逻辑](design/ota-upgrade-and-log-monitoring/ota_upgrade_solution.md)
|
||||
|
||||
## Lora 监听逻辑重构
|
||||
|
||||
- [x] [Lora逻辑重构](design/ota-upgrade-and-log-monitoring/lora_refactoring_plan.md)
|
||||
|
||||
@@ -93,7 +93,6 @@ message PrepareUpdateReq {
|
||||
message RequestFile {
|
||||
string task_id = 1; // 升级任务ID
|
||||
string filepath = 2; // 请求的文件路径 (例如 "/manifest.json" 或 "/main.py")
|
||||
uint32 retry_count = 3; // 设备请求该文件的重试次数
|
||||
}
|
||||
|
||||
// FileResponse: 平台响应设备请求,发送单个文件的完整内容
|
||||
@@ -106,9 +105,8 @@ message FileResponse {
|
||||
|
||||
// UpdateStatusReport: 设备向平台报告升级状态
|
||||
message UpdateStatusReport {
|
||||
string device_id = 1; // 设备ID
|
||||
string task_id = 2; // 升级任务ID
|
||||
string current_version = 3; // 操作完成后的当前版本
|
||||
string task_id = 1; // 升级任务ID
|
||||
string current_version = 2; // 操作完成后的当前版本
|
||||
enum Status {
|
||||
STATUS_UNKNOWN = 0;
|
||||
|
||||
@@ -121,9 +119,9 @@ message UpdateStatusReport {
|
||||
// --- 平台推断的状态 (数据库记录用) ---
|
||||
FAILED_TIMEOUT = 5; // 平台在超时后仍未收到SUCCESS报告,将任务标记为此状态
|
||||
}
|
||||
Status status = 4; // 升级的最终状态
|
||||
string error_message = 6; // 人类可读的详细错误信息
|
||||
string failed_file = 7; // 失败时关联的文件路径 (可选)
|
||||
Status status = 3; // 升级的最终状态
|
||||
string error_message = 4; // 人类可读的详细错误信息
|
||||
string failed_file = 5; // 失败时关联的文件路径 (可选)
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,24 +4,6 @@ package device;
|
||||
|
||||
option go_package = "internal/domain/device/proto";
|
||||
|
||||
// --- 日志相关 ---
|
||||
|
||||
// LogLevel 定义了日志的严重级别。
|
||||
enum LogLevel {
|
||||
LOG_LEVEL_UNSPECIFIED = 0; // 未指定
|
||||
DEBUG = 1; // 调试信息
|
||||
INFO = 2; // 普通信息
|
||||
WARN = 3; // 警告
|
||||
ERROR = 4; // 错误
|
||||
}
|
||||
|
||||
// LogEntry 代表一条由设备生成的日志记录。
|
||||
message LogEntry {
|
||||
int64 timestamp_unix = 1; // 日志生成的Unix时间戳 (秒)
|
||||
LogLevel level = 2; // 日志级别
|
||||
string message = 3; // 日志内容
|
||||
}
|
||||
|
||||
// --- 核心指令与数据结构 ---
|
||||
|
||||
// 平台生成的原始485指令,单片机直接发送到总线
|
||||
@@ -47,32 +29,6 @@ message CollectResult {
|
||||
repeated float values = 2; // 按预定顺序排列的采集值
|
||||
}
|
||||
|
||||
// OTA(空中下载)升级指令,包含完整的固件包。
|
||||
message OtaUpgradeCommand {
|
||||
string firmware_version = 1; // 目标固件版本, e.g., "v1.2.3"
|
||||
string firmware_hash = 2; // 固件包的SHA-256哈希值,用于完整性校验
|
||||
bytes firmware_package = 3; // 完整的固件二进制文件
|
||||
}
|
||||
|
||||
// 设备端执行OTA升级后的状态报告 (上行)。
|
||||
message OtaUpgradeStatus {
|
||||
// 状态码: 0=成功, 1=哈希校验失败, 2=烧录失败, 3=空间不足, 99=其他未知错误
|
||||
int32 status_code = 1;
|
||||
// 设备当前运行的固件版本 (升级后或升级失败时)
|
||||
string current_firmware_version = 2;
|
||||
}
|
||||
|
||||
// 控制设备日志上传的指令 (下行)。
|
||||
message ControlLogUploadCommand {
|
||||
bool enable = 1; // true = 开始上传, false = 停止上传
|
||||
uint32 duration_seconds = 2; // 指定上传持续时间(秒)。
|
||||
}
|
||||
|
||||
// 设备用于向平台批量上传日志的请求 (上行)。
|
||||
message LogUploadRequest {
|
||||
repeated LogEntry entries = 1; // 一批日志条目
|
||||
}
|
||||
|
||||
// 平台向设备发送的Ping指令,用于检查存活性。
|
||||
message Ping {
|
||||
// 可以留空,指令本身即代表意图
|
||||
@@ -85,6 +41,48 @@ message Pong {
|
||||
// 可以扩展更多状态, e.g., int32 uptime_seconds = 2;
|
||||
}
|
||||
|
||||
// --- OTA 升级相关 ---
|
||||
|
||||
// PrepareUpdateReq: 平台发送给设备,通知设备准备开始 OTA 升级 (下行)
|
||||
message PrepareUpdateReq {
|
||||
string version = 1; // 新固件版本号
|
||||
string task_id = 2; // 升级任务唯一ID
|
||||
string manifest_md5 = 3; // 清单文件的 MD5 校验和,用于设备初步校验清单文件完整性
|
||||
}
|
||||
|
||||
// RequestFile: 设备向平台请求特定文件 (包括清单文件和固件文件) (上行)
|
||||
message RequestFile {
|
||||
string task_id = 1; // 升级任务ID
|
||||
string filepath = 2; // 请求的文件路径 (例如 "/manifest.json" 或 "/main.py")
|
||||
}
|
||||
|
||||
// FileResponse: 平台响应设备请求,发送单个文件的完整内容 (下行)
|
||||
// LoRa 传输层会自动处理分片和重组,因此应用层可以直接发送完整的单个文件内容
|
||||
message FileResponse {
|
||||
string task_id = 1; // 升级任务ID
|
||||
string filepath = 2; // 设备上的目标路径 (例如 "/manifest.json" 或 "/main.py")
|
||||
bytes content = 3; // 文件的完整内容
|
||||
}
|
||||
|
||||
// UpdateStatusReport: 设备向平台报告升级状态 (上行)
|
||||
message UpdateStatusReport {
|
||||
string task_id = 1; // 升级任务ID
|
||||
string current_version = 2; // 操作完成后的当前版本
|
||||
enum Status {
|
||||
STATUS_UNSPECIFIED = 0; // 未指定,protobuf3 要求枚举从0开始
|
||||
SUCCESS = 1; // 升级成功,新固件已运行
|
||||
SUCCESS_ALREADY_UP_TO_DATE = 2; // 版本已是最新,未执行升级
|
||||
FAILED_PRE_CHECK = 3; // 升级前检查失败 (例如拒绝降级、准备分区失败)
|
||||
FAILED_MANIFEST_VERIFY = 4; // 清单文件下载或校验失败
|
||||
FAILED_DOWNLOAD = 5; // 固件文件下载或校验失败
|
||||
FAILED_ROLLED_BACK = 6; // 新固件启动失败,已自动回滚
|
||||
FAILED_TIMEOUT = 7; // 平台在超时后仍未收到SUCCESS报告,将任务标记为此状态 (平台推断)
|
||||
}
|
||||
Status status = 3; // 升级的最终状态
|
||||
string error_message = 4; // 人类可读的详细错误信息
|
||||
string failed_file = 5; // 失败时关联的文件路径 (可选)
|
||||
}
|
||||
|
||||
|
||||
// --- 顶层指令包装器 ---
|
||||
|
||||
@@ -95,14 +93,14 @@ message Instruction {
|
||||
// --- 下行指令 (平台 -> 设备) ---
|
||||
Raw485Command raw_485_command = 1;
|
||||
BatchCollectCommand batch_collect_command = 2;
|
||||
OtaUpgradeCommand ota_upgrade_command = 3;
|
||||
ControlLogUploadCommand control_log_upload_command = 4;
|
||||
Ping ping = 6;
|
||||
Ping ping = 3;
|
||||
PrepareUpdateReq prepare_update_req = 4;
|
||||
FileResponse file_response = 5;
|
||||
|
||||
// --- 上行数据 (设备 -> 平台) ---
|
||||
CollectResult collect_result = 101;
|
||||
OtaUpgradeStatus ota_upgrade_status = 102;
|
||||
LogUploadRequest log_upload_request = 103;
|
||||
Pong pong = 104;
|
||||
Pong pong = 102;
|
||||
RequestFile request_file = 103;
|
||||
UpdateStatusReport update_status_report = 104;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user