// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// The messages in this file comprise the DBus/Protobuf interface for
// rmad.
syntax = "proto3";

package rmad;
option optimize_for = LITE_RUNTIME;

// Defined error codes.
enum RmadErrorCode {
  // 0 is the default value. It should never be used.
  RMAD_ERROR_NOT_SET = 0;

  // No error.
  RMAD_ERROR_OK = 1;

  // No error, and wait for a signal.
  RMAD_ERROR_WAIT = 2;

  // TODO(chenghan): Deprecated, remove it in the future.
  // Need a reboot to continue.
  RMAD_ERROR_NEED_REBOOT = 3;

  // Expect a reboot soon.
  RMAD_ERROR_EXPECT_REBOOT = 4;

  // Expect a shutdown soon.
  RMAD_ERROR_EXPECT_SHUTDOWN = 5;

  // The device is not in RMA mode.
  RMAD_ERROR_RMA_NOT_REQUIRED = 6;

  // No corresponding state handler for a state.
  RMAD_ERROR_STATE_HANDLER_MISSING = 7;

  // State handler initialization failed.
  RMAD_ERROR_STATE_HANDLER_INITIALIZATION_FAILED = 8;

  // The request could not be processed (e.g. bad proto).
  RMAD_ERROR_REQUEST_INVALID = 9;

  // The request is missing mandatory arguments.
  RMAD_ERROR_REQUEST_ARGS_MISSING = 10;

  // The request arguments are violating some rules of the state.
  RMAD_ERROR_REQUEST_ARGS_VIOLATION = 11;

  // It is not possible to transition state at this point.
  RMAD_ERROR_TRANSITION_FAILED = 12;

  // Failed to abort the RMA process.
  RMAD_ERROR_ABORT_FAILED = 13;

  // An expected component was not found.
  RMAD_ERROR_MISSING_COMPONENT = 14;

  // Cannot get the RSU challenge code.
  RMAD_ERROR_WRITE_PROTECT_DISABLE_RSU_NO_CHALLENGE = 15;

  // The RSU code was incorrect.
  RMAD_ERROR_WRITE_PROTECT_DISABLE_RSU_CODE_INVALID = 16;

  // The battery was not disconnected when WP disable was required.
  RMAD_ERROR_WRITE_PROTECT_DISABLE_BATTERY_NOT_DISCONNECTED = 17;

  // WP was not disabled when required.
  RMAD_ERROR_WRITE_PROTECT_DISABLE_SIGNAL_NOT_DETECTED = 18;

  // File could not be downloaded because a network connection was unavailable.
  RMAD_ERROR_REIMAGING_DOWNLOAD_NO_NETWORK = 19;

  // File download did not complete because of a network error.
  RMAD_ERROR_REIMAGING_DOWNLOAD_NETWORK_ERROR = 20;

  // The user cancelled the file download.
  RMAD_ERROR_REIMAGING_DOWNLOAD_CANCELLED = 21;

  // No valid USB device with a Chrome OS image was found.
  RMAD_ERROR_REIMAGING_USB_NOT_FOUND = 22;

  // More than one USB device with a Chrome OS image was found.
  RMAD_ERROR_REIMAGING_USB_TOO_MANY_FOUND = 23;

  // The Chrome OS image found was corrupt.
  RMAD_ERROR_REIMAGING_USB_INVALID_IMAGE = 24;

  // The image could not be written.
  RMAD_ERROR_REIMAGING_IMAGING_FAILED = 25;

  // An unexpected failure prevented imaging from completing.
  RMAD_ERROR_REIMAGING_UNKNOWN_FAILURE = 26;

  // The device info is incorrect.
  RMAD_ERROR_DEVICE_INFO_INVALID = 27;

  // Calibration component is missing.
  RMAD_ERROR_CALIBRATION_COMPONENT_MISSING = 28;

  // Calibration status is missing.
  RMAD_ERROR_CALIBRATION_STATUS_MISSING = 29;

  // Calibration component cannot be calibrated.
  RMAD_ERROR_CALIBRATION_COMPONENT_INVALID = 30;

  // Calibration failed for a component.
  RMAD_ERROR_CALIBRATION_FAILED = 31;

  // Provisioning failed for the device.
  RMAD_ERROR_PROVISIONING_FAILED = 32;

  // Device could not be powerwashed.
  RMAD_ERROR_POWERWASH_FAILED = 33;

  // Device finalization failed.
  RMAD_ERROR_FINALIZATION_FAILED = 34;

  // Logs failed to upload because the server could not be reached.
  RMAD_ERROR_LOG_UPLOAD_FTP_SERVER_CANNOT_CONNECT = 35;

