use hidpp::protocol::v20::{ErrorType, Hidpp20Error};
pub use openlogi_core::hid::{HidppFeatureErrorKind, HidppOperation, WriteError};
fn hidpp_feature_error_kind(kind: ErrorType) -> HidppFeatureErrorKind {
match kind {
ErrorType::NoError => HidppFeatureErrorKind::NoError,
ErrorType::Unknown => HidppFeatureErrorKind::Unknown,
ErrorType::InvalidArgument => HidppFeatureErrorKind::InvalidArgument,
ErrorType::OutOfRange => HidppFeatureErrorKind::OutOfRange,
ErrorType::HwError => HidppFeatureErrorKind::HwError,
ErrorType::LogitechInternal => HidppFeatureErrorKind::LogitechInternal,
ErrorType::InvalidFeatureIndex => HidppFeatureErrorKind::InvalidFeatureIndex,
ErrorType::InvalidFunctionId => HidppFeatureErrorKind::InvalidFunctionId,
ErrorType::Busy => HidppFeatureErrorKind::Busy,
ErrorType::Unsupported => HidppFeatureErrorKind::Unsupported,
_ => HidppFeatureErrorKind::Unrecognized,
}
}
pub(crate) fn classify_hidpp_error(
error: Hidpp20Error,
operation: HidppOperation,
feature_hex: u16,
) -> WriteError {
match error {
Hidpp20Error::Feature(kind) => WriteError::HidppFeature {
operation,
feature_hex,
kind: hidpp_feature_error_kind(kind),
},
Hidpp20Error::UnsupportedResponse => WriteError::UnsupportedResponse {
operation,
feature_hex,
},
Hidpp20Error::Channel(error) => WriteError::Hidpp(format!("{error:?}")),
_ => WriteError::Hidpp(format!("{error:?}")),
}
}
pub(crate) fn classify_hid_error(error: &async_hid::HidError) -> WriteError {
WriteError::Hid(error.to_string())
}