syntax = "proto3";

package aimdk.protocol;

import "aimdk/protocol/ota/fota_slave/fota_slave_api.proto";

/**
 * @brief FOTA Slave Service
 */
service FotaSlaveService {
    /**
     * @brief OTA 开始文件上传服务
     */
    rpc FotaStartFileUpload(FotaStartFileUploadRequest) returns (FotaStartFileUploadResponse);

    /**
     * @brief OTA 文件上传服务
     */
    rpc FotaUploadFile(FotaUploadFileRequest) returns (FotaUploadFileResponse);

    /**
     * @brief OTA 结束文件上传服务
     */
    rpc FotaFinishFileUpload(FotaFinishFileUploadRequest) returns (FotaFinishFileUploadResponse);

    /**
     * @brief OTA 开始 fota 服务
     */
    rpc FotaStartOTA(FotaStartOTARequest) returns (FotaStartOTAResponse);

    /**
     * @brief OTA 继续 fota 服务
     */
    rpc FotaContinue(FotaContinueOTARequest) returns (FotaContinueOTAResponse);

    /**
     * @brief OTA 重试回滚
     */
    rpc FotaRetryRollback(FotaRetryRollbackRequest) returns (FotaRetryRollbackResponse);

    /**
     * @brief 查询当前 fota 进度
     */
    rpc GetCurrentFotaProcess(GetCurrentFotaProcessRequest) returns (GetCurrentFotaProcessResponse);

    /**
     * @brief 重置 FOTA 状态。
     *
     * @details 在开始文件传输之前，需要查询 FOTA 的当前状态。
     * - 当 FOTA 处于以下状态时，可以进行状态重置：
     *   - Idle 状态
     *   - Pause 状态
     *   - Failure 状态
     *   - FotaStage_Upgrading_Success 状态
     *   - FotaStage_Rollbacking_Success 状态
     * - 如果 FOTA 处于以下状态，ota_master 将持续等待：
     *   - Upgrading 状态
     *   - Rollbacking 状态
     *
     * @note aima 会重置 ota_master 的状态。
     */
    rpc ResetFotaStatus(ResetFotaStatusRequest) returns (ResetFotaStatusResponse);
}