  // Logs failed to upload because the server refused the connection.
  RMAD_ERROR_LOG_UPLOAD_FTP_SERVER_CONNECTION_REJECTED = 36;

  // Logs failed to upload because the connection was interrupted.
  RMAD_ERROR_LOG_UPLOAD_FTP_SERVER_TRANSFER_FAILED = 37;

  // It is not possible to cancel RMA finalization process at this point.
  RMAD_ERROR_CANNOT_CANCEL_RMA = 38;

  // Failed to get logs.
  RMAD_ERROR_CANNOT_GET_LOG = 39;

  // TODO(genechang): Legacy, remove it in the future.
  RMAD_ERROR_MISSING_CALIBRATION_COMPONENT = 40;
}

// Defined Rmad components.
enum RmadComponent {
  RMAD_COMPONENT_UNKNOWN = 0;
  // runtime_probe supported components.
  RMAD_COMPONENT_AUDIO_CODEC = 1;
  RMAD_COMPONENT_BATTERY = 2;
  RMAD_COMPONENT_STORAGE = 3;
  RMAD_COMPONENT_VPD_CACHED = 4;
  RMAD_COMPONENT_NETWORK = 5;  // Obsolete in M91.
  RMAD_COMPONENT_CAMERA = 6;
  RMAD_COMPONENT_STYLUS = 7;
  RMAD_COMPONENT_TOUCHPAD = 8;
  RMAD_COMPONENT_TOUCHSCREEN = 9;
  RMAD_COMPONENT_DRAM = 10;
  RMAD_COMPONENT_DISPLAY_PANEL = 11;
  RMAD_COMPONENT_CELLULAR = 12;
  RMAD_COMPONENT_ETHERNET = 13;
  RMAD_COMPONENT_WIRELESS = 14;
  // Additional rmad components.
  RMAD_COMPONENT_SCREEN = 15;
  RMAD_COMPONENT_BASE_ACCELEROMETER = 16;
  RMAD_COMPONENT_LID_ACCELEROMETER = 17;
  RMAD_COMPONENT_GYROSCOPE = 18;
  // Reserved for additional runtime_probe supported components.
  reserved 19 to 32;
  // Mainboard rework is a special case.
  RMAD_COMPONENT_MAINBOARD_REWORK = 33;
  // Irrelevant components.
  // TODO(chenghan): Do we really need these?
  RMAD_COMPONENT_KEYBOARD = 34;
  RMAD_COMPONENT_POWER_BUTTON = 35;

  // TODO(genechang): Remove legacy part
  RMAD_COMPONENT_ACCELEROMETER = 36;  // Legacy
}

// Defined Rmad states.

// Confirm RMA is required.
message WelcomeState {
  // This enum is not really necessary. This acts as a confirmation that the
  // client wants to start RMA, To cancel RMA, the client should call |AbortRma|
  // method instead.
  enum FinalizeChoice {
    RMAD_CHOICE_UNKNOWN = 0;
    RMAD_CHOICE_FINALIZE_REPAIR = 1;
    // TODO(chenghan): Deprecated. Remove it in the future.
    RMAD_CHOICE_CANCEL = 2;
  }
  FinalizeChoice choice = 1;
}

// Legacy state. Keep it to be compatible with Chrome.
// TODO(gavindodd): Remove it in the future.
// Request for optional connection to Wifi when no network is connected.
message SelectNetworkState {
  enum Network {
    RMAD_NETWORK_UNKNOWN = 0;
    RMAD_NETWORK_USER_DECLINED = 1;
    RMAD_NETWORK_CONNECTED = 2;
  }
  Network connection_state = 1;
}

// Legacy state. Keep it to be compatible with Chrome.
// TODO(gavindodd): Remove it in the future.
// Update Chrome
message UpdateChromeState {
  enum UpdateState {
    RMAD_UPDATE_STATE_UNKNOWN = 0;
    RMAD_UPDATE_STATE_COMPLETE = 1;
    RMAD_UPDATE_STATE_UPDATE = 2;
    RMAD_UPDATE_STATE_SKIP = 3;
  }
  UpdateState update = 1;
}

