use crate::proto::StopSession;
use crate::proto::desktop::{
IsLockedRequest, StatusSubscribeRequest, StatusUnsubscribeRequest, UnlockRequest,
};
use crate::proto::gpio::{
GetOtgMode, GetPinMode, ReadPin, SetInputPull, SetOtgMode, SetPinMode, WritePin,
};
use crate::proto::gui::{
SendInputEventRequest, StartScreenStreamRequest, StartVirtualDisplayRequest,
StopScreenStreamRequest, StopVirtualDisplayRequest,
};
use crate::proto::property::GetRequest;
use crate::proto::storage::{MkdirRequest, StatRequest};
use crate::proto::system::{
DeviceInfoRequest, FactoryResetRequest, PingRequest, PlayAudiovisualAlertRequest,
ProtobufVersionRequest, RebootRequest, SetDateTimeRequest,
};
use crate::proto::{
self, CommandStatus,
app::{
AppButtonPressReleaseRequest, AppButtonPressRequest, AppButtonReleaseRequest,
AppExitRequest, AppLoadFileRequest, DataExchangeRequest, GetErrorRequest,
LockStatusRequest, StartRequest,
},
storage::{
BackupCreateRequest, BackupRestoreRequest, DeleteRequest, InfoRequest, ListRequest,
Md5sumRequest, ReadRequest, RenameRequest, TarExtractRequest, TimestampRequest,
WriteRequest,
},
system::{DateTime, UpdateRequest, reboot_request::RebootMode},
};
#[derive(Debug)]
#[non_exhaustive]
pub enum Request {
StopSession,
Ping(Vec<u8>),
Reboot(RebootMode),
SystemDeviceInfo,
SystemFactoryReset,
SystemGetDatetime,
SystemSetDatetime(DateTime),
PlayAvAlert,
SystemProtobufVersion,
SystemUpdate(UpdateRequest),
SystemPowerInfo,
StorageInfo(InfoRequest),
StorageTimestamp(TimestampRequest),
StorageMetadata(String),
StorageList(ListRequest),
StorageRead(String),
StorageWrite(WriteRequest),
StorageDelete(DeleteRequest),
StorageMkdir(String),
StorageMd5sum(String),
StorageRename(String, String),
StorageBackupCreate(String),
StorageBackupRestore(String),
StorageTarExtract(String, String),
AppStart(StartRequest),
AppLockStatus(LockStatusRequest),
AppExit(AppExitRequest),
AppLoadFile(AppLoadFileRequest),
AppButtonPress(AppButtonPressRequest),
AppButtonRelease(AppButtonReleaseRequest),
AppButtonPressRelease(AppButtonPressReleaseRequest),
AppGetError(GetErrorRequest),
AppDataExchange(DataExchangeRequest),
GuiStartScreenStream(StartScreenStreamRequest),
GuiStopScreenStream(StopScreenStreamRequest),
GuiSendInputEvent(SendInputEventRequest),
GuiStartVirtualDisplay(StartVirtualDisplayRequest),
GuiStopVirtualDisplay(StopVirtualDisplayRequest),
GpioSetPinMode(SetPinMode),
GpioSetInputPull(SetInputPull),
GpioGetPinMode(GetPinMode),
GpioReadPin(ReadPin),
GpioWritePin(WritePin),
GpioGetOtgMode(GetOtgMode),
GpioSetOtgMode(SetOtgMode),
PropertyGet(GetRequest),
DesktopIsLocked(IsLockedRequest),
DesktopUnlock(UnlockRequest),
DesktopStatusSubscribe(StatusSubscribeRequest),
DesktopStatusUnsubscribe(StatusUnsubscribeRequest),
}
impl Request {
pub fn into_rpc(self, command_id: u32) -> proto::Main {
use proto::main::Content;
proto::Main {
command_id,
command_status: CommandStatus::Ok.into(),
has_next: false,
content: Some(match self {
Request::StopSession => Content::StopSession(StopSession {}),
Request::Ping(data) => Content::SystemPingRequest(PingRequest { data }),
Request::Reboot(reboot_mode) => Content::SystemRebootRequest(RebootRequest {
mode: reboot_mode.into(),
}),
Request::SystemDeviceInfo => Content::SystemDeviceInfoRequest(DeviceInfoRequest {}),
Request::SystemFactoryReset => {
Content::SystemFactoryResetRequest(FactoryResetRequest {})
}
Request::SystemGetDatetime => {
Content::SystemGetDatetimeRequest(crate::proto::system::GetDateTimeRequest {})
}
Request::SystemSetDatetime(date_time) => {
Content::SystemSetDatetimeRequest(SetDateTimeRequest {
datetime: Some(date_time),
})
}
Request::PlayAvAlert => {
Content::SystemPlayAudiovisualAlertRequest(PlayAudiovisualAlertRequest {})
}
Request::SystemProtobufVersion => {
Content::SystemProtobufVersionRequest(ProtobufVersionRequest {})
}
Request::SystemUpdate(update_req) => Content::SystemUpdateRequest(update_req),
Request::SystemPowerInfo => {
Content::SystemPowerInfoRequest(crate::proto::system::PowerInfoRequest {})
}
Request::StorageInfo(req) => Content::StorageInfoRequest(req),
Request::StorageTimestamp(req) => Content::StorageTimestampRequest(req),
Request::StorageMetadata(path) => Content::StorageStatRequest(StatRequest { path }),
Request::StorageList(req) => Content::StorageListRequest(req),
Request::StorageRead(path) => Content::StorageReadRequest(ReadRequest { path }),
Request::StorageWrite(req) => Content::StorageWriteRequest(req),
Request::StorageDelete(req) => Content::StorageDeleteRequest(req),
Request::StorageMkdir(path) => Content::StorageMkdirRequest(MkdirRequest { path }),
Request::StorageMd5sum(path) => {
Content::StorageMd5sumRequest(Md5sumRequest { path })
}
Request::StorageRename(from, to) => Content::StorageRenameRequest(RenameRequest {
old_path: from,
new_path: to,
}),
Request::StorageBackupCreate(archive_path) => {
Content::StorageBackupCreateRequest(BackupCreateRequest { archive_path })
}
Request::StorageBackupRestore(archive_path) => {
Content::StorageBackupRestoreRequest(BackupRestoreRequest { archive_path })
}
Request::StorageTarExtract(tar, out) => {
Content::StorageTarExtractRequest(TarExtractRequest {
tar_path: tar,
out_path: out,
})
}
Request::AppStart(req) => Content::AppStartRequest(req),
Request::AppLockStatus(req) => Content::AppLockStatusRequest(req),
Request::AppExit(req) => Content::AppExitRequest(req),
Request::AppLoadFile(req) => Content::AppLoadFileRequest(req),
Request::AppButtonPress(req) => Content::AppButtonPressRequest(req),
Request::AppButtonRelease(req) => Content::AppButtonReleaseRequest(req),
Request::AppButtonPressRelease(req) => Content::AppButtonPressReleaseRequest(req),
Request::AppDataExchange(req) => Content::AppDataExchangeRequest(req),
Request::AppGetError(req) => Content::AppGetErrorRequest(req),
Request::GuiStartScreenStream(req) => Content::GuiStartScreenStreamRequest(req),
Request::GuiStopScreenStream(req) => Content::GuiStopScreenStreamRequest(req),
Request::GuiSendInputEvent(req) => Content::GuiSendInputEventRequest(req),
Request::GuiStartVirtualDisplay(req) => Content::GuiStartVirtualDisplayRequest(req),
Request::GuiStopVirtualDisplay(req) => Content::GuiStopVirtualDisplayRequest(req),
Request::GpioSetPinMode(req) => Content::GpioSetPinMode(req),
Request::GpioSetInputPull(req) => Content::GpioSetInputPull(req),
Request::GpioGetPinMode(req) => Content::GpioGetPinMode(req),
Request::GpioReadPin(req) => Content::GpioReadPin(req),
Request::GpioWritePin(req) => Content::GpioWritePin(req),
Request::GpioGetOtgMode(req) => Content::GpioGetOtgMode(req),
Request::GpioSetOtgMode(req) => Content::GpioSetOtgMode(req),
Request::PropertyGet(req) => Content::PropertyGetRequest(req),
Request::DesktopIsLocked(req) => Content::DesktopIsLockedRequest(req),
Request::DesktopUnlock(req) => Content::DesktopUnlockRequest(req),
Request::DesktopStatusSubscribe(req) => Content::DesktopStatusSubscribeRequest(req),
Request::DesktopStatusUnsubscribe(req) => {
Content::DesktopStatusUnsubscribeRequest(req)
}
}),
}
}
}