blob: f9fb567baada6ed1d4eb0051bcbf808108b4e6f9 [file] [log] [blame]
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
use crate::uci::uci_hrcv::UciResponse;
use crate::uci::{BlockingJNICommand, HalCallback, JNICommand};
use android_hardware_uwb::aidl::android::hardware::uwb::UwbStatus::UwbStatus;
use std::array::TryFromSliceError;
use tokio::sync::{mpsc, oneshot};
#[derive(Debug, thiserror::Error)]
pub enum UwbErr {
#[error("UWBStatus error: {0:?}")]
Status(UwbStatus),
#[error("Binder error: {0}")]
Binder(#[from] binder::Status),
#[error("JNI error: {0}")]
Jni(#[from] jni::errors::Error),
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
#[error("SendError for JNICommand: {0}")]
SendJNICommand(#[from] mpsc::error::SendError<JNICommand>),
#[error("SendError for BlockingJNICommand: {0}")]
SendBlockingJNICommand(
#[from] mpsc::error::SendError<(BlockingJNICommand, oneshot::Sender<UciResponse>)>,
),
#[error("SendError for HalCallback: {0}")]
SendHalCallback(#[from] mpsc::error::SendError<HalCallback>),
#[error("RecvError: {0}")]
RecvError(#[from] oneshot::error::RecvError),
#[error("Could not parse: {0}")]
Parse(#[from] uwb_uci_packets::Error),
#[error("Could not specialize: {0:?}")]
Specialize(Vec<u8>),
#[error("Could not convert: {0:?}")]
ConvertToArray(#[from] TryFromSliceError),
#[error("The dispatcher does not exist")]
NoneDispatcher,
#[error("Exit")]
Exit,
#[error("Unknown error")]
Undefined,
}
impl UwbErr {
pub fn failed() -> Self {
UwbErr::Status(UwbStatus::FAILED)
}
pub fn refused() -> Self {
UwbErr::Status(UwbStatus::REFUSED)
}
}