// Select components that have been repaired.
message ComponentsRepairState {
  message ComponentRepairStatus {
    // Legacy enum. Keep it to be compatible with Chrome.
    // TODO(chenghan): Remove it in the future.
    enum Component {
      RMAD_COMPONENT_UNKNOWN = 0;
      // runtime_probe supported components.
      RMAD_COMPONENT_AUDIO_CODEC = 1;
      RMAD_COMPONENT_BATTERY = 2;
      RMAD_COMPONENT_STORAGE = 3;
      RMAD_COMPONENT_VPD_CACHED = 4;
      RMAD_COMPONENT_NETWORK = 5;  // Obsolete in M91.
      RMAD_COMPONENT_CAMERA = 6;
      RMAD_COMPONENT_STYLUS = 7;
      RMAD_COMPONENT_TOUCHPAD = 8;
      RMAD_COMPONENT_TOUCHSCREEN = 9;
      RMAD_COMPONENT_DRAM = 10;
      RMAD_COMPONENT_DISPLAY_PANEL = 11;
      RMAD_COMPONENT_CELLULAR = 12;
      RMAD_COMPONENT_ETHERNET = 13;
      RMAD_COMPONENT_WIRELESS = 14;
      // Additional rmad components.
      RMAD_COMPONENT_GYROSCOPE = 15;
      RMAD_COMPONENT_ACCELEROMETER = 16;
      RMAD_COMPONENT_SCREEN = 17;
      // Reserved for additional runtime_probe supported components.
      reserved 18 to 32;
      // TODO(chenghan): Deprecated; Mainboard rework is a special case.
      RMAD_COMPONENT_MAINBOARD_REWORK = 33;
      // Irrelevant components.
      // TODO(chenghan): Do we really need these?
      RMAD_COMPONENT_KEYBOARD = 34;
      RMAD_COMPONENT_POWER_BUTTON = 35;
    }
    enum RepairStatus {
      RMAD_REPAIR_STATUS_UNKNOWN = 0;
      RMAD_REPAIR_STATUS_ORIGINAL = 1;
      RMAD_REPAIR_STATUS_REPLACED = 2;
      RMAD_REPAIR_STATUS_MISSING = 3;
    }
    RmadComponent component = 1;
    RepairStatus repair_status = 2;
    // TODO(chenghan): The followings are for compatibility. Remove them in the
    //                 future.
    enum RepairState {
      RMAD_REPAIR_UNKNOWN = 0;
      RMAD_REPAIR_ORIGINAL = 1;
      RMAD_REPAIR_REPLACED = 2;
      RMAD_REPAIR_MISSING = 3;
    }
    Component name = 3;
    RepairState repair_state = 4;
  }
  // TODO(chenghan): Rename back to |components|.
  repeated ComponentRepairStatus component_repair = 1;
  // TODO(chenghan): Legacy, remove it in the future.
  repeated ComponentRepairState components = 2;

  bool mainboard_rework = 3;
}

// Select whether the device is returning to original owner or being wiped for
// a new owner.
message DeviceDestinationState {
  enum Destination {
    RMAD_DESTINATION_UNKNOWN = 0;
    RMAD_DESTINATION_SAME = 1;
    RMAD_DESTINATION_DIFFERENT = 2;
  }
  Destination destination = 1;
}

// Select the method to use to disable hardware write protection (HWWP).
// TODO(gavindodd): Implement signal that updates Chrome on the HWWP state.
message WriteProtectDisableMethodState {
  enum DisableMethod {
    RMAD_WP_DISABLE_UNKNOWN = 0;
    RMAD_WP_DISABLE_RSU = 1;
    RMAD_WP_DISABLE_PHYSICAL = 2;
  }
  DisableMethod disable_method = 1;
}

// Disable HWWP with an RSU unlock code.
message WriteProtectDisableRsuState {
  // Provided by daemon.
  bool rsu_done = 1;
  string challenge_code = 2;
  string hwid = 3;
  string challenge_url = 4;
  // Provided by client.
  string unlock_code = 5;
}

// Verify if RSU succeeds.
message VerifyRsuState {
  bool success = 1;
}

// Wait for tech to physically disable HWWP.
message WriteProtectDisablePhysicalState {
  // No state. Waits for signal that write protection is disabled.
}

// Display confirmation that HWWP has been disabled.
message WriteProtectDisableCompleteState {
  // Provided by daemon.
  bool keep_device_open = 1;
}

// Select method to update firmware.
message UpdateRoFirmwareState {
  enum UpdateFirmware {
    RMAD_UPDATE_FIRMWARE_UNKNOWN = 0;
    RMAD_UPDATE_FIRMWARE_DOWNLOAD = 1;
    RMAD_UPDATE_FIRMWARE_RECOVERY_UTILITY = 2;
    RMAD_UPDATE_SKIP = 3;
  }
  bool optional = 1;  // If optional is set true by rmad then skip is allowed.
  UpdateFirmware update = 2;
}

