syntax = "proto3";

package vehicle.ota.up;

// 升级通知（协议 8.3.1）
message VehicleOtaUp {
  string task_id = 1;       // 任务id
  int32 task_status = 2;    // 任务状态 0正常 1暂停 2取消

  int64 timestamp = 3;      // 请求时间戳（毫秒）
  int64 exec_time = 4;      // 任务开始执行时间

  Strategy strategy = 20;   // 策略

  // 升级包列表
  repeated UpgradePackage packages = 30;
}

// 策略
message Strategy {
  string id = 1;              // 策略id
  int64 create_time = 2;      // 策略创建时间
  int32 up_type = 3;          // 0升级 1回滚

  // 前置条件
  Preconditions preconditions = 4;
  // 下载失败最大重试次数
  int32 download_retry_count = 5;
  // 刷写失败最大重试次数
  int32 flash_retry_count = 6;
  // 升级模式 0静默 1提醒 2强制
  int32 up_mode = 7;

  // 升级分组集合如:["包id1,包id2","包id3"]（组内并行，组间串行）
  repeated string upgrade_groups = 10;
  // 回滚分组
  repeated string rollback_groups = 11;
  string desc = 20; // 升级描述
}

// 前置条件
message Preconditions {
  int32 min_battery_percent = 1;  // 最低电量要求（百分比）
  int32 exercise_status = 2;      // 行使状态 0驻车 1行使
  int32 min_network_quality = 3;  // 0任意 1弱 2良好 3优秀
}

// 升级包信息
message UpgradePackage {
  string package_id = 1;         // 升级包 ID
  string ecu = 2;                // ECU
  string ecu_hardware_code = 3;  // ECU 硬件编号
  string target_version = 4;     // 目标版本
  string from_version = 5;       // 最低允许版本（可空）
  string from_max_version = 6;   // 最高允许版本（可空）
  string download_url = 10;      // 下载地址
  string sha256 = 11;            // 整包 SHA256
  int64 size = 12;               // 包大小字节
}
