blob: 8278f00f1cb0682c74757b4b9e4252ac2422be61 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/ui/input/lib/hid-input-report/axis.h"
namespace hid_input_report {
fuchsia_input_report::wire::Unit HidUnitToLlcppUnit(hid::unit::UnitType unit) {
fuchsia_input_report::wire::Unit out_unit;
out_unit.type = fuchsia_input_report::wire::UnitType::kNone;
out_unit.exponent = 0;
switch (unit) {
case hid::unit::UnitType::None:
return out_unit;
case hid::unit::UnitType::Distance:
out_unit.type = fuchsia_input_report::wire::UnitType::kMeters;
out_unit.exponent = -6;
return out_unit;
case hid::unit::UnitType::Weight:
out_unit.type = fuchsia_input_report::wire::UnitType::kGrams;
out_unit.exponent = -3;
return out_unit;
case hid::unit::UnitType::Rotation:
out_unit.type = fuchsia_input_report::wire::UnitType::kDegrees;
out_unit.exponent = -3;
return out_unit;
case hid::unit::UnitType::AngularVelocity:
out_unit.type = fuchsia_input_report::wire::UnitType::kEnglishAngularVelocity;
out_unit.exponent = -3;
return out_unit;
case hid::unit::UnitType::LinearVelocity:
out_unit.type = fuchsia_input_report::wire::UnitType::kSiLinearVelocity;
out_unit.exponent = -3;
return out_unit;
case hid::unit::UnitType::Acceleration:
out_unit.type = fuchsia_input_report::wire::UnitType::kSiLinearAcceleration;
out_unit.exponent = -3;
return out_unit;
case hid::unit::UnitType::MagneticFlux:
out_unit.type = fuchsia_input_report::wire::UnitType::kWebers;
out_unit.exponent = -6;
return out_unit;
case hid::unit::UnitType::Light:
out_unit.type = fuchsia_input_report::wire::UnitType::kCandelas;
out_unit.exponent = 0;
return out_unit;
case hid::unit::UnitType::Pressure:
out_unit.type = fuchsia_input_report::wire::UnitType::kPascals;
out_unit.exponent = -3;
return out_unit;
case hid::unit::UnitType::Lux:
out_unit.type = fuchsia_input_report::wire::UnitType::kLux;
out_unit.exponent = -6;
return out_unit;
default:
out_unit.type = fuchsia_input_report::wire::UnitType::kOther;
out_unit.exponent = 0;
return out_unit;
}
}
zx_status_t HidSensorUsageToLlcppSensorType(hid::usage::Sensor usage,
fuchsia_input_report::wire::SensorType* type) {
switch (usage) {
case hid::usage::Sensor::kAccelerationAxisX:
*type = fuchsia_input_report::wire::SensorType::kAccelerometerX;
break;
case hid::usage::Sensor::kAccelerationAxisY:
*type = fuchsia_input_report::wire::SensorType::kAccelerometerY;
break;
case hid::usage::Sensor::kAccelerationAxisZ:
*type = fuchsia_input_report::wire::SensorType::kAccelerometerZ;
break;
case hid::usage::Sensor::kMagneticFluxAxisX:
*type = fuchsia_input_report::wire::SensorType::kMagnetometerX;
break;
case hid::usage::Sensor::kMagneticFluxAxisY:
*type = fuchsia_input_report::wire::SensorType::kMagnetometerY;
break;
case hid::usage::Sensor::kMagneticFluxAxisZ:
*type = fuchsia_input_report::wire::SensorType::kMagnetometerZ;
break;
case hid::usage::Sensor::kAngularVelocityX:
*type = fuchsia_input_report::wire::SensorType::kGyroscopeX;
break;
case hid::usage::Sensor::kAngularVelocityY:
*type = fuchsia_input_report::wire::SensorType::kGyroscopeY;
break;
case hid::usage::Sensor::kAngularVelocityZ:
*type = fuchsia_input_report::wire::SensorType::kGyroscopeZ;
break;
case hid::usage::Sensor::kLightIlluminance:
*type = fuchsia_input_report::wire::SensorType::kLightIlluminance;
break;
case hid::usage::Sensor::kLightRedLight:
*type = fuchsia_input_report::wire::SensorType::kLightRed;
break;
case hid::usage::Sensor::kLightBlueLight:
*type = fuchsia_input_report::wire::SensorType::kLightBlue;
break;
case hid::usage::Sensor::kLightGreenLight:
*type = fuchsia_input_report::wire::SensorType::kLightGreen;
break;
default:
return ZX_ERR_NOT_SUPPORTED;
}
return ZX_OK;
}
zx_status_t HidLedUsageToLlcppLedType(hid::usage::LEDs usage,
fuchsia_input_report::wire::LedType* type) {
switch (usage) {
case hid::usage::LEDs::kNumLock:
*type = fuchsia_input_report::wire::LedType::kNumLock;
break;
case hid::usage::LEDs::kCapsLock:
*type = fuchsia_input_report::wire::LedType::kCapsLock;
break;
case hid::usage::LEDs::kScrollLock:
*type = fuchsia_input_report::wire::LedType::kScrollLock;
break;
case hid::usage::LEDs::kCompose:
*type = fuchsia_input_report::wire::LedType::kCompose;
break;
case hid::usage::LEDs::kKana:
*type = fuchsia_input_report::wire::LedType::kKana;
break;
default:
return ZX_ERR_NOT_SUPPORTED;
}
return ZX_OK;
}
fuchsia_input_report::wire::Axis LlcppAxisFromAttribute(const hid::Attributes& attrs) {
fuchsia_input_report::wire::Axis axis;
axis.range.min = static_cast<int64_t>(
hid::unit::ConvertValToUnitType(attrs.unit, static_cast<double>(attrs.phys_mm.min)));
axis.range.max = static_cast<int64_t>(
hid::unit::ConvertValToUnitType(attrs.unit, static_cast<double>(attrs.phys_mm.max)));
axis.unit = HidUnitToLlcppUnit(hid::unit::GetUnitTypeFromUnit(attrs.unit));
return axis;
}
} // namespace hid_input_report