// Pause RMA for restock.
// This state pauses the RMA flow and asks if the device is ready to complete
// RMA.
// When the main board is used in another device RMA can be completed.
message RestockState {
  enum RestockChoice {
    RMAD_RESTOCK_UNKNOWN = 0;
    RMAD_RESTOCK_SHUTDOWN_AND_RESTOCK = 1;
    RMAD_RESTOCK_CONTINUE_RMA = 2;
  }
  RestockChoice choice = 1;
}

// Allow device info to be updated if necessary.
message UpdateDeviceInfoState {
  // Chosen serial number of device.
  string serial_number = 1;
  // Chosen region index for the current choice. See region_list below.
  uint32 region_index = 2;
  // Chosen SKU index of device. See sku_list below.
  uint32 sku_index = 3;
  // Read only data.
  // List of all valid regions for this device.
  repeated string region_list = 4;
  // List of all valid skus for this device.
  repeated string sku_list = 5;
  // Serial number of device at beginning of RMA finalization.
  string original_serial_number = 6;
  // Region index of device at beginning of RMA finalization.
  uint32 original_region_index = 7;
  // SKU index of device at beginning of RMA finalization.
  uint32 original_sku_index = 8;
}

// Calibration Component and status used in all calibration-related
// states (CheckCalibration, SetupCalibration, RunCalibration).
message CalibrationComponentStatus {
  enum CalibrationStatus {
    RMAD_CALIBRATION_UNKNOWN = 0;
    RMAD_CALIBRATION_WAITING = 1;
    RMAD_CALIBRATION_IN_PROGRESS = 2;
    RMAD_CALIBRATION_COMPLETE = 3;
    RMAD_CALIBRATION_FAILED = 4;
    RMAD_CALIBRATION_SKIP = 5;
  }

  RmadComponent component = 1;
  CalibrationStatus status = 2;

  // The progress of calibration.
  // Waitting: 0.0, In progress: [0.0, 1.0),
  // Complete: 1.0, Failed: -1.0, Skip: 1.0
  double progress = 3;
}

message CheckCalibrationState {
  // Legacy. Keep it to be compatible with Chrome.
  message CalibrationStatus {
    enum Component {
      RMAD_CALIBRATION_COMPONENT_UNKNOWN = 0;
      // Legacy state. Keep it to be compatible with Chrome.
      // TODO(genechang): Remove it in the future.
      RMAD_CALIBRATION_COMPONENT_ACCELEROMETER = 1;

      // TODO(genechang): Migrate to generic component
      RMAD_CALIBRATION_COMPONENT_GYROSCOPE = 2;
      RMAD_CALIBRATION_COMPONENT_BASE_ACCELEROMETER = 3;
      RMAD_CALIBRATION_COMPONENT_LID_ACCELEROMETER = 4;
    }

    enum Status {
      RMAD_CALIBRATE_UNKNOWN = 0;
      RMAD_CALIBRATE_WAITING = 1;
      RMAD_CALIBRATE_IN_PROGRESS = 2;
      RMAD_CALIBRATE_COMPLETE = 3;
      RMAD_CALIBRATE_FAILED = 4;
      RMAD_CALIBRATE_SKIP = 5;
    }

    Component name = 1;
    Status status = 2;
  }

  // TODO(genechang): Legacy, remove it in the future.
  repeated CalibrationStatus components = 1;
  // TODO(genechang): Rename back to |components|.
  repeated CalibrationComponentStatus calibration_components = 2;
}

// Wait for technician to setup device to be ready for calibration.
message SetupCalibrationState {
  // No state. Waits for the technician to check the setup.
}

// Wait for calibration.
message RunCalibrationState {
  // No state. Waits for the calibration of the devices.
}

// Provision the device.
message ProvisionDeviceState {
  // Enum for ProvisioningProgress signal.
  enum ProvisioningStep {
    // TODO(gavindodd): Update with real provisioning steps.
    RMAD_PROVISIONING_STEP_UNKNOWN = 0;
    RMAD_PROVISIONING_STEP_IN_PROGRESS = 1;
    RMAD_PROVISIONING_STEP_COMPLETE = 2;
  }

  // No state. Waits for signal that provisioning is complete.
}

// Allow the tech to re-enable HWWP after it was physically disabled.
message WriteProtectEnablePhysicalState {
  // No state. Waits for signal that write protection is re-enabled.
}

// RMA complete. Allow tech to choose how to shut down.
message FinalizeState {
  enum ShutdownMethod {
    RMAD_FINALIZE_UNKNOWN = 0;
    RMAD_FINALIZE_REBOOT = 1;
    RMAD_FINALIZE_SHUTDOWN = 2;
    RMAD_FINALIZE_BATERY_CUTOFF = 3;
  }
  ShutdownMethod shutdown = 1;
  // TODO(gavindodd): The log (or path to log) could be stored in a field of
  // this proto, or it could be a separate d-bus method.
}

// Legacy state. Keep it to be compatible with Chrome.
// TODO(chenghan): Remove it in the future.
message ComponentRepairState {
  enum Component {
    RMAD_COMPONENT_UNKNOWN = 0;
    // runtime_probe supported components.
    RMAD_COMPONENT_AUDIO_CODEC = 1;
    RMAD_COMPONENT_BATTERY = 2;
    RMAD_COMPONENT_STORAGE = 3;
    RMAD_COMPONENT_VPD_CACHED = 4;
    RMAD_COMPONENT_NETWORK = 5;  // Obsolete in M91.
    RMAD_COMPONENT_CAMERA = 6;
    RMAD_COMPONENT_STYLUS = 7;
    RMAD_COMPONENT_TOUCHPAD = 8;
    RMAD_COMPONENT_TOUCHSCREEN = 9;
    RMAD_COMPONENT_DRAM = 10;
    RMAD_COMPONENT_DISPLAY_PANEL = 11;
    RMAD_COMPONENT_CELLULAR = 12;
    RMAD_COMPONENT_ETHERNET = 13;
    RMAD_COMPONENT_WIRELESS = 14;
    // Additional rmad components.
    RMAD_COMPONENT_GYROSCOPE = 15;
    RMAD_COMPONENT_ACCELEROMETER = 16;
    RMAD_COMPONENT_SCREEN = 17;
    // Reserved for additional runtime_probe supported components.
    reserved 18 to 32;
    // Mainboard rework is a special case.
    RMAD_COMPONENT_MAINBOARD_REWORK = 33;
    // Irrelevant components.
    // TODO(chenghan): Do we really need these?
    RMAD_COMPONENT_KEYBOARD = 34;
    RMAD_COMPONENT_POWER_BUTTON = 35;
    RMAD_COMPONENT_TRACKPAD = 36;
    RMAD_COMPONENT_THUMB_READER = 37;
  }
  enum RepairState {
    RMAD_REPAIR_UNKNOWN = 0;
    RMAD_REPAIR_ORIGINAL = 1;
    RMAD_REPAIR_REPLACED = 2;
    RMAD_REPAIR_MISSING = 3;
  }
  Component name = 1;
  RepairState repair_state = 2;
}

// Legacy state. Keep it to be compatible with Chrome.
// TODO(chenghan): Remove it in the future.
message CalibrateComponentsState {
  enum CalibrationComponent {
    RMAD_CALIBRATION_COMPONENT_UNKNOWN = 0;
    RMAD_CALIBRATION_COMPONENT_ACCELEROMETER = 1;
  }
}

message RmadState {
  oneof state {
    WelcomeState welcome = 1;
    // Legacy state. Keep it to be compatible with Chrome.
    // TODO(gavindodd): Remove it in the future.
    SelectNetworkState select_network = 2;
    // Legacy state. Keep it to be compatible with Chrome.
    // TODO(gavindodd): Remove it in the future.
    UpdateChromeState update_chrome = 3;
    ComponentsRepairState components_repair = 4;
    DeviceDestinationState device_destination = 5;
    WriteProtectDisableMethodState wp_disable_method = 6;
    WriteProtectDisableRsuState wp_disable_rsu = 7;
    VerifyRsuState verify_rsu = 8;
    WriteProtectDisablePhysicalState wp_disable_physical = 9;
    WriteProtectDisableCompleteState wp_disable_complete = 10;
    UpdateRoFirmwareState update_ro_firmware = 11;
    RestockState restock = 12;
    UpdateDeviceInfoState update_device_info = 13;
    CheckCalibrationState check_calibration = 14;
    SetupCalibrationState setup_calibration = 15;
    RunCalibrationState run_calibration = 16;
    ProvisionDeviceState provision_device = 17;
    WriteProtectEnablePhysicalState wp_enable_physical = 18;
    FinalizeState finalize = 19;
    // Legacy state.
    CalibrateComponentsState calibrate_components = 20;
  }
}

// Request from client to get next state.
message TransitionNextStateRequest {
  RmadState state = 1;
}

// Reply for GetCurrentState, GetNextState, GetPreviousState.
message GetStateReply {
  RmadErrorCode error = 1;
  RmadState state = 2;
  bool can_go_back = 3;
  bool can_abort = 4;
}

// Reply for AbortRma.
message AbortRmaReply {
  RmadErrorCode error = 1;
}

// Reply for GetLog.
message GetLogReply {
  RmadErrorCode error = 1;
  string log = 2;
}
